QG-2019-AAAI-Improving Neural Question Generation using Answer Separation
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}\) 的整体特征:
\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的机制:
o_{t}^{0}=c_{t} \\
p_{t j}^{l}=\operatorname{Softmax}\left(\left(o_{t}^{l-1}\right)^{\top} h_{j}^{a}\right) \\
o_{t}^{l}=\sum_{j} p_{t j}^{l} h_{j}^{a} \\
s_{t}=L S T M\left(y_{t-1}, s_{t-1}, c_{t}, o_{t}^{L}\right)
\end{gathered}
\]
\(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\) 是可训练的参数矩阵。然后得分函数的归一化值表示每个词的生成概率。 由于原始输出层占用了大部分模型参数,我们可以通过使用这个词检索层来显着减少参数大小和模型收敛时间:
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 架构,该架构将文章和目标答案分开处理,以更好地利用双方的信息。 实验结果表明,我们的模型具有很强的为文章中的目标答案生成正确问题的能力。 因此,它比以前最先进的模型产生了实质性的改进。
QG-2019-AAAI-Improving Neural Question Generation using Answer Separation的更多相关文章
- 【NQG】Paragraph-level Neural Question Generation with Maxout Pointer and Gated Self-attention Networks论文笔记
这篇文章主要处理了在问题生成(Question Generation,QG)中,长文本(多为段落)在seq2seq模型中表现不佳的问题.长文本在生成高质量问题方面不可或缺. 1. Introducti ...
- Deep Learning 23:dropout理解_之读论文“Improving neural networks by preventing co-adaptation of feature detectors”
理论知识:Deep learning:四十一(Dropout简单理解).深度学习(二十二)Dropout浅层理解与实现.“Improving neural networks by preventing ...
- 论文阅读笔记:《Interconnected Question Generation with Coreference Alignment and Conversion Flow Modeling》
论文阅读:<Interconnected Question Generation with Coreference Alignment and Conversion Flow Modeling& ...
- 论文泛读·Adversarial Learning for Neural Dialogue Generation
原文翻译 导读 这篇文章的主要工作在于应用了对抗训练(adversarial training)的思路来解决开放式对话生成(open-domain dialogue generation)这样一个无监 ...
- Improving Commonsense Question Answering by Graph-based Iterative Retrieval over Multiple Knowledge Sources —— 基于多知识库迭代检索的常识问答系统
基于多知识库迭代检索的问答系统 论文地址 背景 常识问答任务需要引入外部知识来帮助模型更好地理解自然语言问题,现有的解决方案大都采用两阶段框架: 第一阶段 -- 从广泛的知识来源中找到与给定问题相关的 ...
- 2019南昌邀请赛网络预选赛 I. Max answer(单调栈+暴力??)
传送门 题意: 给你你一序列 a,共 n 个元素,求最大的F(l,r): F(l,r) = (a[l]+a[l+1]+.....+a[r])*min(l,r); ([l,r]的区间和*区间最小值,F( ...
- 2019 Multi-University Training Contest 3 Find the answer (离散化+二分+树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6609 题目大意:给定一个含有n个数的序列,还有一个m,对于每个i(1<=i<=n)求出最少 ...
- 人工智能头条(公开课笔记)+AI科技大本营——一拨微信公众号文章
不错的 Tutorial: 从零到一学习计算机视觉:朋友圈爆款背后的计算机视觉技术与应用 | 公开课笔记 分享人 | 叶聪(腾讯云 AI 和大数据中心高级研发工程师) 整 理 | Leo 出 ...
- Deep learning_CNN_Review:A Survey of the Recent Architectures of Deep Convolutional Neural Networks——2019
CNN综述文章 的翻译 [2019 CVPR] A Survey of the Recent Architectures of Deep Convolutional Neural Networks 翻 ...
随机推荐
- docker入门及常用命令
Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...
- 《DotNet Web应用单文件部署系列》二、打包wwwroot文件夹
在这篇文章中,你将学到web缓存规则,文件传输中用到的压缩格式,以及如何手写代码响应请求.最后还能学到快速打包wwwroot文件夹组件用法. 一.了解Response Header 当第一次加载程序时 ...
- MongoDB 常见问题 - 解决 brew services list 查看 MongoDB 服务 status 显示 error 的问题
问题背景 将 MongoDB 作为服务运行 brew services start mongodb-community@4.4 也显示运行成功了,但是查看服务列表的时候,发现 MongoDB 服务的还 ...
- Vue配置axios
1)安装插件(一定要在项目目录下): >: cnpm install axios 2)在main.js中配置: import axios from 'axios' Vue.prototype.$ ...
- 海量列式非关系数据库HBase 架构,shell与API
HBase的特点: 海量存储: 底层基于HDFS存储海量数据 列式存储:HBase表的数据是基于列族进行存储的,一个列族包含若干列 极易扩展:底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加Da ...
- 用Java写了一个程序,将一个Mysql库中的表,迁移到另外一个server上的Mysql库中
用Navicat做数据迁移,因为数据量比较大,迁移过过程中一个是进展不直观,另外就是cpu占用率高的时候,屏幕跟死机了一样点不动按钮,不好中断. 想了想,干脆自己写一个. 在网上找了一个sqllite ...
- 迷你DVD
public class DVD { private int ID;//id private String status;//状态 private String name;//名称 private S ...
- C# lambda 实现 Ascii 排序
var dir = new Dictionary<string, string>(); dir.Add("channelId", "1& ...
- ecshop 加入购物车和直接购买同时存在的方法
一.首先将直接购买的链接设置为 <a href="javascript:bool =1;addToCart({$goods.goods_id})"> bool值为1,g ...
- requests接口自动化-pytest框架
pytest框架规则 测试文件以test_开头或者以_test结尾 测试类以Test开头,并且不能带有init方法 测试函数以test_开头 断言使用assert pytest框架运行用例 运行单个文 ...