Sequence to Sequence Learning with Neural Networks (Seq2Seq)论文阅读

1. Introduction

本文提出了一种端到端的序列学习方法,并将其用于英语到法语的机器翻译任务中。使用多层LSTM将输入序列映射为固定维数的表示向量,然后使用另一个多层LSTM从该向量解码得到目标序列。作者还提出,颠倒输入序列的单词序列可以提高LSTM的性能,因为这在源和目标序列之间引入了许多短期依赖性。

之前的DNN只能将源序列和目标序列编码为固定维数的向量,而许多问题需用长度不是先验已知的序列表示,例如语音识别、机器翻译。本文的想法是,使用一个LSTM读取源序列逐步得到固定维数的表示向量,然后用另一个LSTM从该表示向量中得到目标序列,第二个LSTM本质上是一个RNN语言模型,只是它以输入序列为条件。由于输入与输出之间有很大的时间延迟,所以使用具有学习长时间依赖关系的数据能力的LSTM(如下图)。

测试结果表明,该模型在机器翻译任务中可以得到不错的BLEU score,显著地优于统计机器翻译基线(SMT baseline)。令人惊讶的是,LSTM在长句子的训练上也没有什么问题,原因是颠倒了输入序列单词的顺序。另外,编码的LSTM将变长序列映射为维数固定的向量,传统的SMT方法倾向于逐字翻译,而LSTM能够学习句子的含义,具有相似含义的句子在表示向量中距离近,不同含义的句子则距离远。一项评估表明,该模型可以学习到单词的顺序,并且对主动和被动语态具有不变性。

2. The model

RNN是前馈神经网络的一种自然泛化。给定一个输入序列${ \left( x\mathop{{}}\nolimits_{{1}},...,x\mathop{{}}\nolimits_{{T}} \right) }$,RNN通过以下公式迭代计算出输出:

 

${\begin{array}{*{20}{l}}
{h\mathop{{}}\nolimits_{{t}}= \sigma \left( W\mathop{{}}\nolimits^{{hx}}x\mathop{{}}\nolimits_{{t}}+W\mathop{{}}\nolimits^{{hh}}h\mathop{{}}\nolimits_{{t-1}} \right) }\\
{y\mathop{{}}\nolimits_{{t}}=W\mathop{{}}\nolimits^{{yh}}h\mathop{{}}\nolimits_{{t}}}
\end{array}}$

 

只要事先知道输入与输出之间的对齐方式,RNN就可以将序列映射到序列。但是,尚不清楚如何将RNN应用于输入和输出序列长度不同且具有非单调关系的问题。一种通用的简单策略是使用一个RNN将输入序列映射到固定维数的向量,然后使用另一个RNN将该向量映射到目标序列。虽然理论上可行,但由于RNN训练时产生了长期依赖性,容易遇到梯度消失的问题,难以训练,而LSTM可以解决这一问题。

LSTM的目标是估计条件概率${p \left( y\mathop{{}}\nolimits_{{1}},...,y\mathop{{}}\nolimits_{{{T \prime }}}{ \left| {x\mathop{{}}\nolimits_{{1}},...,x\mathop{{}}\nolimits_{{T}}}\right. } \right) }$,其中x表示输入序列,y表示输出序列,二者长度 T和T' 可以不相同。LSTM 首先获得最后一个隐藏状态给出的固定维数向量v,然后用一个标准的 LSTM-LM 公式计算${y\mathop{{}}\nolimits_{{1}},...,y\mathop{{}}\nolimits_{{{T \prime }}}}$的概率且该公式中的初始隐藏状态设置为向量v:

${{p \left( y\mathop{{}}\nolimits_{{1}},...,y\mathop{{}}\nolimits_{{{T \prime }}}{ \left| {x\mathop{{}}\nolimits_{{1}},...,x\mathop{{}}\nolimits_{{T}}}\right. } \right) }={\mathop{ \prod }\limits_{{t=1}}^{{{T \prime }}}{p \left( y\mathop{{}}\nolimits_{{t}}{ \left| {v,y\mathop{{}}\nolimits_{{1}},...,y\mathop{{}}\nolimits_{{t-1}}}\right. } \right) }}}$

其中,每个${p \left( y\mathop{{}}\nolimits_{{t}}{ \left| {v,y\mathop{{}}\nolimits_{{1}},...,y\mathop{{}}\nolimits_{{t-1}}}\right. } \right) }$分布用词汇表中所有单词的 softmax 表示。同时需要在每个句子的结尾用 "<EOS>" 来标识,使得模型能够定义所有可能长度序列的分布。

