本文主要用于记录谷歌发表于2014年的一篇神作(引用量上千),现已被广泛使用的Sequence to Sequence模型论文。方便初学者快速入门,以及自我回顾。
论文链接:https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
深度神经网络(DNNS)在2014年之前已经被证明可用于各种复杂的学习任务,并且均被证实其可行性及高准确率。但是其有一个弊端,即它需要有足够的标注数据,因此其并不适用于去做序列到序列的映射任务(map sequences to sequences)。本论文主要贡献在于提出了一种端到端(end-to-end)的神经网络模型,来学习这种映射关系。作者用一个多层的LSTM网络来将输入序列映射(编码)为一个固定大小纬度的向量,再用另外一个多层的LSTM网络来解码该向量为输出序列。为了论证该模型的可行性,作者将其应用于英语-法语的翻译任务,最终发现其所能达到的效果与当时最好的成绩(可能是某一种SMT,统计机器翻译模型)相差无几。最后,作者对模型以及实验结果进行分析以后,还发现几个有趣的点。1)模型对句子的主动与被动语态并不敏感,但是对输入词的顺序很敏感。2)倒序输入句子能提升模型效果
------------------第二菇 - 核心思想------------------
2.1 论文模型结构
话不多说,直接介绍该论文提出的模型结构。NLP里面的王牌长短时记忆模型(LSTM)当仁不让的被选为作为该模型的基础。主要的思想就是,用一个LSTM(已经被证实能很好的解决长时序列依赖问题)来编码输入序列,顺序输入序列(one step at a time,并没有对输入序列对长度做限制!),以此我们就会得到一个固定大小纬度的向量表达,然后再用另一个LSTM(本质上就是一个语言模型,除了其初始状态就是输入序列被编码得到的向量)来解码该向量,并得到输出序列。可以说这套Seq2Seq框架的提出,为之后的序列映射任务(比如机器翻译等)的质量提升,奠定了扎实的基础。没有理解透其原理的读者,可以再多看一眼论文的图1,我这边也贴出来了,简单理解一下就是输入序列为ABC以及输入序列结束符号<EOS>,从<EOS>开始解码出WXYZ以及结束符号<EOS>,停止解码。多说一句该模型架构在翻译任务上,均取得了不错的效果,且还有巨大的提升空间(比如引入注意力机制),具体细节可以看论文第一章。
在随后介绍模型的第二章,作者也强调了他们对LSTM一些改进的点,主要可以归纳为如下3点:
1)他们使用了2个不同的LSTM模型,以此在增加模型参数的同时,计算量的增加微乎其微,但却提高量模型的泛化能力。
2)实验证明,深层的LSTM模型要比浅层的表现更好,这也符合我们的一贯认知。
3)倒序输入句子,意思就是ABC输入的顺序为CBA,实验表征这样的效果更好。论文自己也很坦诚说自己还没有给出完善的理论依据,但也强行解释了一波,这里我的理解是,顺序与逆序输入并没有改变平均距离(这里距离指的是time step diff),但是却让一开始的几个词他们的距离变短了,而句子末尾的词距离变长的代价似乎并不显著,因此逆序输入会得到更好的效果。
还有一个模型细节可以提一下就是,在解码阶段,beam search解码方式被采用,且能显著提高准确率。该方法其实本质就是在解码各阶段保留多个候选句子,最后在选择概率最大的序列。如果该方法的保留个数为1,其实就是贪心的思想,每一次解码都选取概率最大的那个值。该论文给出的结论是当size为2的时候,模型的表现最好。更多有关该方法的讨论大家可以移步该博客。
更多关于模型的训练细节,大家还是仔细看一下论文的第三章,这里就不展开介绍了,唯一想记录的一点就是,他们实验的时候尽量保证一个Batch的句子长度相似,据说提高了2倍的训练速度。
2.2 论文实验结果分析
具体的实验结果这里就不展现了,原文中也表述的十分清晰,该框架模
型的结果还是杠杠的,这里具体谈2个比较有趣且有价值的点。
1)模型对句子中词的先后顺序较为敏感,但是对其语态并不敏感。这里再贴一张原文的图如下:
大家可以发现,John和Mary的顺序颠倒以后,并没有很好的聚合到一起,倒是admires和is in love with能聚合到一起,由此可见,我们的模型对句子对顺序是十分敏感的。
2)该框架模型对长句的翻译表现出乎意料的好。这里贴一张原文的图如下:
左图呈现了BLEU分数随着句子长度的增加,我们的模型表现并没有呈现明显的下降趋势(其实还在上升),只有在超过35字以后,才略微有一点下降。这也说明了该模型框架对于长句的处理也是足够能胜任的,能想到的就是在实际应用中可能也不需要特别对长句做特殊处理。
右图呈现的就是对那些比较生僻的句子,模型的泛化能力,可以看到模型下降的趋势还是比较明显的,这倒也不难理解,毕竟生僻句子在数据集本身占比就少,如果有特殊的应用场景,那通常的做法我们都是加该场景下的特殊数据,进行微调,应该也能取得不错的效果。
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想及其创新点已经说清楚了。这套seq2seq的框架,也为后续的序列映射任务奠定了基础。论文作者也是尤其惊诧逆序输入句子对效果的提升,以及该模型对长句的翻译能力!
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下模型细节,最后再具体探讨了几个创新的来结束该论文笔记。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