劉鵬,周安民
(四川大學電子信息學院,成都 610065)
問答系統(tǒng)(Question Answering,QA)是目前自然語言處理領域中的研究熱點之一,它既能讓用戶提問,又能為用戶返回簡潔、準確的答案,但這些問答系統(tǒng)也存在著某些問題缺少回答或回答質(zhì)量不高的問題。為了充分利用網(wǎng)絡問答資源,豐富和擴展中文問題的回答,嘗試通過融合中英文問答社區(qū)的問題、答案的方法解決上述問題。在融合中英文問答社區(qū)問題的過程中,相似問句查找是一項基本而核心的工作,由于其基礎工作的地位,決定了相似句子查找的重要性,它的研究受到人們的廣泛關注。但問句相似度研究多集中在單語下,隨著問句相似研究的不斷深入,跨語言問句研究越來越受到關注。Sacaleanu等人[6]對印地語問題和英文問題進行研究、Mitamura等人[7]對日文問句和中文問句進行研究。這些方法大都基于問句直接翻譯或者對問句關鍵詞做同義詞林處理,將跨語言相似問句查找轉(zhuǎn)化為同一語言下的相似問句查找。另外基于平行/可比語料庫的方法也多有應用。不同于上述方法,本文提出了一個基于共享詞嵌入空間的跨語言相似問句挖掘模型,該模型可以將中英文問句轉(zhuǎn)換到共享詞嵌入空間,然后在共享詞嵌入空間通過計算中英文句子嵌入的余弦值,查找中文和英文信息安全類相似問句。
該模型無需大規(guī)模平行語料庫或同義詞林,而是直接將中、英文映射到兩個不同的詞嵌入空間,之后通過線性變換將中文詞嵌入空間轉(zhuǎn)換到英文詞嵌入空間,最后在同一詞嵌入空間下進行相似度計算和相似問句查找。Smith等人[10]證明了上述兩個詞嵌入空間之間的線性變換是正交的,并且可以使用奇異值分解來獲得該變換。本文的主要貢獻如下:
(1)利用FastText對稀有詞有利和訓練速度較快的特點,引入國內(nèi)較少使用的fastText進行詞嵌入訓練。
(2)引入兩種語言的詞嵌入空間可以通過線性變換進行同一空間轉(zhuǎn)換的特性,避免了以往跨語言問句分析需要先通過翻譯或同義詞林進行同一語言轉(zhuǎn)換的問題。
(3)將原本用于單語言的,根據(jù)句子嵌入內(nèi)積計算句子相似性用于跨語言句子相似度計算和相似問句查找。
隨著互聯(lián)網(wǎng)技術的蓬勃發(fā)展、社區(qū)問答系統(tǒng)在國內(nèi)外獲得了廣泛的應用,例如國外的Quora、StackOver-Flow,國內(nèi)的知乎、百度知道等。問答系統(tǒng)的蓬勃發(fā)展也促使了學者對相似問句查找的研究。相似問句查找從語言上可大致分為單語言相似問句查找和跨語言(多語言)相似問句查找。
對于單語言相似問句查找,Lee等人[1]使用信息檢索和自然語言處理中的統(tǒng)計技術,提出了一種對現(xiàn)有問題集自動構建語義相似集合的方法。Song等人[2]運用統(tǒng)計度量和語義信息相結合的方法,利用動態(tài)形成的向量計算統(tǒng)計相似度,利用基于WordNet的單詞相似度來計算語義相似度,最后加權統(tǒng)計相似度和語義相似度。在中文相似問句查找上,前人也進行了相關研究。例如,ZHENG Tao-yu等人[3]根據(jù)中文問句的特點,基于HowNet計算單詞的語義相似度。近期的研究,Minaee等人[4]提出了一種基于遞歸神經(jīng)網(wǎng)絡(RNN)編碼器解碼器的架構來測量句子之間的語義相似性的新框架。Arora等人[5]提出了完全無監(jiān)督的句子嵌入方法來計算問句相識度。該方法擊敗了包括RNN和LSTM在內(nèi)的復雜的有監(jiān)督方法。
對于跨語言(多語言)相似問句查找,主要方法有將一種語言翻譯后,轉(zhuǎn)化為同一語言下問句相似問題和運用同義詞詞林轉(zhuǎn)化為同一語言下問句相似問題。Sacaleanu等人[6]運用Google Translate將印地語問題和文章翻譯成英文。Mitamura等人[7]運用機器翻譯將英語問句的關鍵詞翻譯成日文或中文。Stoyanova等人[9]提出了一種基于WordNet同義詞林的詞語相似度測量和形態(tài)語義關系的跨語言識別方法。Verse等人[8]用擴展了WordNet同義詞林的Babel Net同義詞林將隱馬爾科夫模型提取到的問句關鍵字詞轉(zhuǎn)化成目標語言,從而轉(zhuǎn)化雙語空間為通用語義空間。
基于共享詞嵌入空間的跨語言相似問句挖掘模型的主要步驟如圖1所示。該模型首先用fastText預訓練中、英文詞嵌入模型,用中英文詞典結合預訓練的中、英文詞嵌入模型訓練出中文詞嵌入空間轉(zhuǎn)換到英文詞嵌入轉(zhuǎn)換空間的線性轉(zhuǎn)換矩陣。然后分別對英文問句QE,中文問句QZ做分詞以及fastText處理,生成英文詞嵌入空間和中文詞嵌入空間,通過線性轉(zhuǎn)換矩陣得到共享詞嵌入空間,通過基于SIF的Sentence2Embeddings模型得到在共享詞嵌入空間的英文問句QE和中文問句QZ的句子嵌入,最后通過句子嵌入的余弦相似性計算中、英文問句的相似性。
fastText(https://github.com/facebookresearch/fast-Text)是Facebook AI Research在16年開源的一個用于詞向量計算和文本分類工具。fastText是基于[11-13]等文章所提出算法的實現(xiàn),針對變形詞匯表達,線性分類優(yōu)化提供了優(yōu)秀的解決方案。fastText的子詞嵌入在Word2Vec的基礎上,引入了子詞這個因素,從而使得詞的微變形關系也能映射到嵌入空間中。在fastText中,每個詞被看做是N-Gram字母串包。為了區(qū)分前后綴情況,"〈","〉"符號被加到了詞的前后端。除了詞的子串外,詞本身也被包含進了N-Gram字母串包。以where為例,$n=3$的情況下,其子串分別為:
〈wh,whe,her,ere,re〉,以及其本身〈where〉在具體實現(xiàn)中,fastText用子詞向量的加和平均表示詞向量,提供了skip-gram和cbow兩種模式訓練詞嵌入表達。fastText詞嵌入具有以下優(yōu)勢:
(1)適合大型數(shù)據(jù)并具有高效的訓練速度:能夠訓練模型“在使用標準多核CPU的情況下10分鐘內(nèi)處理超過10億個詞匯”,特別是與深度模型對比,fastText能將訓練時間由數(shù)天縮短到幾秒鐘。
(2)支持多語言表達:利用其語言形態(tài)結構,fast-Text能夠被設計用來支持包括英語、德語、西班牙語、法語以及捷克語等多種語言。fastText的性能要比時下流行的Word2Vec工具明顯好上不少,也比其他目前最先進的詞態(tài)詞匯表征要好。
學習跨語言詞嵌入的方法一般依賴于雙語詞典或平行語料庫,Mikolov等人[14]證明了雙語詞向量可以“離線”獲得。首先獨立地獲得不同語言的兩組詞向量,然后使用字典訓練線性矩陣W將“源”語言的詞向量映射到“目標”語言。為此,他們使用已知的n=5000對單詞的字典{Xi,yi}i∈{1,n},并學習源語言空間和目標語言空間之間的線性映射W。
其中d代表詞嵌入的維數(shù),Md(R )是d×d的矩陣空間,X和Y是兩個包含并行詞匯表詞嵌入的大小為d×n的矩陣。
Lample等人[16]認為可以在不使用任何平行語料庫的情況下,使用無監(jiān)督的方式,通過對齊單語詞嵌入空間來構建兩種語言之間的雙語詞典。Dinu等人[15]沒有對Mikolov等人[14]用到的最小二乘法函數(shù)進行改進,而是提出了一種檢索翻譯對的改進方法,提高了英語翻譯成意大利語時的準確率。Faruqui等人[17]使用CCA獲得了雙語詞匯向量,并證明了CCA和降維的組合方法提高了單語向量在標準評估任務上的表現(xiàn)。Smith等人[10]認為任何兩種語言,例如英語、意大利語,對于大部分英語單詞,都有意大利語能夠表示與其相等或相似的含義。而含義相同的意大利詞A和英語詞B,通過相同的算法和參數(shù)學習,詞A和詞B有“輪廓相似,夾角隨機”的詞嵌入。這類似于要求兩個制圖師繪制如圖2所示的兩張沒有標明方向的四川地圖。地圖都是正確的,但是一個相對于另一個旋轉(zhuǎn)未知的角度。制圖師可以獨立繪制他們的地圖,然后比較兩者;相對于一個地圖旋轉(zhuǎn)另一個地圖,直到主要城市對齊,并且兩個地圖的內(nèi)在幾何結構越相似,這種旋轉(zhuǎn)對齊就越準確。
Smith等人[10]證明了兩種語言的詞嵌入空間的變換是線性正交的。為了證明詞嵌入空間的映射是線性正交的,定義相似矩陣S=YWXT,X和Y是分別是兩種語言的詞嵌入矩陣,其中每行包含單個詞的詞嵌入,由小寫的x和y表示。矩陣的元素:
此公式表示評估源詞 jth和目標詞ith之間的相似性,其中W為將源語言映射為目標語言的矩陣。相似矩陣列中的最大值給出與特定源詞最相似的目標詞,而行中的最大值給出與給定目標詞最相似的源詞。使用Q將目標詞映射回源詞,定義了另一個相似矩陣:
上述公式表示評估源詞 jth和目標詞ith之間的相似性,其中Q為將目標語言映射回源語言的矩陣。為了保持前后一致,則有 S'=ST,而 S=YWXT,故有Q=WT,即如果W將源語言映射到目標語言,則必有WT將目標語言映射回源語言。
圖2 兩張大小相同、坐標不同的四川地圖
將源詞映射到目標語言時,應該能夠?qū)⑺成浠卦凑Z言并獲得原始向量。即 x~WTy,y~Wx,故有x~WTWx。該表達式適用于任何詞嵌入x,所以可得出結論矩陣W一定是滿足OTO=I的正交矩陣,其中是I是單位矩陣。正交變換保留了矢量范數(shù),因此如果本文將X和Y標準化,則矩陣元素Sij=|yi||Oxj|cos()θij。相似矩陣S=YOXT計算正交變換O下的所有可能的源詞和目標詞對之間的余弦相似度。
事實上這種正交轉(zhuǎn)換類似于圖2的旋轉(zhuǎn),它可以使用奇異值分解(SVD)求解,具體方法如下。本文從字典中生成兩個有序的詞嵌入矩陣X和Y,DD使第ith行的{XD,YD}對應于字典中第ith對源詞的詞嵌入和目標詞的詞嵌入。然后用SVD計算轉(zhuǎn)換矩陣M:
這一步驟是高效的,因為M是與詞嵌入維度相同的正交矩陣。U和V由正交向量列組成,而Σ是包含奇異值的對角矩陣。本文將成本函數(shù)通過O=UVT最小化,進而優(yōu)化相似矩陣:
圖3 詞嵌入應用SVD前后對比圖
以SVD降序的標準返回奇異值。如果對應的詞嵌入失真,奇異值越大,則字典的平均余弦相似度越大。本文可以通過忽略產(chǎn)生較小奇異值的詞嵌入{Ui,Vi}來執(zhí)行降維,即通過刪除UT和VT的最后幾行來實現(xiàn)。事實表明這會使翻譯性能的小幅提升,即轉(zhuǎn)換矩陣M的效果得到了部分提高。圖3表示詞典的部分詞的詞嵌入應用SVD之前和應用之后的英語–漢語共享空間的2D平面圖,其中藍色方塊表示的是英語詞的詞嵌入、橘黃色方塊表示的是中文詞的詞嵌入。
句子嵌入模型的研究主要集中在通過對矢量和矩陣的運算來組合單詞嵌入來計算短語或句子嵌入。最近,Wieting等人[18]從標準詞嵌入開始,通過PPDB數(shù)據(jù)集對詞嵌入進行修改,之后對這些修改后的詞嵌入進行加權平均構建句子嵌入。然而,對詞嵌入的修改至關重要,一般直接的對標準詞嵌入進行加權平均的效果并不好。Arora等人[5]提出了一個新的無監(jiān)督句子嵌入方法(SIF),這種方法類似于TF-IDF的思想,用SIF作為每個單詞的權重,代替TF-IDF值。單詞w的權重為:
其中α為參數(shù),p(w)為單詞w的詞頻。則有句子嵌入{vs:s∈ S} 。
其中,S為句子集合,{vw:w∈V }為詞嵌入,V 為句子分詞的集合。通過調(diào)整α可以使weight(w)達到最優(yōu)解,通常在α=10-3到α=10-4時有最佳性能[5]。由以上公式可知,句子嵌入近似于句子中單詞的向量的加權平均值。對于約頻繁的單詞w,權重α/(p (w)+α)越小,因此這自然導致頻繁單詞的話語權重減小,而且不同領域的語料得到的p(w)不會影響對應的權重計算。
為了獲得更好的效果,除了使用新的詞權重計算方法,還在加權平均后,計算語料庫所有向量構成的第一個主成分U,該主成分U類似于PCA(Principal Component Analysis)的主成分,之后讓每個句子嵌入減去它在U上的投影,最終得到句子嵌入。定義一個向量V在另一個向量U的投影為:
由此可獲得最終句子嵌入的公式為:
分詞是NLP的一項基本工作,現(xiàn)階段有許多分詞工具,例如jieba分詞、哈工大LTP、中科院NLPIR,這些分詞工具在中文分詞領域得到了良好的應用??紤]涉及到中文、英文兩種語言,本文分詞選用了中、英文分詞效果都較好的 Stanford CoreNLP(https://stanfordnlp.github.io/CoreNLP/index.html#download)。對于詞嵌入的預訓練,采用2.1提到的fastText的skip-gram模型,詞嵌入維數(shù)選定為300。用 Wikipedia公開的中文、英文數(shù)據(jù)集作訓練數(shù)據(jù)集,其他參數(shù)設置與Bojanowski等人[11]相同,分別預訓練中、英文詞嵌入。
本文通過預測訓練字典中未見的單詞的翻譯來判定線性轉(zhuǎn)換矩陣的效果。本文首先在3.1預訓練的英文詞匯表中獲得了10,000個最常用的單詞,然后使用API將這些單詞翻譯成中文。本文將這10000個詞匯分為兩部分,將前5000個單詞做訓練字典,將后5000個單詞做測試字典。通過本文所提方法訓練出中文詞嵌入轉(zhuǎn)換成英文詞嵌入的線性轉(zhuǎn)換矩陣,代碼及參數(shù)等可部分參考(https://github.com/Babylonpartners/fast-Text_multilingual)。本文使用本文自己的方法以及Mikolov[14]、Faruqui[17]和 Dinu[15]提出的方法進行對比試驗,以證明通過本文的方法訓練出的線性轉(zhuǎn)換矩陣切實可用。本文通過應用最小二乘法計算Mikolov[14]提出的方法的結果,使用Scikit-learn的默認參數(shù)實現(xiàn)Faruqui[17]提出的CCA方法的結果,使用Dinu[15]提供的源代 碼(http://clic.cimec.unitn.it/~georgiana.dinu/down/)計算Dinu提出的方法的結果。
需要指出的是詞嵌入通過其向量的歸一化內(nèi)積來定義兩個單詞之間的相似性。在上文提到的幾種方法下,本文都預測與源詞最近鄰的翻譯。例如,如果想將中文詞a翻譯成英文,只需找到與中文詞嵌入va通過線性轉(zhuǎn)換矩陣轉(zhuǎn)換的英文詞嵌入vb余弦相似性最高的詞嵌入vc即可,詞嵌入vc對應的詞即使“信息”的英文翻譯,其中vc∈vw,w為測試集的中文詞嵌入集合。本文將中文翻譯成英文的實驗結果在表一中進行展示。@n表示實際翻譯的詞是目標詞在測試集中n個最近的鄰居之一的概率??梢园l(fā)現(xiàn)本文的方法在@1下達到了0.407,高于其他的幾種方法。@5,@10下,本文的方法也顯著高于其他方法。通過對比實驗可以看出本文訓練的線性轉(zhuǎn)換矩陣有較好的翻譯性能,即比較適合用作中英文詞嵌入空間的轉(zhuǎn)換。
表1
本文通過預測中文問句在共享詞嵌入空間的句子嵌入與該句子英文翻譯在共享詞嵌入空間的句子嵌入的相似度,來判斷基于共享詞嵌入空間的跨語言相似問句挖掘模型的效果。由于中英文問句對數(shù)據(jù)集的缺乏,本文構建了自己的中英文問句對數(shù)據(jù)集。本文選用國內(nèi)知名的問答社區(qū)知乎,運用網(wǎng)絡爬蟲技術抓取了信息安全相關話題下的問題數(shù)據(jù)128663個,并根據(jù)回答數(shù)等信息篩選出1000個回答數(shù)、閱讀數(shù)較多的問句作為本文的中文問句數(shù)據(jù)集。
調(diào)用API將這1000個中文問句翻譯成英文問句,并人工檢查確保問句翻譯可靠。用這1000個挑選的中文問句和相對應的1000個英文翻譯問句組成本文的中英文問句對數(shù)據(jù)集。
本文分別處理中英文問句對數(shù)據(jù)集中的中英文問句,首先本文將英文問句分詞,結合3.1小節(jié)英文詞嵌入預訓練向量,按照2.3小節(jié)方法將詞嵌入組合成句子嵌入。中文問句的處理與英文問句基本相似,只需多加一步將分詞得到的中文詞嵌入通過3.2節(jié)訓練出的線性轉(zhuǎn)換矩陣轉(zhuǎn)換到英文詞嵌入空間(可參考圖2)。本文可以通過預測中文問句的翻譯,來驗證本文句子嵌入模型的有效性。參考3.2節(jié)定義的單詞相似性,句子嵌入通過其向量的歸一化內(nèi)積來定義兩個句子之間的相似性。與3.2類似本文預測與源句最近鄰的翻譯。例如,如果想將中文問句sa翻譯成英文,只需找到與中文問句嵌入vsa經(jīng)過一系列轉(zhuǎn)換、組合后生成的英文問句嵌入vsb余弦相似性最高的問句嵌入vsc即可,其中sa∈Sa,sc∈Sc,{ }Sa,Sc∈S,S為中英文問句對數(shù)據(jù)集,Sa,Sc分別為中文,英文問句集。@n表示實際翻譯的句子是目標句子在數(shù)據(jù)集Sc中n個最近的鄰居之一的概率。實驗結果如表2所示。
表2
Sacaleanu等人[19]德語問題尋找相似的英語問題準確率為0.255、英語問題尋找德語相似問題的準確率0.23。由實驗結果可知本文的方法在@1下準確率為0.313,考慮到英語、德語同屬于日耳曼語族的西日耳曼語支,即英語和德語的密切關系遠高于英語和漢語的密切關系。因此,本文的方法在一定程度上優(yōu)于Sacaleanu等人的方法。
本文提出了一種基于句子嵌入來查找跨語言相似問句的新方法,該方法通過中英文詞嵌入轉(zhuǎn)換和SIF構造同一詞嵌入空間下的中英文句子嵌入,通過計算同一空間下句子嵌入的內(nèi)積來計算跨語言句子的相似性,最后本文驗證了該方法的可行性。與其他跨語言相似問句查找方法相比,本文的方法無需監(jiān)督,無需大規(guī)模平行語料庫或同義詞林,且中英文字典語料庫對該方法效果影響較小。由于本文的方法無需監(jiān)督且詞典的影響較小,該方法不但可應用與中英文跨語言相似問句查找,也可用與其他語言間的相似問句查找。下一步,會將該方法運用到實際的中文和英文問答社區(qū)跨語言相似問句查找上(知乎和Quora),并視情況擴展到其他語言間跨語言相似問句查找。