乾明 編譯整理

量子位 出品 | 公眾號 QbitAI

注意力(Attention)機制,是神經機器翻譯模型中非常重要的一環,直接影響了翻譯的準確度與否。

可以這麼說,沒有注意力機制,機器翻譯的水平只有60-70分。有了注意力機制,翻譯的水平就能夠達到80-90分了。

它是如何發揮作用的呢?很多人一解釋起來,就是鋪天蓋地的數學公式,讓人還沒來得及看,就直接懵逼了。

最近,有一篇文章用圖解的方式,完整地介紹了「注意力機制」的原理邏輯,並以谷歌神經翻譯為例,解釋了它的運作機制。

作者說,寫這篇文章的目的,是為了讓大家在不去看數學公式的情況下,掌握注意力的概念。他也會以人類譯者為例,將相關的概念形象化。

神經機器翻譯為何需要注意力機制?

神經機器翻譯方法誕生於2013年。那一年,牛津大學的研究團隊發表了一篇題為Recurrent Continuous Translation Models的論文,提出了一個用於機器翻譯的新模型。

這個新模型使用的是端到端的編碼器-解碼器結構。

在處理翻譯工作的時候,先用卷積神經網路(CNN),將原始文本編碼成連續的向量,然後使用循環神經網路(RNN)將連續向量轉換成目標語言。

但由於梯度爆炸/消失的存在,但使用這種方法很難獲取更長句子背後的信息,導致翻譯性能大幅下降。

在2014年,當時在谷歌工作的Ilya Sutskever等人提出了序列到序列(seq2seq)學習的方法,將RNN同時用於編碼器和解碼器。

也把RNN的典型變體長短時記憶(LSTM)引入到了神經機器翻譯中。這樣以來,梯度爆炸/消失就得到了控制,長距離重新排序的問題得到了緩解。

正所謂是摁下葫蘆起來瓢,新的問題又出現了。seq2seq方法中,解碼器從編碼器中接收的唯一信息, 是最後編碼器的隱藏狀態,這是一個向量表徵,是輸入序列文本的數字概要。

具體如下圖中的兩個紅色節點所示。

對於像下圖這樣很長的輸入文本來說,我們特別希望這個隱藏狀態,能夠充分概括輸入序列,解碼器就能夠根據這一個向量表徵來很好的完成轉換了。

但這很難,災難性的遺忘出現了。比如上面說的這兩個段落的字,在看到這的時候,你還能記得多少?能把它們翻譯成英語嗎?

除此之外,還有一個問題。在基於RNN的模型中,不管原始文本的句子有多長,都會被壓縮成一個固定長度的向量。

在解碼的時候,會有各種麻煩事,也沒辦法確定準確的信息。特別是句子很長的時候,更麻煩。

怎麼辦?「注意力機制」登場

2014年,DeepMind團隊發表Recurrent Models of Visual Attention,提出了注意力機制,並將其用於圖像分類的任務中。

與CNN相比,使用注意力機制的RNN取得了非常好的效果,直接帶起了一波研究注意力機制的熱潮。

很快,注意力就出現在了神經機器翻譯中。

在ICLR 2015上,蒙特利爾大學的Yoshua Bengio團隊發表了一篇論文,在神經機器翻譯中引入了注意力機制。(這篇論文在2014年9月,就已經提交到了arXiv上)

注意力,是編碼器和解碼器之間的介面。有了它,解碼器接收到的,就不僅僅是一個統一的向量表徵了,還有來自編碼器每個時間步的向量表徵,比如下圖中的綠色節點。

通過注意力機制,模型就能夠有選擇地關注輸入序列中有用的部分,從而在解碼器和編碼器之間對齊。

之後,神經機器翻譯所面臨的問題,基本上也都有了解決方案。

2016年,谷歌推出了首個基於神經機器翻譯的翻譯系統。

現在,神經機器翻譯已經成為了主流翻譯工具的核心方法。

在這段發展歷程中,RNN和LSTM,已經有了大量的介紹。注意力機制到底是怎麼運作的呢?它到底有何魔力?

接下來請你收看——

圖解注意力運作機制

注意力一共分類兩種。一種是全局注意力,使用所有編碼器隱藏狀態。另一種是局部注意力,使用的是編碼器隱藏狀態的子集。在這篇文章中,提到的注意力,都是全局注意力。

在開始之前,需要看換一下僅基於seq2seq方法的模型是如何翻譯的。

以一個將文本從德語翻譯成英語的翻譯員為例。

使用「seq2seq」方法的話,他會從頭開始逐字逐句閱讀德語文本,然後逐字逐句將文本翻譯成英語。如果句子特別長的話,他在翻譯的時候,可能就已經忘了之前文本上的內容了。

如果使用seq2seq+注意力的方法,他在逐字逐句閱讀德語文本的時候,會寫下關鍵詞。然後,利用這些關鍵詞,將文本翻譯成英語。

