引言

本文是论文 Sequence to Sequence Learning with Neural Networks的个人翻译,肯定有很多理解不到之处,欢迎指出。

摘要

深度神经网络(DNN)是强大的模型,它在很多困难的学习任务中表现很好。但是它需要有足够的标签数据,因此其并不适用于去做序列到序列的映射任务。在本文中,我们提出了一种通用的端到端的序列学习模型,只需对序列结构进行最小的假设。我们的模型使用一个多层的LSTM来映射输入序列(编码)到固定维度的向量,然后另一个深LSTM结构去解码这个向量来获取输出序列。我们将该模型应用到英语到法语的翻译任务,数据集来自WMT’14,在整个测试集上的BLEU得到达到34.8,但一些不在词典中的单词影响了得分。另外,这种LSTM模型处理长句子没有困难。一个基于短语的SMT系统在同样的数据集上能达到33.3分,当我们对SMT系统的1000个清单使用LSTM重新评估后,它的得分能达到35.6分,这已经非常接近该任务最佳得分了。LSTM也学到了合理的短语和句子表达。最终,我们发现对所有原语句(不包括目标语句)进行逆序操作能显著地提升LSTM的表现。因为这样在原语句和目标语句之间引入了很多短依赖,从而能更容易地优化。

直观上可以这么认为,反转输入语句后,使得单词离目标词靠的更近。比如"I am learning NLP"和"我在学习自然预处理",反转原语句变成了"NLP learning am I",导致"I"和"我"离得更近,所以梯度的传播变得更容易,学习效率也更高。

1 简介

深度神经网络是强大的模型,它在很多困难的学习任务中表现很好,这些任务中有语音识别和视觉目标识别(visual object recognition)。DNN的强大之处在于能在一定步骤内并行计算。比如DNN只需2个隐藏层就能排序N个N位的数字。所以,虽然神经网络是与传统的统计模型有关,但是它学会了复杂的计算。而且,只要有标签的训练集足够,大的DNN就能通过反向传播算法学习整个网络所需的参数。因此,只要存在一些能使大DNN达到很好结果的参数(比如,人类能迅速处理的那些任务),反向传播就能找到这些合适的参数来解决问题。

尽管DNN如此强大同时灵活性强,但它只能适用于输入和目标输出能有效地编码到固定维度向量中的场景。这是一个不容忽视的限制,因为很多重要的任务它们只能用长度未知的序列来最好的表达。例如,语音识别和机器翻译就是这种长度未知且具有顺序的问题,问答系统也能被看成是映射问题的单词序列表示到答案的单词序列表示。因此,领域独立的映射序列到序列(sequences to sequences)的方法就会非常有用。

序列问题对DNN提出了挑战,因为DNN需要输入和输出的维度是已经且固定的。本文,我们展示一种LSTM结构的直接应用,它能解决通用的序列到序列问题。其核心思想是使用一个LSTM结构来读取输入序列,一次读取一个时间步,去获取一种大的固定维度的向量表示(编码),然后,使用另一个LSTM来从该向量中抽取出输出序列(解码),如图1所示。第二个LSTM结构本质上就是一个RNN语言模型,除了它需要读取特定的输入。由于在这种结构中,输入和输出存在相当大的时间步距离,LSTM成功学习长期时间依赖性的能力,使得它是这种应用的一个自然选择。

图1:我们的模型读入输入序列“ABC”然后产生输出语句“WXYZ”,在输出语句终止符“”后就停止输出。如上所述,LSTM读取反转的输入序列,能建立很多短期依赖,从而加快学习效率。

人们进行了很多相关尝试来使用神经网络解决通用的序列到序列问题。我们的研究和Kalchbrenner and Blunsom的类似,他们是第一个提出映射整个输入序列到向量的,我们的研究也和Cho et al做的有关,虽然他们只用于对基于短语的系统产生的输出进行重新评估。Graves引入了一种全新的注意力机制,这种机制允许网络注意输入的不同部分,更厉害的是,Bahdanau等人提出了一种这种注意力机制更优雅的变体,并成功应用到机器翻译任务。基于连接主义理论的序列分类是另一种流行技术,其用神经网络来做序列到序列的映射,不过它假设输入和输出都是对齐的。

