《Sequence to Sequence Learning with Neural Networks》论文翻译

1、概述

  • 论文的地位
    • seq2seq模型提出最早论文
  • 中文题目
    • 使用神经网络学习序列到序列的映射
  • 该模型出现之前,人们用哪些算法解决这个问题?
    • 这个模型主要是提到用多层lstm实现,之前的模型由类似作用的似乎不是用lstm来做的,而且这个模型结构比较简单,更有说服力

2、来源

3、数据

WMT-14:http://www.statmt.org/wmt14/translation-task.html

4、引用

Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to Sequence Learning with Neural Networks. ArXiv:1409.3215 [Cs]. Retrieved from http://arxiv.org/abs/1409.3215

5、摘要

  • 深度神经网络(DNNs)是一种功能强大的模型,它在困难的学习任务中取得了优异的成绩。
  • 尽管DNNs在大型标记训练集可用时工作良好,但它们不能用于将序列映射到序列。
  • 在本文中,我们提出了一种对序列结构做最小假设的一般端到端序列学习方法。
  • 我们的方法是使用一个多层的长短时记忆(LSTM)将输入序列映射到一个固定维数的向量上,然后再使用另一个深度LSTM从向量上解码目标序列。
  • 我们的主要结果是,在wmt ‘ 14数据集的英法翻译任务中,LSTM生成的翻译在整个测试集上获得了34.8的BLEU分数,LSTM的BLEU分数在词汇表外的单词上受到了惩罚。
  • 此外,LSTM在长句子上没有困难。
  • 作为比较,基于短语的SMT系统在同一数据集上获得了33.3的BLEU分数。
  • 当我们使用LSTM对前面提到的SMT系统产生的1000个假设进行重新排序时,其BLEU分数增加到36.5,接近于之前在这项任务中的最佳结果。
  • LSTM还学习了对词序敏感、对主动语态和被动语态相对不变的有意义的短语和句子表示。
  • 最后,我们发现,颠倒所有源句(而非目标句)中的单词顺序可以极大地提高LSTM的性能,因为这样做会在源句和目标句之间引入许多短期依赖性,从而使优化问题变得更容易。

