圖解神經機器翻譯中的注意力機制

2020-12-13 機器之心Pro

選自 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:獲得分數。

*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。這意味著要翻譯的下一個詞將極大地受到此編碼器隱藏狀態的影響。

第 2 步:通過 softmax 層運行所有分數。

我們將得分放到 softmax 層,softmaxed 得分(標量)和為 1。這些 softmax 得分代表注意力分布 [3, 10]。

圖 1.2:獲得 softmax 得分。

*encoder_hidden score score^*----------------------------- [0, 1, 1] 150 [5, 0, 1] 601 [1, 1, 0] 150 [0, 5, 1] 350

請注意,基於 softmax 得分 score^,注意力的分布按照預期應在 [5, 0, 1] 上。實際上,這些數字不是二進位的,而是 0 到 1 之間的浮點數。

第 3 步:通過 softmax 得分將每個編碼器隱藏狀態相乘。

通過將每個編碼器隱藏狀態與其 softmax 得分(標量)相乘,獲得 alignment 向量 [2] 或標註向量 [1]。這正是 alignment 的發生機制。

圖 1.3:獲得 alignment 向量。

*encoder_hidden score score^ alignment*---------------------------------------- [0, 1, 1] 150 [0, 0, 0] [5, 0, 1] 601 [5, 0, 1] [1, 1, 0] 150 [0, 0, 0] [0, 5, 1] 350 [0, 0, 0]

這裡,我們看到除了 [5, 0, 1] 之外的所有編碼器隱藏狀態的 alignment 由於注意力分數低而減少到 0。這意味著第一個翻譯的單詞應該與嵌入 [5, 0, 1] 的輸入單詞匹配。

第 4 步:對 alignment 向量求和。

將 alignment 向量相加,生成上下文向量 [1,2]。上下文向量是前一步 alignment 向量的集合信息。

圖 1.4:獲得上下文向量。

*encoder_hidden score score^ alignment*---------------------------------------- [0, 1, 1] 150 [0, 0, 0] [5, 0, 1] 601 [5, 0, 1] [1, 1, 0] 150 [0, 0, 0] [0, 5, 1] 350 [0, 0, 0]*context *= [0+5+0+0, 0+0+0+0, 0+1+0+0] = [5, 0, 1]

第 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. 總結

本文介紹了以下架構:

seq2seqseq2seq + 注意力帶雙向編碼器的 seq2seq + 注意力帶兩層堆疊編碼器的 seq2seq + 注意力GNMT:帶 8 個堆疊編碼器(+雙向+殘差連接)的 seq2seq + 注意力

附錄:評分函數

以下是 Lilian Weng 編寫的一些評分函數。本文提到了 addictive/ concat 和 dot product。涉及點積運算(點積、餘弦相似度等)的評分函數的思路是度量兩個向量間的相似度。對於前饋神經網絡評分函數,思路是讓模型學習 alignment 權重和譯文。

圖 A0:評分函數圖解匯總。

圖 A1:評分函數公式匯總。

原文連結:https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

