陳家樂,張艷玲
(廣州大學 計算機科學與網絡工程學院,廣東 廣州 510006)
自2014年以后,端到端的神經機器翻譯(end to end neural machine translation)質量較統計機器翻譯有了顯著提升[1],端到端的訓練使得深度學習方法區別于傳統機器學習方法,成為了自然語言處理的強大工具[2]。Google、有道、百度等商用在線機器翻譯系統核心技術均由統計機器翻譯轉型為神經機器翻譯。端到端的編碼器-解碼器(Encoder-Decoder)[3]模型結構成為神經機器翻譯的主流模型[4]。Google首次提出基于Encoder-Decoder結構的seq2seq[5](sequence to sequence)模型。其基本工作原理就是編碼器將輸入序列轉換為中間向量C,解碼器將中間向量C轉換為輸出序列。seq2seq在編碼器和解碼器中均使用循環神經網絡(recurrent neural networks,RNN),理論上RNN可以解決長句遠距離信息依賴的問題[6],但在實際應用時反向傳播過程中存在梯度爆炸和梯度消失的問題。梯度爆炸會導致模型無法收斂;梯度消失會導致模型捕捉不到長距離項的依賴信息。梯度爆炸一般可以使用梯度裁剪或權重正則化處理。梯度消失目前最好的處理方法是使用門控單元來構建RNN。其中,應用最廣的門控單元是長短時記憶(long short-term memory,LSTM)和門控循環單元(gated recurrent unit,GRU)[4]。雖然應用門控單元使得RNN能有效捕捉到長距離項的依賴信息,但是由于句子中任意單詞對生成某個目標單詞的影響占比是相同的,所以即使采用了門控單元,seq2seq模型依然在長句的翻譯質量上顯著下降。為了優化長句的翻譯質量,Bahdanau等人[7]于2014年首次將注意力機制應用于NLP領域,翻譯效果有了進一步提升。谷歌團隊[8]拋棄RNN和CNN等網絡結構,僅僅采用注意力機制進行機器翻譯,在翻譯質量上取得了顯著的效果,因此注意力機制成為了神經機器翻譯中的研究熱點。但是,由于通用翻譯接口對垂直領域缺乏針對性,同一個詞匯在不同的語義環境下有不同的翻譯結果,而通用翻譯則無法識別該詞匯所在的語義環境,從而使得翻譯效果不佳。并且垂直領域下的專業詞匯繁多且復雜,若沒有對應的詞匯的語料訓練,會讓最終的訓練模型對含有該詞匯的句子沒有好的翻譯效果。這就是現階段對垂直領域的語句翻譯效果不好的原因。所以針對某一領域實現翻譯成為了當下重要的研究方向。
該文將收集與計算機算法類相關的中英雙語例句文本,利用Word2Vec算法生成詞向量,將詞向量嵌入GNMT[9]訓練帶有注意力機制的LSTM seq2seq的中英翻譯模型。以此來優化計算機算法類語料的翻譯效果,為此后垂直領域的神經機器翻譯提供一個可行的優化思路。
數據樣本的好壞很大程度上決定了模型的訓練效果,要實現計算機算法類資料的中英翻譯,就需要獲取與計算機算法類相關的中英雙語例句。現在各大在線翻譯網站能夠檢索特定關鍵詞的中英雙語例句,但是大多數的雙語例句沒有分門別類。為了得到最符合計算機算法類的中英雙語例句,需要收集計算機算法類相關度高的關鍵詞。
該文通過中文書籍《算法導論第三版》(Introduction to Algorithms Third Edition)和計算機算法題網站力扣(LeetCode)收集關鍵詞。收集了1 618個關鍵詞在百度翻譯、有道翻譯、知網例句進行檢索并爬取,最終獲取98 120條中英雙語例句作為模型訓練的數據基礎。
獲取的數據還不能直接用于數據訓練,中文例句詞匯與詞匯之間并沒有明確的分隔;英文例句雖然詞匯間有天然的空格分割,但是標點符號與詞匯間仍然有連接,因此也需要進行分詞處理。分詞處理完成后還需要獲取訓練所需的數據集和詞匯表。
英文存在大小寫的區別,而大寫的寫法和小寫的寫法指的是同一個單詞,例如“The”與“the”。經過小寫化處理后,獲取詞集時能夠減少大量的重復單詞,從而降低訓練的成本,一定程度上優化訓練效果。還需要對英文文本分詞,將標點符號與詞匯間進行分隔。
中文分詞正確率會大大影響模型訓練的效果,因為分詞階段的錯誤在翻譯過程中將會被“放大”,放大的倍數約等于句子的平均長度[10]。jieba庫是一個簡單易用的漢語自然語言處理分詞庫,通過在全切分所得的所有結果中求某個切分方案S,使得P(S)最大的概率進行分詞。jieba分詞的算法流程為:(1)基于特定詞匯表構建字典樹,實現高效的詞圖掃描;(2)基于字典樹生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG);(3)采用了動態規劃尋找最大概率路徑,找出基于詞頻的最大切分組合;(4)對于未登錄詞,使用了Viterbi算法并采用了基于漢字成詞能力的HMM模型[11]。jieba分詞有三個分詞模式,分別是精確模式、全模式、搜索引擎模式。其中精確模式適合用于自然語言處理。
中文一詞多意的情況非常多,同一個句子在不同的語義環境下有不同的分詞方案,因此如果不制作對應的分詞詞典,會大大增加分詞出錯的概率。制作分詞詞典步驟如下:(1)對中文文本進行默認分詞;(2)人工將分詞出錯的詞匯添加到詞典中。
在模型訓練之前,首先要劃分訓練集、驗證集、測試集。其中訓練集用于模型訓練,驗證集和測試集用于衡量模型訓練的效果。該文采用的分割方式是生成長度為0~N-1(N為句子總數)的亂序序列,將亂序序列按14∶3∶3的比例進行分割,分別對應訓練集、驗證集、測試集。再根據分割后的亂序序列取出對應下標值的句子存入到對應的文件當中。
首先,定義三個標簽:表示語句的開頭,表示語句的結束。由于文本已經經過分詞處理,故只需按行讀取句子,根據空格進行分割就能夠獲取到詞匯,并且按照詞匯的頻率由高到底排序。
文本表示方法一直是自然語言處理研究范疇中的一個熱點問題,總體來講主要分為兩大類:獨熱編碼和分布式表示。
獨熱編碼(one-hot representation)又稱為一位有效編碼,這種編碼格式是建立一個全局完備的字典,但在計算上面臨著兩個問題,一個是這種表示方法的向量維度是字典的大小,而字典中的詞匯數目往往很大,從而在計算時避免不了維數災難的問題,給計算機帶來極大的負擔;另一個是這種表示只包含詞匯在字典中的索引和詞頻信息,未考慮詞的上下文信息,無法從向量上判斷兩個詞匯是否相似,不能為后續的模型訓練提供更多有用的信息。
分布式表示(distributed representation)是一種稠密、低維的實值向量表示,由Hinton[12]在1986年提出,能夠有效克服獨熱編碼的缺點。每個維度表示單詞的不同句法和語義特征。詞向量是一種詞匯的分布式表示形式,通過對文本語料庫進行訓練,將每個詞用N維的實值向量表示,向量可以看作空間上的一條線,通過計算向量之間形成的角度,就可以判斷兩個單詞之間的相似度。其中Word2Vec是一個可以快速訓練詞向量的算法。
Word2Vec算法是Tomas Mikolov帶領的研究團隊發明的[13]。其基本思想是利用上下文信息,即使用與當前詞相鄰的若干個詞,來生成當前詞的特征向量。其中包含了跳字模型(Skip-gram)和連續詞袋模型(CBOW)兩種訓練模型,CBOW是通過上下文來預測當前詞,而Skip-gram則相反,它是通過當前詞來預測上下文。同時,Word2Vec提供了兩套優化方法來提高詞向量的訓練效率,分別是Hierachy Softmax和Negative Sampling[14]。通過將訓練模型與優化方法進行組合可以得到4種訓練詞向量的架構。
通過Python中gensim庫里封裝的Word2Vec進行詞向量的訓練。主要的訓練參數說明如表1所示。

