薛 媛 蘇依拉 仁慶道爾吉 石 寶 李雷孝
(內(nèi)蒙古工業(yè)大學(xué)信息工程學(xué)院 內(nèi)蒙古 呼和浩特 010080)
隨著全球化的不斷深入,國家與國家之間、民族與民族之間的交往日益頻繁,而各國家、民族之間的語言差異造成了溝通障礙。因此機器翻譯成為不同國家與民族之間的溝通橋梁。蒙古語屬于小語種,蒙漢機器翻譯系統(tǒng)在解決由于語言差異引起的交流障礙問題方面作出了很大的貢獻,本文主要對句法依存樹提高蒙漢機器翻譯系統(tǒng)性能進行研究。
蒙漢機器翻譯主要采用兩種做法:(1) 傳統(tǒng)的基于短語的機器翻譯方法[1];(2) 利用神經(jīng)網(wǎng)絡(luò)模型進行機器翻譯[2]。對于神經(jīng)機器翻譯方法,目前的缺陷是嚴(yán)格依賴于序列編碼器-解碼框架,并且不能有效利用句子的句法信息以及語言的層次結(jié)構(gòu)信息[3]。究其原因是在編碼序列信息時,并沒有找到一種適合的方式將結(jié)構(gòu)信息納入其中[4]。有研究采用間接的方式引入結(jié)構(gòu)信息[5],還有研究對機器翻譯任務(wù)中建模結(jié)構(gòu)信息加以嚴(yán)格的限制。對比本文方法,文獻[6]實現(xiàn)了基于非詞匯化概率上下文無關(guān)文法的蒙古文句法分析系統(tǒng),然后設(shè)計并開發(fā)了基于樹到串的蒙漢統(tǒng)計機器翻譯系統(tǒng),與該文不同,本文的目標(biāo)是為編碼器提供對豐富語法信息的訪問,但是讓它決定語法的哪些方面對機器翻譯有益,而不必對語法和翻譯任務(wù)之間的交互施加嚴(yán)格的限制。因此嘗試在源端加入句法信息作為額外知識來輔助神經(jīng)系統(tǒng)進行翻譯。
自然語言處理(NLP)的核心技術(shù)之一依存句法分析[7],該方法主要通過分析一個句子中詞與詞之間的依賴關(guān)系來確定其句法結(jié)構(gòu)。作為底層技術(shù),依存分析可直接用于機器翻譯以提升其效果,并且對于其他NLP任務(wù)效果的提升也是顯而易見。雖然神經(jīng)機器翻譯技術(shù)已取得了很大的進步,但其翻譯效果還不及人工翻譯的原因之一在于神經(jīng)網(wǎng)絡(luò)只有根據(jù)輸入的平行句子進行學(xué)習(xí)和對齊[8],并沒有很好地利用句子的句法結(jié)構(gòu)和語義結(jié)構(gòu)信息。蒙古語和漢語在語法結(jié)構(gòu)中存在較大差異。蒙古語屬于阿爾泰語系,其語序為主-賓-謂結(jié)構(gòu),即主語在前,謂語在賓語之后,修飾語在被修飾語之前。而漢語屬于漢藏語系,在語序結(jié)構(gòu)中采用主-謂-賓結(jié)構(gòu),其在謂語和賓語部分與蒙古文出現(xiàn)差異,并且這種結(jié)構(gòu)差異會使神經(jīng)網(wǎng)絡(luò)不能完全準(zhǔn)確地進行對齊,造成翻譯性能差,倘若能對句子的句法結(jié)構(gòu)進行分析后再進行編碼就會解決該問題,因此本文提出在編碼器端加入句法結(jié)構(gòu)信息用以輔助神經(jīng)機器翻譯。
DDparser,其全名為Baidu Dependency Parser,是百度開源的基于深度學(xué)習(xí)框架的依存句法分析系統(tǒng),其功能為對于給定的源語言句子,可將其解析為依存句法樹,該系統(tǒng)的開源對于NLP(Natural Language Processing)的下游任務(wù)提供了巨大的幫助,輸入文本通過DDParser輸出其對應(yīng)的句法分析樹。
對于句子“那家的飯菜太淡,還很貴”的依存句法關(guān)系如圖1所示。連接兩詞的弧表示兩個詞語之間的依賴關(guān)系,由核心詞指向依存詞,弧上的標(biāo)簽表示依存詞對核心詞的關(guān)系。其中:ATT表示定中關(guān)系,即定語和修飾詞之間的關(guān)系;DE通常連接“的”與其中心詞;SBV表示主謂關(guān)系,通常也用來表示系詞與表語之間的關(guān)系;ADV表示狀中結(jié)構(gòu),圖1中“淡”是一個形容詞,而“太”作為副詞來修飾“淡”,因此DDparser在解析其關(guān)系時,定義為狀中結(jié)構(gòu);IC表示獨立分句,“淡”和“貴”都用來形容飯菜,但處于兩個分句中。對于百度依存句法分析系統(tǒng)中還存在很多句法關(guān)系,具體請查閱文獻[7]??梢钥闯?將這種依存句法關(guān)系加入到翻譯系統(tǒng)中,可以很好地輔助句子的理解,使得翻譯更加準(zhǔn)確。