本文提出的模型主要结果如下,在WMT’14英语到法语的翻译任务中,我们集成5个深的LSTM,构建一个简单从左到右的束搜索解码器来直接抽取出翻译结果,得到了34.81BLEU得分。到目前为止,这是通过大型神经网络直接翻译获得的最佳结果。作为比较,我们用SMT的得分33.30作为baseline。而这34.81分是通过LSTM用80k的词典达到的,所以不在词典中的单词会对得分有一定的影响。这只是在一个小词汇量的词典中取得的成绩,这说明它还有很大的提升空间。

最后,我们以SMT作为基准,用LSTM在同样的任务上重新评估,最终得到36.5BLEU得分,比这个基准高了3.2分,并且接近于该任务上已知最好的得分。
意外的是,这个LSTM模型没有受长语句影响,尽管最近的其他研究者做的实验表明会受长语句影响。我想是因为我们反转了原语句的顺序,且没有反转目标语句的顺序。这样在原语句和目标语句之间引入了很多短依赖,从而能更容易地优化。因此,使用随机梯度算法就能使这个LSTM模型学到长语句相关信息。这个简单的反转原语句的技巧我们这项工作的关键贡献之一。

该LSTM模型一个有用的特性是它能学到如何将变长输入序列编码到固定维度的向量中。鉴于翻译往往是一种对原语句的解码,这种目标促使LSTM去发现抓住语义的句子表示。因为语义相近的语句距离更小。定性的评估支持这种说法,表明我们的模型知道单词的顺序,和相对于主动和被动语态的不变性。

2 模型

RNN是前馈神经网络对序列的一种自然推广。给定输入序列(x1,x2,⋯,xT)(x_1,x_2,\cdots,x_T)(x1​,x2​,⋯,xT​),RNN就能通过迭代下面的公式得到输出序列(y1,y2,⋯,yT)(y_1,y_2,\cdots,y_T)(y1​,y2​,⋯,yT​):

ht=sigm(Whxxt+Whhht−1)yt=Wyhhth_t = sigm(W^{hx}x_t +W^{hh}h_{t-1})\\ y_t = W^{yh}h_t ht​=sigm(Whxxt​+Whhht−1​)yt​=Wyhht​

只要能事先知道输入序列和输出序列的对齐方式,RNN就能轻易的对序列到序列进行映射。然而,现在不清楚如何将一个RNN应用到输入和输出序列有不同的长度同时复杂和且存在非单调关系的问题上。

应对通用的序列学习问题最简单的策略是用一个RNN映射输入序列到一个固定的向量,然后用另一个RNN将这个向量映射成输出序列。尽管这理论上是可行的,因为RNN能获取到所有关联信息,但由于长期依赖问题导致这种架构很难训练。然而,LSTM就是著名的解决长期依赖问题的模型,所以LSTM可能可以胜任这种场景。

使用LSTM的目标是计算条件概率p(y1,⋯,yT′∣x1,⋯,xT)p(y_1,\cdots,y_{T^\prime}|x_1,\cdots,x_T)p(y1​,⋯,yT′​∣x1​,⋯,xT​),其中(x1,⋯,xT)(x_1,\cdots,x_T)(x1​,⋯,xT​)是输入序列,y1,⋯,yT′y_1,\cdots,y_{T^\prime}y1​,⋯,yT′​是对应的长度不一定相等的输出序列。其计算过程为:首先,LSTM由最后一个隐藏状态获取输入序列(x1,⋯,xT)(x_1,\cdots,x_T)(x1​,⋯,xT​)的定长向量表示vvv,然后通过标准的LSTM语言模型公式计算y1,⋯,yT′y_1,\cdots,y_{T^\prime}y1​,⋯,yT′​的概率。此LSTM的初始隐藏状态被设成向量表示vvv。

