轉(zhuǎn)發(fā): AI Challenger 2018 機(jī)器翻譯參賽總結(jié)

金山集團(tuán) AI Lab 組隊參加了?AI Challenger 2018 全球挑戰(zhàn)賽的英中機(jī)器翻譯項目,并且獲得冠軍。

AI Challenger 2018 主題為"用 AI 挑戰(zhàn)真實世界的問題",是目前國內(nèi)規(guī)模最大的科研數(shù)據(jù)集平臺、最大非商業(yè)化競賽平臺,最關(guān)注前沿科研與產(chǎn)業(yè)實踐相結(jié)合的數(shù)據(jù)集和競賽平臺,也是 2018 年度中國超高水準(zhǔn)的 AI 競賽。本次比賽使用的數(shù)據(jù)總量達(dá)到 1300 萬句對,其中具有上下文情景的中英雙語數(shù)據(jù)達(dá)到 300 萬句對,相比去年大幅擴(kuò)容。?

在此,參賽團(tuán)隊就技術(shù)和經(jīng)驗做一些分享,希望對大家有幫助。

工具介紹

機(jī)器翻譯的開源庫很多,比如 OpenNMT、FairSeq 和 tensor2tensor 等,我們主要是基于 tensor2tensor 等工具庫進(jìn)行的程序?qū)崿F(xiàn)。它是 Google 基于?TensorFlow?開發(fā)的高級庫,內(nèi)置了許多經(jīng)典模型,開發(fā)調(diào)試比較方便。

我們使用了?3 臺 V100 GPU 服務(wù)器及?1 臺 32 核的 CPU 服務(wù)器作為主要的實驗設(shè)備。

我們選用?Transformer 模型作為我們的 baseline 模型。

數(shù)據(jù)清洗

優(yōu)質(zhì)的數(shù)據(jù)不管在哪個領(lǐng)域下都是有益的。對于一個任務(wù)來說,我們首先要進(jìn)行的就是數(shù)據(jù)的分析及清洗。數(shù)據(jù)清洗的一個通常操作就是去除重復(fù)數(shù)據(jù),原始語料中存在著 6.56% 的重復(fù),共約 90w 個樣本,對這些樣本我們進(jìn)行了去重操作,一般直接刪去即可。

另外我們對源句子與目標(biāo)句子長度比例進(jìn)行了檢測,當(dāng)長度比超過一定的閾值時我們就將對應(yīng)的平行語句對進(jìn)行刪除。

同時我們還注意到有一部分語料存在著對齊錯誤,對此我們使用了 giza++ 對訓(xùn)練數(shù)據(jù)進(jìn)行了對齊并獲得一份雙語詞典。使用獲得的雙語詞典我們就可以對平行語料進(jìn)行漏翻檢測,通常我們會對語料的漏翻程度進(jìn)行打分,分值超過一定閾值時,我們就會刪除對應(yīng)的語料。

下表可以看到,分值越低,刪除的語料越多,結(jié)果有了些許提升。

數(shù)據(jù)增廣

在本次比賽中,我們使用了兩種數(shù)據(jù)增廣手段,分別是回譯和交換。

NMT 中用回譯的方法擴(kuò)充語料是常用的數(shù)據(jù)增廣技術(shù),見 Facebook 在 WMT18 英譯德的冠軍論文?Understanding Back-Translation at Scale?[1]。在該論文中,僅依靠回譯生成的語料做數(shù)據(jù)增廣就能將 BLEU 提高 1 至 2 個點。

在回譯時,我們基于現(xiàn)有語料訓(xùn)練了一個從目標(biāo)語言到源語言(中翻英)的翻譯模型。將目標(biāo)語言語料輸入該模型就能獲得對應(yīng)的源語言語料,將二者結(jié)合后就得到了新的平行語料。當(dāng)然,在 Facebook 的論文中,他們使用了 226M 的單語語料去生成數(shù)據(jù)。

本次比賽不允許使用外部數(shù)據(jù),所以我們直接使用原始預(yù)料中的中文部分進(jìn)行生成。但是,這種方法會存在一個問題,就是新的平行語料與原始語料可能存在重復(fù)。針對這個問題,我們在解碼端加入了一定的隨機(jī)噪聲,從而避免了這種情況。

我們還使用了交換的方法,將原始語料中的英文語料的相鄰的詞都交換了一遍。其實,把交換作為數(shù)據(jù)增廣的手段有些牽強(qiáng)。交換的實際目的是為了增強(qiáng)模型的抗噪能力,但是我們還是通過交換語料的語序擴(kuò)充了實驗數(shù)據(jù),所以把它算作數(shù)據(jù)增廣的一種手段。

