Improving Neural Question Generation using Answer Separation
本篇是2019年发表在AAAI上的一篇文章。该文章在基础的seq2seq模型的基础上提出了answer-separated seq2seq模型,并通过实验证明该模型显着减少了包含答案的不正确问题的数量,达到了NQG(自然语言生成)模型的state-of-the-art。(2019)。下载点击此处。同时,改论文需要对含注意力机制的seq2seq有基本了解,可以点击此处下载阅读
1 问题
由于文本数据的非结构化性质,从段落中自动生成问题 (QG) 是一项具有挑战性的任务。 NQG的主要问题之一是如何取文章中的问题目标,简称目标答案。 指定问题目标对于生成自然问题是必要的,因为文章中可能有多个目标答案。
比如在上图中,有人、时间、位置等信息, 在不将目标答案作为额外输入的情况下,现有的 NQG 模型更倾向于生成没有特定目标的问题。这是一个基本限制,因为最近的 NQG 系统主要依赖于 RNN 序列到序列模型,而 RNN 不具备对高级可变性进行建模的能力。
为了克服这个问题,许多文章通过使用答案的位置特征来合并目标答案,然而这些方法生成的问题中有很大一部分是包含目标答案中的单词。特别是还有些模型使用复制机制,来促使原始段落中的单词能够更多的出现在问题里,更加剧了这一问题。
2 创新点
基于以上问题,该文章的主要创新点是提出将目标答案与原始文章分开来解决这个问题。
-
首先,如图一使用mask标记 将目标问题的答案与题目进行分离,有助于模型识别与目标答案相关的问题类型,因为模型在标记的帮助下学会了捕获目标答案的位置和上下文信息。
-
此外,提出了一个名为keyword-net的新模块作为新模型的一部分,它从之前分开的目标答案中提取关键信息。 keyword-net使新的 NQG 模型始终能够感知目标答案,弥补了答案分离导致的信息不足。
-
最后,采用了 (Ma et al. 2018) 提出的检索式词生成器,它可以在生成过程中更好地捕捉词语义.
如上图,结构主要如下:
- encoder:目标答案和分离答案的原始段落分别对应两个encoder,对于分离答案后的段落,与基础模型相同,使用一个个单层双向LSTM(见图2第一个)。
对于答案编码encoder,使用另一个单层双 LSTM 对目标答案 \(x^{a}\) 进行编码。 在答案编码器的最后一个时间步中,将每个 LSTM 的隐藏状态串联起来,形成最终的隐藏状态 \(h_{final}^{a}\) ,它代表了答案\(x^{a}\) 的整体特征:
\[{\begin{aligned} \overrightarrow{h_{j}^{a}} &=\overrightarrow{L S T M}\left(x_{j}^{a}, \overrightarrow{h^{a}}{ }_{j-1}\right) \\ \overleftarrow{h_{j}^{a}} &=\overleftarrow{L S T M}\left(x_{j}^{a},{h^{a}}{ }_{j+1}\right) \\ s_{0} &=h_{\text {final }}^{a}=\left[\overrightarrow{h_{m}^{a}} ; \overleftarrow{h_{m}^{a}}\right] \end{aligned}} \]- decoder:为了利用来自文章和目标答案的足够信息,对于解码设计了基于LSTM的答案分离解码器。答案分离解码器通过以下三种方式利用文章和目标答案的特征。
- 用最终答案向量\(h_{final}^{a}\)初始化解码器状态。
- 结合答案的关键特征,即提取目标答案中的关键信息来消除问题目标的歧义。见图2第二部分,在每个解码步骤中,我们使用一个基于注意力的模块,称为keyword-net,从目标答案中提取关键信息。对于keyword-net的每一层,计算最后一层 \(o_{t}^{l-1}\) 的输出向量和答案隐藏状态 \(h_{j}^{a}\) 之间的归一化匹配分数。 然后我们将 \(h_{j}^{a}\) 的加权平均值作为当前层 \(l\)中提取的关键字特征 \(o_{t}^{l}\) 。 我们用当前解码步骤的上下文向量\(c_{t}\)初始化 \(o_{t}^{0}\)。以下方程描述了keyword-net的机制:
\(s_t\)代表当前时间步的解码器的隐藏状态。\(c_t\)代表当前时间的上下文向量。\(y_t−1\)代表上一次的输出token步骤
- 将检索式词生成器(Ma et al. 2018,通过查询分布式单词表示来生成单词,希望能够捕捉到所用单词的含义)背后的想法来替换我们解码器中现有的输出层。可以弥补序列到序列模型的缺点,即序列到序列模型倾向于记忆序列模式而不是反映词义。
查询 \(q_t\) 被计算为解码器隐藏状态\(s_t\) 和上下文向量 \(c_t\) 的组合。 通过向每个词嵌入\(e_k\) 查询 \(q_t\),我们可以计算 \(q_t\) 和 \(e_k\) 之间的相关性分数,其中 \(Wa_a\) 是可训练的参数矩阵。然后得分函数的归一化值表示每个词的生成概率。 由于原始输出层占用了大部分模型参数,我们可以通过使用这个词检索层来显着减少参数大小和模型收敛时间:
\[\begin{gathered} q_{t}=\tanh \left(W_{q}\left[s_{t} ; c_{t}\right]\right) \\ \operatorname{score}\left(q_{t}, e_{k}\right)=q_{i}^{\top} W_{a} e_{k} \\ p\left(y_{t}\right)=\operatorname{Softmax}\left(\operatorname{score}\left(q_{t}, e_{k}\right)\right) \end{gathered} \]3 实验
使用有文章使用过的两个处理过的SQuAQ数据集版本。由于原始数据集被划分为train/dev ,因此将它们重新划分为train/dev/test ,并从包含目标答案的段落中分离段落和答案为data split-1和data split-2。对于data split-1,由于不包括目标答案,从每个段落中提取它们以制作 (passage, question, answer) 三元组。最后使用 Stanford CoreNLP 对两个数据拆分进行标记,然后将它们小写。
对于实验中各超参数的设立请看原文。
最后,对结果使用BLEU-4,Meteor,\(Rouge_L\)作为评价标准对预测结果进行评价。将该模型与与之前最先进的 NQG 模型进行比较。
我们在 SQuAD 数据集上使用 QANet (Yu et al. 2018) 进行实验,以验证我们模型生成的问题是否有效。 由于大多数答案对应于命名实体,因此我们使用来自数据 split-1 训练部分的命名实体的单词和短语作为目标答案。 然后,我们将这些答案与相应的段落配对。 我们还确保所选答案不会与原始 SQuAD 数据集中的答案重叠,因为我们的 NQG 模型是使用 SQuAD 数据集提供的目标答案进行训练的。 如果答案重叠,我们的模型可能会生成与黄金问题完全相同的问题。 然后我们将这些答案与相应的段落配对。
由于 SQuAD 数据集是一个人造数据集,这个结果充分表明我们的答案分离 seq2seq 可以生成人类和机器理解系统都可以接受的有效问题。
4 总结与展望
在本文中,研究了答案分离在神经问题生成中的优势。 我们观察到现有的 NQG 模型存在一个严重的问题:很大一部分生成的问题包含问题目标中的单词,从而导致生成非故意的问题。 为了克服这个问题,我们引入了一种新颖的 NQG 架构,该架构将文章和目标答案分开处理,以更好地利用双方的信息。 实验结果表明,我们的模型具有很强的为文章中的目标答案生成正确问题的能力。 因此,它比以前最先进的模型产生了实质性的改进。