當前位置:
首頁 > 知識 > 注意力機制在自然語言處理中的應用

注意力機制在自然語言處理中的應用

近年來,深度學習的研究越來越深入,在各個領域也都獲得了不少突破性的進展。基於注意力(attention)機制的神經網路成為了最近神經網路研究的一個熱點,本人最近也學習了一些基於attention機制的神經網路在自然語言處理(NLP)領域的論文,現在來對attention在NLP中的應用進行一個總結,和大家一起分享。


1 Attention研究進展

Attention機制最早是在視覺圖像領域提出來的,應該是在九幾年思想就提出來了,但是真正火起來應該算是google mind團隊的這篇論文《Recurrent Models of Visual Attention》[14],他們在RNN模型上使用了attention機制來進行圖像分類。隨後,Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中,使用類似attention的機制在機器翻譯任務上將翻譯和對齊同時進行,他們的工作算是是第一個提出attention機制應用到NLP領域中。接著類似的基於attention機制的RNN模型擴展開始應用到各種NLP任務中。最近,如何在CNN中使用attention機制也成為了大家的研究熱點。下圖表示了attention研究進展的大概趨勢。


2 Recurrent Models of Visual Attention

在介紹NLP中的Attention之前,我想大致說一下圖像中使用attention的思想。就具代表性的這篇論文《Recurrent Models of Visual Attention》 [14],他們研究的動機其實也是受到人類注意力機制的啟發。人們在進行觀察圖像的時候,其實並不是一次就把整幅圖像的每個位置像素都看過,大多是根據需求將注意力集中到圖像的特定部分。而且人類會根據之前觀察的圖像學習到未來要觀察圖像注意力應該集中的位置。下圖是這篇論文的核心模型示意圖。

該模型是在傳統的RNN上加入了attention機制(即紅圈圈出來的部分),通過attention去學習一幅圖像要處理的部分,每次當前狀態,都會根據前一個狀態學習得到的要關注的位置l和當前輸入的圖像,去處理注意力部分像素,而不是圖像的全部像素。這樣的好處就是更少的像素需要處理,減少了任務的複雜度。可以看到圖像中應用attention和人類的注意力機制是很類似的,接下來我們看看在NLP中使用的attention。


3 Attention-based RNN in NLP

3.1 Neural Machine Translation by Jointly Learning to Align and Translate [1]

這篇論文算是在NLP中第一個使用attention機制的工作。他們把attention機制用到了神經網路機器翻譯(NMT)上,NMT其實就是一個典型的sequence to sequence模型,也就是一個encoder to decoder模型,傳統的NMT使用兩個RNN,一個RNN對源語言進行編碼,將源語言編碼到一個固定維度的中間向量,然後在使用一個RNN進行解碼翻譯到目標語言,傳統的模型如下圖:

這篇論文提出了基於attention機制的NMT,模型大致如下圖:

圖中我並沒有把解碼器中的所有連線畫玩,只畫了前兩個詞,後面的詞其實都一樣。可以看到基於attention的NMT在傳統的基礎上,它把源語言端的每個詞學到的表達(傳統的只有最後一個詞後學到的表達)和當前要預測翻譯的詞聯繫了起來,這樣的聯繫就是通過他們設計的attention進行的,在模型訓練好後,根據attention矩陣,我們就可以得到源語言和目標語言的對齊矩陣了。具體論文的attention設計部分如下:

可以看到他們是使用一個感知機公式來將目標語言和源語言的每個詞聯繫了起來,然後通過soft函數將其歸一化得到一個概率分布,就是attention矩陣。

從結果來看相比傳統的NMT(RNNsearch是attention NMT,RNNenc是傳統NMT)效果提升了不少,最大的特點還在於它可以可視化對齊,並且在長句的處理上更有優勢。

3.2 Effective Approaches to Attention-based Neural Machine Translation [2]

這篇論文是繼上一篇論文後,一篇很具代表性的論文,他們的工作告訴了大家attention在RNN中可以如何進行擴展,這篇論文對後續各種基於attention的模型在NLP應用起到了很大的促進作用。在論文中他們提出了兩種attention機制,一種是全局(global)機制,一種是局部(local)機制。

首先我們來看看global機制的attention,其實這和上一篇論文提出的attention的思路是一樣的,它都是對源語言對所有詞進行處理,不同的是在計算attention矩陣值的時候,他提出了幾種簡單的擴展版本。

在他們最後的實驗中general的計算方法效果是最好的。

我們再來看一下他們提出的local版本。主要思路是為了減少attention計算時的耗費,作者在計算attention時並不是去考慮源語言端的所有詞,而是根據一個預測函數,先預測當前解碼時要對齊的源語言端的位置Pt,然後通過上下文窗口,僅考慮窗口內的詞。

裡面給出了兩種預測方法,local-m和local-p,再計算最後的attention矩陣時,在原來的基礎上去乘了一個pt位置相關的高斯分布。作者的實驗結果是局部的比全局的attention效果好。

這篇論文最大的貢獻我覺得是首先告訴了我們可以如何擴展attention的計算方式,還有就是局部的attention方法。


4 Attention-based CNN in NLP

隨後基於Attention的RNN模型開始在NLP中廣泛應用,不僅僅是序列到序列模型,各種分類問題都可以使用這樣的模型。那麼在深度學習中與RNN同樣流行的卷積神經網路CNN是否也可以使用attention機制呢?《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》 [13]這篇論文就提出了3中在CNN中使用attention的方法,是attention在CNN中較早的探索性工作。

傳統的CNN在構建句對模型時如上圖,通過每個單通道處理一個句子,然後學習句子表達,最後一起輸入到分類器中。這樣的模型在輸入分類器前句對間是沒有相互聯繫的,作者們就想通過設計attention機制將不同cnn通道的句對聯繫起來。

第一種方法ABCNN0-1是在卷積前進行attention,通過attention矩陣計算出相應句對的attention feature map,然後連同原來的feature map一起輸入到卷積層。具體的計算方法如下。

第二種方法ABCNN-2是在池化時進行attention,通過attention對卷積後的表達重新加權,然後再進行池化,原理如下圖。

第三種就是把前兩種方法一起用到CNN中,如下圖

這篇論文提供了我們在CNN中使用attention的思路。現在也有不少使用基於attention的CNN工作,並取得了不錯的效果。


5 總結

最後進行一下總結。Attention在NLP中其實我覺得可以看成是一種自動加權,它可以把兩個你想要聯繫起來的不同模塊,通過加權的形式進行聯繫。目前主流的計算公式有以下幾種:

通過設計一個函數將目標模塊mt和源模塊ms聯繫起來,然後通過一個soft函數將其歸一化得到概率分布。

目前Attention在NLP中已經有廣泛的應用。它有一個很大的優點就是可以可視化attention矩陣來告訴大家神經網路在進行任務時關注了哪些部分。

不過在NLP中的attention機制和人類的attention機制還是有所區別,它基本還是需要計算所有要處理的對象,並額外用一個矩陣去存儲其權重,其實增加了開銷。而不是像人類一樣可以忽略不想關注的部分,只去處理關注的部分。

原文:http://www.cnblogs.com/robert-dlut/p/5952032.html

-今晚博士直播-

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI講堂 的精彩文章:

工信部發布《區塊鏈數據格式規範》標準
再見「黑盒」:研究人員教AI解釋自己!

TAG:AI講堂 |