来源 | Natural Language Processing for Beginners

作者 | AI Publishing

翻译 | 悉尼没睡醒

校对 | gongyouliu

编辑 | auroral-L

全文共2555字,预计阅读时间30分钟。

第十一章 使用 Seq2Seq 模型进行文本翻译

1.  创建 Seq2Seq 训练模型

2.  用 Seq2Seq 作出预测

Seq2Seq模型的理论在第三章的第5节已经解释过了。Seq2seq 模型基于编码器-解码器架构,它学习不同长度的输入和输出句子之间的映射。Seq2seq 模型可用于开发聊天机器人、文本翻译、问答机等。

在本章中,你将看到 Seq2Seq 模型在文本翻译中的应用。所以,让我们开始吧。

1. 创建Seq2Seq 训练模型

Seq2seq 模型通常由两个模型组成。在训练阶段,编码器接收输入句子并将其传送到解码器。在我们的例子中,解码器然后预测输出或翻译的句子。编码器和解码器都是连接的 LSTM 网络。该过程如下图所示。这里,解码器输入的偏移标签是“<s>”,解码器输出的偏移标签是</s>。

编码器的输入是原始语言的句子,在上面的例子中是英语。编码器的输出是隐藏状态和单元状态。解码器的输入是来自编码器的隐藏层和单元状态加上目标数据集(进行一步偏移)。

例如,如果你查看解码器输入,则在第一步中,输入始终是 <s>。第一个时间步的解码器输出是真实翻译的输出词。例如,在上面的例子中,第一个输出词是“Je”。在第二步中,解码器的输入是上一步的隐藏状态和单元状态加上输出句子中的第一个实际单词,即“Je”。将先前输出的真实值作为输入到下一个时间步的过程称为Teacher Forcing。为了阻止解码器在遇到句尾标签时进行预测,所有句子都以句尾标记结束,即上图中的</s>。

让我们对上面的训练模型进行编码。与往常一样,你首先导入所需的库。

接下来,我们需要为基于 LSTM 的编码器和解码器模型以及基于 word2vec 的嵌入层定义一些配置。

由于本章中的脚本是使用 Google Collaboratory 运行的,因此将数据集上传到 Google Drive 然后导入到应用程序中。要将数据集从 Google Drive 导入 Google Collaboratory,请运行以下脚本。

我们将用于训练 seq2seq 模型的数据集可在此链接免费获得:http://www.manythings.org/anki/

转到链接,然后下载 fra-eng.zip 文件。解压缩文件,你应该会看到 fra.txt 文件。该文件包含我们的数据集。该文件也位于 Resources/Datasets 文件夹中。文件的前 10 行如下所示:

fra.txt 文件中的每一行都包含一个英文句子,然后是一个制表符,然后是法语英语句子的翻译,再次是制表符,然后是属性。

我们只对英语和法语句子感兴趣。以下脚本创建三个列表。第一个列表包含所有英语句子,用作编码器输入。第二个列表包含法语中的解码器输入句子,其中偏移量 <sos> 位于所有句子之前。最后,第三个列表包含解码器输出,其中 <eos> 附加在法语每个句子的末尾。

让我们看看我们的数据集中有多少英语和法语句子:

让我们随机打印一个英文句子及其法文翻译(解码器输入和解码器输出)。

你可以看到索引 175 处的句子是“I’m shy.”。在解码器输入中,翻译的句子开头包含 <sos> 标签,而输出包含 <eos> 标签。

接下来,我们需要标记两个输入的英语句子。这是词嵌入之前的强制性步骤。

类似地,以下脚本对输出的法语句子进行标记。

正如我们在前一章中对文本分类所做的那样,我们需要填充我们的输入和输出序列,以便它们具有相同的长度。以下脚本将填充应用于编码器的输入序列。

由于英语句子的最大长度是 6,你可以看到编码器输入句子的形状是 (20000, 6),这意味着所有句子现在都变成了等长的 6。例如,如果你打印索引 175 处句子的填充版本,你会看到 [0, 0, 0, 0, 6,307]。由于实际句子是“I‘m shy”,我们可以打印这些单词的索引,并查看索引 (6, 307) 与索引 175 处的句子的填充序列中的索引匹配。

类似地,以下脚本将填充应用于解码器输入法语句子。

以下脚本将填充应用于解码器输出法语句子。

