詞語相似度計算
當事物可以計算的時候就產生了智慧型
----alert
一、詞語相似度
詞義相似度計算在很多領域中都有廣泛的應用,例如資訊檢索、資訊抽取、文字分類、詞義排歧、基於例項的機器翻譯等等。國內很多**主要是基於同義詞林和知網來計算的。本文的詞語相似度計算是基於《同義詞詞林》的。
二、同義詞林介紹
《同義詞詞林》是梅家駒等人於2023年編纂而成,這本詞典中不僅包括了乙個詞語的同義詞, 也包含了一定數量的同類詞, 即廣義的相關。《同義詞詞林》的編寫年代久遠,之後沒有更新。哈工大花費了大量的人力物力完成了一部具有漢語大詞表的哈工大資訊檢索研究室《同義詞詞林擴充套件版》,《同義詞詞林擴充套件版》收錄詞語近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,
測試詞只能填乙個詞,多個比較詞由逗號分隔。
程式的計算結果如下:
《基於同義詞詞林的詞語相似度計算方法》**的計算結果如下:
成年人和市民跟這兩項的相似度有出入是因為使用的詞林版本中這兩個詞所在分支層的分支數不一樣所致。
詞語相似度處理過程(2)
整個處理過程遵照 教程的方式,中間穿插著使用了其他的方法,下面開始乙個個講解一下具體做實驗的過程 zhwiki latest pages articles.xml.bz2 2.對壓縮檔案的處理,根據帖子中的命令列,直接在同一級目錄下執行process wiki.py即可。輸入 python proc...
相似度計算
從多個維度分析兩組資料的相似度,比如大的文字使用word2vec轉成向量,類別根據最大的類別數量n拆成n維0或1表示的vector,數值型別歸一化之後表示乙個維度,然後根據cos l1 l2等方式計算相似度 可以用於推薦系統 協同過濾等演算法 注意double值的精度處理 將向量根據座標值,繪製到向...
相似度計算
author wepon blog machine learning in action 筆記,相似度計算,基於python numpy。假如我們希望相似度的值在0 1之間,並且越相似,值越大,有哪些辦法?1 計算歐式距離,然後根據 相似度 1 1 距離 計算相似度。2 皮爾遜相關係數,在numpy...