相關焦點

  • 圖解谷歌神經機器翻譯核心部分:注意力機制
    最近,有一篇文章用圖解的方式,完整地介紹了「注意力機制」的原理邏輯,並以谷歌神經翻譯為例,解釋了它的運作機制。作者說,寫這篇文章的目的,是為了讓大家在不去看數學公式的情況下,掌握注意力的概念。他也會以人類譯者為例,將相關的概念形象化。神經機器翻譯為何需要注意力機制?
  • 深度神經網絡機器翻譯
    今天有時間和大家一起討論下下, 深度神經網絡機器翻譯。前言2016年年底, Google公布了神經網絡機器翻譯(GNMT), 從此宣告, 機器翻譯經過27年左右, 正式從1989年的IBM機器翻譯模型(PBMT,基於短語的機器翻譯),過渡到了神經網絡機器翻譯模型。已經極大接近了普通人的翻譯了。
  • 計算機視覺中的注意力機制
    在此情形下,基於循環神經網咯(Recurrent Neural Network)的注意力機制(Attention Mechanism)進入了人們的視野。除了之前提到的機器翻譯和自然語言處理領域之外,計算機視覺中的注意力機制也是十分有趣的,本文將會簡要介紹一下計算機視覺領域中的注意力方法。
  • 學界| 對比神經機器翻譯和統計機器翻譯:NMT的六大挑戰
    作者:Ozan alayan機器之心編譯參與:蔣思源、Smith本文總結了最近發表的論文「神經機器翻譯的六大挑戰(Six Challenges for Neural Machine Translation)」,並希望讀者能看到神經機器翻譯的不足和未來的發展方向。
  • 神經結構搜索在機器翻譯中的應用
    作者 | 張裕浩單位 | 東北大學張裕浩,東北大學自然語言處理實驗室 2018 級研究生,研究方向包括神經網絡結構搜索、機器翻譯。神經結構搜索(Neural architecture search,NAS)主要是利用機器,在設定好的搜索空間中按照給定的搜索策略,利用評價標準得到最優的模型[2]。目前結構搜索按策略分主要為三種,1)強化學習,2)進化算法,3)梯度計算。
  • 一文讀懂自注意力機制:8大步驟圖解+代碼
    +代碼的形式,帶領讀者完全理解self-attention機制及其背後的數學原理,並擴展到Transformer。基於Transformer的架構主要用於建模語言理解任務,它避免了在神經網絡中使用遞歸,而是完全依賴於self-attention機制來繪製輸入和輸出之間的全局依賴關係。但這背後的數學原理是什麼呢? 這就是本文要講的內容。這篇文章將帶你通過一個self-attention模塊了解其中涉及的數學運算。
  • 五張動圖,看清神經機器翻譯裡的Attention
    新智元報導來源:towardsdatascience編輯:大明【新智元導讀】近年來,神經機器翻譯的突飛猛進讓越來越多的人類翻譯感到壓力山大,瑟瑟發抖,那麼如此強大的機器翻譯架構內部的運行機制究竟是怎樣的
  • 機器翻譯中的 Attention 機制
    基本 seq2seq 模型用於機器翻譯時,對於短句和中等長度句子是較為有效的,但對於長句,encoder-decoder 之間使用的固定長度編碼可能會成為信息瓶頸,影響翻譯效果,類似人聽完一大段話後,只記得大概,「遺漏」了一些細節
  • 五張動圖,看清神經機器翻譯裡的Attention!
    ,瑟瑟發抖,那麼如此強大的機器翻譯架構內部的運行機制究竟是怎樣的?過去幾十年來,統計機器翻譯一直是佔據主導地位的機器翻譯模型[9],直到神經機器翻譯(NMT)誕生。神經機器翻譯(NMT)是近幾年來新興的機器翻譯模式,該模式試圖構建和訓練能夠讀取輸入文本,並輸出翻譯結果的單個大型神經網絡。
  • Transformer新型神經網絡在機器翻譯中的應用|公開課筆記
    大家可以看到我PPT下面的幾個 LOGO,我們翻譯團隊是屬於阿里巴巴機器智能技術實驗室,中間是阿里翻譯的 Logo和我們的口號「Translate and Beyond」。這次分享的題目是「Transformer新型神經網絡在機器翻譯中的應用」。
  • 循環神經網絡的增強方法:注意力機制以及更多
    人們發現這些模型十分強大,能夠在包括機器翻譯、語音識別和圖像理解(看圖說話)等許多任務中取得非常好的效果。因此,在過去的幾年裡,循環神經網絡已經被廣泛使用。 隨著人們對循環神經網絡的研究越來越深入,我們已經看到越來越多的人試圖用一些新的特性來增強循環神經網絡。
  • 微軟亞研:對深度神經網絡中空間注意力機制的經驗性研究
    空間注意力(Spatial Attention)機制最近在深度神經網絡中取得了很大的成功和廣泛的應用,但是對空間注意力機制本身的理解和分析匱乏。(Spatial Attention)機制最近在深度神經網絡中取得了很大的成功和廣泛的應用,但是對空間注意力機制本身的理解和分析匱乏。
  • 一文解讀NLP中的注意力機制
    注意力機制首先從人類直覺中得到,在nlp領域的機器翻譯任務上首先取得不錯的效果。簡而言之,深度學習中的注意力可以廣義地解釋為重要性權重的向量:為了預測一個元素,例如句子中的單詞,使用注意力向量來估計它與其他元素的相關程度有多強,並將其值的總和作為目標的近似值。
  • 神經網絡機器翻譯介紹
    機器翻譯是指通過計算機將源語言句子翻譯到與之語義等價的目標語言句子的過程,是NLP(自然語言處理)領域一個重要的方向。
  • 注意力的動畫解析(以機器翻譯為例)
    >原文連結:https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3近十年以來,直到神經機器翻譯系統的誕生之前,統計機器翻譯一直在機器翻譯領域佔據著主要地位。
  • 深度| 逐層剖析,谷歌機器翻譯突破背後的神經網絡架構是怎樣的?
    架構為了理解 GNMT 中使用的模型,我們將從傳統的編碼器-解碼器機器翻譯模型開始,持續變化該模型直到匹配 GNMT 中的模型。看起來,GNMT 進化的東西是改進準確率,同時維持實際產品化時的訓練與預測速度。V1:編碼器-解碼器編碼器-解碼器架構開始了近期的神經機器翻譯趨勢,出現於數年前。
  • 亞馬遜開源神經機器翻譯框架Sockeye:基於Apache MXNet的NMT平臺
    在本文中,亞馬遜宣稱這個基於 MXNet 的工具可以用於構建目前業內表現最佳的神經機器翻譯模型。Sockeye GitHub 連結:https://github.com/awslabs/sockeye 說明文檔:http://sockeye.readthedocs.io/en/latest/你想使用機器學習做翻譯嗎?
  • 谷歌開放GNMT教程:如何使用TensorFlow構建自己的神經機器翻譯系統
    選自谷歌機器之心編譯參與:機器之心編輯部近日,谷歌官方在 Github 開放了一份神經機器翻譯教程,該教程從基本概念實現開始,首先搭建了一個簡單的NMT模型,隨後更進一步引進注意力機制和多層 LSTM 加強系統的性能,最後谷歌根據 GNMT 提供了更進一步改進的技巧和細節
  • 谷歌發布神經機器翻譯,翻譯質量接近筆譯人員
    據外媒報導,谷歌於昨日發布了網頁版本和移動版本的谷歌翻譯。在漢譯英的過程中,谷歌翻譯會採用全新的神經機器翻譯機制,而這個App每天要進行一千八百萬次這樣的翻譯。此外,谷歌針對這個神經機器翻譯系統的運作原理,專門發表了一篇學術論文。早前,谷歌就曾表示過,他們在谷歌翻譯中運用了神經網絡技術,但只限於實時視覺翻譯這個功能。前段時間,谷歌一名叫Jeff Dean的高級員工曾經告訴VentureBeat,谷歌已經在嘗試把越來越多的深度學習功能和機制融入到谷歌翻譯中。
  • 搜狗機器翻譯團隊獲得 WMT 2017 中英機器翻譯冠軍
    Sogou NMT 的模型主體採用了業界主流的神經機器翻譯模型:基於循環神經網絡(recurrent neural network, RNN)的多層編碼器-解碼器(encoder-decoder)結構,並帶有注意力(attention)模塊。