表1 Word2Vec訓練參數說明
使用訓練集作為訓練語料,主要的調試參數為詞向量的維度,固定參數:sg=1,min_count=1,work-ers=4,hs=1。其中參數window若設置得過小,將無法捕捉句子中較長距離的依賴信息,若設置得過大,將捕捉到過多的無效依賴,從而降低了有效依賴的權重,因此將固定window參數為8。通過將詞向量的維度設置為1,2,4,8,16,32,64,128,256,512進行訓練,從而探究詞向量維度對計算詞匯間文本相似度的影響。對于中文文本,將使用“算法”,“復雜度”,“排序”對模型進行測試。對于英文文本,將使用“algorithm”,“complexity”,“sort”對模型進行測試。
對不同詞向量維度模型進行相似度測試后,通過對前十的相似度詞匯的相似度取平均數畫出相似度變化折線,如圖1所示。

圖1 平均相似度變化折線
由圖1可以得出:同一個單詞,詞向量維度越高,計算所得的單詞相似度越低。通過對測試結果中的實際相似單詞進行分析,可以看出:當詞向量維度為1時,無論使用哪個詞匯進行測試的結果都是一樣的;當詞向量維度過低時,測試結果含有實際意義的詞匯較少;隨著詞向量維度的增加,相似度測試結果具有實際意義的詞匯漸漸變多。因此,剔除維度為1,2,4,8,16的詞向量,保留維度為32,64,128,256,512的詞向量進行下一步的翻譯模型訓練。
神經機器翻譯(neural machine translation,NMT)存在致命的缺點,即計算成本非常昂貴,并且大多數NMT系統對罕見詞的處理效果不好且在處理長句有翻漏的現象。谷歌發布的GNMT(Google’s neural machine translation)解決了上述問題,翻譯誤差平均降低了60%。在推理過程中采用低精度算法以及TPU進行計算還可以解決翻譯速度問題。為了更好地處理罕見詞,將罕見詞拆分為常見子詞單元分別進行處理。為了減少長句翻漏的現象,在波束搜索中使用長度規范化過程和覆蓋度懲罰機制[3]。使用Google在GitHub上開源的代碼訓練帶有注意力機制的兩層LSTM seq2seq模型,首先探究詞向量對模型訓練的影響,再探究隱藏單元數num_unit以及批尺寸batch_size對模型訓練的影響。最終選取最佳的參數進行訓練。具體實驗步驟為:
(1)使用詞向量維度為32,64,128,256,512進行訓練,選取效果最佳的詞向量維度進入下一個實驗;
(2)使用num_unit為32,64,128,256,512進行訓練,選取效果最佳的num_unit進入下一個實驗;
(3)使用batch_size為4,32,64,128,192,256進行訓練,選取效果最佳的batch_size;
(4)綜合實驗結果,選取最優參數進行訓練,直到模型不再優化為止。
模型訓練的環境如表2所示。

