[轉]自然語言處理中的Attention Model:是什么及為什么

自然語言處理中的Attention Model:是什么及為什么
https://blog.csdn.net/malefactor/article/details/50550211
/*?版權聲明:可以任意轉載,轉載時請標明文章原始出處和作者信息?.*/

?????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? author:?張俊林? ? ???

?

?

要是關注深度學習在自然語言處理方面的研究進展,我相信你一定聽說過Attention Model(后文有時會簡稱AM模型)這個詞。AM模型應該說是過去一年來NLP領域中的重要進展之一,在很多場景被證明有效。聽起來AM很高大上,其實它的基本思想是相當直觀簡潔的。本文作者可以對燈發誓:在你讀完這篇啰里啰嗦的文章及其后續文章后,一定可以透徹了解AM到底是什么,以及輕易看懂任何有關論文看上去復雜的數學公式部分。怎么樣,這廣告打的挺有吸引力吧,尤其是對那些患有數學公式帕金森病的患者。

?

在正戲開演前,我們先來點題外話。

?

|引言及廢話

?

你應該常常聽到被捉奸在床的男性經常感嘆地說一句話:女性的第六感通常都很準,當然這里的女性一般是特指這位男性的老婆或者女友,當然也可能是他的某位具有女性氣質的男友。要我說,男人的第六感其實也不差(這里的“男人”特指本文作者本人,當然非上文所引用的“男性”,為避免混淆特做聲明)。當我第一次看到機器學習領域中的Attention Model這個名字的時候,我的第一直覺就是:這是從認知心理學里面的人腦注意力模型引入的概念。若干年前,也就是在我年輕不懂事的花樣年華里,曾有一陣子沉迷于人腦的工作機制,大量閱讀了認知心理學方面的書籍和論文,而一般注意力模型會作為書籍的單獨一章來講。下面請允許我顯擺一下鄙人淵博的知識。

?

注意力這東西其實挺有意思,但是很容易被人忽略。讓我們來直觀地體會一下什么是人腦中的注意力模型。首先,請您睜開眼并確認自己處于意識清醒狀態;第二步,請找到本文最近出現的一個“Attention Model”字眼(就是“字眼”前面的兩個英文單詞,…^@@^)并盯住看三秒鐘。好,假設此刻時間停止,在這三秒鐘你眼中和腦中看到的是什么?對了,就是“Attention Model”這兩個詞,但是你應該意識到,其實你眼中是有除了這兩個單詞外的整個一副畫面的,但是在你盯著看的這三秒鐘,時間靜止,萬物無息,仿佛這個世界只有我和你…..對不起,串景了,仿佛這個世界只有“Attention Model”這兩個單詞。這是什么?這就是人腦的注意力模型,就是說你看到了整幅畫面,但在特定的時刻t,你的意識和注意力的焦點是集中在畫面中的某一個部分上,其它部分雖然還在你的眼中,但是你分配給它們的注意力資源是很少的。其實,只要你睜著眼,注意力模型就無時不刻在你身上發揮作用,比如你過馬路,其實你的注意力會被更多地分配給紅綠燈和來往的車輛上,雖然此時你看到了整個世界;比如你很精心地偶遇到了你心儀的異性,此刻你的注意力會更多的分配在此時神光四射的異性身上,雖然此刻你看到了整個世界,但是它們對你來說跟不存在是一樣的…..

?

這就是人腦的注意力模型,說到底是一種資源分配模型,在某個特定時刻,你的注意力總是集中在畫面中的某個焦點部分,而對其它部分視而不見。

?

其實吧,深度學習里面的注意力模型工作機制啊,它跟你看見心動異性時荷爾蒙驅動的注意力分配機制是一樣一樣的。

?

好,前戲結束,正戲開場。


|Encoder-Decoder框架

?

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

?

?

要提文本處理領域的AM模型,就不得不先談Encoder-Decoder框架,因為目前絕大多數文獻中出現的AM模型是附著在Encoder-Decoder框架下的,當然,其實AM模型可以看作一種通用的思想,本身并不依賴于Encoder-Decoder模型,這點需要注意。

