在信息论中常用互信息(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
2
3
约有91,700,000项符合学校的查询结果
约有88,200,000项符合学生的查询结果
约有48,900,000项符合学生/学校的查询结果
1
Corr{学校,学生} = 48900000 / (91700000+88200000-48900000) = 0.37