导读:编码器和解码器模型与语言模型中的循环神经网络相似,同时训练阶段均通过遍历每个输出单词来建立动态计算图。

作者:菲利普·科恩

来源:华章计算机(hzbook_jsj)

从很多方面讲,神经翻译模型都是神经语言模型的一种扩展,因此它们的实现方式很相似。编码器和解码器模型与语言模型中的循环神经网络相似,同时训练阶段均通过遍历每个输出单词来建立动态计算图。

本节给出的代码是根据PyTorch官方教程中有关序列到序列翻译模型的部分经过改进后的结果。

1.编码器

编码器与7.8.1节中的循环神经网络相差无几:

由于编码器实际上并不预测单词,因此这里只需去掉softmax的计算。需要注意的是,该实现返回的是门控循环单元的输出状态。本章大部分内容描述了一种更为简单的模型,它采用前馈网络,将隐藏状态用于改进输入表示。

我们向这个编码器的类中添加一个额外的函数,即处理整个输入句子的函数:

函数返回整个输入句子的编码器表示encoder_outputs,它是一个矩阵或一个单词表示向量序列。上述循环遍历整个句子,并将GRU的输出状态存储在这个矩阵中。该循环与第7章循环神经语言模型的训练循环非常相似,不同之处在于该循环不计算任何损失。当然,我们在这里只是生成中间状态,这些状态无法进行评价。这也意味着输出状态不用预测下一个单词,而是由解码器在后续使用。

2.解码器

解码器的核心也是循环神经网络,但是模型进行了改进,使其能够利用输入句子的信息,涉及注意力的计算和编码器输出状态的加权。图8.9给出了解码器的完整代码。下面我们介绍代码中的关键部分。

▲图8.9 神经翻译模型的解码器。

解码器在每个时刻计算对编码器状态的注意力并预测一个输出单词

解码器不仅需要考虑前一时刻的输出单词和隐藏状态,也需要考虑编码器的输出,正如forward函数的参数所示。解码器还需要利用源句子长度实现注意力掩码:

首先,前一时刻的输出单词被映射为词嵌入prev_output。接下来需要计算注意力,它包括两个步骤:注意力权重的计算和利用权重衡量输入单词编码表示的贡献。

我们按照公式(8.6)计算注意力得分:

公式需要线性变换矩阵Wa、Ua和参数向量va:

forward函数实现了上述公式。为了清楚起见,将其分为两个步骤:

然后,利用softmax将注意力得分转化为权重。由于注意力得分是根据批训练中最大输入序列的长度计算的,因此需要屏蔽与实际单词不对应的值:

接下来,利用注意力权重对编码器的输出状态进行加权求和,计算源端输入的上下文:

解码器隐藏状态的更新与编码器类似,不同之处在于它不仅取决于前一时刻的隐藏状态,同时取决于前一时刻的输出单词:

最后,使用得到的源端输入的上下文和解码器隐藏状态信息对下一个目标单词进行预测:

3.训练

得到模型的所有基本组件后,训练就应该非常熟悉了。我们首先读取平行语料库(分两部分进行,源端和目标端,见https://opus.nlpl.eu/Tanzil.php,这里使用前20000行):

然后需要设定一些超参数,尤其是损失函数、隐藏状态的大小和学习率:

在具备上述条件之后,我们就可以实例化编码器和解码器。需要注意的是,这里有两个模型,因此需要定义两个优化器,每个模型一个优化器:

接下来是训练循环。首先对训练数据集进行多次遍历,每一次遍历对训练样本进行循环,开始下次循环之前先重置优化器:

之前定义了一个计算编码器状态的函数,这里只需调用它即可:

现在,我们可以遍历目标句子的单词。这与语言模型的训练循环基本相同,不同之处在于forward函数还需将encoder_output作为参数:

最后,运行反向传播算法并触发优化器:

知识点拓展:

注意力模型起源于序列到序列模型。文献(Cho et al.,2014)利用循环神经网络实现了序列到序列模型。文献(Sutskever et al.,2014)则使用了LSTM网络,并在解码前翻转了源语言语序。

文献(Bahdanau et al.,2015)开创性地增加了一种对齐模型(所谓的注意力机制),它能够将生成的输出单词与源端单词建立联系,同时输出单词也取决于前一时刻产生目标单词的隐藏状态。源语言单词由两个循环神经网络的隐藏状态表示,它们分别从左到右和从右到左编码源语言句子。文献(Luong et al.,2015b)改进了注意力机制(称为“全局”注意力模型),同时提出了一种硬约束的注意力模型(称为“局部”注意力模型),将注意力分布约束为围绕某个输入单词的高斯分布。

为了明确地平衡源端上下文(输入单词)和目标端上下文(已经产生的目标单词)之间的影响,(Tu et al.,2016a)介绍了一种基于插值权重(称为“上下文门”)的方法,该权重能够在预测解码器下一个隐藏状态时调节下列因素的影响:1)源端上下文状态;2)解码器前一时刻的隐藏状态和输出单词。