從表格中可以看到兩種方法單獨使用時都有了一定的提升,說明數(shù)據(jù)增廣技術(shù)還是有一定效果的。

但是需要注意的就是兩種方法同時使用時效果會有一些下降。

模型改進(jìn)

獲得語料后,我們就開始嘗試在模型層面進(jìn)行一些改進(jìn)。?

在分詞實驗時,我們共使用了三種分詞方法,分別是 tensor2tensor 中默認(rèn)的分詞方式,還有基于 character 級別的分詞和使用 SentencePiece 的分詞,后兩種分詞方法較第一種均有 1 個 bleu 值的提升。

我們還使用了 relative transformer,這個模型在 transformer_big?參數(shù)條件下提升了 0.3 個 bleu 值。模型細(xì)節(jié)詳見?Self-Attention with Relative Position Representations?[2]。

基于 transformer,我們提出了一種新的模型結(jié)構(gòu),叫做 layer-attention。

?模型結(jié)構(gòu)圖

該模型,在 transformer_big?參數(shù)下,在 newstest2014_ende 上面提升了 0.9 個 bleu 值。上圖為原始的 transformer,從圖中我們可以看到 transformer 是將 encoder 端最后一層的信息直接輸出給 decoder 端。

而我們的改進(jìn),是將 encoder 端所有層的輸出進(jìn)行了加權(quán)求和,然后將求和后得到的結(jié)果輸入到 decoder 端中因為時間原因,我們并沒有在本次比賽的測試集數(shù)據(jù)上單獨測試該模型的效果,而是將其使用在了最后的 rerank 中。

另外,在本次比賽給出的數(shù)據(jù)集中,約有 300w 的語料包含上下文信息,為了使用這些信息,我們使用了一種可以將上下文信息引入的模型叫做 contextual trasformer,模型結(jié)構(gòu)見下圖。

具體細(xì)節(jié)及實驗設(shè)置見論文?Improving the Transformer Translation Model with Document-Level Context?[3]。該模型在 transformer_base 條件下有了 0.5 個 bleu 的提升。

Contextual Transformer 就是在原始 transformer 的基礎(chǔ)上引入了額外的 context encoder,并且在 transformer 的 encoder 和 decoder 端加入了 Context Attention 層。?

這種結(jié)構(gòu)增加了模型捕捉上下文信息的能力,并且因為依舊使用的 multihead 并行計算,所以訓(xùn)練和解碼速度并沒有下降很多。

Finetune

finetune 就是使用少量的語料進(jìn)行預(yù)訓(xùn)練模型的微調(diào)。如果使用過預(yù)訓(xùn)練的語言模型(如 ELMo,GPT 或?BERT),那么對于 finetune 就不會陌生。本次比賽中,我們使用與測試語句相似的句子作為 finetune 語料,在現(xiàn)有模型基礎(chǔ)上進(jìn)行微調(diào)。?

我們對測試語料與訓(xùn)練語料進(jìn)行了相似度打分并排序,從中選取出了與每句測試語句相似度最高的訓(xùn)練語料作為最終的 finetune 語料。

從表格的第一行我們可以看到,測試語句中?Send them to these foreign places”?與微調(diào)語料 a1 只有最后的符號不同。而第二行中的測試語句?the necessary excitation, even using crude natural crystals.?為兩個微調(diào)語料 b1 和 b2 的結(jié)合。

經(jīng)過這樣的 fineune 訓(xùn)練后,我們的模型對于測試集的數(shù)據(jù)勢必有所傾向。finetune 后的翻譯表現(xiàn)也驗證了我們的猜想。

從表格中第一行可以發(fā)現(xiàn),Her secret is putting butter under the skin.?這句話的正確意思是她的秘訣是在雞皮下面抹黃油。但是在微調(diào)前,我們得到的釋義是她的秘訣是把黃油涂在皮膚上。而在 finetune 后我們得到了正確的釋義把黃油粘在雞皮上。這也說明 finetune 可以幫助我們獲得了一些詞在某些語境下的正確釋義。

而第二行中,方括號內(nèi)的語句?[Woman On P. A.],在 finetune 前并沒有被翻譯,但是經(jīng)過 finetune 后可以看到我們獲得了該句的翻譯,[P.A.上的女人]?,可見 finetune 也可以幫助我們降低漏翻的概率。

Rerank