p(y1,⋯,yT′∣x1,⋯,xT)=∏t=1T′p(yt∣v,y1,⋯,yt−1)(1)p(y_1,\cdots,y_{T^\prime}|x_1,\cdots,x_T) = \prod_{t=1}^{T^\prime} p(y_t|v,y_1,\cdots,y_{t-1}) \tag{1} p(y1​,⋯,yT′​∣x1​,⋯,xT​)=t=1∏T′​p(yt​∣v,y1​,⋯,yt−1​)(1)

在这个等式中,每个时间步ttt对应的p(yt∣v,y1,⋯,yt−1)p(y_t|v,y_1,\cdots,y_{t-1})p(yt​∣v,y1​,⋯,yt−1​)都是一个概率分布,它是通过Softmax计算出所有词典中单词出现的概率。这个LSTM公式参考了Graves的文献,注意到我们需要每个语句以一个特殊的符号"<EOS>“结尾,这使模型能定义语句长度的一个分布。总体方案如图1所示,它说的是LSTM计算"A”,“B”,“C”,"<EOS>“的向量表示,然后使用该向量表示来计算"W”,“X”,“Y”,“Z”,"<EOS>"的概率。

我们实际的模型和上面描述的有三点重要的不同:

  1. 我们使用了两个不同的LSTM模型:一个处理输入序列;另一个处理输出序列。这么做虽然增加了模型参数数量,但这种成本可以忽略不计,因为这样能使得在多个语言对上同时训练LSTM变得很自然。
  2. 我们发现深层LSTM明显优于浅层LSTM,所以我们选择有四层的LSTM结构。
  3. 我们发现反转输入语句的顺序具有极大的价值。举例来说,我们没有用原语句的顺序a,b,ca,b,ca,b,c来映射目标语句α,β,γ\alpha,\beta,\gammaα,β,γ(原语句的翻译语句),而是喂给LSTM逆序的语句c,b,ac,b,ac,b,a来映射α,β,γ\alpha,\beta,\gammaα,β,γ。这样,aaa紧密接近于α\alphaα,bbb相对更接近于β\betaβ,等等。这被证明能让SGD(随机梯度下降算法)很容易的建立输入和输出序列的联系。我们发现这种简单的数据转换能极大地提升LSTM的表现。

3 实验

我们通过两种不同的方式把我们的方法应用到WMT’14英语到法语的任务。一种是直接翻译输入序列而没有对照SMT系统,另一种是重新评估SMT系统作为基准的最佳的n个清单。下面展示这些翻译方法的准确率,提供样本翻译并可视化了生成的句子表示。

3.1 数据细节

我们使用了WMT’14英语到法语数据集。我们在1200万个句子的子集上训练了模型,其中包括348M个法语单词和304M个英语单词,这种做法参考了H. Schwenk的论文。我们选择此翻译任务和特定的训练集子集是因为这是公开可获得的提供标记化的训练和测试集以及基准SMT系统中的1000项最佳清单。由于典型的神经语言模型依赖于每个单词的向量表示,因此我们使用两种语言的固定词汇表。 我们从源语言选择了160,000个最常用的单词和目标语言80,000个最常用的单词。每个非词典单词都用"UNK"表示。

3.2 解码和评估

我们实验的核心涉及在许多句子对上训练大型深层LSTM。 我们在给定源语句S的情况下,通过最大化正确翻译语句T的对数概率来训练它,所以目标函数是:
1∣S∣∑(T,S)∈Slog⁡p(T∣S)\frac{1}{|\mathcal{S}|} \sum_{(T,S) \in \mathcal{S}} \log p(T|S) ∣S∣1​(T,S)∈S∑​logp(T∣S)
其中S\mathcal{S}S是训练集。一旦训练完成,我们通过以下公式找到LSTM产生的最可能的翻译结果:
T^=arg⁡max⁡Tp(T∣S)(2)\hat T = \arg \, \max_T p(T|S) \tag{2} T^=argTmax​p(T∣S)(2)

