何穎剛,王宇
(集美大學誠毅學院, 福建 廈門 361000)
句子相似度度量是自然語言處理技術的基礎,可應用于文本摘要、搜索引擎、論文查重、輿情分析、新聞去重、問答系統(tǒng)等業(yè)務領域。特別是在文本相似度計算方面,可以有效提高門戶網(wǎng)站新聞去重效果。目前,中文句子相似度計算方法總體上可以分為基于統(tǒng)計學方法、基于漢語語義框架分析方法、基于向量空間模型方法和混合方法4類。
基于統(tǒng)計學方法是通過共現(xiàn)詞、統(tǒng)計詞頻等來計算相似度。趙臻等[1]提出通過對句子語義較為重要的名詞、動詞、關鍵詞等元素的詞性、詞位置以及詞在句子中出現(xiàn)的頻度統(tǒng)計量,設計權(quán)重計算公式,綜合語義相似度和詞序相似度,進行語句相似度計算。馮凱等[2]利用2個句子的所有最長公共子串來計算句子的相似度,在含有大量專有名詞的問題集上提高了句子相似度準確率。傳統(tǒng)相似度計算方法的缺點是受字詞差異、錯別字、語法錯誤、語序的影響較大,基于漢語語義框架分析方法是通過引入知網(wǎng)等專業(yè)語義資源,利用語義關系和語法成分來進行相似度計算。閆紅等[3]在知網(wǎng)的詞匯語義基礎上,加入詞語義原間反義、對義關系、單義原的否定等額外的特征來計算詞語的相似度。朱新華等[4]在知網(wǎng)與同義詞詞林的詞語語義相似度計算方法上重新設計權(quán)重計算策略,并考慮詞語分布統(tǒng)計進行詞語語義相似度計算。黃賢英、張金鵬等[5]基于HowNet語義詞典進行改進,提出從詞項詞性角度構(gòu)建詞性向量,并利用詞性向量計算短文本相似度?;谡Z義的句子相似度算法能夠較好的處理多義詞、同義詞等情況,但準確率受語義資源的質(zhì)量和規(guī)模影響?;谙蛄靠臻g模型方法是利用深度學習等方法建立文本特征向量,通過特征向量進行相似度計算。李曉等[6]基于Word2Vec模型訓練語料庫獲得詞向量,然后根據(jù)句法分析,分別計算主語、謂語、賓語3部分向量相似度,并賦予不同的權(quán)重系數(shù),從而設計句子相似度算法;郭勝國等[7]提出基于詞向量計算Jaccard相似度與基于詞向量依存句法相結(jié)合的相似度計算方法?;旌戏椒ㄊ菍⒍喾N相似度計算方法疊加起來的方法。周永梅等[8]通過綜合VSM算法、語義相似度算法、結(jié)構(gòu)相似度算法并進行改進,加入詞性標注、權(quán)值和知網(wǎng)詞語語義后設計語句相似度算法。繼友翟[9]提出結(jié)合詞語相似度、詞權(quán)重和句型相似度來計算句子語義相似度。宋冬云等[10]通過改進向量空間模型,獲得關鍵詞加權(quán)文本相似度,然后結(jié)合文本主干語義相似度,分別加權(quán)計算得到文本最終相似度?;旌戏椒軌蚓C合考慮語法、語義和文本結(jié)構(gòu),使得文本相似度計算更加準確。
隨著深度學習和大數(shù)據(jù)技術的廣泛運用,在大規(guī)模語料庫上訓練Word2Vec模型,獲得更好的詞向量來表征語義信息,使得對自然語言的理解更加準確成為可能。李偉康等[11]利用深度學習方法將字向量和詞向量結(jié)合起來應用在自動問答系統(tǒng)任務上,并取得不錯的效果。筆者在已有研究基礎上,提出融合字向量和LSTM(長短期記憶)網(wǎng)絡的句子相似度計算方法。
圖1 LSTM單元
2003年,Bengio等[12]提出利用神經(jīng)概率語言模型訓練詞的分布式表示,即詞向量。詞向量表示了語言的深層語義,用稠密的向量解決了傳統(tǒng)one-hot表示帶來的維度災難和詞匯鴻溝問題[13]。2013年Mikolov等[14]改進了神經(jīng)網(wǎng)絡語言模型,提出包含CBOW(Continuous Bag-of-Words)和Skip-gram(Continuous Skip-gram)2種計算框架的語言模型Word2Vec,可實現(xiàn)在海量數(shù)據(jù)集上進行高效詞向量訓練。CBOW原理是利用詞W前后n個詞預測當前詞;而Skim-gram則是利用詞W預測前后n個詞。詞向量可以獲得文本中的語義信息、語句結(jié)構(gòu)信息、句法信息等等豐富的內(nèi)容。在無監(jiān)督學習下通過訓練詞向量可以獲得“queen-king+ man=women”這類詞語語義相關性。字作為中文文本最小組成單位,字包含了豐富的語義信息,特別是成語這樣的超短文本,基于字向量進行分析能夠獲得更好的語義信息。因此,使用字向量來進行中文自然語言處理具有重要的實踐意義。筆者采用Skip-gram模型進行中文字向量訓練,獲得字向量表示,并通過字向量進行句子相似度分析。
1997年,Hochreiter 和 Schmidhuber改進了RNN (Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡)模型,使用LSTM (Long Short-Term Memory,長短期記憶網(wǎng)絡)代替隱藏層的節(jié)點,使得RNN可以記憶、更新長距離的信息,從而可以實現(xiàn)對長距離信息的處理[15]。LSTM的原理是通過門(Gates)的結(jié)構(gòu)來實現(xiàn),如圖1所示。使用門機制可以實現(xiàn)選擇性地讓信息通過。LSTM有3個門:遺忘門(Forget Gate)、輸入門(Input Gate)和輸出門(Output Gate),和單元(cell)實現(xiàn)歷史信息的更新和保留。
為了實現(xiàn)句子相似度計算的任務,筆者提出了基于字向量和LSTM神經(jīng)網(wǎng)絡的相似度計算模型,模型結(jié)構(gòu)如圖2所示。模型總共包含3個主要部分:由字向量構(gòu)成的文本向量化層、基于LSTM的特征信息提取層、相似度度量層。
將文本信息轉(zhuǎn)換為高質(zhì)量的向量表示是自然語言處理工作的首要步驟。利用Word2Vec對語料庫數(shù)據(jù)進行訓練獲得字向量表示,字向量定義如下:
vi=[vi1,vi2,vi3,…,vin]
(1)
式中:vi為第i個字向量;n為字向量的維度,在訓練字向量時進行設置。
進一步地,將語句中的文本逐字映射到向量空間,獲得句子向量化表示:
Sk=[v1,v2,v3,…,vt]
(2)
式中:Sk為句子k;vt為句子中第t個位置字的字向量,對應LSTM網(wǎng)絡第t時刻的輸入向量。
圖2 基于字向量和LSTM的模型結(jié)構(gòu)圖
將向量化后的2個語句的句向量分別輸入LSTM網(wǎng)絡,獲得對應的特征向量。LSTM網(wǎng)絡的計算過程和輸出結(jié)果表述如下:
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表示記憶單元狀態(tài);ot表示輸出門;ht表示隱藏層狀態(tài);σg表示sigmoid函數(shù); °表示元素乘法;vt為t時刻輸入向量;Wi,Wf,Wc,Wo為不同門的權(quán)值矩陣;Ui,Uf,Uc,Uo為各門的偏置值。
LSTM層的輸出結(jié)果取最后一個LSTM單元的輸出值作為特征向量,然后在相似度度量層計算2個句子特征向量的余弦相似度,求得結(jié)果后送入Softmax分類器,獲得相似度判斷結(jié)果。具體計算公式如下:
(9)
式中:yi表示相似度類別;ha是句子的a特征向量表示;hb是句子的b特征向量表示。
首先,通過Word2Vec對語料庫數(shù)據(jù)進行訓練獲得字向量表示。對句子Sa和Sb分別進行預處理,并獲得句子的字序列后,利用Word2Vec訓練得到的字向量,將字序列轉(zhuǎn)換為字向量矩陣[v1,v2,v3,…,vt]。然后,將句子Sa和Sb的字向量矩陣以序列方式分別輸入LSTM到網(wǎng)絡中進行訓練,獲得句子的特征向量表示ha和hb。最后,將句子Sa和Sb的LSTM輸出ha和hb代入相似度計算公式(9),求得相似度值。
dropout方法是目前能有效預防神經(jīng)網(wǎng)絡過擬合的方法之一,其原理是在訓練迭代過程中,以設定的概率P隨機刪除神經(jīng)元,用余下的神經(jīng)元組成網(wǎng)絡來訓練數(shù)據(jù)。為了防止模型過擬合,在圖2所示模型中采用dropout方法隨機選擇部分神經(jīng)網(wǎng)絡節(jié)點失活,從而提高模型的泛化能力,dropout(丟棄率)超參值取20%、30%、40%和50%,分別進行試驗對比選取最優(yōu)值。
采用Chinese STS (中文語義相似度訓練集, 西安科技大學,2016,https://github.com/IAdmireu/ChineseSTS)和CCKS2018 Task3(微眾銀行智能客服問句匹配大賽)提供的語料來進行試驗。Chinese STS是由唐善成等老師收集和整理中文文本語義相似度語料庫, 語料庫分為2個子集,筆者選用simtrain- to05sts數(shù)據(jù)集來進行試驗,該數(shù)據(jù)集一共有10000對句子對,并人工標注了相似度值,取值從0到5(5表示相似度最高,語義相似;0表示相似度最低,語義相反或不相干)。CCKS2018 Task3是微眾銀行提供的自動問答系統(tǒng)語料,該數(shù)據(jù)集共有100000對句子對,并標注了句子對相似度值,取值為0或1(0表示不相似,1表示相似)。從語料庫質(zhì)量上看,語料庫2來源于自動問答系統(tǒng),因此語料庫句子存在錯別字、語法不規(guī)范等問題;語料庫1語句經(jīng)過人工采集、清洗和甄別,語句表述較規(guī)范、數(shù)據(jù)質(zhì)量較高。試驗中,語料庫按70∶10∶20比例分割成訓練集、測試集和驗證集3部分。
試驗采用準確率Precision、召回率Recall和F1值來衡量句子相似度計算方法的性能。準確率用于表示正確分類為指定類別的文檔數(shù)量與分類到了指定類別的全部文檔數(shù)量的比值。召回率是指某個類集內(nèi)同屬于某類別文檔的數(shù)量與文檔集中屬于該類別文檔的數(shù)量的比值。F1值是用來衡量分類模型精確度的一種指標,是準確率和召回率的調(diào)和均值。指標定義公式如下:
(10)
(11)
(12)
式中:TP為正確分類到正類的樣本數(shù);FP為誤分為正類的負樣本數(shù);FN為誤分類到負類的正樣本數(shù)。
采用維基百科中文語料(zhwiki-20180120 -pages-articles,1.42G),對該語料進行繁體轉(zhuǎn)簡體、去除數(shù)字、特殊符號、停用詞等處理后,使用Word2Vec的Skip-gram模型進行訓練得到字向量。為了對比不同粒度向量在模型上的效果,額外訓練了詞向量,分詞工具使用jieba。字向量和詞向量的維度均為400維,上下文窗口大小設置為5,詞頻最小值為5。從字向量訓練結(jié)果中選擇中心字“書”和“房”來計算語義距離最近10個字,結(jié)果如表1所示。另外,為了對比不同粒度向量效果,從詞向量訓練結(jié)果中選擇中心字“圖書”和“學生”來計算語義距離最近4個詞語,結(jié)果如表2所示。
從表1和表2結(jié)果可以看出,字向量對于詞義的準確度的度量要好于使用詞向量:從 “房”和“書”2字的相似度前10個近義字來看,它們的意義與“房”字有較高的相似度和關聯(lián)度;而從“圖書”和“學生”2個單詞的相似度最高的4個單詞來看,關聯(lián)度不夠密切。因此該模型采用字向量進行相似度計算,能夠更好的獲得計算結(jié)果。
提出基于字向量和LSTM神經(jīng)網(wǎng)絡的CV-LSTM模型進行試驗,網(wǎng)絡參數(shù)配置如表3所示。試驗所使用的機器配置為Intel i5-3470 3.2GHZ四核處理器,16GB RAM, Nvidia GTX1060顯卡,Ubuntu16.04操作系統(tǒng),神經(jīng)網(wǎng)絡模型基于tensorflow開源機器學習庫進行開發(fā)。
表1 字符語義距離
表2 詞語義距離
表3 CV-LSTM算法參數(shù)設置
文本向量層主要參數(shù)為字向量維度、滑動窗口大小,筆者選擇字向量維度(100、200、300、400)進行試驗取優(yōu),滑動窗口大小取值為5;LSTM層主要參數(shù)有節(jié)點數(shù)、dropout值、學習率等等,選擇節(jié)點數(shù)(100、200、300、400、500)、dropout(20%、30%、40%、50%)進行試驗取優(yōu),其余參數(shù)如表3所示。模型目標函數(shù)選用交叉熵代價函數(shù)(cross-entropy cost function)。同時,訓練過程使用Adadelta(自適應學習率調(diào)整)算法來優(yōu)化目標函數(shù)。試驗結(jié)果見圖3~圖5。
圖3橫坐標表示模型訓練的 epoch number(全部樣本訓練過的次數(shù)),每個epoch訓練時間約30~60min,與節(jié)點數(shù)量、維度大小呈正相關。從圖3中可知,向量維度取400維對模型的準確率提升較佳。 圖4體現(xiàn)了LSTM節(jié)點數(shù)個數(shù)對模型的影響,從數(shù)據(jù)對比可以看出不同節(jié)點數(shù)下模型準確率相差不大,考慮到訓練時耗,節(jié)點數(shù)選取200。
圖5反映了不同dropout值模型準確率的變化情況。從圖5可以看出,隨著迭代次數(shù)增加,準確率趨于穩(wěn)定,當dropout取0.3時,模型性能較好。
為了驗證算法的有效性,筆者將其與2種傳統(tǒng)的相似度計算方法萊文斯坦比(levenstein ratio)和Jaro-Winkler Distance方法進行對比;同時,根據(jù)文本向量化粒度單位不同,在相同模型下,選擇了詞向量和字向量進行效果比對;另外,為了比對不同神經(jīng)網(wǎng)絡模型的效果,還選擇了卷積神經(jīng)網(wǎng)絡CNN方法、混合LSTM+CNN方法來進行對比。
1)Levenshtein_ratio方法。通過式(13)計算2個字符串相似度:
(13)
式中:sum為2個對比字符串的長度總和;ldist為類編輯距離。相似度閾值取0.618。
2)Jaro-Winkler Distance方法。通過式(14)計算相似度:
(14)
式中,|si|為句子si長度;m為2個句子中相同字符數(shù)量;t為字符替換總次數(shù)的0.5倍。相似度閾值取0.618。
3)WV-CNN方法。使用詞向量,利用卷積神經(jīng)網(wǎng)絡進行訓練和相似度計算。網(wǎng)絡結(jié)構(gòu)主要由1個詞嵌入層、2個卷積層、2個池化層構(gòu)成。卷積核窗口的大小為3,卷積核的個數(shù)為128,池化層采用maxpooling方法。
4)CV-CNN方法。使用字向量,利用卷積神經(jīng)網(wǎng)絡進行訓練和相似度計算。網(wǎng)絡結(jié)構(gòu)和WV-CNN相同。
5)WV-LSTM方法。使用詞向量,利用LSTM模型進行訓練和相似度計算,網(wǎng)絡結(jié)構(gòu)和圖2相同。
6)CV-LSTM方法。筆者的方法,使用字向量,利用LSTM模型進行訓練和相似度計算,模型結(jié)構(gòu)如圖2所示。
7)WV-LSTM-CNN混合方法。使用字向量,利用卷積神經(jīng)網(wǎng)絡和LSTM網(wǎng)絡進行訓練和相似度計算。
對比結(jié)果如表4和表5所示。由表4和表5可以看出,CV-LSTM方法在計算結(jié)果上要好于其他方法,具體分析如下:
1)CV-LSTM方法的指標均高于其他方法。在CCKS2018 Task3數(shù)據(jù)集上CV-LSTM方法準確率比采用詞向量的WV-LSTM方法準確率高6.63%,比傳統(tǒng)的Levenstein-ratio方法高6.55%,在ChineseSTS數(shù)據(jù)集上CV-LSTM方法的準確率也達到了96.1%。這是由于字向量能夠更多保存語義信息,同時,針對語句中用詞不規(guī)范、錯別字、語法錯誤等,通過字向量能夠更好的保留句子的核心結(jié)構(gòu)和語義,降低噪音干擾,提高相似度計算結(jié)果。而傳統(tǒng)的方法對于存在語法錯誤、字詞錯誤、語序錯誤的句子,計算準確率較低。
2)CV-LSTM訓練結(jié)果優(yōu)于CV-CNN訓練結(jié)果,準確率大幅提高為17.33%。這是因為,句子屬于短文本,包含的信息量不如長文本豐富,因此使用卷積神經(jīng)網(wǎng)絡,較難從句子結(jié)構(gòu)中提取出有效的特征信息,導致相似度準確率低于CV-LSTM方法。
3)使用詞向量和字向量進行相似度計算的結(jié)果表明,使用字向量的方法(CV-CNN、CV-LSTM)效果均要好于使用詞向量的方法(WV-CNN、WV-LSTM),這得益于字向量能保存比詞向量更豐富語義信息,從而提升相似度計算效果。
表4 ChineseSTS數(shù)據(jù)集分析結(jié)果
表5 CCKS2018 Task3 數(shù)據(jù)集分析結(jié)果
筆者提出了一種新的語句相似度計算方法,采用Word2Vec訓練得到字向量,將語句編碼為字向量后,輸入LSTM模型得到句子的語義特征,再使用相似度計算公式獲得句子的相似度值。試驗結(jié)果表明了該方法的可行性與有效性,可以更好地完成自動問答系統(tǒng)和畢業(yè)論文課題去重系統(tǒng)中的相似度判斷任務。目前,新聞去重、輿情分析等對相似度計算有著更多的應用需求,下一步工作將開展短文本、長文本相似度算法分析和研究。