通過前面介紹的不同方法和嘗試,我們獲得了很多不同的模型。這些模型有的訓(xùn)練數(shù)據(jù)集不同,有的分詞方式不同,有的模型結(jié)構(gòu)不同,有的還進(jìn)行了 finetune。我們將這些模型都做保留,目的就是為了保持不同模型的差異性,用于進(jìn)行后續(xù)的 rerank 實驗。

在我們得到的所有結(jié)果中,他們的分值表現(xiàn)各不相同,但是勢必會存在這樣一種情況,BLEU 值較高的結(jié)果文件中也會出現(xiàn)翻譯不好的語句,而 BLEU 值較低的文件中同樣也會出現(xiàn)翻譯比較好的語句。?

我們的目標(biāo)就是將盡可能多的的翻譯較好的語句篩選出來,組成最終的結(jié)果。為此我們進(jìn)行了一些嘗試。

我們將解碼時返回的 beam_score 作為排序分值依據(jù),但是不同的模型有不同的表現(xiàn),所以就很難在統(tǒng)一的度量下進(jìn)行排序。所以針對不同的模型我們引入了不同的權(quán)重。使用 beam_score×weight 作為每個翻譯結(jié)果的最終分值,通過篩選獲得了最終的結(jié)果。

因此,如何去獲得準(zhǔn)確的權(quán)重成為了一個問題。我們首先通過人工調(diào)整嘗試性地給出了一份權(quán)重值,但是顯然,對于 16 個模型來說,僅依靠人工調(diào)參無法遍歷整個權(quán)重參數(shù)搜索空間。于是我們想到了貝葉斯調(diào)參。我們使用貝葉斯調(diào)參搜索出了一些權(quán)重參數(shù),但是相較我們手動調(diào)整的參數(shù)提升并不是很大。

于是我們提出了一種新的隨機(jī)參數(shù)搜索方案,如下圖所示。我們首先給出權(quán)重參數(shù)?U 和隨機(jī)搜索參數(shù)?P,然后使用 U 獲得了結(jié)果文件 Y?;?U 和 P 通過隨機(jī)搜索函數(shù)獲得了新的參數(shù)?U’,基于 U’ 獲得了新的結(jié)果文件 Y’,比較 Y 和 Y’ 的分值情況,我們選擇保留最好結(jié)果所對應(yīng)的權(quán)重參數(shù)。

我們最后選用在驗證集上表現(xiàn)最好的參數(shù),使用在了測試集上。

下圖為最終的結(jié)果從各個模型中抽取的數(shù)量分布,從圖中可以看到 valid,testA,testB 抽取的分布是大致一樣的,這也證明了我們 rerank 方法是穩(wěn)定且有效的。

從圖中我們還發(fā)現(xiàn)主要從 3 個模型中進(jìn)行了抽取,分別是基于 Character 級別的,基于 context,基于 SentencePiece 和 finetune 的。?

從抽取分布圖可以看出,從 finetune 的模型中抽取的數(shù)據(jù)并沒有想象的那么多,對此我們進(jìn)行了另外的嘗試。我們利用投票機(jī)制,首先使用 finetune 的模型進(jìn)行投票,將 finetune 模型中大部分相同的語句直接抽取出來作為最終的結(jié)果,剩余的結(jié)果依舊使用隨機(jī)參數(shù)搜索方案進(jìn)行抽取。

此外除卻上面的 beam_score * weights 方案,我們還嘗試使用語言模型對翻譯的句子進(jìn)行打分,然后選取分值最高的句子。但是該方法效果略差于前兩者,所以最終我們選擇使用第一種方案,即按照 beam_score * weights 作為最終的排序依據(jù)。

結(jié)語

金山集團(tuán) AI Lab 組建只有不到兩年,是一只年輕的隊伍,我們會持續(xù)在機(jī)器翻譯等領(lǐng)域深入研究,希望對 AI 業(yè)界有所貢獻(xiàn)。

參考文獻(xiàn)

[1] Sergey Edunov, Myle Ott, Michael Auli, David Grangier. Understanding Back-Translation at Scale. EMNLP 2018.

[2] Peter Shaw, Jakob Uszkoreit, Ashish Vaswani. Self-Attention with Relative Position Representations. NAACL 2018.

[3] Jiacheng Zhang, Huanbo Luan, Maosong Sun, FeiFei Zhai, Jingfang Xu, Min Zhang, Yang Liu. Improving the Transformer Translation Model with Document-Level Context. EMNLP 2018.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容