[Notes] Neural Machine Translation by Jointly Learning to Align and Translate (Attention Mechanism)

Haren Lin
7 min readJun 2, 2021

--

論文連結 Paper Link

https://arxiv.org/pdf/1409.0473.pdf

論文地位 Position

本篇論文是歷史上第一篇提及Attention機制在機器翻譯上的論文,討論的角度仍然以Seq2Seq為基底,優化RNN-Based模型。

摘要 Abstract

近年來,基於神經網路的機器翻譯模型經常被用來處理機器翻譯任務。與傳統基於統計的翻譯方法相比,神經機器翻譯模型意在構建單個神經網路模型來提升整體翻譯準確率,主要的模型架構基本都是Seq2Seq。在本論文中,作者認為該模型的瓶頸主要在於中間轉換的固定維度的向量,即Context Vector。因此,作者提出了一種新的解碼方式,其Decoder源頭並不僅包括該向量,他們希望構建一種為當前預測詞從輸入序列中自動搜尋相關部分的機制(soft-search,注意力機制)。作者運用這注意力機制來搭建Seq2Seq翻譯模型,效果卓越,且透過定量分析證明注意力機制的合理性。

方法 Methodology

我們可以先回顧一下,最原始的Seq2Seq是怎麼預測怎麼翻譯的。Encoder的工作就是將輸入與前一個時間點的hidden state吃進來,輸出成新的hidden state。數學是的表達為ht = f (xt, ht−1)。直到Encoder做完事後,在最後一個時間點會產出的hidden state我們稱之為Context Vector (c),數學上可以表示為 c = q({h1,··· ,hTx}),會傳入Decoder最為他的initial hidden state。而在Decoder的部分,對時間點 t 而言,模型知道已經聽了什麼(c, context vector),以及之前說了些什麼(y1, …, yt−1),以這兩件事為基準,來評估現在該說什麼 (yt)。數學表示如下。

而在這篇論文最重要的部分,就是改善Decoder的訓練,引入注意力機制。

Why we need attention mechanism? 為什麼我們需要注意力機制?

在原始seq2seq基本框架,當前輸出詞僅取決於當前hidden state以及上一個輸出詞yt-1,潛在的問題就是,在Encoder輸入序列時,模型框架需要壓縮所有的資訊在一個固定長度的向量中,這樣會使該模型在面對長句的時候效果下降(seq2seq論文中的圖也表明當大於35個字的時候,模型的表現直線下降),而且隨著序列的增長,句子越前面的詞的資訊就會丟失的越厲害。雖然有小方法可以來解決這些問題(E.g. 將句子反過來輸入輸入,或者重複輸入兩遍,亦或使用LSTM),但都治標不治本且對模型沒有顯著提升,因為在解碼時,當前預測詞對應的輸入詞的上下文資訊,位置資訊等基本都已丟失。為了解決這個問題,引入了注意力機制,本質上就是了解當前預測詞對應輸入詞的上下文資訊以及位置資訊。用論文中比較易懂的說法就是,現在這個模型不再只是把輸入序列Encode為一個固定向量,再去Decode這個固定向量;現在的Decode本質上是自動從這個固定向量中抽取有用的資訊來Decode當前的詞。

How does attention mechanism work? 注意力機制是如何運作?

why 2n ? [ans] bi-directional

注意力機制a(),簡單來說就是把Decoder現在要輸入的hidden state si-1,與先前Encoder在每個時間點計算出來的hidden state hj去計算相似度。一般來說,計算兩個向量之間的相似度,最常見的方法有兩種,第一種就是使用內積,第二種是傳入一個全連接層:V(si-1*w1 + hj*w2 + b)。本文使用的方法是後者,傳入Dense Layer。而對於當前的某個時間點 t = i,他會計算這個時間點的Decoder輸入,與每個Encoder hidden state h1, …, hj的相似度,得到ei1, ei2, …, eij。

得到這些ei1, ei2, …, eij值後,我們會將它通過Softmax function,最後得到αi1, αi2, …, αij,且這些數值相加的總和為ㄧ,這就是他的Attention Score。

最後再將我們計算出來的αi1, αi2, …, αij,去跟Encoder hidden state h1, …, hj相乘,把結果加起來做線性組合的結果就是 t = i 時間點的Context Vector ci。

所以最後你在每個時間點 t = i ,你的手上都會有 si-1, yi-1, ci,就端看你要怎麼操作你手上的東西,以及設計Decoder的模型基礎。第一種是將我們的 yi-1跟ci進行concat:f([yi-1; ci], si-1) = si。第二種是先透過 yi-1跟si-1計算出hidden state si後,在把他跟ci進行concat傳入Dense:(a) f(yi-1, si-1) = si (b) Dense([si; ci]) = yi。

模型筆記

實驗結果 Experiment Results

(1) 對齊模型的表現

作者從RNNsearch-50的表現結果,抓了四組英法翻譯的句子來看。X軸是英文,Y軸是法文。而每個Pixel代表的就是他們的Attention Score αij。黑色代表0,白色代表1。由下圖(a)可以發現,即使兩種語言的語法表示順序不同,他還是能藉由注意力機制,察覺到英文的某字,與其法文對應字的關係。

(2) 長句翻譯的表現

有了Attention,長句翻譯的表現較佳。

[補充] RNN-Based Seq2Seq 缺點:

  1. Decoder只使用到Encoder最後一個時間點的hidden state
  2. 無法進行平行計算,因為Auto Regressive
  3. Gradient Vanishing 梯度消失
  4. Lower performance on longer sentences 序列越長,效果越差

而這篇論文成功地利用注意力機制解決了第一個缺點。第二到第四點,在2017年Google提出Attention Is All You Need的Transformer可以解決。

參考資料 Reference

  1. 科普學AI論文導讀
  2. 他人論文筆記

This article will be updated at any time! Thanks for your reading. If you like the content, please click the “clap” button. You can also press the follow button to track new articles. Feel free to connect with me via LinkedIn or email.

--

--

Haren Lin
Haren Lin

Written by Haren Lin

MSWE @ UC Irvine | MSCS @ NTU GINM | B.S. @ NCCU CS x B.A. @ NCCU ECON | ex-SWE intern @ TrendMicro

No responses yet