基于Attention的Seq2Seq
前言
昨天有位大神在CSDN上發(fā)表了一篇題為BERT通俗筆記:從Word2Vec/Transformer逐步理解到BERT
的文章,仔細閱讀前兩章后,可謂是受益匪淺。但是在研讀時,由于自身對NLP相關(guān)知識有所缺乏,使我對一些基礎(chǔ)概念不甚理解(盡管作者的描述已經(jīng)特別簡單易懂~)。其中Attention便是其中之一,在此之前,我一直以為在Seq2Seq之后便是Self-attention(相關(guān)介紹見自注意機制(Self-attention))這一偉大的發(fā)明。查閱相關(guān)文獻后才了解到,由于Seq2Seq對于長句子具有遺忘性,在2015年ICLR會議上Bahdanau,Cho等人提出了Attention機制以解決這個問題,而Self-attention是在2016年提出的。本文主要結(jié)合B站UP主ShusenWang的所講的關(guān)于RNN模型與NLP應(yīng)用的相關(guān)內(nèi)容和自己的理解構(gòu)成。
1. 回顧Seq2Seq
Seq2Seq是基于RNN和LSTM的Encoder-Decoder結(jié)構(gòu)的網(wǎng)絡(luò),它在很多領(lǐng)域都取得了巨大的成功,比如機器翻譯,語音識別,文本摘要等。它輸入是一個序列,其輸出也是一個序列。在Encoder中,將序列轉(zhuǎn)換成一個固定長度的向量,然后通過Decoder將該向量轉(zhuǎn)換成我們想要的序列輸出出來,基本結(jié)構(gòu)如下:
但是這種模型在解碼時只有最后一個狀態(tài)向量傳遞給解碼器,即Encoder的最后一個狀態(tài),如下圖所示,由于其余位置的狀態(tài)并沒有直接參與后續(xù)的解碼任務(wù),這冥冥之中導(dǎo)致了一些信息的丟失,特別是在處理長對話時,僅僅依靠最后一個狀態(tài)難以記住語句所有的信息。
下圖是單詞量和BLEU(雙語互譯質(zhì)量評估輔助工具)的關(guān)系(挖坑:關(guān)于BLEU這些評價指標,后面我將通過一個文章進行總結(jié))。從圖可以看出,當單詞量大于20后,不帶有Attention的Seq2Seq模型的BLEU值出現(xiàn)了明顯下降;相反帶有Attention的Seq2Seq模型的BLEU值并沒有下降,這說明了Attention記住的關(guān)鍵了信息,并實現(xiàn)了較好的狀態(tài)解碼。
2. 基于Attention的Seq2Seq
2.1 相關(guān)性計算
本小節(jié)也采用和視頻RNN模型與NLP應(yīng)用一致的描述方式,對Seq2Seq model for attention做出解釋。在上一小節(jié)已經(jīng)說過,Seq2Seq的Eecoder輸出的是最后一個狀態(tài)hmh_mhm?,這也是Decoder的第一個輸入,我們利用s0=hms_0=h_ms0?=hm?來表示。而基于attention的方法最大的一個特點就是,在進行Decoder時,不僅考慮的Eecoder最后一個狀態(tài)hmh_mhm?,也考慮之前每個的輸入單詞產(chǎn)生的狀態(tài),即h1h_1h1?、h2h_2h2?、h3h_3h3?。。。等,如下圖所示。原始作者引入了一個權(quán)重參數(shù)α\alphaα來表示和Decoder輸入狀態(tài)的相關(guān)性。我們將Eecoder的任意輸出狀態(tài)hih_ihi?與Decoder的第一個輸入狀態(tài)s0s_0s0?的相關(guān)性記為:αi=align?(hi,s0)\alpha_i=\operatorname{align}\left(\mathbf{h}_i, \mathbf{s}_0\right) αi?=align(hi?,s0?)
接下來就是α\alphaα的學習,這里提供了兩種方法,第一個是原始論文的計算方法,第二個是一種更為流行的計算方法,也廣泛應(yīng)用于Transformer模型當中。
至此,我們可以得到m個權(quán)重α\alphaα,它對應(yīng)了m個Eecoder的輸出狀態(tài)h1h_1h1?、h2h_2h2?、h3h_3h3?。。。hmh_mhm?,我們將這m個權(quán)重α\alphaα與m個hih_ihi?進行加權(quán)求和,得到上下文向量(context vetor)c0c_0c0?。其實這種操作是不難理解的, 簡單講,每一個α\alphaα都表示與s0s_0s0?的相關(guān)性,較大的值表明與對應(yīng)的狀態(tài)hhh和s0s_0s0?相關(guān)性較大,反之較小,我們求他們的加權(quán)平均和,自然使得重要的地方更突出,不重要的地方就不突出。
Context?vector:?c0=α1h1+?+αmhm\text { Context vector: } \quad \mathbf{c}_0=\alpha_1 \mathbf{h}_1+\cdots+\alpha_m \mathbf{h}_m ?Context?vector:?c0?=α1?h1?+?+αm?hm?
2.2 Eecoder過程
現(xiàn)在開始介紹Eecoder的過程,這里我們將按照第一次輸入x1‘x_1^‘x1‘?,第二次輸入x2‘x_2^‘x2‘?,。。。,分步進行介紹~。首先是第一步。
而基于Attention的Seq2Seq的Eecoder操作,是在此基礎(chǔ)上級聯(lián)了之前計算得到上下文向量(context vetor)c0c_0c0?,經(jīng)過運算即可得到第一步的輸出s1s_1s1?。
2.Two step。與之前的操作類似,我們需要計算s1s_1s1?(第一步的輸出),與decoder輸出的m個狀態(tài)的相關(guān)性,具體方法與上文描述一致,進而可獲得上下文向量(context vetor)c1c_1c1?,最后將x2‘x_2^‘x2‘?、s1s_1s1?和c1c_1c1?級聯(lián)送入計算單元獲得s2s_2s2?,方法見下圖:
3. Three step。這一步和上文完全相同不在贅述。
最終我們得到一系列輸出c1c_1c1?、c2c_2c2? … c3c_3c3?:
2.3 復(fù)雜度分析和權(quán)重可視化
對于一個cjc_jcj?,我們需要計算m個α\alphaα,如果解碼有ttt個狀態(tài),則一個用mtmtmt個權(quán)重α\alphaα,所以該算法的時間復(fù)雜度是mtmtmt,這個計算壓力也是巨大的。
下圖以英語翻譯為法語為例,通過可視化權(quán)重,來說明之前的關(guān)聯(lián)性。圖中線越粗,表示權(quán)重值越大,之間的關(guān)聯(lián)性也越大。
比如英語單詞Arae(面積;地區(qū),地段)和法語單詞zone(區(qū)域),他們具有相同的意思,這說明了Attention的實際意義。
3. 總結(jié)
參考
BERT通俗筆記:從Word2Vec/Transformer逐步理解到BERT
RNN模型與NLP應(yīng)用
總結(jié)
以上是生活随笔為你收集整理的基于Attention的Seq2Seq的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机L298N电机驱动板的几种不同电压
- 下一篇: IxChariot网络测试工具