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