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


原文鏈接: https://blog.csdn.net/qq_41058526/article/details/80578932

attention 總結

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

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

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

  • Attention在NLP中其實我覺得可以看成是一種自動加權,它可以把兩個你想要聯系起來的不同模塊,通過加權的形式進行聯系。目前主流的計算公式有以下幾種:

    這里寫圖片描述

    通過設計一個函數將目標模塊mt和源模塊ms聯系起來,然后通過一個soft函數將其歸一化得到概率分布。

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


一、傳統encoder-decoder模型

這里寫圖片描述
這里寫圖片描述

encoder-decoder模型

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

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 為:

    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單元來讀取這種向量表示並解碼為輸出序列。

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

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

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

“一個潛在的問題是,采用編碼器-解碼器結構的神經網絡模型需要將輸入序列中的必要信息表示為一個固定長度的向量,而當輸入序列很長時則難以保留全部的必要信息(因為太多),尤其是當輸入序列的長度比訓練數據集中的更長時。”

二、加入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)模型。而且像比於用語言學實現的硬對齊,這種基於概率的軟對齊更加優雅,因為能夠更全面的考慮到上下文的語境。

論文二、

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語料中的英德和英法任務上取得了先進結果,並且訓練速度比主流模型更快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM