包烏格德勒, 趙小兵
(1. 呼和浩特民族學(xué)院 計算機系,內(nèi)蒙古 呼和浩特 010051;2. 中央民族大學(xué) 信息工程學(xué)院,北京 100081)
隨著內(nèi)蒙古自治區(qū)經(jīng)濟社會的發(fā)展和國家“一帶一路”倡議的推進,內(nèi)蒙古與其他地區(qū)的經(jīng)濟與文化交流越來越密切,使蒙古語與漢語之間的翻譯需求越來越大,蒙漢機器翻譯技術(shù)的研究對緩解這種壓力有著巨大的現(xiàn)實意義,對維護我國少數(shù)民族地區(qū)的穩(wěn)定和繁榮有非常重要的意義。
機器翻譯(machine translation,MT)是一門借助計算機將一種自然語言翻譯成另外一種自然語言的技術(shù)。機器翻譯是自然語言處理(NLP)中最難的課題之一,需要融合計算機科學(xué)、語言學(xué)、數(shù)學(xué)、心理學(xué)等多種學(xué)科。
蒙古語屬黏著語,詞的形態(tài)變化非常豐富。形態(tài)豐富語言的機器翻譯如果直接采用像英語或漢語一樣的方法,翻譯結(jié)果往往不盡如人意,這是由于形態(tài)豐富語言本身的詞法和句法等特點造成的。對于蒙漢機器翻譯來說,有如下幾個難點。
1.1.1 數(shù)據(jù)稀疏
1.1.2 長距離調(diào)序
統(tǒng)計機器翻譯(statistical machine translation,SMT)在進行翻譯時首先要在平行句對上進行詞對齊,詞對齊效果越好,句子的翻譯結(jié)果就越好。蒙古語的句法結(jié)構(gòu)是“主賓謂”,漢語的句法結(jié)構(gòu)是“主謂賓”,兩者語序差異很大,詞對齊效果并不理想。例如,漢語句子“我害怕從高樓樓頂朝下看”,對應(yīng)的蒙古語句子是:
圖1 長距離調(diào)序
1.1.3 蒙古語的相關(guān)資源匱乏
無論是統(tǒng)計機器翻譯還是神經(jīng)機器翻譯都需要大規(guī)模的雙語平行語料庫作為訓(xùn)練語料,但是目前公開的蒙漢雙語平行語料只有26萬多句對,資源非常匱乏。同時相對于漢語信息處理技術(shù),蒙古語的信息處理技術(shù)還不夠成熟,一些基本的問題,如蒙古語詞性標注、命名實體識別等問題還沒有很好地解決,句法分析和語義分析也只是剛剛起步。
蒙古語的機器翻譯研究開始于20世紀80年代。蒙漢機器翻譯研究方面,娜步青[1]首先采用了統(tǒng)計機器翻譯方法,使用工具搭建了一個基于詞的機器翻譯系統(tǒng),并使用詞切分技術(shù)提高了翻譯質(zhì)量。銀花等人[2]將蒙古語的詞性信息引入到基于短語的統(tǒng)計機器翻譯系統(tǒng)中,取得了較好的翻譯效果。蘇傳捷[3]研究了基于層次短語的蒙漢統(tǒng)計機器翻譯方法,通過自動學(xué)習(xí)同步上下文無關(guān)文法實現(xiàn)蒙漢機器翻譯。玉霞[4]在蒙古語詞法分析的基礎(chǔ)上,將蒙古語詞干、詞綴、詞性等形態(tài)信息融入到了機器翻譯中,提高了翻譯質(zhì)量。
蒙漢機器翻譯研究大致經(jīng)歷了基于詞的SMT、基于短語的SMT、基于層次短語的SMT等階段,并通過蒙古語詞法分析技術(shù),逐漸在系統(tǒng)中融合了蒙古語的詞干、詞綴、詞性等信息,并取得了較好的結(jié)果。
本文主要研究基于神經(jīng)網(wǎng)絡(luò)的蒙漢機器翻譯方法,神經(jīng)機器翻譯(neural machine translation,NMT)是近幾年開始興起的一種新的機器翻譯方法,其翻譯質(zhì)量優(yōu)于統(tǒng)計機器翻譯。
神經(jīng)機器翻譯的基本思想是通過深度神經(jīng)網(wǎng)絡(luò)直接將源語言句子轉(zhuǎn)換為目標語言句子,是一種端到端(end to end)的翻譯方法。端到端的神經(jīng)機器翻譯是一個全新的編碼器-解碼器(Encoder-Decoder)框架[5],編碼器將源語言句子用一個多維的實數(shù)向量表示,解碼器將該向量轉(zhuǎn)換為目標語言句子,該模型一般稱為序列到序列(sequence to sequence)模型。該模型可以處理自然語言處理的大多數(shù)任務(wù),包括語言模型、序列標注、句法分析、機器翻譯等。序列到序列模型本身就是一個翻譯模型,可以把一個sequence翻譯成另一個sequence,通過一個深度神經(jīng)網(wǎng)絡(luò)將一個輸入序列轉(zhuǎn)換為一個輸出序列,包括Encoder和Decoder兩個部分。
神經(jīng)機器翻譯根據(jù)Encoder和Decoder的網(wǎng)絡(luò)結(jié)構(gòu)可以分為基于循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)的神經(jīng)機器翻譯和基于CNN(convolutional neural network)的神經(jīng)機器翻譯。
在Cho等人[6]的工作中使用RNN實現(xiàn)了編碼器和解碼器,用于改進SMT系統(tǒng)。對于例1,基于RNN的編碼器—解碼器框架如圖2 所示。
編碼器—解碼器框架首先生成蒙古語句子中每一個詞的詞向量(word embedding),然后通過RNN從左到右生成整個句子的句子向量,/s為句尾標識,把這個生成源語言句子向量的RNN稱為編碼器。
生成源語言的句子向量后,在目標語言端也使用一個RNN將源語言句子向 量解碼后生成漢語句子“我 害怕 從 高樓 樓頂 朝 下 看”,解碼過程也是從左到右逐詞生成,直到生成句尾標識/s,解碼結(jié)束。把這個生成目標語言句子的RNN稱為解碼器。
圖2 基于RNN的編碼器-解碼器框架
但是,這種編碼器-解碼器框架有一個致命的缺陷,即無論源語言句子有多長,編碼器始終都生成一個固定維度的句子向量,這對較長的句子來說,很難捕獲長距離的依賴關(guān)系,即使采用長短時記憶網(wǎng)絡(luò)(long-short term memory, LSTM)作為編碼器,也不能很好地捕獲長距離依賴[6]。
為了解決編碼器的定長向量問題,出現(xiàn)了基于注意力(attention)的端到端神經(jīng)網(wǎng)絡(luò)翻譯[7]。注意力機制的基本思想是,目標語言端的每個詞只與源語言端的部分詞相關(guān),與大多數(shù)源語言端詞無關(guān)。該機制能夠解決編碼器RNN只能生成固定維度向量的缺陷,使用門控隱藏單元(gated hidden unit)作為編碼器隱層的基本單元,編碼器采用雙向循環(huán)網(wǎng)絡(luò)(bidirectional RNN,BiRNN),解碼器依然使用RNN。
基于注意力的編碼器—解碼器框架中,編碼器被替換為一個雙向循環(huán)神經(jīng)網(wǎng)絡(luò),源語言端一個詞的向量中不僅包含了其前面詞的信息,還包含了其后面詞的信息,能夠很好地捕獲上下文依賴關(guān)系。解碼器則實現(xiàn)了一種類似SMT的對齊機制,通過反向傳播算法求梯度和更新參數(shù)。對于例1,基于注意力機制的編碼器-解碼器框架如圖3所示。
圖3 基于注意力機制的編碼器-解碼器框架
2017年上半年Facebook的FAIR團隊發(fā)布了基于卷積神經(jīng)網(wǎng)絡(luò)的機器翻譯框架,并公開了FAIR 序列模型工具包(fairseq)源代碼和訓(xùn)練過的翻譯模型,翻譯速度九倍于基于RNN的神經(jīng)機器翻譯系統(tǒng)。與基于循環(huán)神經(jīng)網(wǎng)絡(luò)相比,基于CNN的編碼器—解碼器框架不僅結(jié)構(gòu)簡單,速度快,而且允許對整個源語言句子進行編碼[8],而不像循環(huán)神經(jīng)網(wǎng)絡(luò)需要逐詞進行編碼。
這是一種完全基于卷積神經(jīng)網(wǎng)絡(luò)的序列到序列的模型[9],與循環(huán)神經(jīng)網(wǎng)絡(luò)相比,所有元素都可以在訓(xùn)練時完全地并行計算,并且由于非線性元素的數(shù)量固定且與輸入序列的長度無關(guān),所以優(yōu)化更加簡單。在該模型中使用了門控線性單元(gated linear units,GLU)來緩解梯度傳播,并為每個解碼器層配備了單獨的注意力模塊,其結(jié)構(gòu)如圖4所示。
圖4 基于CNN的編碼器-解碼器框架
該框架主要采用了以下幾個技術(shù):
(1) 位置向量(position embedding)的使用
在編碼器的輸入信號中加入位置向量,并與詞向量求和生成網(wǎng)絡(luò)的輸入信號,使編碼器具備捕捉輸入序列中詞的位置信息的功能。
(2) 采用層疊的CNN結(jié)構(gòu)
該結(jié)構(gòu)中低層的CNN用于捕獲與當前詞較近的詞之間的依賴關(guān)系,高層的CNN用于捕獲與當前詞較遠的詞之間的依賴關(guān)系,所以這種層疊的CNN結(jié)構(gòu)能夠捕獲較長的依賴關(guān)系。而且在序列建模時與RNN相比,時間復(fù)雜度也會變小,即O(n/k),其中k為卷積窗口大小。同時,由于RNN為了捕捉上下文信息,只能進行串行計算,而層疊的CNN對整個序列進行卷積,不依賴序列的上下文信息,可以進行并行計算,使模型訓(xùn)練更快。
(3) 融合了殘差連接和線性映射的多層注意力機制
注意力機制中,將編碼器的輸出信號與解碼器的輸出信號點乘后進行歸一化操作,再乘以編碼器的輸入序列后作為權(quán)重加入到解碼器中,用于預(yù)測輸出序列。
(4) 使用門控線性單元(GLU)
解碼器每一層CNN的輸出都被一個GLU控制信息流的傳播力度。門控機制可以控制哪些詞或特征需要傳遞到下一層中,以便產(chǎn)生更好的翻譯結(jié)果。
(5) 通過精細的權(quán)重初始化使模型訓(xùn)練和收斂速度更快
基于CNN的神經(jīng)機器翻譯在多個公開的數(shù)據(jù)集上獲得了最好的成績,該框架的最大優(yōu)點在于速度快、效率高,缺點是需要調(diào)整的參數(shù)太多。
神經(jīng)機器翻譯通常在源語言端和目標語言端采用固定規(guī)模的詞表,對于詞表外的未登錄詞,都用一個UNK符號進行代替。解決上述詞表受限問題,可以有多種處理方法,例如通過詞對齊結(jié)果來后處理UNK[10]、用相近詞替換UNK[11]、使用大詞典并在計算softmax時進行采樣[12]等。
經(jīng)典的seq2seq模型都是在單詞級別上翻譯,需要為每個單詞建立獨立的向量,這對形態(tài)豐富語言來說會帶來嚴重的數(shù)據(jù)稀疏問題。為了解決該問題,出現(xiàn)了基于字符級別的神經(jīng)機器翻譯系統(tǒng)[13-15], 可以大大降低源語言端和目標語言端詞典規(guī)模。
本文使用了一種基于子詞(subword)單元的方法來解決詞表受限問題,該方法由Sennrich等人[16]提出,其基本思想是: 一些單詞的翻譯,可以通過翻譯其中的子詞單元來實現(xiàn)。該方法使用一種字節(jié)對編碼(byte pair encoding,BPE)算法來獲得子詞單元,編碼和解碼都在子詞單元上進行。BPE算法的Python實現(xiàn)如圖5所示。
算法首先用該語言的字符表初始化subword表,并將每個單詞表示為一個字符序列,再加上一個特殊的單詞結(jié)束標記‘@.@’,這樣可以在翻譯之后恢復(fù)原始的單詞。然后對所有subword對進行迭代計數(shù),并把高頻的subword對加入到subword表中,生成新的subword,直到subword表的大小達到預(yù)設(shè)的值。這樣高頻的subword對最終被合并成一個新的subword對,因此BPE算法不需要候選列表。
例如,以下的蒙古語單詞會被拆分為兩個subword:
由于算法只對單詞進行拆分,并不會對拆分后的subword進行詞形還原,所以拆分后的subword不一定符合蒙古語的語法規(guī)則。
實驗的訓(xùn)練語料來自CWMT2017提供的蒙漢雙語平行語料庫,包含26萬多句對,由內(nèi)蒙古大學(xué)、中國科學(xué)院合肥智能機械研究所、中國科學(xué)院計算技術(shù)研究所聯(lián)合提供。開發(fā)集和測試集都由內(nèi)蒙古大學(xué)提供,開發(fā)集包含1 000個蒙古語句子,測試集包含678個蒙古語句子,開發(fā)集和測試集都包含4個參考譯文。
訓(xùn)練漢語語言模型所使用的訓(xùn)練語料來自于CWMT2017提供的包含1 100萬多個句子的漢語單語語料庫,該語料是廈門大學(xué)NLP實驗室提供的新華網(wǎng)新聞漢語單語語料(2017)。
語料準備好后,對漢語語料進行了分詞操作,使用的分詞工具是中科院分詞系統(tǒng)ICTCLAS(NLPIR)2016。對蒙古語語料,首先將語料中的數(shù)字、英文、符號、蒙古語非Unicode字符進行了轉(zhuǎn)換處理,再對語料進行了文本校對,對錯詞進行了修正。
本文對蒙古語語料分別建立了以下三種模型。
(1) 詞模型
對語料未進行專門的詞干、詞綴切分操作,只在分寫的構(gòu)形附加成分前面加了空格,把分寫的構(gòu)形附加成分當作一個詞來處理。
詞模型的語料如下所示:
(2) 切分模型
對語料進行了專門的詞干、詞綴切分操作,在連寫的構(gòu)形附加成分(詞綴)前面也加了空格。但是為了減少句子長度,對單詞至多切分一次,切分后的單詞分為兩部分: 詞干和詞綴組合。
切分模型的語料如下所示:
(3) 子詞模型
在這里對蒙古語和漢語同時運用了BPE算法,將罕見詞拆分為多個子詞單元。
運用BPE算法時分別設(shè)置了合并次數(shù)為 32 000 和50 000,生成的蒙古語和漢語詞典和總詞表規(guī)模如表1所示。
表1 BPE算法生成的詞典和總詞表規(guī)模
為了將NMT與SMT進行比較,本文還用MOSES工具搭建了基于短語的蒙漢統(tǒng)計機器翻譯系統(tǒng)。其中目標語言的語言模型分別訓(xùn)練了三元語言模型和五元語言模型,用IRSTLM工具訓(xùn)練語言模型。
詞對齊工具使用了GIZA++-v2,分別從蒙古語到漢語和漢語到蒙古語兩個方向進行詞對齊訓(xùn)練,獲得雙向詞對齊結(jié)果,采用grow-diag-final-and對雙向詞對齊結(jié)果進行優(yōu)化。
基于RNN的神經(jīng)機器翻譯工具使用了RNNSearch,在GPU上進行運算。參數(shù)設(shè)置如下:
句子最大長度=175
詞向量維度=620
隱藏層規(guī)模=1 000
采用詞模型和切分模型時設(shè)置蒙古語與漢語的詞表規(guī)模為50 000,采用子詞模型時分別設(shè)置了如下詞表規(guī)模:
(1) 合并次數(shù)=50k,蒙古語詞表規(guī)模=50 000,漢語詞表規(guī)模=50 000,包含所有詞;
(2) 合并次數(shù)=50k,蒙古語詞表規(guī)模=20 000,漢語詞表規(guī)模=25 000
(3) 合并次數(shù)=32k,蒙古語詞表規(guī)模=50 000,漢語詞表規(guī)模=50 000,包含所有詞;
(4) 合并次數(shù)=32k,蒙古語詞表規(guī)模=25 000,漢語詞表規(guī)模=30 000
輸出譯文時beam的長度設(shè)置為10,并使用SMT的對齊結(jié)果對譯文中的未登錄詞進行了替換處理(UNK replace)。
基于CNN的神經(jīng)機器翻譯工具使用了fairseq工具,在GPU上進行運算。訓(xùn)練參數(shù)采用默認值,句子最大長度設(shè)置為175。
本文采用基于字符(character-based)的評價方式,使用CWMT2017提供的自動評測工具mteval_sbp進行自動評測,該評測工具提供了包括BLEU-SBP、BLEU、NIST 、GTM 、mWER 、mPER以及ICT等方法的打分程序,其中BLEU方法是機器翻譯自動評價的標準方法[17]。本文主要以BLEU5-SBP、BLEU5、NIST6作為評測指標。
表2給出了SMT的實驗結(jié)果。結(jié)果表明: 切分模型和子詞模型的多數(shù)評測值都低于詞模型;在以上三個評測指標中五元語言模型的評測結(jié)果好于三元語言模型的評測結(jié)果;切分模型的評測結(jié)果在三個模型中表現(xiàn)最差;子詞32k(五元)模型和詞模型的評測結(jié)果比較接近。
表2 SMT實驗結(jié)果
表3給出了RNN NMT的實驗結(jié)果。結(jié)果表明: 基于RNN的神經(jīng)機器翻譯的BLEU5-SBP和BLEU5評測指標比SMT的實驗結(jié)果至少提高了0.01,這說明26萬句對的蒙漢平行語料規(guī)模已經(jīng)滿足基于RNN的蒙漢神經(jīng)機器翻譯所需要的最小規(guī)模語料要求。
表3 RNN NMT實驗結(jié)果
在詞模型中對譯文進行UNK替換后,評測指標提升并不明顯。經(jīng)過對譯文、對齊詞典和語料進行分析后發(fā)現(xiàn),這是由于測試集中的部分未登錄詞并沒有出現(xiàn)在訓(xùn)練集中,而出現(xiàn)在訓(xùn)練集中的多數(shù)未登錄詞在對齊詞典中的翻譯也不準確,所以對評測結(jié)果并沒有帶來多少提升。
在RNN NMT的實驗結(jié)果中,詞模型和切分模型的評測結(jié)果非常接近,說明當詞表規(guī)模為50 000時,對蒙古語進行切分對評測結(jié)果沒有太大影響;在子詞模型中,合并次數(shù)為32 000的評測結(jié)果優(yōu)于合并次數(shù)為50 000的評測結(jié)果,采用較小規(guī)模詞表的評測結(jié)果優(yōu)于采用大規(guī)模詞表的評測結(jié)果;在所有的實驗結(jié)果中,當BPE的合并次數(shù)為32 000、蒙古語和漢語的詞表規(guī)模為25 000和30 000時的評測結(jié)果最好,其中BLEU5-SBP評測指標比最好的SMT的評測指標提高了0.04。
表4給出了CNN NMT的實驗結(jié)果。結(jié)果表明,CNN NMT的翻譯結(jié)果比RNN NMT和SMT的結(jié)果差。在CNN NMT的實驗結(jié)果中,詞模型、切分模型和子詞32k模型的59層的實驗結(jié)果明顯好于43層的實驗結(jié)果;隨著網(wǎng)絡(luò)規(guī)模的增加,切分模型的實驗結(jié)果會好于詞模型的實驗結(jié)果;在同一種網(wǎng)絡(luò)規(guī)模中子詞模型的實驗結(jié)果好于另外兩個模型的實驗結(jié)果。
表4 CNN NMT實驗結(jié)果
在以上三種翻譯方法中RNN NMT的實驗結(jié)果最好,CNN NMT的實驗結(jié)果最差。在RNN NMT和CNN NMT中,子詞模型的實驗結(jié)果均好于切分模型和詞模型的實驗結(jié)果,說明采用子詞模型可以有效提高蒙漢NMT的翻譯質(zhì)量。
本文探討了基于循環(huán)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的蒙漢神經(jīng)機器翻譯模型,并與傳統(tǒng)的基于短語的統(tǒng)計機器翻譯模型進行了比較分析。在實驗中分別采用了蒙古語的詞模型、切分模型、子詞模型作為翻譯系統(tǒng)的輸入信號,并在每個翻譯方法中做了對比分析。通過對比發(fā)現(xiàn),子詞模型在CNN NMT和RNN NMT中都可以有效地提高翻譯質(zhì)量。
實驗結(jié)果表明,基于循環(huán)神經(jīng)網(wǎng)絡(luò)的蒙漢神經(jīng)機器翻譯模型的翻譯性能已經(jīng)超過了傳統(tǒng)的基于短語的蒙漢統(tǒng)計機器翻譯模型,可進一步通過集外詞詞典翻譯、用相近詞替換UNK等操作來提高實驗結(jié)果,還可以從擴大訓(xùn)練語料規(guī)模、采取系統(tǒng)融合的方法來提高蒙漢神經(jīng)機器翻譯的質(zhì)量。