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

Sequence-to-sequence序列到序列模型是深度学习模型,已在机器翻译、文本摘要和图像字幕等任务中取得了很多成就。Google Translate于2016年底开始在生产中使用这种模型。这两篇先锋论文对这些模型进行了解释 (Sutskever et al., 2014, Cho et al., 2014).
但是,我发现,要充分理解模型以实现模型,就需要阐明一系列相互叠加的概念。我认为,如果可视化方式表达这些想法中的一堆会更容易理解。这就是我在这篇文章中要做的。您需要对深度学习有一些先前的了解,才能阅读这篇文章。我希望它可以成为阅读上面提到的论文(以及后面的文章中链接的关注论文)的有用伴侣。 sequence-to-sequence序列到序列模型是一种采用一系列项目(单词,字母,图像特征等)并输出另一个项目序列的模型。经过训练的模型将像这样工作:
在这里插入图片描述
在神经机器翻译(NMT)中,序列是一系列单词,一个接一个地处理。输出同样是一系列单词:
在这里插入图片描述

Looking under the hood(往内部看)

在内部,模型由编码器(encoder)和解码器(decoder)组成。
encoder处理输入序列中的每个项目,将其捕获的信息编译为vector向量(称为context上下文)。处理完整个输入序列后,encoder将上下文发送给解码器,decoder开始逐项生成输出序列。
在这里插入图片描述
机器翻译也是如此。
在这里插入图片描述
在机器翻译的案例中,上下文context 是一个向量vector(基本上是一个数字数组)。encoder和decoder往往都是循环神经网络(请务必参考Luis Serrano的“循环神经网络的友好介绍”以了解RNN)。
在这里插入图片描述
context上下文是浮点数的向量。在本文的稍后部分,我们将通过为明亮的颜色分配具有较高值的​​单元格来使颜色可视化。

设置模型时,可以设置context上下文向量的大小。它基本上是encoder RNN中隐藏单元的数量。这些可视化显示了一个大小为4的vector 向量,但是在实际应用中,context vector的大小将为256、512或1024。

根据设计,RNN在每个时间步长都需要两个inputs 输入:一个input输入(对于encoder,是从输入语句中提取一个单词)和一个hidden state隐藏状态。但是,该词需要用vector向量表示。为了将单词转换为向量,我们转向称为“单词嵌入(word embedding)”算法的方法类别。这些方法将单词转换为向量空间,可以捕获单词的很多含义/语义信息(例如, king - man + woman = queen)。
在这里插入图片描述
在处理输入词之前,我们需要将其转换为向量。该转换是使用 word embedding算法完成的。我们可以使用预训练的嵌入( pre-trained embeddings)或在数据集(dataset)上训练我们自己的嵌入(embedding )。通常会嵌入大小为200或300的向量,为简单起见,我们将显示大小为4的向量。

现在,我们已经介绍了主要的矢量(vectors)/张量(tensors),让我们回顾一下RNN的机制并建立一种视觉语言来描述这些模型:
在这里插入图片描述
RNN的下一个步骤采用第二个输入矢量(vector )和隐藏状态#1(hidden state #1)创建该时间步骤的输出。在文章的后面,我们将使用这样的动画来描述神经机器翻译模型中的向量(vectors

在下面的可视化中,encoderdecoder的每个脉冲都是RNN处理其输入并为该时间步生成输出。由于encoderdecoder都是RNN,因此每当RNN中的一个步骤进行某些处理时,它都会根据其输入和所看到的先前输入来更新其隐藏状态( hidden state)。

让我们看一下encoder的隐藏状态( hidden state)。注意最后一个隐藏状态( hidden state)实际上是我们传递给decoder的上下文( context)。

在这里插入图片描述
decoder还保持从一个时间步长到下一个时间步长的隐藏状态( hidden state)。我们只是没有在这张图中显示它,因为我们现在关注模型的主要部分。

现在,让我们看一下可视化序列到序列(sequence-to-sequence)模型的另一种方法。此动画将使您更容易理解描述这些模型的静态图形。这称为“展开”视图,在这里我们没有显示一个decoder,而是在每个时间步长显示它的副本。这样,我们可以查看每个时间步骤的输入和输出。

在这里插入图片描述

Let’s Pay Attention Now(让我们现在注意)

事实证明,上下文向量( context vector)是这些类型的模型的瓶颈。这使得模型处理长句子变得颇具挑战性。 Bahdanau等人(2014年)Luong等人(2015年)提出了一种解决方案。这些论文介绍并完善了一种称为“注意力(Attention)”的技术,该技术极大地提高了机器翻译系统的质量。注意使模型可以根据需要集中于输入序列的相关部分。

在这里插入图片描述
在时间步骤7,注意力(Attention)机制使decoder在生成英语翻译之前将注意力集中在单词“étudiant”(法语的“ student”)上。这种放大输入序列相关部分信号的能力使注意力模型比没有注意力的模型产生更好的结果。

让我们继续在这种高抽象水平上研究注意力模型。注意力模型在两个主要方面与经典序列到序列模型不同:

首先,encoder将更多数据传递给decoder。代替传递编码阶段的最后一个隐藏状态,encoder将所有隐藏状态(hidden states)传递给decoder

在这里插入图片描述
其次,注意decoder在产生其输出之前要执行额外的步骤。为了专注于与该解码时间步上有关的输入部分,decoder执行以下操作:

  1. 查看接收到的一组encoder隐藏状态(hidden states)–每个encoder隐藏状态(hidden states)与输入句子中的某个单词最相关
  2. 给每个隐藏的状态(hidden states)打分(让我们暂时忽略现在的评分方式)
  3. 将每个隐藏状态( hidden states)乘以其softmaxed分数,从而放大具有高分数的隐藏状态( hidden states),并淹没具有低分数的隐藏状态( hidden states

在这里插入图片描述

计分练习是在decoder端的每个时间步完成的。

现在,让我们在以下可视化中将整个过程整合在一起,并研究注意力过程的工作方式:

  1. 注意解码器RNN嵌入END令牌和初始解码器隐藏状态( initial decoder hidden state)。
  2. RNN处理其输入,生成输出和新的隐藏状态(new hidden state)向量(h4)。输出被丢弃。
  3. 注意(Attention)步骤:我们使用encoder的隐藏状态(encoder hidden states)和h4向量为该时间步骤计算上下文向量(C4)。
  4. 我们将h4C4拼接到一个向量中。
  5. 我们将此向量通过前馈神经网络( feedforward neural network)(与模型一起训练的神经网络)传递。
  6. 前馈神经网络的输出(output)表示该时间步的输出字。
  7. 重复下一个时间步

在这里插入图片描述
这是查看在每个解码步骤中我们要注意输入句子的哪一部分的另一种方式:

在这里插入图片描述
请注意,该模型不仅仅是将输出中的第一个单词与输入中的第一个单词对齐。它实际上是从训练阶段中学到的,如何在该语言对中对齐单词(在我们的示例中为法语和英语)。上面列出的注意论文提供了一个示例,说明这种机制有多精确:
在这里插入图片描述
你可以看到输出“欧洲经济区”时模型如何正确注意。在法语中,与英语相比,这些单词的顺序是相反的(“européenneéconomiquezone”)。句子中的每个其他单词的顺序相似。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值