我们通过简单的从左到右束搜索解码器找到最可能的翻译结果,束搜索算法维持可指定的B数量的局部假设(partial hypothesis),每个局部假设都是某个翻译语句的前缀(概率最大的前面几个单词)。在每个时间步,我们扩展了束内的每个具有所有可能单词的局部假设,这极大地扩展了假设的数据,所以我们根据模型输出的对数概率只保留了B个最可能的假设。只要<EOS>被加到假设中,说明翻译完成,它就会从束中移除并加到完成假设集合中。解码器是类似的,实现起来很简单。有趣的是,哪怕束搜索大小只有1(相当于贪心搜索),我们的系统也能得到不错的结果。在大小设为2时,进行束搜索的收益最大(见下表1)。

我们也用LSTM来评估基准系统提供的1000个最好的清单,我们评估一个n-best清单,我们用LSTM计算每个假设的对数概率,然后求它们的得分和LSTM得分的平均值。

3.3 反转原语句

尽管LSTM能够解决长期依赖的问题,但我们发现当原语句反转时(目标句不反转)可以使得LSTM的测试困惑度从5.8降至4.7,而测试BLEU分数从25.9增加到30.6。

尽管我们没有对此现象的完整解释,但我们认为它是由向数据集引入许多短期依赖性。 通常,当我们连接一个原语句和目标语句,原语句中的每个单词都与其对应词的目标句子中的单词相距甚远。 结果,导致具有较大的“最小时间滞后”(minimal time lag)。 通过反转原句子中的单词,原语句和目标语句对应单词之间的平均距离不变。 但是,原语句中的前几个词现在非常接近目标语言中的前几个单词,因此最小时间滞后大大减少了。 因此,反向传播可以更轻松地建立原语句和目标语句之间的联系,从而总体上大大改善了性能。

最初,我们认为反转输入句子只会在目标句子的前部分产生更确信的预测,而在后面产生不太确信的预测。 但是,在反转句子上训练的LSTM在长句子上的表现要比在原始句子上训练的LSTM更好,这表明反转输入句子导致LSTM具有更好的内存利用率。

3.4 训练细节

我们发现LSTM模型相当容易训练。 我们使用了4层深LSTM,每层有1000个神经元和1000维单词嵌入,和一个160,000大小的输入词典和80,000大小的输出词典。

因此,深层LSTM使用8000个实数来表示一个句子。 我们发现,深层LSTM的性能明显优于浅层LSTM。每增加一层,其困惑度就会降低近10%,这可能是因为它们的隐藏状态更多。 我们在每个输出中使用了超过80,000个单词的简单softmax。 生成的LSTM具有384,000,000参数,其中64,000,000是纯循环连接(LSTM编码器和LSTM解码器都有32,000,000个参数)。完整的训练细节如下:

  • 我们使用[-0.08,0.08]之间的均匀分布初始化了所有LSTM参数
  • 我们使用随机梯度下降法,固定学习率为0.7。5次epoch后,每半次epoch学习率就减半。 我们总共训练了我们的模型7.5个epoch。
  • 我们将128个语句作为一个批次用于计算梯度,并将其除以批次的大小(即128)。
  • 尽管LSTM不会有梯度消失的问题,但可能会梯度爆炸。因此进行了梯度裁剪,具体做法是对梯度的范数(norm)设置一个严格的阈值,当计算出来的范数超过了该阈值就进行裁剪。对每个批次来说,计算梯度的范数s=∣∣g∣∣2s = ||g||_2s=∣∣g∣∣2​,其中ggg是除以128之后的梯度值。如果s>5s > 5s>5,则ggg 就设成5gs\frac{5g}{s}s5g​。
  • 不同的句子有不同的长度。 大多数句子都很短(例如,长度为20到30之间),但有些句子很长(长度超过100),因此小批次中128个随机选择的训练语句可能大部分都是短句子,以及一小部分长句子。这样,在小批次中的大多数计算都被浪费掉了。为了解决这个问题,我们确保小批次中的所有句子长度大致相等,从而使速度提高2倍。

