入门Python神经机器翻译,这是一篇非常精简的实战指南

2018-09-27    来源:raincent

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

机器翻译(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!

原文链接:https://medium.com/@actsusanli/neural-machine-translation-with-python-c2f0a34f7dd

标签: 代码 网络

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:“大数据之父”:大数据正替代货币部分职能

下一篇:吴恩达过时了?这群俄国人推出机器学习新课程(附资源)