在信息论中常用互信息(MI,Mutual Information)来衡量两个词的相关度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称为“互补关系”
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,那么相关性这么计算
Corr(X,Y)= Math.log10(N/Nx)*Math.log10(N/Ny)*Nxy/(Nx+Ny-Nxy)
我写了一个程序进行测试,首先准备一个词典,然后准备大量语料,为检索方便,用lucence建索引,然后查询每个词与两个词交集的个数。测试汽车,前两百名结果非常好。测试一个不常见的词,如活性炭,得到的结果如下,还蛮不错的。
主关键词x | 关联词y | 关联词数Ny | 主关键词数Nx | 总文章数N | Nxy | Coorr(X,y) |
活性碳 | 不织布 | 16 | 72 | 1127199 | 9 | 2.316674 |
活性碳 | 回力胶 | 25 | 72 | 1127199 | 9 | 1.996593 |
活性碳 | 吸音棉 | 29 | 72 | 1127199 | 9 | 1.883334 |
活性碳 | 珍珠棉 | 31 | 72 | 1127199 | 9 | 1.831631 |
活性碳 | 滤袋 | 39 | 72 | 1127199 | 8 | 1.453371 |
活性碳 | 防尘网 | 59 | 72 | 1127199 | 9 | 1.32477 |
活性碳 | 云母片 | 26 | 72 | 1127199 | 6 | 1.26853 |
活性碳 | 压敏胶 | 27 | 72 | 1127199 | 6 | 1.250454 |
活性碳 | 超滤膜 | 19 | 72 | 1127199 | 4 | 0.92056 |
活性碳 | 海棉 | 119 | 72 | 1127199 | 9 | 0.82483 |
活性碳 | 反渗透 | 155 | 72 | 1127199 | 10 | 0.746471 |
活性碳 | 滤膜 | 47 | 72 | 1127199 | 4 | 0.639034 |
活性碳 | 电导仪 | 4 | 72 | 1127199 | 2 | 0.617857 |
活性碳 | 铜箔 | 100 | 72 | 1127199 | 6 | 0.614342 |
活性碳 | 糊精 | 52 | 72 | 1127199 | 4 | 0.606269 |
活性碳 | 铝粉 | 52 | 72 | 1127199 | 4 | 0.606269 |
活性碳 | 制冰机 | 27 | 72 | 1127199 | 3 | 0.605689 |
活性碳 | 水净化 | 219 | 72 | 1127199 | 10 | 0.554048 |
活性碳 | 滤芯 | 356 | 72 | 1127199 | 15 | 0.533304 |
活性碳 | ro膜 | 14 | 72 | 1127199 | 2 | 0.489964 |
活性碳 | 工业水 | 165 | 72 | 1127199 | 7 | 0.489529 |
活性碳 | 二氧化钛 | 83 | 72 | 1127199 | 4 | 0.459238 |