圖解神經機器翻譯中的注意力機制
選自TowardsDataScience
作者:Raimi Karim
參與:高璇、路
本文用幾張動圖形象地解釋了注意力機制,還分享了過去 5 年中出現的 4 個 NMT 架構,對文中出現的一些概念也進行了直觀解釋。
幾十年來,統計機器翻譯在翻譯模型中一直佔主導地位 [9],直到神經機器翻譯(NMT)出現。NMT 是一種新興的機器翻譯方法,它試圖構建和訓練單個大型神經網路,該網路讀取輸入文本並輸出譯文 [1]。
NMT 的最初開拓性研究來自 Kalchbrenner 和 Blunsom (2013)、Sutskever 等人 (2014) 和 Cho. 等人 (2014b) 這三篇論文,其中我們較為熟悉的框架是 Sutskever 等人論文提出的序列到序列(seq2seq)學習。本文基於 seq2seq 框架闡述如何構建注意力。
圖 0.1:seq2seq,輸入序列長度為 4。
在 seq2seq 中,初步設想是讓兩個循環神經網路(RNN)構成編碼器-解碼器架構:編碼器逐個讀取輸入詞,獲得固定維度的向量表示,然後另一個 RNN(解碼器)基於這些輸入逐個提取輸出詞。
圖 0.2:seq2seq,輸入序列長度為 64。
seq2seq 的問題在於,解碼器從編碼器接收的唯一信息是「最後一個編碼器隱藏狀態」(圖 0.1 中的兩個紅色節點),這是一種類似於輸入序列數字總結的向量表示。因此,對於較長的輸入文本(圖 0.2),我們如果仍希望解碼器僅使用這一個向量表示(希望它「充分概括輸入序列」)來輸出譯文,那這是不合理的。這可能導致災難性遺忘。這段話有 100 個單詞,你能立刻把它翻譯成另一種語言嗎?
如果我們做不到,那麼也不應該對解碼器這麼苛刻。如果向解碼器提供每個編碼器時間步的向量表示,而不是只有一個向量表示,是不是可以得到更優質的翻譯結果?
引入注意力機制。
圖 0.3:引入注意力機製作為編碼器和解碼器之間的介面。這裡,第一個解碼器時間步是在給出第一個翻譯單詞之前從編碼器接收的信息。
注意力是編碼器和解碼器之間的介面,它為解碼器提供每個編碼器隱藏狀態的信息(圖 0.3 中的紅色隱藏狀態除外)。通過此設置,模型能夠有選擇地側重輸入序列的有用部分,從而學習它們之間的 alignment。這有助於模型有效地處理輸入長句 [9]。
alignment 定義:alignment 意為將原始文本片段與其對應的譯文片段匹配。
圖 0.4:法語單詞「la」的 alignment 分布在輸入序列中,但主要分布在這四個詞上:『the』、『European』、『Economic』 和 『Area』。深紫色表示注意力得分更高。(圖源:https://distill.pub/2016/augmented-rnns/#attentional-interfaces)
[2] 中有兩種類型的注意力機制。使用所有編碼器隱藏狀態的注意力類型也稱為全局注意力。而局部注意力僅使用編碼器隱藏狀態的子集。本文主要介紹全局注意力,因此本文中對「注意力」的任何引用都是指「全局注意力」。
本文闡述注意力機制時應用了動畫形式,以便我們在不理解數學公式的情況下也能更好地理解它們。在案例中,作者將分享在過去 5 年中出現的 4 個 NMT 架構,也將對這篇文章中的一些概念做一些直觀解釋。
1. 注意力概述
在了解注意力之前,請先了解使用 seq2seq 模型的翻譯任務背後的原理。
seq2seq 原理:翻譯器從頭到尾讀取德語文本。讀取完成後,開始逐詞將文本譯成英文。如果句子非常長,它可能已經忘記了前文的內容。
這是一個簡單的 seq2seq 模型。下文即將介紹 seq2seq attention 模型的注意層計算步驟。以下是該模型的直觀原理。
seq2seq attention 原理:翻譯器從頭到尾讀取德語文本並記錄關鍵詞,之後將文本譯成英文。在翻譯每個德語單詞時,翻譯器會使用記錄的關鍵詞。
通過為每個單詞分配分值,注意力為不同單詞分配不同的注意力。然後利用 softmax 對編碼器隱藏狀態進行加權求和,得到上下文向量(context vector)。注意力層的實現可以分為 4 個步驟。
第 0 步:準備隱藏狀態。
首先準備第一個解碼器隱藏狀態(紅色)和所有可用的編碼器隱藏狀態(綠色)。示例中有 4 個編碼器隱藏狀態和當前解碼器隱藏狀態。
圖 1.0:為注意力做好準備。
第 1 步:獲取每個編碼器隱藏狀態的分數。
分數(標量)通過評分函數(也稱為 alignment 評分函數 [2] 或 alignment 模型 [1])。在該示例中,評分函數是解碼器和編碼器隱藏狀態之間的點積。
有關各種評分函數,請參閱附錄 A。
圖 1.1:獲得分數。
在上面的示例中,我們獲得了編碼器隱藏狀態 [5,0,1] 的高注意力分數 60。這意味著要翻譯的下一個詞將極大地受到此編碼器隱藏狀態的影響。
第 2 步:通過 softmax 層運行所有分數。
我們將得分放到 softmax 層,softmaxed 得分(標量)和為 1。這些 softmax 得分代表注意力分布 [3, 10]。
圖 1.2:獲得 softmax 得分。
請注意,基於 softmax 得分 score^,注意力的分布按照預期應在 [5, 0, 1] 上。實際上,這些數字不是二進位的,而是 0 到 1 之間的浮點數。
第 3 步:通過 softmax 得分將每個編碼器隱藏狀態相乘。
通過將每個編碼器隱藏狀態與其 softmax 得分(標量)相乘,獲得 alignment 向量 [2] 或標註向量 [1]。這正是 alignment 的發生機制。
圖 1.3:獲得 alignment 向量。
這裡,我們看到除了 [5, 0, 1] 之外的所有編碼器隱藏狀態的 alignment 由於注意力分數低而減少到 0。這意味著第一個翻譯的單詞應該與嵌入 [5, 0, 1] 的輸入單詞匹配。
第 4 步:對 alignment 向量求和。
將 alignment 向量相加,生成上下文向量 [1,2]。上下文向量是前一步 alignment 向量的集合信息。
圖 1.4:獲得上下文向量。
第 5 步:將上下文向量輸入解碼器
方式取決於架構設計。稍後將在 2a、2b 和 2c 節的示例中看到不同架構如何在解碼器中利用上下文向量。
圖 1.5:將上下文向量輸入解碼器。
至此,所有步驟結束。動畫示例如圖:
圖 1.6:注意力機制
注意力機制是如何運行的?
回答:反向傳播,沒錯,就是反向傳播!反向傳播將盡一切努力確保輸出與真值相同。這是通過改變 RNN 中的權重和評分函數(如果有的話)來實現的。這些權重將影響編碼器隱藏狀態和解碼器隱藏狀態,進而影響注意力得分。
2. 注意力示例
在上一節中我們已經了解了 seq2seq 和 seq2seq attention 架構。在接下來的小節中,我們將研究另外 3 個基於 seq2seq 的注意力 NMT 架構。為了完整起見,本文還附加了它們的 BLEU 值——一種評估生成句子到參考句子的評判標準。
2a. Bahdanau et.al(2015)[1]
這篇注意力實現的文章是注意力領域的開山之作。作者在《Neural Machine Translation by Learning to Jointly Align and Translate》這篇論文中使用了「align」一詞,表示在訓練模型時調整會直接影響得分的權重。以下是該架構的細節:
編碼器是雙向(前向 後向)門控循環單元(BiGRU)。解碼器是 GRU,其初始隱藏狀態是從反向編碼器 GRU 的最後隱藏狀態修正而來的向量(未在下圖中示出)。
注意力層中的評分函數是 additive/concat。
下一個解碼器步的輸入是前一個解碼器時間步(粉紅色)的輸出和當前時間步長(深綠色)的上下文向量間的級聯。
圖 2a:Bahdanau et.al. 的 NMT。編碼器是 BiGRU,解碼器是 GRU。
該架構在 WMT"14 英譯法數據集上獲得了 26.75 的 BLEU 值。
帶雙向編碼器的 seq2seq 注意力架構:
翻譯器 A 在讀取德語文本時記錄關鍵詞。翻譯器 B(擔任更高級角色,因為它能從後往前進行讀取)從後往前讀取相同的德語文本,同時記下關鍵詞。兩個翻譯器會定時「交流」它們讀取的每一個單詞。在讀完整篇德語文本後,翻譯器 B 負責根據「交流結果」和它們共同選擇的綜合關鍵詞,將德語句子逐詞譯成英文。
翻譯器 A 是前向 RNN,翻譯器 B 是後向 RNN。
2b. Luong et. al(2015)[2]
《Effective Approaches to Attention-based Neural Machine Translation》的作者簡化並推廣了 Bahdanau 的架構:
編碼器是兩層長短期記憶(LSTM)網路。解碼器也具有相同的架構,其初始隱藏狀態是最後的編碼器隱藏狀態。
他們實驗所用評分函數是 (i) additive/concat,(ii) dot product,(iii) location-based 以及 (iv) 『general』。
將當前解碼器時間步的輸出與當前時間步的上下文向量之間的級聯輸入到前饋神經網路中,得到當前解碼器時間步的最終輸出(粉紅色)。
圖 2b:Luong et.al. 的 NMT。編碼器與解碼器均為 2 層 LSTM。
在 WMT"15 英語-德語數據集中,該模型獲得了 25.9 的 BLEU 值。
具備 2 層堆疊編碼器的 seq2seq 注意力架構:
翻譯器 A 在讀取德語文本時記錄關鍵詞。同樣,翻譯器 B(比 A 更高級)也會讀取相同的德語文本,同時記下關鍵詞。低級翻譯器 A 讀取每個單詞時都要向翻譯器 B 報告。完成閱讀後,它們會根據共同選擇的綜合關鍵詞,將句子逐詞翻譯成英文。
2c. 谷歌的神經機器翻譯(GNMT)[9]
我們大多數人都或多或少使用過谷歌翻譯,所以必須談談谷歌在 2016 年實現的 GNMT。GNMT 是前兩個示例的組合(主要受到第一個示例 [1] 的啟發)。
編碼器由 8 個 LSTM 組成,其中第一個是雙向的(其輸出是級聯的),連續層(從第 3 層開始)的輸出之間存在殘差連接。解碼器是 8 個單向 LSTM 的獨立堆棧。
使用的評分函數是 additive / concat,和 [1] 一樣。
同樣,和 [1] 一樣,下一個解碼器步的輸入是前一個解碼器時間步(粉紅色)的輸出和當前時間步的上下文向量(深綠色)之間的級聯。
圖 2c:谷歌翻譯的 NMT。跳躍連接用彎曲箭頭表示。注意:LSTM 單元只顯示隱藏狀態和輸入,不顯示單元狀態輸入。
該模型在 WMT"14 英語-法語數據集上達到 38.95 的 BLEU 值,在 WMT"14 英語-德語數據集上達到 24.17 的 BLEU 值。
GNMT:帶 8 個堆疊編碼器( 雙向 殘差連接)的 seq2seq 注意力
8 個翻譯器從 A、B 到 H 從上到下依次排好。每個翻譯器都讀取相同的德語文本。針對每個單詞,翻譯器 A 與 B「分享」它們的發現,翻譯器 B 將其改進並與 C「分享」——重複這個過程,直到到達翻譯器 H。此外,在讀取德語文本時,翻譯器 H 會基於它的所知和收到的信息記錄下相關的關鍵詞。
每個翻譯器都讀取完德語文本後,翻譯器 A 就會開始翻譯第一個單詞。首先,它回溯原記憶,然後與 B 共享答案,B 改進答案並與 C 共享——重複這一過程,直到到達翻譯器 H。翻譯器 H 根據他記錄的關鍵詞和得到的答案寫出第一個翻譯詞。重複此操作,直到完成全部翻譯。
3. 總結
本文介紹了以下架構:
seq2seq
seq2seq 注意力
帶雙向編碼器的 seq2seq 注意力
帶兩層堆疊編碼器的 seq2seq 注意力
GNMT:帶 8 個堆疊編碼器( 雙向 殘差連接)的 seq2seq 注意力
附錄:評分函數
以下是 Lilian Weng 編寫的一些評分函數。本文提到了 addictive/ concat 和 dot product。涉及點積運算(點積、餘弦相似度等)的評分函數的思路是度量兩個向量間的相似度。對於前饋神經網路評分函數,思路是讓模型學習 alignment 權重和譯文。
圖 A0:評分函數圖解匯總。
圖 A1:評分函數公式匯總。
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
------------------------------------------------


※GLUE排行榜上全面超越BERT的模型近日公布了!
※新的一年,DeepMind準備讓AI學會「放煙花」
TAG:機器之心 |