【2019斯坦福CS224N筆記】(8)Translation, Seq2Seq, Attention
csdn:https://blog.csdn.net/abcgkj
github:https://github.com/aimi-cn/AILearners
[toc]} 機(jī)器翻譯相信大家都不陌生,我們?nèi)粘I钪薪?jīng)常會(huì)用到諸如百度翻譯澎媒、谷歌翻譯樊诺、有道翻譯等等。這里我們給機(jī)器翻譯下一個(gè)簡(jiǎn)單的定義:機(jī)器翻譯(MT)是把一個(gè)句子x從一種語(yǔ)言(源語(yǔ)言)翻譯成另一種語(yǔ)言(目標(biāo)語(yǔ)言)的句子y鹅巍。早期的機(jī)器翻譯系統(tǒng)主要基于規(guī)則千扶,使用雙語(yǔ)詞典將源語(yǔ)言映射到對(duì)應(yīng)的目標(biāo)語(yǔ)言。而現(xiàn)今骆捧,神經(jīng)機(jī)器翻譯已經(jīng)逐漸走進(jìn)歷史舞臺(tái)澎羞。
一、統(tǒng)計(jì)機(jī)器翻譯
1990s-2010s敛苇,人們主要使用的是統(tǒng)計(jì)機(jī)器翻譯妆绞。其核心思想是:從數(shù)據(jù)中學(xué)習(xí)概率模型。假設(shè)我們想把法語(yǔ)翻譯為英語(yǔ)枫攀,即給定法語(yǔ)句子x括饶,尋找最佳的英語(yǔ)句子y。我們可以用下圖來(lái)描述:
然后来涨,我們可以使用貝葉斯來(lái)把上式分解成兩個(gè)部分图焰,如下圖所示:
其中,P(x|y):可以視為翻譯模型蹦掐。模型從并行數(shù)據(jù)中學(xué)習(xí)技羔,單詞或句子應(yīng)該如何被翻譯僵闯。P(y):可以被視為語(yǔ)言模型。在本例子中藤滥,從英語(yǔ)數(shù)據(jù)中學(xué)習(xí)如何寫(xiě)好英語(yǔ)(流利)鳖粟。之前的學(xué)習(xí)中,我們已經(jīng)介紹過(guò)語(yǔ)言模型超陆,這里不再贅述牺弹。因此,如何得到翻譯模型P(x|y)是重點(diǎn)时呀。下面我們分步來(lái)介紹傳統(tǒng)的機(jī)器翻譯是怎樣實(shí)現(xiàn)的:
第一:我們需要一個(gè)大的平行語(yǔ)料庫(kù)據(jù)(例如:翻譯成法語(yǔ)/英語(yǔ)的句子對(duì))张漂。下圖是世界上第一個(gè)平行語(yǔ)料庫(kù):羅塞塔石碑:
第二:對(duì)齊(翻譯句子中特定詞語(yǔ)之間的對(duì)應(yīng)關(guān)系)。即法語(yǔ)句子x與英語(yǔ)句子y之間的單詞級(jí)對(duì)應(yīng)谨娜。對(duì)齊時(shí)航攒,原文中可能有部分詞語(yǔ)沒(méi)有對(duì)應(yīng)的譯文,如下圖所示:
對(duì)齊可以是多對(duì)一的趴梢,如下圖所示:
對(duì)齊可以是一對(duì)多的漠畜,如下圖所示:
當(dāng)然,對(duì)齊可以是多對(duì)多(短語(yǔ)級(jí))坞靶,如下圖所示:
對(duì)齊之后憔狞,原文中每個(gè)單詞都有多個(gè)備選單詞,導(dǎo)致了許多短語(yǔ)的組合方式彰阴,如下圖所示:
第三:解碼瘾敢,即使用heuristic search算法搜索最佳翻譯,丟棄概率過(guò)低的假設(shè)尿这,如下圖所示:
以上所述簇抵,這還只是傳統(tǒng)機(jī)器翻譯系統(tǒng)的冰山一角,有許多細(xì)節(jié)沒(méi)有涉及到射众,還需要大量的特征工程和人力維護(hù)碟摆,總之是非常復(fù)雜的系統(tǒng)。其中每個(gè)環(huán)節(jié)都是獨(dú)立不同的機(jī)器學(xué)習(xí)問(wèn)題叨橱。
而深度學(xué)習(xí)則提供了一個(gè)統(tǒng)一的模型典蜕,一個(gè)統(tǒng)一的最終目標(biāo)函數(shù)。在優(yōu)化目標(biāo)函數(shù)的過(guò)程中罗洗,得到一個(gè)end to end的完整的joint模型嘉裤。傳統(tǒng)機(jī)器翻譯系統(tǒng)與深度學(xué)習(xí)是截然相反的,對(duì)齊模型栖博、詞序模型、語(yǔ)言模型……一堆獨(dú)立的模型無(wú)法聯(lián)合訓(xùn)練厢洞。接下來(lái)我們來(lái)介紹神經(jīng)機(jī)器翻譯模型仇让。
二典奉、神經(jīng)機(jī)器翻譯——seq2seq
2014年,Neural Mechine Translation出現(xiàn)了丧叽。神經(jīng)機(jī)器翻譯(NMT)是一種使用單一神經(jīng)網(wǎng)絡(luò)進(jìn)行翻譯的機(jī)器翻譯方法卫玖。神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)稱為sequence-to-sequence(又名seq2seq)。舉個(gè)例子踊淳,我們的翻譯任務(wù)定義為:
輸入:一個(gè)法語(yǔ)句子(Source sentence):il a m’ entarté假瞬。
輸出:一個(gè)英語(yǔ)句子:he hit me with a pie。
Encoder負(fù)責(zé)將輸入的原文本編碼成一個(gè)向量(context)迂尝,該向量是原文本的一個(gè)表征脱茉,包含了文本背景。為解碼器提供初始隱藏狀態(tài)垄开。如下圖所示:
Decoder是一種以編碼為條件生成目標(biāo)句的語(yǔ)言模型琴许,即使用Encoder的最終狀態(tài)和作為Decoder的初始隱狀態(tài)。除此之外溉躲,Decoder的隱藏層還來(lái)源于前一個(gè)時(shí)刻的隱藏層和前一個(gè)預(yù)測(cè)結(jié)果榜田。如下圖所示,這是在測(cè)試時(shí)的Decoder锻梳,下文會(huì)介紹如何訓(xùn)練:
注意:這里的Encoder和Decoder箭券,可以是普通的RNN,也可以是LSTM疑枯、GRU或者是Bi-LSTM等等辩块,當(dāng)然也可以是CNN。層數(shù)也可以是多層的神汹。當(dāng)然庆捺,我們不僅可以用同一種神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)編碼器和解碼器,也可以用不同的網(wǎng)絡(luò)屁魏,如編碼器基于CNN滔以,解碼器基于RNN。
那么氓拼,我們?nèi)绾斡?xùn)練一個(gè)NMT系統(tǒng)呢你画?和傳統(tǒng)的機(jī)器翻譯系統(tǒng)一樣,首先我們需要一個(gè)大的平行語(yǔ)料庫(kù)桃漾,然后我們對(duì)Source sentence進(jìn)行編碼坏匪,然后使用Encoder的最終隱藏狀態(tài)作為Decoder的初始隱藏狀態(tài)進(jìn)行預(yù)測(cè)y1,y2……y7撬统,然后用Decoder中輸入的Target sentence和預(yù)測(cè)出來(lái)的y計(jì)算loss(例如交叉熵?fù)p失函數(shù))适滓,最后使用反向傳播來(lái)更新模型中的參數(shù)。如下圖所示:
上文中恋追,在Decoder里我們通過(guò)argmax來(lái)一步步生成單詞凭迹,這種方式我們稱之為貪婪解碼罚屋。但是,這使得在生成前面的單詞后無(wú)法回溯嗅绸。那么我們?nèi)绾谓鉀Q這個(gè)問(wèn)題呢脾猛?不難想到,我們可以計(jì)算所有可能的情況鱼鸠,但很明顯這樣的計(jì)算代價(jià)是非常大的猛拴。因此,我們采用來(lái)一種新的方式——Beam search decoding蚀狰。
Beam search decoding的核心思想是:在解碼器的每個(gè)步驟中愉昆,跟蹤k個(gè)最可能的部分(我們稱之為假設(shè)),其中k我們稱之為beam size(大約是5到10)造锅。Beam search雖然不能保證我們找到最優(yōu)解撼唾,但比窮舉搜索更有效。通常我們?cè)谶M(jìn)行t次個(gè)詞后可以停止Beam search哥蔚。最后我們需要在計(jì)算總得分后除以t倒谷,如下圖所示:
經(jīng)過(guò)上文,我們很容易理解所謂的seq2seq糙箍,它其實(shí)是一個(gè)Encoder和一個(gè)Decoder渤愁,Encoder用來(lái)編碼source sentence,Decoder使用Encoder的最終隱藏狀態(tài)作為其的初始隱藏狀態(tài)深夯,充當(dāng)為一個(gè)語(yǔ)言模型來(lái)預(yù)測(cè)單詞抖格,然后根據(jù)Target sentence計(jì)算loss來(lái)更新模型。
那么咕晋,我們可以單獨(dú)訓(xùn)練Encoder和Decoder嗎雹拄?答案是可以的,但是同步訓(xùn)練的好處是掌呜,我們可以同時(shí)優(yōu)化模型中的參數(shù)滓玖。當(dāng)然,如果我們分開(kāi)訓(xùn)練质蕉,也可以使用一個(gè)預(yù)訓(xùn)練好的語(yǔ)言模型作為Decoder的初始狀態(tài)势篡,然后針對(duì)你的任務(wù)進(jìn)行fine tune。此外模暗,對(duì)于模型中需要的word embeding禁悠,我們可以使用該任務(wù)的語(yǔ)料庫(kù)得到,也可以使用現(xiàn)成的word embeding兑宇,然后進(jìn)行fine tune碍侦。
三、NMT vs SMT
與SMT相比,NMT有很多優(yōu)點(diǎn):
- 更好的性能:更流利祝钢、更好地利用上下文比规、更好地使用短語(yǔ)相似性
- 單個(gè)神經(jīng)網(wǎng)絡(luò)端到端優(yōu)化:沒(méi)有需要單獨(dú)優(yōu)化的子組件
- 需要更少的人力工作:沒(méi)有特征工程、所有語(yǔ)言對(duì)的方法相同
當(dāng)然拦英,也有一些缺點(diǎn):
與SMT基于規(guī)則的方式相比,NMT的可解釋性較差:難以調(diào)試测秸。例如:當(dāng)我們使用NMT模型進(jìn)行翻譯時(shí)疤估,如果發(fā)現(xiàn)翻譯錯(cuò)誤,我們很難找到是模型中的哪個(gè)神經(jīng)元或者參數(shù)出了問(wèn)題霎冯。
四铃拇、如何評(píng)估機(jī)器翻譯模型
BLEU(Bilingual Evaluation Understudy)是一個(gè)人們普遍運(yùn)用的MT模型評(píng)價(jià)標(biāo)注。BLEU將機(jī)器翻譯與一個(gè)或多個(gè)人工翻譯進(jìn)行比較沈撞,并根據(jù)以下條件計(jì)算相似度評(píng)分:
- n-gram精度(通常為1慷荔、2、3和4-grams)
- 此外缠俺,系統(tǒng)翻譯太短也會(huì)受到懲罰
雖然BLEU很有用显晶,但也有一些缺點(diǎn)。例如:一個(gè)句子可以有很多種翻譯方式壹士,因此一個(gè)好的翻譯可能會(huì)得到一個(gè)較差的BLEU評(píng)分磷雇,因?yàn)樗c人工翻譯的n-grams重疊度較低。但是作為自動(dòng)評(píng)價(jià)機(jī)器翻譯系統(tǒng)好壞的方法躏救,我們?nèi)圆坏貌粫簳r(shí)使用BLEU作為機(jī)器翻譯系統(tǒng)的評(píng)價(jià)標(biāo)準(zhǔn)唯笙。
五、注意力機(jī)制
1.動(dòng)機(jī)
上文中盒使,我們提到的seq2seq模型中崩掘,很重要的一個(gè)步驟是,把Encoder的最終隱藏狀態(tài)當(dāng)作Decoder的初始隱藏狀態(tài)的一部分少办,這樣做造成源語(yǔ)句的編碼必須捕獲關(guān)于源語(yǔ)句的所有信息苞慢,才可以使模型很好的工作。但事實(shí)上凡泣,這樣僅僅依靠這一個(gè)狀態(tài)來(lái)進(jìn)行后面的解碼過(guò)程是很不可靠的枉疼,因此注意力機(jī)制的提出就可以很好的解決這個(gè)瓶頸。
注意力機(jī)制的核心思想是:在解碼器的每個(gè)步驟上鞋拟,使用與編碼器的直接連接來(lái)注意源序列的特定部分骂维。簡(jiǎn)單來(lái)說(shuō),注意力機(jī)制為解碼器網(wǎng)絡(luò)提供了在每個(gè)解碼步驟查看整個(gè)輸入序列的功能贺纲,然后解碼器可以在任何時(shí)間點(diǎn)決定哪些輸入單詞是重要的航闺。接下來(lái)我們通過(guò)公式來(lái)從本質(zhì)上理解一下Attention機(jī)制。
2.公式理解
首先,我們來(lái)做一下定義:編碼器的隱藏狀態(tài)為: h_1,……,h_N潦刃。在時(shí)間步t侮措,解碼器的隱藏狀態(tài)為:s_t。
接下來(lái)乖杠,我們可以得到t時(shí)間步下的attention分?jǐn)?shù)et,并使用softmax函數(shù)進(jìn)行歸一化處理得到αt分扎,如下圖所示:
然后,我們用α^t個(gè)編碼器隱藏層狀態(tài)進(jìn)行加權(quán)求和胧洒,得到attention的輸出a_t(有時(shí)也稱之為context vector)畏吓,如下圖所示:
最后,我們將注意輸出與解碼器隱藏狀態(tài)連接起來(lái)卫漫,并按照非注意seq2seq模型進(jìn)行處理菲饼,如下圖所示:
以上就是一般情況下attention機(jī)制的公式描述,接下來(lái)我們給出更加廣義的attention定義:給定一組向量值和一個(gè)向量查詢列赎,注意力機(jī)制是一種根據(jù)查詢計(jì)算值的加權(quán)和的技術(shù)宏悦。因此有時(shí),我們也簡(jiǎn)單稱之為查詢處理值包吝。例如饼煞,在seq2seq + attention模型中,每個(gè)解碼器隱藏狀態(tài)(查詢)都關(guān)注所有編碼器隱藏狀態(tài)(值)漏策。因此注意力機(jī)制中的加權(quán)和是值中包含的信息的選擇性匯總派哲,查詢?cè)谄渲写_定要關(guān)注哪些值。
這里我們介紹一下attention機(jī)制的幾種常見(jiàn)形式:假設(shè)我們擁有一些值h_1,……,h_N掺喻,維度為d_1和一個(gè)查詢s芭届,維度為d_2,且d_1 = d_2感耙,則:
-
Basic dot-product attention(和上文介紹的attention一致):
-
Multiplicative attention:這里的W是一個(gè)維度為d_2 * d_1的權(quán)重矩陣褂乍,也是我們需要更新的參數(shù)之一
-
Additive attention:這里的W_1的維度是d_3 *d_1,W_2的維度是d_3 *d_2即硼,v是一個(gè)維度為d_3的權(quán)重向量逃片,d_3也是模型中的一個(gè)超參數(shù)
小結(jié)
本節(jié)課我們首先回顧了傳統(tǒng)的統(tǒng)計(jì)機(jī)器翻譯(SMT),接著講述了神經(jīng)機(jī)器翻譯(NMT)——seq2seq只酥,最后利用Attention機(jī)制seq2seq模型進(jìn)行了改進(jìn)褥实。當(dāng)然,此時(shí)的seq2seq模型仍存在一些缺點(diǎn)裂允,比如OOV(Out-of-Vocabulary)問(wèn)題损离,可以通過(guò)指針或者復(fù)制機(jī)制來(lái)處理,又比如大規(guī)模輸出詞匯處理的問(wèn)題绝编、訓(xùn)練和測(cè)試數(shù)據(jù)之間的域不匹配(例如:訓(xùn)練數(shù)據(jù)采用正式的文本僻澎,而測(cè)試數(shù)據(jù)采用聊天的非正式文本)等等貌踏,有興趣的朋友可以查閱相關(guān)資料。
本文使用 文章同步助手 同步