NLP——機器翻譯中的Seq2Seq

框架

在這裏插入圖片描述

簡介

Seq2Seq,全稱Sequence to Sequence(序列到序列),它是一種通用的編碼器-解碼器框架。這個框架最初是爲了機器翻譯構建的,但是後來也廣泛應用到各種其他任務,包括文本摘要、會話建模和圖像字幕等。最基礎的 Seq2Seq模型包含了三個部分,即Encoder、Decoder以及連接兩者的中間語義向量,Encoder通過學習輸入,將 其編碼成一個固定大小的語義向量C,繼而將C傳給Decoder,Decoder再通過對狀態向量C的學習來進行輸出。
在這裏插入圖片描述

Encoder

編碼器(Encoder)是將輸入序列通過非線性變換編碼成一個指定長度的向量C(中間語義表示),得到C 有多種方式,最簡單的方法就是把Encoder的最後一個隱狀態賦值給C,還可以對最後的隱狀態做一個變換得到 C,也可以對所有的隱狀態做變換。
在RNN中,當前時間的隱狀態由上一時間的狀態和當前時間輸入決定的,即:
在這裏插入圖片描述
獲得了各個時間段的隱藏層以後,再將隱藏層的信息彙總,生成最後的語義向量:
在這裏插入圖片描述
另一種最簡單的方法就是將最後的隱藏層作爲語義向量C:
在這裏插入圖片描述

Decoder

可以看做編碼的逆過程。這個階段,根據給定的語義向量C和之前已經生成的輸出序列y1,y2,…,yt-1來預測下 一個輸出的單詞yt,即:
在這裏插入圖片描述
也可以寫作:
在這裏插入圖片描述
在RNN中,也可以簡化成:
在這裏插入圖片描述
其中s是輸出RNN(即RNN解碼器)中的隱藏層,C代表之前編碼器得到的語義向量,yt-1表示上個時間段 的輸出,反過來作爲這個時間段的輸入。g可以是一個非線性的多層神經網絡,產生詞典中各個詞語屬於yt的概率。

CNN-Seq2Seq

早期大多數場景下使用的Seq2Seq模型是基於RNN構成的,雖然取得了不錯的效果,但也有一些學者發現使用CNN來替換Seq2Seq中的encoder或decoder可以達到更好的效果,Facebook提出的完全使用CNN來構成 Seq2Seq模型,用於機器翻譯,超越了谷歌提出的基於LSTM機器翻譯的效果。CNN-Seq2Seq的優勢主要體現在以下幾個方面:
• 捕獲long-distrance依賴關係。底層的CNN捕捉相距較近的詞之間的依賴關係,高層CNN捕捉較遠詞之間的依賴關係。通過層次化的結構,實現了類似RNN(LSTM)捕捉長度在20個詞以上的Sequence的依賴關係的功能。
• 效率高。假設一個Sequence長度爲n,採用RNN(LSTM)對其進行建模需要進行n次操作,時間複雜度O (n)。相比,採用層疊CNN只需要進行n/k次操作,時間複雜度O(n/k),k爲卷積窗口大小。
• 並行化實現。RNN對Sequence的建模依賴於序列的歷史信息,因此不能並行實現。相比,層疊CNN對整個 Sequence進行卷積,不依賴序列歷史信息,可以並行實現,特別是在工業生產,面臨處理大數據量和實時要 求比較高的情況下,模型訓練更快。

Seq2Seq模型缺點

Seq2Seq模型雖然非常經典,但是侷限性也非常大。較大的侷限性就在於編碼和解碼之間的聯繫就是一個固 定長度的語義向量C。也就是說,編碼器要將整個序列的信息壓縮進一個固定長度的向量中去。這樣做有兩個弊端:
1)語義向量C無法完全表示整個序列的信息
2)先輸入的內容攜帶的信息會被後輸入的信息稀釋掉
輸入序列越長,這個問題就越嚴重。這就使得在解碼的時候一開始就沒有獲得輸入序列足夠的信息,那麼 解碼時準確率也會大打折扣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章