背景

Seq2Seq可以使用统计的方式、规则的方式去应对。在印象中,Attention的出现也是从Seq2Seq任务中出现的,在论文:Neural Machine Translation by Jointly Learning to Align and Translate中发表,可以看看该论文中的section2、section3.

具有注意力的 Seq2seq 模型的机制

这部分参考了文章:Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

序列到序列模型是一种采用一系列项目(单词、字母、图像特征等)并输出另一个项目序列的模型。一个训练有素的模型会像这样工作:

在神经机器翻译中,序列是一系列单词,一个接一个地处理。同样,输出是一系列单词:

由编码器与解码器组成的模型

编码器处理输入序列中的每个token,它将捕获的信息编译成一个向量(称为上下文)。处理完整个输入序列后,编码器将上下文发送到解码器,解码器开始逐项生成输出序列。

这同样适用于机器翻译的情况。

在机器翻译的情况下,上下文是一个向量(基本上是一个数字数组)。编码器和解码器往往都是循环神经网络。

您可以在设置模型时设置上下文向量的大小。它基本上是编码器 RNN 中隐藏单元的数量。这些可视化显示了一个大小为 4 的向量,但在现实世界的应用程序中,上下文向量的大小可能是 256、512 或 1024。

按照设计,RNN 在每个时间步都有两个输入:一个输入(在编码器的情况下,输入句子中的一个词)和一个隐藏状态。然而,这个词需要用一个向量来表示。要将单词转换为向量,我们求助于称为“单词嵌入”算法的一类方法。这些将单词转换为向量空间,捕获单词的大量含义/语义信息。

我们需要在处理输入词之前将它们转换为向量。该转换是使用词嵌入算法完成的。我们可以使用预训练的嵌入或在我们的数据集上训练我们自己的嵌入。嵌入大小为 200 或 300 的向量是典型的,为简单起见,我们显示大小为 4 的向量。

现在我们已经介绍了我们的主要向量/张量,让我们回顾一下 RNN 的机制并建立一种视觉语言来描述这些模型:

下一个 RNN 步骤采用第二个输入向量和隐藏状态 #1 来创建该时间步的输出。在后面的文章中,我们将使用这样的动画来描述神经机器翻译模型中的向量。

在下面的可视化中,编码器或解码器的每个脉冲都是 RNN 处理其输入并为该时间步生成输出。由于编码器和解码器都是 RNN,每一步 RNN 都会进行一些处理,它会根据其输入和之前看到的输入更新其隐藏状态。

让我们看看编码器的隐藏状态。注意最后一个隐藏状态实际上是我们传递给解码器的上下文。


解码器还保持一个隐藏状态,它从一个时间步传递到下一个时间步。我们只是没有在此图中将其可视化,因为我们现在关注模型的主要部分。

现在让我们看看另一种可视化序列到序列模型的方法。该动画将更容易理解描述这些模型的静态图形。这称为“展开”视图,我们不显示一个解码器,而是为每个时间步显示它的副本。这样我们就可以查看每个时间步的输入和输出。

Attention的使用

事实证明,上下文向量是这些类型模型的瓶颈。这使得模型处理长句子变得具有挑战性。Bahdanau et al., 2014 和 Luong et al., 2015 提出了一个解决方案。这些论文引入并改进了一种称为“注意力”的技术,它极大地提高了机器翻译系统的质量。Attention 允许模型根据需要关注输入序列的相关部分。


在时间步 7,注意力机制使解码器能够在生成英文翻译之前将注意力集中在单词“étudiant”(法语中的“student”)上。这种从输入序列的相关部分放大信号的能力使得注意力模型比没有注意力的模型产生更好的结果。

让我们继续研究这种高度抽象的注意力模型。注意力模型在两个主要方面不同于经典的序列到序列模型:
首先,编码器将更多数据传递给解码器。编码器没有传递编码阶段的最后一个隐藏状态,而是将所有隐藏状态传递给解码器:

其次,注意力解码器在产生其输出之前会执行额外的步骤。为了关注与此解码时间步长相关的输入部分,解码器执行以下操作:

  1. 查看它接收到的一组编码器隐藏状态——每个编码器隐藏状态与输入句子中的某个词最相关
  2. 给每个隐藏状态打分(我们暂时忽略打分的方式)
  3. 将每个隐藏状态乘以其 softmaxed 分数,从而放大高分数的隐藏状态,并淹没低分数的隐藏状态

该评分练习在解码器端的每个时间步进行。现在让我们在下面的可视化中把整个事情放在一起,看看注意力过程是如何工作的:

