可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)
可視化神經機器翻譯模型(基于注意力機制的Seq2seq模型)
??序列到序列模型是深度學習模型,在機器翻譯、文本摘要和圖像字幕等任務中取得了很大的成功。谷歌翻譯在2016年底開始在生產中使用這樣的模型。兩篇開具有創性的論文對該模型進行了解釋(Sutskever et al., 2014, Cho et al., 2014)。
??然而我發現,要想很好地理解這個模型并實現它,需要理解一系列建立在彼此基礎之上的概念。我想,這些概念如果能直觀地表達出來,會更容易理解。這也是我在這篇文章中要做的事情。當然,你需要對深度學習有一定的了解才能較好地理解這篇文章。希望閱讀上述兩篇論文以及文末鏈接中的帖子能夠有所幫助。
??序列到序列模型可以對對象(單詞、字母、圖片的特征等等)組成的序列進行處理,并輸出由這些對象所組成的另一個序列。訓練好的模型的工作方式如下:
??在神經機器翻譯中,序列是一系列的單詞,并且一個接一個的處理。輸出同樣是一系列的單詞。
剖析算法核心
??該算法的核心部分由一個編碼器和一個解碼器組成。
??編碼器對輸入序列中的每個元素進行處理,它將捕捉到的信息編譯成一個向量(稱為上下文)。在處理完整個輸入序列后,編碼器將上下文發送到解碼器,解碼器開始逐項生成輸出序列。
??同樣也適用于機器翻譯之中。
??在機器翻譯的情況下,上下文是一個向量(基本上是由數字組成的數組)。編碼器和解碼器往往都是循環神經網絡。(一定要看Luis Serrano的A friendly introduction to Recurrent Neural Networks,了解RNNs的相關知識)。
??上下文是一個浮點數組成的向量。在本篇文章的后面,我們將通過給數值較高的單元格分配更亮的顏色來對向量進行可視化。
??您可以在建立模型時設置上下文向量的大小。它基本上是編碼器RNN中隱層單元的數量。這些可視化示例中展示了一個長度為4的向量,但在實際應用中,上下文向量的大小會是256、512或1024。
??根據設計,一個RNN在每一步均需要兩個輸入:一個輸入(在編碼器中指的是來自輸入句子的一個單詞),和一個隱藏狀態。但是,此處的詞,需要用一個向量來表示。為了將一個詞轉化為一個向量,我們使用“詞嵌入”算法。該算法將單詞轉化到向量空間,并捕捉到了很多單詞的意義/語義信息(例如 king -man + woman = queen)。
??我們需要在處理之前將輸入的單詞變成向量。該轉換可以用詞嵌入算法來完成。我們可以使用預先訓練的詞嵌入模型,或者在我們的數據集上訓練我們自己的詞嵌入模型。詞嵌入向量大小通常是200或300維,為了簡單起見,我們展示的是大小為4的向量。
??現在我們已經介紹了主要的向量/張量,讓我們回顧一下RNN的機制,并建立一種可視化語言來描述這些模型。
??RNN的下一個步驟是取第二個輸入向量和隱藏狀態#1來創建該時刻步驟的輸出。在后面的文章中,我們會用諸如這樣的動畫來描述神經機器翻譯模型中的向量。
??在下面的可視化過程中,編碼器或解碼器的每一次運行結果都是RNN模型處理其輸入并在該時刻產生的輸出。由于編碼器和解碼器都是RNN,所以每個RNN在每次做一些處理的時候,它都會根據自己當前的輸入以及可見的前期輸入來更新自己的隱藏狀態。
??讓我們看看編碼器的隱藏狀態。注意最后一個隱藏狀態實際上是我們傳遞給解碼器的上下文。
??解碼器也有一個隱藏的狀態,它從一個步驟傳遞到下一個步驟。只是因為我們現在關注的是模型的主要部分,所以沒有在這個圖形中可視化。
??現在讓我們看看另一種可視化序列到序列模型的方法。這個動畫會讓你更容易理解這些模型。這就是所謂的“非滾動”視圖,在這個視圖中,我們不顯示一個解碼器,而是逐步顯示每一個步驟的執行過程。這樣我們就可以查看每個步驟的輸入和輸出。
現在來關注以下內容
??上下文向量是這類模型的瓶頸,這給模型處理長句子帶來了挑戰。Bahdanau et al., 2014和Luong et al., 2015提出了一個解決方案。這些論文引入并完善了一種名為“注意力”的技術,極大的提高了機器翻譯的質量。注意力幫助模型根據其自身的需要對輸入序列的相關部分予以關注。
??在步驟7,注意機制使解碼器在生成英文翻譯之前,將注意力集中在 “étudiant”(法語中的 “學生”)這個詞上。這種放大輸入序列中相關部分信號的能力,使得注意力模型比沒有注意力的模型產生更好的結果。
??讓我們繼續看一下這種高層次抽象的注意力模型。注意力模型與經典的序列到序列模型主要有兩個方面的不同:
??首先,編碼器將更多的數據傳遞給解碼器。編碼器不再是將編碼階段的最后一個隱藏狀態傳遞給解碼器,而是將所有隱藏狀態傳遞給解碼器。
??其次,注意力解碼器在產生輸出之前會多做一個步驟。為了對輸入序列中與當前解碼步驟相關的部分予以關注,解碼器做了以下工作。
1、查看它接收到的編碼器隱藏狀態集–每個編碼器隱藏狀態都與輸入句子中的某個詞有強關聯。
2、給每個隱藏狀態打分(我們先忽略打分是如何進行的)。
3、將每個隱藏狀態乘以它的softmax得分,從而放大高分的隱藏狀態,淹沒低分的隱藏狀態。
??這個評分機制運作在解碼器側的每個步驟。
??現在讓我們用下面的可視化方式把整個事情整合起來,看看注意力過程是如何運作的。
1、注意力解碼器RNN接收到兩部分信息:<END>標簽的嵌入,以及一個初始化的解碼器隱藏狀態。
2、RNN對其輸入進行處理,產生一個輸出和一個新的隱藏狀態向量(h4)。其中輸出被丟棄。
3、注意力步驟。我們使用編碼器隱藏狀態和h4向量來計算當前步驟的上下文向量(C4)。
4、我們將h4和C4拼接成一個向量。
5、我們將這個向量通過一個前饋神經網絡(一個與模型共同訓練的網絡)。
6、前饋神經網絡的輸出表示當前步驟的輸出單詞。
7、重復下一個時間步驟。
??我們以另一種方式觀察在每一個解碼步驟中注意的是輸入句子的哪一部分。
??請注意,這個模型并不是無腦地將輸出處的第一個字與輸入處的第一個字匹配。它實際上從訓練階段就學會了如何匹配該語言對中的單詞(在我們的例子中是法語和英語)。關于這種機制的精確性,我們舉一個論文中的例子。
??你可以看到模型在輸出"European Economic Area"時是如何正確關注的。在法語中,這些詞的順序與英語相反(“européenne économique zone”)。而句子中的其他詞的順序卻是相同的。
??如果你覺得你已經準備好學習實現這個模型,一定要學習TensorFlow的神經機器翻譯(seq2seq)教程。
??優秀的教程:
[1] Natural Language Processing Nanodegree Program
[2] Attention Is All You Need
[3] Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)
總結
以上是生活随笔為你收集整理的可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通俗易懂的Word Embeddings
- 下一篇: 获取列表中最大N个数的索引