梁登玉,劉大明
(上海電力大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 200090)
傳統(tǒng)的文本匹配方法主要從詞匯層面衡量2 個(gè)文本的匹配程度,即2 個(gè)文本中出現(xiàn)相同詞的個(gè)數(shù)越多,詞序列的排序越接近,則相似度越高,典型的方法有TF-IDF、BM25 等。由于詞與詞之間相互獨(dú)立,沒有考慮上下文語境,因此這種基于詞匯重合度的匹配方法有很大的局限性,例如“蘋果”在不同語境下有不同的意義,可能表示水果,也可能表示公司。近年來,文本匹配的深度學(xué)習(xí)方法取得了一定進(jìn)展[1-3],使用深度學(xué)習(xí)方法的文本匹配模型首先對(duì)輸入文本進(jìn)行分詞,然后使用詞嵌入技術(shù)將分好的詞轉(zhuǎn)化為詞向量,將待比較的2 個(gè)句子向量通過同一個(gè)深度神經(jīng)網(wǎng)絡(luò)編碼器映射到相同的向量空間中,最后使用分類技術(shù)計(jì)算2 個(gè)句子的匹配程度。通過詞嵌入技術(shù)訓(xùn)練詞向量的常用方法是Word2Vec[4]和Glove[5],其本質(zhì)是基于共現(xiàn)信息訓(xùn)練詞向量,這種詞向量表示增強(qiáng)了詞的上下文信息表示,但沒有解決句子語義表示問題,因此需要將詞向量輸入到深度神經(jīng)網(wǎng)絡(luò),即編碼器中,獲取句子級(jí)的上下文語義信息。例如,Text-CNN[6]使用卷積神經(jīng)網(wǎng)絡(luò)編碼每個(gè)句子,基于雙向的長短期記憶網(wǎng)絡(luò)(Bi-directional Long Short Term Memory,BiLSTM)的文本匹配模型[7]使用雙向長短期記憶神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)句子的編碼表征。單純的句子編碼方法將每個(gè)句子編碼成一個(gè)固定長度的向量,然后直接計(jì)算句子的相似度,模型設(shè)計(jì)簡單、易于應(yīng)用推廣。但研究發(fā)現(xiàn),通過增強(qiáng)句子間的交互能夠提高文本匹配效果。句子對(duì)交互方法將單詞對(duì)齊和句子對(duì)之間的交互考慮在內(nèi),并且通常在域內(nèi)數(shù)據(jù)上訓(xùn)練時(shí)表現(xiàn)得更好。BiMPM[8]是一種雙邊多視角匹配模型,通過使用BiLSTM 神經(jīng)網(wǎng)絡(luò)對(duì)每個(gè)句子進(jìn)行編碼,從多角度匹配2 個(gè)句子。ESIM 模型[9]采用2 個(gè)BiLSTM神經(jīng)網(wǎng)絡(luò)分別對(duì)句子進(jìn)行編碼以及融合2 個(gè)句子間的詞對(duì)齊信息。ESIM 模型在各匹配任務(wù)上取得了較好的效果。
然而,以上幾乎所有模型最初都是為英文文本匹配提出的。如果將其應(yīng)用于中文文本匹配,通常有兩種方法,一種是以漢字作為模型的輸入,另一種是先把每個(gè)句子分割成單詞,然后把這些單詞作為輸入。雖然基于字符的模型可以克服數(shù)據(jù)在一定程度上的稀疏[10]問題,但這些模型也存在一些缺點(diǎn),比如沒有充分利用詞匯的語義信息,而這些信息可能對(duì)文本語義匹配有用。然而,基于詞的模型經(jīng)常遭受一些由詞分割引起的潛在問題。例如,字符序列“南京市長江大橋”因?yàn)榉衷~不同而產(chǎn)生2 個(gè)不同意思,第1 個(gè)“南京市長江大橋”指的是一座橋,另一個(gè)“南京市長江大橋”指的是一個(gè)人。這句話的模糊性可以通過使用更多的上下文信息來消除。此外,不同工具的細(xì)分粒度也不同。比如“長江大橋”可以分為“長江”和“大橋”2 個(gè)詞。鑒于這種情況,文獻(xiàn)[11]使用詞格長短期記憶網(wǎng)絡(luò)(Lattice LSTM)來表示一個(gè)句子,能夠在沒有分詞的情況下利用單詞信息獲取多粒度的句子表示。Lattice LSTM 模型將輸入的字符和所有能在詞典匹配的單詞一起編碼輸入到模型中,在詞典中選出與字符最相關(guān)的單詞,降低歧義發(fā)生的概率,同時(shí)考慮了字符和詞2 種粒度的輸入,該模型在多個(gè)NLP 任務(wù)中取得了顯著提升效果。尤其是命名實(shí)體識(shí)別任務(wù)中,基于Lattice LSTM 的模型[12]編碼了一系列輸入字符以及所有匹配詞典的潛在單詞,以獲得更好的NER 結(jié)果。文獻(xiàn)[13-15]分別展示了Lattice LSTM 模型在命名實(shí)體識(shí)別領(lǐng)域的應(yīng)用。在神經(jīng)機(jī)器翻譯領(lǐng)域,文獻(xiàn)[16]提出一種基于詞格的遞歸神經(jīng)網(wǎng)絡(luò)編碼器以壓縮編碼多個(gè)標(biāo)記詞格作為輸入,不僅減輕了最佳標(biāo)記方式標(biāo)記錯(cuò)誤的負(fù)面影響,而且具有更強(qiáng)的表達(dá)性和嵌入輸入句子的靈活性。文獻(xiàn)[17]使用Lattice LSTM 模型獲取多粒度信息用于中文分詞任務(wù),文獻(xiàn)[18]使用Lattice LSTM 模型融合外部知識(shí),用于中文關(guān)系提取任務(wù)中。
受到Lattice 結(jié)構(gòu)在自然語言處理領(lǐng)域獲得成功的啟發(fā),在文本匹配任務(wù)中,文獻(xiàn)[19]引入Lattice 結(jié)構(gòu),提出Lattice-CNN 模型,利用基于Lattcie 結(jié)構(gòu)的CNN 神經(jīng)網(wǎng)絡(luò)在詞格上提取句子級(jí)特征。該模型不依賴于字符或單詞級(jí)序列,而是將單詞格作為輸入,其中每個(gè)可能的單詞和字符都將得到平等對(duì)待,并擁有自己的上下文信息,以便它們可以在每一層進(jìn)行交互。對(duì)于每一層中的每個(gè)詞,可以通過池方法以不同的粒度捕獲不同的上下文詞。雖然Lattice-CNN 模型利用了詞格,但它只關(guān)注了局部信息,缺乏全局的句子語義信息表示及句子之間的交互信息。文獻(xiàn)[20]提出一種用于中文短文本匹配的神經(jīng)圖匹配方法,該方法以一對(duì)詞格圖作為輸入,根據(jù)圖匹配注意機(jī)制更新節(jié)點(diǎn)的表示。這種方法既處理了多粒度信息,又關(guān)注句子間的交互信息,該模型優(yōu)于之前的模型效果。文獻(xiàn)[19]和文獻(xiàn)[20]證明了多粒度信息對(duì)文本匹配的重要性。
由于漢語詞匯的多義性給語義理解帶來了很大困難,因此短文本中的一詞多義帶來的問題比長文本中的一詞多義問題更嚴(yán)重。在通常情況下,短文本的上下文信息較少,因此模型極難捕獲正確的語義信息。例如“落后”,有落后和不如的意思,這2 個(gè)句子“她的成績落后于他”和“她的成績不如他”應(yīng)該是相似的,但如果不對(duì)“落后”這個(gè)詞的多義性進(jìn)行解釋,模型將很難判定這2 個(gè)句子是相似的。
本文提出一種融合多粒度信息和外部知識(shí)的短文本匹配模型,使用Lattice LSTM 模型融合字符和單詞級(jí)別的多粒度信息,降低因?yàn)榉衷~錯(cuò)誤導(dǎo)致的誤差傳播。引入知網(wǎng)HowNet[21]作為外部知識(shí)庫,解決單詞的多義性帶來的語義干擾問題,并將HowNet 與Lattice LSTM 相結(jié)合,豐富Lattice LSTM 詞語級(jí)粒度的語義表示。此外,使用軟注意力機(jī)制獲取句子間的交互信息,利用BiLSTM 融合2 個(gè)句子的上下文信息,并通過最大池化和均值池化進(jìn)一步提取特征信息,獲取句子級(jí)語義表示,經(jīng)過拼接之后輸入預(yù)測層,使用softmax分類函數(shù)計(jì)算2 個(gè)句子相似的概率。
圖1 所示為本文模型的框架。其中,輸入層輸入2 個(gè)句子A和Q,使用Word2Vec 將原始字符序列轉(zhuǎn)化為嵌入表示;融合外部知識(shí)的Lattice LSTM 層對(duì)字符,單詞序列以及使用HowNet 釋義后的詞匯信息進(jìn)行編碼表示;模型使用軟注意力機(jī)制捕獲句子間的交互信息;BiLSTM 層用于綜合全局上下文語義信息;池化層用于使用最大池化和均值池化進(jìn)一步提取特征信息,獲取句子級(jí)向量表示,并進(jìn)行拼接;預(yù)測層使用前饋神經(jīng)網(wǎng)絡(luò)和softmax 分類函數(shù)計(jì)算2 個(gè)文本的相似度概率輸出。
圖1 本文模型框架Fig.1 Framework of the model in this paper
本文并未使用基于Bert 等有更強(qiáng)語義能力的預(yù)訓(xùn)練語言模型來設(shè)計(jì)模型,主要考慮到以下幾點(diǎn):
1)在詞向量表示方面,本文使用了Word2Vec 來訓(xùn)練詞向量,因?yàn)锽ert 等預(yù)訓(xùn)練語言模型雖然具有更好的語義表示能力,但模型參數(shù)多,加載速度慢,內(nèi)存、時(shí)間等消耗較大,而Word2Vec 簡單高效,特別適合從大規(guī)模、超大規(guī)模的語料中獲取高精度的詞向量表示。
2)在與詞格和外部知識(shí)結(jié)合方面,本文使用Lattice LSTM 模型。因?yàn)轭愃朴贐ert 這樣的大型預(yù)訓(xùn)練語言模型通常采用一系列細(xì)粒度單元(漢字)作為輸入,并且是按位置排序的序列,這使得利用單詞格和保留位置關(guān)系變得困難。同時(shí),傳統(tǒng)的掩蔽語言模型(Masked Language Model,MLM)可能會(huì)使基于單詞格的預(yù)訓(xùn)練語言模型學(xué)習(xí)到錯(cuò)誤的語義表示。原因是這樣的詞格可能會(huì)引入冗余,即一個(gè)字符可以包含在多個(gè)文本單元中。在掩蔽語言模型中,模型可能引用與隨機(jī)屏蔽的文本單元重疊的其他文本單元,而不是真實(shí)的上下文,導(dǎo)致信息泄漏。而Lattice LSTM 模型結(jié)構(gòu)相對(duì)簡單,且不會(huì)造成信息泄露。
因此,綜合考慮到實(shí)驗(yàn)效果、內(nèi)存消耗等原因,本文沒有使用基于Bert 等有更強(qiáng)語義能力的預(yù)訓(xùn)練語言模型。
本文模型的輸入為基于字符的2 個(gè)句子,輸入層采用訓(xùn)練好的Word2Vec 模型將每個(gè)字符轉(zhuǎn)換為低維實(shí)數(shù)向量,這個(gè)過程通過查找字符嵌入矩陣,即可對(duì)字符進(jìn)行編碼。
雖然模型將字符序列作為直接輸入,但為了充分捕捉單詞級(jí)特征,還需要輸入句子中所有潛在單詞的信息。一個(gè)潛在的單詞是任何字符子序列,它與詞典D中的一個(gè)單詞相匹配,詞典D建立在分割的大原始文本之上。1.2.1 節(jié)將介紹如何使用Lattice LSTM 融合字符和單詞兩個(gè)粒度的信息。
為更好地理解Lattice LSTM 模型的結(jié)構(gòu),首先給出每個(gè)LSTM 單元的計(jì)算公式,如式(1)所示:
其中:ft表示遺忘門 限;it表示輸入門 限表示t時(shí)刻細(xì)胞狀態(tài)的候選值;ct表示cell 狀態(tài)(這里是循環(huán)發(fā)生的地方);ct-1表示t?1 時(shí)刻的細(xì)胞狀態(tài),ot表示輸出門限;ht表示當(dāng)前單元的輸出;ht-1表示前一時(shí)刻單元的輸出;xt表示當(dāng)前時(shí)刻記憶單元的輸入;tanh 為雙曲正切函數(shù);帶角標(biāo)的W和B為模型參數(shù);σ 為sigmoid 激活函數(shù)。
1.2.1 Lattice LSTM 模型
Lattice LSTM 模型的結(jié)構(gòu)如圖2 所示。
圖2 Lattice LSTM 模型的結(jié)構(gòu)Fig.2 Structure of Lattice LSTM model
最終隱藏層的計(jì)算公式如式(9)所示:
1.2.2 融合外部知識(shí)的Lattice LSTM 編碼器
雖然基于Lattice LSTM 的編碼器可以利用字符和單詞信息,但不能充分考慮中文的歧義性。例如圖2 中,單詞“落后”有“落后”和“不如”2 種含義,但在基本的Lattice LSTM 編碼器中只有一種表示。因此,通過引入外部知識(shí)改進(jìn)Lattice LSTM 模型,可以構(gòu)建一個(gè)更全面的詞匯。
最終隱藏層的計(jì)算公式與式(9)相似。
通過計(jì)算得到隱藏層的所有輸出向量(h1,h2,…,hl),其中l(wèi)為句子長度,即字向量的個(gè)數(shù)。
其中:lm和ln分別為2 個(gè)句子的長度。
在Attention 層比較2 個(gè)句子的軟注意力權(quán)重,也就是對(duì)于句子Sm和Sn序列,分別計(jì)算Sm相對(duì)于Sn以及Sn相對(duì)于Sm的注意力權(quán)重,從而得到2 個(gè)不同的權(quán)重分布,通過這種方式捕獲2 個(gè)句子之間的交互信息,計(jì)算公式如式(16)所示:
BiLSTM 層用于將2 個(gè)匹配向量序列聚合成固定長度的匹配向量。由于單向LSTM 接收某個(gè)序列輸入的信息,其網(wǎng)絡(luò)中單個(gè)單元僅參考了該序列的上文信息,而沒有考慮下文信息。為了彌補(bǔ)這一缺點(diǎn),充分利用上下文信息,采用BiLSTM 網(wǎng)絡(luò)。BiLSTM 的網(wǎng)絡(luò)輸出層能夠完整地捕獲輸入序列中每一個(gè)點(diǎn)關(guān)于過去和未來的上下文信息。
根據(jù)LSTM 網(wǎng)絡(luò)的結(jié)構(gòu),每個(gè)LSTM 單元根據(jù)式(1)進(jìn)行計(jì)算。
使用BiLSTM 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),對(duì)來自注意力層的輸出進(jìn)一步編碼,如式(17)所示:
在池化層中,本文使用最大池化和均值池化進(jìn)一步捕捉文本的特征信息,計(jì)算公式如式(18)所示:
最后將2個(gè)向量拼接得到輸出向量,如式(19)所示:
預(yù)測層用于評(píng)估概率分布p(y|Sm,Sn),衡量2 個(gè)句子的相似度。將上一層的輸出向量oout輸入到一個(gè)具有2 層結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò)中,使用softmax激活函數(shù)計(jì)算2 個(gè)文本的相似度概率值,計(jì)算公式如式(20)所示:
其中:F(·)代表1 個(gè)具有兩層的前饋神經(jīng)網(wǎng)絡(luò)和1 個(gè)softmax 激活后輸出層。
最后,使用交叉熵Cross-Entropy 函數(shù)作為損失函數(shù),表達(dá)式如式(21)所示:
其中:p為預(yù)測概率值;y為真實(shí)值。
本文在LCQMC 和BQ 中文數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)。LCQMC 是一個(gè)用于問題匹配的大規(guī)模開放領(lǐng)域語料庫,該數(shù)據(jù)集中的樣本包含一對(duì)句子和一個(gè)二進(jìn)制標(biāo)簽,該標(biāo)簽指示這2 個(gè)句子是否具有相同的含義或具有相同的意圖,若具有相同的含義或意圖,則標(biāo)簽為1,反之標(biāo)簽為0。LCQMC 數(shù)據(jù)集包含238 766 條訓(xùn)練集,8 802 條驗(yàn)證集,12 500 條測試集。LCQMC 數(shù)據(jù)集示例如表1 所示。
表1 LCQMC 數(shù)據(jù)集示例Table1 Example of LCQMC dataset
BQ 數(shù)據(jù)集是一個(gè)針對(duì)特定領(lǐng)域的大規(guī)模銀行問題匹配語料庫,由120 000 個(gè)中文句子對(duì)組成,包括100 000個(gè)訓(xùn)練樣本、10 000個(gè)開發(fā)樣本和10 000個(gè)測試樣本。每一對(duì)還與一個(gè)二進(jìn)制標(biāo)簽相關(guān)聯(lián),該標(biāo)簽指示兩個(gè)句子是否具有相同的含義。
本文的詞典詞匯來自數(shù)據(jù)集LCQMC 和BQ,對(duì)數(shù)據(jù)集進(jìn)行清洗處理并去除停用詞之后,使用Jieba分詞工具進(jìn)行分詞,同時(shí)使用知網(wǎng)HowNet 和百度百科詞匯信息加入較新穎的詞匯,例如“去哪兒網(wǎng)”、“余額寶”、“悅詩風(fēng)吟”等,這些詞即使使用Jieba 分詞工具也不能得到準(zhǔn)確分詞。最后,使用Word2vec進(jìn)行詞匯訓(xùn)練,獲得詞向量。
本文分別采用準(zhǔn)確率(Accuracy,Acc)和F1 值作為測評(píng)指標(biāo),計(jì)算公式如式(22)所示:
其中:TTP為真正例;TTN真負(fù)例;FFP為假正例;FFN為假負(fù)例。
本文實(shí)驗(yàn)采用型號(hào)為RTX 2080S 的GPU 服務(wù)器,在Python3.6 和Pytorch1.5 的環(huán)境下運(yùn)行。由于本文采用了基于改進(jìn)的Lattice LSTM 模型,因此需要設(shè)定各個(gè)部分的參數(shù)。對(duì)于字符嵌入和詞格嵌入,嵌入尺寸分別設(shè)置為100 維和200 維,2 個(gè)LSTM隱藏層的大小設(shè)置為200 維,dropout 設(shè)置為0.5,學(xué)習(xí)率設(shè)置為0.001。在訓(xùn)練模型時(shí),損失函數(shù)使用交叉熵?fù)p失函數(shù),使用Adam 優(yōu)化器更新參數(shù)。使用訓(xùn)練集訓(xùn)練模型,并使用測試集評(píng)估模型效果。模型參數(shù)設(shè)定如表2 所示。
表2 模型參數(shù)Table 2 Model parameter
本文設(shè)計(jì)了3 組實(shí)驗(yàn),分別是不同模型的對(duì)比實(shí)驗(yàn)、探究Jieba 分詞和Lattice 詞格對(duì)實(shí)驗(yàn)結(jié)果的影響實(shí)驗(yàn)、消融實(shí)驗(yàn)。
2.4.1 不同模型的對(duì)比實(shí)驗(yàn)
將BiMPM[8]、ESIM[9]、Lattice-CNN[19]與本文模型進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果如表3 和表4 所示。由表3 和表4 可知,本文模型在2 個(gè)數(shù)據(jù)集上的準(zhǔn)確率和F1值均高于其他3 個(gè)模型。雖然ESIM 模型綜合BiLSTM 模型和注意力機(jī)制,BiMPM 模型利用了更多角度的信息,從多個(gè)視角提取句子的特征,但可能因?yàn)榉衷~錯(cuò)誤影響了模型效果。而Lattice-CNN 模型則因?yàn)槿狈θ值木渥诱Z義表示和多角度的交互信息,而導(dǎo)致效果更差。
表3 不同模型在數(shù)據(jù)集LCQMC 下的對(duì)比實(shí)驗(yàn)結(jié)果Table 3 Comparative experimental results of different models under LCQMC dataset %
表4 不同模型在數(shù)據(jù)集BQ 下的對(duì)比實(shí)驗(yàn)結(jié)果Table 4 Comparative experimental results of different models under BQ dataset %
2.4.2 Jieba 分詞和Lattice 詞格對(duì)實(shí)驗(yàn)結(jié)果的影響
使用Jieba 分詞容易出現(xiàn)錯(cuò)誤,Jieba 分詞和Lattice 詞格對(duì)句子相似性的預(yù)測效果如表5 所示。其中,標(biāo)簽為1 代表兩個(gè)句子語義相似,標(biāo)簽為0 代表兩個(gè)句子語義不相似。從表5 可以看出,分詞對(duì)句子語義的影響比較大,例如“去哪兒”、“去哪兒網(wǎng)”和“去哪兒網(wǎng)”,“余額寶”和“余額寶”,它們只有被正確分詞,才能提供正確的詞向量信息。綜上所述,分詞的正確與否,對(duì)文本語義影響很大,本文融合了Lattice 結(jié)構(gòu)的文本匹配模型,可以獲得比ESIM和BIMPM 模型更好的性能。
表5 Jieba 分詞和Lattice 詞格對(duì)句子相似性的預(yù)測效果Table 5 Prediction results of sentence similarity based on Jieba and Lattice segmentation
2.4.3 消融實(shí)驗(yàn)
對(duì)本文模型的不同方面進(jìn)行消融研究,評(píng)估不同的池化策略(均值、最大值)、注意力層和融合外部知識(shí)對(duì)實(shí)驗(yàn)結(jié)果的影響。實(shí)驗(yàn)結(jié)果如表6所示。
由表6 可知,使用均值池化和最大池化對(duì)模型的影響相對(duì)較小,使用均值池化比使用最大池化的準(zhǔn)確率高0.14 個(gè)百分點(diǎn),因此本文綜合使用了最大池化和均值池化策略。在對(duì)注意力機(jī)制的消融研究發(fā)現(xiàn),有無注意力層對(duì)模型的性能影響很大,因?yàn)樽⒁饬犹峁┝? 個(gè)句子的交互信息,對(duì)計(jì)算2 個(gè)句子的相似度影響很大。由表6 還可知,從HowNet 上引入外部知識(shí)豐富詞匯的語義信息,可以提升模型性能。可以肯定的是,一旦數(shù)據(jù)集中的句子包含更多具有多義性的詞匯,例如“水分”,具有“水汽”和“夸耀”的意思,“落后”除了有落在后面的意思,還具有“不如”的意思,引入外部知識(shí)對(duì)模型的提升效果更加明顯。
表6 在LCQMC 數(shù)據(jù)集下的消融實(shí)驗(yàn)結(jié)果Table 6 Result of the ablation experiment under LCQMC dataset %
本文提出融合多粒度信息和外部知識(shí)的短文本匹配模型,使用由多個(gè)分詞假設(shè)形成的成對(duì)單詞格和外部詞匯知識(shí)作為模型輸入,并結(jié)合軟注意力機(jī)制獲取2 個(gè)句子的交互信息。借鑒BiMPM 模型和ESIM 模型的交互機(jī)制,充分融合Lattice-CNN 模型的優(yōu)點(diǎn),同時(shí)引入外部知識(shí)獲取更豐富的詞匯表示信息。在短文本問題匹配數(shù)據(jù)集LCQMC 和BQ 上的實(shí)驗(yàn)結(jié)果表明,本文模型能有效提升文本匹配的準(zhǔn)確率。后續(xù)將考慮使用Bert 等具有更強(qiáng)語義的預(yù)訓(xùn)練模型與詞格結(jié)構(gòu)構(gòu)建文本匹配模型,在提升模型語義表示能力的同時(shí),進(jìn)一步降低模型復(fù)雜度。