楊 泉
(北京師范大學(xué) 漢語文化學(xué)院, 北京 100875)
詞語語義相似度(本文簡稱詞義相似度)是隨著計算語言學(xué)發(fā)展而產(chǎn)生的一個概念,指一種語言中任意2個詞語之間相似或相關(guān)的程度。詞義相似度計算在信息抽取、機器翻譯、人機對話等諸多自然語言處理領(lǐng)域都有著廣泛應(yīng)用,其主要任務(wù)是研究用什么方法來計算或比較2個詞語的語義相似度[1]。隨著人工智能領(lǐng)域的不斷發(fā)展,詞義相似度計算逐漸成為自然語言處理中的重要基礎(chǔ)性工作,其在更高層面自然語言處理中的應(yīng)用受到廣泛重視[2]。
詞義相似度計算方法可分為兩大類[3]:一類基于知識本體進行計算;另一類基于詞向量進行計算。很多關(guān)于英文的詞義相似度計算方法都是使用WordNet作為知識本體實現(xiàn)的,例如,Phi-lip[4]在“IS-A”分類體系基礎(chǔ)上,提出了一種基于共享信息內(nèi)容概念的詞義相似度計算方法;Mohamed等[5]在WordNet層級結(jié)構(gòu)中深度分布的基礎(chǔ)上,提出了一種最近公共結(jié)點的概念下位詞子圖量化法。
在漢語知識本體中,《同義詞詞林》(本文簡稱《詞林》)是計算詞義相似度的重要底層框架,《詞林》層級體系與WordNet框架較為接近,都將同義詞集合(synset)作為基本建構(gòu)單位進行組織。因此基于詞林的詞義相似度計算方法與基于Wordnet的計算方法有許多類似的地方。目前已有很多基于《詞林》的中文詞義相似度計算模型,田久樂等[6-11]的計算模型中利用了《詞林》的編碼、深度、路徑或距離等相關(guān)信息計算詞語之間的語義相似度。
另一類計算語義相似度的方法是基于語料庫的方法。詞向量是一種把詞語數(shù)量化的方法,將語料庫中的單詞映射到向量空間中,就可以方便機器學(xué)習(xí)算法在自然語言處理任務(wù)中更好地理解、使用和處理詞語。Word2vec[12]是目前構(gòu)建詞向量最常用的方法之一,其使用的n-gram模型將一個單詞與其上下文的n個單詞相關(guān)聯(lián),可以生成具有上下文語義信息的稠密詞向量,由于在Word2vec詞向量中結(jié)合了上下文詞語的信息,因此又稱為詞嵌入方法。該方法基于詞向量進行計算,與基于本體知識的方法相比,具有更強的可計算性。
對比知識本體和詞向量2種方法后,發(fā)現(xiàn)基于知識本體的方法依據(jù)人類對于世界知識的認識對詞語之間的相似程度進行計算,一般都具有較強的理論依據(jù),計算結(jié)果反映的是知識本體中蘊含的詞義相似度信息;而基于詞向量的計算方法是在大規(guī)模語料庫基礎(chǔ)上訓(xùn)練所得,其結(jié)果反映的是受訓(xùn)語料中蘊含的詞義相似度信息。程婧等[13]認為在基于詞向量的計算方法中,基本假設(shè)是語義相似的詞語之間上下文語境也會比較相似,因此可以結(jié)合上下文信息進行相似度計算。由此可見每種方法都有各自的優(yōu)缺點,分別適合解決不同的自然語言處理任務(wù)。
縱觀前人已有研究成果及其觀點,如果能夠充分厘清2種方法各自的優(yōu)缺點和相似度計算的側(cè)重點,在使用時有機結(jié)合、揚長避短,一定能夠計算出更符合實際需求的詞語語義相似度結(jié)果,以便提升更高層次自然語言處理任務(wù)的效果。
本文擬采用《詞林》作為知識本體,在充分解析其義項編碼信息內(nèi)容的基礎(chǔ)上,確定語義相似度計算模型,并結(jié)合基于詞向量語義相似度計算方法,最后運用強化學(xué)習(xí)策略建立一種更為合理的詞語語義相似度計算方法。
《同義詞詞林》是由梅家駒等[14]于1983年編撰的可計算漢語詞庫,經(jīng)哈爾濱工業(yè)大學(xué)研究人員擴展成為《哈工大信息檢索研究室同義詞詞林擴展版》。經(jīng)哈工大擴展后的《詞林》體系將詞語分為5個層級:大類、中類、小類、詞群和原子詞群,上面4層結(jié)點都代表詞語的類別,第5層葉子結(jié)點上是原子詞群,每個原子詞群可以用一個8位編碼唯一表示,表1展示了《詞林》中的義項編碼情況(1)參見《哈工大同義詞詞林擴展版》, 網(wǎng)址:http://www.ltp-cloud.com/download。。
表1 《詞林》義項編碼表
經(jīng)統(tǒng)計,《詞林》共有77 456條詞語,分為12個大類,95個中類,1 428個小類,4 026個詞群和 17 817個原子詞群。
《詞林》的義項編碼可以轉(zhuǎn)化為二叉樹的結(jié)構(gòu)形式,所有詞語都對應(yīng)該樹的葉子結(jié)點,不同詞語編碼在該樹上所處節(jié)點間的距離就表示了詞語間的相似程度,例如,對于詞匯w1、w2,文獻[15]中給出了一種基于深度的語義相似度計算方法:
(1)
式中:D是w1、w2對應(yīng)的《詞林》編碼在樹形結(jié)構(gòu)圖中最近公共父結(jié)點的深度。這種簡單的計算公式將距離信息轉(zhuǎn)化為0到1之間的相似度數(shù)值,能很好地體現(xiàn)相似度。《詞林》中的編碼實際上是原子詞群的編碼,同一個原子詞群中的詞語具有相同的編碼,即具有相同的路徑。在已有算法中使用《詞林》編碼路徑深度計算詞義相似度的方法,實際上計算的是不同原子詞群之間的相似度。
在《詞林》中共有17 817個不同的義項編碼,每個義項編碼可以代表一個原子詞群,按第8位義項編碼可以將全部原子詞群分為三大類,分別以“=”“#”“@”3種符號結(jié)尾,這三類編碼代表原子詞群內(nèi)部的詞語之間是“相似”“相關(guān)”和“唯一”的關(guān)系,各類義項編碼具體數(shù)量及占比統(tǒng)計結(jié)果見表2。
表2 《詞林》按第8位義項編碼統(tǒng)計表
以“@”結(jié)尾的原子詞群中只包含一個詞語,占比25%,即《詞林》中只有一個詞語的原子詞群共有4 377個。以“=”和“#”結(jié)尾的原子詞群包含2個或2個以上詞語,共占比75%,即在《詞林》中有13 440個原子詞群包含2個或2個以上詞語,這種情況下,同一個原子詞群內(nèi)部的詞語與其他原子詞群詞語計算語義相似度的結(jié)果相同。
事實上,基于其他知識本體的詞義相似度計算方法也都使用了類似的思想。雖然同義詞是一個經(jīng)典概念,但對于同義詞之間相似程度的量化表示卻是隨著自然語言處理而產(chǎn)生的概念。因此這種計算相似度的思想就是將已有知識本體中蘊含的相似度信息進行量化表示。由于建立知識本體時不是以相似度量化表示為目的,所以在計算量化的相似度時難免會存在一些問題。首先,《詞林》的世界知識對于語言學(xué)知識表示的精細程度是否足以準確體現(xiàn)詞語之間的語義相似度;其次,《詞林》對于新詞語的覆蓋程度是否能滿足應(yīng)用需求;第三,對于《詞林》中所蘊含的世界知識計算模型能否準確解讀和表示;最后,由于詞語的多義性,同一個詞語可能對應(yīng)多個義項編碼,使用編碼進行計算時將面臨義項選擇的困境。
因此,僅使用《詞林》編碼,很難準確計算出同一個原子詞群內(nèi)部詞語之間的相似度。對于這些問題,需要結(jié)合新的計算方法,更加合理地進行計算。
詞義相似度計算任務(wù)中的詞向量一般是指通過大規(guī)模語料訓(xùn)練得到的詞向量。雖然還有其他的詞向量訓(xùn)練方法,例如熱點表示法,但由于該方法需要將不同詞的向量相互正交,當(dāng)詞匯量較大時會出現(xiàn)維數(shù)災(zāi)難,因此基本上不在詞義相似度計算中使用。在《詞林》中將詞語用其編碼表示,從數(shù)學(xué)角度來說,也可以看作一種向量表示,其中包含了相應(yīng)的語言學(xué)知識,但不包含詞語在具體語境中的上下文信息。在詞嵌入詞向量模型中,Skip-Gram(SG)模型是當(dāng)前應(yīng)用最廣泛的詞嵌入方法之一[12],該方法通過學(xué)習(xí)一個詞與其相鄰詞的關(guān)系來實現(xiàn)詞嵌入。SG模型通過最大化式(2)來預(yù)測每個給定單詞wt的上下文單詞。
(2)
式中:V為訓(xùn)練詞向量所用語料;|V|為詞匯總數(shù);wt為當(dāng)前的中心詞所對應(yīng)的向量;c為上下文窗口的大小;wt+i是上下文詞匯向量;p(wt+i|wt)是在wt的條件下wt+i的概率。
使用該模型得到的詞向量維度比起詞匯總數(shù)|V|來要低得多,在具體訓(xùn)練中人們發(fā)現(xiàn),如果向量維度太低,則不能很好地表示語料中的信息,難以達到實用的要求;但若維度太高,則在訓(xùn)練過程中會出現(xiàn)過擬合問題,將語料中的噪聲學(xué)習(xí)到了詞向量中,也會影響使用效果。因此當(dāng)前常見的詞向量維度一般是幾百維的向量,通過嵌入式詞向量不僅解決了維數(shù)災(zāi)難問題,而且向量中蘊含了詞語的上下文語境信息。
S(w1,w2)=cos(w1,w2)
(3)
詞向量空間中越相近的2個向量,夾角越小,余弦越大,正好可以表示詞語間的相似度。所以把詞語進行了向量化表示后,在向量空間中就會自然形成一種相似度的量化標(biāo)準。
“詞向量”的概念來源于語言學(xué)中的“價值”(value) 和“分布”(distribution) 等概念[16]。即詞語的語義由其上下文信息決定,因此這樣得到的詞向量受語料的影響非常大。在一類語料上訓(xùn)練得到的詞向量,應(yīng)用到其他語言學(xué)任務(wù)中可能得不到很好的處理效果。因此在一些特定的應(yīng)用中需要基于其任務(wù)和語料來重新訓(xùn)練詞向量。但這種訓(xùn)練詞向量的方法對語料的規(guī)模及運算資源的要求都非常高,要想得到高質(zhì)量的詞向量,必須要基于海量的語料,并且需要使用大量的計算資源和時間才能完成。因此目前出現(xiàn)了一些通用的詞向量,這些詞向量使用的語料體量大,涵蓋的詞語豐富,訓(xùn)練的準確率也比較高,在通用型任務(wù)中往往能取得較好的效果。例如騰訊提供的詞向量數(shù)據(jù)庫,這個數(shù)據(jù)庫提供800多萬個中文詞條,每個詞條展開后是一個200維的向量,其數(shù)據(jù)量有16G(2)騰訊詞向量下載網(wǎng)址:https://ai.tencent.com/ailab/nlp/embedding.html。,它使用Directional Skip-Gram(Skip-Gram的改進版)訓(xùn)練而成,是目前開源的通用型高質(zhì)量詞向量之一。
根據(jù)訓(xùn)練詞向量方法的語言學(xué)原理,詞向量之間的比對更多的是表示詞語在具體語境中的相似性,而不是詞語間語義的相似度,例如在語義上“狗”和“犬”是同義詞,在《詞林》中具有相同的語義編碼“Bi07B01=”,理論上應(yīng)該具有最高級別的相似性,而“狗”和“貓(Bi08A01@)” 在《詞林》中的編碼不同,在語義上的距離肯定比“狗”和“犬”大,相似度也應(yīng)該沒有“狗”和“犬”高。但是根據(jù)騰訊詞向量的計算結(jié)果卻恰好相反,“狗”和“犬”之間的相似度為 0.738,“狗”和“貓”之間的相似度為 0.747,超過了相同語義編碼的2個詞語之間的相似度。這說明了基于語料的詞義相似度計算與基于知識本體的詞義相似度之間的差異較大。此外語料庫訓(xùn)練出來的詞向量還是會受到受訓(xùn)語料規(guī)模的限制,不能保證一種語言中每個詞語的詞向量都得到訓(xùn)練,例如,雖然騰訊詞向量數(shù)據(jù)庫收錄了800多萬中文詞匯,但像“以色列”這樣并不算太生僻的詞語卻沒有查到。因此詞向量雖然為計算詞義相似度提供了重要方法,但也不能解決詞義相似度計算的全部問題。
基于知識本體和基于詞向量的語義相似度計算方法都顯性或隱性地運用了一些語言學(xué)信息進行計算,但每種方法都有不足之處,如果能將2種方法有機結(jié)合,使其應(yīng)用的語言學(xué)信息更加全面,則可提高語義相似度計算質(zhì)量。
本文選擇《詞林》作為計算詞義相似度的知識本體,選擇騰訊詞向量作為計算詞義相似度的詞向量,以Miller & Charles發(fā)布的30個詞對(本文簡稱MC30)[17]的詞義相似度人工判別值為學(xué)習(xí)目標(biāo)。根據(jù)我們接觸到的詞語,基于這2種方法可能會出現(xiàn)以下幾種情況:
1) 不被《詞林》和騰訊詞向量同時收錄的詞匯?!对~林》共有77 456條詞語,騰訊詞向量數(shù)據(jù)庫收錄800多萬中文詞匯,兩類數(shù)據(jù)庫收錄詞語情況還是有較大差距,主要分為以下2種情況:① 在《詞林》里存儲了某個詞語,但是在騰訊詞向量數(shù)據(jù)庫中查找不到。如“以色列”是專有名詞,在《詞林》里的編碼是“Di02A23#”,但是用騰訊詞向量標(biāo)注時卻沒有查到這個詞,這是由于所錄專有名詞不同造成的收詞差異。② 在騰訊詞向量數(shù)據(jù)庫中存儲了某個詞語,但是在《詞林》中卻查找不到。如“弗洛伊德”“本拉登”這類專有名詞;另外“電子計算機”“計算機網(wǎng)絡(luò)”在騰訊詞向量數(shù)據(jù)庫中可以查到,但是在《詞林》中卻沒有,不過在《詞林》中可以查到“網(wǎng)絡(luò)(Bb06A01=)”“電子(Ba01H08#)”“計算機(Bo01A27=)”,這主要是由于2個數(shù)據(jù)庫存儲詞語顆粒度不同造成的。
2) 在《詞林》和騰訊詞向量數(shù)據(jù)庫中都收錄了2個詞語,且2個詞語在《詞林》中的語義編碼完全相同,根據(jù)第8位編碼又分為以下2種情況:① 2個詞語的語義編碼完全相同,且第8位編碼是“=”。如“消費者(Aj06A01=)”和“顧客(Aj06A01=)”,對于這種情況使用《詞林》編碼算法計算結(jié)果都為1,無法進一步算出2個詞的差異。② 2個詞語的語義編碼完全相同,且第8位編碼是“#”。如“美元(Dj05A14#)”和“日元(Dj05A14#)”;“搖滾樂(Dk28A08#)”和“爵士樂(Dk28A08#)”。
3) 在《詞林》和騰訊詞向量數(shù)據(jù)庫中都收錄了2個詞語,但是2個詞語在《詞林》中的語義編碼不同,這時根據(jù)《詞林》中語義編碼的數(shù)量又分為以下幾種情況:① 2個詞語在《詞林》中都只有一個語義編碼,這時第8位編碼都是“@”,如“家兔(Bi07C03@)”和“貓(Bi08A01@)”。② 2個詞語在《詞林》中一個詞語只有一個語義編碼,而另一個詞語有多個語義編碼的情況。這時2個詞語中有一個詞語的第8位編碼是“@”,另一個詞語的第8位編碼是“=”或“#”,如“自然科學(xué)(Dk03A02@)”和“自然(Ed51A01=、Ee10A01=、Ka15A01=、Ka32B01=)”。③ 2個詞語在《詞林》中都有多個語義編碼的情況。這時2個詞語的第8位編碼是“=”或“#”。如“工作(Di19A01=、Di19B01=、Hj11A01=)”和“生活(Da17B01=、Di19C01=、Hj01A01=、Ib03A01=)”。
基于有監(jiān)督式學(xué)習(xí)的詞義相似度計算方法,需要預(yù)先給定足夠的訓(xùn)練數(shù)據(jù),并為數(shù)據(jù)中的詞對給定相似度值。運用這些數(shù)據(jù)獲得可靠的模型后,再輸入未標(biāo)注相似度的詞對,經(jīng)過訓(xùn)練的模型就能夠給出相應(yīng)的相似度值。而強化學(xué)習(xí)與此不同,是無監(jiān)督式的學(xué)習(xí)。不同于采用靜態(tài)數(shù)據(jù)集的學(xué)習(xí)框架,強化學(xué)習(xí)采用動態(tài)環(huán)境數(shù)據(jù),其目標(biāo)是學(xué)習(xí)如何做,即如何根據(jù)環(huán)境情況采取動作,從而實現(xiàn)收益的最大化。強化學(xué)習(xí)的學(xué)習(xí)者不會接到動作指令,必須自行嘗試去探索環(huán)境,與環(huán)境交互并從環(huán)境中學(xué)習(xí),發(fā)現(xiàn)收益最高的動作方案。在狀態(tài)和動作空間較大、環(huán)境信息復(fù)雜且不完善的任務(wù)中,強化學(xué)習(xí)也經(jīng)常能找出最佳動作。
在詞義相似度計算中,當(dāng)前僅有少數(shù)公開人工判定結(jié)果可供學(xué)習(xí)和比較,因此有監(jiān)督學(xué)習(xí)的方法往往缺少足夠的支撐數(shù)據(jù)。在大多數(shù)情況下,語義相似度計算結(jié)果需要根據(jù)具體任務(wù)的完成情況進行評判?;谥R本體和詞向量的2種不同的語義相似度計算方法,都有其合理性和適應(yīng)范圍,因此本文建立了強化學(xué)習(xí)模型,尋找最優(yōu)策略,充分利用2種方法的合理性,以便更好地滿足實際應(yīng)用中的需求。
在強化學(xué)習(xí)模型中,首先需要有一個可接收狀態(tài)觀測量(輸入)的函數(shù)(策略),然后將狀態(tài)映射到動作集 (輸出)上。在詞義相似度計算時,強化學(xué)習(xí)所觀測的環(huán)境是指語言學(xué)任務(wù)所涉及的語言學(xué)環(huán)境,如上下文語境,語法知識等。在本文研究的強化學(xué)習(xí)模型中,學(xué)習(xí)者所能觀測到的環(huán)境狀態(tài)觀測量是指給定詞對的2種相似度計算結(jié)果。對于基于知識本體的詞義相似度,其結(jié)果記為s1,使用式(1)進行計算;對于基于詞向量的詞義相似度計算,其結(jié)果記為s2,使用式(3)計算;無法計算的情況,其值均記為0。記S=(s1,s2)為觀測量,定義為狀態(tài)集。
對于每個狀態(tài)S=(s1,s2),強化學(xué)習(xí)模型根據(jù)策略F,得到最佳動作A=(a1,a2),
A=F(s1,s2)
將此策略下的收益
V(S,A)=a1s1+a2s2
(4)
作為語義的相似度計算結(jié)果。獎勵是一個函數(shù),會生成一個標(biāo)量,表示處于某個特定狀態(tài)并采取特定動作的“優(yōu)度”。本模型中用動作的收益與人工判斷結(jié)果差值平方的倒數(shù)作為所采取策略的獎勵。
強化學(xué)習(xí)算法的整體過程如圖1所示。
圖1 強化學(xué)習(xí)過程圖
其中,強化學(xué)習(xí)模型部分,將輸入(s1,s2)作為其狀態(tài)觀測量,用線性函數(shù)表示策略,通過ε-貪婪評估策略進行訓(xùn)練,用動作的收益與人工值的差構(gòu)造獎勵函數(shù),最終得到學(xué)習(xí)結(jié)果。學(xué)習(xí)模型在ε-貪婪評估策略選擇動作時,會以ε的概率選擇一個新的動作,以1-ε的概率選擇已有動作中獎勵最大的那個動作。經(jīng)過訓(xùn)練最后得到相應(yīng)的算法模型。
人們在判別語義相似度時往往綜合多方面信息進行比較與判斷,本文所提的混合式強化學(xué)習(xí)模型將基于知識本體的信息與基于詞向量的信息充分融合,從理論上來說應(yīng)該會與人工判斷值具有較高的相似度。
實驗以MC30人工判定結(jié)果為標(biāo)準,給出了基于強化學(xué)習(xí)的相似度計算結(jié)果。最終評價標(biāo)準是本文計算結(jié)果與人工結(jié)果之間的皮爾遜系數(shù),系數(shù)值越大,數(shù)據(jù)相關(guān)性越強,說明強化學(xué)習(xí)算法的學(xué)習(xí)計算詞義相似度的能力越強。
針對上面給出的數(shù)據(jù),分別計算出其對應(yīng)強化學(xué)習(xí)模型中的不同環(huán)境觀測量S=(s1,s2),取ε=0.1,經(jīng)訓(xùn)練后得到的策略為:
(5)
式中:S1是指前文所述的情況1)。S2是前文所述的情況2),使用該策略時,若計算結(jié)果為負值,則取相似度值為0,因為相似度不能為負值。在這種情況下,詞向量方法更偏重詞義的相關(guān)性,在語義相似度計算方面起到負作用。S3是前文所述的情況3)。本文方法所得計算結(jié)果如表3所示。
表3 詞義相似度計算結(jié)果
續(xù)表(表3)
經(jīng)過計算,僅使用《詞林》深度的方法與MC30人工值的皮爾遜相關(guān)系數(shù)為0.855;僅使用騰訊詞向量的方法與MC30人工值的皮爾遜相關(guān)系數(shù)為0.656;本文所用《詞林》與騰訊詞向量相結(jié)合的方法與MC30人工值的皮爾遜相關(guān)系數(shù)為0.917。實驗結(jié)果說明:強化學(xué)習(xí)算法能利用兩類方法中的語義信息,因此獲得了更接近于人工值的結(jié)果。
1) 人在判斷2個詞語的語義相似度時,雖然受詞語相似性和相關(guān)性的共同影響,但是人主要還是從詞語的語義相似程度出發(fā)判斷其相似值。
2) 單純基于《詞林》的方法在判斷2個詞語的語義相似度時,當(dāng)2個詞語語義編碼相同且第8位編碼為“=”或“#”時,相似度值為1;顆粒度太粗不能很好地適應(yīng)實際應(yīng)用需求。
3) 單純基于騰訊詞向量的方法判斷2個詞語的語義相似度時,受詞向量訓(xùn)練過程和結(jié)果的影響,其計算結(jié)果主要是2個詞語的相關(guān)性。
基于知識本體和基于詞向量的方法各有優(yōu)缺,單純使用《詞林》或單純使用騰訊詞向量數(shù)據(jù)庫都不能取得令人滿意的結(jié)果,需要將二者有機結(jié)合才能更加客觀、準確地計算2個詞語的語義相似度,這也將是詞義相似度計算未來的發(fā)展趨勢。