赞
踩
Sequence-to-Sequence(Seq2Seq)作为一种深度学习模型,在机器翻译、文本摘要、描述图像等任务中取得了诸多进展。谷歌翻译于 2016 年底开始在实际生产中使用该类模型。在 Sutskever et al., 2014
和 Cho et al., 2014
的两篇开创性论文中对这些模型进行了解释。然而,要充分理解模型并实践,一个跟一个的概念会让人望而却步,以视觉化的表达则更容易让人理解。
在机器翻译中,序列(sequence)是一系列单词,一个接一个地处理。同样,输出也是一系列单词。
该模型由 编码器 和 解码器 组成。
编码器处理输入序列中的每一项,它将捕获的信息编译成一个向量(称为上下文)。处理完整个输入序列后,编码器将上下文发送给解码器,解码器开始逐项生成输出序列。
这和机器翻译任务类似。
在机器翻译任务中,上下文是一个向量(基本上是一个数字数组),编码器和解码器往往都是 循环神经网络(Recurrent Neural Networks
,RNN
)。
在设置模型时可以设置上下文向量的大小,它一般是编码器 RNN 中隐藏单元的数量。上图显示了大小为
4
4
4 的向量,但在实际应用中,上下文向量的大小可能为
256
256
256、
512
512
512 或
1024
1024
1024。
根据设计,RNN 在每个时间步都有两个输入:一个输入(在编码器的情况下,输入句子中的一个词)和一个隐藏状态。然而,这个词需要用一个向量来表示。我们可以用 词嵌入 的方法将这些单词转换为向量空间,捕获其语义信息(例如:国王 - 男人 + 女人 = 女王)。
我们可以使用预训练模型完成嵌入,或者在自己的数据集上训练嵌入模型。典型的嵌入向量大小为
200
200
200 或
300
300
300,为简单起见,这里仅展示了大小为
4
4
4 的向量。
在介绍完了向量后,再来回顾一下 RNN 的机制。
下一个步骤(Time step #2
)将采用第
2
2
2 个输入向量(Input vector #2
)和第
1
1
1 个隐藏状态(hidden state #1
)来计算该时间步的输出。
由于编码器和解码器都是 RNN,因此 RNN 的每个时间步骤都会根据其输入和之前看到的输入更新其隐藏状态。
解码器还维护一个隐藏状态,它从一个时间步传递到下一个时间步。因为我们现在关注的是模型的主要部分,所以并没有在上图中将其可视化。
上下文向量被证明是这类模型的瓶颈,这让模型很难处理长句子。Bahdanau et al., 2014
和 Luong et al., 2015.
提出了一种解决方案。这些论文介绍并完善了一种称为 注意力 的技术,该技术极大地提高了机器翻译系统的质量。Attention
允许模型根据需要关注输入序列的相关部分。
在第
7
7
7 步,注意力机制允许解码器在生成英文翻译之前能够将注意力集中在单词 étudiant
(法语中的学生)上。这种 放大来自输入序列相关部分的信号的能力 使得注意力模型能产生比较好的效果。
注意力模型主要在两个方面不同于经典的 sequence-to-sequence
模型:
首先,编码器能将更多数据传递给解码器。编码器不是传递编码阶段的最后一个隐藏状态,而是将所有隐藏状态传递给解码器:
其次,注意力解码器在产生输出之前执行额外的步骤。为了专注于与此解码时间步长相关的输入部分,解码器执行以下操作:
softmaxed
分数,从而放大具有高分的隐藏状态,并忽视具有低分的隐藏状态。
这个评分过程是在解码器端的每个时间步完成的。
那么注意力过程是如何工作的呢?
<END>
标记的嵌入和初始解码器隐藏状态
h
i
n
i
t
h_{init}
hinit。encoder hidden states
)和
h
4
h_4
h4 向量来计算该时间步的上下文向量
C
4
C_4
C4。feedforward neural network
,与模型联合训练的网络)传递该向量。
通过另一种方法查看我们在每个解码步骤中究竟关注了输入句子的哪一部分:
该模型并非无意识地将输出中的第一个单词与输入中的第一个单词对齐。实际上,它在训练阶段学习了如何对齐两种语言中的单词(在本文示例中是法语和英语)。
实战教程推荐:TensorFlow’s Neural Machine Translation (seq2seq) Tutorial
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。