侯悅文
摘要:深度學習是機器學習的技術和研究領域之一,通過創(chuàng)設具有階層結構的人工神經(jīng)網(wǎng)絡,在計算機系統(tǒng)中實現(xiàn)人工智能,近幾年越來越為人們所關注。機器翻譯也可以使用神經(jīng)網(wǎng)絡中的循環(huán)神經(jīng)網(wǎng)絡中sequence to sequence架構[3]進行實驗。本文使用基于循環(huán)神經(jīng)網(wǎng)絡的編碼器-解碼器模型將一個語言的句子編碼成固定長度向量,并使用一個語言模型來解碼為另一個語言的句子。我基于這個模型構建了一個英法的機器翻譯模型,經(jīng)過評估能實現(xiàn)機器翻譯的效果。
Abstract:? Deep learning is one of the techniques and research fields of machine learning. Artificial intelligence has been realized in computer systems by creating artificial neural networks with hierarchical structure, which has attracted more and more attention in recent years. Machine translation can also use the sequence to sequence architecture[3] in the recurrent neural network in neural networks for test. In this paper, a cyclic neural network based encoder-decoder model is used to encode a language sentence into a fixed length vector and a language model is used to decode a sentence into another language. Based on this model, the author built an English-French machine translation model that was evaluated to achieve machine translation.
關鍵詞:機器翻譯;sequence to sequence;深度學習
Key words: machine translation;sequence to sequence;deep learning
中圖分類號:TP18? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號:1006-4311(2019)33-0294-03
1? 定義
1.1 深度學習
深度學習是一種特殊的機器學習,性能十分高而且非常靈活,能夠表示高階抽象概念的復雜函數(shù),解決目標識別、語音感知和語言理解等人工智能相關的任務。相較于傳統(tǒng)的機器學習,深度學習可以實現(xiàn)無監(jiān)督學習[1]。而且相較于傳統(tǒng)的機器學習在面對大量數(shù)據(jù)時性能有限的問題,深度學習可以通過輸入數(shù)據(jù)量的增加或是訓練一個規(guī)模更加大的神經(jīng)網(wǎng)絡來使性能隨之不斷提高,因此在數(shù)據(jù)量巨大的數(shù)字化時代,深度學習也得以快速興起。深度學習的典型模型有:深度信念網(wǎng)絡、深度玻爾茲曼機、自動編碼器、卷積神經(jīng)網(wǎng)絡、循環(huán)神經(jīng)網(wǎng)絡等。[4]
1.2 機器翻譯
機器翻譯是指利用計算機將一種自然源語言轉(zhuǎn)變?yōu)榱硪环N自然目標語言的過程。法國科學家G.B.阿爾楚尼最早提出了機器翻譯的設想。機器翻譯發(fā)展至今,從一開始的基于規(guī)則到后來的基于語料庫,即基于統(tǒng)計學和概率學[4]翻譯效率和準確率均有了明顯的提升。
2? 模型
2.1 循環(huán)神經(jīng)網(wǎng)絡(RNN)
循環(huán)神經(jīng)網(wǎng)絡是一類以序列數(shù)據(jù)為輸入,在序列的演進方向進行遞歸且所有節(jié)點(循環(huán)單元)按鏈式連接的遞歸神經(jīng)網(wǎng)絡。圖1為一個單向循環(huán)神經(jīng)網(wǎng)絡。
要開始整個流程,首先要在零時刻構造一個激活值a<0>,a<0>通常為零向量。激活值a<0>通過前向傳播輸出
a<1>。同時將第一個單詞x<1>輸入在第一層神經(jīng)網(wǎng)絡中計算后將結果y<1>輸出。在每次當它讀到句中的第二個單詞時,假設是x<2>,循環(huán)神經(jīng)網(wǎng)絡不是僅用x<2>就預測出y<2>,它也會輸入一些來自時間步 1 的信息。具體而言,時間步 1 的激活值就會傳遞到時間步 2。然后,在下一個時間步,循環(huán)神經(jīng)網(wǎng)絡輸入了單詞x<3>,然后它嘗試預測輸出了預測結果y<3>等等,一直到最后一個時間步,輸入了x
這些等式定義了循環(huán)神經(jīng)網(wǎng)絡的前向傳播,通過構造a<0>,并輸入x<1.2.3...t>來完成循環(huán)神經(jīng)網(wǎng)絡從左到右的前向傳播。
2.2 Sequence to sequence模型架構
最簡單的sequence to sequence模型由encoder和decoder組成。
2.2.1 Encoder
Encoder實際上是一個RNN,接受輸入句子的每一個單詞作為輸入并產(chǎn)生一個向量作為輸出。對于每個輸入的單詞,encoder都會輸出一個向量和一個隱藏態(tài)(實際上隱藏態(tài)也是一個向量),并用于下一個時間步的計算。如圖2所示。
其中GRU為門控制單元,GRU有兩個門,分別為更新門和遺忘門。其作用是通過門來決定當從左到右掃描一個句子的時候,這個時機是要更新某個記憶細胞,還是不更新。GRU單元輸入c
2.2.2 Decoder
Decoder實際上是另一個RNN,用于接收向量并輸出單詞的序列。對于最簡單形式的Seq2Seq的decoder僅僅使用encoder的最后一個時間步的隱藏態(tài)作為輸入。最后一個時間步的輸出向量有時候被稱為上下文向量,因為它代表整個輸入序列的上下文。上下文向量被用于decoder的第一個時間步的輸入。
解碼的每一個時間步,decoder接收一個輸入的token和隱藏態(tài),初始的輸入token是特殊單詞start-of-sentence--
3? 實驗
本次實驗基于sequence to sequence架構構建了法語-英語的平行句對的翻譯模型并對之進行了訓練和評估。本次實驗使用的編程語言為Python。Python通過附加的工具可以轉(zhuǎn)換成可以適合科學和工程代碼的高級語言,速度通常足夠快且靈活。[2]實現(xiàn)模型使用的深度學習框架是PyTorch。PyTorch是作為一個Python包提供如下兩個優(yōu)點:①具有強GPU加速度的張量計算(如numpy);②定義的網(wǎng)絡結構簡單。
3.1 數(shù)據(jù)預處理
用于訓練機器翻譯模型的數(shù)據(jù)是許多英語-法語的平行句對。訓練數(shù)據(jù)保存在文件中,其中每一行是一個英語-法語的平行句對。英語與法語句子之間使用tab鍵分割,例如:I am cold.? ? J'ai froid.
本次實驗對語料進行了如下的數(shù)據(jù)預處理工作:首先我將語言中的單詞使用one-hot編碼進行表示,即除了單詞索引位為1其他位全為0的向量表示并在開頭添加
3.2 訓練
3.2.1 訓練數(shù)據(jù)的準備
為了進行訓練,我會將句對轉(zhuǎn)化為輸入tensor(源語言句子單詞的索引列表)和輸入tensor(目標語言句子單詞的索引列表),句子的末尾還會加上特殊的token標記句子的結尾
3.2.2 訓練模型
訓練時,我將源語言句子作為序列輸入給encoder,并維護encoder每個時間步的隱藏態(tài)。之后,decoder使用
在訓練時,decoder的輸入token實際上是正確的目標語言單詞,而不是像訓練完成后進行翻譯是使用的是上一個時間步decoder輸出的單詞。其中本次實驗調(diào)用的損失函數(shù)為nn.L1Loss。nn.L1Loss函數(shù)的計算方法為取預測值和真實值的絕對誤差的平均值在本次實驗中預測值和平均值分別為模型預測的單詞和正確的單詞,函數(shù)的公式如下。(學習率為0.5)。同時我使用了一個輔助函數(shù)來顯示進度。整個訓練的過程可以簡單的分為如下幾步:①啟動計時器;②初始化優(yōu)化器和訓練目標;③生成訓練數(shù)據(jù)(句對);④保持loss到列表并繪圖。在最后繪制結果時我使用了matplotlib庫來繪圖,使用之前保持的損失列表,繪圖函數(shù)為plot_losses。
3.2.3 評估
評估的過程和訓練非常像,但是由于模型不知道正確的翻譯結果是什么,所以解碼的每個時間步使用上一個時間步輸出的token作為該時間步的輸入token。每個時間步都會預測一個單詞輸出,將這個單詞加入到最終要輸出的源語言句子,當預測到特殊token--
4? 實驗過程及結果
本文模型使用的隱藏態(tài)hidden_size為256,在正式實驗中一共訓練了75000次,花費了48m22s,loss=0.5797。
本文隨機輸入句子對模型進行評估,結果如圖3。
可以看出該模型在翻譯時仍有較多的錯誤,其錯誤類型主要為譯文選詞錯誤,譯文和原文意思相反以及詞序不對。原因可能在于在翻譯較短句子時由于模型難以得到所有的詞,而翻譯較長的句子時由于句子太復雜導致模型在翻譯短句和長句時都會出現(xiàn)錯誤。
5? 總結與展望
本文首先介紹了機器翻譯常用的工具和模型,并使用基于循環(huán)神經(jīng)網(wǎng)絡的編碼器-解碼器模型實現(xiàn)了法語-英語的翻譯。證明了神經(jīng)網(wǎng)絡對于自然語言的強大學習能力。其優(yōu)點在于成本低、效率高。但是翻譯的結果中還有一些問題,之后為了解決這些問題我會嘗試引入注意力機制(attention model)。
參考文獻:
[1]劉建偉,劉媛,羅雄麟.深度學習研究進展[J].計算機應用研究,2014,31(7):1921-1930.
[2]Oliphant, Travis E . Python for Scientific Computing[J]. Computing in Science & Engineering, 2007, 9(3):10-20.
[3]Sutskever I , Vinyals O , Le Q V . Sequence to Sequence Learning with Neural Networks[J]. 2014.
[4]周志華.機器學習[M].北京:清華大學出版社,2016.
[5]潘登.CNKI翻譯助手和Wordnet分析中國政治詞匯的英譯[J].價值工程,2013,32(04):322-324.