1. 程式人生 > 實用技巧 >自然語言處理中的Attention機制

自然語言處理中的Attention機制

Attention機制的理解

Attention機制也就是注意力機制,在自然語言處理中,就是對於一個語言序列的不同的部分給予不同的注意力,在數學上一般表現為權重,也就是對一個語言序列的各個元素加權。

對Attention機制給一個通用的定義:給定一組向量集合values,以及一個向量query,attention機制是一種根據該query計算values的加權求和的機制。這個定義來源於cs224n。

所謂attention就是這個value集和中的每個向量的權值的大小,attention機制就是用一種方式來計算出這個權值。

seq2seq中Attention機制的運用

attention在seq2seq模型中的計算方法大致如下:

  1. 將文字資訊輸入encoder模型中,每一步均會產生一個hidden state:h_1,h_2,h_3,...,h_n
  2. 將encoding最後一個hidden state作為decoder中hidden state的初始值,輸入到decoder中。
  3. 在decoder中每一個timestep均會產生一個hidden state:s_1,s_2,s_3,...,s_n
  4. decoder的上一個timestep產生的hidden state:s_i,將s_i與encoder中的每個hidden state:h_1,h_2,h_3,...,h_n分別做點積,得到的標量叫做encoder中的每個hidden state的Attention score。
  5. 然後對Attention score做softmax得到一個概率分佈叫做Attention distribution \alpha_i
  6. 根據Attention distribution對encoder中的每個hidden state加權平均得到context vector。
  7. 然後將context vector輸入decoder最後輸出預測的詞。

這裡寫圖片描述

上圖中大概展示了attention機制中是如何計算出attention score。

這裡寫圖片描述

上圖展示瞭如何計算Attention distribution:

e_i=s_t\bigodot h_i

\alpha_i = softmax(e_i)

這裡寫圖片描述

上圖展示瞭如何計算attention output,也就是context vector:a_t = \sum _{i}^{N}\alpha_ih_i

常見的幾種Attention計算方式

  • soft attention, global attention
  • hard attention
  • local attention

soft attention也就是global attention,soft attention和hard attention相對應,global attention和local attention相對應。soft attention在求出attention distribution之後將概率分佈和encoder的hidden state相乘求和,也就是求加權平均。hard attention就是將attention distribution中概率最大的一項置為一,其餘置為0。也就是將所有的attention集中在概率最大的一個hidden state,其他的直接忽略。local attention是soft和hard的結合體,先求hard attention,找到attention score最高的那個hidden state,然後以這個為中心,選取他周圍的幾個做softattention。

如何改變Attention計算方式

有幾個方向重新設計Attention:

  1. 改變Attention score/distribution的計算方式
  2. 改變加權平均hidden state的計算方式

上面介紹的soft attention/global attention、hard attention、local attention就是在改變加權平均hidden state的計算方式。通過改變計算Attention score的計算方式,也可以設計出很多新的attention機制。例如對將點乘改為concat、改為線性組合、加入激勵函式等。

e_i=s_t\bigodot h_i =>e_i=W*concat(h_i;s_t)

e_i=s_t\bigodot h_i =>e_i=V*(w_1h_i+w_2s_t)

e_i=s_t\bigodot h_i =>e_i=V*tanh(w_1h_i+w_2s_t)

同樣可以改變計算Attention distribution的計算方式,例如直接對Attention score歸一化等:a_i = \frac{score_i}{\sum_{j=1}^n score_j}