[NLP/Attention]關於attention機制在nlp中的應用總結

原文連接: http://www.javashuo.com/article/p-rkrvpfrg-nk.html
html




attention 總結

參考:注意力機制(Attention Mechanism)在天然語言處理中的應用

Attention函數的本質能夠被描述爲一個查詢(query)到一系列(鍵key-值value)對的映射,以下圖。
這裏寫圖片描述
在計算attention時主要分爲三步:web

  • 第一步是將query和每一個key進行類似度計算獲得權重,經常使用的類似度函數有點積,拼接,感知機等;
  • 第二步通常是使用一個softmax函數對這些權重進行歸一化
  • 最後將權重和相應的鍵值value進行加權求和獲得最後的attention
  • 目前在NLP研究中,key和value經常都是同一個,即key=value。
  • 這裏寫圖片描述

  • Attention在NLP中其實我以爲能夠當作是一種自動加權,它能夠把兩個你想要聯繫起來的不一樣模塊,經過加權的形式進行聯繫。目前主流的計算公式有如下幾種:
    markdown

    這裏寫圖片描述

    經過設計一個函數將目標模塊mt和源模塊ms聯繫起來,而後經過一個soft函數將其歸一化獲得機率分佈。

  • 目前Attention在NLP中已經有普遍的應用。它有一個很大的優勢就是能夠可視化attention矩陣來告訴你們神經網絡在進行任務時關注了哪些部分。不過在NLP中的attention機制和人類的attention機制仍是有所區別,它基本仍是須要計算全部要處理的對象,並額外用一個矩陣去存儲其權重,其實增長了開銷。而不是像人類同樣能夠忽略不想關注的部分,只去處理關注的部分。


    網絡

1、傳統encoder-decoder模型

這裏寫圖片描述
這裏寫圖片描述

encoder-decoder模型

也就是編碼-解碼模型。所謂編碼,就是將輸入序列轉化成一個固定長度的向量;解碼,就是將以前生成的固定向量再轉化成輸出序列。
具體實現的時候,編碼器和解碼器都不是固定的,可選的有CNN/RNN/BiRNN/GRU/LSTM等等,你能夠自由組合。好比說,你在編碼時使用BiRNN,解碼時使用RNN,或者在編碼時使用RNN,解碼時使用LSTM等等。app

1.1 encoder

  • 對於輸入序列 x = ( x 1 , . . . , x T x ) ,其會將輸入序列如圖所示編碼成一個context vector c ,encoder通常使用RNN,在RNN中,當前時間的隱藏狀態是由上一時間的狀態和當前時間輸入決定的,也就是
    h t = f ( x t , h t 1 )
  • 得到了各個時間段的隱藏層之後,再將隱藏層的信息彙總,生成最後的語義向量 c,至關於把整個句子的信息都包含了,能夠當作整個句子的一個語義表示。
    c = q ( h t , . . . , h T x )

    其中的f和q是非線性的函數
    例如,在論文中有使用
    q ( h t , . . . , h T x ) = h T x

    來簡化計算

1.2 decoder

這裏寫圖片描述



通常其做用爲在給定context vector c和全部已預測的詞 { y 1 , . . . , y t 1 } 去預測 y t ,故t時刻翻譯的結果y爲如下的聯合機率分佈

框架

p ( y ) = t = 1 T p ( y t | { y 1 , . . . , y t } , c )

  • 在RNN中(如上圖所示),t時刻隱藏狀態 s t 爲:
    svg

    s t = f ( s t 1 , y t 1 , c )

  • 而聯合條件分佈爲:
    函數

    p ( y ) = t = 1 T p ( y t | { y 1 , . . . , y t } , c ) = q ( y t 1 , s t , c )

    其中s是輸出RNN中的隱藏層,C表明以前提過的語義向量, y t 1 表示上個時間段的輸出,反過來做爲這個時間段的輸入。而q則能夠是一個非線性的多層的神經網絡,產生詞典中各個詞語屬於 y t 的機率。

1.3 存在問題:

使用傳統編碼器-解碼器的RNN模型先用一些LSTM單元來對輸入序列進行學習,編碼爲固定長度的向量表示;而後再用一些LSTM單元來讀取這種向量表示並解碼爲輸出序列。性能