?

?

Encoder-Decoder框架可以看作是一種文本處理領域的研究模式,應用場景異常廣泛,本身就值得非常細致地談一下,但是因為本文的注意力焦點在AM模型,所以此處我們就只談一些不得不談的內容,詳細的Encoder-Decoder模型以后考慮專文介紹。下圖是文本處理領域里常用的Encoder-Decoder框架最抽象的一種表示:

?????????????????????????????????????????????????????????

圖1. 抽象的Encoder-Decoder框架

?

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


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

????????????????????????????????????????????????????????????

?

對于解碼器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模型的話,應該在翻譯“杰瑞”的時候,體現出英文單詞對于翻譯當前中文單詞不同的影響程度,比如給出類似下面一個概率分布值:

?

(Tom,0.3)(Chase,0.2)(Jerry,0.5)

?

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

???

?????????????????????????????????????????????圖2 引入AM模型的Encoder-Decoder框架

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

???????????????????????????????????????????????

?

而每個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的形成過程類似下圖:

??????????

??????????? ? ? ? ? ? ? ? ? ? ? ?? ?????

?????????????????????????????????????????????????????????????????????????圖3 Ci的形成過程

?

?

這里還有一個問題:生成目標句子某個單詞,比如“湯姆”的時候,你怎么知道AM模型所需要的輸入句子單詞注意力分配概率分布值呢?就是說“湯姆”對應的概率分布:

?

(Tom,0.6)(Chase,0.2)(Jerry,0.2)

?

是如何得到的呢?

?

為了便于說明,我們假設對圖1的非AM模型的Encoder-Decoder框架進行細化,Encoder采用RNN模型,Decoder也采用RNN模型,這是比較常見的一種模型配置,則圖1的圖轉換為下圖:

??????????????????????????????????????????????????????????????????????? 圖4 RNN作為具體模型的Encoder-Decoder框架

?

那么用下圖可以較為便捷地說明注意力分配概率分布值的通用計算過程:

?

?????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????? 圖5 AM注意力分配概率計算

?

?

對于采用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的一個非常直觀的例子。

? ? ? ? ? ? ? ? ? ? ? ?? ???

??????????????????????????????????????????????????????????? 圖6 句子生成式摘要例子

?

?

這個例子中,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是很有幫助作用的。

最后是廣告:關于AM,我們除了本文,下周還會有續集:從AM來談談兩種科研創新模式,請不要轉臺,繼續關注,謝謝。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451668.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451668.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451668.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關西旅游地名讀法學習

