Attention Model詳解

  要是關注深度學習在天然語言處理方面的研究進展,我相信你必定據說過Attention Model(後文有時會簡稱AM模型)這個詞。AM模型應該說是過去一年來NLP領域中的重要進展之一,在不少場景被證實有效。聽起來AM很高大上,其實它的基本思想是至關直觀簡潔的。框架

  AM 引言:函數

  引用網上通俗的解釋,首先,請您睜開眼並確認本身處於意識清醒狀態;第二步,請找到本文最近出現的一個「Attention Model」字眼(就是「字眼」前面的兩個英文單詞,…)並盯住看三秒鐘。好,假設此刻時間中止,在這三秒鐘你眼中和腦中看到的是什麼?對了,就是「Attention Model」這兩個詞,可是你應該意識到,其實你眼中是有除了這兩個單詞外的整個一副畫面的,可是在你盯着看的這三秒鐘,時間靜止,萬物無息,彷彿這個世界只有我和你…..對不起,串景了,彷彿這個世界只有「Attention Model」這兩個單詞。這是什麼?這就是人腦的注意力模型,就是說你看到了整幅畫面,但在特定的時刻t,你的意識和注意力的焦點是集中在畫面中的某一個部分上,其它部分雖然還在你的眼中,可是你分配給它們的注意力資源是不多的。其實,只要你睜着眼,注意力模型就無時不刻在你身上發揮做用,好比你過馬路,其實你的注意力會被更多地分配給紅綠燈和來往的車輛上,雖然此時你看到了整個世界;好比你很精心地偶遇到了你心儀的異性,此刻你的注意力會更多的分配在此時神光四射的異性身上,雖然此刻你看到了整個世界,可是它們對你來講跟不存在是同樣的…..這就是人腦的注意力模型,說究竟是一種資源分配模型,在某個特定時刻,你的注意力老是集中在畫面中的某個焦點部分,而對其它部分視而不見。其實吧,深度學習裏面的注意力模型工做機制啊,它跟你看見心動異性時荷爾蒙驅動的注意力分配機制是同樣同樣的。學習

    Encoder-Decoder框架:編碼

  本文只談談文本處理領域的AM模型,在圖片處理或者(圖片-圖片標題)生成等任務中也有不少場景會應用AM模型,可是咱們此處只談文本領域的AM模型,其實圖片領域AM的機制也是相同的。spa

  要提文本處理領域的AM模型,就不得不先談Encoder-Decoder框架,由於目前絕大多數文獻中出現的AM模型是附着在Encoder-Decoder框架下的,固然,其實AM模型能夠看做一種通用的思想,自己並不依賴於Encoder-Decoder模型,這點須要注意。翻譯

  Encoder-Decoder框架能夠看做是一種文本處理領域的研究模式,應用場景異常普遍,自己就值得很是細緻地談一下,可是由於本文的注意力焦點在AM模型,因此此處咱們就只談一些不得不談的內容,詳細的Encoder-Decoder模型之後考慮專文介紹。下圖是文本處理領域裏經常使用的Encoder-Decoder框架最抽象的一種表示:3d

  Encoder-Decoder框架能夠這麼直觀地去理解:能夠把它看做適合處理由一個句子(或篇章)生成另一個句子(或篇章)的通用處理模型。對於句子對<X,Y>,咱們的目標是給定輸入句子X,期待經過   Encoder-Decoder框架來生成目標句子Y。X和Y能夠是同一種語言,也能夠是兩種不一樣的語言。而X和Y分別由各自的單詞序列構成:code

 

  Encoder顧名思義就是對輸入句子X進行編碼,將輸入句子經過非線性變換轉化爲中間語義表示C:blog

  對於解碼器Decoder來講,其任務是根據句子X的中間語義表示C和以前已經生成的歷史信息y1,y2….yi-1來生成i時刻要生成的單詞yi:遊戲

  每一個yi都依次這麼產生,那麼看起來就是整個系統根據輸入句子X生成了目標句子Y。

  Encoder-Decoder是個很是通用的計算框架,至於Encoder和Decoder具體使用什麼模型都是由研究者本身定的,常見的好比CNN/RNN/BiRNN/GRU/LSTM/Deep LSTM等,這裏的變化組合很是多,而極可能一種新的組合就能攢篇論文,因此有時候科研裏的創新就是這麼簡單。好比我用CNN做爲Encoder,用RNN做爲Decoder,你用BiRNN作爲Encoder,用深層LSTM做爲Decoder,那麼就是一個創新。

  Encoder-Decoder是個創新遊戲大殺器,一方面如上所述,能夠搞各類不一樣的模型組合,另一方面它的應用場景多得不得了,好比對於機器翻譯來講,<X,Y>就是對應不一樣語言的句子,好比X是英語句子,Y是對應的中文句子翻譯。再好比對於文本摘要來講,X就是一篇文章,Y就是對應的摘要;再好比對於對話機器人來講,X就是某人的一句話,Y就是對話機器人的應答。

  Attention Model:

  圖1中展現的Encoder-Decoder模型是沒有體現出「注意力模型」的,因此能夠把它看做是注意力不集中的分心模型。爲何說它注意力不集中呢?請觀察下目標句子Y中每一個單詞的生成過程以下:

   其中f是decoder的非線性變換函數。從這裏能夠看出,在生成目標句子的單詞時,不論生成哪一個單詞,是y1,y2也好,仍是y3也好,他們使用的句子X的語義編碼C都是同樣的,沒有任何區別。而語義編碼C是由句子X的每一個單詞通過Encoder 編碼產生的,

  這意味着不管是生成哪一個單詞,y1,y2仍是y3,其實句子X中任意單詞對生成某個目標單詞yi來講影響力都是相同的,沒有任何區別(其實若是Encoder是RNN的話,理論上越是後輸入的單詞影響越大,並不是等權的,估計這也是爲什麼Google提出Sequence to Sequence模型時發現把輸入句子逆序輸入作翻譯效果會更好的小Trick的緣由)。

  這就是爲什麼說這個模型沒有體現出注意力的原因。這相似於你看到眼前的畫面,可是沒有注意焦點同樣。若是拿機器翻譯來解釋這個分心模型的Encoder-Decoder框架更好理解,好比輸入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文單詞:「湯姆」,「追逐」,「傑瑞」。在翻譯「傑瑞」這個中文單詞的時候,分心模型裏面的每一個英文單詞對於翻譯目標單詞「傑瑞」貢獻是相同的,很明顯這裏不太合理,顯然「Jerry」對於翻譯成「傑瑞」更重要,可是分心模型是沒法體現這一點的,這就是爲什麼說它沒有引入注意力的緣由。沒有引入注意力的模型在輸入句子比較短的時候估計問題不大,可是若是輸入句子比較長,此時全部語義徹底經過一箇中間語義向量來表示,單詞自身的信息已經消失,可想而知會丟失不少細節信息,這也是爲什麼要引入注意力模型的重要緣由。

   上面的例子中,若是引入AM模型的話,應該在翻譯「傑瑞」的時候,體現出英文單詞對於翻譯當前中文單詞不一樣的影響程度,好比給出相似下面一個機率分佈值:

  每一個英文單詞的機率表明了翻譯當前單詞「傑瑞」時,注意力分配模型分配給不一樣英文單詞的注意力大小。這對於正確翻譯目標語單詞確定是有幫助的,由於引入了新的信息。同理,目標句子中的每一個單詞都應該學會其對應的源語句子中單詞的注意力分配機率信息。這意味着在生成每一個單詞Yi的時候,原先都是相同的中間語義表示C會替換成根據當前生成單詞而不斷變化的Ci。理解AM模型的關鍵就是這裏,即由固定的中間語義表示C換成了根據當前輸出單詞來調整成加入注意力模型的變化的Ci。增長了AM模型的Encoder-Decoder框架理解起來如圖2所示。

  即生成目標句子單詞的過程成了下面的形式:

  而每一個Ci可能對應着不一樣的源語句子單詞的注意力分配機率分佈,好比對於上面的英漢翻譯來講,其對應的信息可能以下:

  其中,f2函數表明Encoder對輸入英文單詞的某種變換函數,好比若是Encoder是用的RNN模型的話,這個f2函數的結果每每是某個時刻輸入xi後隱層節點的狀態值;g表明Encoder根據單詞的中間表示合成整個句子中間語義表示的變換函數,通常的作法中,g函數就是對構成元素加權求和,也就是經常在論文裏看到的下列公式:

    

 

   假設Ci中那個i就是上面的「湯姆」,那麼Tx就是3,表明輸入句子的長度,h1=f(「Tom」),h2=f(「Chase」),h3=f(「Jerry」),對應的注意力模型權值分別是0.6,0.2,0.2,因此g函數就是個加權求和函數。若是形象表示的話,翻譯中文單詞「湯姆」的時候,數學公式對應的中間語義表示Ci的造成過程相似下圖:

 

 

  這裏還有一個問題:生成目標句子某個單詞,好比「湯姆」的時候,你怎麼知道AM模型所須要的輸入句子單詞注意力分配機率分佈值呢?就是說「湯姆」對應的機率分佈:

  (Tom,0.6)(Chase,0.2)(Jerry,0.2)是如何獲得的呢?爲了便於說明,咱們假設對圖1的非AM模型的Encoder-Decoder框架進行細化,Encoder採用RNN模型,Decoder也採用RNN模型,這是比較常見的一種模型配置,則圖1的圖轉換爲下圖:

