何穎剛,王宇
(集美大學誠毅學院, 福建 廈門 361000)
句子相似度度量是自然語言處理技術的基礎,可應用于文本摘要、搜索引擎、論文查重、輿情分析、新聞去重、問答系統等業務領域。特別是在文本相似度計算方面,可以有效提高門戶網站新聞去重效果。目前,中文句子相似度計算方法總體上可以分為基于統計學方法、基于漢語語義框架分析方法、基于向量空間模型方法和混合方法4類。
基于統計學方法是通過共現詞、統計詞頻等來計算相似度。趙臻等[1]提出通過對句子語義較為重要的名詞、動詞、關鍵詞等元素的詞性、詞位置以及詞在句子中出現的頻度統計量,設計權重計算公式,綜合語義相似度和詞序相似度,進行語句相似度計算。馮凱等[2]利用2個句子的所有最長公共子串來計算句子的相似度,在含有大量專有名詞的問題集上提高了句子相似度準確率。傳統相似度計算方法的缺點是受字詞差異、錯別字、語法錯誤、語序的影響較大,基于漢語語義框架分析方法是通過引入知網等專業語義資源,利用語義關系和語法成分來進行相似度計算。閆紅等[3]在知網的詞匯語義基礎上,加入詞語義原間反義、對義關系、單義原的否定等額外的特征來計算詞語的相似度。朱新華等[4]在知網與同義詞詞林的詞語語義相似度計算方法上重新設計權重計算策略,并考慮詞語分布統計進行詞語語義相似度計算。黃賢英、張金鵬等[5]基于HowNet語義詞典進行改進,提出從詞項詞性角度構建詞性向量,并利用詞性向量計算短文本相似度。基于語義的句子相似度算法能夠較好的處理多義詞、同義詞等情況,但準確率受語義資源的質量和規模影響。基于向量空間模型方法是利用深度學習等方法建立文本特征向量,通過特征向量進行相似度計算。李曉等[6]基于Word2Vec模型訓練語料庫獲得詞向量,然后根據句法分析,分別計算主語、謂語、賓語3部分向量相似度,并賦予不同的權重系數,從而設計句子相似度算法;郭勝國等[7]提出基于詞向量計算Jaccard相似度與基于詞向量依存句法相結合的相似度計算方法。混合方法是將多種相似度計算方法疊加起來的方法。周永梅等[8]通過綜合VSM算法、語義相似度算法、結構相似度算法并進行改進,加入詞性標注、權值和知網詞語語義后設計語句相似度算法。繼友翟[9]提出結合詞語相似度、詞權重和句型相似度來計算句子語義相似度。宋冬云等[10]通過改進向量空間模型,獲得關鍵詞加權文本相似度,然后結合文本主干語義相似度,分別加權計算得到文本最終相似度。混合方法能夠綜合考慮語法、語義和文本結構,使得文本相似度計算更加準確。
隨著深度學習和大數據技術的廣泛運用,在大規模語料庫上訓練Word2Vec模型,獲得更好的詞向量來表征語義信息,使得對自然語言的理解更加準確成為可能。李偉康等[11]利用深度學習方法將字向量和詞向量結合起來應用在自動問答系統任務上,并取得不錯的效果。筆者在已有研究基礎上,提出融合字向量和LSTM(長短期記憶)網絡的句子相似度計算方法。