表2 模型訓練環境
ppl指的是困惑度(perplexity),是統計機器翻譯中的評價指標,用于評判機器翻譯的譯文是不是一個合理的語句。它是通過對概率平均數取倒數計算獲得,所以當模型的翻譯結果越合理,困惑度越低。
bleu(bilingual evaluation understudy)[15]是由IBM于2001年提出的一種文本評估算法,用來評估機器翻譯與專業人工翻譯之間的接近程度,核心思想就是當機器翻譯越接近人工翻譯,bleu分數越高,說明機器翻譯與人工翻譯之間越接近。
將使用詞向量維度為32,64,128,256,512進行模型訓練?;趐pl及bleu進行對照的折線變化如圖2所示。

圖2 不同詞向量維度模型的ppl及bleu對照折線變化
由圖2可見,隨著訓練步數的增大,ppl的變化越來越小,慢慢趨近于沒有變化。隨著詞向量維度的增大,最終的ppl變小。隨著訓練步數的增大,每個模型的bleu值都呈上升趨勢。在模型訓練中期,詞向量維度低的模型的bleu值超越了詞向量維度高的模型的bleu值,但只是暫時的,隨著訓練步數的增加,最終詞向量維度高的模型bleu值變大。
綜上所述,在詞向量維度取值為32,64,128,256,512時,詞向量維度為512時的模型訓練效果最優。并根據圖像顯示,繼續增大詞向量維度,模型有進一步優化的可能。
超參數num_unit指的是隱藏層單元數,過小的num_unit會使神經網絡的表達能力差,從而導致模型訓練效果不佳;而過大的num_unit會帶來過擬合并且訓練時間過長的缺點。由圖2可知,當詞向量維度為512時模型效果最優,因此對固定詞向量維度取為512,其他參數為默認參數,取num_unit為32,64,128,256,512進行模型訓練嘗試找到最佳的取值。基于ppl及bleu進行對照的折線變化如圖3所示。
由圖3可見,在訓練初期,num_unit高的模型與num_unit低的模型的ppl變化折線圖像會有一個交點。在交點以前,num_unit越小,ppl越小。在交點以后,num_unit越小,ppl越大。當訓練步數足夠大時,隨著num_unit的增大,最終的ppl變小。num_unit越大,bleu變化折線圖整體在num_unit小的bleu變化折線圖上方。