6、介绍

  • 深度神经网络(DNNs)是一种功能极其强大的机器学习模型,在语音识别[13,7]和视觉对象识别[19,6,21,20]等困难问题上表现优异。
  • dnn非常强大,因为它可以执行任意的并行计算,只需要很少的步骤。
  • DNNs的强大功能的一个令人惊讶的例子是,它仅使用2个二次大小的隐藏层[27]来对NN位数字排序。
  • 因此,虽然神经网络与传统的统计模型有关,但它们学习的是复杂的计算。
  • 此外,只要标记的训练集有足够的信息来指定网络的参数,就可以使用有监督的反向传播来训练大型dnn。
  • 因此,如果存在一个大型DNN的参数设置,并取得了良好的结果(例如,因为人类可以非常快速地解决任务),监督反向传播将找到这些参数并解决问题。
  • 尽管DNNs具有灵活性和强大的功能,但它只适用于输入和目标可以用固定维数的向量合理编码的问题。
  • 这是一个重要的限制,因为许多重要的问题最好用长度未知的序列来表示。
  • 例如,语音识别和机器翻译是连续的问题。
  • 同样,回答问题也可以看作是将表示问题的单词序列映射到表示答案的单词序列。
  • 因此,一种学习将序列映射到序列的与域无关的方法是有用的。
  • 序列对DNNs是一个挑战,因为它们要求输入和输出的维数是已知的和固定的。
  • 在本文中,我们证明了一个简单的应用长短时记忆(LSTM)架构可以解决一般序列到序列的问题。
  • 这个想法是使用一个LSTM读取输入序列,每次读入一个时间片段的内容,得到一个很大的固定长度的向量,然后使用另一个LSTM从向量中提取的输出序列(如图1)。
  • 第二个LSTM本质上是一个递归语言模型,除了它是以输入序列作为条件的。
  • LSTM在长序列上的学习能力使它很适合这个任务,因为输出和输入之间的时间滞后很长。
  • 使用RNN解决序列到序列的生成问题有很多相关研究了:
    • 我们的方法与《Recurrent continuous translation models》很相似,他们是第一个将整个输入语句映射到一个完整向量的人。
    • 与《Learning phrase representations using RNN encoder-decoder for statistical machine translation》也很相似,它用于在基于语段的系统中提取一些假设。
    • 《Generating sequences with recurrent neural networks》引入了一种新的可微分的注意机制,它允许神经网络将注意力集中在输入的不同部分,《Neural machine translation by jointly learning to align and translate》将这种思想的一种变体成功地应用于机器翻译。
    • 《Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks》中提出的连接序列分类是另一种使用神经网络将序列映射到序列的流行技术,但它假定输入和输出之间是单调对齐的。



      图1:我们的模型读取输入句子“ABC”并生成“WXYZ”作为输出句子。
      在输出语句结束标记之后,模型停止进行预测。
      注意,LSTM以相反的方式读取输入语句,因为这样做会在数据中引入许多短期依赖项,从而使优化问题变得更加容易。

  • 我们的工作主要如下:
    • 在WMT-14英法翻译任务中,我们使用一个简单的从左到右的波束搜索解码器直接从5个深度LSTMs(每个LSTMs有384Mparameters和8000维状态)中提取翻译,从而获得了34.81的BLEU评分。这是迄今为止使用大型神经网络直接翻译所获得的最佳结果,作为比较,该数据集上SMT基线的BLEU评分为33.30。
    • 34.81的BLEU分数是通过一个词汇量为80k的LSTM获得的,所以当参考译文中包含一个不属于这80k的单词时,该分数就会被扣分。
    • 结果表明,一个相对完整的小词汇量神经网络结构比基于短语的SMT系统有更大的改进空间。
    • 最后,我们使用LSTM对同一任务上的SMT基线的公开可用的1000个最佳列表重新进行了核心划分。
  • 通过这样做,我们获得了BLEU评分36.5,这将基线提高了3.2个BLEU分,接近于之前发布的这项任务的最佳结果(37.0)。
  • 令人惊讶的是,LSTM并没有受到很长句子的影响,尽管其他研究人员最近使用了相关架构。我们能够做的长句,因为我们逆转源句子中单词的顺序而不是目标句子训练集和测试集。
  • 通过这样做,我们介绍了许多短期依赖关系的优化问题更简单。因此,SGD可以学习不受长句子困扰的LSTMs。
  • 在源句中颠倒单词的简单技巧是这项工作的关键技术贡献之一。
  • LSTM的一个有用特性是,它学会将一个可变长度的输入语句映射到一个固定维向量表示。
  • 考虑到翻译往往是源句的意译,翻译目标鼓励LSTM寻找能够捕捉其含义的句子表示,因为具有相似含义的句子彼此接近,而具有不同含义的句子则相差甚远。
  • 定性评估支持这一说法,表明我们的模型知道词序,并且对主动语态和被动语态相当不变。

    7、模型

  • 只要提前知道输入和输出之间的对齐,RNN就可以轻松地将序列映射到序列。
  • 然而,如何将RNN应用于输入和输出序列长度不同、关系复杂且非单调的问题,目前尚不清楚。
  • 一般来说,序列学习最简单的策略是使用一个RNN单元将输入序列映射到一个长度固定的向量,然后使用另一个RNN将这一向量映射到目标序列上。
  • 原则上说,这样的模型是有效的,因为RNN提供了所有相关信息。但实践中序列长度很长的话,简单的RNN很难训练,因此出现了LSTM模型。
  • LSTM的目标是估计出 p(y_1, …, y_T’ | x_1, …, x_T) 的条件概率,x是输入序列,y是输出序列,且输入序列和输出序列的长度不见得一样,其理论公式如下:


  • 当然这个公式是信息论中最基本的公式,在序列生成领域依然如此。
  • 我们将实验设定为输入序列为:[ “A”, “B”, “C”, “” ],输出序列为:[ “W”, “X”, “Y”, “Z”, “” ],在序列中起到标记序列结束位置的作用,如图一所示。
  • 当然上面说的只是理论模型基本描述,我们实际还有三个trick:
    • 1、我们使用两个不同的LSTM:一个用在输入序列上,一个用在输出序列上,因为这样做增加了模型中的参数(理论上讲,主要是状态参数),并且可以在多种语言上进行训练。
      • 这里作者提到一个文章《Recurrent continuous translation models》这篇文章提到了使用一个最中间的状态来衔接翻译的一种模型结构,和本文是类似的。
    • 2、我们发现多层LSTM明显比单层LSTM的效果更好,所以我们使用4层LSTM。
    • 3、我们发现改变输入句子中单词的顺序会极大提升LSTM的性能。对于本文的模型来说,我们会打乱输入语句的顺序进行梯度训练(输出顺序不变)

