天天看點

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

一、摘要

  注意力機制可以被用來編碼序列資料基于每個元素的重要性分數,已經被廣泛用于NLP中的各種任務。本篇論文,作者介紹了各種attention,探索他們之間的聯系并且評估其性能。

二、介紹

  作者通過舉了機器翻譯的例子介紹為什麼要用attention機制。傳統的機器翻譯方法是encoder-decoder架構的,都是由RNN結構組成。但是RNN有兩種嚴重的缺陷:RNN是健忘的,意味着舊資訊在經過多個時間步傳播後會被沖刷掉;在解碼期間沒有明确的詞對齊,對原句的沒個詞的重要性都是一樣的。為了解決以上問題,attention機制被推出用于NMT任務。對解碼期間的每個時間步 j j j,它會根據每個輸入的隐藏層表示 h i i n h^{in}_i hiin​計算注意力分數 α j i \alpha_{ji} αji​,然後得到上下文向量 c j c_j cj​。

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

   c j c_j cj​是輸入序列的權重平均值, c j c_j cj​與目前的隐藏層狀态 h j h_j hj​和最後一個目标詞的輸出 y j − 1 y_{j-1} yj−1​相結合來生成 y j y_j yj​

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

  是以注意力機制就解決了之前提到的問題,RNN的記憶健忘性就不再是問題,attention機制對輸入序列的每個詞計算其分數, c j c_j cj​的計算不受序列長度的影響。另一方面,通過attention機制,可以知道輸入序列的那些詞的權重更大,哪些詞權重更小,關注重要的部分,忽略不相關的部分。是以,注意力機制在NMT任務上表現很好,同時也被應用到其它任務。下面将會按照下面的順序介紹attention機制:

  • 詳細地解釋attention的基本形式。
  • 讨論基于不同任務的各種attention變體
  • 探索attention如何與機器學習的概念相結合,比如預訓練、融合。
  • 評估attention的性能。

三、公式

  之前讨論了attention機制在NMT的應用,為了公式化attention的基本形式,定義 V = { v i } ∈ R n × d v V=\{v_i\}\in R^{n\times d_v} V={vi​}∈Rn×dv​作為輸入序列向量,重寫之前的步驟為:

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

  其中, u ∈ R d u u \in R^{d_u} u∈Rdu​是任務特定的向量比對序列 { v i } \{v_i\} {vi​}的每一個元素,其中 a ( u , v ) a(u,v) a(u,v)計算兩者的比對度。這個比對函數可以有三種形式:加法、點積、MLP。三種形式都衡量了不同表示的相似度。 α i \alpha_i αi​ 是最終的attention weight,與序列權重求和得到上下文向量 c c c。在機器翻譯中,注意力權重可以自然地解釋為目标端的詞對每個源端的詞的對齊度量。當生成一個目标詞時,期望與源端比對程度最高的詞的權重更大,而上下文向量為解碼階段提供了相關的資訊。

四、變種

  上面提到的attention比較簡單,很難适用于複雜的任務。比如:

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

  困難在于Q和(3)并沒有直接的聯系,是以我們需要設計一個更複雜的attention根據上下文的潛在資訊關注到正确的位置。接下來将會介紹各種attention的變種:多元的attention、階層化的attention、self-attention、memory-based attention、task-specific attention。

4.1 multi-dimensional attention

  之前提到的attention是1D attention,為每個詞都計算一個權重分數,将每個分數拼接起來 α = { α i } \alpha=\{\alpha_i\} α={αi​}就是一個1D向量。多元注意力的動機是捕獲不同表示空間的單詞之間的多個互動資訊,這可以通過之間堆疊多個一維的表示來建構。

  舉個方面詞抽取的2D attention例子,給定字元串的隐藏層表示 V = { v i } V=\{v_i\} V={vi​},方面詞原型向量u,3D向量 W = { W k } ∈ R K × d × d W=\{W_k\}\in R^{K\times d\times d} W={Wk​}∈RK×d×d,其中 W k ∈ R × d × d W_k\in R^{\times d\times d} Wk​∈R×d×d是一個矩陣,捕獲每一個字元串和原型之間的組合資訊,每個元素 v i v_i vi​的權重向量 e i e_i ei​可以如下得到:

e i = t a n h ( u T W v i ) = c o n c a t ( t a n h ( u T W k v i ) ) e_i=tanh(u^TWv_i)=concat(tanh(u^TW_kv_i)) ei​=tanh(uTWvi​)=concat(tanh(uTWk​vi​))

  整個序列的2D attention通過拼接得到 E = { e i } E=\{e_i\} E={ei​}。多元attention有個缺陷就是可以同時捕獲多種類型的注意力,是以降低其表示能力。(這裡有點搞不懂?)為了解決這個問題,可以加個正則懲罰項來限制每個attention列關注序列的不同部分。

4.2 Hierarchical attention

  文本分類任務就是把一篇文檔分為預定義的類别。很明顯,我們需要分辨對分類有幫助的關鍵詞,同時,典型的句子對文本分類也是有影響。如果我們考慮到嵌套結構: c h a r a c t e r ∈ w o r d ∈ d o c u m e n t character\in word \in document character∈word∈document,階層化的attention就可以構造出來,或從底向上(word-level to sentence-level),或從頂到下(word-level to character-level)提取局部和全局的重要資訊。

  目前從底向上的方法已經用于文檔分類任務中,兩個GRU分别編碼詞級别和句級别的上下文資訊,然後經過階層化的attention進行編碼:

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

   s o f t m a x softmax softmax是之前讨論的歸一化步驟, h i ( t ) 和 h i h_i^{(t)}和h_i hi(t)​和hi​分别表示詞和句的隐藏層表示。KaTeX parse error: Double subscript at position 4: u_w_̲T和u_s_T分别是詞級别和句級别的模式向量,随模型一起訓練。最終的句子表示c輸入到分類層進行分類。