1.注意力解码器 RNN 接受 标记的嵌入和初始解码器隐藏状态。
2. RNN 处理其输入,产生一个输出和一个新的隐藏状态向量 (h4)。输出被丢弃。
3. 注意步骤:我们使用编码器隐藏状态和 h4 向量来计算这个时间步的上下文向量 (C4)。
4. 我们将 h4 和 C4 连接成一个向量。
5. 我们通过一个前馈神经网络(与模型联合训练的)传递这个向量。
6. 前馈神经网络的输出表示该时间步的输出字。
7. 重复下一个时间步骤

这是查看在每个解码步骤中我们关注输入语句的哪一部分的另一种方法:

请注意,该模型不仅仅是将输出的第一个词与输入的第一个词对齐。它实际上从训练阶段学习了如何对齐该语言对中的单词(在我们的示例中为法语和英语)。关于这种机制的精确程度的一个例子来自上面列出的注意力论文:

论文中的介绍

神经网络机器翻译

我们先简要地看看基于RNN的Encoder-Decoder神经网络翻译模型。我摘取原文的部分内容,如下:


流程是这样的:编码器就输入的语句向量处理成一个向量ccc,编码器选取的是RNN,数学表达如下,原文的公式(1):
ht=f(xt,ht−1)c=q(h1,⋯,hTx)h_t = f(x_t, h_{t-1}) \\ c = q({h_1, \cdots, h_{T_x}}) ht​=f(xt​,ht−1​)c=q(h1​,⋯,hTx​​)
ht∈Rnh_t \in \mathbb R^nht​∈Rn是ttt时刻的隐状态,ccc是由所有的隐状态生成的向量。fff和qqq是非线性函数,例如使用LSTM。

编码器则是在给定上下文向量ccc以及已经预测的结果{y1,⋯,yt′−1}\{y_1,\cdots, y_{t^\prime - 1}\}{y1​,⋯,yt′−1​}条件下,去预测下一个结果yt′−1y_{t^{\prime - 1}}yt′−1​。那么就有的原文中的公式(2)了,其中y=(y1,⋯,yTy)\mathbf{y}=(y_1, \cdots, y_{T_y})y=(y1​,⋯,yTy​​).使用条件概率表示就是成了原文公式(3)了,其中ggg是非线性的,潜在多层函数,且用于输出yty_tyt​的,sss则是RNN的隐层状态。

上面就是神经机器学习的大体过程。下面我们看看原文提出的新颖结构(novel architecture)。

学习对齐和翻译

该模型使用bi-RNN作为编码器。结构如下:

新模型的条件概率如下(公式4):
p(yi∣y1,…,yi−1,x)=g(yi−1,si,ci)p\left(y_{i} \mid y_{1}, \ldots, y_{i-1}, \mathbf{x}\right)=g\left(y_{i-1}, s_{i}, c_{i}\right) p(yi​∣y1​,…,yi−1​,x)=g(yi−1​,si​,ci​)
其中sis_isi​是RNN在时刻ttt时的隐层状态(解码器),计算如下:
si=f(si−1,yi−1,ci)s_i=f(s_{i-1}, y_{i-1}, c_i) si​=f(si−1​,yi−1​,ci​)
其计算方式和公式(2)不同,因为会为每一个yiy_iyi​计算一个上下文向量cic_ici​。下面就是attention机制的内容了。

那么 问题来了,这个上下文向量cic_ici​该如何计算呢?其依赖于编码器将输入语句映射到的各个隐层结果(h1,⋯,hTx)(h_1,\cdots,h_{T_x})(h1​,⋯,hTx​​)。hih_ihi​包含关于整个输入序列的信息,重点关注输入序列的第iii个字周围的部分。
然后,上下文向量cic_ici​被计算为这些加权和hih_ihi​,如下(公式5):
ci=∑j=1Txαijhjc_{i}=\sum_{j=1}^{T_{x}} \alpha_{i j} h_{j} ci​=j=1∑Tx​​αij​hj​
那么又引入了一个问题,这个aija_{ij}aij​该如何计算,表示的又是什么?其表示hjh_jhj​的权重,计算如下:

αij=exp⁡(eij)∑k=1Txexp⁡(eik)\alpha_{i j}=\frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{T_{x}} \exp \left(e_{i k}\right)} αij​=∑k=1Tx​​exp(eik​)exp(eij​)​
接着又引入了一个新问题eije_{ij}eij​又是一个啥?其计算如下:
eij=a(si−1,hj)e_{ij} = a(s_{i-1}, h_j) eij​=a(si−1​,hj​)
他是一个对齐模型,它对位置jjj周围的输入和位置iii处的输出匹配程度进行评分,换一句话说就是计算si−1s_{i-1}si−1​与hjh_jhj​之间的相似度。然后就是一个softmax嘛,将这些相似度进行归一化。然后对hjh_jhj​进行加权求和得到我们的当前的上下文向量cic_ici​。