圖1 依存句法樹舉例

圖2 編碼器-解碼器模型
機器翻譯是利用計算機將一種語言轉(zhuǎn)換為另一種語言的過程[9]。給定一個含有N個詞的源語言句子X=x1,x2,…,xi,…,xN和一個含有M個詞的目標(biāo)語言句子Y=y1,y2,…,yj,…,yM,NMT做的工作是將句子級概率分解為詞級的概率的乘積:
(1)
式中:θ表示源語言與目標(biāo)語言之間的轉(zhuǎn)化公式。
神經(jīng)機器翻譯模型通常由編碼器、解碼器,以及構(gòu)建編碼器解碼器之間的聯(lián)系的一些方法組成,例如注意力機制,編碼器接收一個源語言句子序列,將其轉(zhuǎn)化為中間表示,解碼器再將這個中間表示生成翻譯,如圖1所示。
給定一個源語言句子序列,編碼器的工作就是將其編碼為一個計算機能夠識別的連續(xù)稠密向量。編碼方式有很多,包括詞袋模型(Bag-of-words,BOW)、循環(huán)神經(jīng)網(wǎng)絡(luò)模型(Recurrent Neural Network,RNN)、卷積神經(jīng)網(wǎng)絡(luò)模型(Convolutional Neural Network,CNN)的編碼器等,本文將重點介紹以上三種編碼方式。
1.2.1BOW(詞袋模型)
BOW[10]的原理十分簡單,就是把一句話轉(zhuǎn)換成計算機能看懂的向量形式,比如給定兩句話:
(1) 我喜歡書法,曉麗也喜歡。
(2) 我也喜歡繪畫。
可以構(gòu)建包含所有單詞的詞典向量dictionary=[我,喜歡,書法,曉麗,也,繪畫]。第一句話的向量表示為v1=[1,2,1,1,1,0];第二句話的向量表示為v2=[1,1,0,0,1,1]
向量的每一個維度表示詞典向量中對應(yīng)的單詞在句子中出現(xiàn)的次數(shù)。不難發(fā)現(xiàn)這種方式雖然可以將一個句子映射為向量形式,但表示出的句子向量是無序的,它不能明確表示一個單詞在句子中的相對位置,為了表明詞的位置信息用了一個位置編碼嵌入。通常選用整數(shù)型數(shù)字來表明詞的位置信息,為該數(shù)字初始化一個列向量表示詞的位置。因此詞袋模型編碼器可以表示為:
BOW(x1:N,i)=xi+pi
式中:pi表示位置向量。
1.2.2RNN編碼器
RNN編碼器[11]模型是在序列建模中應(yīng)用的最多的一種變換方式,輸入一個源語言句子X=x1,x2,…,xi,…,xN,傳送給RNN后,RNN通過以下公式遞歸處理輸入中的每一個詞xi將其映射到實值向量中:
RNN(x1:i)=f(xi,RNN(xi))
(2)
式中:xi=x1,x2,…,xi-1;f是非線性函數(shù),通常為LSTM(Long Short-Term Memory)或GRU(Gated Recurrent Unit),為了捕獲當(dāng)前詞的前后文信息,一般采用雙向LSTM或雙向GRU,本文將采用雙向LSTM。將詞映射到實值向量中后,一個帶有LSTM單元的前饋和后饋RNN開始分別計算其前向和后向隱藏狀態(tài)。
(3)
(4)
整個源隱藏狀態(tài)hi就包含著前向和后向的全部信息:
(5)
1.2.3CNN編碼器
卷積神經(jīng)網(wǎng)絡(luò)對于處理網(wǎng)絡(luò)結(jié)構(gòu)的信息十分有效,最初的提出大多用于分析視覺圖像。2017年Facebook AI實驗室提出一款利用卷積神經(jīng)網(wǎng)絡(luò)進行機器翻譯的翻譯模型Fairseq,由于卷積神經(jīng)網(wǎng)絡(luò)的引入,模型不僅可以精確地控制上下文的長度,并且經(jīng)過卷積的并行計算,在達到與RNN相同的翻譯準(zhǔn)確率上,速度足足快了9倍。CNN編碼器[12]是用一個固定大小的窗口在輸入句子序列上滑動以捕獲句中每個詞的局部文本信息,相比RNN,雖然CNN速度快并且可以并行計算,但缺點是犧牲了全局文本信息,而為了彌補文本信息的丟失,通常對CNN的層數(shù)進行堆疊。
CNN(x1:N,i)=f(xi-└w/2┘,xi-└w/4┘,…,xi,…xi+└w/2┘)
(6)
式中:f是非線性函數(shù);w是窗口大小。
近兩年深度學(xué)習(xí)領(lǐng)域誕生了一種新的網(wǎng)絡(luò),即圖卷積網(wǎng)絡(luò)[13]。該網(wǎng)絡(luò)從出現(xiàn)時就受到科學(xué)界的廣泛關(guān)注,那么GCN與CNN有什么不同呢?傳統(tǒng)的CNN網(wǎng)絡(luò)處理的數(shù)據(jù)是矩陣形式,就像以像素點排列的矩陣為基礎(chǔ)。而GCN處理的數(shù)據(jù)是圖結(jié)構(gòu),例如像社交網(wǎng)絡(luò)、信息網(wǎng)絡(luò)等這些拓?fù)浣Y(jié)構(gòu),一般卷積神經(jīng)網(wǎng)絡(luò)就無能為力了。
一個無向圖G={N,E},其中:N是圖中所有節(jié)點的集合;E是所有邊的集合,包括自還邊。GCN是一個多層神經(jīng)網(wǎng)絡(luò),可以直接在圖上進行操作,對節(jié)點聚合信息。通常一個圖上的節(jié)點信息用一個鄰接矩陣來表示。對于一層GCN,節(jié)點的向量信息聚合公式如下:
(7)
式中:W∈Rd×d是權(quán)重矩陣;b∈Rd是偏置向量;ρ是激活函數(shù)比如線性修正單元(ReLU);N(n)是節(jié)點n的鄰居節(jié)點集合,包括n本身。節(jié)點信息可以通過堆疊GCN層數(shù)來進行傳遞,層之間的傳遞關(guān)系可用如下公式來計算:
(8)
對于像神經(jīng)機器翻譯,圖卷積網(wǎng)絡(luò)的輸入是一種語言的一句話,而一個句子詞與詞之間是有先后順序的,也就是說如果用有向圖來處理這種句子信息會更好,已有工作對GCN進行泛化,使其能夠在有向圖以及邊有類型的圖上進行操作[14]。這就使得GCN在依存樹上操作有了可能。
為了處理依存樹上邊的方向,根據(jù)邊的類型將其分為三類:入邊(IN)、出邊(OUT)和自環(huán)(LOOP)。遞歸計算如下:
(9)
式中:dir(u,n)表示邊的方向,包含IN、OUT和LOOP。對于一個節(jié)點而言,可能包含入邊、出邊,以及還可能給出自環(huán),因此式(9)可以被拆解為式(10)-式(12)。
(10)
(11)
(12)
式中:WIN、WOUT和WLOOP分別表示u→n、n→u和n→n的權(quán)重矩陣;bIN、bOUT和bLOOP為相應(yīng)的偏置向量。
傳統(tǒng)的RNN以及CNN處理的序列數(shù)據(jù),而神經(jīng)機器翻譯的發(fā)展雖然已取得了很大的進步,但是現(xiàn)有的翻譯系統(tǒng)還是會出現(xiàn)所翻譯的句子還不夠通順,并且對于一些表達不同而句意相同的句子機器不能準(zhǔn)確地進行識別。為了同時有效利用序列的前后文信息以及句法結(jié)構(gòu)信息,本文提出在源語言端采用雙編碼器,該思想受Eriguchi等[15]提出的樹到序列注意力機制神經(jīng)機器翻譯的啟發(fā)。不同的是Eriguchi使用LSTM編碼樹結(jié)構(gòu)信息,而本文將使用RNN等編碼源語言的原始序列數(shù)據(jù),用GCN編碼句法樹結(jié)構(gòu)信息。為了證明該方法對于提高神經(jīng)機器翻譯系統(tǒng)性能的有效性,將分別采用兩種方式編碼源語言序列數(shù)據(jù)。
(1) BiRNN+GCN。首先用雙向RNN學(xué)習(xí)序列信息,之后將RNN的輸出傳入給GCN學(xué)習(xí)句子的句法結(jié)構(gòu)信息。具體結(jié)構(gòu)如圖3所示。RNN編碼得到的隱藏狀態(tài)向量h0作為GCN的輸入。

