近年來,神經(jīng)機器翻譯的突飛猛進讓越來越多的人類翻譯感到壓力山大,瑟瑟發(fā)抖,那么如此強大的機器翻譯架構(gòu)內(nèi)部的運行機制究竟是怎樣的?本文用一系列動圖帶你看個明白。
過去幾十年來,統(tǒng)計機器翻譯一直是占據(jù)主導(dǎo)地位的機器翻譯模型[9],直到神經(jīng)機器翻譯(NMT)誕生。神經(jīng)機器翻譯(NMT)是近幾年來新興的機器翻譯模式,該模式試圖構(gòu)建和訓(xùn)練能夠讀取輸入文本,并輸出翻譯結(jié)果的單個大型神經(jīng)網(wǎng)絡(luò)。
NMT的最初來自Kalchbrenner和Blunsom(2013)等人的提議。今天更為人所知的框架是從Sutskever等人提出的seq2seq框架。本文就將重點介紹seq2seq框架以及如何構(gòu)建基于seq2seq框架的注意力機制。
總體來說,注意力層的部署可以分為4步(其實是5步)
第0步:準備隱藏狀態(tài)。
首先準備第一個解碼器隱藏狀態(tài)(紅色)和所有可用的編碼器隱藏狀態(tài)(綠色)。在我們的例子中有4個編碼器隱藏狀態(tài)和當(dāng)前解碼器隱藏狀態(tài)。
步驟1:獲取每個編碼器隱藏狀態(tài)的分數(shù)
通過評分函數(shù)(也稱為比對評分函數(shù)或比對模型)獲得評分(標量)。在該示例中,得分函數(shù)是解碼器和編碼器隱藏狀態(tài)之間的點積。
步驟2:通過softmax圖層運行所有分數(shù)。
我們將得分放到softmax函數(shù)層,使softmax處理后的得分(標量)之和為1。這些得分代表注意力的分布。
步驟3:將每個編碼器隱藏狀態(tài)乘以其softmax得分。
通過將每個編碼器隱藏狀態(tài)與其對應(yīng)的softmax得分(標量)相乘,獲得對齊向量或注釋向量。這就是對齊的機制。
步驟4:總結(jié)對齊向量。
對齊向量的總結(jié)可以生成上下文向量。上下文向量反映的是前一步的對齊向量的聚合信息。
步驟5:將上下文向量送到解碼器。
具體傳送方式取決于翻譯系統(tǒng)的架構(gòu)設(shè)計。我們將在下文示例中看到不同的架構(gòu)如何利用解碼器的上下文向量。
下面來看看幾種seq2seq模型的運行機制,為便于理解,我們采用比較直觀的描述(對于每種模型,均以德-英翻譯為例)。
seq2seq
翻譯會從頭至尾把德語文本閱讀一遍,讀完開始逐詞翻譯成英語,如果句子過長,他可能會忘了文章開始時都讀過哪些內(nèi)容。
一個簡單的seq2seq模型就是這樣了,至于面向注意力層的逐級計算,是下面要講的seq2seq+注意力模型,下面是這個模型的直觀表述。
seq2seq+ 注意力
翻譯一遍閱讀德文文本,一邊從頭至尾地記錄關(guān)鍵詞,然后開始翻譯成英語。每翻譯一個德語詞匯,都要用一次記下來的關(guān)鍵詞。
該機制下會為每個單詞分配一個得分,根據(jù)分數(shù)高低投入不同的注意力。然后根據(jù)Softmax函數(shù)處理過的分數(shù),使用編碼器隱藏狀態(tài)的加權(quán)和來聚合編碼器隱藏狀態(tài),獲得上下文向量。注意力層的實現(xiàn)可以分為4個步驟。
注意力機制的運行究竟是怎樣的?
答案是:反向傳播,沒想到吧。反向傳播將盡一切努力確保產(chǎn)出成果接近實際情況。通過改變RNN中的權(quán)重和得分函數(shù)(如果有的話)來實現(xiàn)這一目標。這些權(quán)重將影響編碼器隱藏狀態(tài)和解碼器隱藏狀態(tài),進而影響注意力得分。
帶雙向編碼器的seq2seq+注意力
這一機制相當(dāng)于有兩名翻譯。翻譯A一邊閱讀德語文本,一邊記錄關(guān)鍵詞。翻譯B(比A更高級的翻譯,可以從后往前倒著閱讀然后進行翻譯)也在逐詞閱讀同樣的德語文本,同時記下關(guān)鍵詞。
這兩個翻譯會定期討論到目前為止閱讀的每一個詞。一旦閱讀完畢,翻譯B會負責(zé)根據(jù)討論結(jié)果和選擇的綜合關(guān)鍵詞,將德語的句子逐字翻譯成英語。
翻譯A就是前向RNN,翻譯B就是后向RNN。
采用雙層堆疊編碼器的seq2seq+注意力
翻譯A一邊閱讀德語文本,一邊記錄關(guān)鍵詞。翻譯B(比A更高級的翻譯,可以從后往前倒著閱讀然后進行翻譯)也在逐詞閱讀同樣的德語文本,同時記下關(guān)鍵詞。注意,初級翻譯A必須把閱讀到的每個單詞向翻譯B報告。閱讀完成后,兩位翻譯都會根據(jù)他們所選擇的綜合關(guān)鍵詞,逐字逐句地將句子翻譯成英語。
谷歌的神經(jīng)機器翻譯:帶8個堆疊編碼器的seq2seq(+雙向+剩余連接)+注意力
相當(dāng)于翻譯A、B、...到H一共8位翻譯,從下到上排成一列。每位翻譯都閱讀相同的德語文本。每閱讀一個單詞,翻譯A會與翻譯B分享發(fā)現(xiàn),翻譯B對發(fā)現(xiàn)內(nèi)容進行改進,并與翻譯C分享,以此類推重復(fù)這個過程,直到翻譯H為止。此外,在閱讀德語文本時,翻譯H會根據(jù)自己的知識和收到的信息記錄下相關(guān)的關(guān)鍵詞。
在每個翻譯都閱讀過英文文本之后,命令翻譯A開始翻譯第一個單詞。首先,翻譯A試圖回憶起,然后他與譯者B分享他的答案,譯者B改進答案并與譯者C分享,以此類推重復(fù)這一過程,直到翻譯H。然后,翻譯H根據(jù)記錄的關(guān)鍵詞寫出第一個翻譯。重復(fù)這個過程,直到翻譯完成為止。