在模型中,注意力會為每個單詞打一個分,將焦點放在不同的單詞上。然後,基於softmax得分,使用編碼器隱藏狀態的加權和,來聚合編碼器隱藏狀態,以獲得語境向量。

注意力層的實現可以分為6個步驟。

第一步:準備隱藏狀態

首先,準備第一個解碼器的隱藏狀態(紅色)和所有可用的編碼器的隱藏狀態(綠色)。在我們的例子中,有4個編碼器的隱藏狀態和當前解碼器的隱藏狀態。

第二步:獲取每個編碼器隱藏狀態的分數

通過評分函數來獲取每個編碼器隱藏狀態的分數(標量)。在這個例子中,評分函數是解碼器和編碼器隱藏狀態之間的點積。

decoder_hidden = [10, 5, 10]
encoder_hidden score
---------------------
[0, 1, 1] 15 (= 10×0 + 5×1 + 10×1, the dot product)
[5, 0, 1] 60
[1, 1, 0] 15
[0, 5, 1] 35

在上面的例子中,編碼器隱藏狀態[5,0,1]的注意力分數為60,很高。這意味著要翻譯的下一個詞將受到這個編碼器隱藏狀態的嚴重影響。

第三步:通過softmax層運行所有得分

我們將得分放到softmax函數層,使softmax得分(標量)之和為1。這些得分代表注意力的分佈。

encoder_hidden score score^
-----------------------------
[0, 1, 1] 15 0
[5, 0, 1] 60 1
[1, 1, 0] 15 0
[0, 5, 1] 35 0

需要注意的是,基於softmaxed得分的score^。注意力僅按預期分佈在[5,0,1]上。實際上,這些數字不是二進位數,而是0到1之間的浮點數。

第四步:將每個編碼器的隱藏狀態乘以其softmax得分

將每個編碼器的隱藏狀態與其softmaxed得分(標量)相乘,就能獲得對齊向量。這就是發生對齊機制的地方。

encoder_hidden score score^ alignment
----------------------------------------
[0, 1, 1] 15 0 [0, 0, 0]
[5, 0, 1] 60 1 [5, 0, 1]
[1, 1, 0] 15 0 [0, 0, 0]
[0, 5, 1] 35 0 [0, 0, 0]

由於注意力分數很低,除了[5,0,1]之外的所有編碼器隱藏狀態的對齊都減少到了0。這意味著,我們可以預期,第一個被翻譯的單詞,應該與帶有[5,0,1]嵌入的輸入單詞匹配起來。

第五步:將對齊向量聚合起來

將對齊向量聚合起來,得到語境向量。

encoder_hidden score score^ alignment
----------------------------------------
[0, 1, 1] 15 0 [0, 0, 0]
[5, 0, 1] 60 1 [5, 0, 1]
[1, 1, 0] 15 0 [0, 0, 0]
[0, 5, 1] 35 0 [0, 0, 0]
context = [0+5+0+0, 0+0+0+0, 0+1+0+0] = [5, 0, 1]

第六步:將語境向量輸入到解碼器中

這一步怎麼做,取決於模型的架構設計。在接下來的示例中,會看到在模型架構中,解碼器如何利用語境向量。

整體的運行機制,如下圖所示:

那麼,注意力機制是如何發揮作用的呢?

反向傳播。反向傳播將盡一切努力確保輸出接近實際情況。這是通過改變RNN中的權重和評分函數(如果有的話)來完成的。

這些權重將影響編碼器的隱藏狀態和解碼器的隱藏狀態,進而影響注意力得分。

谷歌神經機器翻譯如何應用注意力機制?

在介紹谷歌神經機器翻譯模型之前,還需要補補課,看一下另外兩個模型。

Bengio團隊的研究

這是一個具有雙向編碼器的seq2seq+注意力模型,以下是模型架構的注意事項:

1、編碼器是一個雙向(正向+反向)門控循環單元(BiGRU)。解碼器是一個GRU,它的初始隱藏狀態,是從反向編碼器GRU的最後隱藏狀態修改得來的向量。

2、注意力層中的評分函數使用的是additive/concat。

3、到下一個解碼器時間步的輸入是來自前一個解碼器時間步(粉紅色)的輸出和來自當前時間步(深綠色)語境向量之間的串聯。

這個模型架構,在WMT』14英語-法語數據集上的BLEU分數是26.75。

(論文鏈接在文末)

相當於在將德語文本翻譯成英語的時候,用了兩個翻譯員。

翻譯員A,在逐字逐句閱讀德語文本的時候,會寫下關鍵詞。翻譯員B,在倒著逐字逐句閱讀德語文本的時候,寫下關鍵詞。

這兩個翻譯員,會定期討論他們在討論之前閱讀的每一個單詞。