8、实验

  • 基于第14届WMT英译法的比赛的任务和数据进行实验。我们使用它来直接翻译输入语句,而不使用参考SMT系统,我们使用它来重新确定SMT基线的n个最佳列表。我们报告这些翻译方法的准确性,提供示例翻译,并将结果的句子表示可视化。

    1. 数据集说明
    • 我们使用了从英语到法语的WMT-14数据集。
    • 我们将模型训练在一个由3.48亿个法语单词和3.04亿个英语单词组成的1200万个句子的子集上,这是从 http://www-lium.univ-lemans.fr/schwenk/cslm_joint_paper 网站中挑选出来的一个干净的子集。
    • 我们选择这个翻译任务和这个特定的训练集子集是因为一个标记化的训练和测试集以及来自基线SMT的1000个最佳列表的公共可用性。
    • 由于典型的神经语言模型依赖于每个单词的向量表示,因此我们对这两种语言都使用了固定的词汇表。
    • 我们在源语言中使用了16万个最常用的单词,在目标语言中使用了8万个最常用的单词。
    • 每一个词汇表外的单词都被替换为一个特殊的“UNK”标记。
    1. 解码和重打分
    • 我们实验的核心是在许多句子对上训练一个大型的深度LSTM。我们通过最大化给定源句S的一个正确翻译T的log概率来训练它,所以训练目标是


    • S是训练集,训练完成后,我们通过下面的公式寻找最可能的翻译结果:


    • 我们使用一个简单的从左到右的波束搜索译码器来搜索最有可能的翻译,该译码器保留了少量的部分假设,其中部分假设是一些翻译的前缀。
    • 在每一个时间步,我们扩展每一个部分假设在梁与每一个可能的词在词汇表。
    • 这极大地增加了假设的数量,因此我们根据模型的log概率抛弃了除B之外的所有最有可能的假设。
    • 一旦“”符号被附加到一个假设中,它就从波束中被移除,并被添加到完整假设集中。
    • 虽然这个解码器是近似的,但实现起来很简单。
    • 有趣的是,即使波束大小为1,我们的系统也表现良好,而波束大小为2的波束提供了波束搜索的大部分好处(如表1)。



      表1:LSTM在WMT-14英法测试集(ntst14)上的性能。
      请注意,一个由5个LSTM和一个2号光束组成的集成系统要比一个只有12号光束的LSTM便宜。

    • 为了重新确定一个n-best列表,我们使用LSTMand计算每个假设的log概率,并对它们的得分和LSTM的得分取偶数平均值。
    1. 倒装原句
    • 虽然LSTM能够解决具有长期依赖关系的问题,但是我们发现,当源语句被反转(目标语句没有被反转)时,LSTM可以更好地学习。
    • 通过这样做,LSTM的perplexity从5.8下降到4.7,其解码翻译的测试BLEU分数从25.9增加到30.6。
    • 虽然我们对这一现象没有一个完整的解释,但我们认为这是由于数据集引入了许多短期依赖关系造成的。
    • 通常,当我们把一个源句和一个目标句连接起来时,源句中的每个单词都与目标句中的对应单词相差甚远。
    • 因此,这个问题有一个很大的“最小时间延迟”[17]。
    • 通过倒装原句中的词,使原语中对应词与目标语中对应词的平均距离不变。
    • 然而,源语言中的前几个单词现在与目标语言中的前几个单词非常接近,因此问题的最小时间延迟大大减少。
    • 因此,反向传播更容易在源句和目标句之间“建立通信”,从而大大提高了整体性能。
    • 一开始,我们认为把输入的句子倒过来,只会使目标句子的前半部分变得更加自信,而使后半部分变得不那么自信。
    • 然而,训练倒写源句的LSTMs在长句上的表现要比训练原始源句的LSTMs好得多(见第3.7节),这表明倒写输入句可以使LSTMs具有更好的记忆利用率。
    1. 训练细节
    • 我们发现LSTM模型很容易训练。我们使用了4层深度LSTMs,每层有1000个单元,1000个多维词嵌入,输入词汇量为16万个,输出词汇量为8万个。因此深层LSTM使用8000个实数来表示一个句子。我们发现深层的LSTMs明显优于浅层的LSTMs,每一层增加的LSTMs使perplexity减少了近10%,这可能是因为它们的隐藏状态更大。我们在每个输出中使用一个在80000个单词上的朴素softmax。产生的LSTM有384M参数,其中64M是纯循环连接(编码器LSTM为32M,解码器LSTM为32M)。完整的培训详情如下:
      • LSTM的所有参数在-0.08和0.08之间进行均匀初始化
      • 使用无动量的随机梯度下降,其固定学习率为0.7,5个epouch后,每过半个epouch对学习速率减半,总共训练了7.5个epouch的模型。
      • 使用128个序列的批次作为梯度,并将其划分为批次的大小(即128)。
      • 尽管lstm往往不会遇到消失梯度问题,但是它们可能会有爆炸梯度。因此,当梯度的范数超过阈值时,我们对其进行clip,将梯度的范数约束在[10,25]之间。对于每个训练批次,我们计算 s=||g||_2,其中g=梯度/128。如果s>5,那么我们取 g=5g/s。
      • 不同的句子有不同的长度。大多数句子都很短(比如20-30),但也有一些句子很长(>100),所以128个随机选择的训练句子就会有很多短句子和很少的长句子,这样就浪费了大量的计算量。为了解决这个问题,我们确保在一个 minibatch 中的所有句子长度大致相同,这就获得了2倍的加速。
    1. 并行化
    • 一个c++实现的深层LSTM与配置从上一节对单个GPU处理速度约1700字每秒。
    • 这对于我们的目的来说太慢了,所以我们使用8-GPU机器来并行化我们的模型。
    • LSTM的每一层都在不同的GPU上执行,并在计算后立即将其激活传递给下一个GPU层。
    • 我们的模型有4层LSTMs,每一层都位于一个单独的GPU上。
    • 剩下的4个GPU用来并行化softmax,因此每个GPU负责乘以一个1000×20000矩阵。
    • 最终实现的速度为每秒6300个单词(包括英语和法语),最小批处理大小为128。
    • 这个实现花了大约10天的时间进行培训。
    1. 实验结果



      表2:在WMT-14英法测试集(ntst14)上使用神经网络和SMT系统的方法。

    1. 长序列上的性能
    • 我们惊讶地发现LSTM在长句子上表现良好,如图3所示。表3给出了几个长句及其翻译的例子。



      表3:LSTM产生的一些长翻译示例,以及ground truth翻译。读者可以使用谷歌translate验证翻译是否合理。

    1. 模型分析



      图2:该图显示了对图中短语进行处理后得到的LSTM隐藏状态的二维PCA投影。
      这些短语是按意义聚类的,在这些例子中,意义主要是词序的函数,而词序很难用袋装词模型表示。
      请注意,这两个集群具有相似的内部结构。

      9、总结

  • 在这项工作中,我们展示了一个大型的深度LSTM,它有有限的词汇量,并且几乎没有关于问题结构的假设,可以胜过一个标准的基于smt的系统,它的词汇量在大规模emt任务中是无限的。

  • 我们基于lstm的简单方法在MT上的成功表明,如果有足够的训练数据,它应该可以很好地解决许多其他序列学习问题。
  • 我们惊讶地发现,通过把源句中的单词倒过来,所取得的进步之大。
  • 我们的结论是,重要的是找到一个具有最多短期依赖性的问题编码,因为它们使学习问题更简单。
  • 特别是,虽然我们无法在非反向翻译问题上训练标准RNN(如图1所示),但我们认为,当源语句被反向翻译时,标准RNN应该很容易训练(尽管我们没有通过实验验证)。
  • 我们还惊讶于LSTM能够正确翻译非常长的句子。
  • 我们最初认为LSTM在长句上会失败,因为它的记忆能力有限,其他研究人员报告说,使用与我们相似的模型,长句的表现很差[5,2,26]。
  • 然而,在反向数据集上训练的LSTMs在翻译长句子方面几乎没有困难。
  • 最重要的是,我们证明了一种简单、直接和相对未经优化的方法可以胜过SMT系统,因此进一步的工作可能会导致更高的翻译准确性。
  • 这些结果表明,我们的方法很可能在其他具有挑战性的序列对序列的问题上做得很好。