可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)
可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)
序列到序列模型是深度学习模型,在机器翻译、文本摘要和图像字幕等任务中取得了很大的成功。谷歌翻译在2016年底开始在生产中使用这样的模型。两篇开具有创性的论文对该模型进行了解释(Sutskever et al., 2014, Cho et al., 2014)。
然而我发现,要想很好地理解这个模型并实现它,需要理解一系列建立在彼此基础之上的概念。我想,这些概念如果能直观地表达出来,会更容易理解。这也是我在这篇文章中要做的事情。当然,你需要对深度学习有一定的了解才能较好地理解这篇文章。希望阅读上述两篇论文以及文末链接中的帖子能够有所帮助。
序列到序列模型可以对对象(单词、字母、图片的特征等等)组成的序列进行处理,并输出由这些对象所组成的另一个序列。训练好的模型的工作方式如下:
在神经机器翻译中,序列是一系列的单词,并且一个接一个的处理。输出同样是一系列的单词。
剖析算法核心
该算法的核心部分由一个编码器和一个解码器组成。
编码器对输入序列中的每个元素进行处理,它将捕捉到的信息编译成一个向量(称为上下文)。在处理完整个输入序列后,编码器将上下文发送到解码器,解码器开始逐项生成输出序列。
同样也适用于机器翻译之中。
在机器翻译的情况下,上下文是一个向量(基本上是由数字组成的数组)。编码器和解码器往往都是循环神经网络。(一定要看Luis Serrano的A friendly introduction to Recurrent Neural Networks,了解RNNs的相关知识)。
上下文是一个浮点数组成的向量。在本篇文章的后面,我们将通过给数值较高的单元格分配更亮的颜色来对向量进行可视化。
您可以在建立模型时设置上下文向量的大小。它基本上是编码器RNN中隐层单元的数量。这些可视化示例中展示了一个长度为4的向量,但在实际应用中,上下文向量的大小会是256、512或1024。
根据设计,一个RNN在每一步均需要两个输入:一个输入(在编码器中指的是来自输入句子的一个单词),和一个隐藏状态。但是,此处的词,需要用一个向量来表示。为了将一个词转化为一个向量,我们使用“词嵌入”算法。该算法将单词转化到向量空间,并捕捉到了很多单词的意义/语义信息(例如 king -man + woman = queen)。
我们需要在处理之前将输入的单词变成向量。该转换可以用词嵌入算法来完成。我们可以使用预先训练的词嵌入模型,或者在我们的数据集上训练我们自己的词嵌入模型。词嵌入向量大小通常是200或300维,为了简单起见,我们展示的是大小为4的向量。
现在我们已经介绍了主要的向量/张量,让我们回顾一下RNN的机制,并建立一种可视化语言来描述这些模型。
RNN的下一个步骤是取第二个输入向量和隐藏状态#1来创建该时刻步骤的输出。在后面的文章中,我们会用诸如这样的动画来描述神经机器翻译模型中的向量。
在下面的可视化过程中,编码器或解码器的每一次运行结果都是RNN模型处理其输入并在该时刻产生的输出。由于编码器和解码器都是RNN,所以每个RNN在每次做一些处理的时候,它都会根据自己当前的输入以及可见的前期输入来更新自己的隐藏状态。
让我们看看编码器的隐藏状态。注意最后一个隐藏状态实际上是我们传递给解码器的上下文。
解码器也有一个隐藏的状态,它从一个步骤传递到下一个步骤。只是因为我们现在关注的是模型的主要部分,所以没有在这个图形中可视化。
现在让我们看看另一种可视化序列到序列模型的方法。这个动画会让你更容易理解这些模型。这就是所谓的“非滚动”视图,在这个视图中,我们不显示一个解码器,而是逐步显示每一个步骤的执行过程。这样我们就可以查看每个步骤的输入和输出。
现在来关注以下内容
上下文向量是这类模型的瓶颈,这给模型处理长句子带来了挑战。Bahdanau et al., 2014和Luong et al., 2015提出了一个解决方案。这些论文引入并完善了一种名为“注意力”的技术,极大的提高了机器翻译的质量。注意力帮助模型根据其自身的需要对输入序列的相关部分予以关注。
在步骤7,注意机制使解码器在生成英文翻译之前,将注意力集中在 “étudiant”(法语中的 “学生”)这个词上。这种放大输入序列中相关部分信号的能力,使得注意力模型比没有注意力的模型产生更好的结果。
让我们继续看一下这种高层次抽象的注意力模型。注意力模型与经典的序列到序列模型主要有两个方面的不同:
首先,编码器将更多的数据传递给解码器。编码器不再是将编码阶段的最后一个隐藏状态传递给解码器,而是将所有隐藏状态传递给解码器。
其次,注意力解码器在产生输出之前会多做一个步骤。为了对输入序列中与当前解码步骤相关的部分予以关注,解码器做了以下工作。
1、查看它接收到的编码器隐藏状态集–每个编码器隐藏状态都与输入句子中的某个词有强关联。
2、给每个隐藏状态打分(我们先忽略打分是如何进行的)。
3、将每个隐藏状态乘以它的softmax得分,从而放大高分的隐藏状态,淹没低分的隐藏状态。
这个评分机制运作在解码器侧的每个步骤。
现在让我们用下面的可视化方式把整个事情整合起来,看看注意力过程是如何运作的。
1、注意力解码器RNN接收到两部分信息:<END>标签的嵌入,以及一个初始化的解码器隐藏状态。
2、RNN对其输入进行处理,产生一个输出和一个新的隐藏状态向量(h4)。其中输出被丢弃。
3、注意力步骤。我们使用编码器隐藏状态和h4向量来计算当前步骤的上下文向量(C4)。
4、我们将h4和C4拼接成一个向量。
5、我们将这个向量通过一个前馈神经网络(一个与模型共同训练的网络)。
6、前馈神经网络的输出表示当前步骤的输出单词。
7、重复下一个时间步骤。
我们以另一种方式观察在每一个解码步骤中注意的是输入句子的哪一部分。
请注意,这个模型并不是无脑地将输出处的第一个字与输入处的第一个字匹配。它实际上从训练阶段就学会了如何匹配该语言对中的单词(在我们的例子中是法语和英语)。关于这种机制的精确性,我们举一个论文中的例子。
你可以看到模型在输出"European Economic Area"时是如何正确关注的。在法语中,这些词的顺序与英语相反(“européenne économique zone”)。而句子中的其他词的顺序却是相同的。
如果你觉得你已经准备好学习实现这个模型,一定要学习TensorFlow的神经机器翻译(seq2seq)教程。
优秀的教程:
[1] Natural Language Processing Nanodegree Program
[2] Attention Is All You Need
[3] Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)
可视化神经机器翻译模型(基于注意力机制的Seq2seq模型)相关推荐
- 基于注意力机制的seq2seq模型
目录 一.前言 二.模型搭建 2.1 编码器 2.2 注意力机制 2.3 解码器 2.4 Seq2Seq模型 三.模型的训练与评估 附录一.翻译效果比较 附录二.完整代码 一.前言 在此之前,我们实现 ...
- seq2seq模型_具有注意力机制的seq2seq模型
在本文中,你将了解: 为什么我们需要seq2seq模型的注意力机制? Bahdanua的注意力机制是如何运作的? Luong的注意力机制是如何运作的? 什么是局部和全局注意力? Bahdanua和Lu ...
- AI实战:搭建带注意力机制的 seq2seq 模型来做数值预测
AI实战:搭建带注意力机制的 seq2seq 模型来做数值预测 seq2seq 框架图 环境依赖 Linux python3.6 tensorflow.keras 源码搭建模型及说明 依赖库 impo ...
- PyTorch中文教程 | (14) 基于注意力机制的seq2seq神经网络翻译
Github地址 在这个项目中,我们将编写一个把法语翻译成英语的神经网络. [KEY: > input, = target, < output]> il est en train d ...
- PyTorch 1.0 中文官方教程:基于注意力机制的 seq2seq 神经网络翻译
译者:mengfu188 作者: Sean Robertson 在这个项目中,我们将教一个把把法语翻译成英语的神经网络. [KEY: > input, = target, < output ...
- 基于注意力机制的seq2seq网络
六月 北京 | 高性能计算之GPU CUDA培训 6月22-24日三天密集式学习 快速带你入门阅读全文> 正文共1680个字,26张图,预计阅读时间10分钟. seq2seq的用途有很多,比如 ...
- L11注意力机制和Seq2seq模型
注意力机制 在"编码器-解码器(seq2seq)"⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息.当编码器为循环神经⽹络时,背景变量 ...
- 关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录
关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录 此为本人学习的类笔记,主要内容为借助Google翻译机译的论文WHAT IS LEFT TO BE UNDERSTOOD IN ATIS? ...
- 基于注意力机制的循环神经网络对 金融时间序列的应用 学习记录
摘要: 概况论文内容,包含解决的问题,解决的方法,成果 金融时间序列由于高噪声性以及序列间的相关性,导致传统模型的预测精度和泛化能力往往较低.为了克服这一问题,提出一种基于注意力机制的循环神经网络预测 ...
最新文章
- “去了太空就别回来了!”贝索斯还没“上天”,就遭美国 5 万多人请愿:不准重返地球...
- vue项目中使用element的dialog中引入ztree却不能初始化解决办法
- asp.net httpclient post 请求头_Java11的HttpClient的使用
- windbg调试实例(4)--句柄泄露
- 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...
- 通读AFN①--从创建manager到数据解析完毕
- SpringBoot中Bean按条件装配
- [html] 当html中使用map标签时,area中coords值如何精确定位呢?
- python版本切换_怎么切换python版本
- itunes未能连接到iphone_iTunes下载_苹果iTunes官方下载「32位|64位」
- 一文了解Redis持久化
- Ubuntu16.04下配置pip国内镜像源加速安装
- 从不同步的代码块中调用了对象同步方法。_Java中Synchronized的用法
- python的try和except_Python用try except处理程序异常的三种方法总结
- MTK:UART串口收发数据
- vue 第六天(条件判断)
- AC日记——A+B Problem(再升级) 洛谷 P1832
- 软件行业公司名单list库
- ROS学习(13)自定义机器人的ROS导航
- matlab腔体滤波器,腔体滤波器基础知识
热门文章
- 通信原理-确知信号的最佳接收
- vectorint[]和vectorint()有什么区别?
- 水题Kattis Temperature Confusion小学数学
- mysql额外在哪_MySQL额外操作
- 主页被挟持 火狐浏览器_看过来!关于IE、360浏览器访问学校部分网站的设置说明在这里...
- python中dtypes_关于python:如何通过pandas DataFrame中的列设置dtypes
- z390可以装服务器系统吗,z390主板如何装win10系统 有什么方法
- 不用python编程,制作词云图
- pandas的str函数的一些功能
- CircleList