在信息论中常用互信息(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称为“互补关系”
这个算式看起来很直观,但计算还是有些麻烦,因为计算概率值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 |