當前位置:
首頁 > 知識 > 入門Python神經機器翻譯,這是一篇非常精簡的實戰指南

入門Python神經機器翻譯,這是一篇非常精簡的實戰指南

選自Medium

作者:Susan Li

機器之心編譯

參與:Huiyuan Zhuo、思源

機器翻譯(MT)是一項極具挑戰性的任務,其研究如何使用計算機將文本或是語音從一種語言翻譯成另一種語言。本文藉助 Keras 從最基本的文本載入與數據預處理開始,並討論了在循環神經網路與編碼器解碼器框架下如何才能構建一個可接受的神經翻譯系統,本教程所有的代碼已在 GitHub 開源。

傳統意義上來說,機器翻譯一般使用高度複雜的語言知識開發出的大型統計模型,但是近來很多研究使用深度模型直接對翻譯過程建模,並在只提供原語數據與譯文數據的情況下自動學習必要的語言知識。這種基於深度神經網路的翻譯模型目前已經獲得了最佳效果。

項目地址:https://github.com/susanli2016/NLP-with-Python/blob/master/machine_translation.ipynb

接下來,我們將使用深度神經網路來解決機器翻譯問題。我們將展示如何開發一個將英文翻譯成法文的神經網路機器翻譯模型。該模型將接收英文文本輸入同時返回法語譯文。更確切地說,我們將構建 4 個模型,它們是:

一個簡單的 RNN;

一個帶詞嵌入的 RNN;

一個雙向 RNN;

一個編碼器—解碼器模型。

訓練和評估深度神經網路是一項計算密集型的任務。作者使用 AWS EC2 實例來運行所有代碼。如果你打算照著本文做,你得訪問 GPU 實例。

載入庫

作者使用 help.py 載入數據,同時使用 project_test.py 測試函數。

數據

該數據集包含一個相對較小的辭彙表,其中 small_vocab_en 文件包含英文語句,small_vocab_fr 包含對應的法文翻譯。

數據集下載地址:https://github.com/susanli2016/NLP-with-Python/tree/master/data

載入數據

語句樣本

small_vocab_en 中的每行包含一個英文語句,同時其法文翻譯位於 small_vocab_fr 中對應的每行。

辭彙表

問題的複雜性取決於辭彙表的複雜性。一個更複雜的辭彙表意味著一個更複雜的問題。對於將要處理的數據集,讓我們看看它的複雜性。

預處理

我們將使用以下預處理方法將文本轉化為整數序列:

1. 將詞轉化為 id 表達;

2. 加入 padding 使得每個序列一樣長。

Tokensize(標記字元串)

使用 Keras 的 Tokenizer 函數將每個語句轉化為一個單詞 id 的序列。使用該函數來標記化英文語句和法文語句。

函數 tokenize 返回標記化後的輸入和類。

Padding

通過使用 Keras 的 pad_sequences 函數在每個序列最後添加零以使得所有英文序列具有相同長度,所有法文序列具有相同長度。

預處理流程

實現預處理函數:

模型

在本節中,我們將嘗試各種神經網路結構。我們將訓練 4 個相對簡單的結構作為開始:

模型 1 是一個簡單的 RNN;

模型 2 是一個帶詞嵌入的 RNN;

模型 3 是一個雙向 RNN;

模型 4 是兩個 RNN 組成的編碼器—解碼器架構。

在嘗試了 4 種簡單的結構之後,我們將構建一個更深的模型,其性能要優於以上 4 種模型。

id 重新轉化為文本

神經網路將輸入轉化為單詞 id,但這不是我們最終想要的形式,我們想要的是法文翻譯。logits_to_text 函數彌補了從神經網路輸出的 logits 到法文翻譯之間的缺口,我們將使用該函數更好地理解神經網路的輸出。

模型 1:RNN

我們構建一個基礎的 RNN 模型,該模型是將英文翻譯成法文序列的良好基準。

基礎 RNN 模型的驗證集準確度是 0.6039。

模型 2:詞嵌入

詞嵌入是在 n 維空間中近義詞距離相近的向量表示,其中 n 表示嵌入向量的大小。我們將使用詞嵌入來構建一個 RNN 模型。

嵌入式模型的驗證集準確度是 0.8401。

模型 3:雙向 RNN

雙向 RNN 模型的驗證集準確度是 0.5992。

模型 4:編碼器—解碼器框架

編碼器構建一個語句的矩陣表示,而解碼器將該矩陣作為輸入並輸出預測的翻譯。

編碼器—解碼器模型的驗證集準確度是 0.6406。

模型 5:自定義深度模型

構建一個將詞嵌入和雙向 RNN 合併到一個模型中的 model_final。

至此,我們需要需要做一些實驗,例如將 GPU 參數改為 256,將學習率改為 0.005,對模型訓練多於(或少於)20 epochs 等等。

預測

我們得到了語句完美的翻譯同時驗證集準確度是 0.9776!

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

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

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


請您繼續閱讀更多來自 機器之心 的精彩文章:

價值傳播網路,在更複雜的動態環境中進行規劃的方法

TAG:機器之心 |