做者:zhbzz2007 出處:http://www.cnblogs.com/zhbzz2007 歡迎轉載,也請保留這段聲明。謝謝!git
本文主要是翻譯及整理MSRA 劉鐵巖團隊在NIPS 2016 會議上發表的論文「Dual Learning for Machine Translation」。對於論文中的算法思想可能尚未理解透徹,還請諸位大牛多多指教。github
最早進的機器翻譯系統,包括基於短語的統計機器翻譯方法、最近出現的基於神經網絡的翻譯方法,嚴重依賴於對齊的平行訓練語料。然而,實際收集這些平行語料數據的代價很是大,所以語料的規模也每每有限,這將會限制相關的研究和應用。算法
咱們知道在互聯網中存在海量的單語數據,很天然的想到,可否利用它們去提高機器翻譯系統的效果呢?實際上,基於這個想法,研究人員已經提出了許多不一樣的方法,這裏能夠粗略的分爲兩類。第一類,目標語言的單語語料被用於訓練語言模型,而後集成到翻譯模型(從平行雙語語料中訓練出)中,最終提高翻譯質量。第二類,經過使用翻譯模型(從對齊的平行語料中訓練)從單語數據中生成僞雙語句對,而後在後續的訓練過程當中,這些僞雙語句對被用於擴充訓練數據。儘管上述方法可以在必定程度上提高翻譯系統的效果,可是它們依然存在必定的侷限性。第一類的方法只使用了單語數據來訓練語言模型,並無解決平行訓練數據不足這個問題。儘管第二類方法能夠擴充平行訓練數據,可是並不能保證僞雙語句對的質量。網絡
在這篇文章中,劉鐵巖團隊提出了一種Dual-Learning(對偶學習)機制,能夠有效地利用單語數據(源語言與目標語言)。經過使用他們提出的機制,單語數據與平行雙語數據扮演着類似的角色,在訓練過程當中,能夠顯著下降對平行雙語數據的要求。對偶學習機制應用在機器翻譯中,能夠想象成兩個agent(機器)在玩通訊遊戲,以下圖所示,框架
從上面的描述中,很容易發現,儘管兩個機器可能沒有對齊的雙語語料,它們依然能夠得到兩個翻譯模型的翻譯質量方面的反饋,而後基於反饋持續提高模型的效果。這個遊戲能夠玩任意輪,兩個翻譯模型經過強化過程(例如,經過策略梯度方法)獲得持續改善。經過這種方式,他們開發了一個通用的學習框架,經過對偶學習遊戲,這個框架可用於訓練機器翻譯模型。機器學習
對偶學習機制很一些不一樣的特色。首先,咱們經過強化學習從未標註數據中訓練翻譯模型。這個工做顯著下降了對對齊雙語數據的要求,它打開了一個新的窗口,能夠從頭開始(甚至不使用任何平行數據)學習一個翻譯模型。實驗結果顯示,這個方法頗有前景。函數
其次,顯示出深度強化學習(DRL)在複雜真實世界中的應用,而不只僅是在遊戲這個領域。在最近幾年,深度強化學習吸引了不少科研人員的注意力。可是,大部分應用仍是集中在視頻或者棋盤遊戲,將深度強化學習應用到更加複雜的應用(規則沒有事先定義好,而且沒有明確的獎勵信號),依然存在很大挑戰。對偶學習提供了一種頗有前景的方式,能夠在真實世界應用中,例如,機器翻譯,抽取出強化學習須要的獎勵信號。工具
對偶學習框架能夠應用到基於短語的統計機器翻譯和神經機器翻譯中。在這篇文章中,咱們主要聚焦在後者--神經機器翻譯,由於它做爲一個端到端的系統,很簡單,不須要人工設計精巧的工程。學習
神經機器翻譯系統一般是經過基於編碼-解碼框架的循環神經網絡(RNN)來實現。這個框架從源語言句子 \(x = {x1,x2,...,x_{Tx}}\) 到目標語言 \(y = {y1,y2,...,y_{Ty}}\) 學習了一個機率映射 P(y|x),其中,xi 和 yt 分別是句子x的第i個詞和句子y的第t個詞。測試
更具體一些,神經機器翻譯的編碼器讀取源語言句子 x ,而後基於RNN生成 \(T_{x}\) 個狀態,
\(h_{i} = f(h_{i-1},x_{i})\ \ \ \ \ \ (1)\)
\(h_{i}\) 是時刻t的隱狀態,函數f是循環單元,例如Long Short-Term Memory(LSTM)單元或者Grated Recurrent Unit(GRU)。而後,神經網絡的解碼器計算每一個目標詞 \(y_{t}\) 的條件機率,對於 \(y_{t}\) ,已知它先前的詞 \(y_{<t}\) 和源語言句子,例如, 基於機率鏈式法則, 使用 \(P(y_{t}|y_{<t},x)\) 來肯定 \(P(y|x)\) 。\(P(y_{t}|y_{<t},x)\) 以下列所示,
\(P(y_{t}|y_{<t},x) \varpropto exp(y_{t};r_{t},c_{t})\ \ \ \ \ \ (2)\)
\(r_{t}=g(r_{t-1},y_{t-1},c_{t})\ \ \ \ \ \ (3)\)
\(c_{t}=q(r_{t-1},h_{1},...,h_{T_{x}})\ \ \ \ \ \ (4)\)
其中, \(r_{t}\) 是解碼器RNN在時刻t的隱狀態,類似地,也是經過LSTM或者GRU進行計算; \(c_{t}\) 根據編碼器的隱狀態定義了生成詞 \(y_{t}\) 的上下文信息。 \(c_{t}\) 能夠是句子 x 的全局信息,例如 \(c_{1}=c_{2}=...=c_{T_{y}}=h_{T_{x}}\) , 或者是局部信息,局部信息經過注意力機制實現,例如 \(c_{t}=\sum_{i=1}^{T_{x}}\alpha_{i}h_{i},\alpha_{i}=\frac{exp\{a(h_{i},r_{t-1})\}}{\sum_{j}exp\{a(h_{j},r_{t-1})\}}\) , 其中, \(a(.,.)\) 是一個前饋神經網絡。
咱們將神經網絡中待優化的全部參數定義爲 \(\Theta\) ,將用於訓練的源語言-目標語言數據集定義爲 D ,而後要學習的目標函數就是尋找最優的參數 \(\Theta^{*}\) 。
\(\Theta^{*}=argmax_{\Theta}\sum_{(x,y)\in{D}}\sum_{t=1}^{T_{y}}logP(y_{t}|y_{<t},x;\Theta)\ \ \ \ \ \ (5)\)
在這章中,咱們將會介紹對偶學習機制在神經機器翻譯中的應用。注意到翻譯任務常常是兩個方向,咱們首先設計一個有兩個機器人的遊戲,包含前向翻譯步驟和反向翻譯步驟,即便只使用單語數據,也能夠給兩個對偶翻譯模型提供質量反饋。而後咱們提出了對偶學習算法,稱之爲對偶神經機器翻譯(簡稱dual-NMT),在遊戲中,基於反饋回來的質量,提高兩個翻譯模型。
有兩個單語語料 \(D_{A}\) 和 \(D_{B}\) ,分別包含語言A和語言B的句子。須要注意的是,這兩個語料並不須要互相對齊,甚至互相之間一點關係都沒有。假設,咱們右兩個弱翻譯模型,能夠將句子從語言A翻譯到語言B,反之亦然。咱們的目標是使用單語語料而非平行語料來提升兩個模型的準確率。從任何一個單語數據的句子開始,咱們首先將其翻譯爲另外一種語言,而後再將其翻譯回原始語言。經過評估這兩個翻譯結果,咱們將會了解到兩個翻譯模型的質量,並根據此來提高它們。這個過程能夠迭代不少輪直到翻譯模型收斂。
假設語料 \(D_{A}\) 有 \(N_{A}\) 個句子, \(D_{B}\) 有 \(N_{B}\) 個句子。定義 \(P(.|s;\Theta_{AB})\) 和 \(P(.|s;\Theta_{BA})\) 爲兩個神經翻譯模型,這裏 \(\Theta_{AB}\) 和 \(\Theta_{BA}\) 是它們的參數(正如第2章中所描述)。
假設咱們已經有兩個訓練好的語言模型 \(LM_{A}(.)\) 和 \(LM_{B}(.)\) (很容易得到,由於它們只須要單語數據),每一個語言模型獲取一個句子做爲輸入,而後輸出一個實數值,用於表示這個句子是它所屬語言天然句子的自信度。這裏,語言模型既可使用其餘資源,也能夠僅僅使用單語數據 \(D_{A}\) 和 \(D_{B}\)。
若是遊戲是從 \(D_{A}\) 中的句子 s 開始 ,定義 \(s_{mid}\) 做爲中間翻譯輸出。這個中間步驟有一箇中間的獎勵 \(r_{1} = LM_{B}(s_{mid})\) , 表示輸出句子在語言 B 中的天然程度。已知中間翻譯輸出 \(s_{mid}\) ,咱們使用從 \(s_{mid}\) 還原過來的 s 的對數機率做爲通訊的獎勵(咱們將會交替使用重構和通訊)。數學上定義, 獎勵 \(r_{2} = log P(s|s_{mid};\Theta_{BA})\) 。
咱們簡單採用語言模型獎勵和通訊獎勵的線性組合做爲總體獎勵,例如, \(r = \alpha r_{1} + (1-\alpha) r_{2}\) , 這裏 \(\alpha\) 是超參數。因爲遊戲的獎勵能夠視爲s , \(s_{mid}\) 以及翻譯模型 \(\Theta_{AB}\) 和 \(\Theta_{BA}\) 的函數,所以,咱們能夠經過策略梯度方法來優化翻譯模型中的參數,從而達到獎勵最大化,這個方法在強化學習中應用很普遍。
咱們基於翻譯模型 \(P(.|s;\Theta_{BA})\) 採樣出 \(s_{mid}\) 。而後咱們計算指望獎勵 \(E[r]\) 關於參數 \(\Theta_{AB}\) 和 \(\Theta_{BA}\) 的梯度。根據策略梯度定理,很容易獲得,
\(\bigtriangledown_{\Theta_{BA}}E[r]=E[(1-\alpha)\bigtriangledown_{\Theta_{BA}}log P(s|s_{mid;\Theta_{BA}})]\ \ \ \ \ (6)\)
\(\bigtriangledown_{\Theta_{AB}}E[r]=E[r\bigtriangledown_{\Theta_{AB}}log P(s_{mid}|s;\Theta_{AB})]\ \ \ \ \ (7)\)
這裏指望替換掉 \(s_{mid}\) 。
基於公式(6)和公式(7),咱們能夠採用任何的採樣方法來估計指望的梯度。考慮到隨機採樣將會帶來很是大的方差,而且會致使機器翻譯中出現不合理的結果,針對梯度計算,咱們使用束搜索來獲取更加有意義的結果(更加合理的中間翻譯輸出),例如,咱們貪婪地產生top-K個高几率的中間翻譯輸出,而後使用束搜索的平均值來近似真實的梯度。若是遊戲是在 \(D_{B}\) 中的句子 s 開始,梯度的計算就是一個對稱,在此,咱們忽略掉它。
遊戲能夠重複不少輪。在每一輪中,一個句子從 \(D_{A}\) 中採樣,另外一個句子是從 \(D_{B}\) 中採樣,咱們基於遊戲(分別從兩個句子開始)來更新這兩個翻譯模型。具體的細節在算法1中給出。
咱們作了一系列實驗來測試提出的對偶學習機制在機器翻譯上的效果。
咱們使用兩個基準系統和對偶機器翻譯方法進行對比,1)標準神經機器翻譯(簡稱NMT),2)最近提出的基於NMT的方法,經過單語語料生成僞雙語句對用於輔助訓練(簡稱pseudo-NMT)。咱們的全部實驗都是使用Theano實現的輔助NMT系統來完成。
咱們評估這些算法在一對翻譯任務上的效果,包括英語翻譯爲法語(En->Fr)和法語到英語(Fr->En)。具體地,咱們使用相同的雙語語料,語料來源於WMT14,共有1200萬句對。而後將newstest2012和newstest2013做爲開發數據集,newstest2014做爲測試數據集。WMT14 提供的「News Crawl:articles from 2012」做爲單語數據。
咱們使用GRU網絡並遵循論文1(D. Bahdanau, K. Cho, and Y. Bengio. Neural machine translation by jointly learning to align
and translate. ICLR, 2015.)中的實踐來設置實驗參數。對於每種語言,咱們用平行語料中最頻繁的3萬個詞構造詞彙表,將包含至少一個OOV單詞的句子刪除。每一個詞被映射到620維的連續向量空間,循環單元的維度是1000。咱們將訓練集中超過50個詞的句子刪除。batch的大小爲80,每20個batch被預取,並按照句子長度排序。
對於基準的NMT模型,咱們徹底按照論文1提出的設置。對於基準的pseudo-NMT模型,咱們使用訓練好的NMT模型從單語數據中生成僞雙語句對,刪除超過50個詞的句子,將生成的數據與原始平行訓練數據融合在一塊兒,而後訓練這個模型,並用於測試。每一個基準系統經過AdaDelta算法在K40m GPU進行訓練,直到它們的效果在開發集上再也不提高爲止。
對偶神經機器翻譯(簡稱dual-NMT)模型須要每種語言的語言模型。咱們對於每種語言,使用相應的單語語料,訓練了基於RNN的語言模型。實驗中,語言模型就固定了,而後收到信息的對數似然做爲通訊信道(例如,翻譯模型)的獎勵。
在玩遊戲時,咱們使用暖啓動翻譯模型(已經從雙語語料中訓練出來的)來初始化信道,而後觀察dual-NMT模型可否有效提高模型翻譯準確率。在咱們的實驗中,爲了從雙語數據訓練的初始模型平滑過渡到徹底從單語數據訓練的模型,咱們採用瞭如下軟着陸策略。在每次對偶學習過程的開始,對於每一個mini batch,咱們使用單語數據一半的句子和雙語數據(從數據中採樣出來的用於訓練初始模型)中一半的句子。目標就是基於單語數據最大化獎勵(在第3部分定義的)的加權之和以及基於雙語數據的似然度(在第2部分定義)。隨着訓練過程的持續,咱們逐漸在mini batch中增長單語數據的比例,直到徹底不使用雙語數據。這裏,咱們在實驗中測試了兩個測試:
對於每一個設置,咱們都是訓練對偶機器翻譯算法一週。咱們在中間翻譯過程當中設置束搜索大小爲2。實驗中的全部超參數經過交叉驗證來設置。咱們使用BLEU做爲評估標準,由moses提供的 腳本工具 進行計算。遵循常規的實踐,在測試階段,如同先前許多的工做,咱們對於全部的算法均使用大小爲12的束搜索。
咱們在這部分分析實驗結果。回憶以前提到的兩個基線系統,英語->法語和法語->英語是分別訓練的,可是,dual-NMT系統一塊兒訓練這兩個基線系統。咱們在表1中總結了全部系統的效果,在源語言句子的各個長度上的BLEU分值曲線在圖1中畫出。
從表1中,咱們能夠看到dual-NMT系統在全部的設置中均超過了基線系統。在從英語翻譯爲法語的任務上,dual-NMT系統分別在第一種/第二種暖啓動方式超過基線NMT系統大約2.1/3.4個百分點,超過pseudo-NMT大約1.7/3.1個百分點。在從法語翻譯爲英語的任務上,提高更加顯著,dual-NMT系統在第一個/第二個暖啓動方式上分別超過NMT大約2.3/5.2個百分點,超過pseudo-NMT大約2.1/4.3個百分點。使人驚訝的是,在只有10%的雙語數據上法語翻譯爲英語的任務中,相比使用100%的常規NMT系統,dual-NMT取得了可比的翻譯正確率。這些結果顯示了dual-NMT算法的有效性。另外,咱們也觀察到以下結果:
咱們在源語言句子的各個長度上的BLEU分值曲線在圖1中畫出。從這個圖中,咱們能夠看出dual-NMT算法在全部的長度上超過了基準系統。
咱們對dual-NMT算法作了一些更深刻的研究,如表2所示。咱們研究了各個算法的重構後的效果:對於測試集的每一個句子,咱們將它翻譯到第4次並返回,而後使用BLEU分值來檢查返回的翻譯句子。咱們使用束搜索生成全部的翻譯結果。很容易地從表2中觀察到,dual-NMT的重構後的BLEU分數比NMT和pseudo-NMT更高。實際上,在從大規模平行數據上訓練的暖啓動模型上,dual-NMT超出NMT大約11.9/9.6,在10%數據上訓練的暖啓動模型上,dual-NMT超出NMT大約20.7/17.8。
咱們在表3上列出了幾個例句,用於對比使用對偶學習以前和以後模型的重構結果。很明顯,在對偶學習以後,重構的效果在兩個方向(英語->法語->英語,法語->英語->法語)上都有很大提高。
總之,全部的結果均顯示出對偶學習機器頗有前景而且能夠更好地利用單語數據。
在這部分,咱們討論對偶學習機制可能的擴展。
首先,儘管在咱們在這篇文章中集中在機器翻譯任務上,可是對偶學習的基本思想具備通用的應用性:只要兩個任務具有對偶形式,咱們就能夠利用強化學習算法將對偶機學習機制應用到從未標註數據中同時學習兩個任務。實際上,許多人工智能任務自然的是對偶形式,例如,語音識別和語音合成,圖像抓取和圖像合成,問題回答和問題生成,搜索(匹配查詢詞與文檔的類似度)和關鍵詞抽取(從文檔中抽取關鍵字/查詢詞)等等。對於更多的對偶任務,而不只僅是機器翻譯,設計和測試對偶學習算法將會頗有意義。
第二,儘管咱們將對偶學習集中在兩個任務上,可是咱們的技術並不只僅侷限在兩個任務。實際上,咱們主要的想法是造成一個閉環,目的是咱們經過比較原始輸入數據和最終輸出數據,可以提取出反饋信號。所以,若是有多於兩個相關的任務能夠造成閉環,咱們能夠應用這個技術來提高每一個任務在無標籤數據的效果。例如,對於英語句子 x ,咱們能夠先將它翻譯爲中文句子 y ,而後將 y 翻譯爲法語句子 z ,最終再將 z 翻譯爲英文句子 \(x^{'}\) 。句子 x 和 \(x^{'}\) 的類似度能夠表示閉環中三個翻譯模型的有效性,咱們基於閉環中的反饋信號能夠再次使用策略梯度方法來更新和提高這些模型。咱們更願意將這種通用的對偶學習命名爲閉環學習,而且在將來會測試它的有效性。
咱們計劃在後續探索以下的方向,第一,在實驗中,咱們使用了雙語數據用於暖啓動dual-NMT的訓練。更加激動的方向就是從頭學習,例如,直接從兩種語言的單語數據(可能須要詞彙詞典)開始學習。第二,dual-NMT是基於NMT系統的,咱們基本的想法也能夠用於基於短語的統計機器翻譯系統中,咱們將會探索這個方向。第三,咱們僅僅考慮一對語言,咱們將會進行擴展,使用單語數據,聯合訓練至少3種語言的翻譯模型。
在第5章中,提到了對偶學習能夠視爲一個閉環學習。閉環學習的概念來源於反饋控制系統。反饋控制系統,輸入信號通過控制器、執行器,獲得輸出信號,而後再將輸出信號採集回來,輸入信號減去採集回來的輸出信號,獲得偏差,根據偏差來調節控制器,使得輸出可以跟隨輸入信號。
對偶神經機器翻譯系統能夠視爲一個反饋控制系統,這裏以中文翻譯爲英文,再將英文翻譯爲中文爲例。
循環迭代,直到輸出信號可以跟隨輸入信號。
在控制系統的設計中,須要考慮三個指標:
分別將這三個指標對應到對偶機器翻譯系統中,
所以,咱們能夠發現,對偶機器翻譯系統是反饋控制系統的一個特例,對偶機器翻譯系統在設計時,同反饋控制系統同樣,須要考慮穩定性、準確性和快速性三個指標。很期待對偶學習以及其在機器翻譯領域的發展。
Di He, Yingce Xia, Tao Qin, Liwei Wang, Nenghai Yu, Tie-Yan Liu, and Wei-Ying Ma , Dual Learning for Machine Translation , NIPS 2016.