题目:Paragraph-level Neural Question Generation with Maxout Pointer and Gated Self-attention Networks
最近读了这篇文章,将一些翻译和自己的理解梳理如下。
一、前情提要
本文利用Maxout Pointer机制与gated self-attention机制,进行篇章级别(paragraph level)的问题生成。
在问题生成领域,sequence to sequence的神经模型比基于规则的系统表现得更好。但现有的模型专注于使用一到两个句子作为输入,长文本在利用s2s模型生成问题中表现不佳。但实际上,为了生成高质量的问题,通常需要整篇文章提供必要的上下文信息。
下图是一个需要使用paragraph level的信息才能提出高质量问题的例子,包含问题的句子用绿色的斜体字标出,其中答案span用下划线标出。
本文为了解决问题生成任务中长文本作为输入的挑战,提出了maxout pointer机制并在encoder中加入了gated self-attention。
在SQuAD数据集和MS MARCO数据集上,本文提出的模型在sentence level的QG任务中表现比state of art的模型表现好,在paragraph level的QG任务中,本文模型的表现比其在sentenve level的任务中表现更好,证明了该模型在解决长文本输入问题上是非常有效的。
二、模型详解
下图是本文提出的模型的端到端的结构
本文解决的问题假设:已知文章(passage)和答案(answer),并且答案是来自文章的span,根据已知的文章和答案生成问题(question),question中的词有两个来源:已经定义好的单词表(volcabulary)或原文(passage)。
本文对Encoder和Decoder在标准的加入attention的s2s模型上做了一些优化。
Encoder:
word representation:每个word representation由两部分组成:单词xt的word embedding,也就是图中的et,用来表示单词xt是否在answer span中的meta word representation。这两部分拼接(concatenate)起来作为输入。
gated self-attention:这里假设encoder使用了RNN对word representation进行编码。ut是输入通过RNN之后的输出,对ut进行self-attention,得到的输出称为st。利用ut和st可以得到如下的两部分输出,ft是self-attention的结果,gt是一个门限,也就是上面提到的gate。是利用gt这个门限控制ft和ut的融合比例之后得到的encoder的最终输出。
Decoder:
attention:decoder部分使用的attention是常规的方法,公式如下
Pointer:Pointer Network允许在生成问题的时候产生的word要么来自于预先定义单词表,要么来自于对原文单词的复制。本文提到的Pointer机制使用了attention中的raw attention score,rt。使用的公式如下:
上面的公式中,X代表的是由输入序列生成的一个小的单词表(简称小单词表)。xk是输入序列中的第k个词在小单词表中的indice,yt是decode序列中的第t个词,rt,k代表的则是以上两者的attention原始得分。
这里有一个疑问,decode就是为了确定yt是什么,怎么会已经知道yt是什么词了呢???
然后接下来把copy score和generative score拼接起来,generative score来自常规的RNN网络,就是下面公式不进行softmax之前的值。这里有一个疑问,为什么不是d^t呢?如果不用d^t那attention不就没有用了。
拼接之后向量如下,
这个向量的维度是
其中前一部分是大的单词表的大小,后一部分是小单词表的大小。
对拼接之后的向量进行softmax,这种方式可以让两部分score可以不断compete。也有其他的做法,对两部分score分别做softmax,然后用一个动态权重对两个softmax的结果进行融合,这种做法中权重需要通过训练得到。
Maxout Pointer:用标准的Pointer网络,可能会产生一个问题:生成的问题中的重复的词特别多。为了解决这个问题,使用了Maxout Pointer。公式如下:
三、实验验证结果
1. 数据集
本文在两个数据集上进行了模型验证:SQuAD和MS MARCO
SQuAD:由536篇文章和10万个问题组成,每个问题都有一个对应的答案,答案是文章中的token spans。
为了跟已有研究对比效果,SQuAD数据集有两种划分方法:1)split1:使用dev set作为test set,将train set的文章按照90%-10%的比例随机划分,作为train set和dev set。并且本文在做实验时保留了所有的sample,而没有将sentence-question pair中一个非停用词都没有重合的pair去掉。这种做法使数据集更难训练。2)split2:将dev set中的句子按照50%-50%的比例划分为dev和test set。
MS MARCO:MS MARCO包括10万个queries以及其相应的答案和passage,其中queries就相当于是questions。所有的问题都是从真实匿名用户的queries中抽取的,passage是来自网络的文档。本文实验只用了MS MARCO数据中的一部分,在这部分数据中,答案是包含在passage中的一些sub-spans。使用dev set(7k)作为test set,将train set按照90%-10%的比例划分为train set(51k)和dev set(6k)。
2. 网络细节
1)网络中的encoder和decoder都使用2层的LSTM作为RNN单元的具体实现形式。并且在encoding过程中使用的是双向LSTM。LSTM的隐层的大小是600。在竖直方向的LSTM stack之间使用了概率为0.3的dropout。
2)word embedding使用了经过预训练的300维的GloVe向量,并且在训练过程中GloVe这部分就被冻结(froze)了。meta word embedding的维度是3.
3)encoder和decoder中使用的vocabulary是GloVe 中最常用的45k大小的单词表。
4)在最优化过程中,使用了有动量的SGD。
5)学习率初始值为0.1,在第8个epoch之后,每2个epoch削减为一半。
6)模型总共被训练了20个epoch。
7)mini-batch的大小是64
8)训练完之后,找到4个困惑度最低的模型,选择其中训练的epoch最多的一个作为final model。
9)在decoding的prediction过程中,使用了beam search,beam的大小是10。decoding结束以每个beam 产生EOS为标志。
3. 评价指标
评价的指标包括:BLEU_1~BLEU_4、METEROR、ROUGE-L
4. 结果
模型缩写
s2s: basic sequence to sequence model
s2s-a: s2s + attention mechanism
s2s-a-at: s2s-a + answer tagging
s2s-a-at-cp: s2s-a-at + copy mechanism
s2s-a-at-mp: s2s-a-at + maxout pointer mechanism
s2s-a-at-mp-gsa: s2s-a-at-mp + gated self-attention
实验结论
1)s2s-a和s2s对比,说明了attention对提升模型效果有很大的作用
2)添加了answer tagging(at)之后,par和sen模型之间的差距缩小,说明at有助于模型忽略noise
3)添加了copy mechanism(cp)之后,模型整体的水平提高了,但是par和sen之间的差距又增大了,是因为par的model更容易复制原文的内容,导致准确率变低了。在改用maxout pointer(mcp)之后,par和sen之间的差距确实变小了。
4)加上了gsa之后,首次par比sen的效果更好了,下面是一个self attention的词对齐的可视化结果。可以看出词对齐的分布集中在了正确答案附近。
5)本文还测试了beam search和greedy search的效果,如下表所示。很明显beam search的效果是全都好于greedy的。
6)与已有模型的比对
可以发现本文的最优模型(ours,s2s-a-at-mp-gsa)比已有的模型效果都要更好,并且已有的模型都是sentence level的。
网友评论