NLP-Attention模型

在說注意力機制之前,先回想這樣一個場景,你在閱讀一篇文章都時候,是不是一個字一個字的看的?有沒有想過為什麼你是這樣看的,而不是一下就看完了整頁的內容?

整頁內容我們是看到了的,但是需要一個字一個字的去看,才能理解,是吧?別折騰想了,這是我們人類的視覺注意機制的特點,就是這樣的,只有造物主才能知道為什麼要這樣設計,我們現在也就只能抱著存在即合理的心態去接納這個特點了,不過,我們不止步於此,我們可以模仿這種機制的特點,去做很多有價值的事情,通過大量實驗證明,將注意力機制應用在機器翻譯,摘要生成,閱讀理解等問題上,取得的成效顯著。

在說自然語言處理裡面的注意力機制前,我們需要先理解Encoder-Decoder模型,即編碼-解碼模型,這是一種應用於seq2seq問題的模型。

那麼seq2seq又是什麼呢?簡單的說,就是根據一個輸入序列x,來生成另一個輸出序列y。seq2seq有很多的應用,例如翻譯,文檔摘取,問答系統等等。在翻譯中,輸入序列是待翻譯的文本,輸出序列是翻譯後的文本;在問答系統中,輸入序列是提出的問題,而輸出序列是答案。

我們來看看Encoder-Decoder模型的原理,所謂編碼,就是將輸入序列轉化成一個固定長度的向量;解碼,就是將之前生成的固定向量再轉化成輸出序列。

編碼器和解碼器都不是固定的,可選的有CNN/RNN/BiRNN/GRU/LSTM等等,你可以自由組合。

在編碼解碼框架中,一個編碼器讀入輸入句子的向量序列 X=(x_{1},……,x_{T}) ,將其轉換成向量c。最常用的方法是使用如下的RNN模型:

h_t=f(h_t?1,x_t)

獲得了各個時間段的隱藏層以後,在將隱藏層的信息匯總,生成最後的語義向量:

C=q(h_1,h_2,h_3,……,h_{T})

一種簡單的方法是將最後的隱藏詞層做為語義向量C,即:

C=q(h_1,h_2,h_3,……,h_{T})=h_{T}

這裡 h_t∈R^n 是在時間步t的隱藏狀態,c是有隱藏狀態產生的一個向量。f和q是一些非線性函數。例如使用LSTM作為f和 q({h_1,……,h_T})=h_T

解碼器通常被訓練來預測下一個單詞 y_{t′} ,預測是通過給出的上下文向量c和所有先前的預測輸出單詞 left{ y_1,……,y_{t′?1} right} 。換句話說,解碼器定義了一個概率模型通過分解聯合概率成有序的條件概率來進行翻譯。

解碼階段可以看做編碼的逆過程。這個階段,我們要根據給定的語義向量C和之前已經生成的輸出序列y1,y2,…yt?1來預測下一個輸出的單詞yt,即

y_t=argmaxP(y)=prod_{t=1}^{T}p(y_t|left{ y_1,y_2,……,y_{t?1} right},C)

這裡y=(y1,……,yTy)。也可以寫作 :

y_t=g({y_1,……,y_{t?1}},C)

而在RNN中,上式又可以簡化成 :

y_t=g(y_{t?1},s_t,C)

其中s是輸出RNN中的隱藏層,C代表之前提過的語義向量, y_{t?1} 表示上個時間段的輸出,反過來作為這個時間段的輸入。而g則可以是一個非線性的多層的神經網路,產生詞典中各個詞語屬於 y_t 的概率。

encoder-decoder模型雖然非常經典,但是局限性也非常大。最大的局限性就在於編碼和解碼之間的唯一聯繫就是一個固定長度的語義向量C。也就是說,編碼器要將整個序列的信息壓縮進一個固定長度的向量中去。但是這樣做有兩個弊端,一是語義向量無法完全表示整個序列的信息,還有就是先輸入的內容攜帶的信息會被後輸入的信息稀釋掉,或者說,被覆蓋了。輸入序列越長,這個現象就越嚴重。

存在問題,我們就會有解決方案,現在我們來看看注意力機制是怎麼回事,我們將注意力機制引入Encoder-Decoder框架,通過前面的輸入X和中間語義表示C來共同決定decoder的結果。增加了Attention model的Encoder-Decoder框架如下圖所示:

目標句子中的每個單詞都學會其對應的源語句子中單詞的注意力分配概率信息。在生成每個單詞Yi的時候,原先都是相同的中間語義表示C會替換成根據當前生成單詞而不斷變化的 C_i 。即生成目標句子單詞的過程成了下面的形式:

y_1=f(C_1),y_2=f(C_2,y_1),y_3=f(C_3,y_1,y_2)

而每個Ci可能對應著不同的源語句子單詞的注意力分配概率分布。

總是在網上看別人的博客,然後copy過來,心中總是沒有安全感,但是有時候覺得別人寫的有比我自己寫的好,這個比較尷尬,以後對於要展開的問題,我還是多看看論文,多看看教科書吧,少看別人的博客,看了博客,盡量自己總結出來,以新的方式來描述一遍。

今天就先到這裡,晚安。


推薦閱讀:

自然語言處理中的Attention Model:是什麼以及為什麼[一]
Recurrent Convolutional Neural Networks for Text Classification
來自一個計算語言學的不完全指南
《Recent Advances on Neural Headline Generation》閱讀筆記
如何評價SyntaxNet?

TAG:自然语言处理 |