下一步是为输入和输出句子创建词嵌入。对于输入句子,我们可以使用 Glove 词嵌入,因为句子是英语。以下脚本为Glove向量。

以下脚本创建了一个嵌入矩阵,该矩阵将在嵌入层中用于编码器 LSTM。

以下脚本为编码器 LSTM 创建了一个嵌入层。

下一步是创建解码器嵌入层。第一步是创建一个空的形状嵌入矩阵(输出句子的数量,输出中最长句子的长度,以及输出中唯一词的总数)。

下面的脚本就是这样做的。

下一步是在解码器嵌入矩阵中的那些索引处添加一个,其中一个词存在于原始解码器输入和输出序列中。

以下脚本创建编码器模型.

以下脚本创建解码器模型。你可以看到在解码器模型中,正在使用自定义嵌入层。

以下脚本为我们的 seq2seq 模型创建完整的训练模型。

执行以下脚本显示训练模型。

最后,以下脚本训练模型。

在 20 个 epoch 结束时,达到了大约 79.67 的准确率。

2. 用 Seq2Seq 做出预测

你在上一节中看到了如何训练模型。在本节中,你将看到如何进行预测。下图详细说明了进行预测的过程。

在预测阶段,编码器的输入是原始语言的完整句子,就像编码器一样。

然而,解码器的输入之一是来自编码器的隐藏状态和单元状态。然而,不同于训练阶段,整个目标句子同时作为输入,在第一步的预测期间,单词 <sos> 作为解码器输入。

解码器根据隐藏和单元状态以及第一个词 <sos> 对第一个翻译的词进行预测,即上图中的“suis”。在第二个时间步,解码器的输入是第一个解码器时间步的隐藏状态和单元状态,以及第一个解码器时间步的输出,即“Je”。该过程一直持续到解码器预测 <eos>,这对应于句子的结尾。

以下脚本实现了使用 seq2seq 模型预测将文本从英语翻译成法语的模型。

预测模型通过以下脚本绘制:

预测模型以整数形式进行预测,你需要将整数转换回文本。以下脚本为输入和输出句子创建单词词典的索引。

在下面的脚本中,我们创建了一个“perform_translation()”方法,它接受一个句子的输入序列。编码器对输入序列进行编码,并将隐藏状态和单元状态传递给解码器。解码器的第一个输入是“sos”标签以及来自编码器的隐藏层和单元状态。循环运行最大句子长度这么长的时间单位。

在每次迭代期间,都会进行预测。如果预测词是“<eos>”,则循环终止。否则,使用预测索引,从索引到单词字典中找到实际单词,并将该单词附加到输出句子中。

解码器的索引和隐藏状态和单元状态被更新,新值用于再次使用解码器模型进行预测。以下脚本包含“perform_translation()”函数的代码逻辑。

现在是做出预测的时候了。以下脚本从输入句子序列列表中随机选择一个输入句子。句子序列被传递给“perform_translation()”方法,该方法返回翻译后的法语句子。

输出显示我们的脚本随机选择的句子是“You need sleep”,这句话已经成功翻译成法语“vous avez besoin de sommeil”。

拓展阅读 – Seq2Seq模型

要学习有关 word seq2seq 建模的更多信息,请参阅以下资源:

https://bit.ly/2Y8L9Znhttps://bit.ly/2ZkvmWI。

