馬 林
(商丘職業技術學院 河南 商丘 476100)
循環神經網絡[1]大多應用于對序列數據的處理上,神經元可以將某一刻輸出的數據作為另一刻的輸入輸進神經元,由于其網絡結構具有較好的串聯性,可以很好地和時間序列數據相適應,從而使二者保持良好的依賴性。因為RNN 展開以后,能夠獲得重復的結構和共享的參數,網絡參數在很大程度上較少,使復雜性相對降低。此外,由于共享參數還可以使網絡模型在長度不等的數據上得以擴展,使得RNN 輸入的數據長度可以是非定長的。起初,RNN 的設計目標是針對學習長期的依賴性,但很多實踐證明,標準的RNN 在數據的長期保存中面臨很大的困難。
為解決長期依賴的問題,學者們選擇在實踐中效果較好的LSTM[2-3]。此后,門控循環單元[4-5]在LSTM 的基礎上進行了改進。LSTM 和GRU 均通過門控機制來保證長期依賴的。雙向循環神經網絡(Bi-directional LSTM,BLSTM)的提出使其在音頻識別上取得一定成果[6]。
本文主要對RNN、LSTM 和GRU 3 種模型的結構特點、各個計算組件的功能進行了介紹,并加入目前流行的注意力機制,增強模型的性能,設置實驗進行對比。
雖然LSTM 記憶能力較長,又不易發生梯度彌散現象,但因為LSTM 結構較為復雜,計算代價成本較高。學者發現,通過設置LSTM 中遺忘門的門控可以達到更好的效果。其中,GRU 就是其中之一,見圖1。
傳統的RNN 只能作用于同步的序列到序列模式。作為RNN 的變種,Seq2Seq 模型[7]被提出用于解決輸入和輸出序列不等長的問題。Seq2Seq 模型包括編碼器和解碼器兩部分,編碼器用于編碼序列的信息,將任意長度的序列信息編碼到一個向量c 里,而解碼器得到上下文信息向量c之后可以將信息解碼,并輸出為序列。
單獨的RNN 模型雖然可以得到翻譯結果,但由于在翻譯某個詞的時候沒有針對性,導致翻譯結果不準確,尤其在句子較長的時候,翻譯結果往往不理想。注意力機制[8]通過算法對生物注意力進行模擬,在機器翻譯領域有較好的應用[9-10]。它可以動態調整特征的權重,改變不同特征對輸出的貢獻率,得到更好的預測結果。
模型Seq2Seq 包含了Encoder、Decoder 和中間狀態向量。具體來說,Encoder 通過讀取源序列來構建一個向量,即處理后表示句子含義的數字向量,Decoder 對這個表示句子含義的數字向量進行處理,產生一個輸出向量。
由于長序列信息量較多,傳統的Encoder-Decoder 模型的效果欠佳。對此,可通過注意力機制,增加編碼器和解碼器的信息傳遞通道,解碼時會再次使用編碼階段GRU單元的每個輸出狀態。通過注意力機制,神經機器翻譯能處理更長的序列。引入注意力機制的Encoder-Decoder 模型,解碼時,會分散部分注意力不同的單詞,而不會改變編碼階段模型。但除保留最終的隱藏層狀態向量外,還要保留每個單詞的輸出向量。
本文模型采用雙向GRU 加注意力機制的Encoder-Decoder 模型,使用spacy 分詞處理源序列的德文語句和目標序列的英文語句。將文本轉化為詞語序列,使用了PyTorch 中embedding 函數將每個單詞轉換為256 維的詞向量,作為德文和英文嵌入層參數的初始值。
模型的構建需要以此實現其嵌入層、編碼器、解碼器、softmax 損失層、參數梯度計算與優化等。下面以Python3.6+PyTorch1.8.0 為例,給出了各部分的核心代碼,編碼器代碼如下。
Step1 進行詞嵌入
Step2 送入到雙向GRU 網絡中進行前向傳播,并接受返回結果
Step3 對隱藏層的輸出結果進行一次全連接
在編碼器代碼步驟中,Step1 將每個句子的單詞使用256 維的一個向量來標識;在Step2 中,返回結果有兩個,一個是每個句子對應單詞的輸出,另一個是GRU 網絡針對每個句子的隱藏層結果;在Step3 中,因為在編碼器中使用的是雙向網絡,隱藏層狀態的維度和解碼器維度不同,所以要進行一次全連接,將隱藏層的輸出結果的維度轉換為解碼器中隱藏層需要的維度。解碼器的代碼如下。
Step1 進行詞嵌入
Step2 使用注意力機制計算編碼器輸出狀態的系數
Step3 使用Step2 中計算出的系數與編碼器輸出的狀態進行加權相乘操作
Step4 將Step3 得到的匯總狀態和第一步中得到的詞向量進行連接,得到最終送入GRU 網絡的輸入值
Step5 將連接好的數據送入GRU 網絡
Step6 全連接層得到預測結果
在解碼器代碼中,Step1 將每個句子的單詞使用256維的一個向量來標識;在Step5 時,隱藏層狀態使用編碼器最后一次輸出的狀態,然后進行計算,并接受網絡計算結果,包括網絡輸出值和下一次解碼器隱藏層輸出狀態值;在Step6 中,將編碼器匯總的輸出狀態值、當前的詞向量值和解碼器GRU 網絡輸出的狀態值進行連接,送入全連接層,得到當前解碼器層預測的結果值,并返回。損失計算與優化訓練代碼如下。
for epoch in range(N_EPOCHS):
for i,batch in enumerate(iterator):
Step1 當前批次中獲取源句子和翻譯后的句子
Step2 使用編碼器對源句子進行前向傳遞
for t in range(1,max_len):
Step3 對翻譯后句子的每個單詞調用解碼器進行前向傳遞,并接受預測結果
Step4 使用交叉熵損失函數計算預測值和翻譯句子目標值之間的誤差
Step5 依據計算的誤差,進行反向傳播并更新梯度操作
在以上代碼中,Step3 在解碼器的測試階段,以貪心算法每一步輸出概率最大的詞作為最終結果;但在訓練階段,由于有真實標簽值作為金標準,比貪心算法得到的結果更為準確,所以在解碼器的訓練階段,每一步輸出以真實結果和貪心算法各0.5 的概率得到最終進入下個隱藏層的輸入值。以下為注意力層代碼。
Step1 擴展隱藏層狀態值維度,并對句子長度進行復制
Step2 將隱藏層狀態值,和編碼器輸出的狀態值進行相連
Step3 將上一步得到的數據送入兩個全連接層
Step4 對得到的編碼器狀態值的系數進行一次softmax 操作然后輸出
在以上代碼中,Step2 中,第1 個全連接層隱藏層神經元個數為解碼器隱藏層個數,第2 個全連接隱藏層個數為1,這樣計算每個編碼器輸出狀態值的系數。
在訓練網絡時,本文采取最小驗證誤差法,使訓練與驗證交替進行來防止網絡的過擬合現象。當網絡開始進入過擬合時,訓練誤差會繼續下降,而驗證誤差則會呈上升趨勢。對此,保存驗證誤差取最小值時的網絡參數作為最終的訓練結果,以保證網絡性能。
本文使用Python3.6 和PyTorch1.8.0 進行模型構建,模型在CPU Intel Core i5 機器上進行訓練。實驗選取了機器翻譯中經常使用的torchtext 自帶的標準數據集Multi30k德英文翻譯數據集作為實驗數據,其中包含了2.9萬條德英文翻譯(平均長度約13 個單詞),使用spycy創建分詞器,將一個句子轉換為組成該句子的單個符號。實驗運用Multi30k德英文翻譯數據集的訓練集進行訓練,并在校驗集上對模型進行選擇,選擇最優的模型對測試集進行測試,并匯報測試結果。實驗采用BLEU 指標值作為評價指標。
本文使用的Seq2Seq 模型中,編碼器選擇單層雙向GRU 網絡,解碼器選擇單層GRU 網絡,并在運行過程中,分別比較使用和不使用注意力機制。模型其他參數如下:隱藏層的維度為512,設置詞嵌入層維度為256,訓練一共使用3 000 個句子對,每一批訓練128 個,訓練輪數設定為50 次(為了節省時間,僅以10%的句子進行訓練:GRU 模型的單輪訓練時間約為20 min,加入注意力機制后,訓練一輪約為50 min)。為防止模型計算中出現過擬合現象,在訓練的過程中還引入dropout 策略,其值設定為0.5。
分別使用雙向GRU 和RNN,并對比使用和不使用注意力機制后,不同條件下的模型損失函數曲線見圖2,評估指標BLEU 見圖3。
從上圖可以看出,在不使用注意力機制的情況下,使用GRU 網絡和RNN 網絡相比,在最初的EPOCH 訓練中,損失函數收斂速度基本一致,但是當在往后進行訓練的時候,使用GRU 網絡的損失函數收斂速度明顯加快。同時,從圖3 中可以看出,BLEU 的指標也要明顯高于RNN 網絡,說明在Seq2Seq 模型中,使用GRU 網絡的效果要優于使用RNN網絡,這是因為GRU 網絡可以避免梯度消失的問題,特別對較長的翻譯。
對比使用注意力機制和不使用注意力機制可以看出,無論是GRU 網絡還是RNN 網絡,在引入注意力機制后,模型的效果都得到了很大提高,損失函數收斂的速度更快,BLEU 的指標更高,這是因為注意力機制解決了傳統編碼器解碼器模型的一些傳統缺陷。在模型上,解碼器利用了更多編碼器的結果,在翻譯的過程中,利用了全部編碼器的輸出結果,并對這些結果依據一定的機制賦予一定的權重,使得在對單詞進行翻譯的時候,可以有選擇地從源句子中選擇某些更重要的單詞進行翻譯。這些就是注意力機制能大幅提高翻譯系統性能的主要原因[11]。從圖中還可以看出,在同時引入注意力機制的情況下,GRU 網絡依然優于RNN 網絡的效果。
綜合上面的實驗結果可以看出,在Seq2Seq 模型中,GRU 網絡由于可以有效解決梯度消失問題,其性能要好于RNN 網絡。在Seq2Seq 模型中,引入注意力機制,可以大幅度提升翻譯系統的性能。
隨著互聯網的高速發展,機器翻譯成為當前的研究熱點。本文將注意力機制和雙向GRU 應用到Seq2Seq 模型中,并通過實驗驗證其對提高機器翻譯性能的有效性,克服了傳統Seq2Seq 模型無法解決長距離依賴的問題,并加入注意力機制,增加翻譯的準確度,損失函數收斂加快,BLEU性能有較大提高。今后,會進一步加大訓練的信息量,對神經網絡的結構做更深層次的優化,并結合更開闊的方法,實現對翻譯效果的更高要求。