自然語言處理中的Attention Model:是什麼以及為什麼[二]
在文章《自然語言處理中的 Attention Model:是什麼以及為什麼[一]》中,介紹了實現 Attention Model 常常用到的 Encoder-Decoder 框架。那麼如何直觀理解 Attention Model 的工作原理呢?本文繼續為你解析。
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模型的話,應該在翻譯「傑瑞」的時候,體現出英文單詞對於翻譯當前中文單詞不同的影響程度,比如給出類似下面一個概率分布值:
(Tom,0.3)(Chase,0.2)(Jerry,0.5)
每個英文單詞的概率代表了翻譯當前單詞「傑瑞」時,注意力分配模型分配給不同英文單詞的注意力大小。
這對於正確翻譯目標語單詞肯定是有幫助的,因為引入了新的信息。同理,目標句子中的每個單詞都應該學會其對應的源語句子中單詞的注意力分配概率信息。
這意味著在生成每個單詞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的輸出經過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是很有幫助作用的。
原文地址:
http://blog.csdn.net/malefactor/article/details/50550211
轉載聲明:本文轉載自「機器學習演算法與自然語言處理」,搜索「yizhennotes」即可關注。
如果您有任何關於Pytorch方面的問題,歡迎進【集智—清華】火炬群與大家交流探討,添加集智小助手微信swarmaAI,備註(pytorch交流群),小助手會拉你入群。
關注集智AI學園公眾號
獲取更多更有趣的AI教程吧!
搜索微信公眾號:swarmAI
集智AI學園QQ群:426390994
學園網站: campus.swarma.org
http://weixin.qq.com/r/FzpGXp3ElMDrrdk9928F (二維碼自動識別)
推薦閱讀:
※《Web安全之機器學習入門》 前言
※AI老法師教你如何拍照
※曝一曝本屆雲棲大會上的智能設計黑馬
※有哪些優秀的 AI 資訊來源?