圖1 LSTM單元
2003年,Bengio等[12]提出利用神經概率語言模型訓練詞的分布式表示,即詞向量。詞向量表示了語言的深層語義,用稠密的向量解決了傳統one-hot表示帶來的維度災難和詞匯鴻溝問題[13]。2013年Mikolov等[14]改進了神經網絡語言模型,提出包含CBOW(Continuous Bag-of-Words)和Skip-gram(Continuous Skip-gram)2種計算框架的語言模型Word2Vec,可實現在海量數據集上進行高效詞向量訓練。CBOW原理是利用詞W前后n個詞預測當前詞;而Skim-gram則是利用詞W預測前后n個詞。詞向量可以獲得文本中的語義信息、語句結構信息、句法信息等等豐富的內容。在無監督學習下通過訓練詞向量可以獲得“queen-king+ man=women”這類詞語語義相關性。字作為中文文本最小組成單位,字包含了豐富的語義信息,特別是成語這樣的超短文本,基于字向量進行分析能夠獲得更好的語義信息。因此,使用字向量來進行中文自然語言處理具有重要的實踐意義。筆者采用Skip-gram模型進行中文字向量訓練,獲得字向量表示,并通過字向量進行句子相似度分析。
1997年,Hochreiter 和 Schmidhuber改進了RNN (Recurrent Neural Network,循環神經網絡)模型,使用LSTM (Long Short-Term Memory,長短期記憶網絡)代替隱藏層的節點,使得RNN可以記憶、更新長距離的信息,從而可以實現對長距離信息的處理[15]。LSTM的原理是通過門(Gates)的結構來實現,如圖1所示。使用門機制可以實現選擇性地讓信息通過。LSTM有3個門:遺忘門(Forget Gate)、輸入門(Input Gate)和輸出門(Output Gate),和單元(cell)實現歷史信息的更新和保留。
為了實現句子相似度計算的任務,筆者提出了基于字向量和LSTM神經網絡的相似度計算模型,模型結構如圖2所示。模型總共包含3個主要部分:由字向量構成的文本向量化層、基于LSTM的特征信息提取層、相似度度量層。
將文本信息轉換為高質量的向量表示是自然語言處理工作的首要步驟。利用Word2Vec對語料庫數據進行訓練獲得字向量表示,字向量定義如下:
vi=[vi1,vi2,vi3,…,vin]
(1)
式中:vi為第i個字向量;n為字向量的維度,在訓練字向量時進行設置。
進一步地,將語句中的文本逐字映射到向量空間,獲得句子向量化表示:
Sk=[v1,v2,v3,…,vt]
(2)
式中:Sk為句子k;vt為句子中第t個位置字的字向量,對應LSTM網絡第t時刻的輸入向量。

