学会提问:阅读理解的神经性问题生成
-
Learning to Ask: Neural Question Generation for Reading Comprehension
学会提问:阅读理解的神经性问题生成
1 Abstract
本文提出了一个基于注意力的序列学习模型,研究了对句子级信息和段落信息进行编码的效果。
1 Introduction
问题生成QG的目的是从给定的句子或段落中产生自然的问题。如图1所示:
自然的问题通常压缩其句子,使用段落中术语的同义词(question2的“form”代替原文的"produce"),或者应用来自前面的句子或从句的实体
2 Model
2.1 Task Definition
给定一个输入句子x\mathrm{x}x,目标是生成一个与句子中的信息相关的自然问题yyy,yyy可以是任意长度的序列:[y1,…,y∣y∣][y_1,…,y_{|y|}][y1,…,y∣y∣]。若输入句子的长度为M,则x\mathrm{x}x可以表示为tokens的序列x1,…,xMx_1,…,x_Mx1,…,xM。QG任务被定义为finding y−\overset{-}{y}y−:
$$
\overset{-}{y}=\underset{y}{argmax}P(y|\mathrm{x})\tag{1}
$$
其中P(y∣x)P(y|\mathrm{x})P(y∣x)是给定输入x\mathrm{x}x的预测问题序列yyy的条件对数似然。2.2 Overview
为了提出一个问题,人们首先会注意到输入句子的某些部分,以及与段落中的上下文信息相关联,本文的模型就是基于这种方法。首先使用RNN编码器架构对条件概率进行建模,然后采用全局注意力机制使模型在解码过程中生成每个单词时专注于输入的某些元素。
本文对context进行了两种编码:1.只编码句子;2.同时编码句子和段级信息。
2.3 Decoder
将公式1中的条件因式分解为词级预测的乘积:
$$
P(y|\mathrm{x})=\prod_{t=1}^{|y|}(y_t|\mathrm{x},y_{< t})\tag{2}
$$
基于先前生成的所有单词(y<t(生成的问题))和输入句子x\mathrm{x}x来预测每个yty_tyt的概率。
$$
P(y_t|\mathrm{x},y_{<t})=softmax(W_stanh(W_t[h_t;c_t]))\tag{3}
$$
其中hth_tht是在时间步t的递归神经网络的状态变量,ctc_tct是在解码时间步ttt的x\mathrm{x}x的基于注意力的编码。
$$
h_t=LSTM_1(y_{t-1},h_{t-1})\tag{4}
$$
将先前生成的单词yt−1y_{t-1}yt−1的表示和先前状态ht−1h_{t-1}ht−1作为LSTM的输入,获得新的隐状态hth_tht。2.4 Encoder
Attention-based sentence encoder
$$
\overset{\rightarrow}{b_t}=\overset{\rightarrow}{LSTM_2}(x_t,\overset{\rightarrow}{b_{t-1}})\
\overset{\leftarrow}{b_t}=\overset{\leftarrow}{LSTM_2}(x_t,\overset{\leftarrow}{b_{t+1}})
$$$$
c_t=\sum_{i=1,…,|\mathrm{x}|}a_{i,t}b_i\
$$通过双线性评分函数和softmax归一化计算注意力权重:
$$
a_{i,t}=\frac{exp(h^T_tW_bb_i)}{\sum_{j}exp(h^T_tW_bb_j)}
$$
Paragraph encoder给定句子x\mathrm{x}x,对包含x\mathrm{x}x的段落进行编码。对较长的段落进行硬截断,截断后的段落也叫段落,将段落表示为zzz,然后用BiLSTM进行编码:
$$
\overset{\rightarrow}{d_t}=\overset{\rightarrow}{LSTM_3}(z_t,\overset{\rightarrow}{d_{t-1}})\
\overset{\leftarrow}{d_t}=\overset{\leftarrow}{LSTM_3}(z_t,\overset{\leftarrow}{d_{t+1}})
$$2.5 Training
给出sentence-question对的训练语料库:
$$
S={(x^{(i)}),y^{(i)}}^{S}{i=1}
$$
对目标函数进行最小化负对数似然:
$$
L=-\sum^{S}{i=1}logP(y^{(i)}|\mathrm{x}^{(i)};\theta)\
=-\sum^{S}{i=1}\sum^{|y^{(i)}|}{j=1}logP(y_j^{(i)}|x^{(i)},y^{(i)}_{<j};\theta)
$$
使用波束搜索进行推理。由于输入句子中可能有许多不在目标端词典中的生词,在解码过程中将输出许多UNKUNKUNK标记。对于在时间步t处解码UNKUNKUNK token,,本文将其替换为具有最高注意力分数的输入句子中的token,其索引为argmax x<em>ia</em>i,targmax\ \mathrm{x}<em>ia</em>{i,t}argmax x<em>ia</em>i,t
3 启示
- 代码写的太拉胯了,一点不想看
- 感觉文章讲的不清不楚