1 Introduction2 The Model3 Experiments3.1 Dataset details3.2 Decoding and Rescoring3.3 Reversing the Source Sentences3.4 Training details3.5 Parallelization3.6 Experimental Results3.7 Performance on long sentences3.8 Model Analysis
4 Related work5 Conclusion
Abstract: DNN可以在有大量标记训练集下表现很好,但是无法处理用于序列映射到序列。在本文中,我们提出了一种端到端的序列训练方法,可以对序列结构做最小的假设。我们的方法使用了多层LSTM将输入序列映射成一个固定维度的向量,然后用另一个深度LSTM从向量中解码出目标序列。
1 Introduction
DNN功能强大:DNN在语音识别和视觉目标检测等困难领域都有很好的表现。DNN可以执行任意数量的并行计算。只要有足够的标记训练集来指定网络参数,就可以用监督反向传播来训练大型DNN。因此,若存在一个参数设置能使大型DNN网络获得良好结果,那么监督反向传播将找到这些参数并解决这个问题。DNN只能用于输入和输出可以用固定维度进行编码的问题:这是一个重要的局限性,因为很多重要问题最好用一些未知长度的序列表示。比如语音识别和机器翻译是顺序问题。问答系统也类似。本文使用一种LSTM(长短期记忆 )的结构来解决一般的seq到seq的问题:一个LSTM用来读取输入序列,一次一个时间步,用来获得大的固定维度向量表示;另一个LSTM从向量中提取输出序列。第二个LSTM实质上是循环神经网络模型 ,只是它的输入序列是有条件的。 此结构可以很好地处理长句子:尽管之前有研究者也采用过相关结构,但是很难处理长句子。技巧在于LSTM反向读取 输入句子,因为这样做会在数据中引入许多 短期依赖关系 ,从而使优化问题更容易。因此,SGD可以学到不再受长句子困扰的LSTM。反转原句中的单词的简单技巧是这项工作的关键技术贡献之一。LSTM的有用属性:它学会了将可变长度的输入句子映射到固定向量表示。BLEU 是一种用于评估从一种自然语言到另一种自然语言的机器翻译的质量的算法。具体了解可参考文章:自然语言处理——BLEU详解以及简单的代码实现.SMT ,统计机器翻译,其翻译是根据统计模型生成的,其参数来源于双语文本语料库的分析。
2 The Model
RNN是前馈神经网络对序列seq的自然推广。 只要事先知道输入与输出之间的映射,RNN可以容易地将seq映射到seq。 然而,因为复杂和非单调关系的问题的输入和输出序列的长度不同,如何将RNN应用于这些问题还不清楚。 一般的序列学习的简单策略是用RNN将输入映射为定长的向量,然后用另一个RNN将向量映射成目标序列。虽然RNN原则上可以工作,但是由于序列的长时间依赖使得RNN很难训练成功。LSTM 可以解决这个问题。LSTM的目标函数是估计对输入序列
{
x
1
,
x
2
,
⋯
,
x
T
}
\left\{x_{1}, x_{2}, \cdots, x_{T}\right\}
{x1,x2,⋯,xT}来说,
{
y
1
,
y
2
,
⋯
,
y
T
′
}
\left\{y_{1}, y_{2}, \cdots, y_{T^{\prime}}\right\}
{y1,y2,⋯,yT′}是其对应的输出序列的条件概率
P
(
y
1
,
y
2
,
⋯
,
y
T
′
∣
x
1
,
x
2
,
⋯
,
x
T
)
P\left(y_{1}, y_{2}, \cdots, y_{T^{\prime}} \mid x_{1}, x_{2}, \cdots, x_{T}\right)
P(y1,y2,⋯,yT′∣x1,x2,⋯,xT),这里长度
T
′
T^{'}
T′和
T
T
T是不同的。LSTM计算条件概率:首先获取由LSTM的最后一个隐藏状态给出来的输入序列
{
x
1
,
x
2
,
⋯
,
x
T
}
\left\{x_{1}, x_{2}, \cdots, x_{T}\right\}
{x1,x2,⋯,xT}的固定维度表示,然后标准的LSTM-LM公式来计算
{
y
1
,
y
2
,
⋯
,
y
T
′
}
\left\{y_{1}, y_{2}, \cdots, y_{T^{\prime}}\right\}
{y1,y2,⋯,yT′}的概率,该公式的初始隐藏状态被设为
{
x
1
,
x
2
,
⋯
,
x
T
}
\left\{x_{1}, x_{2}, \cdots, x_{T}\right\}
{x1,x2,⋯,xT}的向量表示。
p
(
y
1
,
…
,
y
T
′
∣
x
1
,
…
,
x
T
)
=
∏
t
=
1
T
′
p
(
y
t
∣
v
,
y
1
,
…
,
y
t
−
1
)
p\left(y_{1}, \ldots, y_{T^{\prime}} \mid x_{1}, \ldots, x_{T}\right)=\prod_{t=1}^{T^{\prime}} p\left(y_{t} \mid v, y_{1}, \ldots, y_{t-1}\right)
p(y1,…,yT′∣x1,…,xT)=t=1∏T′p(yt∣v,y1,…,yt−1) 在等式中,每个
P
(
y
t
∣
v
,
y
1
,
⋯
,
y
t
−
1
)
P\left(y_{t} \mid v, y_{1}, \cdots, y_{t-1}\right)
P(yt∣v,y1,⋯,yt−1)分布用所有单词在词汇表中的softmax来表示。
本文实际模型的三大创新点:
使用了两个不同的LSTM,一个用于输入序列,一个用于输出序列。因为这样做可以增加模型参数的数量,但计算代价可忽略不计,并且很自然的可以在多语言对上训练LSTM。(算是引用)发现深层LSTM明显优于浅层LSTM,所以本文选择了四层的LSTM。发现颠倒输入句子的单词顺序是非常有价值的。(一个小技巧)
3 Experiments
3.1 Dataset details
使用 WMT’14英语到法语数据集。 由于典型的神经语言模型依赖于每个单词的向量表示,我们对两种语言都使用固定的词汇表。我们使用了16万个最常见的源语言词汇和8万个最常见的目标语言词汇。每个词汇表之外的单词都被替换为一个特殊的“UNK”标记。
3.2 Decoding and Rescoring
3.3 Reversing the Source Sentences
虽然我们对这一现象没有一个完整的解释,但我们相信它是由于引入了对数据集的许多短期依赖而引起的。通常,当我们将源句和目标句连接起来时,源句中的每个词与目标句中的对应词相差甚远。因此,这个问题有一个很大的“最小时滞”。通过对源语句子中的词语进行反向排列,源语对应词与目标语的平均距离不变。然而,源语言的头几个单词现在非常接近目标语言的头几个单词,因此问题的最小时滞大大减少。
3.4 Training details
采用四层的LSTM,每层1000个节点和1000维的单词嵌入。输入词汇量160,000,输出词汇量80,000。因此深度LSTM实际使用8000个实数来代表一个句子。我们发现深层的神经网络明显优于浅层,每增加一层的神经网络就会减少10%的困惑,这可能是由于它有更多的隐层状态。在输出我们使用了朴素的softmax,每次的输出有超过8000个单词。由此产生的LSTM有384M的参数,其中64M是单纯的循环链接(32M用于编码LSTM,32M用于解码LSTM)。完整的训练细节如下:
初始化所有LSTM的参数,其均匀分布在-0.08和0.08之间使用无动量的随机梯度下降SGD,用固定的学习率0.7。经过5个epoch之后,每个epoch之后学习率降低一半。使用batch是128每次training batch之后,计算
s
=
∥
g
∥
2
s=\|g\|_{2}
s=∥g∥2,g 是梯度除以128,如果s > 5, 令
g
=
5
g
s
g=\frac{5 g}{s}
g=s5g。不同句子的长度不同。确保所有小批量中的所有句子长度基本相同,这将加速2倍。用8个GPU同时进行处理。LSTM的每一层都在不同的GPU上运行。
3.5 Parallelization
用8个GPU同时进行处理。LSTM的每一层都在不同的GPU上运行。
3.6 Experimental Results
3.7 Performance on long sentences
LSTM模型在长句子上表现很好。
左图显示我们系统作为长句子函数的表现,对应的x轴表示按照句子长度排序的测试句子。从图中可以看出对于句子长度小于35的句子,LSTM模型的分数都比baseline要高。右图表示LSTM在字数越来越少的句子上的表现,x轴代表句子按照平均词频排序的测试句子。从图中可以看出对于词频排名在2500之前的词,LSTM模型要比baseline好。
3.8 Model Analysis
我们的模型能把一个词序列转换成一个固定维度的向量。下图证明表征物对词序敏感,对主被动语态是不敏感的。 对图中短语进行处理后得到的LSTM的隐藏状态的二维PCA投影。这些短语是按照词意聚类的,也从根本上说明了这些例子中的短语是一个词序函数,用词袋模型是很难捕捉的。
4 Related work
5 Conclusion
在这项工作中,我们证明了在大规模MT任务中,一个词汇量有限的大型深度LSTM可以比一个词汇量没有限制的标准SMT系统表现更好。我们基于LSTM的简单方法在MT上的成功表明,如果它们有足够的训练数据,它应该可以很好地处理许多其他序列学习问题。 对于颠倒原句中的单词后的结果,得到结论是:找到一个具有最大数量短期依赖的问题编码是很重要的,因为它们使学习问题变得更简单。特别是,虽然无法训练一个标准的RNN来解决非反向翻译问题,但当源句被反向时,一个标准的RNN应该是容易训练的(尽管没有在实验中验证)。 在反向数据集上训练的LSTMs在翻译长句子方面几乎没有困难。 最重要的是,我们演示了一种简单、直接且相对不需要最优化的方法可以胜过一个成熟的SMT系统,因此进一步的工作可能会有更大的翻译准确性。这些结果表明,我们的方法将很可能适用于其他具有挑战性的序列对序列问题。