NAT模型如何同時兼顧性能、速度?蒸餾很有潛力

NAT模型如何同時兼顧性能、速度?蒸餾很有潛力

作者 | 馮凱

單位 | 小牛翻譯

原文標題:淺析基於隱變量的非自迴歸神經機器翻譯方法

近年來,基於深度神經網絡的機器翻譯取得了飛速發展。目前大多數NMT模型都使用了編碼器-解碼器框架來實現,編碼器將源語句的表示送入到解碼器來生成目標句子;解碼器通常以自迴歸的方式來工作,從左到右逐字地生成目標句子,第t個目標詞的生成依賴於先前生成的t-1個目標詞。

雖然最近提出的幾個模型利用卷積[1]或者自注意力[2]使得訓練過程高度並行化,加快了訓練速度。但由於其自迴歸的特性,模型的推理過程非常緩慢,這對於實際的工業應用是個很大的挑戰。因此,怎樣提升模型的推理速度成為了一個新的研究熱點。

自迴歸 vs 非自迴歸

自迴歸模型

自迴歸(Autoregressive Translation ,AT)模型需要用已生成的詞來預測下一個位置的詞,用概率模型來表示為:

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力

這種自迴歸的解碼方式符合閱讀和生成句子時的習慣,能有效地捕捉到真實翻譯的分佈情況。它在機器翻譯等任務上取得了較好的性能,並且波束搜索也能夠為尋找近似最優譯文提供了一種有效的局部搜索方法。但是也有其自身的缺點,主要表現在以下兩個方面:

  1. AT模型存在ExposureBias 問題。自迴歸模型在前面產生錯誤會傳遞到後面的位置,這也是模型在長句子的翻譯中表現差的原因之一。

  2. 解碼器的每個步驟必須順序地而不是並行地運行,因此自迴歸解碼會阻止像Transformer這樣的體系結構在推理過程中充分體現其訓練時的性能優勢。

非自迴歸模型

非自迴歸 (Non-Autoregressive Translation, NAT)模型打破了生成時的串行順序,希望一次能夠解碼出整個目標句子,從而解決AT模型所帶來的問題。一個簡單的NAT模型將解碼問題建模為:

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力

其假設生成的目標句子的每個詞都是完全獨立的。但由於單詞之間確實是存在著依賴關係,因此與AT模型相比,所學習的NAT模型只能獲得較差的結果。為了緩解這種獨立性假設過強的問題,一種方案是引入一個隱變量z來建模目標序列的相關性:我們首先從先驗分佈中採樣z,然後對z進行條件化來非自迴歸地生成翻譯:

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力

隱變量提供一種聲明性語言,用於指定複雜數據集中的先驗知識和結構關係,能夠輕鬆地通過條件獨立性來指定模型約束。同時,深度學習可以使用功能強大的函數逼近器對這些條件概率進行參數化 ,可以天然的將兩者結合起來。但條件概率的深度參數化通常使後驗推斷難以解決,而潛變量又會引入不可微點使反向傳播複雜化。

另外,計算隱變量模型需要估計其後驗分佈,這個過程過於複雜因此無法計算。一個簡單的方法是給隱變量賦予物理意義,為模型提供監督信號就可以直接擬合其先驗分佈而不用計算後驗分佈。例如下面的兩種方法使用繁衍率或者語法樹作為隱變量來解決這些問題。

NAT with Fertility

非自迴歸神經機器翻譯的概念在ICLR18上首次被Gu [3]等人提出。與自迴歸模型相比,非自迴歸模型在實現上主要有以下兩個區別:Decoder的輸入和目標序列的長度。自迴歸模型每步的輸入是上一步解碼出的結果,當預測到EOS時序列的生成就自動停止了,然而非自迴歸模型卻沒有這樣的特性。該工作採用Fertility Predictors的結果來作為隱變量,巧妙的解決了上面的兩個問題。

模型細節

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力

圖1 NAT的模型結構圖

