引言
本文是论文 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成功学习长期时间依赖性的能力,使得它是这种应用的一个自然选择。
人们进行了很多相关尝试来使用神经网络解决通用的序列到序列问题。我们的研究和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是前馈神经网络对序列的一种自然推广。给定输入序列 ( x 1 , x 2 , ⋯ , x T ) (x_1,x_2,\cdots,x_T) (x1,x2,⋯,xT),RNN就能通过迭代下面的公式得到输出序列 ( y 1 , y 2 , ⋯ , y T ) (y_1,y_2,\cdots,y_T) (y1,y2,⋯,yT):
h t = s i g m ( W h x x t + W h h h t − 1 ) y t = W y h h t h_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 ( y 1 , ⋯ , y T ′ ∣ x 1 , ⋯ , x T ) p(y_1,\cdots,y_{T^\prime}|x_1,\cdots,x_T) p(y1,⋯,yT′∣x1,⋯,xT),其中 ( x 1 , ⋯ , x T ) (x_1,\cdots,x_T) (x1,⋯,xT)是输入序列, y 1 , ⋯ , y T ′ y_1,\cdots,y_{T^\prime} y1,⋯,yT′是对应的长度不一定相等的输出序列。其计算过程为:首先,LSTM由最后一个隐藏状态获取输入序列 ( x 1 , ⋯ , x T ) (x_1,\cdots,x_T) (x1,⋯,xT)的定长向量表示 v v v,然后通过标准的LSTM语言模型公式计算 y 1 , ⋯ , y T ′ y_1,\cdots,y_{T^\prime} y1,⋯,yT′的概率。此LSTM的初始隐藏状态被设成向量表示 v v v。
p ( y 1 , ⋯ , y T ′ ∣ x 1 , ⋯ , x T ) = ∏ t = 1 T ′ p ( y t ∣ v , y 1 , ⋯ , y t − 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)
在这个等式中,每个时间步
t
t
t对应的
p
(
y
t
∣
v
,
y
1
,
⋯
,
y
t
−
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>
"的概率。
我们实际的模型和上面描述的有三点重要的不同:
- 我们使用了两个不同的LSTM模型:一个处理输入序列;另一个处理输出序列。这么做虽然增加了模型参数数量,但这种成本可以忽略不计,因为这样能使得在多个语言对上同时训练LSTM变得很自然。
- 我们发现深层LSTM明显优于浅层LSTM,所以我们选择有四层的LSTM结构。
- 我们发现反转输入语句的顺序具有极大的价值。举例来说,我们没有用原语句的顺序 a , b , c a,b,c a,b,c来映射目标语句 α , β , γ \alpha,\beta,\gamma α,β,γ(原语句的翻译语句),而是喂给LSTM逆序的语句 c , b , a c,b,a c,b,a来映射 α , β , γ \alpha,\beta,\gamma α,β,γ。这样, a a a紧密接近于 α \alpha α, b b b相对更接近于 β \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
)
∈
S
log
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
T
p
(
T
∣
S
)
(2)
\hat T = \arg \, \max_T p(T|S) \tag{2}
T^=argTmaxp(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 ∣ ∣ 2 s = ||g||_2 s=∣∣g∣∣2,其中 g g g是除以128之后的梯度值。如果 s > 5 s > 5 s>5,则 g g g 就设成 5 g s \frac{5g}{s} s5g。
- 不同的句子有不同的长度。 大多数句子都很短(例如,长度为20到30之间),但有些句子很长(长度超过100),因此小批次中128个随机选择的训练语句可能大部分都是短句子,以及一小部分长句子。这样,在小批次中的大多数计算都被浪费掉了。为了解决这个问题,我们确保小批次中的所有句子长度大致相等,从而使速度提高2倍。
3.5 并行化
使用GPU加速,这一节就不翻译了,感兴趣的可以看原文。
3.6 实验结果
结果列于表1和2。我们的最佳结果是通过一组LSTM获得的。它们的随机初始化和小批量的随机顺序不同。 虽然LSTM的翻译并没有超越最佳的WMT’14系统,这是第一次在大型MT任务上使用纯神经网络翻译系统结果超过基于短语的SMT基准系统,尽管我们的模型无法处理超字典单词,但结果仍然是可观的。
如果使用WMT’14最好的的1000清单重新评分,我们的LSTM模型低于最佳的成绩0.5分。
3.7 在长语句上的表现
我们惊讶地发现LSTM在长句子上表现出色,如图3所示。表3给出了长句子及其翻译的几个示例。
3.8 模型分析
我们模型的吸引人的特征之一是它能够将单词序列转化为维度固定的向量。 图2可视化了一些学到的单词表示。 该图清楚显示了这种单词表示对单词的顺序很敏感,而对于用被动语态替换主动语态却相当不敏感。
4 相关工作
这节也不翻译了
5 总结
本文中,我们展示了一个大的深层LSTM,它的词汇量有限并且几乎不对问题结构做出假设,但能胜过基于SMT无限词汇量的标准系统。简单的基于LSTM的方法的成功表明,只要有足够的训练数据,在其他许多序列学习问题上,它们应该也能做得很好。
我们惊讶与通过反转原语句中的单词顺序获得的效果提升程度。我们得出结论,找到具有最大数量短期依赖性的问题编码非常重要,因为它们使学习问题更加简单。甚至,我们无法在非反转原语句的数据上训练一个标准的RNN(如图1所示),我们坚信,当原语句反转时,标准RNN应该更易于训练(尽管我们没有通过实验进行验证)。
LSTM能够正确翻译很长的句子的能力也令我们感到惊讶。我们最初认为LSTM由于内存有限而无法胜任长语句翻译工作,并且其他研究者也用类似我们的模型在长语句上表现不佳。然而,在反转的数据集中训练LSTM可以很容易的翻译长语句。
最重要的是,我们证明了简单、直接和相对未优化的方法可以胜过SMT系统,因此进一步的工作可能会促使更好的翻译准确性。这些结果表明,我们的方法在其他挑战性的序列到序列问题也可能做的不错。