深度模型

人们在增加神经翻译模型的编码器和解码器的层数时提出了多种方法。文献(Wu et al.,2016)首先利用传统的双向循环神经网络计算输入单词的表示,然后使用多个堆叠循环层对其进行改进。文献(Shareghi et al.,2016)提出了前向和后向交替的循环神经网络模型。文献(Miceli Barone et al.,2017b)发现编码器和解码器使用4个堆叠层和两个深度转移层,同时在编码器上采用交替网络,可以取得很好的效果。在各种数据条件下,目前仍需要根据经验探索各种不同的选择(包括跳跃连接的使用、LSTM与GRU的选择,以及各种类型的层数选择等)。

 本文代码获取方式:

1、微信关注“华章计算机”

2、在后台回复关键词:神经机器翻译

文摘编自《神经机器翻译》一书,经出版方授权发布。(ISBN:978-7-111-70101-9),转载请联系微信:Better_lydia

RECOMMEND

推荐阅读

01

神经机器翻译

作者:[德]菲利普·科恩(Philipp Koehn)

译者:张家俊 赵阳 宗成庆

NLP大牛菲利普·科恩机器翻译权威之作

中科院自动化所宗成庆老师领衔翻译,多位重量级专家倾情推荐

推荐阅读

深度学习正在彻底改变当今机器翻译系统的构建方式。本书从历史、语言和应用背景等方面介绍了机器翻译和评价所面临的挑战,讲述了自然语言应用中常用的深度学习核心方法。此外,本书还包含使用Python撰写的代码示例,为读者理解和实现自己的机器翻译系统提供了一个实践蓝本。本书内容广泛,涵盖了机器学习技巧、处理各种形式的数据所涉及的问题、模型增强,以及分析和可视化面临的挑战和方法等内容。

更多精彩回顾

书讯 | 5月书讯(上)|  元宇宙、因果推断、薛定谔方程...你关注的都在这

书讯 | 5月书讯(下)|设计致物系列+少儿编程好书推荐

书单 | 知乎高赞:有哪些你看了以后大呼过瘾的数据分析书?

干货 | Go语言精进之路:绞尽脑汁,帮你理解方法本质并选择正确的receiver类型

收藏 | 盘点知识图谱在 5 大智能领域的应用

上新 | 揭秘华为数字化转型框架:1套方法、4类场景、3个平台能力

赠书 | 【第104期】7本适合设计师提升交互设计能力的书

点击阅读全文购买