4.2 self-attention

  之前最基本的attention可以稱作外部的attention,因為attention權重是由外部的模式向量 u u u和每一個元素 v i v_i vi​計算得到。相反,在self-attention中,外部的模型向量由句子本身的一部分替代,是以稱作内部的attention。我們可以将self-attention解釋為比對每個元素與内部的模式向量。 e i = a ( v ‘ , v i ) 。 v ‘ e_i=a(v^`,v_i)。v^` ei​=a(v‘,vi​)。v‘的典型選擇可以是另外一個元素 v j v_j vj​,但為了捕獲序列中單詞的更複雜的互動資訊,可以擴充為計算序列中每對詞的權重:

e i j = a ( v i , v j ) e_{ij}=a(v_i,v_j) eij​=a(vi​,vj​) α i j = s o f t m a x ( e i j ) \alpha_{ij}=softmax(e_{ij}) αij​=softmax(eij​)

  旨在捕獲序列中更複雜的互動依賴資訊。是以,每個單詞都會與其它單詞計算得到分布式關系表示,并且複雜的配對關系可以根據權重很好地解釋。

  self-attention的另一個動機與詞向量相關。具體來說,我們想利用self-attention模型學習到複雜的上下文表示,舉個例子來說,

I   a r r i v e d   a t   t h e   b a n k   a f t e r   c r o s s i n g   t h e   s t r e e t . I\ arrived\ at\ the\ bank\ after\ crossing\ the\ street. I arrived at the bank after crossing the street. I   a r r i v e d   a t   t h e   b a n k   a f t e r   c r o s s i n g   t h e   r i v e r . I\ arrived\ at\ the\ bank\ after\ crossing\ the\ river. I arrived at the bank after crossing the river.

  單詞‘bank’在不同的上下文中有不同的意義,我們想要模型可以學到可以捕捉周圍上下文的語義資訊的上下文向量。Transformer是基于attention的新型架構,與之前的self-attention類似,新穎的self-attention可以表示為:

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

  其中 V = { v i } ∈ R n × d i n V=\{v_i\}\in R^{n\times d_{in}} V={vi​}∈Rn×din​表示輸入序列, W 1 , W 2 , W 3 ∈ R d i n × d o u t W_1,W_2,W_3\in R^{d_{in}\times d_{out}} W1​,W2​,W3​∈Rdin​×dout​是可更新的參數, C = c i ∈ R n × d o u t C={c_i}\in R^{n\times d_{out}} C=ci​∈Rn×dout​就是自注意的編碼序列,我們期望每個輸入通過在端到端訓練期間調整其與周圍環境的關系來學習deep context-aware configuration。我們知道這個架構不包括任何RNN、CNN結構,是以self-attention層的計算是可以并行的,與CNN相比參數更高效。越來越到的技術被提出用于加強它的表示能力。比如位置編碼作為每個單詞的額外資訊,作為附加特征納入句子編碼中。

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

  為了避免受到不期望方向的注意力資訊, 一個雙向掩碼在歸一化之前加入權重的表示中。還有其它的改進方法,這裡不再介紹。

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

4.3 memory-based attention

  為了介紹新的attention,重構一下基礎attention的步驟。給定一系列鍵值對 { ( k i , v i ) } \{(k_i,v_i)\} {(ki​,vi​)}和查詢向量q,attention的三部曲:

  1. e i = a ( q , k i ) ( a d d r e s s   m e m o r y ) e_i=a(q,k_i)(address\ memory) ei​=a(q,ki​)(address memory)

  2. α i = e x p ( e i ) ∑ i e x p ( e i ) ( n o r m a l i z e ) \alpha_i=\frac{exp(e_i)}{\sum_iexp(e_i)}(normalize) αi​=∑i​exp(ei​)exp(ei​)​(normalize)

  3. c = ∑ i α i v i ( r e a d   c o n t e n t s ) c=\sum_i\alpha_iv_i(read\ contents) c=∑i​αi​vi​(read contents)

  這裡我們重新解釋計算權重分數為soft memory addressing using query q,然後根據權重從記憶體中編碼為reading contents。這就是基于記憶的注意力的一般形式。事實上,在很多文獻中記憶是輸入序列的同義詞。如果每對key-value是相等的,那麼就是之前介紹的最基本的attention(???)。然而,基于記憶的attention更加強大,因為我們結合了額外的功能來實作可重用性和增加靈活性。

  • 可重用性: 在一些問答任務中的一個基本困難是答案與問題間接相關,是以不能通過簡單的attention解決。如果我們可以通過疊代記憶更新(也稱為多跳)模拟時間推理過程來逐漸将注意力引導到答案的正确位置,就可以實作這一點。在每一次疊代過程中,查詢被新的内容所更新,然後更新後的查詢用于檢索相關的内容。疊代過程的僞代碼如下:

    -

    An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】
  • **靈活性:**由于key和value已經明确地表示出來了,我們可以自由地将先前知識結合到設計單獨的key和value embedding中,以允許它們分别更好地捕獲相關資訊。key embeddings可以更好地比對問題,value embeddings比對回複。在key-value記憶網絡中,提出了一種視窗級别的表示,key是圍繞中視窗中心實體的詞,value是實體,旨在更高效和更準确。

五、應用

  這裡列舉attention的三個應用:ensemble、gating、pre-training。

5.1 attention for ensemble

  如果我們将序列中的每個元素看作單個模型,attention權重看作是這些模型的權重融合,那麼attention機制就類似于模型融合的方式。

5.2 attention for gating

  傳統的GRU隐藏層更新如下:

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

  其中 u i 和 r i u_i和r_i ui​和ri​是更新門和重置門,一種基于attention的GRU是通過将 u i u_i ui​替換為attention權重 α i \alpha_i αi​

An Introductory Survey on Attention Mechanisms in NLP Problems【論文筆記】

5.3 attention for pre-training

  預訓練的詞向量在很多NLP任務上至關重要。傳統的方法有skipgram、cbow、glove等等,利用大規模語料基于上下文訓練一個無監督模型,學習到每個詞的高位分布式表示。與此相反,最近有提出預訓練方法,內建了基于attention的深度網絡架構,旨在學習到更高品質的單詞表示,包含了周圍上下文的句法語義資訊,然後對模型微調以适應下層監督任務。比如最近很火的BERT。

六、結論

  在本文中,我們通過近期關于注意機制的研究進行了調查,并在其公式,變種,應用和評價的基礎上進行了介紹性總結。 與其在各種NLP任務中的廣泛使用相比,探索其數學證明的嘗試仍然很少。 最近的研究探索其在嵌入式預訓練中的應用取得了巨大成功,可能成為未來研究的一個前瞻性領域。

繼續閱讀