日本在线看黄a美女久草|日本动漫亚洲在线一区|日韩人妻无码免费视频|A√有码中文字幕|日韩一级片视频热久久久|一区二区三区四区精品无码在线|亚洲AV成人无码一二三app|亚洲综合图片绯色|91极品人妻在线网站|国产成人精品一区二三区四区五区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

本文作者: AI研習(xí)社-譯站 2018-01-29 10:54
導(dǎo)語:在本教程中,您將了解如何開發(fā)一個(gè)神經(jīng)機(jī)器翻譯系統(tǒng),可以用于將德語翻譯成英語。

本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題How to Develop a Neural Machine Translation System in Keras from Scratch,作者為Jason Brownlee。

翻譯 | 曹永勝  林立宏    校對(duì) |  凡江

機(jī)器翻譯是一項(xiàng)具有挑戰(zhàn)性的任務(wù),包含一些使用高度復(fù)雜的語言知識(shí)開發(fā)的大型統(tǒng)計(jì)模型。

神經(jīng)機(jī)器翻譯的工作原理是——利用深層神經(jīng)網(wǎng)絡(luò)來解決機(jī)器翻譯問題。

在本教程中,你將了解如何開發(fā)一個(gè)神經(jīng)機(jī)器翻譯系統(tǒng),可以用于將德語翻譯成英語。

學(xué)習(xí)完本教程后,你將知道:

  • 如何清理和準(zhǔn)備數(shù)據(jù)來訓(xùn)練神經(jīng)機(jī)器翻譯系統(tǒng)

  • 如何開發(fā)機(jī)器翻譯的編碼器-解碼器模型  

  • 如何使用訓(xùn)練有素的模型對(duì)新輸入短語進(jìn)行推理,并對(duì)模型技巧進(jìn)行評(píng)價(jià)

讓我們開始吧。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

如何在Keras開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)  照片由 Bj?rn Gro?提供

教程概述

教程分為4個(gè)部分:

  1. 德語翻譯成英語的數(shù)據(jù)集

  2. 準(zhǔn)備文本數(shù)據(jù)

  3. 訓(xùn)練神經(jīng)翻譯模型

  4. 評(píng)估神經(jīng)翻譯模型


Python 環(huán)境

本教程預(yù)設(shè)你安裝了Python 3 SciPy環(huán)境。  

你必須安裝帶有TensorFlowTheano后端的Keras(2.0或更高版本)。  

本教程還假定你已經(jīng)安裝了NumPyMatplotlib。  

關(guān)于安裝環(huán)境,如需要幫助,請(qǐng)看這篇文章:


德語翻譯成英語的數(shù)據(jù)集  

在本教程中,我們將使用德語譯成英語的數(shù)據(jù)集作為語言學(xué)習(xí)的抽認(rèn)卡的基礎(chǔ)。  

數(shù)據(jù)集可以從 ManyThings.org 網(wǎng)站獲得,,案例是從 Tatoeba Project 項(xiàng)目中提取出來的。該數(shù)據(jù)集由德語短語和英語單詞組成,我們使用的是 Anki flashcard software軟件。

該頁面提供了許多語言對(duì)的列表,我鼓勵(lì)你探索其他語言:  

Tab-delimited Bilingual Sentence Pairs

本教程中使用的數(shù)據(jù)集可以在這里下載:

German – English deu-eng.zip

將數(shù)據(jù)集下載到當(dāng)前工作目錄并解壓;例如:

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

你會(huì)有一個(gè)叫deu.txt的文件。txt中包含152,820對(duì)德語階段的英語,每一行有一行,并有一個(gè)標(biāo)簽分隔語言。  

例如,文件的前5行看起來如下:

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們使用德語詞句序列作為輸入,將其翻譯成英語的的詞句序列,這就是我們的預(yù)測(cè)問題。

這個(gè)開發(fā)的模型將適用于一些初學(xué)者級(jí)別的德語短語。 


準(zhǔn)備文本數(shù)據(jù)  

