词语相似度计算
当事物可以计算的时候就产生了智能
----Alert
一、词语相似度
词义相似度计算在很多领域中都有广泛的应用,例如信息检索、信息抽取、文本分类、词义排歧、基于实例的机器翻译等等。国内很多论文主要是基于同义词林和知网来计算的。本文的词语相似度计算是基于《同义词词林》的。
二、同义词林介绍
《同义词词林》是梅家驹等人于1983年编纂而成,这本词典中不仅包括了一个词语的同义词, 也包含了一定数量的同类词, 即广义的相关。《同义词词林》的编写年代久远,之后没有更新。哈工大花费了大量的人力物力完成了一部具有汉语大词表的哈工大信息检索研究室《同义词词林扩展版》,《同义词词林扩展版》收录词语近7万条。原版的《同义词词林》目录如下:
哈工大《同义词词林扩展版》保留《同义词词林》原有的三层分类体系,并在此基础上对词语继续细分类,增加两层,得到最终的五层分类体系,这样词典中的词语之间就体现了良好的层次关系,如下图表示的词语树形结构:
例如:“东南西北”的编码为Cb02A01=
C是第1层、b是第二层、02是第三层、A是第四层、01是第五层,=号有特殊的意义。
词语的编码规则如下:
表中的编码位是按照从左到右的顺序排列。第八位的标记有3种,分别是“=”、“#”、“@”, “=”代表“相等”、“同义”。末尾的“#”代表“不等”、“同类”,属于相关词语。末尾的“@”代表“自我封闭”、“独立”,它在词典中既没有同义词,也没有相关词。
三、词语相似度
定义1 语义相似度。给定两个词汇w1和w2,它们之间的相似度通过
Sim(w1,w2):S*S->[0,1],表示集合S中的两个词汇w1和w2的相似程度。
简单的说相似度函数是个值域在[0,1]间的函数。
本文的计算公式参考了《基于同义词词林的词语相似度计算方法》一文,相似度函数计算公式如下:
若两个义项的相似度用Sim表示,n表示所在分枝层分支数,k表示两个分支间的距离。
1.若两个义项不在同一查树上:
Sim(A,B) = f
如:人 Aa01A01=和 实物 Ba01A01=
2.若两个义项在同一查树上:
1) 若在第2层分支
Sim(A,B) = a*cos(n*pi/180)*[(n-k+1)/n]
如:人 Aa01A01= 和 少儿 Ab04B01=
由于A开头的编码个数为1309个,所以n=1309;在第2层,
人的编码是a,少儿的编码是b所以k=1
2) 若在第3层分支
Sim(A,B) = b*cos(n*pi/180)*[(n-k+1)/n]
如:人 Aa01A01= 和 老弟 Aa03A03=
Aa开头的编码个数为55个,所以n=55;第3层人的编码为01,老弟的编码为03,所以k=2
3) 若在第4层分支
Sim(A,B) = c*cos(n*pi/180)*[(n-k+1)/n]
4) 若在第5层分支
Sim(A,B) = d*cos(n*pi/180)*[(n-k+1)/n]
a、b、c、d、f参数由实验测得,程序里使用的参数如下:
a=0.65、b=0.8、c=0.9、d=0.96、f=0.1
一个词可能有多个编码,相似度的计算取最大值,如:
词语“骄傲”的编码有“Da13A01”,“Ee34D01”;“仔细”的编码有“Ee26A01”,“Ee28A01”。
分别计算相似度为:
Sim(Da13A01, Ee26A01)=0.1; Sim(Da13A01, Ee28A01)=0.1;
Sim(Ee34D01, Ee26A01)=0.483920;
Sim(Ee34D01, Ee28A01)=0.510077;
所以“骄傲”和“仔细”的相似度为0.510077
程序中的的测试词、比较词如果没在词林出现则相似度为0,
测试词只能填一个词,多个比较词由逗号分隔。
程序的计算结果如下:
《基于同义词词林的词语相似度计算方法》论文的计算结果如下:
成年人和市民跟这两项的相似度有出入是因为使用的词林版本中这两个词所在分支层的分支数不一样所致。
《基于同义词词林的词语相似度计算方法》论文地址http://wenku.baidu.com/view/0b1b7d5e804d2b160b4ec030.html
程序下载地址:
http://download.csdn.net/detail/huandaohack/4557989