|
注意力(Attention)機(jī)制,是神經(jīng)機(jī)器翻譯模型中非常重要的一環(huán),直接影響了翻譯的準(zhǔn)確度與否。 可以這么說,沒有注意力機(jī)制,機(jī)器翻譯的水平只有60-70分。有了注意力機(jī)制,翻譯的水平就能夠達(dá)到80-90分了。 它是如何發(fā)揮作用的呢?很多人一解釋起來,就是鋪天蓋地的數(shù)學(xué)公式,讓人還沒來得及看,就直接懵逼了。 ![]() 最近,有一篇文章用圖解的方式,完整地介紹了“注意力機(jī)制”的原理邏輯,并以谷歌神經(jīng)翻譯為例,解釋了它的運(yùn)作機(jī)制。 作者說,寫這篇文章的目的,是為了讓大家在不去看數(shù)學(xué)公式的情況下,掌握注意力的概念。他也會(huì)以人類譯者為例,將相關(guān)的概念形象化。 神經(jīng)機(jī)器翻譯為何需要注意力機(jī)制?神經(jīng)機(jī)器翻譯方法誕生于2013年。那一年,牛津大學(xué)的研究團(tuán)隊(duì)發(fā)表了一篇題為Recurrent Continuous Translation Models的論文,提出了一個(gè)用于機(jī)器翻譯的新模型。 ![]() 這個(gè)新模型使用的是端到端的編碼器-解碼器結(jié)構(gòu)。 在處理翻譯工作的時(shí)候,先用卷積神經(jīng)網(wǎng)絡(luò)(CNN),將原始文本編碼成連續(xù)的向量,然后使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)將連續(xù)向量轉(zhuǎn)換成目標(biāo)語言。 但由于梯度爆炸/消失的存在,但使用這種方法很難獲取更長句子背后的信息,導(dǎo)致翻譯性能大幅下降。 在2014年,當(dāng)時(shí)在谷歌工作的Ilya Sutskever等人提出了序列到序列(seq2seq)學(xué)習(xí)的方法,將RNN同時(shí)用于編碼器和解碼器。 ![]() 也把RNN的典型變體長短時(shí)記憶(LSTM)引入到了神經(jīng)機(jī)器翻譯中。這樣以來,梯度爆炸/消失就得到了控制,長距離重新排序的問題得到了緩解。 正所謂是摁下葫蘆起來瓢,新的問題又出現(xiàn)了。seq2seq方法中,解碼器從編碼器中接收的唯一信息, 是最后編碼器的隱藏狀態(tài),這是一個(gè)向量表征,是輸入序列文本的數(shù)字概要。 具體如下圖中的兩個(gè)紅色節(jié)點(diǎn)所示。 ![]() 對(duì)于像下圖這樣很長的輸入文本來說,我們特別希望這個(gè)隱藏狀態(tài),能夠充分概括輸入序列,解碼器就能夠根據(jù)這一個(gè)向量表征來很好的完成轉(zhuǎn)換了。 ![]() 但這很難,災(zāi)難性的遺忘出現(xiàn)了。比如上面說的這兩個(gè)段落的字,在看到這的時(shí)候,你還能記得多少?能把它們翻譯成英語嗎? 除此之外,還有一個(gè)問題。在基于RNN的模型中,不管原始文本的句子有多長,都會(huì)被壓縮成一個(gè)固定長度的向量。 在解碼的時(shí)候,會(huì)有各種麻煩事,也沒辦法確定準(zhǔn)確的信息。特別是句子很長的時(shí)候,更麻煩。 怎么辦?“注意力機(jī)制”登場2014年,DeepMind團(tuán)隊(duì)發(fā)表Recurrent Models of Visual Attention,提出了注意力機(jī)制,并將其用于圖像分類的任務(wù)中。 ![]() 與CNN相比,使用注意力機(jī)制的RNN取得了非常好的效果,直接帶起了一波研究注意力機(jī)制的熱潮。 很快,注意力就出現(xiàn)在了神經(jīng)機(jī)器翻譯中。 在ICLR 2015上,蒙特利爾大學(xué)的Yoshua Bengio團(tuán)隊(duì)發(fā)表了一篇論文,在神經(jīng)機(jī)器翻譯中引入了注意力機(jī)制。(這篇論文在2014年9月,就已經(jīng)提交到了arXiv上) ![]() 注意力,是編碼器和解碼器之間的接口。有了它,解碼器接收到的,就不僅僅是一個(gè)統(tǒng)一的向量表征了,還有來自編碼器每個(gè)時(shí)間步的向量表征,比如下圖中的綠色節(jié)點(diǎn)。 ![]() 通過注意力機(jī)制,模型就能夠有選擇地關(guān)注輸入序列中有用的部分,從而在解碼器和編碼器之間對(duì)齊。 之后,神經(jīng)機(jī)器翻譯所面臨的問題,基本上也都有了解決方案。 2016年,谷歌推出了首個(gè)基于神經(jīng)機(jī)器翻譯的翻譯系統(tǒng)。 現(xiàn)在,神經(jīng)機(jī)器翻譯已經(jīng)成為了主流翻譯工具的核心方法。 在這段發(fā)展歷程中,RNN和LSTM,已經(jīng)有了大量的介紹。注意力機(jī)制到底是怎么運(yùn)作的呢?它到底有何魔力? 接下來請(qǐng)你收看—— 圖解注意力運(yùn)作機(jī)制注意力一共分類兩種。一種是全局注意力,使用所有編碼器隱藏狀態(tài)。另一種是局部注意力,使用的是編碼器隱藏狀態(tài)的子集。在這篇文章中,提到的注意力,都是全局注意力。 在開始之前,需要看換一下僅基于seq2seq方法的模型是如何翻譯的。 以一個(gè)將文本從德語翻譯成英語的翻譯員為例。 ![]() 使用“seq2seq”方法的話,他會(huì)從頭開始逐字逐句閱讀德語文本,然后逐字逐句將文本翻譯成英語。如果句子特別長的話,他在翻譯的時(shí)候,可能就已經(jīng)忘了之前文本上的內(nèi)容了。 如果使用seq2seq+注意力的方法,他在逐字逐句閱讀德語文本的時(shí)候,會(huì)寫下關(guān)鍵詞。然后,利用這些關(guān)鍵詞,將文本翻譯成英語。 在模型中,注意力會(huì)為每個(gè)單詞打一個(gè)分,將焦點(diǎn)放在不同的單詞上。然后,基于softmax得分,使用編碼器隱藏狀態(tài)的加權(quán)和,來聚合編碼器隱藏狀態(tài),以獲得語境向量。 注意力層的實(shí)現(xiàn)可以分為6個(gè)步驟。 第一步:準(zhǔn)備隱藏狀態(tài) 首先,準(zhǔn)備第一個(gè)解碼器的隱藏狀態(tài)(紅色)和所有可用的編碼器的隱藏狀態(tài)(綠色)。在我們的例子中,有4個(gè)編碼器的隱藏狀態(tài)和當(dāng)前解碼器的隱藏狀態(tài)。 ![]() 第二步:獲取每個(gè)編碼器隱藏狀態(tài)的分?jǐn)?shù) 通過評(píng)分函數(shù)來獲取每個(gè)編碼器隱藏狀態(tài)的分?jǐn)?shù)(標(biāo)量)。在這個(gè)例子中,評(píng)分函數(shù)是解碼器和編碼器隱藏狀態(tài)之間的點(diǎn)積。 ![]() decoder_hidden = [10, 5, 10] encoder_hidden score --------------------- [0, 1, 1] 15 (= 10×0 + 5×1 + 10×1, the dot product) [5, 0, 1] 60 [1, 1, 0] 15 [0, 5, 1] 35 在上面的例子中,編碼器隱藏狀態(tài)[5,0,1]的注意力分?jǐn)?shù)為60,很高。這意味著要翻譯的下一個(gè)詞將受到這個(gè)編碼器隱藏狀態(tài)的嚴(yán)重影響。 第三步:通過softmax層運(yùn)行所有得分 我們將得分放到softmax函數(shù)層,使softmax得分(標(biāo)量)之和為1。這些得分代表注意力的分布。 ![]() encoder_hidden score score^----------------------------- [0, 1, 1] 15 0 [5, 0, 1] 60 1 [1, 1, 0] 15 0 [0, 5, 1] 35 0 需要注意的是,基于softmaxed得分的score^。注意力僅按預(yù)期分布在[5,0,1]上。實(shí)際上,這些數(shù)字不是二進(jìn)制數(shù),而是0到1之間的浮點(diǎn)數(shù)。 第四步:將每個(gè)編碼器的隱藏狀態(tài)乘以其softmax得分 將每個(gè)編碼器的隱藏狀態(tài)與其softmaxed得分(標(biāo)量)相乘,就能獲得對(duì)齊向量。這就是發(fā)生對(duì)齊機(jī)制的地方。 ![]() encoder_hidden score score^ alignment---------------------------------------- [0, 1, 1] 15 0 [0, 0, 0] [5, 0, 1] 60 1 [5, 0, 1] [1, 1, 0] 15 0 [0, 0, 0] [0, 5, 1] 35 0 [0, 0, 0] 由于注意力分?jǐn)?shù)很低,除了[5,0,1]之外的所有編碼器隱藏狀態(tài)的對(duì)齊都減少到了0。這意味著,我們可以預(yù)期,第一個(gè)被翻譯的單詞,應(yīng)該與帶有[5,0,1]嵌入的輸入單詞匹配起來。 第五步:將對(duì)齊向量聚合起來 將對(duì)齊向量聚合起來,得到語境向量。 ![]() encoder_hidden score score^ alignment---------------------------------------- [0, 1, 1] 15 0 [0, 0, 0] [5, 0, 1] 60 1 [5, 0, 1] [1, 1, 0] 15 0 [0, 0, 0] [0, 5, 1] 35 0 [0, 0, 0]context = [0+5+0+0, 0+0+0+0, 0+1+0+0] = [5, 0, 1] 第六步:將語境向量輸入到解碼器中 這一步怎么做,取決于模型的架構(gòu)設(shè)計(jì)。在接下來的示例中,會(huì)看到在模型架構(gòu)中,解碼器如何利用語境向量。 ![]() 整體的運(yùn)行機(jī)制,如下圖所示: ![]() 那么,注意力機(jī)制是如何發(fā)揮作用的呢? 反向傳播。反向傳播將盡一切努力確保輸出接近實(shí)際情況。這是通過改變RNN中的權(quán)重和評(píng)分函數(shù)(如果有的話)來完成的。 這些權(quán)重將影響編碼器的隱藏狀態(tài)和解碼器的隱藏狀態(tài),進(jìn)而影響注意力得分。 谷歌神經(jīng)機(jī)器翻譯如何應(yīng)用注意力機(jī)制?在介紹谷歌神經(jīng)機(jī)器翻譯模型之前,還需要補(bǔ)補(bǔ)課,看一下另外兩個(gè)模型。 Bengio團(tuán)隊(duì)的研究 這是一個(gè)具有雙向編碼器的seq2seq+注意力模型,以下是模型架構(gòu)的注意事項(xiàng): 1、編碼器是一個(gè)雙向(正向+反向)門控循環(huán)單元(BiGRU)。解碼器是一個(gè)GRU,它的初始隱藏狀態(tài),是從反向編碼器GRU的最后隱藏狀態(tài)修改得來的向量。 2、注意力層中的評(píng)分函數(shù)使用的是additive/concat。 3、到下一個(gè)解碼器時(shí)間步的輸入是來自前一個(gè)解碼器時(shí)間步(粉紅色)的輸出和來自當(dāng)前時(shí)間步(深綠色)語境向量之間的串聯(lián)。 ![]() 這個(gè)模型架構(gòu),在WMT’14英語-法語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是26.75。 (論文鏈接在文末) 相當(dāng)于在將德語文本翻譯成英語的時(shí)候,用了兩個(gè)翻譯員。 翻譯員A,在逐字逐句閱讀德語文本的時(shí)候,會(huì)寫下關(guān)鍵詞。翻譯員B,在倒著逐字逐句閱讀德語文本的時(shí)候,寫下關(guān)鍵詞。 這兩個(gè)翻譯員,會(huì)定期討論他們?cè)谟懻撝伴喿x的每一個(gè)單詞。 讀完德語文本之后,翻譯員B會(huì)根據(jù)他們兩個(gè)之間的討論,以及選擇的關(guān)鍵詞,將文本翻譯成英語。 在這里,翻譯員A,是正向RNN,翻譯員B,是反向RNN。 斯坦福大學(xué)團(tuán)隊(duì)的研究 與Bengio等人的模型相比,斯坦福大學(xué)團(tuán)隊(duì)提出的模型架構(gòu),更具有概括性,也更加簡單。要點(diǎn)如下: 1、編碼器是一個(gè)雙層的LSTM網(wǎng)絡(luò)。解碼器也具有相同的架構(gòu),它初始隱藏狀態(tài)是最后的編碼器隱藏狀態(tài)。 2、他們模型的評(píng)分函數(shù)有四種,分別是:additive/concat、dot product、location-based和’general’。 3、當(dāng)前解碼器時(shí)間步的輸出與來自當(dāng)前時(shí)間步的語境向量之間的串聯(lián),會(huì)輸入到前饋神經(jīng)網(wǎng)絡(luò)中,來得出當(dāng)前解碼器時(shí)間步的最終輸出(粉紅色)。 (論文鏈接在文末) ![]() 這個(gè)模型架構(gòu),在WMT’15英語-德語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是25.9。 簡單來說,這是一個(gè)采用雙層堆疊編碼器的seq2seq+注意力模型。 在將德語文本翻譯到英語時(shí),翻譯員A一樣在閱讀德語文本的時(shí)候,寫下關(guān)鍵詞。在這里,翻譯員B比翻譯員A要更專業(yè),他也會(huì)閱讀同樣的德語文本,并寫下關(guān)鍵詞。 主要注意的是,翻譯員A閱讀的每個(gè)單詞,都要向翻譯員B報(bào)告。完成閱讀后,他們會(huì)根據(jù)他們選擇的關(guān)鍵詞,將文本翻譯成英語。 谷歌的神經(jīng)機(jī)器翻譯模型 谷歌神經(jīng)機(jī)器翻譯,集兩者之大成,但受Bengio等人的模型影響多一點(diǎn)。要點(diǎn)是: 1、編碼器由8個(gè)LSTM組成,其中第一個(gè)是雙向的(輸出是連接的),連續(xù)層的輸出之間有殘差連接(從第3層開始)。解碼器是8個(gè)單向LSTM的獨(dú)立堆棧。 2、評(píng)分函數(shù)使用的是additive/concat。 3、解碼器下一個(gè)時(shí)間步的輸入是前一個(gè)時(shí)間步(粉紅色)的輸出與當(dāng)前時(shí)間步(深綠色)的語境向量之間的串聯(lián)。 ![]() 這個(gè)模型架構(gòu),在WMT’14英語-法語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是38.95。在WMT’14英語-德語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是24.17。 (論文鏈接在文末) 這是一個(gè)具有8個(gè)堆疊編碼器的seq2seq(+雙向+殘差連接)+注意力的模型。 相當(dāng)于在將德語文本翻譯成英語的時(shí)候,用了八個(gè)翻譯員,分別是翻譯員A、B、C…H。每一位翻譯員都閱讀相同的德語文本。 對(duì)于文本中的每一個(gè)單詞,翻譯員A都會(huì)給翻譯員B分享他的發(fā)現(xiàn),翻譯員B會(huì)改進(jìn)這些發(fā)現(xiàn),然后與翻譯員C分享,一直重復(fù)這個(gè)過程,直到翻譯員H結(jié)束。 此外,在閱讀德語文本的時(shí)候,翻譯員H會(huì)基于他知道的和收到的信息寫下關(guān)鍵詞。 每個(gè)人都讀完了這個(gè)英語文本后,翻譯員A就會(huì)被告知翻譯第一個(gè)單詞。 首先,他試圖回憶文本內(nèi)容,給出翻譯,然后與翻譯員B分享他的答案,翻譯員B改進(jìn)答案并與翻譯員C分享,一直重復(fù)這個(gè)過程,直到翻譯員H結(jié)束。 然后,翻譯員H會(huì)根據(jù)他寫下的關(guān)鍵詞給出第一個(gè)詞的翻譯。然后重復(fù)這個(gè)過程,直到翻譯結(jié)束。 相關(guān)資料推薦Yoshua Bengio等人研究的論文 Neural Machine Translation by Jointly Learning to Align and Translate https:///abs/1409.0473 斯坦福大學(xué)團(tuán)隊(duì)的論文 Effective Approaches to Attention-based Neural Machine Translation https:///abs/1508.04025 谷歌神經(jīng)機(jī)器翻譯模型的論文 Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation https:///abs/1609.08144 其他相關(guān)論文推薦: Recurrent Models of Visual Attention https://papers./paper/5542-recurrent-models-of-visual-attention.pdf Recurrent Continuous Translation Models https://www./anthology/D13-1176 Attention Is All You Need https:///abs/1706.03762 Sequence to Sequence Learning with Neural Networks https:///abs/1409.3215 教程資源: TensorFlow’s seq2seq Tutorial with Attention (Tutorial on seq2seq+attention) https://github.com/tensorflow/nmt 入門博客文章: Lilian Weng’s Blog on Attention (Great start to attention) https://lilianweng./lil-log/2018/06/24/attention-attention.html#a-family-of-attention-mechanisms Jay Alammar’s Blog on Seq2Seq with Attention (Great illustrations and worked example on seq2seq+attention) https://jalammar./visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/ 寫這篇文章的,是一位名叫Raimi Bin Karim新加坡人,現(xiàn)在是AI Singapore中的一名AI學(xué)徒。AI Singapore,是一家為新加坡培育人工智能產(chǎn)業(yè)與人才的機(jī)構(gòu)。 原文鏈接: https:///attn-illustrated-attention-5ec4ad276ee3 — 完 — |
|
|