讀完德語文本之後,翻譯員B會根據他們兩個之間的討論,以及選擇的關鍵詞,將文本翻譯成英語。

在這裡,翻譯員A,是正向RNN,翻譯員B,是反向RNN。

斯坦福大學團隊的研究

與Bengio等人的模型相比,斯坦福大學團隊提出的模型架構,更具有概括性,也更加簡單。要點如下:

1、編碼器是一個雙層的LSTM網路。解碼器也具有相同的架構,它初始隱藏狀態是最後的編碼器隱藏狀態。

2、他們模型的評分函數有四種,分別是:additive/concat、dot product、location-based和』general』。

3、當前解碼器時間步的輸出與來自當前時間步的語境向量之間的串聯,會輸入到前饋神經網路中,來得出當前解碼器時間步的最終輸出(粉紅色)。

(論文鏈接在文末)

這個模型架構,在WMT』15英語-德語數據集上的BLEU分數是25.9。

簡單來說,這是一個採用雙層堆疊編碼器的seq2seq+注意力模型。

在將德語文本翻譯到英語時,翻譯員A一樣在閱讀德語文本的時候,寫下關鍵詞。在這裡,翻譯員B比翻譯員A要更專業,他也會閱讀同樣的德語文本,並寫下關鍵詞。

主要注意的是,翻譯員A閱讀的每個單詞,都要向翻譯員B報告。完成閱讀後,他們會根據他們選擇的關鍵詞,將文本翻譯成英語。

谷歌的神經機器翻譯模型

谷歌神經機器翻譯,集兩者之大成,但受Bengio等人的模型影響多一點。要點是:

1、編碼器由8個LSTM組成,其中第一個是雙向的(輸出是連接的),連續層的輸出之間有殘差連接(從第3層開始)。解碼器是8個單向LSTM的獨立堆棧。

2、評分函數使用的是additive/concat。

3、解碼器下一個時間步的輸入是前一個時間步(粉紅色)的輸出與當前時間步(深綠色)的語境向量之間的串聯。

這個模型架構,在WMT』14英語-法語數據集上的BLEU分數是38.95。在WMT』14英語-德語數據集上的BLEU分數是24.17。

(論文鏈接在文末)

這是一個具有8個堆疊編碼器的seq2seq(+雙向+殘差連接)+注意力的模型。

相當於在將德語文本翻譯成英語的時候,用了八個翻譯員,分別是翻譯員A、B、C…H。每一位翻譯員都閱讀相同的德語文本。

對於文本中的每一個單詞,翻譯員A都會給翻譯員B分享他的發現,翻譯員B會改進這些發現,然後與翻譯員C分享,一直重複這個過程,直到翻譯員H結束。

此外,在閱讀德語文本的時候,翻譯員H會基於他知道的和收到的信息寫下關鍵詞。

每個人都讀完了這個英語文本後,翻譯員A就會被告知翻譯第一個單詞。

首先,他試圖回憶文本內容,給出翻譯,然後與翻譯員B分享他的答案,翻譯員B改進答案並與翻譯員C分享,一直重複這個過程,直到翻譯員H結束。

然後,翻譯員H會根據他寫下的關鍵詞給出第一個詞的翻譯。然後重複這個過程,直到翻譯結束。

相關資料推薦

Yoshua Bengio等人研究的論文

Neural Machine Translation by Jointly Learning to Align and Translate

arxiv.org/abs/1409.0473

斯坦福大學團隊的論文

Effective Approaches to Attention-based Neural Machine Translation

arxiv.org/abs/1508.0402

谷歌神經機器翻譯模型的論文

Google』s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

arxiv.org/abs/1609.0814

其他相關論文推薦:

Recurrent Models of Visual Attention

https://papers.nips.cc/paper/5542-recurrent-models-of-visual-attention.pdf?

papers.nips.cc

Recurrent Continuous Translation Models

aclweb.org/anthology/D1

Attention Is All You Need

arxiv.org/abs/1706.0376

Sequence to Sequence Learning with Neural Networks

arxiv.org/abs/1409.3215

教程資源:

TensorFlow』s seq2seq Tutorial with Attention (Tutorial on seq2seq+attention)

github.com/tensorflow/n

入門博客文章:

Lilian Weng』s Blog on Attention (Great start to attention)

lilianweng.github.io/li

Jay Alammar』s Blog on Seq2Seq with Attention (Great illustrations and worked example on seq2seq+attention)

jalammar.github.io/visu

寫這篇文章的,是一位名叫Raimi Bin Karim新加坡人,現在是AI Singapore中的一名AI學徒。AI Singapore,是一家為新加坡培育人工智慧產業與人才的機構。

原文鏈接:

towardsdatascience.com/

量子位 · QbitAI

?? ? 追蹤AI技術和產品新動態

戳右上角「+關注」獲取最新資訊↗↗

如果喜歡,請分享or點贊吧~比心?


推薦閱讀:
相關文章