那麼用下圖能夠較爲便捷地說明注意力分配機率分佈值的通用計算過程:

 

對於採用RNN的Decoder來講,若是要生成yi單詞,在時刻i,咱們是能夠知道在生成Yi以前的隱層節點i時刻的輸出值Hi的,而咱們的目的是要計算生成Yi時的輸入句子單詞「Tom」、「Chase」、「Jerry」對Yi來講的注意力分配機率分佈,那麼能夠用i時刻的隱層節點狀態Hi去一一和輸入句子中每一個單詞對應的RNN隱層節點狀態hj進行對比,即經過函數F(hj,Hi)來得到目標單詞Yi和每一個輸入單詞對應的對齊可能性,這個F函數在不一樣論文裏可能會採起不一樣的方法,比對函數F,而後函數F的輸出通過Softmax進行歸一化就獲得了符合機率分佈取值區間的注意力分配機率分佈數值。圖5顯示的是當輸出單詞爲「湯姆」時刻對應的輸入句子單詞的對齊機率。絕大多數AM模型都是採起上述的計算框架來計算注意力分配機率分佈信息,區別只是在F的定義上可能有所不一樣。

  上述內容就是論文裏面經常提到的Soft Attention Model的基本思想,你能在文獻裏面看到的大多數AM模型基本就是這個模型,區別極可能只是把這個模型用來解決不一樣的應用問題。那麼怎麼理解AM模型的物理含義呢?通常文獻裏會把AM模型看做是單詞對齊模型,這是很是有道理的。目標句子生成的每一個單詞對應輸入句子單詞的機率分佈能夠理解爲輸入句子單詞和這個目標生成單詞的對齊機率,這在機器翻譯語境下是很是直觀的:傳統的統計機器翻譯通常在作的過程當中會專門有一個短語對齊的步驟,而注意力模型其實起的是相同的做用。在其餘應用裏面把AM模型理解成輸入句子和目標句子單詞之間的對齊機率也是很順暢的想法。

  固然,我以爲從概念上理解的話,把AM模型理解成影響力模型也是合理的,就是說生成目標單詞的時候,輸入句子每一個單詞對於生成這個單詞有多大的影響程度。這種想法也是比較好理解AM模型物理意義的一種思惟方式。

  圖6是論文「A Neural Attention Model for Sentence Summarization」中,Rush用AM模型來作生成式摘要給出的一個AM的一個很是直觀的例子。

這個例子中,Encoder-Decoder框架的輸入句子是:「russian defense minister ivanov called sunday for the creation of a joint front for combating global terrorism」。對應圖中縱座標的句子。系統生成的摘要句子是:「russia calls for joint front against terrorism」,對應圖中橫座標的句子。能夠看出模型已經把句子主體部分正確地抽出來了。矩陣中每一列表明生成的目標單詞對應輸入句子每一個單詞的AM分配機率,顏色越深表明分配到的機率越大。這個例子對於直觀理解AM是頗有幫助做用的。

相關文章
相關標籤/搜索