下一步是準(zhǔn)備用于建模的文本數(shù)據(jù)。

先查看原始數(shù)據(jù),請(qǐng)注意,你所有看到的內(nèi)容,很可能就是我們?cè)跀?shù)據(jù)清洗過程中所需要用到的。

例如,在我回顧原始數(shù)據(jù)時(shí),請(qǐng)注意到以下幾點(diǎn):  

  • 有標(biāo)點(diǎn)符號(hào)。

  • 文本包含大寫和小寫。

  • 在德語中有一些特殊的字符。

  • 英語中有重復(fù)的短語,有不同的德語翻譯。

  • 這個(gè)文件是按句子長(zhǎng)度排序的,在文件的末尾有很長(zhǎng)的句子。  

一個(gè)好的文本清理程序可以處理一些或全部的這些問題。  

數(shù)據(jù)準(zhǔn)備分為兩部分:  

  1. 清理文檔

  2. 分離文檔

1. 清理文檔

首先,我們必須以保存Unicode德語字符的方式加載數(shù)據(jù)。下面的函數(shù)名為load_doc(),它將把文件加載為一個(gè)文本blob。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

每行包含一對(duì)短語,先是英語,然后是德語,然后用制表符分隔。

我們必須逐行拆分已加載的文本。函數(shù)to_pairs()將分割加載的文本。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們現(xiàn)在準(zhǔn)備好清理每個(gè)句子。我們將執(zhí)行的具體清理操作如下: 

  • 刪除所有非輸出字符。

  • 刪除所有標(biāo)點(diǎn)字符。

  • 將所有Unicode字符規(guī)范化為ASCII(如拉丁字符)。

  • 將案例規(guī)范化為小寫。

  • 刪除所有不按字母順序排列的令牌。 

我們將在加載的數(shù)據(jù)集中對(duì)每一對(duì)語句執(zhí)行這些操作。  

clean_pairs()函數(shù)執(zhí)行這些操作。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

最后,既然數(shù)據(jù)已經(jīng)被清理,我們可以將短語對(duì)列表保存到準(zhǔn)備使用的文件中。

函數(shù)save_clean_data()使用pickle API將清理文本列表保存到文件中。

將所有這些組合在一起,下面列出了完整的示例。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

運(yùn)行該示例將在當(dāng)前工作目錄中創(chuàng)建一個(gè)名為“english-german.pkl”的清理文本。

一些清理文本的例子被打印出來,以便我們?cè)谶\(yùn)行結(jié)束時(shí)進(jìn)行評(píng)估,以確認(rèn)清理的操作是按預(yù)期執(zhí)行的。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

2. 分離文本

清理的數(shù)據(jù)包含了超過15萬個(gè)短語對(duì),而其中的一些對(duì)到文件的結(jié)尾是很長(zhǎng)的。

這是一個(gè)很好的例子來開發(fā)一個(gè)小的翻譯模型。 模型的復(fù)雜性隨著實(shí)例數(shù)量、短語長(zhǎng)度和詞匯量的增加而增加。

雖然我們有一個(gè)良好的數(shù)據(jù)集來進(jìn)行建模,但是我們會(huì)稍微簡(jiǎn)化這個(gè)問題,以極大地減少模型所需的模型的大小,并將所需的訓(xùn)練時(shí)間轉(zhuǎn)換成適合模型的時(shí)間。

你可以在更完整的數(shù)據(jù)集上開發(fā)一個(gè)模型作為擴(kuò)展。我們將通過將數(shù)據(jù)集減少到文件中的前10,000個(gè)示例來簡(jiǎn)化問題;這些將是數(shù)據(jù)集中最短的短語。

此外,我們將把前9000個(gè)例子作為培訓(xùn)的示例和剩下的1,000個(gè)例子來測(cè)試fit模型。

下面是一個(gè)完整的示例,它加載干凈的數(shù)據(jù),拆分它,并將數(shù)據(jù)的分割部分保存到新文件中。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