在实际实现中,首先,本文使用了两种不同的LSTM:一种用于输入序列,另一种用于输出序列,因为这样做增加了模型参数的数量,而计算量却可以忽略不计;其次,由于深层LSTM的表现明显由于浅层LSTM,故使用了4层LSTM;最后,颠倒输入序列的单词顺序,举例来说,不是将a,b,c映射到α,β,γ,而是将c,b,a映射到α,β,γ。

3. Experiments

作者使用了两种方式将该方法应用于WMT'14的英语-法语的机器翻译任务中。

3.1 Dataset details

将模型训练在一个由 3.48 亿个法语单词和 3.04 亿个英语单词组成的 1200 万个句子的子集上,这是一个精心挑选的子集。之所以选择此次翻译的任务和训练集,是因为它们作为标记化训练的广范实用性,并且这些数据都是来自 SMT baseline 中的 1000 个最佳列表。由于典型的神经语言模型依赖于每个单词的向量表示,因此两种语言都使用固定词汇表,将160,000个最常用的单词用作源语言的词汇表,将80,000个最常用的单词用作目标语言的词汇表,每个词汇表外的单词都特殊标记为 "UNK" 来表示。

3.2 Decoding and Rescoring

实验的核心是在许多句子对上训练一个大而深的 LSTM(两个LSTM联合训练)。通过最大化一个对数概率来训练这个网络,其中的概率是在给定源句子S上的正确翻译T:

${1/{ \left| {S} \right| }{\mathop{ \sum }\limits_{{ \left( T,S \left)  \in S\right. \right. }}{log\text{ }p \left( T/S \right) }}}$

加粗的S表示训练集。训练完成后,根据 LSTM 找出最可能的翻译作为结果:

${\mathop{{T}}\limits^{ᨈ}=\mathop{{argmax}}\limits_{{T}}\text{ }p \left( T/S \right) }$

训练时使用beam search的方法,即每个时间步的训练保留概率最大的几个估计结果,一旦估计得到"<EOS>"就结束这一分支的训练并将其加入到候选结果中,最后在所有候选结果中选择得分最高的那个。

3.3 Reversing the Source Sentences

通常,当我们将源句与目标句连接在一起时,源句中的每个单词都与目标句中的对应单词相距甚远,且每对单词的距离大致相等。结果,该问题具有较大的“最小时间延迟” 。通过反转源句中的单词,源句和目标句中相应单词之间的平均距离不会改变,但是,源句中的前几个单词现在与目标句中的前几个单词非常接近,因此最大程度地减少了问题的最小时间延迟。因此,反向传播使源句和目标句之间“建立通信”的时间更短,从而反过来大大提高了整体性能。作者原本认为反转输入的句子只会在目标句的前半部分导致更好的估计,而在后段则导致较差的估计。但是,在长句翻译中,在反向句子上训练的LSTM比在原始句子上训练的LSTM要好得多,这表明在LSTM中反转输入句子的结果具有更好的内存利用率。

3.4 Training details

作者使用了 4 层的深度 LSTMs,每层有 1000 个单元,1000 维的单词嵌入,输入词汇为 160000,输出词汇为 80000。深层 LSTMs 明显优于浅层 LSTMs,浅层 LSTMs 每增加一层,perplexity 就减少 10%,这可能是因为它们的隐藏状态更大。完整的训练详情如下:

将LSTM的所有参数都初始化为-0.08和0.08之间的均匀分布;

使用随机梯度下降方法,固定学习率为0.7,5个epoch后,每半个epoch就将学习率减半,对模型进行了总共7.5个时期的训练;

batch大小设为128;

防止梯度爆炸,对梯度进行L2范数约束,对每个batch,计算${{s={ \left\Vert {g} \right\Vert }}\mathop{{}}\nolimits_{{2}}}$,其中g等于梯度除以batch size,如果s>5,则设置g=5g/s;

不同的句子有不同的长度,大多数句子很短(长度为 20-30),但是有一些句子长度又很长(长度大于 100),因此由 128 个随机选择的训练句子组成的 minibatch 将具有许多短句和很少长句,结果就是 minibatch 中大部分计算都是白费的。为了解决这个问题,确保在一个 minibatch 中的所有句子长度大致相同,最终速度提高了 2 倍。

原论文中还对提出的模型进行了测试评价(BLEU score),并与SMT baseline进行了比较,另外,针对测试结果,原论文还做了一些模型分析,这里均不做赘述。

4. Conclusion

这篇论文在现在看来比较简单,是一个经典的Encoder-Decoder模型,只是两部分都由一个深层的LSTM实现,最大的亮点是作者发现颠倒输入序列的单词顺序可以大大提高模型的性能,但是这篇论文对之后的各种Seq2Seq模型的出现影响很大,之后将继续写使用Attention机制的Seq2Seq模型论文笔记。

posted @ 2020-08-03 22:40  滑天下之大j  阅读(427)  评论(0编辑  收藏  举报