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