詞語相似度計算
當事物可以計算的時候就產生了智能
----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