運(yùn)行這個(gè)例子創(chuàng)建了三個(gè)新文件:  english-german-both.pkl  它包含了我們可以用來定義問題參數(shù)的所有用于訓(xùn)練和測(cè)試?yán)?,例如max短語長(zhǎng)度和詞匯表,以及 english-german-train.pklenglish-german-test.pkl 文件。用于訓(xùn)練和測(cè)試數(shù)據(jù)集的pkl文件。

現(xiàn)在我們已經(jīng)準(zhǔn)備好開發(fā)翻譯模型。


訓(xùn)練神經(jīng)翻譯模型

在這部分中,我們會(huì)來建立翻譯模型。

這部分包含了加載和準(zhǔn)備好清洗好的文本數(shù)據(jù)給模型,然后在這些數(shù)據(jù)上定義和訓(xùn)練該模型。

讓我們開始加載數(shù)據(jù)集,以便于準(zhǔn)備數(shù)據(jù)。下面的函數(shù):load_clean_sentences() 用于加載訓(xùn)練的數(shù)據(jù)集,反過來也可以加載測(cè)試的數(shù)據(jù)集。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們會(huì)使用或者結(jié)合訓(xùn)練,測(cè)試數(shù)據(jù)集定義了對(duì)最大長(zhǎng)度和問題的詞匯量。

這挺簡(jiǎn)單。我們能夠從單獨(dú)的數(shù)據(jù)集中定義這些屬性,然后在測(cè)試集中截?cái)嗵L(zhǎng)或者是超過詞匯量的例子。

我們使用 Keras Tokenize 類去講詞匯映射成數(shù)值,如建模所需要的。我們會(huì)使用分離標(biāo)記生成器給英語序列和德文序列,下面這個(gè)函數(shù)是 create_tokenizer() 會(huì)訓(xùn)練在一列短語中的標(biāo)記生成器。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

同樣地,max_length() 函數(shù)會(huì)找在一列單詞中最長(zhǎng)的序列。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們可以調(diào)用這些函數(shù)結(jié)合數(shù)據(jù)集來準(zhǔn)備標(biāo)記生成器,詞匯大小和最大的長(zhǎng)度,英文和德文短語。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

現(xiàn)在我們準(zhǔn)備開始訓(xùn)練數(shù)據(jù)集。 

每個(gè)輸入輸出序列都必須編碼成數(shù)值,并填充為最大的詞匯長(zhǎng)度。

這是因?yàn)?,我們要使用一個(gè)嵌入的單詞給輸出序列,并對(duì)輸出序列進(jìn)行熱編碼。下面這個(gè)函數(shù)為:encode_sequences()能執(zhí)行這些操作,并返回結(jié)果。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

輸出序列需要一次熱編碼。這是應(yīng)為模型會(huì)預(yù)測(cè)每個(gè)詞匯的可能性作為輸出。

函數(shù) encode_output() 會(huì)熱編碼英文到輸出序列中。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們可以使用這兩個(gè)函數(shù)準(zhǔn)備訓(xùn)練和測(cè)試數(shù)據(jù)集給訓(xùn)練模型。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

現(xiàn)在可以開始定義模型了。

在這個(gè)問題上,我們使用了編碼-解碼器 LSTM 模型。在這個(gè)架構(gòu)中,輸出序列是一個(gè)前端模型編碼器編碼好的序列,后端模型稱為解碼器,會(huì)一個(gè)詞匯一個(gè)詞匯地進(jìn)行解碼。

函數(shù) define_model() 定義了模型,用了一些參數(shù)來設(shè)置模型,比如說輸入輸出的詞匯量大小,和輸入輸出的最大詞匯長(zhǎng)度,和最大數(shù)量的內(nèi)存單元。

這個(gè)模型設(shè)置在這問題不是最優(yōu)的,這意味你有很多的潛力來調(diào)整它,提高翻譯的技巧。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

最后,我們開始訓(xùn)練模型。

我們?cè)谂笮。╞atch size)大小為64的情況下在所有樣本數(shù)據(jù)集上完成30次訓(xùn)練迭代

