當前位置:
首頁 > 最新 > 深度學習在機器翻譯中的應用

深度學習在機器翻譯中的應用

每天讀一篇一線開發者原創好文

作者簡介

作者戴碩是深度學習愛好者,主要關注NLP方向。這篇文章向對深度學習感興趣的初學者介紹了機器翻譯當前的現狀,及其涉及的基本原理和流程。


本文只對相關應用作簡要介紹,不涉及公式推導(本文部分圖片來源於網路)。

上世紀80年代之前,機器翻譯主要依賴於語言學的發展,分析句法、語義、語用等;

之後,研究者開始將統計模型應用於機器翻譯,這種方法是基於對已有的文本語料庫的分析來生成翻譯結果;

2012年至今,隨著深度學習的興起,神經網路開始被運用在機器翻譯上,並在短短几年取得了非常大的成果。


2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一種用於機器翻譯的新型端到端編碼器-解碼器結構。2014 年,Sutskever等開發了一種名叫序列到序列(seq2seq)學習的方法,google以此模型在其深度學習框架tensorflow的tutorial中給出了具體的實現方法,取得了很好的效果(見https://www.tensorflow.org/tutorials/seq2seq)。


深度學習(名字很高大上),就是指多層神經網路。上圖。

這是一個單層的神經網路,多層神經網路就是在中間再插入若干個隱層,每個隱層有若干個結點。但輸入輸出層都只有一層。

傳統的編程是給了輸入,確定每一個步驟,最後得到輸出。神經網路的做法是給定已知的多組輸入輸出,稱為訓練樣本,要做的步驟(即模型)是未知的,那怎麼確定步驟(模型)呢?「回歸/擬合」,用最簡單的方程模型來打比方。。。直接上式子!

神經網路的訓練過程與此相似,也是通過訓練確定隱層結點中的若干個係數。只不過神經網路模型本身是非線性的,比較複雜。前饋、誤差反向傳播、梯度下降這些名詞,都是訓練過程中用到的方法。


基礎的Seq2Seq模型由Encoder、Decoder以及連接兩者的中間狀態向量三部分組成,Encoder通過學習輸入,將其編碼成一個固定大小的狀態向量C,繼而將C傳給Decoder,Decoder再通過對狀態向量C的學習來進行輸出。

2.2.1 RNN與LSTM

Encoder、Decoder編解碼器一般採用循環神經網路(Recurrent Neural Network,RNN)的變種——長短時記憶神經網路(Long Short-term Memory,LSTM)。LSTM與普通RNN的不同之處在於,對於長距離的狀態存儲有著較好的效果。見下圖。

(a) 普通RNN

(b) LSTM

普通的多層神經網路(DNN)中隱層的狀態信息h(就是隱層結點的輸出形式的一種)獨立的。

RNN在當前某一時刻的隱層狀態信息ht受到來自前一時刻的隱層信息ht-1影響,即RNN能夠保存之前的部分記憶。對於機器翻譯來講,例如輸入」My coat is white, hers is blue」,使用RNN模型,翻譯後半句時,前半句的」coat」就提供了一定的信息。但是這種記憶會隨著序列間隔的增大而大幅減弱。具體原理這裡不作詳細說明。

LSTM的在每個隱層的單元中使用了加法器(門控思想)實現記憶的有選擇存儲,類似於我們對於小時候的記憶也是有選擇的記住一樣,從而大幅度地規避了使用RNN產生的問題。翻譯」My coat is white, hers is blue」,翻譯到」hers」,之前的」My coat」的信息就通過加法器的門控逐級保留了下來。


上圖即為機器翻譯中的基本seq2seq模型的基本結構,可以看到Encoder編碼器接受輸入(例如:我是學生),通過序列間狀態的傳遞,得到狀態信息C。然後將C分別輸入到解碼器當中得到翻譯後的輸出。

這種模型運用於機器翻譯中存在一個問題,就是解碼器中接受的信息C全局只有一個。如果翻譯「我是學生」,當翻譯到「學生」,其實並不需要關注之前的「我是」,而且翻譯的句子如果很長,C是個有限的量,很難保存住所有信息。所以我們希望Encoder能有所側重地輸出給Decoder。類似於下圖。

Decoder端可以在翻譯序列的不同時刻接收不同的狀態信息。這就是Attention機制。


Google的Tensorflow框架中使用了Luong在2015年提出的attention機制,上圖中的Ci就可以表示為Encoder中每個hi的加權和。權重參數wi的確定又可以用到一個小的神經網路來訓練。Attention機制的提出大幅提高了機器翻譯的準確性。


2017年5月,Facebook首次將卷積神經網路(CNN,現在在計算機視覺大行其道,背後又是一堆原理公式...)用於機器翻譯,利用CNN的可並行化,再套上一堆RNN的優點,模型(名為Fairseq)訓練速度快(提升9倍),翻譯準確性又好(衡量指標BLEU)。

緊接著,一個月後,Google開始打臉,祭出一篇《Attention is all you need》。提出一種新的Attention機制,並捨棄CNN和RNN,直接建立翻譯模型,BLEU繼續提高。

這兩種模型的原理,可以搜索相關論文。


前三部分是對當前NMT的相關研究的簡要介紹。下面將給出一個完整的seq2seq模型的步驟說明,依然不涉及公式推導,但因為機器翻譯屬於自然語言處理(NLP)的一部分,所以會提到一些NLP的相關知識。

1) 獲取到原始數據集,作訓練樣本,數據集中包含大量的英文——中文的翻譯句子,分為train_source,train_target 兩個文件。

I am a student 我是一名學生

You are so clever 你真聰明

...

2) 以單個單詞為單位構造映射表,也可以稱為詞典庫,key:value格式,key為索引。

{

:I,

1:am

}

{

:我,

1:是

}

3) 這樣就可以轉換成類似於a=[2, 45, 2, 5, 6]這樣的索引向量形式。這些向量本身都是獨立的,因此還需要把訓練樣本中各個單詞之間的相關性都找出來這就是embedding,embedding是一個矩陣,原始的向量經過embedding矩陣的映射,轉換成另一個向量。

經過映射得到的embed向量之間就有了相關性(至於原理,這又是一堆讓人抓狂的公式)。比如,訓練樣本中出現」go」, 」went」, 」walk」就可以表示成具有相關性的三個向量,相關性的衡量有多種(餘弦相似度...)。

4) 就此得到了向量化的訓練樣本,計算機就可以認識並處理。因為樣本太大了,可能有幾百萬組,一次性全部訓練,時間太長,並且效果也不好。所以將樣本分為多組,每一組叫一個batch,按照batch進行訓練。

5) 訓練過程如下:

foriin總訓練輪數(100000次):

forjinbatches(64個):

編碼器(Encoder)入參:訓練樣本輸入train_source,隱層結點數,隱層層數

輸出:編碼器輸出,隱層狀態向量C

解碼器(Decoder)入參:訓練樣本輸入train_target,隱層狀態向量C

輸出:預測輸出

計算損失函數(誤差,用於訓練校正)

梯度下降法(對誤差求偏導,求全局極值點,校正模型參數的具體方法)

不斷尋找最優的模型參數

得到最優的模型參數

保存模型

6) 輸入測試樣本,」you are so handsome」,得到翻譯輸出「你真帥」。


以上就是基本的seq2seq模型的翻譯流程,seq2seq不止可以用在機器翻譯領域,在語言生成等領域也有較好的應用效果。

本文力求以簡潔的方式介紹機器翻譯領域的深度學習,文中可能存在一些表述不太貼切的地方,歡迎指正。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 中興開發者社區 的精彩文章:

Linux Bonding介紹及在虛擬網路設備中的應用

TAG:中興開發者社區 |