CCMT 2021 | 預訓練時代的機器翻譯
2021年10月8日-10日,第十七屆全國機器翻譯大會 (CCMT 2021) 在西寧舉行,位元組跳動火山翻譯團隊技術和產品研發負責人王明軒以《預訓練時代的機器翻譯》為題,闡述預訓練技術在機器翻譯的應用。
工欲善其事,必先利其器。火山翻譯能夠持續提供快速、穩定、安全的翻譯服務,離不開團隊對機器翻譯前沿技術的深刻探索。近年來,預訓練技術在多個領域都取得了不小的成就,隨著深度學習的快速發展,
面向自然語言處理領域的預訓練技術 (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速度也是非常快的,即
能夠一定程度上減少 pretraining knowledge loss 的問題
。
以前用 BERT 之類的進行預訓練,最後做 fine-tuning 時往往需要花費兩三天。
那麼用端到端預訓練的模型可能只需兩三個小時就可以完成fine-tuning,它的災難性遺忘問題其實也會潛在地被緩解。
在這個基礎上,在今年的 ACL 2021 會議,我們也做了一個 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 其實都會有非常大的幫助。
因為時間關係,今天的介紹就主要到這裡,謝謝大家。