我們使用檢查點(diǎn)來確保每次在測(cè)試集中,模型技能提高時(shí),模型都被保存到文件中。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們可以將所有這些結(jié)合在一起,并適用于神經(jīng)翻譯模型。 

下面列出了完整的工作示例。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

首先運(yùn)行示例打印數(shù)據(jù)集的參數(shù)摘要,例如詞匯大小和最大短語長(zhǎng)度。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

接下來,打印定義的模型的摘要,允許我們確認(rèn)模型配置。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

該模型的圖也被創(chuàng)建,提供了關(guān)于模型配置的另一個(gè)視角。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

接下來,我們開始訓(xùn)練模型。 

現(xiàn)代CPU硬件每個(gè)時(shí)代大約需要30秒;不需要GPU。 

在運(yùn)行過程中,模型將被保存到文件 model.h5 中,準(zhǔn)備在下一步中進(jìn)行推理。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?


評(píng)估神經(jīng)網(wǎng)絡(luò)翻譯模型

我們會(huì)評(píng)估訓(xùn)練和測(cè)試數(shù)據(jù)集。

該模型應(yīng)該在訓(xùn)練數(shù)據(jù)集上表現(xiàn)得非常好,理想的情況是已經(jīng)推廣到在測(cè)試數(shù)據(jù)集上表現(xiàn)良好。 

理想情況下,我們將使用單獨(dú)的驗(yàn)證數(shù)據(jù)集來幫助選擇訓(xùn)練期間的模型而不是測(cè)試集。你可以試試這個(gè)作為擴(kuò)展。 

清洗好的的數(shù)據(jù)集必須像之前一樣加載和準(zhǔn)備。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

接下來,訓(xùn)練期間保存的最佳模型必須加載。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

評(píng)估包含了兩個(gè)步驟:首先生成翻譯的輸出序列,然后重復(fù)這個(gè)過程中的許多輸入的例子,總結(jié)模型的技巧在多個(gè)案例。

從推論開始,模型可以以一次性的方式預(yù)測(cè)整個(gè)輸出序列。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

這是一系列整數(shù),我們可以枚舉并在標(biāo)記器中查找以映射回單詞。 

下面這個(gè)函數(shù) word_for_id(),將執(zhí)行這個(gè)反向映射:

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們可以對(duì)翻譯中的每個(gè)整數(shù)執(zhí)行此映射,并將結(jié)果作為一串單詞來返回。 下面的函數(shù) predict_sequence() 對(duì)單個(gè)編碼的源短語執(zhí)行此操作。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

接下來,我們可以對(duì)數(shù)據(jù)集中的每個(gè)源短語重復(fù)此操作,并將預(yù)測(cè)結(jié)果與英文中的預(yù)期目標(biāo)短語進(jìn)行比較。 

我們可以在屏幕中打印一些對(duì)比結(jié)果,來篩選模型在實(shí)踐中的表現(xiàn)。

我們還將計(jì)算BLEU得分,以獲得模型表現(xiàn)如何的定量概念。 

evaluate_model() 函數(shù)實(shí)現(xiàn)了這個(gè)內(nèi)容,為提供的數(shù)據(jù)集中的每個(gè)短語調(diào)用上述 predict_sequence()  函數(shù)。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

我們可以將所有這些結(jié)合在一起,并在訓(xùn)練和測(cè)試數(shù)據(jù)集上評(píng)估加載的模型。  

下面提供了完整的代碼展示:

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

首先運(yùn)行示例打印源文本,期望和預(yù)測(cè)翻譯的示例,以及訓(xùn)練數(shù)據(jù)集的分?jǐn)?shù),然后打印測(cè)試數(shù)據(jù)集。 

考慮到數(shù)據(jù)集的隨機(jī)洗牌和神經(jīng)網(wǎng)絡(luò)的隨機(jī)性,你的具體結(jié)果將有所不同。 

首先查看測(cè)試數(shù)據(jù)集的結(jié)果,我們可以看到這些翻譯是可讀的并且大部分是正確的。 

比如: “ich liebe dich” 正確地翻譯為 “i love you“

