韓 冬,李軍輝,熊德意,周國棟
(蘇州大學 計算機科學與技術(shù)學院,江蘇 蘇州 215006)
神經(jīng)機器翻譯(NMT)采用一種新穎的解決機器翻譯問題的方法,并且最近幾年已經(jīng)取得了極大的成功[1-3]。尤其是在翻譯的流利度方面,NMT系統(tǒng)與傳統(tǒng)的SMT系統(tǒng)相比,翻譯結(jié)果更加順暢??偟膩碚f,NMT系統(tǒng)采用神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),不需要存儲短語表,而是有著一個小規(guī)模的詞匯表,這大大減小了計算的復(fù)雜度。
但是,NMT系統(tǒng)也有自身的缺點。因為NMT系統(tǒng)為了能夠控制計算的復(fù)雜度,有著一個固定大小的詞匯表,通常會將詞匯表限制在30~80KB之間,這就導(dǎo)致了其在翻譯未登錄詞時有著嚴重的不足。由于限定詞匯表有大小限制,對于未出現(xiàn)在該詞匯表中的詞,NMT系統(tǒng)用UNK標記來替代。結(jié)果,NMT系統(tǒng)不僅無法將它們翻譯準確,而且破壞了句子的結(jié)構(gòu)特征。為了解決NMT系統(tǒng)中存在的這一問題, Sennrich和Haddow[4]提出了一種BPE編碼[5]的解決方法。該方法將訓練語料中的單詞拆分成更為常見的小部分,這里把它叫做子字單元。通過這種方法,我們假設(shè)在同樣將詞匯表設(shè)置成30KB的情況下,由于很多單詞拆解的子字部分是相同的,所以30KB的子字單元實際上可以表示出遠遠超出30KB的以單詞為基礎(chǔ)的詞匯表。這樣,對于絕大多數(shù)未登錄詞,就可以通過子字單元的組合表示出翻譯的結(jié)果。
將單詞拆解為子字單元的方法對于未登錄詞問題確實是一種簡單的方法,但是對于其翻譯的效果我們依然持疑問的態(tài)度。因此,本文對BPE方法的翻譯結(jié)果進行了分析。分析BPE方法是如何翻譯未登錄詞的,在多大程度上解決了NMT系統(tǒng)對未登錄詞的翻譯問題。
通過對中英文翻譯的實驗結(jié)果分析,本文有如下發(fā)現(xiàn):
(1) 驗證了BPE方法對未登錄詞確實是一種行之有效的方法,在對中英文雙向都拆解成子字單元的實驗中,實驗結(jié)果與不做處理的NMT系統(tǒng)相比,提高了1.02 BLEU值。
(2) 本文進行了四組實驗,對各個實驗中訓練語料中未登錄詞進行了統(tǒng)計,發(fā)現(xiàn)通過BPE方法的實驗在訓練語料中基本涵蓋了所有的訓練單詞。
(3) 統(tǒng)計了各測試語料中源端未登錄詞的個數(shù),然后得出結(jié)論: 使用中英文端均做BPE的方法,測試源端語料基本不會出現(xiàn)未登錄詞。從翻譯結(jié)果看,目標端翻譯結(jié)果中不含有UNK標識符,從而可以說明通過BPE的方法確實極大程度上解決了未登錄詞的問題。
(4) 分析測試源端中未登錄詞的詞性和各組對比實驗的解決效果,發(fā)現(xiàn)NMT系統(tǒng)中未登錄詞的來源主要是名詞、動詞和數(shù)詞。
(5) 與SMT方法比較,BPE方法對未登錄詞的翻譯效果在精準度上基本上保持一致。對于測試源端語料中未登錄詞的翻譯均達到了45%左右的正確率。
本節(jié)將簡要介紹本文的神經(jīng)機器翻譯系統(tǒng),該系統(tǒng)采用注意力機制,包含一個編碼器和一個解碼器[6],整體結(jié)構(gòu)如圖1所示。
圖1 基于注意力機制的神經(jīng)機器翻譯
p(yi|y1,…,yi-1,x)=g(yi-1,si,ci)
(1)
si為循環(huán)神經(jīng)網(wǎng)絡(luò)第i時刻的隱藏狀態(tài),計算通過:
si=f(si-1,yi-1,ci)
(2)
ci也被叫作注意力向量,具體計算公式為式(3-5)。
其中,att(si-1,hj)是一個通過源端隱層狀態(tài)hj和目標端前一隱層狀態(tài)si-1計算出的匹配程度。
雖然有大量的工作用來不斷地優(yōu)化神經(jīng)機器翻譯系統(tǒng),但是對于未登錄詞的解決仍然是當今神經(jīng)機器翻譯系統(tǒng)的一大難題。
BPE的思想是將單詞拆解為更小、更常見的子字單元。對于原本不在詞表中的單詞,NMT系統(tǒng)一般會用UNK標示符替代。BPE方法將其拆解為常見的子字,通過翻譯子字部分將原有的UNK單詞進行了翻譯,從而極大地保存了句子的結(jié)構(gòu)特征和流暢性。
BPE方法拆解成子字單元的具體效果可以通過下面的例子來進行說明:
例(a) he is a good boy
例(b) h@@ e is a g@@ o@@ o@@ d b@@ oy
假設(shè)例(a)出現(xiàn)在訓練語料中,傳統(tǒng)的NMT系統(tǒng)在形成詞匯表時,使用的是以單詞為基礎(chǔ)的劃分方式,然后取詞頻出現(xiàn)較高的單詞形成字典。但是BPE方法則是以一種介乎單詞和字母之間的子字單元形成字典,如例(b)所示,其將一個句子中的單詞拆分成了更小的部分 he→h@@ 和e。原本以he形成字典的方式轉(zhuǎn)變?yōu)閔@@ 和e 兩個字典。更加詳細的說明可參見文獻[4]。
在中文語料中,假設(shè)“大學文憑”是一個中文未登錄詞,被標記為UNK,通過BPE的方法,將“大學文憑”拆解為“大學”和“文憑”兩個部分,而“大學”和“文憑”這兩部分恰恰是在詞匯表中的,可以準確翻譯,從而可以得到“大學文憑”的正確翻譯結(jié)果如下:
Eg.大學文憑→大學 文憑 →university diploma
本文針對中到英的翻譯任務(wù)分析BPE方法對未登錄詞的翻譯效果。為此,共準備了四組實驗,每組實驗的翻譯性能采用評測標準BLEU值[8]。
訓練集包含從LDC語料庫中抽取的1.25MB句對的中文到英文平行語料*該語料包括LDC2002E18,LDC2003E07,LDC2003E14,LDC2004T07,LDC2004T08和LDC2005T06。。選擇NIST MT 06數(shù)據(jù)集作為開發(fā)集,NIST MT 02, 03, 04, 05, 08作為測試集。
表1給出了本文進行的四組實驗及其描述,其中Baseline系統(tǒng)將所有的中英文端未登錄詞都替代為UNK標記,BPE_cn、BPE_en、BPE_all指分別在源端(即中文端)、目標端(即英文端)和兩端(即中英文端)進行BPE子字單元處理。
表1 四組實驗及其描述
在實驗中,設(shè)置隱層單元的個數(shù)為1 000,源端和目標端單詞詞向量(word_embedding)的維度為620維。神經(jīng)網(wǎng)絡(luò)用Adadelta[9]模型更新參數(shù)。設(shè)置batch_size為80。我們使用GPU去運行實驗訓練部分,提高實驗運行的速度。
本文統(tǒng)計了上述四個實驗中未登錄詞的個數(shù),如表2所示,從表中可以看出:
(1) 在相同的訓練語料下,通過BPE方法可以極大地減少未登錄詞的個數(shù),系統(tǒng)中中文未登錄詞的個數(shù)從174 291(Baseline系統(tǒng))減少到549(BPE_all系統(tǒng)),英文未登錄詞的個數(shù)從75 910(Baseline系統(tǒng))減少到0(BPE_all系統(tǒng))。
(2) 在測試語料中,因為測試語料單詞的個數(shù)要遠遠小于訓練中出現(xiàn)的單詞個數(shù),所以我們有理由相信: 在中英文均做BPE處理的實驗中,在測試時,源端將產(chǎn)生極少的未登錄詞,英文翻譯結(jié)果中將會有極少的UNK標識符。這在我們之后的實驗結(jié)果中也得到了驗證。
表2 四組實驗中在相同訓練語料下,單詞總個數(shù)、詞表單詞個數(shù)和訓練語料中未登錄詞的統(tǒng)計結(jié)果
其中,我們設(shè)置源/目標端句子最大長度為50,超過50個單詞的句子舍棄,BPE在拆解成子字單元的過程中,會增加句子的長度*原Baseline在最大句子長度設(shè)置為50時,實際用于訓練的語料行數(shù)為1 128 660。采用BPE_all方法也將最大句子長度設(shè)置為50的情況下,實際用于訓練的語料行數(shù)為1 119 600,兩種情況下訓練規(guī)模近似相同,僅僅減少了0.8%。。
表3統(tǒng)計了各個測試集源端包含的中文未登錄詞的個數(shù)。
表3 測試集源端統(tǒng)計結(jié)果
注: ① 在對源端做BPE處理時,源端單詞個數(shù)會增多。
② S-W: 測試集中源端(中文端)單詞總個數(shù),S-U: 測試集中未登錄詞個數(shù)。
表3的統(tǒng)計結(jié)果表明,在Baseline系統(tǒng)中,測試集源端存在5%左右的未登錄詞。我們把這部分詞稱為VBaseline_chn_UNK。
通過上表的統(tǒng)計結(jié)果可以發(fā)現(xiàn),經(jīng)過BPE處理的實驗與未經(jīng)任何處理的Baseline實驗相比,其測試集中含有很少的未登錄詞。特別地,對于BPE_all系統(tǒng),由于源端和目標端同時分別采用了BPE編碼,這樣就使得在翻譯時源端和目標端詞匯表中的單詞基本上完全覆蓋了測試集中的單詞,所以翻譯結(jié)果中將基本不會含有未登錄詞*如表3所示,在測試集中,源端仍存在極少數(shù)的未登錄詞,該未登錄詞基本上是特殊符號。。在 測 試 的 時候,雖然BPE_all系統(tǒng)中源端含有很少的未登錄詞,但是BPE_all是否可以將VBaseline_chn_UNK翻譯正確,翻譯的質(zhì)量如何,我們在下一節(jié)將進一步討論。
本節(jié)分析了BPE_all實驗對VBaseline_chn_UNK集合中單詞的翻譯效果。圖1給出了該集合中單詞按詞性的分布統(tǒng)計。不難看出,Baseline系統(tǒng)中源端未登錄詞主要是名詞(約占76%),然后是動詞(約占16%)和數(shù)詞(約占6%)。
圖2 測試集VBaseline_chn_UNK的詞性分布
表4統(tǒng)計了在BPE_all實驗中,將VBaseline_chn_UNK集合中單詞正確翻譯的比率。根據(jù)參考數(shù)據(jù)集,以NIST06為例,人工分析了NIST06中VBaseline_chn_UNK共1 826個詞的翻譯準確率。以名詞為例,從表4可以看出,VBaseline_chn_UNK總共包含名詞1 455個,其中669個翻譯正確,占46%,說明BPE方法對源端未登錄詞具有一定的翻譯效果。
表4 在BPE_all系統(tǒng)中,NIST06開發(fā)集VBaseline_chn_UNK的翻譯正確統(tǒng)計
本節(jié)分析在Baseline系統(tǒng)中,哪些源端詞翻譯為譯文的UNK。根據(jù)詞對齊信息,找到譯文中UNK所對應(yīng)源端的單詞,稱源端的這些詞為VBaseline_to_eng_UNK。圖3統(tǒng)計了VBaseline_to_eng_UNK的詞性分布情況,該圖說明了導(dǎo)致譯文中出現(xiàn)UNK最多的是名詞(70%),緊接著是動詞(17%)和數(shù)詞(8%)。表5統(tǒng)計了VBaseline_to_eng_UNK中UNK是來自源端未登錄詞的個數(shù)(VBaseline_chn_UNK),以及源端在詞表中但最終翻譯為UNK的單詞個數(shù)。以NIST02為例,Baseline的譯文中共包含單詞25 394個,其中UNK的數(shù)量為636個。針對這636個譯文UNK,其中534個是由源端UNK翻譯所致,另外102個是由源端非UNK翻譯而來。這也說明了譯文中產(chǎn)生UNK的單詞大部分來自于源端的未登錄詞。
接著,由于目標端已消除UNK(BPE_all譯文中沒有UNK標示符),本節(jié)分析BPE_all系統(tǒng)又是如何翻譯VBaseline_to_eng_UNK中的詞,其翻譯質(zhì)量又如何。以NIST06為例,本文人工分析了NIST06中VBaseline_to_eng_UNK共1 204個詞的翻譯準確率,如表6所示。以名詞為例,從表6可以看出,VBaseline_to_eng_UNK總共包含名詞881個,其中396個翻譯正確,占45%。
表5 測試集譯文中UNK的統(tǒng)計
注意:表中,UNK行指譯文中出現(xiàn)UNK的個數(shù);Chn_UNK行表示多少數(shù)量的譯文UNK翻譯自源端UNK;Non_Chn_UNK行表示多少數(shù)量的譯文UNK翻譯自源端非UNK詞。
圖3 測試集VBaseline_to_eng_UNK的詞性分布
名詞動詞數(shù)詞其他詞性所有詞性總數(shù)正確數(shù)總數(shù)正確數(shù)總數(shù)正確數(shù)總數(shù)正確數(shù)總數(shù)正確數(shù)8813962079870464671204547(45%)
我們評測了各詞性下的UNK單詞在BPE翻譯結(jié)果下的正確數(shù),發(fā)現(xiàn)最終使用BPE方法的實驗可以將45%的UNK單詞翻譯正確(其余單詞翻譯錯誤或漏翻),從而在一定程度上保障了句子的結(jié)構(gòu)特征和流暢性。
從以上分析可以看出,BPE編碼可以在一定程度上解決未登錄詞的翻譯問題。但是,與SMT系統(tǒng)相比,BPE是否能夠更好地解決未登錄詞的翻譯仍未知。由于SMT并沒有限定詞匯表,對VBaseline_to_eng_UNK
中的詞的翻譯效果要比NMT Baseline系統(tǒng)好。本節(jié)主要比較SMT系統(tǒng)*本文的SMT系統(tǒng)采用cdec源碼實現(xiàn)的層次短語翻譯系統(tǒng)(https://github.com/redpony/cdec)。為公平起見,SMT系統(tǒng)與NMT系統(tǒng)使用相同的訓練集、開發(fā)集和測試集。與BPE_all系統(tǒng),分析兩者對VBaseline_to_eng_UNK中的詞的翻譯效果。
以NIST06為例,本文人工分析了NIST06中VBaseline_to_eng_UNK共1 204個詞在SMT系統(tǒng)下的翻譯準確率,如表7所示。
表7 在SMT系統(tǒng)中,NIST 06測試集VBaseline_to_eng_UNK的翻譯正確統(tǒng)計
比較表6和表7不難看出,BPE方法和SMT系統(tǒng)在翻譯精準度上基本持平,最終對UNK單詞翻譯的精準度均達到了45%左右,從而可以說明BPE方法在一定程度上既具有傳統(tǒng)NMT系統(tǒng)的流暢性,又具有接近SMT系統(tǒng)的未登錄詞翻譯精準度。
表8給出了Baseline系統(tǒng)和各BPE系統(tǒng)在測試集上的翻譯性能BLEU值。從表8中可以看出,僅對源端或目標端采用BPE編碼,能夠在一定程度
表8 使用和未使用BPE的系統(tǒng)在測試集上的翻譯性能BLEU值
注:表示在將顯著水平設(shè)置為0.01時,BPE_all系統(tǒng)比Baseline系統(tǒng)相比有顯著性提高[10]。
上提高翻譯性,兩端同時采用BPE編碼,能進一步顯著地提高翻譯的性能,例如BPE_all系統(tǒng)在測試集上比Baseline系統(tǒng)平均提高了1.02 BLEU值。
在本文中,我們分析發(fā)現(xiàn)BPE編碼的方式確實在一定程度上解決了NMT系統(tǒng)中未登錄詞的翻譯問題。通過將原有單詞拆解為高頻子字單元的方法,擴展了原有系統(tǒng)中的詞匯表的大小,使在利用相同詞匯表大小的情況下,我們可以表示出更多的單詞,從而使系統(tǒng)中未登錄詞個數(shù)大大減少。
統(tǒng)計UNK單詞被正確翻譯的概率,我們又發(fā)現(xiàn)BPE方法在翻譯精準度上基本和SMT系統(tǒng)持平,從而可以說明BPE方法在原有NMT系統(tǒng)流暢性的基礎(chǔ)上又具有一定的翻譯精準度。
但是使用BPE的方法仍然有其自身存在的問題,例如單詞的漏譯現(xiàn)象。對于NMT系統(tǒng)中低頻詞和未登錄詞的問題仍然是一大難題,我們在人工智能的道路上依然任重道遠。
[1] Nal Kalchbrenner, Phil Blunsom.Recurrent continuoustranslationmodels[C]//Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing. Seattle, Washington, USA: 2013: 1700-1709.
[2] IlyaSutskever, Oriol Vinyals, Quoc V.Le. Sequence to sequence learning with neural networks[C]//Proceedings of the Neural Information Processing Systems (NIPS 2014). Montreal, Canada: 2014: 3104-3112.
[3] Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv, 1409.0473: 2014.
[4] Sennrich R, Haddow B, Birch A. Neural machine translation of rare words with subword units[J]. arXiv preprint arXiv: 1508.07909, 2015.
[5] Philip Gage. A new algorithm for data compression[J]. The C Users Journal, 1994, 12(2): 23-38.
[6] Minh-Thang Luong, Hieu Pham, Christopher D.Manning.Effective approaches to attention-based neural machine translation[C]//Proceedings of EMNLP 2015: 1412-1421.
[7] Kyunghyun Cho, Bart van Merrienboer, Caglar Gulcehre,et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation[J]. arXiv preprint arXiv: 1406.1078, 2014.
[8] Papineni K, Roukos S, Ward T, et al. BLEU: a method for automatic evaluation of machine translation[C]//Proceedings of the 40th annual meeting on association for computational linguistics. Association for Computational Linguistics, 2002: 311-318.
[9] Mattew D Zeiler.ADADELTA: an adaptive learning rate method[J]. arXiv preprint arXiv: 1212.5701, 2012.
[10] Philipp Koehn.Statistical significance tests for machine translation evaluation[C]//Proceedings of the 2004 conference on empirical methods in natural language processing.
E-mail:dyxiong@suda.edu.cn