《A Deep Generative Framework for Paraphrase Generation》论文笔记
转自:https://ldzhangyx.github.io/2018/09/26/deep-para-generation/
这篇文章发表在2018年的AAAI上,继承了VAE在自然语言处理上的应用,将其应用于句子复述上,用于生成相似的句子;同时因为RNN可以作为语言模型使用,语句的语法正确性也有一定提升。
论文地址:https://arxiv.org/pdf/1709.05074.pdf
背景材料
关于变分自编码器在NLP领域的相关介绍,可以看这篇讨论。
关于文本生成的背景研究,可以看这篇文章。
关于VAE的原理(流形学习)和工程实现,可以看这篇博文。这篇博文详细介绍了VAE的训练过程,Encoder部分(识别模型)和Decoder部分(生成模型)的结构和各个参数的含义。这篇文章同时也提及了reparemetriazation trick的原理。
对于VAE结构的理解和讨论,可以看这篇文章。
实现
Keras实现在这里。
PyTorch实现在这里。
论文笔记
摘要
复述生成是NLP一个重要的课题,本文的模型将VAE和LSTM结合起来生成复述。传统的VAE结合RNN时,生成的句子不符合复述的要求,所以我们将模型的Encoder和Decoder都将原始的句子作为condition进行干涉,这样就达到了复述的效果。这个模型简单、模块化,可以生成不同的多种复述。在量化评测里,本模型明显优于state-of-the-art模型;分析发现模型语法良好;在新数据集上进行了测试,提供了一个baseline。
引入
Introduction这部分,作者介绍了Paraphrase在QA等方面的应用,以及之前的paraphrase方法,认为其多制约于规则,而深度学习的生成模型更加是数据驱动。
区别于VAE的在句子生成上的其他应用,本文的复述模型需要捕获原本句子的特征,所以unconditional的句子生成模型并不适用于此任务。conndition的机制在过去曾被应用到CV领域,然而CV的应用仅仅是用有限的class label作为condition,以及不需要任何的intermediate representation。本文的方法在Encoder和Decoder方面都进行了condition,并且通过LSTM得到intermediate representation。
本文的生成框架对比seq2seq模型,尽管后者可以使用beam search,但不能同时产生多个效果很好的结果,因为beam search的后面结果总是比最顶部的差。在Quora数据集上,本文的模型表现很好。
方法
VAE结构
VAE是一个深度生成式隐变量模型,可以从高维输入学习到丰富、非线性的表示。
编码器方面,相比AE使用了一个确切的编码器函数qΦqΦ,VAE使用了后验分布qΦ(z|x)qΦ(z|x)(或者说识别模型)。这个后验分布通常被假设为高斯分部,所以参数ΦΦ只有均值和方差。VAE使后验分布qΦ(z|x)qΦ(z|x)尽可能地接近先验分布p(z)p(z),通常也被视为高斯分布。
VAE的解码器模型,使用了另一个分布pθ(x|z)pθ(x|z),也就是输入隐变量(z)(z),还原出xx。其参数θθ使用另一个前馈神经网络的输出值。
将观测数据x(i)x(i)的对数似然可以写作:
logpθ(x(i)=KL(qΦ(z|x(i))||pθ(z|x(i)))+L(θ,Φ;x(i)))logpθ(x(i)=KL(qΦ(z|x(i))||pθ(z|x(i)))+L(θ,Φ;x(i)))
将ELBOELBO记为LL,然后通过优化LL,来间接优化似然。
LL可以写作:
L(θ,Φ;x(i)))=−KL(qΦ(z|x(i))||pθ(z))+EqΦ(z|x)[logpθ(x(i)|z)]L(θ,Φ;x(i)))=−KL(qΦ(z|x(i))||pθ(z))+EqΦ(z|x)[logpθ(x(i)|z)]
优化目标变为后面两项。
具体的推导可以参考这个教程。
更多地,在建模文字数据的时候,也可以使用KL-term annealing以及dropout of inputs of the decoder等训练技巧,避免一些问题。
模型结构
我们的训练集使用了N对句子,表示为{\mathbf{s}_n^{(o), \mathbf{s}_n^{(p)}}^N_{n=1}{\mathbf{s}_n^{(o), \mathbf{s}_n^{(p)}}^N_{n=1},其中原始句子用oo标注,复述句子用pp标注。句子的向量表示标记为x(o)x(o)与x(p)x(p),
去掉LSTM后,本文的宏观模型如图所示:
区别于传统的VAE,本文构建的模型将xoxo作为了condition加在了Encoder和Decoder之上。
更加细节的结构如图所示:
实际上,本文的模型包括了三个LSTM encoder和一个LSTM decoder,总共有4个LSTM,如上图所示。
在VAE的Encoder方面,两个LSTM encoder被使用,第一个转换原始句子s(o)s(o)到其向量表示xoxo,与复述句子s(p)s(p)送入第二个LSTM。将两个句子都编码进了LSTM之后,使用一个前馈网络输出ΦΦ,也就是向量表示的均值和方差,送入VAE。
在VAE的Decoder方面,VAE输出隐变量zz,第三个LSTM编码原始句子,然后将原始句子的向量表示x(o)x(o)与zz一同送入第四个LSTM,产生复述的句子。
将LSTM抽象化,可以得到一个这样的模型:
这个模型的variational lower-bound,也就是ELBOELBO如下。最小化KL散度的过程等同于最大化ELBOELBO的过程。
L(θ,Φ;x(p),x(o)))=EqΦ(z|x(p),x(o))[logpθ(x(p)|z,x(o))]−KL(qΦ(z|x(p),x(o))||p(z))L(θ,Φ;x(p),x(o)))=EqΦ(z|x(p),x(o))[logpθ(x(p)|z,x(o))]−KL(qΦ(z|x(p),x(o))||p(z))
模型的训练方法与《Generating sentences from a continuous space》中的相同。这篇论文深深地影响了后续论文的思路。
实验
数据集
本文使用了两个数据集进行评测。
MSCOCO数据集
这个数据集,也曾用于评测句子复述的方法,对120K张图片分别有人工标注的五句描述。构建数据集的时候,本文随机忽略一个描述,然后将剩下的描述两两配对组成数据集,同时限制长度在15个单词以内,以减少模型复杂度。
Quora数据集
Quora在2017年发布了一个数据集,包含400K行潜在的重复问题对。借助这个数据集,本文将重复的问题看作是复述的句子进行训练。重复的问题对大约有155K对,使用50K,100K,150K对进行训练,4K对作为测试。
实验设置
实验的主要参数设置参考了《Generating sentences from a continuous space》的实现代码,未对任何数据集做fine-tuning。本文模型中,作者没有使用预先embedding好的词向量,而是自己进行了训练。embedding dimension设置为300,encoder和decoder的dimension是600,隐变量dimension是1100。Encoder只有一层而Decoder有两层。模型使用SGD进行训练,学习率固定为5∗10−55∗10−5,dropout为0.3,batch size为32。
评测
本文使用了BLEU,METEOR和TER进行评测。因为这个过程类似翻译任务,所以借用翻译的指标效果会比较好。评测结果显示优于其他模型。
评测包含了对实验结果的分析,可以直接阅读原文。
结论
本文提出了一个深度生成框架,基于VAE,增加了seq2seq模型,用于生成释义。与传统的VAE和无条件句子生成模型不同,这个模型在输入句子上调节VAE的encoder和decoder侧,因此可以为给定句子生成多个释义。在一般复述生成数据集上评估所提出的方法,并且表明它在很大程度上优于现有技术,没有任何超参数调整。本文还评估了对最近发布的问题复述数据集的方法,并展示了其卓越的性能。生成的释义不仅在语义上与原始输入句子相似,而且还能够捕获与原始句子相关的新概念。
想法
这篇文章是我阅读的第一篇关于VAE文本生成的论文,我将在本周使用PyTorch完成这个模型的复现工作。在学习VAE背后深层原理的过程中,我遇到了一些麻烦,只能说是初步理解。然而工程上VAE是一个相比GAN更加自然地适用于NLP的模型,其噪声与重建的对抗思路让我对文本生成有了全新的认识。
对于VAE结构,我自己还需要做更多的推导、学习,反复阅读笔记最前面的几篇文章,加深理解。如果不能完整理解VAE的构建过程,就无从提起改进。
文章亮点
文章提出了一个基于VAE的模型,但这个模型并不是单纯的文本生成,而是使用了condition,那么这个condition对VAE公式要做一些改动,这个思维的推理过程结合了一定理论成分。
在句子复述的领域中,这个模型生成的句子在可读性(METEOR,人类评估)上有着一定优势,能不能用于语法改错?虽然语法改错上我猜测基于规则的模型会更加精确全面,但一定程度上自动改善语法问题,应该有一定帮助。
想法
这篇文章使用VAE来做句子复述,那么是否可以将condition的概念拓展到另外的领域?
在2016年的那篇VAE做NLP的开创性论文中,提及了这样一个问题,在实际的训练过程中,KL散度可能会出现collapse,导致后验等于先验。由于 RNN-based 的 decoder 有着非常强的 modeling power,直接导致即使依赖很少的 history 信息也可以让 reconstruction errors 降得很低,换句话说,decoder 不依赖 encoder 提供的 z 了,VAE-LSTM模型因此退化成RNN-LM语言模型。
在那篇论文里,使用的缓解办法就是KL cost annealing 和 Word dropout。目前对VAE结构的改进研究也很多,我认为改变VAE结构,进行微调,其效果有可能陷入GAN的一堆改进结构的泥淖里。
如果将VAE引入其他模型会怎么样呢?哈佛NLP组提出过注意力模型的解决方案。我觉得这方面的思考非常有吸引力。