3.5 并行化

使用GPU加速,这一节就不翻译了,感兴趣的可以看原文。

3.6 实验结果

结果列于表1和2。我们的最佳结果是通过一组LSTM获得的。它们的随机初始化和小批量的随机顺序不同。 虽然LSTM的翻译并没有超越最佳的WMT’14系统,这是第一次在大型MT任务上使用纯神经网络翻译系统结果超过基于短语的SMT基准系统,尽管我们的模型无法处理超字典单词,但结果仍然是可观的。

表1:LSTM在WMT’14英语到法语测试集(ntst14)上的性能。 注意束搜索大小为2的5个LSTM比大小为12的单个LSTM消耗资源更少

如果使用WMT’14最好的的1000清单重新评分,我们的LSTM模型低于最佳的成绩0.5分。

表2: 在WMT’14英语到法语测试集(ntst14)上使用神经网络和SMT系统的结果

3.7 在长语句上的表现

我们惊讶地发现LSTM在长句子上表现出色,如图3所示。表3给出了长句子及其翻译的几个示例。

表3: 一些LSTM产生了长语句翻译

3.8 模型分析

图2: 显示LSTM在处理了图中短语后的隐藏状态进行PCA降维(降到二维)后的结果。这些短语根据语义聚集在一起,这些短语中单词的顺序很重要,这种顺序性很难用词袋模型来捕获

图3: 左图显示了我们的系统性能与句子长度的关系,其中x轴对应于按其长度排序的测试语句,并由实际序列长度标记。少于35个单词的句子得分都是递增的,只有少部分最长的句子会导致得分降低。 右图显示了LSTM在包含越来越罕见单词的句子上的表现,其中x轴对应于按“平均词频等级”排序的测试句子。

我们模型的吸引人的特征之一是它能够将单词序列转化为维度固定的向量。 图2可视化了一些学到的单词表示。 该图清楚显示了这种单词表示对单词的顺序很敏感,而对于用被动语态替换主动语态却相当不敏感。

4 相关工作

这节也不翻译了

5 总结

本文中,我们展示了一个大的深层LSTM,它的词汇量有限并且几乎不对问题结构做出假设,但能胜过基于SMT无限词汇量的标准系统。简单的基于LSTM的方法的成功表明,只要有足够的训练数据,在其他许多序列学习问题上,它们应该也能做得很好。

我们惊讶与通过反转原语句中的单词顺序获得的效果提升程度。我们得出结论,找到具有最大数量短期依赖性的问题编码非常重要,因为它们使学习问题更加简单。甚至,我们无法在非反转原语句的数据上训练一个标准的RNN(如图1所示),我们坚信,当原语句反转时,标准RNN应该更易于训练(尽管我们没有通过实验进行验证)。

LSTM能够正确翻译很长的句子的能力也令我们感到惊讶。我们最初认为LSTM由于内存有限而无法胜任长语句翻译工作,并且其他研究者也用类似我们的模型在长语句上表现不佳。然而,在反转的数据集中训练LSTM可以很容易的翻译长语句。

最重要的是,我们证明了简单、直接和相对未优化的方法可以胜过SMT系统,因此进一步的工作可能会促使更好的翻译准确性。这些结果表明,我们的方法在其他挑战性的序列到序列问题也可能做的不错。