我們還可以看到BLEU-4得分為0.51,這提供了我們對(duì)這個(gè)模型可能期望的上限。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

看看測(cè)試集的結(jié)果,看看可讀的翻譯,這不是一件容易的事情。

比如說,我們看到 “ich mag dich nicht” 翻譯成 “我不喜歡你”。

我們也看到一些糟糕的翻譯和一個(gè)很好的例子,模型可能會(huì)受到進(jìn)一步的調(diào)整,比如說 “ich bin etwas beschwipst” 翻譯成 “我有一點(diǎn)點(diǎn)”而不是預(yù)想的 “我有點(diǎn)醉了”

BLEU-4得分為0.076238,提供了一個(gè)基本的技能來進(jìn)一步改進(jìn)模型。 

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

拓展

本節(jié)列出了一些您可能希望拓展討論的想法。

  • 數(shù)據(jù)清洗??梢詫?duì)數(shù)據(jù)執(zhí)行不同的數(shù)據(jù)清理操作,例如不去除標(biāo)點(diǎn)符號(hào)或規(guī)范化大小寫,或者刪除重復(fù)的英語短語。

  • 詞匯表??梢詫?duì)詞匯表進(jìn)行細(xì)化,或者刪除在數(shù)據(jù)集中使用少于5次或10次的單詞,替換為“unk”。

  • 更多的數(shù)據(jù)。用于擬合模型的數(shù)據(jù)集可以擴(kuò)展到50,000,100,000個(gè)短語或更多。

  • 輸入順序。輸入短語的順序可以顛倒,這已經(jīng)有相關(guān)報(bào)告表明能為提升能力,或者可以使用雙向輸入層。

  • 層數(shù)。編碼器和解碼器模型可以用附加層進(jìn)行擴(kuò)展,并進(jìn)行更多的訓(xùn)練迭代,從而為模型提供更多的表征能力。

  • 存儲(chǔ)單元。編碼器和解碼器中的存儲(chǔ)器單元數(shù)量可以增加,為模型提供更多的表征能力。

  • 正則。該模型可以使用正則化,如權(quán)重或激活正則化,或在LSTM層使用丟棄。

  • 預(yù)訓(xùn)練的詞向量。預(yù)先訓(xùn)練的單詞向量可以在模型中使用

  • 遞歸模型??梢允褂迷撃P偷倪f歸公式,其中輸出序列中的下一個(gè)單詞可以以輸入序列和到目前為止產(chǎn)生的輸出序列為條件。


延伸閱讀

這里提供了關(guān)于這個(gè)話題的一些材料,如果你想深入了解,可以查閱這些內(nèi)容

Tab-delimited Bilingual Sentence Pairs

German – English deu-eng.zip

Encoder-Decoder Long Short-Term Memory Networks


總結(jié)

在這個(gè)教程中,你可以學(xué)到——如何去建立一個(gè)神經(jīng)翻譯系統(tǒng)去翻譯德國(guó)詞語為英文。

尤其是學(xué)習(xí)到了以下這些要點(diǎn):

  • 如何清洗數(shù)據(jù),準(zhǔn)備好訓(xùn)練神經(jīng)翻譯系統(tǒng)的數(shù)據(jù) 

  • 如何開發(fā)機(jī)器翻譯的編碼器-解碼器模型 

  • 如何使用訓(xùn)練有素的模型對(duì)新輸入詞組進(jìn)行推理并評(píng)估模型的技巧

博客原址:https://machinelearningmastery.com/develop-neural-machine-translation-system-keras/



更多文章,關(guān)注雷鋒網(wǎng),添加雷鋒字幕組微信號(hào)(leiphonefansub)為好友

備注「我要加入」,To be a  AI  Volunteer !

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

雷鋒網(wǎng)雷鋒網(wǎng)

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

如何在Keras中開發(fā)神經(jīng)機(jī)器翻譯系統(tǒng)?

分享:

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識(shí),讓語言不再成為學(xué)習(xí)知識(shí)的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說