由圖1我們可以看出,NAT的Encoder與Transformer相比,多了一個Fertility Predictor,用來決定將源語的某個單詞複製多少次來作為Decoder的輸入。在上圖的例子中,源語的單詞”We”對應的fertility的值是1,因此將會作為輸入出現在Decoder端一次,以此類推。因此,生成出fertility值以後,Decoder端的輸入和句子的長度也就確定了,即所有fertility值的總和。

在訓練時,使用外部的對齊工具(fast align)來生成fertility信息,從而將Fertility Predictor的訓練轉換成為一個監督問題。訓練階段的loss由兩部分組成:translation loss 和 fertility loss。另外,儘管使用了fertility作為隱變量,但模型仍然不能很好應對訓練中的multi-modality問題。例如,儘管英語的"Thank you"的每個詞對應的fertility都是1,但卻能得到兩種不同的翻譯:“Danke schon.”和“Vielen Dank.”。因此,該工作利用了Sequence-levelknowledge distillation的方式,解決了上述問題。具體做法是,首先訓練一個AT模型作為teacher,然後解碼整個訓練集的句子作為NAT模型的ground truth來進行學習。

在推理時,由於fertility的存在,我們無法得到全局最優解。因此Gu等人提出了Noisy parallel decoding的方法,首先從fertility空間中採樣多個樣本並生成每個fertility序列對應的翻譯結果,然後用訓練好的AT模型來對這些句子做re-ranking,挑選出得分最高的句子。這個過程相當於對翻譯結果進行強制解碼,它可以並行的提供所有解碼器輸入,因此整個過程不會太慢。

該工作首次提出了非自迴歸神經機器翻譯的概念,實現了推理過程的並行計算,取得了不錯的加速效果。但也存在以下幾個問題:1) 利用了外部對齊工具來獲得 fertility信息,但對齊工具的誤差可能會影響解碼結果的質量。2)丟失了目標端的序列信息,造成大量重複翻譯或者漏譯的情況。3) 相比於AT模型,NAT模型的目標端直接copy源端的輸入,使得解碼器必須處理在更少的信息條件下的翻譯任務,從而導致較差的準確度。

NAT with Syntactic Tree

上面說到,忽略了目標端序列信息的NAT模型,會使得解碼出的目標序列存在大量重複翻譯的情況。因此,將序列信息合理的融入到非自迴歸模型中是個非常關鍵的問題。這篇文章將句法樹作為序列信息的抽象,把句法信息看作隱變量,首先自迴歸地預測出一個目標句的句法塊序列,然後根據句法塊序列非自迴歸地生成所有目標詞。該工作由 Akoury[4]等人發表在ACL2019上。

模型細節

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力

圖2 NAT with syntactic tree的模型結構圖

該方法的Encoder與Transformer的Encoder完全相同,但解碼器分為兩個部分。第一部分的Parse Decoder根據源語信息自迴歸的生成句法塊序列,然後第二部分的Token Decoder根據源語信息和上一步的生成句法塊信息來並行的生成整個目標序列。

在訓練期間,該工作通過目標語言的外部解析器(Stanford CoreNLP)來將句法預測任務轉換為有監督問題。值得注意的是,如果我們預測整個句法樹,這種方法將極大地增加自迴歸步驟的數量,從而增大時間開銷。因此,為了維持句法信息與解碼時間的平衡,這裡預測一些由句法類型和子樹大小組成的塊標識符(如VP3)而不是整個句法樹。如圖3所示,其中k表示我們需要預測第幾層的句法信息,k越小我們所需要預測的句法信息越少,所蘊含的信息也越抽象,解碼速度也會越快。

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力

圖3 塊標識符示例

通過這樣的操作,語法塊詞彙量非常小,因此自迴歸過程不會顯著影響整體的解碼速度。另外,他們發現Parse Decoder的層數變化並不會顯著影響解碼結果,因此為了進一步提升解碼速度,將Parse Decoder的層數設置為1。

在解碼的第二階段,使用了一個完全的非自迴歸步驟,將第一個解碼器的輸出作為第二個解碼器的輸入,兩個解碼器的參數不共享。在訓練過程中,使用真實的句法塊序列作為輸入,而在推斷時,則使用預測的句法塊。另外,為了確保第二個解碼器中輸入和輸出單詞的數量相等(為了套用Transformer的框架),Akoury等人將佔位符<mask>標記添加到塊描述符後,其中添加的數量與塊描述符的子樹大小相同。/<mask>

