2021年10月8日-10日,第十七屆全國機器翻譯大會 (CCMT 2021) 在西寧舉行,字節跳動火山翻譯團隊技術和產品研發負責人王明軒以《預訓練時代的機器翻譯》為題,闡述預訓練技術在機器翻譯的應用。
工欲善其事,必先利其器?;鹕椒g能夠持續提供快速、穩定、安全的翻譯服務,離不開團隊對機器翻譯前沿技術的深刻探索。近年來,預訓練技術在多個領域都取得了不小的成就,隨著深度學習的快速發展,面向自然語言處理領域的預訓練技術 (Pre-training) 也獲得了長足的進步,火山翻譯團隊對于預訓練技術在機器翻譯的應用也收獲了一些成果。
以下是王明軒演講全文:
這次我主要想介紹一下預訓練技術在機器翻譯的應用。今天早上各位老師提供了非常好的座談會,對這方面已經做了一些介紹;此外,剛才王瑞老師提及的監督機器翻譯和預訓練也有比較密切的聯系。那么我主要帶大家整體了解一下預訓練技術在機器翻譯里面有什么樣的應用,因為時間關系,主要會聚焦在文本翻譯方面的預訓練。
其實談到 NLP(Natural Language Processing, 自然語言處理),這兩三年以來最大的一個變化就是預訓練。從 BERT(Bidirectional Encoder Representations from Transformers, 由 Google AI 研究院提出的一種預訓練模型)到 GPT(Generative Pre-trained Transformer, 由 Open AI 提出的預訓練語言模型)。從 NLP 到 CV (Computer Vision,計算機視覺) 再到 speech,他們在整個行業引起了一些翻天覆地的變化,可以說是過去十年來最大的進展。
預訓練框架其實是一個非常簡單但非常有效的思路,簡單來說,它本質上也是一種監督學習,即通過大量的、沒有標簽的數據,來訓練一個預訓練模型,然后在下游任務上做 fine-tuning。其實這是一個非常簡單的思路。它的一個優點是泛化性非常強:一個預訓練模型,可以在不同的下游任務上進行適應。今天我們這場講座其實并不是針對預訓練,更多是探討預訓練和機器翻譯結合會不會產生某種化學反應。
今天我的講話內容主要包含兩個部分,第一個部分是介紹單語的預訓練模型,以及為什么預訓練可能會對機器翻譯有作用。
機器翻譯的多語言預訓練(Monolingual Pre-training for NMT)
這個是我畫的一個實體圖,主要用來介紹現今機器翻譯雙語、單語數據的大小。這個是現今的中英雙語數據,包括在商業系統里面,大概一億數據。可以看到單語數據是遠遠大于雙語數據的。因此,這么多數據怎么更好地被利用起來其實是一個非常值得關注的點 。
此外,我們將BERT出現之前與之后的數據量進行對比。預訓練其實是一個很古老的主題:在BERT之前,其實也有很多預訓練的研究,早在2012年大家就已經開始了這類工作。過去到現在發生了什么變化呢?如圖所示,過去的單語數據的量級比較小,而在 BERT 出現后數據量開始百倍增加,我認為質變可能是來自于數據這塊的增加。因此,我們今天的一個主題就是:機器翻譯能不能也利用上這么大規模的單語數據,或者通過預訓練的技術把這部分的信息融合到翻譯里面。第一部分會分為兩節,第一節主要是把最近的幾個工作簡單介紹一下,分為兩種類型,一種可以簡單歸類為 BERT fusion model,也就是研究它如何和已有的預訓練模型做結合。我們知道機器翻譯是一個端到端的模型,但是之前大家比較了解的一些模型像 BERT , GPT,這些都是一個理解模型,是一個language model。他們的模型和機器翻譯的模型不一樣,那么如何把這種異構的網絡信息能夠更好地結合起來,可能是一部分探索的方向。同時還有一部分探索方向,就是怎么做一個端到端的預訓練,然后把它應用到機器翻譯里面。這是目前從單語的角度來看兩個大的應用方向。
BERT 在機器翻譯里面發揮了什么作用?
關于第一個方向:BERT 在機器翻譯里面會起什么樣的一個作用?這塊我們大概會介紹三個工作,基本上都是2020年以后的研究,那么第一個是微軟早期的一個工作。他們提出,直接把 BERT 運用到 NMT(Neural Machine Translation,神經網絡機器翻譯)里面 ,發現直接用它去做 initialize,并沒有那么有效,因為一般來說 BERT pre-training fine-tuning 的模型需要更新parameter 。團隊甚至發現 BERT-Frozen 可以把整個參數固定下來,可能取得的效果會更好,所以這個工作主要探討的是 BERT 怎么樣和 NMT 模型更好地結合起來 ,他們提出這樣一個思路:把BERT的表示作為feature 加進來。另外還提出一個框架,可以簡單理解為雙encoder。一個encoder是BERT, 一個 encoder 是機器翻譯本身的 encoder,接著讓 decoder 同時去做 attention ,這樣的話等于 BERT 這部分信息就會被加進去。這個是ICLR2020的工作,比較簡潔有效。最后證明了 BERT-fused 在 rich resource 還有 low resource 的場景都取得了比較好的結果,另外也發現這種預訓練對于無監督的提升是非常大的。尤其當數據量比較少,或者是沒有平行數據的時候,加了預訓練可能會帶來質變的提升,而且會讓整個模型都更容易訓練。
這是另外一篇工作,由阿里和南京大學合作完成,他和上一個工作本質上是比較接近的,但其中一個很大的不同點在于他做了一些 dynamic layers fusion,考慮到了把不同的 layer,即把 BERT 和 NMT 的 encoder 結合。另外一個不同點是:他們也在 decoder 做了一些嘗試, 就是包括把 decoder 用 GPT 去做預訓練。最后發現了一個簡單的結論:encoder 用 BERT,decoder 用 GPT,這樣的提升是最顯著的。在 transformer base 的情況下,差不多有接近兩個點的、比較顯著的提升。
第三個是我們的工作。我簡單介紹一下,我們的工作和前兩個不一樣的地方,是我們更關注于怎么在不改變模型的架構的情況下,也就是仍然用 BERT 做 initialize 進行 fine-tuning。最簡單的一個思路就是我們不把 BERT tuning 得太多。在 tuning 的過程中就引入了 continue learning 的一些方法,就讓 BERT 的 knowledge 和 NMT 的 knowledge 都能夠同時保存,為此我們采用了一些具體的方法,結果也得到了比較大的提升。該模型已經開源,大家有興趣的話可以在網上查詢到相關細節。
這些思路,其實還有一個問題,我們可以看到前面幾個工作,主要是集中在BERT pre-train,就是對 decoder,包括 GPT 的應用其實是相對比較弱的。但從事機器翻譯的同學其實都明白,target of language model 是非常重要的,或者說 target 的數據其實甚至是比 source 都要重要。那怎么能夠把類似于 language model 或者 GPT model 等用到 NMT 模型里面是我們非常需要關注的一個點。這塊的一個挑戰在于,decoder 的分布是不一樣的。如果直接用 GPT 預訓練一個機器翻譯模型的話,會發現中間的 cross attention 沒有辦法預訓練,那么每一層的輸出就不一樣了。
這種初始化其實效果不是特別好,所以我們今年在 EMNLP 會議上發表了一個比較簡單的工作,就是 encoder 用 BERT, decoder 用 GPT,用 grafting 作為嫁接模型。中間再用類似的 adaptor 把它連接起來。因為 encoder 是一個多語言 BERT,decoder 是一個多語言 GPT,我們可以不考慮初始化,直接把多語言 GPT 的 attention 去掉,然后在上面再結合 cause attention。這樣的好處是整個模型能夠完全地保留 encoder 和 decoder 的信息,然后用少量的數據就能得到一個非常好的結果。上面講述的主要是一種 fusion style,我們怎么把這種表示、生成,結合到機器翻譯里面?
如何設計一種端到端預訓練模型應用于機器翻譯
當然,這塊還有另外一種類型的工作,類似 MASS (Masked Sequence to Sequence Pre-training for Language Generation) 或者 BERT。他們其實是采取了一個不一樣的思路:他們保證了模型結構的一致性來預訓練一個端到端模型。這樣的一個好處在于,我們接下來做模型 fine-tuning 的話結構是一致的,整個模型、參數等會比較簡單,不需要去考慮模型結構不一致的問題,結果也比較簡單。
為了驗證效果,我們在無監督的機器翻譯上做了驗證,其實效果是非常好的,基本上提升是七到八個點,但是在 rich resource 上的提升是比較有限的。此外,這個工作可能還有一個 cross-lingual 的問題。因為我們知道,機器翻譯至少涉及兩個語言,比如說中英翻譯。那么我們如果用英語去預訓練一個英語的 MASS,其實中文部分是沒有辦法很好地被預訓練的。也就是其實整個模型雖然結構上一致了,但本質上也只有大概一半以上的參數被初始化,有一部分參數還是沒有做好的,此外它的上下游的目標也不一致。端到端的預訓練更多是一個 autoencoder 對自編碼,而沒有考慮 language transfer,所以也不一定是最好的結構。類似的一個工作還有 BART,它其實和 MASS 本質上比較接近。最大的區別是 MASS 包含一些更復雜的過程。它不只是做 mask,還關注了包括輸入文本做 random shuffle 等細節。最后這個工作在 low resource 上,包括在 unsupervised results 上做了一些驗證,效果也比較好。
簡單地做一個總結,第一部分講了兩塊,一塊是 fused style,就是把多個模塊結合起來,比如把 BERT 把 GPT 放到 NMT 里面,怎么做能更好地結合;一種是做預訓練的端到端模型。主要是這兩塊的工作,剛才也提到,這兩塊都有它的一些局限性。
Fused model 的這種局限性主要是指整個模型比較復雜,往往需要改變網絡結構,訓練也沒有那么穩定。對于端到端模型,其實它使用起來非常方便,但缺點在于上下游任務不一致,所以就不一定把這個語言的信息用到了最大。此外,這是個單語模型,沒有辦法擴展到雙語的場景。就好比用英語去訓練一個預訓練模型,放到中英機器翻譯里面,中文部分的信息是沒有被充分考慮到的。所以接下來我們就會討論這兩年的一些在多語言預訓練的一些探索。
機器翻譯的多語言預訓練(Multilingual Pre-training for NMT)
因為機器翻譯本身就是一個多語言的問題,多語言機器翻譯預訓練也是一件非常自然的事情。這塊的話,我們還是分兩個部分去講,一部分是關于 fused 的預訓練,一部分是多語言的端到端預訓練,這一塊也會有一些不同的思路。
比如多語言模型,雖然模型一樣,但大家研究的側重點更多的是集中在 knowledge transfer,就是指不同的語言其實分享了同樣的 knowledge。比如說中文和英文,因為大家都生活在地球上,我們可能用不同的語言去描述同一個世界,所以這些知識理論上是可以轉換的。當然,人其實也有一個直覺,我們會發現很多語言學家在學過兩種語言之后,學第三種語言會越來越快,甚至一些非常有天賦的人可以學八種語言。他們學語言的時候其實是會不斷的去學習語言中的共性然后適應。所以我們在考慮語言之間是不是能夠也尋找到這種共性然后學習。
這個是NeuIPS比較早期的工作:Cross-lingual Language Model Pretraining。它的思路是:是否能夠把相同語義的句子表示到同一個空間里面。因為單獨的模型中不同語義的句子其實是表示在不同空間里面的。這是一個例子:通過不斷地去拉齊語義的表示達到目標。然后剛才王瑞老師也提及了,我就不再多講,就是一個多語言預訓練模型,這個模型其實比較簡單。它沿用BERT的思路,把前半句翻譯成英文后半句翻譯成法語, 一起去訓練一個 mask predict model。因為同種語義的英語和法語被放在了一個 context 里面,模型希望通過 context 能夠比較隱式地去學習這種語言的貢獻信息,最后把相似的東西表示在一塊。
最后這項工作做了較多實驗,主要集中在 low resource 和無監督,具體的實驗結果這里就不再詳細介紹,但其中有兩個 ablation study 的結論是非常有趣的。一個是增加更多的語言,對 low resource 的提升非常顯著。在我們要翻譯一些很冷門的語言對時,比如說從英語到印地語,增加更多的語言對其實是對low resource有較大的提升幫助的。但是增加更多的語言對有可能會降低 rich resource 的結果。為什么會降低 rich resource 的結果?我覺得本質可能還是因為 model capacity 不夠,也就是說這個模型空間是有限的,rich resource 本身資源已經比較充分了。所以這一塊的話就需要引入更大的模型。 說明多語言之間是能夠很好的去學習 share knowledge 的。
接下來的這個工作是微軟的另外一個研究,這個工作比較上一個,有一些不一樣的地方。不一樣的地方是上一個工作是在句子的維度做了mix,上半句放中文,下半句放法語,然后把它放在一起。希望他們的context 能夠對齊,是潛在的。而微軟的這個工作是在做一個 language model:我們希望模型對于英文的下半句的預測不一定是英文,因而我們會去做一些替換 ,像“calls for 新的勞工”。其實就是把中文和英文混在一起,讓英文去預測中文。該模型中,詞本身就是它的 contaxt,它的表示來自于contaxt,那么“新的勞工”和 "calls for action" 這種關系就會被建立起來。甚至于“新的勞工”可能和其對應的英文表達 "fresh industrial action" 也能夠對齊。它其實是一個 Alternating language model,當然這塊的話側重的是一個 language model。最后對結果可視化,發現從詞的級別來看這種模型確實是能夠把距離拉近的。
還有一個類似的工作——mBART。mBART 的思路和前兩個不太一樣,如果用一個詞一句話來總結,我覺得就是:“大力出奇跡。”也就是說做的事情是非常簡單的,它本質上還是把所有的語言放在一起去做預訓練,你可以理解為一個多語言MASS或者多語言 BERT。我們不需要雙語數據,只需把英語 、法語、德語幾十種數據全部放在一起,然后做一個 auto-encoder,然后再去下游任務做 fine-tuning ,那么他希望隱式的,比如 model 本身不同的語言都有相同的阿拉伯數字,或者有一些東西本身就是隱式的, 能夠學習不同語言之間的 share 的表示。最后它的規模非常大,引入了可能有二十幾倍的 BERT 的數據量,做了一個很大的多語言 BERT。最后在非常多的任務上,尤其在 low resource 上可能有三到十個點的提升。
同期類似的工作還有 Code-switching pretraining,當然這個也是完整地沿用了 MASS 的結構。它和 MASS 唯一的區別點在于 MASS 是 mask 來 predict ,模型把 mask 的 token 替換成了其他語言。所以就也是一個 Code-switching 的結構。
同期我們完成了 mRASP 工作,也是同期工作,做的規模要大很多。我們把多種語言混在一起去做預訓練。這些語言會有比較豐富的 code-switching,最后可以把所有的語言距離拉近。最后得到的一個結果,即 rich resource 和 low resource 都能被映射到一個空間,那么 low resource 就能更好地借助 rich resource。而且在下游 fine-tuning速度也是非??斓模茨軌蛞欢ǔ潭壬蠝p少 pretraining knowledge loss 的一個問題。以前用 BERT 之類的進行預訓練,最后做 fine-tuning 時往往需要花費兩三天。那么用端到端預訓練的模型可能只需兩三個小時就可以完成fine-tuning。那么它的災難性遺忘問題其實也會潛在地被緩解。
在這個基礎上,在今年的 ACL2021 會議,我們也做了一個 unsupervised 的,或者說 contrast learning 來進行預訓練。我們的正例可能是 parallel 的,cross-lingual 的句子,反例可能讓模型去區分不同語言,不再做數據增強,那么最后也能夠得到一個統一的表示。另外,我們的框架跟之前的一個區別點在于,不論是單語還是多語言數據,都能放到一個框架里。這個模型的一個潛在優點在于,即使不做 fine-tuning,效果也挺好的。當然,做了 fine-tuning 則會有進一步提升,細節就不展開描述了。
從整體來看,在 rich resource, low resource,甚至 zero-shot 的情況下表現都不錯。關于 zero-shot 在這里稍微多提一句,我們發現一個很有趣的點:把所有的語言進行對齊之后,模型就潛在具備了這種 zero-shot 的能力。也就是說,我們訓練數據里沒有法語到德語的平行數據,但我們當我們把德語和英語、法語和英語映射到一起后,這個 model 直接得出的法語和德語的翻譯效果居然還不錯,基本上能夠接近于 pure。這種方式得到的 bleu 差距在一個點以內,我覺得幾乎已經達到可用的狀態。
最后我們簡單地做一個總結, 其實今天圍繞文本翻譯主要講了兩塊,第一部分是如何在多語言的場景下,怎么盡可能用更多的單語數據來幫助機器翻譯。這里有兩種方式,一種是把已經訓練好的或者最強的,類似于 BERT, GPT 這類單獨訓練的 model 嘗試用到機器翻譯里。另一種場景:嘗試針對機器翻譯,端到端設計一種預訓練模型,然后和機器翻譯比較好地結合起來。
第二部分主要是介紹,多語言預訓練最重要的一個點在于:它更多的不是依靠增加單語數據,而是學習一種 universal的 knowledge,即實現不同語言的表示,只要語義是接近的,他們就能有相似的表示。其實,不管對 low resource 還是 rich resource 其實都會有非常大的幫助。
因為時間關系,今天的介紹就主要到這里,謝謝大家。