本文主要是记录一下研究生阶段看的第一篇论文,这是一篇Google发表在14年的论文,介绍了现在被广泛使用的Sequence to Sequence模型,参考了网上的一些论文笔记。原文l链接
论文结构
- 摘要
- 论文主要内容
- 总结
1. 摘要
深度神经网络DNN已经被证明是一个很好的工具在处理复制问题时有很好表现效果的工具,同时他也有自己的缺点,即需要大量的标注数据且不能处理序列到序列的映射。于是作者提出了一种通用的端到端的映射方法,作者用多层长短期记忆神经网络(LSTM)映射输入序列到一个固定维度的向量,然后再用另外一个LSTM神经网络来解码该向量。该模型在英语-法语翻译中获得了较高的评分,与当时最好的SMT(统计机器翻译模型)相差不大。
2. 论文主要内容
模型主要采用的就是长短期记忆模型(LSTM),他可以很好的处理自然语言处理中的长时序列依赖问题。用一个LSTM处理输入序列,产生一个固定维度的的向量表达,再用另外一个LSTM去解码该向量,得到输出序列,需要注意的是,输入序列的末尾要输入结束符号,以便判断结束产生输出。论文中给出的例子如图所示:
LSTM就是要估算
p
(
y
1
,
.
.
.
,
y
T
′
∣
x
1
,
.
.
.
x
T
)
p(y_1,...,y_{T'}|x_1,...x_T)
p(y1,...,yT′∣x1,...xT)的条件概率,其中
T
′
T'
T′和
T
T
T长度可能不同。先提取处理输入序列中的最后一个隐状态 v,再计算每一个输出的概率,公式如下:
p
(
y
1
,
.
.
.
,
y
T
′
∣
x
1
,
.
.
.
x
T
)
=
∏
t
=
1
T
′
p
(
y
t
∣
v
,
y
1
,
.
.
.
,
y
t
−
1
)
p(y_1,...,y_{T'}|x_1,...x_T)=\prod_{t=1}^{T'}p(y_t|v,y_1,...,y_{t-1})
p(y1,...,yT′∣x1,...xT)=t=1∏T′p(yt∣v,y1,...,yt−1)
我们的训练目标是句子翻译的最大对数概率,即:
1
/
∣
S
o
∣
∑
(
T
,
S
)
∈
S
o
l
o
g
p
(
T
∣
S
)
1/|S_o|\sum_{(T,S)\in S_o}logp (T|S)
1/∣So∣(T,S)∈So∑logp(T∣S)So是原始训练数据,S和T分别是输入语句和正确翻译。
训练完成以后,输出的翻译就是找到最有可能的结果,通过一下公式找到最有可能的翻译:
T
^
=
a
r
g
m
a
x
T
p
(
T
∣
S
)
\hat{T}=arg{max}_Tp(T|S)
T^=argmaxTp(T∣S)
我们采用beam search去寻找最有可能的翻译,
只在test的时候需要。假设词表大小为3,内容为a, b, c。 beam size为2
decoder解码时:
- 生成第1个词的时候,选择概率最大的两个词,假设为a, c,那么当前序列就是a, c
- 生成第2个词的时候,我们将当前序列a和c,分别与词表中的所有词进行组合,得到新的6个序列aa ab ac ca cb cc,然后从其中选择2个得分最高的,当作当前序列,假如为aa cb
- 后面会不断重复这个过程,直到遇到结束符为止。最终输出2个得分最高的序列。
模型在处理长句子的时候也有很好的效果,同时在处理生僻词时效果就会下降,毕竟生僻句子在训练数据集中就是有限的。实验结果如图:
3 . 总结
在机器翻译任务中,有限词汇下的深度LSTM模型可以比标准SMT表现的更好,该模型的提出也给后续的序列翻译问题奠定了基础。有两点作者感到很惊讶,一个是原句子逆序输入对效果的提升,以及该模型对长句的翻译能力。