該工作在性能相當的情況下,提升的速度都優於之前的模型,在翻譯質量上也取得了較好的效果。

總結和展望

自從NAT的概念被提出後,相關的論文層出不窮。但總得來說,可以分為以下三種方式:

  1. 基於latent variable的NAT,正如上面所示的兩種方法,其主要問題在於怎麼找到更好的隱變量能夠充分表示NAT模型所丟失的序列信息。

  2. 基於Iterative Refinement的NAT, 具有代表性的是Jason Lee[5] 和Marjan Ghazvininejad[6] 等人的工作,其主要做法是將上一輪迭代生成的翻譯結果和源語作為下一次迭代的輸入,不斷的迭代精化,相當於是句子級上的自迴歸模型。

  3. 基於knowledge distillation的NAT,具有代表性的是Zhuohan Li[7] 和 Wei B[8]等人的工作,由於AT模型和NAT模型的結構相差不大,因此我們完全可以將善於建模的AT模型作為老師,NAT模型可以逐塊的學習前者的分佈。這樣,模型既可以獲得NAT的高速性能,又不會遭受相對較低的翻譯性能的困擾。

丟失了序列信息的非自迴歸模型如何取得與自迴歸模型相當的性能是目前研究的關鍵問題。引入額外信息的NAT模型可能會提升性能,但勢必會減慢推理速度。第三種方法為解決這個兩難問題提供了一個良好的思路,因此筆者認為,如何用一種更精細的方式來學習AT模型中所蘊含的序列信息將會是一個有潛力的研究方向。

參考文獻

[1]JonasGehring, Michael Auli, David Grangier, Denis Yarats, and Yann N Dauphin. 2017.Convolutional sequence to sequence learning. arXiv preprint arXiv:1705.03122.

[2]Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, AidanN Gomez, Łukasz Kaiser, and Illia Polosukhin.2017. Attention is all you need. In Advances in Neural Information ProcessingSystems, pages 6000–6010.

[3]Jiatao Gu, James Bradbury, Caiming Xiong, Victor OK Li, and Richard Socher.Non-autoregressive neural machine translation. arXiv preprint arXiv:1711.02281,2017.

[4]Akoury, Nader, Kalpesh Krishna, and Mohit Iyyer. Syntactically SupervisedTransformers for Faster Neural Machine Translation. arXiv preprintarXiv:1906.02780 (2019).

[5]Jason Lee, Elman Mansimov, and Kyunghyun Cho. 2018. Deterministicnon-autoregressive neural sequence modeling by iterative refinement. arXiv preprintarXiv:1802.06901.

[6]Marjan Ghazvininejad, Omer Levy, Yinhan Liu, and Luke Zettlemoyer. 2019.Constant-time machine translation with conditional masked language models.CoRR, abs/1904.09324.

[7]ZhuohanLi, Zi Lin, Di He, Fei Tian, Tao Qin, Liwei Wang, and Tie-Yan Liu. Hint-based

trainingfor non-autoregressive translation. arXiv preprint arXiv:1909.06708, 2019.

[8]Wei B, Wang M, Zhou H, et al. Imitation Learning for Non-Autoregressive NeuralMachine Translation[J]. arXiv preprint arXiv:1906.02041, 2019.

馮凱,東北大學自然語言處理實驗室研究生,研究方向為機器翻譯。

小牛翻譯,核心成員來自東北大學自然語言處理實驗室,由姚天順教授創建於1980年,現由朱靖波教授、肖桐博士領導,長期從事計算語言學的相關研究工作,主要包括機器翻譯、語言分析、文本挖掘等。團隊研發的支持140種語言互譯的小牛翻譯系統已經得到廣泛應用,並研發了小牛翻譯雲(https://niutrans.vip)讓機器翻譯技術賦能全球企業。

NAT模型如何同时兼顾性能、速度?蒸馏很有潜力


分享到:


相關文章: