讀Attention文章2

    本文引入了self-attention,在句子層面,通過一個2維的矩陣來表示,之前是通過一個向量來表示(例如用RNN把句子壓縮成一個固定的向量),這裏的矩陣每行是捕獲句子中不同的部分,另外在模型中提出了一個懲罰項。

 

簡介部分:

當前獲得詞向量包含兩種類型的方法:

1. 基於全局的語料庫,用非監督的算法進行訓練

2. 在做特定的任務的時候,利用監督學習做分類任務,順便產生了詞向量。通常這種方法效果比第1種類型的方法更好。一些模型利用RNN 和 CNN 作爲一個分類或者排序任務中的中間步驟去表示句子,例如通過RNN的最後一個隱藏單元 或者 對n-gram做池化來表示。

3. 有些模型提出了在CNN和LSTM模型的上面增加attention機制,引入一些額外的信息去抽取句子的embedding,例如機器翻譯中,target部分如果是一個sequence的話,這些target可以作爲額外的信息去提取,博客中上篇文章中attention就是這樣做的。但是,在一些情感分析中,target就是 正,中,負,沒有更多額外的信息了,在這些例子中,通常會通過池化去遍歷所有時間節點的步驟。

4. 提出了self-attention機制,去替換池化,可以抽取句子的不同部分到多個向量,在LSTM的上面使用,針對例如情感分析這種沒有額外輸入信息的例子中,self-atttention機制就可以發揮作用了,

 

模型結構:

包含兩部分:

  • 第一部分:雙向的LSTM
  • 第二部分:self-attention機制,對LSTM輸出的隱藏狀態的向量做加權求和,這個就是句子的embedding

結構圖

圖a 是做情感分析的整體流程

圖b 是self-attention的流程,也就是權重如何產生的

 

輸入:是一個二維矩陣,n*d的矩陣,d表示詞向量的長度,n是輸入sequence的長度

下一步做一個雙向的LSTM模型,得到一個hidden cell 的序列,而不是採用最後一個hidden cell 

 

得到一個 2u * n 的矩陣, n是輸入sequence的長度,u表示隱藏層的長度,因爲是雙向的,所以是2u 

接下去,對LSTM得到的輸出,最attention

,M矩陣就是句子的embedding,大小爲r * 2u

其中A 成爲 annotation matrix , A只利用了輸入S的信息,沒有用到extra information的信息,所以有self-attentive 的意思!

 

這裏我計算下,爲什麼M的大小是r*2u

H爲 n*2u矩陣

H的轉置爲2u*n

Ws1爲d*2u矩陣

Ws2爲r*d矩陣

那麼 A= r*d*d*2u*2u*n=r*n矩陣

M=A*H=r*n*n*2u=r*2u ,所以大小爲r*2u的矩陣了!!

 

懲罰項:

引入一個懲罰項,希望A中的行向量分佈的diversity更大,

類似於L2懲罰項,A*A.T 等於A的向量之間相乘,我們將懲罰項加入到損失函數中,並做最小化優化,那麼A*A.T越接近於1最好,那麼A的行向量中值的分佈需要越分散越好,舉個例子

 

經過softmax之後,行的和爲1, 看如下兩個情況

A_i = [0.5,0.5] , 那麼 A_i *  A_i_T = 0.5*0.5+0.5*0.5=0.5

A_i=[0.8,0.2], 那麼A_i *  A_i_T = 0.8*0.8+0.2*0.2=0.68 

這種情況 [0.8,0.2] 可以使得loss更小,而A代表對輸入的注意力程度,更加diversity,可以理解爲更加註意某些輸入的詞。

 

至於作者爲什麼考慮加入懲罰項,如果向量分佈比較均勻,那麼每個詞的重要性是差不多的,那麼M會涉及很多冗餘的信息,

如果詞向量分佈更加diversity,會集中關注某些詞。另外,提到了如果採用KL作爲懲罰項的話,會出現很多爲0或者很小值的情況,這樣訓練起來很困難。

 

作者試驗中顯示了加入懲罰項的效果,每個句子採用了30個hops,即r=30,從中抽取了6條樣例就可以反映一些問題了,

任務是根據twitter的數據預測年齡段

 

 

 

 

 

 

 

refer:https://arxiv.org/pdf/1703.03130.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章