在信息论中常用互信息(MI,Mutual Information)来衡量两个词的相关度
1 | MI(X,Y) = log2p(x,y) / (p(x)p(y)) |
MI
越大,表示两个词之间的结合越紧密
- 当X,Y关联大时,MI(X,Y)大于0;
- 当X与Y关系弱时,MI(X,Y)等于0;
- 当MI(X,Y)小于0时,X与Y称为“互补关系”
这个算式看起来很直观,但计算还是有些麻烦,因为计算概率值p(x),p(y)都需要在语料中进行分词,这就涉及到词典的构成以及分词的算法
下面介绍一个简便而直观的算法:
假设一个文章集合 {C},总文章数目为N,其中含有单词X的文章总数为Nx,含有单词Y的文章总数是Ny,含有{X+Y}的文章总数是 Nxy
那么相关性这么计算
1 | Corr(X,Y) = Math.log10(N/Nx) * Math.log10(N/Ny) * Nxy / (Nx+Ny-Nxy) |
公式可以简化为
1 | Corr(X,Y) = Nxy / (Nx+Ny-Nxy) - (Nx*Ny) / (N*N) |
计算中可能会得到负相关,如果考虑到Nx,Ny都是小量,可以忽略,那么
1 | CorrAB = Nxy / (Nx+Ny-Nxy) |
至此,要计算相关度之间的全部要素都获得了
思考,那么到底 学校
和 学生
之间的相关度是多少呢?
我们利用google来回答这个问题吧:
1 | 约有91,700,000项符合学校的查询结果 |
1 | Corr{学校,学生} = 48900000 / (91700000+88200000-48900000) = 0.37 |