採用這種結構的模型在許多比較難的序列預測問題(如文本翻譯)上都取得了最好的結果,所以迅速成爲了目前的主流方法。學習

這種結構在不少其餘的領域上也取得了不錯的結果。然而,它存在的一個問題在於:輸入序列不論長短都會被編碼成一個固定長度的向量表示,而解碼則受限於該固定長度的向量表示。

這個問題限制了模型的性能,尤爲是當輸入序列比較長時,模型的性能會變得不好(在文本翻譯任務上表現爲待翻譯的原始文本長度過長時翻譯質量較差)。

「一個潛在的問題是,採用編碼器-解碼器結構的神經網絡模型須要將輸入序列中的必要信息表示爲一個固定長度的向量,而當輸入序列很長時則難以保留所有的必要信息(由於太多),尤爲是當輸入序列的長度比訓練數據集中的更長時。」

2、加入attention

論文一:

參考博文:深度學習筆記(六):Encoder-Decoder模型和Attention模型

NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

  這篇論文中首次將attention用到了nlp領域,論文中提出了一個想法,目前機器翻譯的瓶頸在於不管是多長的輸入,你們的廣泛作法都是將全部輸入經過一些方法合併成一個固定長度的向量去表示這個句子,這會形成的問題是,若是句子很長,那麼這樣的方法去做爲decoder的輸入,效果並不會很好。

該論文提出的加入attention的模型:
  相比於以前的encoder-decoder模型,attention模型最大的區別就在於它不在要求編碼器將全部輸入信息都編碼進一個固定長度的向量之中。相反,此時編碼器須要將輸入編碼成一個向量的序列,而在解碼的時候,每一步都會選擇性的從向量序列中挑選一個子集進行進一步處理。這樣,在產生每個輸出的時候,都可以作到充分利用輸入序列攜帶的信息。並且這種方法在翻譯任務中取得了很是不錯的成果。

這裏寫圖片描述

1.1 編碼(encoder)

這裏寫圖片描述



此處並無不少特殊,使用雙向LSTM,第j個隱藏狀態 h j 只能攜帶第j個單詞自己以及以前的一些信息;而若是逆序輸入,則 h j 包含第j個單詞及以後的一些信息。若是把這兩個結合起來, h j = [ h j , h j ] 就包含了第 j 個輸入和先後的信息。


1.2 解碼(decoder)

1.2.1 context vector c
解碼過程與傳統encoder-decoder模型相同,只不過context vector c變爲了 c i
這裏寫圖片描述
其中的 c i 是對每個輸入的 { x 1 , . . . , x T } encoder後的隱狀態進行weighted sum(如上圖所示)

c i = j = 1 T x a i j h i j



a i j = e x p ( e i j ) k = 1 T x e x p ( e i k )


e i j = a ( s j 1 , h i )

  • 注: h j 爲encoder的隱狀態, s j 爲decoder的隱狀態
  • a i j 的值越高,表示第i個輸出在第j個輸入上分配的注意力越多,在生成第i個輸出的時候受第j個輸入的影響也就越大。

  • e i j :encoder i處隱狀態和decoder j-1 處的隱狀態的匹配 match,此處的 alignment model a 是和其餘神經網絡一塊兒去訓練(即 joint learning),其反映了 h j 的重要性

1.2.2 其他部分

其他部分均與傳統相同,y的聯合機率分佈

p ( y ) = t = 1 T p ( y t | { y 1 , . . . , y t } , c i ) = q ( y t 1 , s t , c i )

  • 在RNN中(如上圖所示),t時刻隱藏狀態 s t 爲:
    s t = f ( s t 1 , y t 1 , c i )

1.3 注意力矩陣

以前已經提過,每一個輸出都有一個長爲Tx的注意力向量,那麼將這些向量合起來看,就是一個矩陣。對其進行可視化,獲得以下結果
這裏寫圖片描述
其中x軸表示待翻譯的句子中的單詞(英語),y軸表示翻譯之後的句子中的單詞(法語)。能夠看到儘管從英語到法語的過程當中,有些單詞的順序發生了變化,可是attention模型仍然很好的找到了合適的位置。換句話說,就是兩種語言下的單詞「對齊」了。所以,也有人把注意力模型叫作對齊(alignment)模型。並且像比於用語言學實現的硬對齊,這種基於機率的軟對齊更加優雅,由於可以更全面的考慮到上下文的語境。