我们将对齐模型a参数化为一个前馈神经网络,它与所提出的系统的所有其他组成部分共同训练。请注意,与传统的机器翻译不同,这个对齐并不被认为是一个潜在的变量。相反,对齐模型直接计算一个软对齐,这允许cost函数的梯度通过反向传播。该梯度可用于联合训练对齐模型和整个翻译模型。

到这里基本上已经结束了,当了解了各个模块的意义之后,仔细一看,其实也不难,就是逻辑上可能有点绕。

用图说话

上面的公式什么杂七杂八的可能有些乱,如果你的“attention”不够,可能还不懂。下面,我根据自己的理解,绘制一些图,供参考理解,考验绘图能力的时候到了哟。下图以计算c2c_2c2​为例。

需要说明的是,其中soft align + softmax 是先进行相似度计算,然后使用softmax进行归一化处理。整个流程用一张动图来看是这样子的。

如果原来的公式,概念不理解的话,回过头看看,应该会清楚一些。

【NLP】Seq2Seq与Attention(Neural Machine Translation by Jointly Learning to Align and Translate)回顾相关推荐

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

    <Neural Machine Translation by Jointly Learning to Align and Translate>--基于联合学习对齐和翻译的神经机器翻译 作者 ...

  2. 【论文泛读】4. 机器翻译:Neural Machine Translation by Jointly Learning to Align and Translate

    更新进度:■■■■■■■■■■■■■■■■■■■■■■■|100% 理论上一周更一个经典论文 刚刚开始学习,写的不好,有错误麻烦大家留言给我啦 这位博主的笔记短小精炼,爱了爱了:点击跳转 目录 准备 ...

  3. [论文阅读]Neural Machine Translation By Jointly Learning to Align and Translate

    文章目录 前言 摘要 一.神经机器翻译 1.机器翻译 2.基于RNN的Encoder-Decoder架构 二.文章贡献 三.模型架构 1.译码器:整体概述 2.编码器:用于注释序列的双向RNN 四.实 ...

  4. neural machine translation by jointly learning to align and translate

    1.论文出处 Dzmitry Bahdanau, KyungHyun Cho, Yoshua Bengio, "neural machine translation by jointly l ...

  5. 《Neural Machine Translation by Jointly Learning to Align and Translate》阅读笔记

    个人总结 本文最大贡献是提出了注意力机制,相比于之前 NMT(Neural Machine Translation) 把整个句子压缩成一个固定向量表示的方法,对不同位置的目标单词计算每个输入的不同权重 ...

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

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

  7. 论文阅读:《Neural Machine Translation by Jointly Learning to Align and Translate》

    https://blog.csdn.net/u011239443/article/details/80521026 论文地址:http://pdfs.semanticscholar.org/071b/ ...

  8. Netural Machine Translation By Joinly Learning To Align And Translate

    参考论文:Netural Machine Translation By Joinly Learning To Align And Translate 这篇论文应该是attention系列论文的鼻祖论文 ...

  9. 《Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach》论文阅读笔记

    Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach 基本信息 研究目 ...

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

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

最新文章

  1. 1088 Rational Arithmetic
  2. SAP Lumira 初探
  3. rep movsd + rep movsb 内联实现 strcpy
  4. CGLIB 实现代理对象API
  5. 如何在JS中改变Extjs combox 的值
  6. 小白零基础学习Java开发入门教程奉上,希望对你有所帮助!
  7. 自定义枚举typeHandler
  8. csu 最优对称路径(bfs+记忆化搜索)
  9. JAVA高并发服务器工作笔记0001---Java中InetAddress与InetSocketAddress的基本用法
  10. (四)洞悉linux下的Netfilteramp;iptables:包过滤子系统iptable_filter
  11. Kongzue的APP拍照相册选择工具
  12. Android3D画廊总结整理
  13. JQuery文件上传插件Uploadify
  14. 手机投影到电脑上做演示
  15. 【Unity Editor编辑器】 代码获取project面板选中资源路径(自定义右键菜单)
  16. 万丈高楼平地起 AI帮你做自己
  17. 有没有免费的 BI 软件
  18. VR是TAA的终结者吗?
  19. 云服务PaaS、SaaS、IaaS
  20. tkinter可视化天气查询

热门文章

  1. 突破人生的瓶颈(心灵之灯)
  2. 但行好事 莫问前程(四月)
  3. Ubuntu下安装LXDE+XRDP实现远程桌面访问(最轻量级桌面)
  4. iis 值不在预期的范围错误解决办法
  5. 计算机代表的数字,计算机中数的表示
  6. 20190406-楞次定律、洛伦兹力与安培力、切割磁感线过程中的能量关系
  7. 浅夏,绿色延伸,就连邻家墙角的蔷薇也羞红了脸
  8. photoshop另存为dds文件时的错误
  9. android webview 跳转系统浏览器,webview 调用系统浏览器怎么解决
  10. 数据结构 hbb(汉堡包)