仲 遠 王 芳 黃樹成
(江蘇科技大學計算機學院 鎮(zhèn)江 212003)
詞匯相似度計算在現(xiàn)實生活中使用非常廣泛,如在機器翻譯、詞義消歧、信息檢索等諸多領域就發(fā)揮著極為重要的作用。例如在信息檢索領域中,詞匯相似度計算可以用來衡量用戶查詢內容和返回結果內容信息的匹配度,從而實現(xiàn)改進檢索效果,提高檢索結果內容準確率。
國內外的學者們對詞匯相似度已經有了大量的研究。在國內,田久樂等提出了基于同義詞詞林的詞匯相似度計算方法[1]。張小川等提出以詞語間第一基本義原相似度最高的概念組合為計算對象,并引入動態(tài)加權因子實現(xiàn)了對詞語語義相似度算法的改進[2]。金博提出基于語義理解的文本相似度算法[3]。李海林提出基于分類詞典的文本相似性度量方法[4]。
在國外,Aminul Islam 提出基于語料庫的語義相似度計算方法[5]。Junji Tomita 等提出利用基于圖形的文本表示模型來計算文本相似度[6]。
通過分析上述國內外學者的研究方法,可以將這些方法分為以下兩種[7]:一種是基于統(tǒng)計的方法,另一種是基于知識體系的方法?;诮y(tǒng)計的方法,相對客觀、全面地反映了詞匯所處的上下文,缺點是此方法以綜合訓練所使用的語料庫為依靠,且存在數(shù)據(jù)稀疏的問題。基于知識體系的方法是通過本體計算語義相似度,此方法簡單有效,但是準確性受語義詞典的規(guī)模和完備性影響較大。
針對上文中提到的不足,本文提出一種基于百度百科的多特征信息詞匯相似度計算方法。該方法經由百科名片、詞條正文,開放分類和相關詞條四個部分的內容,分別計算出它們之間的相似性值,以此來獲得一對詞匯間的整體相似性。
文中的詞匯相似度的概念并非完全指的是詞匯的意思相似度,在這里可以把它看作是一種近似于語義相關度的概念。假如衡量詞匯之間相似度的取值范圍在0 和1 之間,如果是0,表示兩個詞匯毫無關系,相似度很低;如果是1,則表示兩個詞匯間關系緊密,相似度很高?;橥x詞的兩個詞匯,如“舊金山”和“圣弗朗西斯科”,它們的詞匯相似度可以是1;而互為反義詞的兩個詞匯,如“嚴寒”和“酷暑”,它們之間的詞匯相似度也可以是1。但如果是兩個風馬牛不相及的詞匯,如“專家”和“沙發(fā)”,就可以認為它們之間的相似度很低,甚至可以將它們的相似度設為0。綜上,只要兩個詞匯之間存在很強的關聯(lián)性,由詞匯A很容易聯(lián)想到詞匯B,那么就可以認為詞匯A 和B 之間的相似度很高,否則相似度很低。
百度百科中的內容五花八門、包羅萬象。截止到2018 年10 月,百度百科已經含有15,598,605 個詞條,多達6,618,846 人參與了編寫詞條內容??梢哉f百度百科是目前為止規(guī)模最大、內容最全面的語料庫。百科詞條有四個部分在本文研究中發(fā)揮了重大作用,分別為名片、正文、開放分類、相關詞條。通過對詞條各部分內容的分析,可以得到許多有用的信息。
為了驗證本文提出方法的有效性,實驗中將本文方法與劉群等提出的基于《知網(wǎng)》的相似度計算方法SSCH 進行比較,所以在實驗中同樣采用了Words-240作為測試集。該測試集一共有240對中文詞匯,并且提供了詞對之間的語義相關度的參考值,用它來作為依據(jù),來衡量本文提出的中文詞匯相似度方法的有效性。詞匯之間相關性的考量值在0 和1 之間(如果值是1,則這兩個詞具有極強的關聯(lián)性;0則表示毫無聯(lián)系)。
詞條的百科是一段短文本,由它來對詞條進行簡略的描述。實驗中對這段短文本建立向量空間模型,然后使用余弦相似度的方法來計算這兩段短文本之間的文本相似度。
該方法的主要思想就是:通過衡量向量間夾角的大小的余弦值,來判斷兩個文本間的相似度。余弦值越大,相似度越高。其中兩邊之間的夾角的余弦計算公式為
當a 的向量坐標是(x1,y2),b 的向量坐標是(x1,y2),兩向量的夾角為θ,如果夾角為銳角時,向量a 和向量b 之間的關系如圖1所示。
圖1 向量a 和b
向量a 和向量b 的夾角的余弦計算如下:
當對式(2)進行擴展,即向量a 是(t1,t2,t3,…,tn),b 是(t1,t2,t3,…,tn) 的形式,式(2)依然可行。擴展后的公式可以寫為
式(3)中cos(θ)值的范圍是-1~1,為了便于比較,方法中將cos(θ)轉換為0~1:
余弦相似度主要由向量方向決定,向量數(shù)值對其影響很小。由于這一特點,所以在使用中會存在一些問題,需要進行修正。
觀眾對電影《碟中諜》進行評價,打分是10 分值,小明和小王對電影的評分分別為(2,4)和(8,10),直接使用式(3)和式(4)得到的結果是0.989,兩者對這部電影的喜好程度似乎相同。但實際情況是小明不喜歡《碟中諜》這個電影,小王很喜歡這個電影。余弦相似度對數(shù)值的不敏感的特性對結果產生很大的誤差,因此有時不能夠直接使用式(3)、式(4)對向量數(shù)值進行計算,必須對向量數(shù)值進行預處理后再進行計算,以實現(xiàn)對余弦相似度的修正。預處理方法是所有的向量數(shù)值都減去一個它們的平均值,比如小明和小王的評分均值是6,那么經預處理后為向量變?yōu)椋?4,-2)和(2,4),使用式(3)和式(4)后得到Sim1為0.1,顯然在對向量數(shù)值進行預處理后,再計算得到余弦值更符合實際情況。
計算過程中,將詞條名片的短文本當作是一組詞的集合。
Step1:對詞條A和B的百科名片短文本進行分詞等預處理,創(chuàng)建分詞向量Ta(t1,t2,…,tm),Tb(t1,t2,…,tn)。
Step2:統(tǒng)計每個詞在文本中出現(xiàn)的次數(shù)。寫出詞頻向量,并通過TF-IDF求權值。
Step3:使用式(3)和式(4)計算得到基于向量空間的百科名片相似度。
經研究發(fā)現(xiàn),余弦相似度算法在短文本中效果良好,但在長文本中存在一些不足,而SimHash 算法在長文本中有著出色的表現(xiàn)?;谠~條正文的文本內容多,篇幅大,因此實驗中在對詞條正文部分的計算中使用了SimHash算法。
SimHash 算法有五步:分詞、Hash、加權、合并、降維。具體過程如下所述。
Step1:對詞條正文進行預處理,建立分詞向量,并且需要為特征向量設置權重(權重可以是這個詞在正文中出現(xiàn)的頻數(shù))。例如給定一段語句:“慷慨就義重如泰山,或長流于世自甘墮落”,分詞后為:“慷慨就義,重如,泰山,或,長流,于世,自甘墮落”,然后為每個特征向量賦予權值:慷慨就義(5)、重如(3)、泰山(4)、或(1)、長流(2)、于世(2)、自甘墮落(5)。
Step2:Hash 計算,可以得到每個特征向量的Hash 值。假設Hash 值為二進制數(shù)0-1 組成的字符串。比如“慷慨就義”的Hash值為001001,“自甘墮落”的Hash值為“100100”。
Step3:得到特征向量的哈希值后,對特征向量設置權重,即W=Hash*Weight。遇到1,則1 直接和權值做乘法,遇到0,那么Hash 值和權值負相乘。例如給“慷慨就義”的Hash 值“001001”加權得到:W(慷慨就義)= 001001 5=-5-5 5-5-5 5,給“自甘墮落”的Hash 值“100100”加權得到:W(自甘墮落)=100100 3=3-3-3 3-3-3。
Step4:將Step3 得到的W 全部加起來,得到一個0-1 字符串。拿Step3 中兩個特征向量舉例,W(慷慨就義)+W(自甘墮落)=-2,-8,2,-2,-8,2。
Step5:對于Step4 得到的0-1 字符串進行降維處理,是正數(shù)則將值置1,否則為0,經過上述五步的處理,就獲得了正文部分的SimHash值。
在得到文本的SimHash 簽名值后,就可以計算它們的海明距離d。海明距離的求法:當對Sim-Hash 簽名值進行XOR 計算時,僅當相同位置值不同時值置為1,否則值置為0。XOR 計算之后得到的1 的數(shù)量即是漢明距離的大小。詞條正文部分的相似度如以下公式:
其中d為海明距離,maxL為最長關鍵詞數(shù)組長度。
開放分類是一個詞條的重要組成部分。是詞條的一種不同于傳統(tǒng)目錄式的新的分類方式。具有相同開放分類的詞條具有很強的相關性。
因此,開放分類對兩個詞匯之間的相似度的計算具有很大價值。如果詞條B 是詞條A 的開放分類,則Exist(A,B)=1,否則Exist(A,B)=0 。統(tǒng)計在詞條A 與B 開放分類中相同的個數(shù),用Common(A,B)表示。Percent(A,B)為Common(A,B)占詞條A和B總的開放分類個數(shù)的比例。
其中classify(A)是詞條A 中的開放分類個數(shù)。詞條開放分類相似度計算公式為
其中,α+β=1。
近年來,SimRank 在信息檢索領域引起了廣泛關注,并在網(wǎng)頁排名,協(xié)同過濾,孤立點檢測和近似查詢處理等領域取得了巨大成功。
SimRank 模型根據(jù)遞歸的概念定義兩個對象之間的相似性:如果節(jié)點a 的相鄰節(jié)點和節(jié)點b 的相鄰節(jié)點相似,則a 和b 也是相似的。這個遞歸定義的初始條件是:每個結點與它自身最相似。如果τ(a)用于表示節(jié)點a 的所有相鄰節(jié)點,用Sim4(a,b)表示兩個節(jié)點a 和b 之間的相似性,則相關詞條相似度可表示如下:
其 中,當a=b 時,Sim4(a,b)=1;當τ(a)=φ 或τ(b)=φ 時,Sim4(a,b)=0。
文獻[8]對式(8)進行了擴展,擴展后的Sim-Rank算法為
其中k 不等于0,當k 趨于無窮大,能夠準確得到圖中兩個節(jié)點之間的相似度。
對相關詞條的相似度計算步驟有以下三步。
Step1:在本研究中,百度百科被看作一個圖,圖中節(jié)點表示詞條,用M=<VN,EN>來描述該圖,N 是節(jié)點的個數(shù),PN={p}是所有節(jié)點的集合,EN={e}是所有邊的集合,e={v→w}表示節(jié)點v是w 相鄰節(jié)點。
Step2:如果A是B的相關詞條,則在圖中,存在這樣的兩條邊e={A→B}。例如,“特朗普”的相關詞條有“曼哈頓”、“房地產”等,所以在圖中,存在節(jié)點“特朗普”、“曼哈頓”、“房地產”,并存在邊e={“特朗普”→“曼哈頓”}、e={“特朗普”→“房地產”}等。
Step3:使用式(9)計算相關詞條相似度。
曹海等給出了迭代過程中SimRank 算法的精確度分析,提出了犧牲較小精度來獲得較大性能提升的方法,并定義了如下公式:
其中,Sim4(a,b) 為節(jié)點a 和b 的相似度表示,Sim4k(a,b)為節(jié)點a 和b 在第k 次迭代時的Sim-Rank,值,C 為衰減因子常量,Ck+1是在第k 次迭代時SimRank 算法的最大誤差。所以如果設C=0.8,最大誤差為0.001,經過29 次計算就可以獲得相對確切的結果。
由上文得到的Sim1、Sim2、Sim3、Sim4,將它們加權相加得到詞匯之間的綜合相似度,得到詞條的整體相似度:
其中,k 是可調節(jié)的參數(shù),且有k1+k2+k3+k4=1,k1≥k2≥k3≥k4,后者表明Sim1到Sim4對于總體相似度的重要程度逐漸變小。這是考慮到百科名片和百科詞條正文反映了一個詞條最核心的內容,因此他們的權值應大一些。經過多次實驗比較,選取的參數(shù)為α=0.5,β=0.5,k1=0.35,k2=0.35,k3=0.15,k4=0.15 結果最佳。
將本文計算出的綜合相似度Similary(A,B)與Words-240 給出的參考標準值作比較,計算它們的之間的差值Value,Value的絕對值越接近于0,則本文方法計算得出的相似度越準確。
本文做了兩個實驗,實驗一使用劉群等提出的基于《知網(wǎng)》的相似度計算方法SSCH計算一對詞匯之間的相似度,實驗二使用本文方法來計算相同詞匯對之間的相似度。分別計算他們和Words-240測試集給定的標準值之間的差值,取絕對值比較。實驗結果如表1所示。
表1 詞匯相似度計
從實驗結果可以看到:
1)在表1 中,一共選取了13 對詞匯,其中有10對詞匯使用本文方法計算出的相似度更接近于標準值,其Value 的絕對值相比較SSCH 方法的Value的絕對值更小。這說明本文方法在詞匯相似度計算中更加準確,本文中方法在多數(shù)情況下優(yōu)于基于《知網(wǎng)》的相似度計算方法SSCH,且在使用中切實有效。
2)在圖2 相似度結果的折線圖中,可以看出使用本文方法計算出的相似度折線走勢更貼合于標準值,且比較穩(wěn)定。
3)SSCH 方法在醫(yī)生-責任,員工-公司,學校-教學這三個詞匯對的相似度的計算上表現(xiàn)的非常差,這說明該方法在通用性上不如本文提出的方法。
圖2 相似度結果比較
本文提出一種基于百度百科的多特征信息詞匯相似度計算方法。該方法經由百科名片、詞條正文,開放分類和相關詞條四個部分的內容,分別計算出它們之間的相似性值,以此來獲得一對詞匯間的整體相似性。
從實驗結果來看,這種新方法比現(xiàn)有方法更加可靠有效。但本文的方法也存在一些不足,一是對詞匯的同名異義缺乏研究,沒有進行分歧處理。二是有些詞條并不完整,缺少計算所需的相關內容。因此仍需在后續(xù)的研究中對該方法進行相對應的改進。