京都個人旅行ための自己勉強 京都篇 伏見稲荷大社「ふしみいなりだいしゃ」 京都府京都市伏見區深草にある神社。舊稱は稲荷神社 全國に約三萬社あるといわれる稲荷神社の総本社である。 初詣では近畿地方の社寺で最多の參拝者を集める。(日本第&#xff14;位)。 清水寺 「き…

jsp頁面c標簽循環map , c:foreach 循環map

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 <c:forEach items"${customerMap}" var"item"> ${item.code} ${item.name} </c:forEach> map…

JSP上下文

上下文即ServletContext,是一個全局的儲存信息的空間&#xff0c;服務器啟動&#xff0c;其就存在&#xff0c;服務器關閉&#xff0c;其才釋放。所有用戶共用一個ServletContext。所以&#xff0c;為了節省空間&#xff0c;提高效率&#xff0c;ServletContext中&#xff0c;要…

python ERROR: Cannot uninstall ‘certifi‘.

解決方法 pip install xxx --ignore-installed certifigithub參考鏈接

HDU - 6383 百度之星2018初賽B 1004 p1m2(二分答案)

p1m2 Accepts: 1003Submissions: 4595Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Problem Description度度熊很喜歡數組&#xff01;&#xff01;我們稱一個整數數組為穩定的&#xff0c;若且唯若其同時符合以下兩個條件&#xff1a…

整合營銷推廣該如何做?

思維方式太重要了&#xff0c;如果你認為你的產品只是推廣出去就好&#xff0c;推廣就能有銷量的話&#xff0c;那你大錯特錯了。本文主要的分享給創業者和企業老板的&#xff0c;如果你想做好網絡營銷推廣&#xff0c;這篇文章不看是你的損失。 首先記住&#xff1a;推廣不等于…

如何使用git命令行上傳項目到github

參考文獻&#xff1a; 如何使用git命令行上傳項目到github 感謝樓主分享&#xff01;

優質的程序員需為代碼效率而嘔心瀝血

一個好的程序員必須要為自己寫出來的代碼執行效率負責。并非僅僅實現了功能代碼就完事了。很多工作一兩年的程序員都還僅是處于實現功能代碼為榮的階段&#xff0c;不會過多去思考如何提高代碼的執行效率。有的人認為是自己的能力就這樣&#xff0c;沒有多余的能力去思考這些額…

用gson得JSON,數值變為double類型 ,去掉double值中的小數位(3.0改為3)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 項目中有個接口的數據是從緩存中讀取再組成JSON 格式返出&#xff0c;原本緩存中數據是這樣的&#xff1a; 用Gson 組成JSON 后&…

Python中的join()函數的用法

函數&#xff1a;string.join()Python中有join()和os.path.join()兩個函數&#xff0c;具體作用如下&#xff1a; join()&#xff1a; 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串 os.path.join()&#xff1a; 將多個路…

利用微軟的平臺進行Office文檔的在線查看

微軟的預覽Office服務&#xff1a;1.在線查看&#xff1a;http://view.officeapps.live.com/op/view.aspx?src文檔地址 文檔地址用URLEncode進行處理的鏈接地址。 2.部署自己的Office預覽服務&#xff1a;需要安裝Office Web Apps服務&#xff08;系統要求為Windows Server 20…

38--合并兩個排序的鏈表

1.問題描述 輸入兩個遞增排序的鏈表&#xff0c;合并這兩個鏈表并使新鏈表中的節點仍然是遞增排序的。 實例&#xff1a; 輸入&#xff1a;1->2->4, 1->3->4 輸出&#xff1a;1->1->2->3->4->4 2.解決思路 /*** Definition for singly-linked lis…

oracle中使用sql查詢時字段為空則賦值默認

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 oracle 通過 nvl( )函數sql 查詢時為 空值 賦默認值 oracle 函數介紹之nvl 函數聲明&#xff1a;nvl(col,val) 說明&#xff1a;當col為…

BZOJ3040:最短路——題解

https://www.lydsy.com/JudgeOnline/problem.php?id3040 題意rt&#xff0c;使用pb_ds的堆解決本問題。 所以其實就是mark一下的。 不過有人確認過官方不能使用“using namespace __gnu_pbds;” #include<cmath> #include<queue> #include<cstdio> #include…

39--打印從1到最大的n位數

1.題目描述 輸入數字 n&#xff0c;按順序打印出從 1 到最大的 n 位十進制數。比如輸入 3&#xff0c;則打印出 1、2、3 一直到最大的 3 位數 999。 示例 1: 輸入: n 1 輸出: [1,2,3,4,5,6,7,8,9] 2.解題思路 class Solution {public int[] printNumbers(int n) {int end …

六.dbms_session(提供了使用PL/SQL實現ALTER SESSION命令)

1、概述 作用:提供了使用PL/SQL實現ALTER SESSION命令,SET ROLE命令和其他會話信息的方法 .2、包的組成 1&#xff09;、set_identifier說明&#xff1a;用于設置會話的客戶ID號。語法&#xff1a;dbms_session.set_identifier(client_id varchar2);其中client_id指定當前會話的…

多線程官方教程

多線程編程指南Sun Microsystems, Inc.4150 Network CircleSanta Clara, CA95054U.S.A.文件號碼819–7051–102006 年10 月版權所有2005 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, CA95054 U.S.A. 保留所有權利。本文檔及其相關產品的使用、復制、分發和反編譯…