「NLP入门系列」11. 使用 Seq2Seq 模型进行文本翻译相关推荐

  1. 「NLP入门系列」9. 文本摘要和主题建模

    来源 | Natural Language Processing for Beginners 作者 | AI Publishing 翻译 | 悉尼没睡醒 校对 | gongyouliu 编辑 | au ...

  2. 「Python数据分析系列」11.机器学习

    来源 |  Data Science from Scratch, Second Edition 作者 | Joel Grus 译者 | cloverErna 校对 | gongyouliu 编辑 | ...

  3. git 代码回退_「Vue 入门系列」第三期,适合新手入门的 Git 使用教程

    引言 Git 工具对于程序员来说已经不陌生了,在开发中也算是必不可少的工具了,本期我们就来看看如何利用 Git 管理代码,以及如何将代码提交到远程(线上) Github 仓库中. 主题:使用 Git ...

  4. 「性能优化系列」APP内存优化理论与实践

    当一个应用同时运行越来越多的任务以及复杂的业务,Android系统的内存管理机制已经无法满足内存的释放与回收,为了应用的稳定性与性能,去控制内存的创建和回收就成为了一个重要的命题. 本篇文章主要涉及内 ...

  5. 「真香系列」新物种首发亮相 聚划算爆款孵化玩法升级

    从普通商品到优质好物,差的便是那一句"真香". 2022聚划算99划算节,聚划算首发「真香系列」,为消费者精选了一批价格香.品质香.服务香的「十三香」好物.不过,聚划算的" ...

  6. 「Photoshop2021入门教程」创建A4尺寸打印文档

    如何在Photoshop2021中创建A4尺寸文档?根据文档的不同用途可能需要不同的尺寸,例如很多打印店都是A4纸来打印,那么如果在PS创建A4尺寸文档呢? 打开Photoshop2021,点击文件- ...

  7. 「Photoshop2021入门教程」给照片添加烟雾效果

    如何制作一张烟雾朦胧的效果图片呢?今天小编为大家带来「Photoshop2021入门教程」给照片添加烟雾效果,一起来看看吧! PS打开一张图片 添加一个烟雾图层 选择烟雾图层.然后将鼠标悬停在「图层」 ...

  8. 「想法题系列」逗比三角形-二分

    传送门:「想法题系列」逗比三角形-hzwer 题解 因为限制了盒子的宽,所以贪心让每个三角形尽量高(即让最短边紧贴盒子底面所在直线). 考虑把每个三角形竖着剖分成宽为 d d d的矩形. 将所有矩形降 ...

  9. 「春招系列」30张图理解HTTP在面试中所有会出现的题

    前言 又是一年金三银四,春招与跳槽热闹的开展着,而在面试过程中,HTTP 被提问的概率还是非常高的. 我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是 ...

  10. NLP进阶之(一)Seq2Seq模型之Chatbot

    NLP进阶之(一)Seq2Seq模型之Chatbot 1. 编码器-解码器(seq2seq) 解释 1.1 编码器 1.2 解码器 1.3 模型训练 1.4 参考文献 2. 注意力机制(Attenti ...

最新文章

  1. 3.4.2 停止等待协议
  2. ios 自定义UIView绘制时文字上下颠倒问题解决
  3. React Native 一些事
  4. 【MySQL】MySQL 8 新特性
  5. php上传文件 报的错误 $_FILES[‘file’]['error']
  6. 在Hyper-V主机中支持VLAN
  7. 高斯函数、高斯积分和正态分布
  8. 7教程统计意义_SPSS进行中介效应检验的实战操作与分析结果详解 ——【杏花开生物医药统计】...
  9. Visual Stdio 无法找到资源编译器DLL
  10. php怎么把中文转,PHP如何将中文转为拼音?
  11. Linux——重启服务器后磁盘名称错乱
  12. 一年中的第几天 哔哩哔哩2020校园招聘笔试题讲解
  13. Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/po/IdCard
  14. html设置鼠标移入移出样式,鼠标移入移出_CSS3实现鼠标移入移出时改变样式的效果...
  15. 使用无界面方式登录人人网
  16. mpvue使用vuex基本步骤以及如何使用
  17. 计算机视觉PDF马颂德,计算机视觉的高层感知——计算机视觉.pdf
  18. 弘辽科技:拼多多销量排名是怎么算的?影响因素有哪些?
  19. matlab 中disp()常见用法
  20. 那些年不小心来到的外国网站

热门文章

  1. macbook历代_历代MAC机型配置汇总
  2. PHP仿金蝶云ERP进销存网络多仓版源码
  3. 计算机网络之验证性实验(tracert+ARP)
  4. 如何完成一款游戏? | 独立游戏制作
  5. 用 JavaScript 实现时间轴与动画 - 前端组件化
  6. 15 年工龄的阿里P9职场历程自述
  7. roseha 8.9 for linux oracle 11g,RoseHA 9.0 for Linux配合Oracle12c配置文档_v2.0-2015-04.pdf
  8. 装机软件搜狗拼音输入法v11.5.0.5352去广告精简优化版
  9. oracle财务管理系统有什么用,CSS_Oracle财务管理系统:会计业务周期,下面是使用Oracle财务管理系统 - phpStudy...
  10. 《流畅的python》学习笔记及书评