高 芬 蘇依拉 牛向華 趙 旭 范婷婷 仁慶道爾吉
(內(nèi)蒙古工業(yè)大學信息工程學院 內(nèi)蒙古 呼和浩特 010080)
神經(jīng)網(wǎng)絡(luò)機器翻譯[1](Neural Machine Translation,NMT)是用神經(jīng)網(wǎng)絡(luò)實現(xiàn)機器翻譯的技術(shù)。NMT與語言無關(guān),它負責把一個輸入序列轉(zhuǎn)換成為一個輸出序列[2],輸入序列的基本粒度對翻譯結(jié)果有一定的影響[3]。
我國是一個由56個民族組成的國家,蒙古族是重要的組成成員之一。伴隨著“一帶一路”經(jīng)濟帶的發(fā)展,我國內(nèi)蒙古自治區(qū)經(jīng)濟逐漸繁榮,對外貿(mào)易日益頻繁,越來越多的企業(yè)與個人來到內(nèi)蒙古地區(qū)進行貿(mào)易往來和旅游。因此蒙族與漢族的交流日益頻繁,蒙古語被使用的范圍越來越廣泛。蒙漢神經(jīng)機器翻譯的研究有利于蒙漢之間文化融合和信息共享,具有非常重要的理論和應(yīng)用研究價值。然而,由于人才和資源的缺乏,蒙漢機器翻譯的研究還處于相對比較落后的階段。
蒙古語有傳統(tǒng)的蒙古語和西里爾語蒙古語。本文研究的語料庫特指的是傳統(tǒng)的蒙古文本和中文文本。傳統(tǒng)的蒙古語屬于阿爾泰語系,漢語屬于漢藏語系,因此兩種語言在形式、特征和構(gòu)成上都有所不同。在蒙文-中文機器翻譯任務(wù)中,由于蒙漢平行語料缺乏,導(dǎo)致數(shù)據(jù)稀疏性問題嚴重,嚴重影響了模型的翻譯效果。在神經(jīng)機器翻譯模型中,詞切分技術(shù)被廣泛應(yīng)用于西方語言的神經(jīng)機器翻譯中,并取得了良好的效果。因此,語料庫的切分是預(yù)處理過程中特別重要的一步。語料庫粒度的差異導(dǎo)致翻譯結(jié)果差異很大[4]。較大的輸入序列粒度可以保留更完整的局部信息和特征,但可能會導(dǎo)致數(shù)據(jù)稀疏問題嚴重。使用較小輸入序列粒度可以緩解數(shù)據(jù)稀疏問題,但是將丟失大量局部信息和特征。因此,為了在有限的數(shù)據(jù)和硬件資源條件下,提高蒙漢神經(jīng)機器翻譯系統(tǒng)的性能,考慮合適的切分粒度處理是非常重要的。
為了選擇合適的翻譯粒度,我們分別在源端蒙語和目標端漢語上從詞-詞、詞-子詞、子詞-詞、子詞-子詞這四個切分方向進行實驗。
蒙古文屬于阿爾泰語系[5],它在拼音的方法上與西歐和世界各地的主要拼音文字一樣。下面為蒙文句子:
可以看出,蒙古文句子各個詞之間由空格隔開,故蒙文本身就屬于詞級粒度。
不同于蒙古文句子,漢語句子中沒有詞的界限,因此在進行訓(xùn)練時,一般要將中文進行分詞,漢語分詞是按照某種規(guī)則將連續(xù)的中文字符序列進行分割。本文的漢語分詞是使用雙向LSTM+CRF來實現(xiàn)的。
CRF[6]即條件隨機場,是判別式模型,計算公式表示為:
(1)
(2)
式中:Z(x)為規(guī)范化因子;tk、sl是特征函數(shù),值取1或者0,當滿足特征條件時取值為1,否則為0,tk依賴于當前位置和前一個位置,sl依賴于當前位置;λk、μl是tk、sl對應(yīng)的權(quán)值。
雙向LSTM+CRF模型網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示。
圖1 雙向LSTM+CRF模型網(wǎng)絡(luò)結(jié)構(gòu)圖
圖1中:Ii代表當前單詞i以及當前單詞左側(cè)上文的信息;ri代表當前單詞i以及當前單詞右側(cè)下文的信息;Ci代表連接ri和Ii產(chǎn)生的包含上下文信息的單詞i的向量。
雙向LSTM+CRF其實就是序列標注,輸入一個句子時,首先對句子進行字符嵌入,將得到的結(jié)果輸入給雙向LSTM[7],雙向LSTM輸出當前位置對各詞性的得分,然后加一個CRF就得到標注結(jié)果[8]。CRF層約束了當前位置對各詞性得分加上前一位置的詞性概率轉(zhuǎn)移。CRF層的好處是引入一些語法規(guī)則的先驗信息。
(3)
式中:A代表轉(zhuǎn)移矩陣;P代表雙向LSTM網(wǎng)絡(luò)的判別得分。
訓(xùn)練過程的實質(zhì)其實是最大化條件概率P(y|X),P(y|X)是正確詞性序列的條件概率。
(4)
雙向LSTM+CRF分詞后的中文句子如下:
不規(guī)則 多邊形
中文句子經(jīng)過雙向LSTM+CRF分詞后,一個中文序列被切分成一個單獨的詞。
子詞粒度切分是利用 Sennrich等[9]開發(fā)的subword-nmt開源系統(tǒng)進行BPE技術(shù)處理。
BPE的思想:將訓(xùn)練語料中的單詞拆分成為更常見的子詞,在文本長度和詞表大小兩個方面取得較為平衡的狀態(tài),并且一些低頻單詞的翻譯可以通過翻譯其中的高頻子詞來實現(xiàn)。BPE處理后的分詞后的中文句子如下:
不@@ 規(guī)則 多@@ 邊@@ 形
中文進行BPE處理后,由“不規(guī)則”變成了更常見的子詞“不”和“規(guī)則”,“多邊形”變成了更常見的子詞“多”、“邊”和“形”。
BPE處理后的蒙文句子如下:
將詞分割成合適粒度的子詞,能夠讓機器翻譯模型自動學習到一些復(fù)雜種類詞的翻譯方式,例如復(fù)合詞、同根詞等。同時,對蒙古文詞進行細粒度切分,可以挖掘其中包含的隱藏信息,使得神經(jīng)機器翻譯模型從更小的層面來學習蒙古文到漢文的翻譯。
LSTM[11]是RNN的一種特殊形式,它有能力學習長期依賴關(guān)系,LSTM可以默認記住長時間以前的信息。
門是一種讓信息選擇性通過的方式,它由一個Sigmoid神經(jīng)網(wǎng)絡(luò)層和一個逐點相乘操作組成。Sigmoid層輸出{0,1}之間的數(shù)字,表示每個組件有多少信息允許通過。0表示不允許信息通過,1表示讓所有信息通過。
一個LSTM核心部件有3個這樣的門,分別為遺忘門、更新門和輸出門。
(1) 遺忘門:決定對于之前狀態(tài)Ct-1是留下還是去除,其通過輸入xt和上一層的隱藏狀態(tài)ht-1來決定是否需要保留之前的狀態(tài)。
ft=σ(Wf·[ht-1,xt]+bf)
(5)
it=σ(Wi·[ht-1,xt]+bi)
(6)
(7)
(8)
(3) 輸出門:決定隱藏狀態(tài)ht的輸出值。
ot=σ(Wo[ht-1,xt]+bo)
(9)
ht=ot×tanh(Ct)
(10)
式(5)-式(10)中:x表示輸入向量;t表示時刻;h表示隱藏層節(jié)點向量;f表示遺忘門的輸出;σ為sigmod函數(shù);W為參數(shù)矩陣;b為偏置值;C表示狀態(tài)。LSTM的結(jié)構(gòu)如圖2所示。
圖2 LSTM結(jié)構(gòu)圖
Transformer[12]是端到端的Seq2Seq[13]結(jié)構(gòu),它已基本取得了目前神經(jīng)網(wǎng)絡(luò)機器翻譯最好的效果,完全使用注意力機制。
注意力機制的本質(zhì)來自源于人類的視覺注意力機制。注意力機制函數(shù)可以被描述為一個查詢(Query)到一系列鍵-值對的映射[14]。注意力機制原理如圖3所示。
圖3 注意力機制原理圖
Attention(Query,Source)=
(11)
注意力函數(shù)計算分為三步:
(1) 將Query和每個Key進行相似度計算得到權(quán)重;
(2) 使用Softmax函數(shù)對這些權(quán)重進行歸一化處理;
(3) 將權(quán)重和相應(yīng)的鍵值進行加權(quán)求和得到最后的Attention。
Transformer包含Encoder和Decoder,如圖4所示。在蒙漢神經(jīng)機器翻譯中,Encoder負責理解蒙文,Decoder負責產(chǎn)出中文。編碼器的輸出作為解碼器的輸入。Transformer翻譯模型中,編碼器和解碼器都有多層。首先在編碼器到解碼器的地方使用了多頭自注意力[15]進行連接,其實就和主流的機器翻譯模型中的注意力一樣,利用編碼器和解碼器注意力來進行翻譯對齊。然后在編碼器和解碼器中都使用了多頭自注意力來學習文本的表示。
圖4 Transformer結(jié)構(gòu)簡圖
編碼器結(jié)構(gòu)圖如圖5所示,在Transformer翻譯模型中,編碼器有6層,每一層包含2個子層。
圖5 編碼器
解碼器結(jié)構(gòu)圖如圖6所示,在Transformer翻譯模型中,解碼器也有6層,它和編碼器的不同之處在于解碼器多了一個Encoder-Decoder Attention,編碼器Attention用于計算輸入權(quán)值,解碼器 Attention用于計算輸出權(quán)值。
圖6 解碼器
自注意力表示當前翻譯和已經(jīng)翻譯的前文之間的關(guān)系。在自注意力中,Key=Value=Query,Key、Value、Query分別是編碼器層的輸出(Key=Value)和解碼器中多頭注意力的輸入。例如在蒙漢翻譯中,輸入一句蒙語,那么里面的每個詞都要和該句子中的所有詞進行注意力計算。目的是學習句子內(nèi)部的詞依賴關(guān)系,捕獲句子的內(nèi)部結(jié)構(gòu)。
多頭注意力其實就是多個自注意力結(jié)構(gòu)的組合,每個頭學習到的注意力的側(cè)重點不同。多頭注意力的優(yōu)勢在于進行了h次計算而不僅僅計算一次,這樣的好處是可以允許模型在不同的表示子空間里學習到相關(guān)的信息。
實驗分別選用了哈佛大學開源的機器翻譯庫OpenNMT和谷歌開源的機器翻譯庫Tensor2Tensor訓(xùn)練標準神經(jīng)網(wǎng)絡(luò)模型,可以更加全面和客觀地驗證實驗的有效性和可靠性。OpenNMT是基于LSTM和注意力機制的機器翻譯模型。Tensor2Tensor是完全使用注意力機制來建模,即基于Transformer的翻譯模型。
在蒙漢翻譯系統(tǒng)中,為了在源端和目標端選出合適的輸入序列粒度,本文基于LSTM和Transformer翻譯模型,分別在源和目標端上從詞-詞、詞-子詞、子詞-詞、子詞-子詞這四個切分方向進行實驗。圖7為系統(tǒng)結(jié)構(gòu)圖。
圖7 系統(tǒng)結(jié)構(gòu)圖
本文使用了CWMT去重校正過的116 002句對蒙漢平行語料為訓(xùn)練集,1 500句對蒙漢平行語料作為驗證集,1 000句對蒙漢平行語料作為測試集。為了保證訓(xùn)練集和測試集的數(shù)據(jù)在同一個分布中,我們先將語料庫打亂混合在一起,然后再將數(shù)據(jù)集劃分為訓(xùn)練集、驗證集和測試集。
實驗環(huán)境為Ubuntu16.04 Linux系統(tǒng),Python 2.7.0,TensorFlow 1.6.0,PyTorch 0.4.3。使用GPU進行訓(xùn)練,提高運行速度。
基于LSTM的翻譯模型參數(shù)設(shè)置:編碼器和解碼器中 LSTM 神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層數(shù)設(shè)置為 2 層,編碼器/解碼器上設(shè)置500個隱藏單元,選擇tanh()為激活函數(shù),Adam[16]為優(yōu)化算法,Dropout 設(shè)置為 0.3,迭代步數(shù)train_steps=100 000,學習率初始值learning_rate= 0.1,學習率衰減速率設(shè)置為 1,batch_size設(shè)置為64句。選擇 BLEU 值作為翻譯譯文質(zhì)量的評測指標。
基于Transformer的翻譯模型參數(shù)設(shè)置:Transformer的神經(jīng)網(wǎng)絡(luò)層數(shù)Nx=6,多頭注意力為8,隱藏層大小設(shè)置為512,過濾器大小設(shè)置為2 048。選擇Adam優(yōu)化算法。學習率初始值learning_rate= 0.6,采用學習率衰減策略[12]。解碼過程采用集束搜索策略,beam width=4。迭代步數(shù)train_steps=100 000,batch_size設(shè)置為4 096詞,選擇BLEU值作為翻譯譯文質(zhì)量的評測指標。
表1統(tǒng)計了四組不同切分粒度下,在相同的訓(xùn)練語料中詞典規(guī)模的大小??梢钥闯觯?jīng)過BPE處理后,詞典大小明顯減少。子詞切分粒度縮小了詞典大小,進而減少了計算量。
表1 不同粒度的詞典大小統(tǒng)計結(jié)果
從表2和表3可以看出,無論是基于LSTM翻譯模型還是基于Transformer翻譯模型,單獨對蒙文或者中文進行子詞粒度的切分,對翻譯效果提升影響不大,但是同時對蒙文和中文進行子詞粒度的處理,能顯著提高翻譯效果。在LSTM蒙漢神經(jīng)機器翻譯系統(tǒng)中,對中文和蒙文同時進行子詞粒度處理比詞級粒度翻譯系統(tǒng)提高2.59個BLEU值。在Transformer蒙漢神經(jīng)機器翻譯模型中,對中文和蒙文同時進行子詞粒度處理比詞級粒度翻譯模型提高了4.12個BLEU值。實驗結(jié)果同時也表明,Transformer翻譯模型性能更優(yōu)于LSTM翻譯模型,BLUE值大約高3~5。
表2 不同粒度在LSTM翻譯模型的表現(xiàn)
表3 不同粒度在Transformer翻譯模型的表現(xiàn)
對語料進行粒度切分,能夠減少低頻詞的數(shù)量,緩解數(shù)據(jù)稀疏,且對于平行語料稀缺的蒙漢神經(jīng)機器而言尤其重要。本文實驗結(jié)果表明,對語料進行一定粒度切分可以提升機器翻譯系統(tǒng)的翻譯質(zhì)量。
下一步擬將蒙古文字符引入蒙漢神經(jīng)機器翻譯中。蒙古文詞都是由基本的蒙古文字符組成,并且其組成具有一定的詞法規(guī)律[17],將蒙古文切分為蒙古文字符進行機器翻譯粒度的輸入,機器翻譯模型就可以學習到這種詞法信息,大部分詞法信息與句法信息有所關(guān)聯(lián),因此有助于提高翻譯系統(tǒng)的翻譯效果。