[论文翻译]Sequence to Sequence Learning with Neural Networks相关推荐

  1. [论文翻译]-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 摘要 1 简介 1.1 GNN简史 1.2 Related surveys on graph neural networks 1.3 Graph neural networks vs. ne ...

  2. 【论文翻译】A Survey of Convolutional Neural Networks: Analysis, Applications, and Prospects

    原文地址:https://arxiv.org/ftp/arxiv/papers/2004/2004.02806.pdf 摘要 卷积神经网络(CNN)是深度学习领域最重要的网络之一.由于 CNN 在 许 ...

  3. 论文翻译-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 1 简介 1.1 GNN简史 1.2 GNN的相关研究 1.3 GNN vs 网络嵌入 1.4 文章的创新性 2 基本的图概念的定义 3 GNN分类和框架 3.1 GNNs分类 3.2 框架 ...

  4. 《Sequence to Sequence Learning with Neural Networks》阅读笔记

    Abstract DNNs 可用于各种复杂的学习任务并取得很好的效果,但是 DNNs 不能用于序列到序列的映射.这篇论文提出了一种端到端(end-to-end)的神经网络模型,来学习这种映射关系.作者 ...

  5. 【论文翻译】Deep Residual Learning for Image Recognition

    [论文翻译]Deep Residual Learning for Image Recognition [论文题目]Deep Residual Learning for Image Recognitio ...

  6. Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras-学习笔记

    Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras 序列分类是一种预测建模问题,其中在空间 ...

  7. PATCHY-SAN - Learning Convolutional Neural Networks for Graphs ICML

    文章目录 1 背景 2 PATCHY-SAN模型 Node Sequence Selection - 根据节点排序选择要进行卷积的节点 Neighborhood Assembly - 找到Node的领 ...

  8. 【论文】A Comprehensive Survey on Graph Neural Networks

    A Comprehensive Survey on Graph Neural Networks 1 Introduction 2 Definition 3 Categorization GNN分类 框 ...

  9. 剪枝综述论文阅读:Methods for Pruning Deep Neural Networks

    文章目录 一.概述 1.分类 2.评估 二.Magnitude based pruning 1.权重剪枝 2.彩票定理 3.特征图和过滤器剪枝 (1)基于通道方差的剪枝 Inbound pruning ...

  10. 《Continual lifelong learning with neural networks : A review》阅读笔记

    增量学习更多的起源于认知科学神经科学对记忆和遗忘机制的研究,Continual lifelong learning with neural networks : A review综述探讨了增量学习在生 ...

最新文章

  1. 使用JBoss Modules来模块化Java
  2. Linux学习笔记(二)|常用命令
  3. 深入理解 Python 中的上下文管理器
  4. c语言万年历查询程序代码,C语言 万年历程序(示例代码)
  5. Java正则表达式总结
  6. 99年毕业设计获优的程序-图书管理程序 续
  7. 38、C++ Primer 4th笔记,特殊工具与技术,嵌套类
  8. ORM(Object Relational Mapping,对象/关系映射)
  9. appium 重新启动apk
  10. 5.WEB版QQ多人聊天,带离线留言功能
  11. 为什么跑椭圆机比跑步更累
  12. 为了革命 保护眼睛 !—— 眼科专家配置的色调
  13. 问题 C: Fraction 分数类 I
  14. Lenovo 拯救者15ISK升级BIOS
  15. c# asp.net mvc使用斑马GK888t打印机打印标签
  16. MQL4自编指标学习1
  17. oracle期间平均成本,小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(四)制造费用设置及成本计算...
  18. 汽车系统升级更新,诺威达k2201升级包,2022年11月7日,刚更新的
  19. 用matlab实现理查森外推算法,Matlab数值积分(2)
  20. (二十五)struts2.x中的转换器

热门文章

  1. vs2005开发Silverlight平台搭建
  2. 【mfc】vs2019创建MFC基于对话框的项目没有插入任何代码运行报错:0xC0000005:读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
  3. java day05【数组】
  4. 从零开始的全栈工程师——html篇1.4
  5. python selenium等待特定网页元素加载完毕
  6. Linux系统下安装Mysql
  7. 题目1439:Least Common Multiple
  8. JS调用WebService
  9. 内容分发网络CDN(互联网技术)
  10. APP_FIELD设置Item运行时行为