3步实现神经机器翻译模型处理相关推荐

  1. 可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)

    可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)   序列到序列模型是深度学习模型,在机器翻译.文本摘要和图像字幕等任务中取得了很大的成功.谷歌翻译在2016年底开始在生产中使用这样的模型 ...

  2. 课程学习:让神经机器翻译模型像人类一样学习

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 近些年来,神经机器翻译得到了迅速发展,在特定翻译场景下甚至可以媲美人类翻译的水平.但是,在难以收集双语数据的语言方向和专业领域的情况下, ...

  3. 在PyTorch中使用Seq2Seq构建的神经机器翻译模型

    在这篇文章中,我们将构建一个基于LSTM的Seq2Seq模型,使用编码器-解码器架构进行机器翻译. 本篇文章内容: 介绍 数据准备和预处理 长短期记忆(LSTM) - 背景知识 编码器模型架构(Seq ...

  4. 使用fairseq从头开始训练一个中英神经机器翻译模型

    前言 本文在news-commentary-v15语料上训练了中英NMT模型,并将整个流程,包括工具和数据的准备.数据的预处理.训练及解码,以及中途遇到的问题和解决方案记录在此,希望能够给予别人一些帮 ...

  5. 论文阅读——用于自动后编辑的单语和双语神经机器翻译模型的对数线性组合

    Log-linear Combinations of Monolingual and Bilingual Neural Machine Translation Models for Automatic ...

  6. 一窥谷歌神经机器翻译模型真面貌 其底层框架开源

    去年,谷歌发布了 Google Neural Machine Translation (GNMT),即谷歌神经机器翻译,一个 sequence-to-sequence ("seq2seq&q ...

  7. 实践:动手搭建神经机器翻译模型

    我们现在几乎每天都会用到翻译软件,无论是看论文看源码看新闻,总是会遇见一些不熟悉不认识的单词,关于机器翻译背后的原理我们在前一篇文章中已经讲到了,今天就来动手实践一下. 在这个例子中我们会用一个很小的 ...

  8. 《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法

    目录 <Effective Approaches to Attention-based Neural Machine Translation> 一.论文结构总览 二.论文背景知识 2.1 ...

  9. nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(二)

    1.论文整体框架 1.1 摘要 神经机器翻译的任务定义: 传统神经机器翻译所用的编码器-解码器模型的缺陷: 本文提出一种能够自动搜索原句中与预测目标词相关的神经机器翻译模型: 所提出的模型的效果: 1 ...

最新文章

  1. eclipse插件 android模拟器,关于eclipse:ADT插件中的android模拟器没有运行
  2. 高盛:人工智能生态报告 最全AI产业盘点
  3. oracle监听显示未成功_理解 oracle 的 lsnrctl status
  4. 引入N-gram改进Transformer架构,ACL匿名论文超越Primer等基准
  5. python爬虫多线程是什么意思_python爬虫中多线程的使用详解
  6. JUnit5 快速指南
  7. The 2019 ICPC Asia Shanghai Regional Contest
  8. cygwin/gcc与MinGW
  9. html5 斜率画线,一次函数的斜率与图像的关系
  10. 从WordCount看Spark大数据处理的核心机制(1)
  11. 通信电子线路实验-调幅模块仿真(发送与接收)
  12. 手机查看IGES,STP,STEP格式3D模型免费APP推荐-CAD Assistant
  13. java 正则表达式 去掉 文章头部和尾部的空格(全角,半角)、制表符、换页符
  14. 北大软微2021计算机考研难度,北大软微金服方向2016年考研经验贴---初试410分
  15. 利用雅可比方法求线性方程组C语言_工程项目经济评价的基本方法
  16. 操作系统(六) 页面置换
  17. 疑似说教 | 学会提问
  18. Android Studio使用OpenCV进行图像基本处理
  19. 某高校毕业设计-数据分析课题技术实现篇
  20. Java项目命名规范(简洁版)——高薪必看

热门文章

  1. 3D可视化黑科技,VR线上智慧城市在线三维展示
  2. vue路由详解 --基础
  3. jquery ajax content type,JQuery ajax的contentType
  4. 2011各大知名IT公司校园招聘研发类薪资待遇概述
  5. 张艺谋说高仓健:一位古代君子
  6. Python基础练习题目
  7. 链表的基本操作(C语言)详解(摘取自C语言学习网2.5)
  8. docker(七)容器与外部通信
  9. 查漏补缺——字符串www.qq.com所有非空子串
  10. 各类文件头及其十六进制标识