劉青磊,顧小豐
(電子科技大學 計算機科學與工程學院,四川 成都 611731)
在信息檢索、文本分類、信息抽取、基于實例的機器翻譯等各領域中,詞語相似度都有著廣泛的應用。劉群[1]把詞語的相似度計算方法分為兩類:一類是通過統(tǒng)計語料上下文中詞語之間的相關性來得到其相似性,另一類是基于某種世界知識或者分類體系的方法,如Agirre[2]利用WordNet來計算英語詞語的語義相似度,李峰[3]用《知網(wǎng)》[4]來進行漢語詞匯語義相似度方面的研究。
基于《知網(wǎng)》的相似度計算方法通常是根據(jù)整體相似度可由部分相似度合成而來的思想,通過尋找兩個詞語義原集合間的最相似元素來進行一一匹配,詞語的相似度就等于各匹配對的加權(quán)均值。由于其計算的基本單位是一對一的義原匹配對,因此也就割裂了構(gòu)成詞語的各個義原間的內(nèi)在聯(lián)系,不能從整體的角度給出客觀的義原匹配選擇,并且由于較多的加權(quán)值和參數(shù),使得最終的結(jié)果或多或少地會帶有一些主觀因素。
本文從信息論的角度出發(fā),分別對兩個義原集合間的共有信息和差異信息進行統(tǒng)計,并據(jù)此得出兩個義原集合的相似度,最終的詞語相似度計算是以集合為基本單位的。
在《知網(wǎng)》中,是用“概念”來對漢語中的每一個詞語進行描述和定義的,而構(gòu)成這種概念描述語言的核心詞匯就是“義原”,這里試以“打”的其中一個義項“weave|辮編”為例,其在《知網(wǎng)》中記錄為:
NO.=015492 W_C=打 G_C=V E_C=~毛衣,~毛褲,~雙毛襪子,~草鞋,
~一條圍巾,~麻繩,~條辮子 W_E=knit G_E=V E_E= DEF=weave|辮編
其中“weave|辮編”就是“義原”,“E_C”的用途在于為消除歧義提供可靠的幫助。根據(jù)義原的上下位關系和分類特點,所有的義原構(gòu)成了層次鮮明的義原森林,這個義原森林所要表達的層次分類體系正是接下來我們計算詞語(句子)相似度的基礎。
我們截取了以“entity|實體”為根節(jié)點的樹中的一個分支,并據(jù)此來討論目前幾種主要的義原相似度比對算法的特點(簡便起見,下文中都省去了義原中的英語):
圖1 根節(jié)點為“entity|實體”的樹中的一個分支
a. 劉群通過計算兩個義原(Primitive)節(jié)點之間的路徑長度來得出兩個義原的相似度,公式為:
(1)
其中p1和p2表示兩個義原,Dis(p1,p2)為它們在義原層次體系中的路徑長度,α(1.6)為可調(diào)節(jié)參數(shù)。
b. 李峰在劉群公式的基礎上考慮了義原的層次深度:
Sim(p1,p2)
(2)
其中min(depth(p1),depth(p2))表示p1和p2兩者在義原樹中深度的最小值。
c. Dekang Lin[5]認為任何兩個事物的相似度取決于他們的共性和個性:
其中,common(E1,E2)表示E1和E2共同擁有的信息量大小,description(E1,E2)表示完整描述出E1和E2所需的全部信息量大小。
在層次體系中層次越深的節(jié)點包含的信息量就越大,那么如何具體的去衡量一個節(jié)點所包含的信息量有多少呢?由于義原體系是一個分類體系,子節(jié)點總是父節(jié)點的分類,當我們把節(jié)點本身看成是其父節(jié)點不具有的特征集合時,就容易推斷出:子節(jié)點總是擁有其自身和父節(jié)點。以圖1中的節(jié)點“人”為例,它所擁有的信息節(jié)點集合就為:{物質(zhì),生物,動物,人},假設集合里面每個元素的地位都相同,這里可以簡單認為義原“人”所擁有的信息量為4,此時引入Dekang Lin公式的內(nèi)涵:
(3)
這里挑選了圖1中的幾組義原來實驗討論公式(1)、(2)、(3)各自的特點。
首先對比下表1中的前兩行:A中義原深度都為1,B中都為4,從直觀感覺來講,B的相似度顯然要大于A。(1)的結(jié)果對A和B并沒有區(qū)分度,(2)和(3)表現(xiàn)較好。其原因是在式(1)中只要義原距離即Dis(p1,p2)相等,那么最終結(jié)果就會相同;而(2)和(3)都考慮了深度。
表1 距離相等時義原對的相似度
再來觀察后兩行:C中義原深度都為2,D中 “動物”深度為2,“牲畜”為4,從直觀角度來看,D的相似度應該要大于C。此時(2)的結(jié)果都為0.62,已經(jīng)沒有了區(qū)分度,(3)表現(xiàn)依然較好。究其原因,式(2)中的min(depth(p1),depth(p2))只考慮了義原深度中的較小值,而式(3)在進行信息節(jié)點統(tǒng)計的同時把兩個義原的深度都考慮了進去。同時,細心的讀者會發(fā)現(xiàn),式(2)的計算結(jié)果在數(shù)值上都顯得過于偏大。從整體上講,式(3)的結(jié)果更加合理。
詞語相似度(孤立詞語之間的相似度)在《知網(wǎng)》中體現(xiàn)為描述詞語的概念之間的相似度,用公式表示為:
Sim(W1,W2)=maxSim(S1i,S2j)
(i=1…n,j=1…m)
(4)
其中,詞W1、W2分別有n和m個義項(概念),S1i為W1的第i個義項,S2j為W2的第j個義項,最終的詞語相似度結(jié)果取W1和W2的各個義項相似度的最大者。
劉群認為描述詞語概念的義原可以分為第一基本義原、其他基本義原、關系義原和關系符號描述義原。李峰把其中的第一基本義原和其他基本義原合成為“直接義原”,關系義原和關系符號義原合成為“間接義原”,通過分別計算這兩組集合的相似度再經(jīng)過加權(quán)平均來得到整體相似度。
(5)
其中,S1、S2表示兩條概念,n取4(劉群)或2(李峰),βi為權(quán)值調(diào)節(jié)參數(shù),滿足β1,β2…βn之和為1,S1i、S2i分別對應S1和S2的第i個義原集合。
本文中我們參考李峰的思路,仍然是把義原分割為直接義原和間接義原兩個集合。
常用的義原集合相似度計算方法可以分為兩個步驟:①通過計算兩個集合中各個義原之間的相似度來尋找最優(yōu)匹配(即相似度最大的義原對);②對各個義原對加權(quán)求平均值或是根據(jù)某種條件對各部分賦權(quán)值后再求和。
這里試以詞“顏色”和“藍色”為例來說明上述方法:
顏色 { 屬性,顏色 }
藍色 { 屬性值,顏色,藍 }
A: < 屬性,屬性值 > 0或δ
B: < 顏色,顏色 > 1
C: < 藍,φ> (φ表空值) 0或δ
其中“屬性”、“屬性值”、“藍”三個義原分別位于不同的義原樹中,故三者可隨意配對并且任意兩者之間要么不存在相似度,要么可由數(shù)據(jù)平滑技術給定為一較小值δ。察看表中三個配對,A和C都不存在相似度,那么就只有B才對最終的計算具有意義。實際上在義原分類體系中,B中的“顏色”是C中“藍”的父節(jié)點,也就是說B和C擁有的信息量幾乎是相同的,但在合成時,前者起到了決定作用,而后者卻幾乎沒有作用,這顯然是不合理的。
我們認為應該這樣配對:A <屬性,屬性值>、B <{顏色},{顏色,藍}>。此時由分組B可知關鍵點就在于如何計算兩個集合的相似度。我們從整個集合所包含的信息量出發(fā),把集合包含的所有信息量做為一個不可分割的整體,在比較兩個集合的相似度時,不再進行元素最優(yōu)匹配,而是把元素所組成的集合視為元素所包含的信息量的集合。根據(jù)上文中我們對義原信息量的分析可以描述為:
{ 義原1,義原2,…,義原n}={ 義原1信息節(jié)點∪義原2信息節(jié)點∪…∪義原n信息節(jié)點 }
這時計算兩個義原集合的相似度就歸結(jié)為計算兩個信息量集合的相似度,可以引入和擴展公式(3):
Sim(D1,D2)
(6)
其中,D1和D2代表兩個直接義原集合,其元素個數(shù)分別為m和n,information(p)表示p在義原分類體系中其自身以及父節(jié)點所包含的信息節(jié)點集合。實際上,在m=1且n=1時公式(6)就表現(xiàn)為公式(3)。
間接義原即帶符號的義原。對其進行的計算較為簡單,首先根據(jù)它們所帶的符號是否相同來進行分組(如果沒有與其對應的符號,就與空值對應),再對各分組分別進行義原相似度計算,整體的相似度計算結(jié)果就等于各部分的加權(quán)之和。例如:
球迷 {*喜歡,#看,#體育}
歌迷 {*喜歡,#音樂}
A: <喜歡,喜歡>
B: <{看,體育},{音樂}>
其中的分組A可按式(3)計算、分組B可按式(6)計算,間接義原與空值的相似度設為一個較小值 (本文中取值為0.2)。我們認為表中的分組A和B在集合的相似度計算中所占的地位并不相同,這可以簡單的取決于分組內(nèi)部的義原數(shù)量。
間接義原集合的相似度計算公式為:
(7)
公式中I1和I2分別表示兩個間接義原集合,m為分組個數(shù),n為兩個集合中的義原個數(shù)之和,ni為第i個分組中的義原個數(shù),Sim(Ai)表示第i個分組的相似度。
由于直接義原和間接義原在描述詞語的概念中所起作用和所占地位都不能一概而論,所以概念相似度最終應由兩部分加權(quán)計算后合成而來。根據(jù)式(5)有:
(8)
其中,Sim(D1,D2)表示直接義原集合的相似度,計算方法由式(6)給出,Sim(I1,I2)表示間接義原集合的相似度,計算方法由式(7)給出。由于在對詞語的描述中,不同詞語的間接義原差異會比較大,經(jīng)過相關實驗后,權(quán)重調(diào)節(jié)參數(shù)β設置如上。
常用的句子相似度比對算法可以分為三類:一類是基于句子的結(jié)構(gòu)和語法特征,如穗志方[6]提出的基于骨架依存結(jié)構(gòu)的句子相似度計算模型;另一類是根據(jù)句子中的詞類串來進行計算,如王榮波[7]等提出的句子結(jié)構(gòu)相似度計算方法;最后一類是基于句子語義信息的方法,如張奇[8]等利用《知網(wǎng)》進行的比對算法。
實際上,上文中對詞語相似度的計算方法也極易擴展到句子的相似度比對中去,接下來對此做一些簡要介紹。
在進行句子相似度比對時,一些常用的虛詞、介詞等比較的意義并不大,因此這里只考慮名詞、動詞、形容詞等實詞。另外,在計算前還要對句子中的多義詞進行詞義消歧,使其得到一個唯一的義項。這里我們先假定已經(jīng)進行了詞義消歧(4.2節(jié)介紹)。有兩個句子:
Sentence1={W1,W2,…Wm}
Sentence2={W1,W2,…Wn}
其中,Sentence1和Sentence2代表句子1和句子2,它們的實詞個數(shù)分別為m和n。
在不考慮句子語法特征的情況下,可以把句子看成是詞的集合(Bag of Words),根據(jù)上文中詞語相似度計算的思想,可以把詞語看成義原的集合,籍此我們也就可以把句子看成是義原的集合;義原又分為直接義原和間接義原,那么一個句子就分為直接義原集合和間接義原集合兩個部分;再由公式(3),義原所含的信息量是其包含的信息節(jié)點的集合,最后根據(jù)式(8)有:
Sim(S1,S2)=(1-γ)Sim(D1,D2)+γSim(I1,I2)
(9)
上式中,S1和S2表示兩個句子,D1、D2分別表示兩個句子的直接義原集合,I1和I2代表間接義原集合,γ為一可調(diào)節(jié)參數(shù),經(jīng)相關實驗后調(diào)整為0.2。
實際上,式(8)是式(9)中兩個句子詞語個數(shù)都為1時的特例,故在本文中我們認為句子相似度是詞語相似度的擴展,詞語相似度是義原相似度的擴展。
詞義消歧有時也稱為詞義標注,其任務就是確定一個多義詞在給定的上下文語境中的具體含義[9]?;凇吨W(wǎng)》的詞義排歧可以歸類為基于義類詞典的消歧方法,這類方法的基本思想是:多義詞的不同義項在使用時往往具有不同的上下文語義類。因此,利用《知網(wǎng)》提供的短語搭配“E_C”(第二部分可見)進行排歧的基本思路就是:比較該詞所在的上下文環(huán)境和每一個實例提供的環(huán)境之間的相似性,可以認為語境最相似的實例所代表的詞語義項就為該詞在給定上下文中的含義。
以“打”為例,打在《知網(wǎng)》中共有28個義項。對于歧義句:媽媽給我打了一件毛衣,首先提取出歧義詞的上下文環(huán)境A為:{媽媽,毛衣},再提取出《知網(wǎng)》中各個搭配實例的環(huán)境B1,B2,…Bn等,利用上文中的式(9)進行A和B的相似度計算,結(jié)果最大的實例所在的義項就為該詞的義項。用公式表示為:
S=S(maxSim(A,Bi))i=1,2,…,n
(10)
這里假設歧義詞在《知網(wǎng)》中有n個搭配實例,S代表該詞的義項,Bi表示提取出的第i個實例環(huán)境,S(maxSim(A,Bi))表示Bi所在的義項。
公式(9)中已經(jīng)假設每一個詞都給出了明確的含義,因此,在環(huán)境A和B的提取中,要盡量只提取沒有歧義的詞語,如果必須具有歧義詞,就需要把歧義詞的義項一一代入取其最大值。
這里我們選取出劉群、李素建以及李峰論文中共有的一些詞語,通過對這些詞語的實驗結(jié)果進行比對分析來討論幾種算法的特點。
表2中第3列為李峰給出的結(jié)果,其文中給出的直接義原計算公式為:
其中
(11)
表2 詞語相似度實驗數(shù)據(jù)
續(xù)表
在計算時我們發(fā)現(xiàn),文中對<φ,A2i>的深度并未給出明確的說明,例如,在計算上表中“男人”和“猴子”的相似度時,前者概念為“人,家,男”(多個義原),后者為“走獸”(僅有一個義原),最優(yōu)匹配顯然為:<人, beast|走獸>、<φ,家>和<φ,男>。那么<φ,家>和<φ,男>的最小深度和權(quán)重該怎樣計算,文中并沒有給出相關說明。籍此原因,在接下來的數(shù)據(jù)分析中,我們把重點放在第4、5、6列。
① “男人”與“女人”,“男人”與“和尚”,“男人”與“經(jīng)理”。在這三對詞的比較中,第6列可以說是對第4、5列一個很好的折衷。
② “跑”與“跳”,“發(fā)明”與“創(chuàng)造”。第5列給出的結(jié)果要低于它們實際的相似度,原因是并沒有考慮義原的深度。第6列給出的值要高于第3、5列,結(jié)果上較為合理。
③ “珍寶”和“寶石”,“粉紅”和“深紅”,“粉紅”和“顏色”。第5列給出的相似度分別為0.130、0.074 和0.059,顯然低于人們實際經(jīng)驗中的相似度,原因是第5列在計算時過于倚重第一個義原。
④ “醫(yī)生”與“患者”。從意義上講,對這兩個詞的相似度衡量實際上已經(jīng)轉(zhuǎn)移到了對其相關性的衡量上。第3、5、6列給出的結(jié)果都較為合理。
從總體上來看,第6列中我們給出的數(shù)據(jù)更為合理,整體上的表現(xiàn)也更加穩(wěn)定。
為了便于手工識別,我們在新浪網(wǎng)主頁上的標簽“財經(jīng)、體育、軍事、教育、房產(chǎn)、天氣、健康、旅游”8個分類網(wǎng)站中各抽取出20個句子總共160句(大部分都為各類文章的題目),其中的每一句要么不存在未登錄詞,要么已經(jīng)用《知網(wǎng)》中存在的同義詞來代替未登錄詞;然后我們用手工識別的方法對每一類中的20個句子根據(jù)其相似度分為4類(每一類中有5個句子);接下來把每一句作為待比對句,和剩余的所有句子一一比對,分別取比對后相似度值排序最前的5個、8個和10個句子做為輸出并計算出結(jié)果中和手工分類中相同的句子數(shù)目correct,那么召回率recall=correct/5。下面表3為幾種方法的實驗結(jié)果。
表3 句子相似度實驗數(shù)據(jù)表
從表3中可見,基于詞形詞序的方法在三種輸出下的提高并不大,其原因是只考慮了句子中相同的詞匯而沒有兼顧語義。第三行中詞義消歧后再進行相似度計算的方法可以說是集成了本文中提出的幾個主要觀點,其結(jié)果明顯優(yōu)于第一、第二種方法,召回率較為令人滿意,這也進一步證明了本文中各個辦法的有效性。
本文提出的詞語(句子)相似度計算方法是從信息論的角度出發(fā),利用《知網(wǎng)》中提供的義原上下位關系把義原做為信息節(jié)點的集合,并據(jù)此提出了自已的計算義原相似度的公式;把構(gòu)成詞語(句子)的所有直接義原看成是一個大的信息融合了的集合,根據(jù)其共性和個性來計算出兩個集合的相似度,進而得到詞語(句子)的相似度;文中還利用新的句子相似度計算方法提出了一種簡單直觀的詞義消歧辦法。最后通過實驗和數(shù)據(jù)分析驗證了新方法的正確性和實用性。
[1] 劉群,李素建. 基于《知網(wǎng)》的詞匯語義相似度的計算[C]//第三屆漢語詞匯語義學研討會,中國臺北,2002.
[2] Agirre E, Rigau G. A Proposal for Word Sense Disambiguation using Conceptual Distance[C]//Proceedings of the First International Conference on Recent Advanced in NLP. 1995.
[3] 李峰,李芳. 中文詞語語義相似度計算——基于《知網(wǎng)》2000 [J]. 中文信息學報, 2007, 21(3):99-105
[4] 董振東,董強. 《知網(wǎng)》[P]. http://www.keenage.com.
[5] Dekang Lin. An Information-Theoretic Definition of Similarity Semantic distance in WordNet [C]//Proceedings of the Fifteenth International Conference on Machine Learning. 1998.
[6] 穗志方. 基于骨架依存樹的語句相似度計算模型[C]//計算語言學文集, 1998, (3):176-184.
[7] 王榮波,池哲儒. 基于詞類串的漢語句子結(jié)構(gòu)相似度計算方法[J]. 中文信息學報, 2005, 19(1):21-29.
[8] 張奇,黃萱菁,吳立德. 一種新的句子相似度度量及其在文本自動摘要中的應用[J]. 中文信息學報, 2005,19(2):93-99.
[9] 宗成慶. 統(tǒng)計自然語言處理[M]. 清華大學出版社, 2008.