圖2 基于字向量和LSTM的模型結構圖
將向量化后的2個語句的句向量分別輸入LSTM網絡,獲得對應的特征向量。LSTM網絡的計算過程和輸出結果表述如下:
it=σg(Wivt+Uiht-1+bi)
(3)
ft=σg(Wfvt+Ufht-1+bf)
(4)
(5)
(6)
ot=σg(Wovt+Uoht-1+bo)
(7)
ht=ot°tanh(ct)
(8)
式中:it表示輸入門;ft表示遺忘門;ct表示記憶單元狀態;ot表示輸出門;ht表示隱藏層狀態;σg表示sigmoid函數; °表示元素乘法;vt為t時刻輸入向量;Wi,Wf,Wc,Wo為不同門的權值矩陣;Ui,Uf,Uc,Uo為各門的偏置值。
LSTM層的輸出結果取最后一個LSTM單元的輸出值作為特征向量,然后在相似度度量層計算2個句子特征向量的余弦相似度,求得結果后送入Softmax分類器,獲得相似度判斷結果。具體計算公式如下:
(9)
式中:yi表示相似度類別;ha是句子的a特征向量表示;hb是句子的b特征向量表示。
首先,通過Word2Vec對語料庫數據進行訓練獲得字向量表示。對句子Sa和Sb分別進行預處理,并獲得句子的字序列后,利用Word2Vec訓練得到的字向量,將字序列轉換為字向量矩陣[v1,v2,v3,…,vt]。然后,將句子Sa和Sb的字向量矩陣以序列方式分別輸入LSTM到網絡中進行訓練,獲得句子的特征向量表示ha和hb。最后,將句子Sa和Sb的LSTM輸出ha和hb代入相似度計算公式(9),求得相似度值。
dropout方法是目前能有效預防神經網絡過擬合的方法之一,其原理是在訓練迭代過程中,以設定的概率P隨機刪除神經元,用余下的神經元組成網絡來訓練數據。為了防止模型過擬合,在圖2所示模型中采用dropout方法隨機選擇部分神經網絡節點失活,從而提高模型的泛化能力,dropout(丟棄率)超參值取20%、30%、40%和50%,分別進行試驗對比選取最優值。
采用Chinese STS (中文語義相似度訓練集, 西安科技大學,2016,https://github.com/IAdmireu/ChineseSTS)和CCKS2018 Task3(微眾銀行智能客服問句匹配大賽)提供的語料來進行試驗。Chinese STS是由唐善成等老師收集和整理中文文本語義相似度語料庫, 語料庫分為2個子集,筆者選用simtrain- to05sts數據集來進行試驗,該數據集一共有10000對句子對,并人工標注了相似度值,取值從0到5(5表示相似度最高,語義相似;0表示相似度最低,語義相反或不相干)。CCKS2018 Task3是微眾銀行提供的自動問答系統語料,該數據集共有100000對句子對,并標注了句子對相似度值,取值為0或1(0表示不相似,1表示相似)。從語料庫質量上看,語料庫2來源于自動問答系統,因此語料庫句子存在錯別字、語法不規范等問題;語料庫1語句經過人工采集、清洗和甄別,語句表述較規范、數據質量較高。試驗中,語料庫按70∶10∶20比例分割成訓練集、測試集和驗證集3部分。
試驗采用準確率Precision、召回率Recall和F1值來衡量句子相似度計算方法的性能。準確率用于表示正確分類為指定類別的文檔數量與分類到了指定類別的全部文檔數量的比值。召回率是指某個類集內同屬于某類別文檔的數量與文檔集中屬于該類別文檔的數量的比值。F1值是用來衡量分類模型精確度的一種指標,是準確率和召回率的調和均值。指標定義公式如下:
(10)
(11)
(12)
式中:TP為正確分類到正類的樣本數;FP為誤分為正類的負樣本數;FN為誤分類到負類的正樣本數。
采用維基百科中文語料(zhwiki-20180120 -pages-articles,1.42G),對該語料進行繁體轉簡體、去除數字、特殊符號、停用詞等處理后,使用Word2Vec的Skip-gram模型進行訓練得到字向量。為了對比不同粒度向量在模型上的效果,額外訓練了詞向量,分詞工具使用jieba。字向量和詞向量的維度均為400維,上下文窗口大小設置為5,詞頻最小值為5。從字向量訓練結果中選擇中心字“書”和“房”來計算語義距離最近10個字,結果如表1所示。另外,為了對比不同粒度向量效果,從詞向量訓練結果中選擇中心字“圖書”和“學生”來計算語義距離最近4個詞語,結果如表2所示。
從表1和表2結果可以看出,字向量對于詞義的準確度的度量要好于使用詞向量:從 “房”和“書”2字的相似度前10個近義字來看,它們的意義與“房”字有較高的相似度和關聯度;而從“圖書”和“學生”2個單詞的相似度最高的4個單詞來看,關聯度不夠密切。因此該模型采用字向量進行相似度計算,能夠更好的獲得計算結果。
提出基于字向量和LSTM神經網絡的CV-LSTM模型進行試驗,網絡參數配置如表3所示。試驗所使用的機器配置為Intel i5-3470 3.2GHZ四核處理器,16GB RAM, Nvidia GTX1060顯卡,Ubuntu16.04操作系統,神經網絡模型基于tensorflow開源機器學習庫進行開發。

表1 字符語義距離

表2 詞語義距離

表3 CV-LSTM算法參數設置
文本向量層主要參數為字向量維度、滑動窗口大小,筆者選擇字向量維度(100、200、300、400)進行試驗取優,滑動窗口大小取值為5;LSTM層主要參數有節點數、dropout值、學習率等等,選擇節點數(100、200、300、400、500)、dropout(20%、30%、40%、50%)進行試驗取優,其余參數如表3所示。模型目標函數選用交叉熵代價函數(cross-entropy cost function)。同時,訓練過程使用Adadelta(自適應學習率調整)算法來優化目標函數。試驗結果見圖3~圖5。
圖3橫坐標表示模型訓練的 epoch number(全部樣本訓練過的次數),每個epoch訓練時間約30~60min,與節點數量、維度大小呈正相關。從圖3中可知,向量維度取400維對模型的準確率提升較佳。 圖4體現了LSTM節點數個數對模型的影響,從數據對比可以看出不同節點數下模型準確率相差不大,考慮到訓練時耗,節點數選取200。
圖5反映了不同dropout值模型準確率的變化情況。從圖5可以看出,隨著迭代次數增加,準確率趨于穩定,當dropout取0.3時,模型性能較好。
為了驗證算法的有效性,筆者將其與2種傳統的相似度計算方法萊文斯坦比(levenstein ratio)和Jaro-Winkler Distance方法進行對比;同時,根據文本向量化粒度單位不同,在相同模型下,選擇了詞向量和字向量進行效果比對;另外,為了比對不同神經網絡模型的效果,還選擇了卷積神經網絡CNN方法、混合LSTM+CNN方法來進行對比。
1)Levenshtein_ratio方法。通過式(13)計算2個字符串相似度:
(13)
式中:sum為2個對比字符串的長度總和;ldist為類編輯距離。相似度閾值取0.618。
2)Jaro-Winkler Distance方法。通過式(14)計算相似度:
(14)
式中,|si|為句子si長度;m為2個句子中相同字符數量;t為字符替換總次數的0.5倍。相似度閾值取0.618。
3)WV-CNN方法。使用詞向量,利用卷積神經網絡進行訓練和相似度計算。網絡結構主要由1個詞嵌入層、2個卷積層、2個池化層構成。卷積核窗口的大小為3,卷積核的個數為128,池化層采用maxpooling方法。
4)CV-CNN方法。使用字向量,利用卷積神經網絡進行訓練和相似度計算。網絡結構和WV-CNN相同。
5)WV-LSTM方法。使用詞向量,利用LSTM模型進行訓練和相似度計算,網絡結構和圖2相同。
6)CV-LSTM方法。筆者的方法,使用字向量,利用LSTM模型進行訓練和相似度計算,模型結構如圖2所示。
7)WV-LSTM-CNN混合方法。使用字向量,利用卷積神經網絡和LSTM網絡進行訓練和相似度計算。
對比結果如表4和表5所示。由表4和表5可以看出,CV-LSTM方法在計算結果上要好于其他方法,具體分析如下:
1)CV-LSTM方法的指標均高于其他方法。在CCKS2018 Task3數據集上CV-LSTM方法準確率比采用詞向量的WV-LSTM方法準確率高6.63%,比傳統的Levenstein-ratio方法高6.55%,在ChineseSTS數據集上CV-LSTM方法的準確率也達到了96.1%。這是由于字向量能夠更多保存語義信息,同時,針對語句中用詞不規范、錯別字、語法錯誤等,通過字向量能夠更好的保留句子的核心結構和語義,降低噪音干擾,提高相似度計算結果。而傳統的方法對于存在語法錯誤、字詞錯誤、語序錯誤的句子,計算準確率較低。
2)CV-LSTM訓練結果優于CV-CNN訓練結果,準確率大幅提高為17.33%。這是因為,句子屬于短文本,包含的信息量不如長文本豐富,因此使用卷積神經網絡,較難從句子結構中提取出有效的特征信息,導致相似度準確率低于CV-LSTM方法。
3)使用詞向量和字向量進行相似度計算的結果表明,使用字向量的方法(CV-CNN、CV-LSTM)效果均要好于使用詞向量的方法(WV-CNN、WV-LSTM),這得益于字向量能保存比詞向量更豐富語義信息,從而提升相似度計算效果。

表4 ChineseSTS數據集分析結果

表5 CCKS2018 Task3 數據集分析結果
筆者提出了一種新的語句相似度計算方法,采用Word2Vec訓練得到字向量,將語句編碼為字向量后,輸入LSTM模型得到句子的語義特征,再使用相似度計算公式獲得句子的相似度值。試驗結果表明了該方法的可行性與有效性,可以更好地完成自動問答系統和畢業論文課題去重系統中的相似度判斷任務。目前,新聞去重、輿情分析等對相似度計算有著更多的應用需求,下一步工作將開展短文本、長文本相似度算法分析和研究。