自然語言處理中的Attention機制
Attention機制的理解
Attention機制也就是注意力機制,在自然語言處理中,就是對於一個語言序列的不同的部分給予不同的注意力,在數學上一般表現為權重,也就是對一個語言序列的各個元素加權。
對Attention機制給一個通用的定義:給定一組向量集合values,以及一個向量query,attention機制是一種根據該query計算values的加權求和的機制。這個定義來源於cs224n。
所謂attention就是這個value集和中的每個向量的權值的大小,attention機制就是用一種方式來計算出這個權值。
seq2seq中Attention機制的運用
attention在seq2seq模型中的計算方法大致如下:
- 將文字資訊輸入encoder模型中,每一步均會產生一個hidden state:
- 將encoding最後一個hidden state作為decoder中hidden state的初始值,輸入到decoder中。
- 在decoder中每一個timestep均會產生一個hidden state:
- decoder的上一個timestep產生的hidden state:,將與encoder中的每個hidden state:分別做點積,得到的標量叫做encoder中的每個hidden state的Attention score。
- 然後對Attention score做softmax得到一個概率分佈叫做Attention distribution
- 根據Attention distribution對encoder中的每個hidden state加權平均得到context vector。
- 然後將context vector輸入decoder最後輸出預測的詞。
上圖中大概展示了attention機制中是如何計算出attention score。
上圖展示瞭如何計算Attention distribution:
。
上圖展示瞭如何計算attention output,也就是context vector:
常見的幾種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:
- 改變Attention score/distribution的計算方式
- 改變加權平均hidden state的計算方式
上面介紹的soft attention/global attention、hard attention、local attention就是在改變加權平均hidden state的計算方式。通過改變計算Attention score的計算方式,也可以設計出很多新的attention機制。例如對將點乘改為concat、改為線性組合、加入激勵函式等。
同樣可以改變計算Attention distribution的計算方式,例如直接對Attention score歸一化等: