神經機器翻譯與程式碼(上)
- 2019 年 12 月 31 日
- 筆記
本文中藍色字體為外部鏈接,部分外部鏈接無法從文章中直接跳轉,請點擊【閱讀原文】以訪問。
目錄
機器翻譯
統計機器翻譯
神經機器翻譯
編碼器
解碼器
注意機制
訓練
為翻譯德語短語英譯的Keras完整程式碼
機器翻譯
機器翻譯是將一種語言的源文本自動轉換成另一種語言的文本的任務。
在機器翻譯任務中,輸入已經由某種語言中的符號序列組成,電腦程式必須將其轉換成另一種語言中的符號序列。
給定源語言中的文本序列,就沒有將該文本翻譯成另一種語言的最佳方法。這是因為人類語言天生的模糊性和靈活性。這使得自動機器翻譯的挑戰變得困難,也許是人工智慧中最困難的挑戰之一:
事實是,準確的翻譯需要背景知識,以解決歧義和建立句子的內容。
經典的機器翻譯方法通常涉及將源語言中的文本轉換為目標語言的規則。這些規則通常是由語言學家開發的,可以在辭彙、句法或語義層面進行操作。對規則的關注為這一研究領域命名:基於規則的機器翻譯,簡稱RBMT。
RBMT的特點是明確使用和手動創建語言規則和表示。
經典的機器翻譯方法的主要局限性既有開發規則所需的專業知識,也有大量的規則和例外。
統計機器翻譯
統計機器翻譯(Statistical machine translation,簡稱SMT)是使用統計模型,學習將文本從源語言翻譯成目標語言,給出大量實例的語料庫。
使用統計模型的這一任務可以正式表述如下:
給定目標語中的一個句子T,我們從句子中求出譯者所產生的句子S。我們知道,通過選擇給定T中可能性最大的句子S,我們的出錯幾率會降到最低。因此,我們希望選擇S,以最大化Pr(S|T)。
神經機器翻譯
神經機器翻譯,簡稱NMT,是利用神經網路模型來學習機器翻譯的統計模型。
這種方法的主要好處是,可以直接對單個系統進行源文本和目標文本的培訓,不再需要統計機器學習中使用的專門系統的流水線。
與傳統的基於短語的翻譯系統不同,基於短語的翻譯系統由許多單獨調整的小的子組件組成,神經機器翻譯試圖建立和訓練一個單一的、大的神經網路,它可以讀取一個句子並輸出正確的翻譯。
——聯合學習對齊和翻譯的神經機器翻譯,2014
因此,神經機器翻譯系統被稱為端到端系統,因為翻譯只需要一個模型。
NMT的優點在於它能夠以端到端方式直接學習從輸入文本到相關輸出文本的映射。
事實上,準確的翻譯需要背景知識,以解決歧義和建立句子的內容。
——Google的神經機器翻譯系統:彌補人與機器翻譯之間的鴻溝,2016

編碼器
編碼器的任務是提供輸入語句的表示形式。輸入句子是一個單詞序列,我們首先參考嵌入矩陣。然後,和前面描述的基本語言模型一樣,我們使用遞歸神經網路處理這些單詞。這就產生了用每個單詞的左上下文編碼的隱藏狀態,即,前面所有的單詞。為了得到正確的上下文,我們還構建了一個從右到左的遞歸神經網路,或者更準確地說,從句子的結尾到開頭。具有兩個向兩個方向運行的遞歸神經網路稱為雙向遞歸神經網路。
解碼器
解碼器是一個遞歸神經網路。它對輸入上下文和先前的隱藏狀態和輸出單詞預測進行某種表示,並生成新的隱藏解碼器狀態和新的輸出單詞預測。
如果我們使用LSTMs作為編碼器,那麼我們也使用LSTMs作為解碼器,作為隱藏的狀態。我們現在預測輸出單詞。這種預測以概率分布的形式出現在整個輸出辭彙表中。如果我們有一個50000字的辭彙表,那麼預測是一個50000維向量,每個元素對應於辭彙表中一個字的預測概率。
注意機制
我們目前有兩個未解決的問題。解碼器給我們一個單詞表示序列hj =(←- hj,−→hj),解碼器期望每一步i有一個上下文ci。我們現在描述將這些末端連接在一起的注意機制。使用典型的神經網路圖很難將注意力機制可視化,但圖至少給出了輸入和輸出關係的概念。該注意機制由所有輸入字表示(←- hj,−→hj)和解碼器si−1的前一隱藏狀態通知,併產生上下文狀態ci。這樣做的動機是,我們希望計算解碼器狀態(其中包含我們在輸出語句生產中的位置資訊)和每個輸入單詞之間的關聯。基於這種關聯有多強,或者換句話說,每個特定的輸入單詞與產生下一個輸出單詞有多相關,我們想要衡量它的單詞表示的影響根據這種關聯的強度,或者換句話說,每個特定的輸入單詞與生成下一個輸出單詞之間的關聯程度,我們希望權衡其單詞表示的影響。
訓練
有了完整的模型在手,我們現在可以更仔細地查看訓練。一個挑戰是,解碼器中的步驟數和編碼器中的步驟數隨著每個訓練示例的不同而不同。句子對由不同長度的句子組成,因此我們不能為每個訓練示例創建相同的計算圖,而是必須為每個訓練示例動態創建計算圖。這種技術被稱為展開遞歸神經網路,我們已經在語言模型中討論過了。
神經機器翻譯模型的實際訓練要求gpu很好地適應這些深度學習模型所固有的高度並行性(只要考慮許多矩陣乘法)。為了進一步增加並行度,我們一次處理幾個句子對(比如100個)。這意味著我們增加了所有狀態張量的維數。舉個例子。我們用向量hj表示特定句子對中的每個輸入詞。因為我們已經有了一個輸入單詞的序列,這些單詞被排列在一個矩陣中。當我們處理一批句子對時,我們再次把這些矩陣排列成一個三維張量。同樣,再舉一個例子,解碼器的隱藏狀態si是每個輸出字的向量。因為我們處理了一批句子,所以我們將它們的隱藏狀態排列成一個矩陣。注意,在這種情況下,將所有輸出單詞的狀態排列起來是沒有幫助的,因為狀態是按順序計算的。

綜上所述,訓練包括以下步驟:洗牌培訓語料庫(以避免由於時間或局部順序造成的過度偏差)•語料庫的分解成maxi-batches•每個maxi-batch分解成每個mini-batch mini-batches•過程,收集梯度•所有漸變申請maxi-batch更新參數通常,訓練神經機器翻譯模型大約需要5 – 15時代(穿過整個訓練語料庫)。一種常見的停止標準是檢查驗證集(不屬於訓練數據的一部分)上模型的進度,並在驗證集上的錯誤沒有改進時停止。訓練時間過長不會導致任何進一步的改善,甚至可能由於過度擬合而降低性能。
原文鏈接:
https://medium.com/@umerfarooq_26378/neural-machine-translation-with-code-68c425044bbd