圖3 不同num_unit模型的ppl及blue對照折線變化
綜上所述,在num_unit取值為32,64,128,256,512時,num_unit為512時的模型訓練效果最優。并根據圖像顯示,繼續增大num_unit的取值,模型有進一步優化的可能。
超參數batch_size代表了一次輸入給神經網絡的樣本數,在合理范圍內,越大的batch_size使得參數修正的方向越準確,震蕩越小;而過大的batch_size會使得一次epoch內所需的迭代次數變少,從而對參數的修正變得更加緩慢;而過小的batch_size會使得隨機性較大,震蕩較大,難以達到收斂。將固定詞向量維度設為512,num_unit為512,其他為默認參數,由于機器性能的限制,無法選用更大的batch_size進行實驗,因此分別選取batch_size為4,32,64,128,192,256進行訓練嘗試找到batch_size的合理范圍和最佳的選值。
基于ppl及bleu進行對照的折線變化如圖4所示。

圖4 不同batch_size模型的ppl及bleu對照折線
由圖4可見,當batch_size過小時,曲線震蕩較大,模型的訓練效果較差。當batch_size在范圍[32,256]內時,曲線震蕩較小,模型訓練效果相近,因此范圍為[32,256]是batch_size的合適選值范圍。當batch_size過小時,模型訓練效果非常差。隨著batch_size的增大,最終的bleu值變大。
綜上所述,batch_size在取值為4,32,64,128,192,256時,batch_size為256時的模型訓練效果最優。并根據圖像顯示,繼續增大詞向量維度,模型有進一步優化的可能。
根據以上的實驗結果,最終選取詞向量維度為512,num_unit為512,batch_size為256進行最終的模型訓練。
模型的bleu值詳細變化如圖5所示。

圖5 模型的bleu詳細變化折線
由圖5所示,當模型訓練步數到達120 000步左右時,bleu漸漸達到峰值。
將該文的英譯漢模型與百度翻譯進行翻譯效果對比,如表3所示。
由表3可以看到,使用訓練模型翻譯的語句均能將專業詞匯翻譯正確,而百度翻譯會將專業詞匯翻譯錯。如測試語句1中的“binary search”翻譯成了二進制搜索,測試語句2中的“greedy”翻譯成了貪婪,測試語句3中的“memoization”更是直接沒有翻譯。由此可見使用文中訓練的翻譯模型在計算機算法類領域比百度翻譯的效果更好。

表3 翻譯對比結果
該文主要進行了計算機算法類垂直領域的中英翻譯優化。以關鍵詞進行檢索并爬取中英雙語例句,通過收集與計算機算法類相關度高的文本優化翻譯效果。對英文文本進行小寫化處理,避免詞匯表出現重復單詞,降低訓練成本以及優化訓練效果。通過jieba庫對中文文本分詞和nltk庫對英文文本分詞。通過制作計算機算法類分詞字典,增加計算機算法類文本的分詞正確率。通過Word2Vec算法訓練不同維度的詞向量,進行詞匯間文本相似度測試得出,詞向量維度越大,詞匯間相似度越低,但所得出的測試結果越具有實際意義。通過實驗分析發現,詞向量維度為512,num_unit為512,batch_size為256時模型效果最佳。