論文2、

Effective Approaches to Attention-based Neural Machine Translation

這篇論文的看點:擴展attention的計算方式,還有就是局部的attention方法
文中提出了兩種注意力機制,global attention和local attention

  • 1.global attention與論文一提到的模型很像,但作了簡化
  • 2.local attention是一種介於soft和hard attention之間的模型,他相對於global attention或者soft attention計算量更小,同時不像hard attention,local attention是可微分的
1.global attention

這裏寫圖片描述



這和上一篇論文提出的attention的思路是同樣的,它都是對源語言對全部詞進行處理,不一樣的是在計算attention

矩陣值的時候,他提出了幾種簡單的擴展版本。在他們最後的實驗中general的計算方法效果是最好的。

a t ( s ) = a l i g n ( h t , h s ) = e x p ( s c o r e ( h t , h s ) ) s e x p ( s c o r e ( h t , h s ) )



這裏寫圖片描述


對比論文一:

a i j = e x p ( e i j ) k = 1 T x e x p ( e i k )


e i j = a ( s j 1 , h i ) = v a T t a n h ( W a s i 1 + U a h j )



2.local attention

靈感來自於圖像中的soft attention和hard attention,soft attention對於源圖片中每一小塊都進行權重的求和,計算較爲費時,而hard attention則計算圖像區域 a 在時刻 t 被選中做爲輸入decoder的信息的機率,有且僅有1個區域被選中,它不可微分,需更加複雜的處理。
local attention是一種介於soft和hard之間的方式,使用了一我的工經驗設定的參數D去選擇一個以 p t 爲中心, [ p t D , p t + D ] 爲窗口的區域,進行對應向量的weighted sum,故不像global attention,local alignment vector a t 的維數是固定的,不隨輸入序列長度變化而變化,它的維度固定爲2D+1

此處使用了兩種方法去選擇 p t

  • 1.單調對應(Monotonic alignment): 設定 p t = t
  • 2.Predictive alignment:
    • 使用 h t 去預測 p t 所在位置:
      S爲輸入序列長度,此處保證了 p t 必定落在輸入序列內
      v p W p 爲權重矩陣
      p t = S   s i g m o i d ( v p T t a n h ( W p h t ) )
    • 爲了使得最後的求和更加的偏好靠近位置 p t 附近的向量,又在求和時加入了一個高斯函數,該函數u = p t ,使得 p t 周圍的向量獲得的權重更大,(s即爲通常公式中的x, p t 爲u, p t 爲高斯分佈峯值)
      a t ( s ) = a l i g n ( h t , h s ) e x p ( ( s p t ) 2 2 σ )

      此處依據經驗 σ = D 2

3.模型具體實現
這裏寫圖片描述
將隱狀態 h t c t 進行拼接,產生輸出

h t = t a n h ( W c [ c t ; h t ] )



最後t時刻的輸出

p ( y t | y < t , x ) = s o f t m a x ( W c h t )


此處與論文一不一樣的點在於 Input-feeding Approach

在機器翻譯領域,都須要使用一個coverage set(覆蓋集)去記錄那些source words已經被翻譯

  • 論文一中使用的是 c i ,其和上一個輸出 y i 1 ,隱狀態 s i 1 一塊兒做爲時間t的輸入
  • 本文中使用 h t 做爲輸入,可是此處並未作對比試驗比較二者的差異

4.結果比較

論文結果中,dot對於global更好,general對於local更好,-m表示Monotonic alignment,-p表示Predictive alignment
這裏寫圖片描述

4.補充

關於soft attention和hard attention
1.Soft Attention Model

所謂Soft,意思是在求注意力分配機率分佈的時候,對於輸入句子X中任意一個單詞都給出個機率,是個機率分佈。

2.Hard Attention Model

