本文為 1 月 4 日,騰訊 AI Lab 高階研究員——塗兆鵬在第 22 期 PhD Talk 中的直播分享實錄。
機器翻譯是自然語言處理的經典任務之一,涉及到自然語言處理的兩個基本問題:語言理解和語言生成。這兩個問題的建模直接對應譯文的兩個評價指標:忠實度(是否表達原文的完整意思)和流利度(譯文是否流暢)。
近幾年來,神經網路機器翻譯取得了巨大進展,成為了主流模型。神經網路由於能緩解資料稀疏性及捕獲詞語之間的關聯,生成的譯文流利度高,這是過去二十餘年上一代統計機器翻譯一直以來的難點。但由於神經網路目前來說仍然是個黑盒子,無法保證原文的語意完整傳遞到標的端,導致經常出現漏翻、錯翻等忠實度問題。
本次報告主要講述過去一年我們在提高神經網路翻譯忠實度方向上的系列研究工作,從利用句法結構、擴大翻譯粒度、引入篇章資訊、忠實度學習方面加強模型對原文的理解。
△ Talk 實錄回放
翻譯其實是自然語言處理中的經典任務,早在 1949 年就有學者提出了一種翻譯備忘錄。雖然當時翻譯系統本身沒有被實現,但是提出的“編碼解碼”的思想被廣泛地應用於後續的機器翻譯研究中。
翻譯是自然語言處理中的一個基本任務,有人曾說翻譯是自然語言處理皇冠上的明珠,當翻譯問題被解決的時候,自然語言處理的大部分問題也就被解決了。
當然在其他領域諸如對話系統、句法分析等研究中也會有類似的說法,但毫無疑問翻譯是其中比較明亮的一顆。因為翻譯涉及了語言的理解和生成,需要理解原文的意思,併在此基礎上生成譯文。
在人工智慧的大領域中,翻譯也是一個比較合適的任務,因為相對於對話系統等而言,翻譯的任務難度相對適中。
首先,它可以被認為是一種有監督的學習,因為原文的存在,我們只需要做到完整地將原文資訊傳遞到譯文中,有這樣的監督訊號使得質量得到一定保證; 其次,它有比較充足的語料,很多開源的資料和系統都到達了千萬級別;最後,它有比較好的評價機制,雖然一直被人詬病,但在整個翻譯體系中仍舊是一個比較可靠的評價指標。
這三個優勢使得翻譯比較常被用於測試一些模型演演算法,可以看到近期深度學習在自然語言處理中的應用也經常使用翻譯作為主要的任務。
綜上所述,翻譯是一個綜合的、有意思的且難度適中的任務 。因此我們也在翻譯任務上關註了很久 。
發展歷程
嚴複在《天演論》中提出翻譯有三個難點:信、達、雅。信,是指準確地將原文意思翻譯出來,不增不減;達,是指譯文流暢、自然;雅,是需要有古風。
比如嚴複的《天演論》是對達爾文《進化論》的翻譯,他將這本書的思想總結為八個字“物競天擇,適者生存”,這其實是“信、達、雅”的典範。
但是在實際翻譯中,即使是專業人員也很難達到“雅”,因此更多地我們只追求“信”和“達”,也就是說能準確、流暢地傳達原文意思。
嚴複還提到“求其信已大難矣,顧信矣不達,雖譯猶不譯也,則達尚焉”,就是說翻譯能夠忠實原文已經很難了,有時候為了忠實原文使得譯文不流暢,這樣翻譯了也猶如沒有翻譯,所以還是流暢地翻譯更加重要。
嚴複提出的這些理論和現代機器翻譯發展的趨勢密切相關。在 1993 年由 IBM 提出的 IBM 模型揭開了機器翻譯的篇章,這個模型也是統計機器翻譯的基石。
統計機器翻譯的特點是“信而不達”(adequate yet not fluent)。以前的谷歌翻譯和百度翻譯都採用這種方式,其翻譯的效果比較機械,雖然能基本翻譯原文的意思,但不夠流暢更。
在過去 20 年,如何提高翻譯的流暢性一直是統計機器翻譯的難點,包括如何更好地整合語言模型以及引入句法知識。
2014 年,神經網路機器翻譯的概念被提出來,它用一個很大的神經網路去完整建模整個過程。由於神經網路可以捕獲詞的語意相關性,同時剋服詞的稀疏性,因此其能生成比較流暢的譯文。
但由於其黑盒的特徵使得很難保證其能夠忠實原文的意思,因此神經網路機器翻譯的特點是“達而不信”(fluent yet inadequate),經常會出現漏翻和翻飛的現象。因此,我們的關註點也就是如何提高神經網路機器翻譯的忠實度。
工作概覽
在最初的時候,我們先做了一些比較基礎的嘗試。因為當時神經網路機器翻譯模型還處於比較初級的階段,所以我們在編碼端引入了改寫率機制,使得模型更加關註於未被翻譯的地方。
而後,我們又引入了一種“context gate”,使得原文的意思能夠更有效地傳遞到標的端。最後,我們提出了更好的訓練標的使得解碼端能更忠實原文意思。可以看出這三個工作是比較基礎、粗獷的改進方式。
在過去一年裡,我們提出了一些更深入的改進方式,藉助了統計機器翻譯中的一些經驗。
首先,我們想引入句法資訊,比如在 ACL2017 上的兩篇文章,我們分別把源端和標的端的句法資訊引入,使其能夠更好地理解原文和生成譯文。其次,我們提出了短語級別的翻譯。
短語是統計機器翻譯的基礎,我們希望將短語也引入神經機器翻譯,比如在模型結構上引入類似於短語的操作(Soft Phrase)或者是直接將統計機器翻譯中的短語表引入(Hard Phrase)。
同時,我們也關註檔案級別的翻譯。檔案級別的翻譯是機器翻譯的經典任務,也具有較強的實用價值。相對於句子級別的翻譯,檔案級別的翻譯存在一些特殊的問題,比如需要滿足句子間的一致性和幫助消歧等。
最後,我們希望直接對忠實度問題進行建模。比如直接對翻譯過和未被翻譯的內容進行建模,類似於之前提到的改寫率,但是更加直接。另外,在一些特殊場景下,比如口語中,會存在代詞的缺失問題,這也會導致翻譯的不完整。
由於報告時間有限,我今天只講我們最近的三個工作,其他工作會簡單介紹一下。
第一個工作是如何整合源端的句法樹。我們採用了一種非常簡單的方法,首先 (a) 是輸入的原句,(b) 是該句的句法樹,(c) 將句法樹拉平成為一個字串。
我們提出了三種方法:
(a) 中是使用兩個獨立的編碼器分別編碼句子和句法標簽序列,再將生成的向量拼起來作為編碼好的隱向量;
(b) 是一種層次化的編碼方式,先將句法標簽序列編碼,再傳到對應的詞處;
(c) 是比較簡單也是最有效的一種方法,將標簽和詞混合到一起,用單個編碼器編碼,這樣詞中就會具有對應的句法資訊。這種模型結構在基於神經網路的句法樹分析中也是一種常見的做法。
第二個工作是如何將標的端的句法資訊引入。我們使用了一種比較淺層的句法知識,引入了一新的個 chunk-layer。
我們希望其能將短語的性質引入,一個 chunk 就是一個短語,比如:“the french republic (法蘭西 共和國)” 就是一個 chunk。我們希望“the”, “french”, “republic”這三個詞能夠共享同一個隱向量,相當於是在隱層維護了短語的概念。
為了實現 chunk,我們需要一個邊界預測。在 chunk 內部共享同一個 chunk-layer 的狀態,只有在 chunk 邊界處才去更新 chunk-layer 的狀態。這樣就引入了一種“soft phrase”的概念。
第三個工作我們希望直接能復用統計機器翻譯中的短語表,因為短語表本身就是一個非常好的知識源。我們利用 SMT 推薦一些短語的翻譯結果,以及利用 NMT 推薦詞的翻譯結果,而後透過一個 Balancer 平衡兩個的翻譯結果。
這種方法效果上並不是特別好,但是比較具有創新性。我們也再進一步改進這個工作,希望找到更好的方式去實現這種結合。
TACL 2018a
首先是篇章級別的翻譯,這是我們與清華大學劉洋老師合作的文章。
當前大部分的翻譯都是基於句子的翻譯,上面的例子中可以看到,由於該句子中缺少重要的背景關係資訊,“機遇”被錯誤地翻譯成了“challenge”。
對於篇章級別的翻譯有兩個重要問題。一個是一致性問題(consistency),比如時態問題,在歷史翻譯中會把“覺得”翻譯成“felt”,在當前翻譯中會翻譯成“feel”。如果只考慮一個句子,這種時態問題就很難保持一致,但是實際應用中一致性是非常重要的。
另一個是歧義問題(ambiguity),這個是機器翻譯中的經典問題,在統計機器翻譯中就存在,在神經網路機器翻譯中這個問題更加嚴重。因為在神經網路機器翻譯中採用詞向量來表示每個詞,這種方式可以緩解詞的稀疏性並學習到詞之間的關係。
但是這種方式也給翻譯帶來了詞選擇的困難,比如在翻譯“機遇”時就很容易將其錯翻成“challenge”而不是“opportunity”,尤其在缺乏額外的背景關係資訊的時候。
我們就希望解決以上兩個問題,如上圖,對比 base 模型,我們可以將過去時和有歧義的詞翻譯出來。右邊的矩陣圖中 x 軸是生成的譯文,y 軸是歷史資訊。
在生成“felt”這個詞時,模型找到了歷史中出現的“felt”,從而保持了時態的一致性;在生成“opportunity”的時候,模型找到了歷史中出現的“courses”,“tasks”等詞,透過這些詞的資訊正確地翻譯出“opportunity”。
雖然這些問題對於 NMT 是較新的問題,但在 SMT 的技術中已經驗證過篇章級的翻譯會緩解以上兩個問題。由於很多研究是針對於對 NMT 模型結構的改進,缺乏對特定問題的關註。我們是較早期地採用篇章級的翻譯去解決以上兩個問題。
首先介紹一些歷史工作。第一個是我們在 EMNLP2017 中一篇短文的工作,利用了長期的、單語料的翻譯歷史資訊。
我們用層次化的 RNN,一個是 word-level RNN 去編碼每個句子得到每個句子的向量表徵,另一個是 sentence-level RNN 將上一步生成的向量再次編碼成一個整個篇章的表徵向量。
第二個是紐約大學的工作,採用另外一套編碼器和註意力機制去引入前面一個句子的資訊。雖然這些工作已經被證明具有一定的有效性,但是存在一些缺點。
首先,它們的計算複雜度較高,使得其必須限定在比較小的範圍內操作 。其次,由於它們只使用了單語的資訊,因此有可能不適用與某些特定領域,比如在電影字幕領域,由於電影字幕很多是意譯而非逐詞翻譯,所以只利用源端資訊很難翻譯正確。
於是, 我們提出了一個輕量級的翻譯模型,增加了 key-value 的 cache memory 來儲存翻譯的歷史資訊。計算複雜度較低,同時適用於不同領域。
上圖是我們的模型的結構,在標準的 NMT 模型上,我們引入了一個 cache memory 來儲存翻譯的歷史資訊。
所謂翻譯歷史資訊就是在過去解碼過程中的源端 context vector 和標的端狀態資訊,這一對資訊可以較好地表達翻譯歷史資訊。
我們將源端作為 key,標的端作為 value。在解碼的過程中,我們利用當前的從 cache memory 中檢索,把 value 中相關的值結合起來得到一個輸出,並將該輸出與 decoder 的當前狀態結合得到一個新的狀態。該狀態中就帶有翻譯歷史的資訊從而能更好地進行翻譯。
簡單介紹一下模型的細節。首先是檢索(key addressing)的方法,我們嘗試了很多中實現方式比如 attention,加入轉換矩陣等。我們最後選擇用點積的方式,能夠在保證效果的同時速度最快。
其次是值讀取(value reading)的方法,採用根據檢索得到的機率分佈加權求和得到輸出。
再次是和的結合,我們採用一個”gate”來做更新。這種方式是具有語言學含義的,因為對於一些實詞和動詞在翻譯時需要篇章資訊來進行消歧和確定時態。但對於一些虛詞就不需要篇章的資訊。
最後根據結合後的狀態資訊生成詞。總的來說,這個工作使用了一個輕量級的 memory 結構來記住雙語的歷史翻譯資訊,不僅計算複雜度較低,還可以用於不同的領域。
TACL 2018b
第二個工作是直接對忠實度建模,這是我們和南京大學合作的文章。
這個工作的動機是:在最初的編碼器和解碼器結構下,解碼器的狀態資訊需要承擔很多工。
第一個是它需要承擔語言模型的責任,以保證翻譯的流暢度。第二個是其需要儲存三個內容:當前被翻譯的內容(present),已經被翻譯的內容(past)和沒有被翻譯的內容(future)。
然而一個解碼器狀態其實只是一個 1000-2000 維的向量,需要同時承擔這麼多工會對訓練帶來很大的難度。
2015 年,有研究者提出了註意力機制(attention),它將儲存當前被翻譯的內容的任務分離出來,在翻譯過程中動態生成來指導當前需要翻譯的內容。這種方式給翻譯帶來了很大的提升,現在也作為了許多深度學習模型的標配。
但即使這樣,解碼器的狀態仍舊需要承擔其他三個任務。因此,我們假設如果能把這些任務再次分離會帶來效果的進一步提升。
近期的一些工作都驗證發現,如果模型中每個向量或者元件都能很清晰地學習出某一部分的作用,那麼將會得到更好的效果,包括近期 Hinton 提出的膠囊網路其實也是類似的思想。
為了驗證我們的想法, 我們做了更細緻的探究。首先,我們發現 NMT 有很多漏譯和重覆翻譯的錯誤,這個問題說明模型沒有很好地將源端的資訊傳遞到標的端。另外,理想情況下我們希望在每步翻譯時,解碼器都能將翻譯過的內容減掉,只保留未被翻譯的內容。
然而我們發現,即使用全零向量初始化解碼器,其效果也不會下降太多,說明解碼器並不能很好地利用源端的資訊。
我們的工作希望把對 past 和 future 的表徵分離出來,進行單獨建模。
舉一個例子來展示我們的想法,對於一個輸入句子,首先用 RNN 將其轉化為隱向量序列。在標的端有三層結構:decoder layer, past layer, future layer。
首先用源端句子的總結去初始化 future layer,也就是代表最初整個句子都需要被翻譯;用全零向量初始化 past layer,代表當前沒有內容已經被翻譯;同樣用全零向量初始化 decoder layer,也就是對語言模型當前沒有任何歷史資訊。
其次,我們將三層的狀態都傳入 attention 模型,這樣 attention 模型可以更好地確定需要被翻譯的內容和規避翻譯過的內容。
在翻譯了第一個詞時,我們將 C1 從中減去得到,也就是從未被翻譯的內容中減去當前的內容。
將用於更新 decoder layer 的狀態得到 S1,並預測輸出詞 y1;最後再將 C1 加到上得到,從而更新被翻譯過的內容。以此類推進行翻譯。
總的來說我們引入了多層結構,每層有清晰獨立的功能建模。
下麵簡單介紹一些技術細節。首先,如何建模加法操作,因為模型中用到加法操作是和 RNN 的更新密切相關的,所以我們直接利用 RNN 來完成加法操作。
其次,如何建模減法操作,參考詞向量模型中的經典公式 E(king) – E(male) + E(female) = E(queue),我們也希望能直接在 RNN 更新過程中建模減法操作。
以 GRU 為例,第一個可以使用標準的 GRU 結構,讓模型自動學出減法操作;第二個我們提出了 GRU-o,我們將減法操作建模在 GRU 的外面,在上乘以負號再輸入 GRU;第三個我們提出了 GRU-i,在 GRU 結構內部建模減操作,把原本對的重置改為對 Ct 的重置,並乘以一個負號。
另外,為了讓組間更清晰地學習到相關的功能,我們在訓練時引入了額外的指導。以 future layer 為例,我們希望滿足,同時。
因此我們在訓練標的中加入了使得盡可能等於的學習標的。同樣對於 past layer,我們也希望盡可能等於。
我們在中英和德英資料集上都做了實驗。
首先在中英上,我們只加入 future layer 並對比了三種減法操作的建模方式,發現 GRU-i 效果最好 ;再加入額外的學習標的效果會更好;同樣只用 past layer 也有類似的效果;最後,同時使用 past layer,future layer 和額外的學習標的會達到最好的效果。
另外,我們對比了僅僅使用多層解碼器的情況,發現其提高並不顯著。最後,對比我們以前的 coverage 的工作能夠有進一步的提升。
這種提升主要來源於兩方面:一方面是這個工作中我們直接對語意內容進行建模,而非僅僅是針對於詞;另一方面這個工作同時影響了 attention 機制和解碼器狀態。
在德英上的實驗發現我們的模型和很多其他工作是有可比性的。另外,人工的評測發現我們的工作在過度翻譯和漏譯上都有一定提升。最後,對於詞對齊的效果也有所提升。
總結來說,該工作直接建模了翻譯過和未被翻譯的內容,併在不同的資料集上都得到了效果驗證。
AAAI 2018
最後一個工作是我們和都柏林大學的合作,針對口語領域,尤其是中文等 pro-dropp language 進行處理。
Pro-dropp language 是代詞省略的語言,比如中文中經常為了保持句子的緊湊程度,而把一些代詞省去。
在中英翻譯中,我們對 100 萬的句對進行了分析,其中有 20% 的中文句子中存在代詞省略的現象,而對應的英文句子則不存在代詞的省略。
這種現象會對翻譯帶來較大的困難。在 NMT 中這個問題的影響被略微減輕,模型在翻譯時可以自動地補全一些代詞,來保持句子的完整性。但是在一些複雜的代詞省略場景下,NMT 也會出現錯誤翻譯的現象,甚至有可能完全改變了整句的意思。
我們在原始資料和人工補全了代詞的資料上分別做了實驗,發現代詞的補全對翻譯效果有大約 5.0BLEU 的提升。
我們引入了去年我們在 AAAI 中提出的 Reconstructor 模型,該模型類似於 auto-encoder,標的是重新生成原文,從而找到更好的原文表示,具體的模型細節不再贅述。
我們採用了不同的方法構建模型,比如我們在源端增加了一個 Reconstructor, 利用 Reconstructor 的編碼器狀態,希望其中能蘊含補全的代詞資訊。
Reconstructor 是透過標註後的單語料資料訓練得到的。後面我們會驗證如果直接使用 Reconstructor 自動生成的資料作為訓練語料,由於錯誤的累積,其效果不好。
另外一種方式是把 Reconstructor 放在標的端,目的是使得解碼器的輸入不僅適合於翻譯,同時也能很好地表示原文資訊。
最後,我們可以將 Reconstructor 同時用在源端和標的端。這種模型和 QA 中多層 memory 的結構是非常類似的,在每一層都傳入同樣的資訊源,透過模型自己的學習機制,使得每一層都能捕獲到其需要的資訊。
模型的學習標的除了原本的似然度之外,還有源端和標的端 Reconstructor 的學習標的。
首先來看中英上的實驗,baseline 模型是用原始的句對;baseline+DPs 是我們使用自動補全了代詞的句子所為訓練語料,能比原始 baseline 有所提高,但提高較少。
下麵三個是我們提出的模型:在編碼器端加入 Reconstructor,在解碼器端加入 Reconstructor,在兩端均加入 Reconstructor。可以看出,對訓練和解碼的速度都是有一定影響的,但是其影響可以接受。
兩端均加入 Reconstructor 的方法效果最好,可以印證我們的猜想。
同時,我們和其他的方法進行對比,比如有工作嘗試使用多個輸入源的方式等,發現其效果不如我們的工作 ;另外有工作使用多層的結構來解決這個問題,同樣沒有我們模型的效果顯著;最後我們對比增大 hidden layer 大小的模型,發現模型的效果也不僅僅來自於引數的增多。
其次,在日英翻譯中我們的模型也給出了比較好的效果。
我們試驗了僅在訓練時使用 Reconstructor,而測試時不使用,這樣也會帶來 2.22BLEU 的提升。這說明該模型在實際的系統部署中不會帶來額外的開銷。
其次,我們在模型中使用重構原句而非重構標註後陳述句的 Reconstructor,發現效果也有一定提升,但提升較少。
另外,我們發現對使用比人工標註後的資料,我們的模型還存在很大的提升空間。
最後,我們進行了錯誤的分析,可以看出對於 subject, object, dummy 三類代詞,我們的模型都能解決大部分錯誤,引入小部分錯誤,整體作用是正向的。
上圖給出了一些例子,可以看出我們的模型在翻譯的時候,不僅僅有補全代詞帶來的準確率,更多的是防止由於代詞缺失帶來的句子結構的變化。
總的來說,我們是在 NMT 中較為早期地對代詞問題進行建模;在編碼解碼中我們都能引入代詞的資訊;如果代詞的標註效果提升之後,我們的模型效果會有進一步提升。
以上是我的報告的全部內容,主要介紹在過去一年我們為了提高神經網路翻譯忠實度問題上所作出的工作。
Q & A
Q:請問詞向量用的是什麼?
A:我們用到的詞向量都是在模型中自動學習到的。我們實驗發現,在比較大的外部資料集,比如 Wikipedia 資料,訓練得到的詞向量並不適合翻譯任務。因為在翻譯中想要學習到的詞向量可能不僅僅是為了表徵每個詞的意思和聚類,而是學習到語言之間的關係。
Q:在大的訓練語料中是否有推廣?
A:好問題!有些模型我們有在大的語料上做了驗證,但有些模型並不能很容易推廣。 比如引入句法樹的方法,因為其本身模型代價較高,在大的語料上效果不明顯。所以這個工作更偏科研一些。
Q:請問訓練語料都是哪裡來的?
A:一般是用開源資料,比如 WMT 上的英德、英法資料。這樣可以保持與其他工作有橫向可比性。中英目前在 WMT 也有一千萬的中英翻譯資料。
Q:如何提升解碼速度?
A:可以看看 Jacob Devlin 的一些工作,他現在在微軟。他的一些開源報告中提出了很多加速方式。比如我們一般使用全部的 softmax,可以換成使用 sampled softmax 等等。
Q:需要迭代多少萬次?
A:在百萬級的資料上,一個 mini-batch 是 80 的話,一般迭代 15 萬到 20 萬次會達到比較好的效果。如果加上 layer norm 或者 dropout 的話,會使得實驗速度更快一些。
Q:Transformer 的實際實驗效果差距大嗎?
A:差距確實很大。Transformer 可能是未來的一個 benchmark,但是現在它還存在一些問題,雖然有自己的優點,但也有很大的提升空間。
Q:epoch 是不是越大越好?
A:一般不是,初期隨著 epoch 的增加會越來越好,但是後期會下滑或者波動很大。所以一般會選擇用 early stop 的方式。
>>>> 獲取完整PPT和影片實錄
關註PaperWeekly微信公眾號,回覆20180104獲取下載連結。
點選以下標題檢視往期實錄:
關於PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點選「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。