圖3 RNN和GCN編碼器結(jié)構(gòu)關(guān)系
(2) CNN+GCN。用CNN學(xué)習(xí)詞的表示,CNN雖然速度快但僅能學(xué)習(xí)局部的上下文信息,所以一般采用多層CNN來彌補這一缺點,但本文主要研究的是GCN對于神經(jīng)機器翻譯性能的影響,因此僅采用了一層CNN,并且CNN的窗口大小w取值為5,CNN與GCN組合編碼結(jié)構(gòu)圖與RNN和GCN組合編碼結(jié)構(gòu)圖相似,因此不再給出圖。
解碼器會根據(jù)源語言句子產(chǎn)生一個相應(yīng)的目標(biāo)序列,在本文中解碼器是一個RNN,其網(wǎng)絡(luò)單元采用LSTM,源語言句子根據(jù)編碼器產(chǎn)生一個上下文向量ci,連同解碼器產(chǎn)生的前一個值yi-1共同生成目標(biāo)序列中的當(dāng)前詞。我們知道,神經(jīng)機器翻譯模型在訓(xùn)練時,它以正確標(biāo)注的單詞作為上下文進行預(yù)測,而在測試時,它只能從頭開始重新生成整個序列。這樣做的結(jié)果是訓(xùn)練和測試中的預(yù)測詞分別來自不同的分布,訓(xùn)練來自于原本平行語料中的數(shù)據(jù)分布,而測試卻來源于模型分布。這樣做將會產(chǎn)生暴露偏差(Exposure Bias),并且隨著目標(biāo)序列的增長錯誤會不斷累積。為了解決該問題,很容易想到在與測試相同的條件下進行模型訓(xùn)練,所以本文采用的方法是,首先從預(yù)測的單詞中選擇優(yōu)質(zhì)的單詞集BestWords(BW),然后從BW和正確標(biāo)注的單詞中進行抽樣,所得的結(jié)果作為上下文進行訓(xùn)練。使用LSTM進行解碼,第j步,目標(biāo)隱藏狀態(tài)sj為:
sj=LSTM(ey′j-1,sj-1,cj)
(13)
目標(biāo)詞的概率分布Pj為:
Pj=softmax(g(ey′j-1,cj,sj))
(14)

圖4 解碼器結(jié)構(gòu)
本實驗的技術(shù)路線如圖5所示,對于蒙漢對齊語料庫,在漢語端采用DDparser將其解析為依存樹,同時采用BPE處理蒙古語目標(biāo)端的稀有詞和復(fù)合詞,然后分別采用RNN+GCN和CNN+GCN作兩組對比實驗,通過增加訓(xùn)練步數(shù),最終得到最好的翻譯模型。

圖5 技術(shù)路線
本實驗所采用的數(shù)據(jù)為由內(nèi)蒙古工業(yè)大學(xué)構(gòu)建的用于內(nèi)蒙古自治區(qū)蒙古語言文字信息化專項扶持項目的121萬蒙漢對齊語料庫,包括政府新聞、法律公文、日常對話、詞典條目、計算機相關(guān)術(shù)語、氣象類相關(guān)術(shù)語、蒙古文諺語、日常用語和文學(xué)語句等語言信息。
對數(shù)據(jù)集劃分結(jié)果如表1所示。

表1 數(shù)據(jù)集劃分結(jié)果
本實驗的源語言為漢語,目標(biāo)語言為蒙古語,對于劃分好的數(shù)據(jù)集,在漢語端采用由百度開源的中文依存句法分析工具——DDParser。將原始句子解析為依賴樹。對于句子“創(chuàng)新是文化的生命力所在”,其經(jīng)過DDParser解析后,輸出結(jié)果如下:
[{′word′: [′創(chuàng)新′, ′是′, ′文化′, ′的′, ′生命力′, ′所在′],
′head′: [2, 0, 5, 3, 6, 2], ′deprel′: [′SBV′, ′HED′, ′ATT′, ′MT′, ′SBV′, ′VOB′]}]
為了解決蒙漢機器翻譯中存在的大量稀有詞和復(fù)合詞問題,采用發(fā)布于github上的fastBPE對蒙古語進行BPE操作,對蒙古語采用子詞級粒度[16]切分,操作數(shù)設(shè)為30 000,切分后詞典大小由原來的13 827 560變?yōu)?6 319 479,僅出現(xiàn)過一次的詞由原來的314 616變?yōu)?6 479,僅出現(xiàn)一次的詞的比率由0.023下降為0.002,很好地緩解了數(shù)據(jù)稀疏問題。
對于中文采用自行編寫的腳本程序字粒度切分,首先將原有的文本語料去掉標(biāo)點符號生成新的文本,再將生成的文本進行逐字加空格生成新的語料文本。經(jīng)過切分后詞典大小由原來的11 900 543變?yōu)?0 987 685,僅出現(xiàn)過一次的詞由319 756下降到7 526,僅出現(xiàn)一次的比率由原來的2.69%下降為0.04%。
蒙漢平行語料分詞、分字結(jié)果見表2。
本實驗采用github上基于TensorFlow的開源工具包neuralmonkey,TensorFlow的版本為1.4.1,Python版本為3.6。采用Adam優(yōu)化器,RNN模型學(xué)習(xí)率設(shè)為0.2,CNN模型學(xué)習(xí)率設(shè)為0.1,dropout設(shè)為0.2,訓(xùn)練步數(shù)設(shè)為150 000。LSTM和CNN編碼器解碼器的層數(shù)均設(shè)為4層,隱藏單元數(shù)均為512,GCN層的維度與其輸入層的維度相等,并且實驗發(fā)現(xiàn)采用兩層GCN的效果更好。以上參數(shù)取值是多次實驗結(jié)果最好的參數(shù),所以模型優(yōu)化主要體現(xiàn)在這里。因為本文主要的研究內(nèi)容不在此,因此對于模型優(yōu)化不作過多的介紹。本實驗的基線系統(tǒng)有兩個,其一是有哈佛大學(xué)開源的OpenNMT,其二是由Facebook AI實驗室發(fā)布的基于CNN的神經(jīng)機器翻譯系統(tǒng)Fairseq,其中w=5。進行多組對比實驗,得到實驗結(jié)果如下:
如圖6所示,為BiRNN和BiRNN+GCN隨著訓(xùn)練步數(shù)的增加BLEU的變化圖。可以看出,隨著訓(xùn)練步數(shù)的增加BLEU值逐漸增加并收斂,并且加了GCN編碼語義信息后要比直接采用BiRNN編碼效果要好,當(dāng)訓(xùn)練步數(shù)達到150 000步時,添加GCN后的BLEU值達到46.27,比基線系統(tǒng)(BLEU值為43.58)高了2.69個BLEU值,譯文結(jié)果見圖7。

圖7 句子級實驗結(jié)果
如圖8所示,當(dāng)采用CNN+GCN組合編碼時,BLEU值會出現(xiàn)明顯提高,當(dāng)訓(xùn)練達到150 000步時,BLEU值達到43.72,比CNN基線系統(tǒng)(BLEU為41.63)提高了2.09。通過選擇GCN層數(shù)來調(diào)節(jié)信息傳播的距離:在k層中,一個節(jié)點最多可以從k跳處接收來自鄰居的信息。本文通過對比實驗發(fā)現(xiàn):在BiRNN+GCN中,2層GCN取得更好的效果,如表3所示,其中1L、2L分別表示GCN的層數(shù)為1層和2層,+GCN表示BiRNN+GCN,可見,當(dāng)采用1層GCN時,BLEU值為45.16,當(dāng)采用兩層GCN時,BLEU值提高了1.11,達到46.27,譯文結(jié)果見圖7。

表3 GCN層數(shù)對翻譯結(jié)果的影響

圖8 CNN+GCN對比實驗BLEU值變化趨勢
蒙漢機器翻譯已取得了空前的進步,但是仍達不到人類翻譯的效果,一些句子翻譯結(jié)果看似符合語法結(jié)構(gòu),但并不符合人類的表達習(xí)慣,原因在于現(xiàn)有的神經(jīng)機器翻譯系統(tǒng)并沒有很好地利用句子的句法結(jié)構(gòu)信息。因此本文提出將句子的依存句法樹作為輔助信息來提高神經(jīng)機器翻譯效果,對于依存句法信息,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)也可以進行編碼,通常的做法是將句法樹轉(zhuǎn)化為序列信息進行編碼,而本文提出直接使用圖卷積神經(jīng)網(wǎng)絡(luò)編碼這種句法結(jié)構(gòu)信息,圖和樹的結(jié)構(gòu)更加適應(yīng),并且采用有向圖編碼,能夠進一步體現(xiàn)節(jié)點之間的關(guān)系。為了解決神經(jīng)機器翻譯系統(tǒng)在翻譯時嚴(yán)格對照給定語料作為參考,對于一些意思相近而表達不同的結(jié)果,神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)時會嚴(yán)格進行校正,導(dǎo)致一些本來正確的翻譯被淘汰掉,本文提出將預(yù)測出的優(yōu)質(zhì)翻譯結(jié)果加入到下一步的訓(xùn)練過程中,可以有效解決上述問題。為了解決神經(jīng)機器翻譯中出現(xiàn)的復(fù)合詞和未登錄詞對于翻譯質(zhì)量的影響,本文提出采用BPE,對蒙古語進行子詞級切分,對漢語進行字粒度切分。以上方法結(jié)合,最終的翻譯結(jié)果得到顯著提升,并且為蒙漢機器翻譯提供了一種新思路。