陳祖君
(西安培華學(xué)院國際教育學(xué)院 西安 710000)
由于神經(jīng)網(wǎng)絡(luò)被發(fā)現(xiàn)可以進(jìn)行語義的理解和分析,其在自然語言處理領(lǐng)域得到了廣泛的應(yīng)用。由循環(huán)神經(jīng)網(wǎng)絡(luò)演化而來的神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯模型(Neural Machine Translation,NMT)可以綜合語言的語法、語義以及連貫性等方面進(jìn)行機(jī)器翻譯、語義提取、文本摘要等任務(wù)[1]。神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯模型是一種基于循環(huán)神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯模型。文獻(xiàn)[2]提出了一種新的利用循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行序列到序列處理的模型,并把這個模型應(yīng)用到英語-法語翻譯任務(wù)之上,取得了比基于短語的機(jī)器翻譯模型更高的BLEU分?jǐn)?shù)。模型主要通過利用長短期記憶循環(huán)神經(jīng)網(wǎng)絡(luò)(Long Short-Term Memory Recurrent Neural Network,LSTM RNN,本文中將簡稱為LSTM)生成消化和生成序列的方式完成序列數(shù)據(jù)處理[3]。在讀入相同或相似語義的句子時LSTM網(wǎng)絡(luò)隱含層的狀態(tài)向量也相似,據(jù)此推導(dǎo)出神經(jīng)網(wǎng)絡(luò)可以抽象和處理語義相關(guān)的信息。Bahdanau等在論文[4]中對Sutskever等的模型進(jìn)行改進(jìn),加入了注意力機(jī)制(Attention Mechanism)和雙向循環(huán)神經(jīng)網(wǎng)絡(luò),改善了原本模型在處理長句子時性能會出現(xiàn)明顯下降的問題,并且通過注意力機(jī)制可以獲得原始語言和目標(biāo)語言詞匯之間的對應(yīng)情況。
現(xiàn)代英文的基本語素表達(dá)形式是詞,一個詞可以具有多個字,因此如果希望描述一個句子的語義,需要先將句子分詞分為表達(dá)單一含義的詞。分詞任務(wù)本身可能產(chǎn)生歧義,分詞就是具有動詞及形容詞二者特征的詞,尤指以-ing或-ed,-d,-t,-en或-n結(jié)尾的英語動詞性形容詞,具有形容詞功能,同時又表現(xiàn)各種動詞性特點。并且因為之后的處理結(jié)果都會以分詞結(jié)果為基礎(chǔ)會造成分詞錯誤傳播,所以英文分詞的效果會對NMT模型最終的結(jié)果產(chǎn)生很嚴(yán)重的影響。
本文利用和Bahdanau論文相似的模型構(gòu)建NMT自動編碼器[5],通過實驗研究了不同的英文分詞方法對于NMT自動編碼器文本還原能力和語義提取能力的影響。分詞選擇包括Google在處理英文時使用的一元分詞方法以及當(dāng)前英文分詞領(lǐng)域普遍使用的隱含馬爾科夫模型(Hidden Markov Model,HMM)。
長短期記憶循環(huán)神經(jīng)網(wǎng)絡(luò)(LSTM網(wǎng)絡(luò))是一種循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)[6]。其出現(xiàn)是為了解決普通RNN網(wǎng)絡(luò)在迭代次數(shù)上升之后出現(xiàn)的梯度消失問題。LSTM網(wǎng)絡(luò)設(shè)計了一個在迭代過程中可對狀態(tài)進(jìn)行選擇處理的“記憶”機(jī)制,其結(jié)構(gòu)如圖1所示。
圖1 LSTM結(jié)構(gòu)示意圖
LSTM神經(jīng)網(wǎng)絡(luò)可以分成遺忘門(Forget gate)、輸入門(Input gate)、輸出門(Output gate)和輸入輸出神經(jīng)網(wǎng)絡(luò)幾個部分,各部分的作用可以表達(dá)為下式:
其中,i(t)表示t時刻的輸入門輸出、f(t)表示t時刻的遺忘門輸出、c(t)表示t時刻的細(xì)胞狀態(tài)、o(t)代表t時刻輸出門輸出、h(t)表示t時刻隱含層的輸出數(shù)據(jù)、φ表示網(wǎng)絡(luò)神經(jīng)元激活函數(shù)、⊙表示元素乘法(Element-wisemultiply)。
由于采用mini-batch的方法進(jìn)行神經(jīng)網(wǎng)絡(luò)的梯度下降,為此必須要將樣本進(jìn)行batch劃分,為了避免填充機(jī)制造成短句子進(jìn)行很長填充干擾編碼的問題,本實驗采用分桶(bucketing)[7]的方式先將長度相近的句子歸于一個桶中,然后每個桶分別產(chǎn)生定長的訓(xùn)練batch。填充機(jī)制需要顯式使用序列結(jié)束符標(biāo)記序列的結(jié)尾。并且在編碼器的輸入序列最后需要加入解碼起始符號,指導(dǎo)解碼器開始進(jìn)行第一個解碼位置的輸出。
此外,由于英文語料出現(xiàn)相同數(shù)字的概率非常小,如果直接保留數(shù)字也幾乎無法進(jìn)行準(zhǔn)確的輸出,因此將語料中出現(xiàn)的所有數(shù)字內(nèi)容統(tǒng)一處理為同一個數(shù)字標(biāo)簽,防止由于數(shù)字文本的詞向量訓(xùn)練不佳導(dǎo)致解碼性能下降。
編碼器負(fù)責(zé)將輸入序列進(jìn)行編碼在網(wǎng)絡(luò)的LSTM網(wǎng)絡(luò)的隱含層中。
圖2中xi表示輸入序列,hi表示編碼器輸出,對于某一個輸入序列,首先通過詞嵌入網(wǎng)絡(luò)將詞轉(zhuǎn)換成神經(jīng)網(wǎng)絡(luò)詞向量。然后,使用LSTM神經(jīng)網(wǎng)絡(luò)對詞和詞周圍的上下文內(nèi)容進(jìn)行歸納總結(jié),使神經(jīng)網(wǎng)絡(luò)可以利用到更多的上下文特征。由于單向LSTM對數(shù)據(jù)的讀取是順序的,其在讀取到某一位置時只接觸到單向信息,因此本文采用雙向LSTM神經(jīng)網(wǎng)絡(luò)進(jìn)行上下文特征提取。并且由于神經(jīng)網(wǎng)絡(luò)深度的增加可以大大降低擬合所需要的時間并提高網(wǎng)絡(luò)的抽象程度[8],本文使用3層雙向LSTM網(wǎng)絡(luò)作為編碼器網(wǎng)絡(luò)。
編碼器網(wǎng)絡(luò)在每一個序列位置會產(chǎn)生一個對應(yīng)的輸出,在解碼時用于編碼對應(yīng)位置的信息參考。此外,整個序列輸入完成后產(chǎn)生的LSTM隱含層狀態(tài)可以認(rèn)為含有整個序列的相對語義信息,作為解碼器網(wǎng)絡(luò)的初始狀態(tài)傳送給解碼器部分。
圖2 編碼器結(jié)構(gòu)示意圖
解碼器利用RNN的序列生成模型[9]生成序列。RNN序列生成模型根據(jù)之前若干時刻的網(wǎng)絡(luò)輸出產(chǎn)生下一時刻的輸出。解碼器使用單向LSTM神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。對于單向LSTM編碼器而言,將輸入序列反向輸入會使解碼器提供更好的結(jié)果[10],因此本文將編碼器雙向LSTM神經(jīng)網(wǎng)絡(luò)中的反向部分隱含層狀態(tài)作為解碼器的初始狀態(tài),如圖3所示。
解碼器序列生成模型可用下式表示:
其中,yi代表i時刻RNN解碼器的輸出向量,x代表原始語言序列,si代表RNN解碼器在第i時刻的狀態(tài),ci代表i時刻反應(yīng)在原始語言上下文向量。ci是所有編碼器提取的原始序列每一個位置的上下文信息對解碼器輸出序列位置i造成的影響之和。
圖3 解碼器結(jié)構(gòu)示意圖
式中,Tx代表輸入序列的總長度,αij是輸入序列第 j位置的上下文對輸出第i位置造成影響的權(quán)重,hj是編碼器產(chǎn)生的對應(yīng)輸入序列第 j位置的上下文向量。
其中,eij代表輸入序列的第 j位置對輸出序列第i位置的影響分?jǐn)?shù),a是計算該分?jǐn)?shù)使用的模型。本文使用一個簡單的前饋式神經(jīng)網(wǎng)絡(luò)作為模型a。αij在得到所有影響分?jǐn)?shù)之后通過對全部分?jǐn)?shù)計算softmax的方式歸一化得到。
在NMT模型中加入注意力機(jī)制有助于提高系統(tǒng)的性能[11],同時也可以源語言和目標(biāo)語言詞匯在翻譯時的對應(yīng)情況。解碼器的輸出通過和詞庫中的詞向量進(jìn)行softmax運算得到,本實驗使用貪婪算法作為解碼輸出算法,即當(dāng)前的解碼僅取決于詞庫中和當(dāng)前解碼器輸出的softmax概率最大的詞。
本實驗中將NMT的輸入序列和輸出序列統(tǒng)一為同一序列,構(gòu)成基于NMT的自動編碼器。詞向量采用300維神經(jīng)網(wǎng)絡(luò)嵌入詞向量,詞嵌入模型使用單層前饋式神經(jīng)網(wǎng)絡(luò),在NMT模型的訓(xùn)練過程中一并進(jìn)行詞嵌入神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。編碼器采用雙向3層GRU神經(jīng)網(wǎng)絡(luò),每一方向的神經(jīng)網(wǎng)絡(luò)擁有500個GRU單元,且獨自向上堆疊,在向上堆疊的過程中不會和反向的神經(jīng)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換。在頂層直接將雙向神經(jīng)網(wǎng)絡(luò)的輸出粘連作為注意力機(jī)制使用的上下文向量。
解碼器采用單向3層GRU神經(jīng)網(wǎng)絡(luò),初始狀態(tài)選擇編碼器中的反向RNN網(wǎng)絡(luò)。解碼時將上一時刻產(chǎn)生的詞的詞向量輸入解碼器,輸出時采用Sampled Softmax算法[12]進(jìn)行輸出,以防止由于詞庫過大時輸出需要針對詞庫中每一個詞做softmax運算導(dǎo)致速度過慢的問題。
訓(xùn)練的目標(biāo)函數(shù)采用softmax交叉熵,梯度下降采用ADADELTA算法[13],batch大小為 128。為了防止梯度爆炸,如果網(wǎng)絡(luò)梯度的2范數(shù)超過5,則將梯度標(biāo)準(zhǔn)化到2范數(shù)為5。模型初始學(xué)習(xí)率0.1,并在每一次迭代完整個語料庫后降低學(xué)習(xí)率到原來的一半。如果使用NMT模型生成詞嵌入向量,則應(yīng)盡可能避免在第一次迭代語料庫的過程中降低學(xué)習(xí)率,或者在每次訓(xùn)練之前打亂語料庫的排列順序,否則可能導(dǎo)致語料庫靠后位置出現(xiàn)較多的詞對應(yīng)的詞向量訓(xùn)練不足,干擾正常的解碼過程。
此外,為了防止網(wǎng)絡(luò)出現(xiàn)過擬合現(xiàn)象,本文將編解碼器中所有的神經(jīng)元輸出連接進(jìn)行了0.3概率的 dropout[14]。
4.1.1 帶有英文分詞的自動編碼器實驗
針對英文分詞的NMT自動編碼器模型采用jieba分詞用作英文分詞器。jieba分詞采用有向圖構(gòu)建分詞路徑,然后通過動態(tài)規(guī)劃算法[15]尋找基于詞頻的最大切分組合。對于新詞發(fā)現(xiàn),采用了HMM模型進(jìn)行詞性標(biāo)注的方法解決。語料庫的預(yù)料首先經(jīng)過數(shù)字和特殊符號過濾,然后進(jìn)行英文分詞并截取詞頻最高的50000個詞訓(xùn)練向量,超出詞庫的詞以特殊的符號(UNK)統(tǒng)一標(biāo)記。UNK符號數(shù)量占比超過10%的句子會被自動丟棄。模型以一個句子作為一個序列,分桶時分為四個桶,最大序列長度分別為10,30,50,70。這種設(shè)計可以覆蓋語料庫中98%的句子。
4.1.2 基于單字的自動編碼器實驗
基于單字的NMT自動編碼器模型中直接將語料庫英文本做完數(shù)字和符號過濾之后進(jìn)行單字切分,統(tǒng)計每個符號的出現(xiàn)頻率。由于英文實際出現(xiàn)的字相比詞而言少很多,只需要保留符號庫(包括字、標(biāo)點符號、英文單詞)中頻率前10000的符號便可基本覆蓋語料庫中的所有符號。和帶有英文分詞的自動編碼器一樣,超過的符號會以UNK符號代替。
由于一個句子的字?jǐn)?shù)量會比詞多很多,因此將四個桶的最大序列長度更改為50,70,90,110。在這種設(shè)計下可以覆蓋語料庫97%的句子。
本文采用新浪2009年到2017年的國內(nèi)新聞作為語料庫。數(shù)據(jù)總計新聞310327篇,句子7351017句。實驗同時將標(biāo)題和內(nèi)容作為訓(xùn)練數(shù)據(jù),標(biāo)題作為一個獨立的序列樣本。
訓(xùn)練采用單張NVIDIA GeForce GTX 1080 Ti顯卡。每次語料庫的整體迭代訓(xùn)練大約需要4天,平均每個batch的訓(xùn)練時間大約在3s左右。
表1 基于單字的NMT自動編碼器輸出結(jié)果
5.1.1 文本還原情況
基于一元分詞的NMT自動編碼器表現(xiàn)出了潛在的分詞趨向,會將同一個詞的幾個字變成詞首字。但從注意力機(jī)制提供的數(shù)據(jù)中不能看出這個趨向的存在。原因可能是字符進(jìn)行詞嵌入時,沒有足夠的樣本可以分開兩個不同的文字,而導(dǎo)致貪婪解碼時始終出現(xiàn)的是某個詞的第一個字。此外,這個自發(fā)產(chǎn)生的分詞很容易受到周圍字的影響,錯誤較為常見,原因推測為貪婪輸出選擇了的非最佳輸出再輸入解碼器時,影響了下一個輸出的向量。
短句(30字以下)中出現(xiàn)了句首部分混亂,以及提早出現(xiàn)句子結(jié)束符號(End of Sentence,EOS符號)的問題。這種情況只有在需要填充的長度在三分之一以上的情況出現(xiàn)。因此推測可能的原因是相對最大長度最小的桶(本實驗為50字)中,句子仍然過短導(dǎo)致填充字符大量存在,干擾句子原本的語義。
5.1.2 語義提取情況
由于字編碼的限制,句子含義必須從字嵌入向量提取,而英文中字在不同的詞中間可能存在不同的含義,導(dǎo)致編碼器提取的語義和句子真正表述的語義有所差異,造成字解碼時出現(xiàn)難以理解的錯誤。例如例句1中的“non-linear”變成了“nonlinear”。此外,針對音譯詞、外來語、一些縮寫詞等,基于單字的NMT模型不能給出很好的結(jié)果。
總體而言,在文本的還原上,基于單字的自動編碼器可以得到相對較好的結(jié)果,在處理某些實體名稱的情況下會發(fā)生錯誤,尤其是當(dāng)名稱是音譯或者簡稱等不符合語義規(guī)則的詞匯所表示。
表2 基于jieba分詞的NMT自動編碼器輸出結(jié)果
5.2.1 文本還原情況
相比基于一元分詞的NMT自動編碼器,基于HMM分詞器的自動編碼器的在文本還原上結(jié)果不盡如人意,很多關(guān)鍵詞和信息的處理均出現(xiàn)了錯誤。造成這個結(jié)果的原因有兩個:
1)英文分詞器趨向于將一個實體劃分成單一的詞。如第 2 個例子中,“non-financial”、“ management of the business”這些詞均被劃分為一個詞,然而由于本身在語料庫中出現(xiàn)的次數(shù)不多,導(dǎo)致這些詞沒有得到充分的訓(xùn)練,進(jìn)而造成語義上的模糊,將這些詞變換為意義不同的其他詞匯,如例子中的“organization”和“institutions”。
2)由于傳統(tǒng)的基于HMM或者CRF的英文分詞器一般可以進(jìn)行新詞識別,而這些新詞在詞庫中沒有對應(yīng)的詞向量,導(dǎo)致輸入模型之前被替換成特殊符號(UNK)。因為UNK本身在詞庫中作為一個獨立的詞只具有單一的詞向量,這種變換會對文本還原能力產(chǎn)生比較嚴(yán)重的影響。
5.2.2 語義提取情況
相較于一元分詞NMT自動編碼器,基于jieba分詞器的NMT自動編碼器在語句結(jié)構(gòu)的保留情況更好。如果去除掉錯誤的關(guān)鍵詞,大部分的句子語義和語法結(jié)構(gòu)是正確的,這意味著本模型很好地掌握了原句的語義語法結(jié)構(gòu),僅僅不理解關(guān)鍵詞的含義出現(xiàn)文本還原錯誤的問題。
實驗中也可以看出,一些所有詞向量均訓(xùn)練得當(dāng)?shù)木渥赢a(chǎn)生了很好的結(jié)果,如原句1。這意味著只要能解決好詞匯的語義嵌入問題,NMT模型就能在英文上產(chǎn)生很好的結(jié)果。
本文通過NMT自動編碼器實驗研究了現(xiàn)有的一元分詞和HMM分詞器在NMT模型上的文本還原和語義提取情況。實驗表明,一元分詞和傳統(tǒng)的英文分詞系統(tǒng)不能滿足英文在NMT模型上的適配要求,前者由于單字模型很難準(zhǔn)確表達(dá)句子語義,后者由于新詞構(gòu)造、整體分詞趨向的問題影響模型的訓(xùn)練。在兩者之中,一元分詞模型的表現(xiàn)相比而言較好一些,但相比中文在NMT模型中的適配程度仍然有較大距離。Google在自己的NMT方案GNMT(Google's Neural Machine Translation)的相關(guān)實驗中也發(fā)現(xiàn),中譯英系統(tǒng)相比于英譯中的系統(tǒng)BLEU分?jǐn)?shù)表現(xiàn)更差。根據(jù)NMT模型的特點,適用于其上的語言需要滿足兩點:1)可以較為準(zhǔn)確清晰地表達(dá)語義;2)詞匯以最基本的含義為單一詞,不應(yīng)存在可再分的復(fù)合詞。