既然Soft是給每一個單詞都賦予一個單詞對齊機率,那麼若是不這樣作,直接從輸入句子裏面找到某個特定的單詞,而後把目標句子單詞和這個單詞對齊,而其它輸入句子中的單詞硬性地認爲對齊機率爲0,這就是Hard Attention Model的思想。

Hard AM在圖像裏證實有用,可是估計在文本里面用處不大,由於這種單詞一一對齊明顯要求過高,若是對不齊對後續處理負面影響很大,因此你在NLP的文獻裏看不到用Hard AM的,估計你們都試過了,效果很差。

3.介於Soft 和Hard之間

Soft AM要求輸入句子每一個單詞都要賦予單詞對齊機率,Hard AM要求從輸入句子中精確地找到一個單詞來和輸出單詞對齊,那麼能夠放鬆Hard的條件,先找到Hard AM在輸入句子中單詞對齊的那個單詞大體位置,而後以這個單詞做爲軸心,向左向右拓展出一個大小爲D的窗口,在這個2D+1窗口內的單詞內進行相似Soft AM的對齊機率計算便可。

論文三: ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs

  • 參考資料:
    卷積神經網絡介紹
    論文解讀

  • 這篇論文就提出了3中在CNN中使用attention的方法,是attention在CNN中較早的探索性工做。

  • 傳統的CNN在構建句對模型時如上圖,經過每一個單通道處理一個句子,而後學習句子表達,最後一塊兒輸入到分類器中。這樣的模型在輸入分類器前句對間是沒有相互聯繫的,做者們就想經過設計attention機制將不一樣cnn通道的句對聯繫起來
  • 這篇文章介紹的是利用帶注意力機制的卷積神經網絡進行句子對建模。句子對建模是天然語言處理中的一個經典問題,在諸如答案選擇(Answer Selection, AS)、 釋義鑑定(Paraphrase Identification, PI)、文本繼承(Textual Entailment, TE)等場景中都有應用。
    • 以前的相關工做多侷限於:
      • (1) 設計針對特定場景的特定系統;
      • (2) 對每一個句子分開考慮,不多考慮句子之間的影響;
      • (3) 依賴人工設計的繁雜特徵。
    • 該模型主要貢獻有:
      • (1) 能夠應對多種場景的句子對建模問題,泛化能力強;
      • (2) 利用注意力機制,在建模時考慮句子之間的影響;

1.注意力機制

該論文提出了三種注意力機制

1.1 ABCNN-1

這裏寫圖片描述
兩個句子的向量表示 s 0 , s 1 進行match生成attention矩陣,在卷積以前,加入attention矩陣,與表示矩陣s一塊兒進行訓練。

1.2 ABCNN-2

這裏寫圖片描述
在卷積後,對於卷積完成的兩個矩陣,進行match,match後按照行和列的求和生成兩個矩陣各自的權重,再使用權重對其進行

1.3 ABCNN-3

這裏寫圖片描述
對於1和2的共同使用

2.效果(3>2>1)

本文提出了三種用於卷積神經網絡的注意力機制來進行句子對建模,並在三個常見任務上達到了較好的效果,體現了方法的泛化能力。同時也做者也指出,在三個任務上,兩層注意力網絡並不會明顯優於一層注意力網絡,多是因爲相關數據集較小的緣由。總的來講,在天然語言處理的相關任務上,卷積神經網絡上的注意力機制研究相比長短時記憶網絡(LSTM)來講還相對較少,本文是一個較爲不錯的實現方式。


論文四:attention is all you need

參考:一文讀懂「Attention is All You Need」| 附代碼實現
天然語言處理中的自注意力機制(Self-attention Mechanism)
這篇論文主要亮點在於:

  • 1.不一樣於以往主流機器翻譯使用基於RNN的seq2seq模型框架,該論文用attention機制代替了RNN搭建了整個模型框架。
  • 2.提出了多頭注意力(Multi-headed attention)機制方法,在編碼器和解碼器中大量的使用了多頭自注意力機制(Multi-headed self-attention)。
  • 3.在WMT2014語料中的英德和英法任務上取得了先進結果,而且訓練速度比主流模型更快。
相關文章
相關標籤/搜索