Learning to Ask Neural Question Generation for Reading Comprehension

Learning to Ask Neural Question Generation for Reading Comprehension_第1张图片

Learning to Ask: Neural Question Generation for Reading Comprehension

学会提问:阅读理解的神经性问题生成

1 Abstract

本文提出了一个基于注意力的序列学习模型,研究了对句子级信息和段落信息进行编码的效果。

tfcode

1 Introduction

问题生成QG的目的是从给定的句子或段落中产生自然的问题。如图1所示:

Learning to Ask Neural Question Generation for Reading Comprehension_第2张图片

自然的问题通常压缩其句子,使用段落中术语的同义词(question2的“form”代替原文的"produce"),或者应用来自前面的句子或从句的实体

2 Model

2.1 Task Definition

给定一个输入句子 x \mathrm{x} x,目标是生成一个与句子中的信息相关的自然问题 y y y y y y可以是任意长度的序列: [ y 1 , . . . , y ∣ y ∣ ] [y_1,...,y_{|y|}] [y1,...,yy]。若输入句子的长度为M,则 x \mathrm{x} x可以表示为tokens的序列 x 1 , . . . , x M x_1,...,x_M x1,...,xM。QG任务被定义为finding y − \overset{-}{y} y
y − = a r g m a x y P ( y ∣ x ) (1) \overset{-}{y}=\underset{y}{argmax}P(y|\mathrm{x})\tag{1} y=yargmaxP(yx)(1)
其中 P ( y ∣ x ) P(y|\mathrm{x}) P(yx)是给定输入 x \mathrm{x} x的预测问题序列 y y y的条件对数似然。

2.2 Overview

为了提出一个问题,人们首先会注意到输入句子的某些部分,以及与段落中的上下文信息相关联,本文的模型就是基于这种方法。首先使用RNN编码器架构对条件概率进行建模,然后采用全局注意力机制使模型在解码过程中生成每个单词时专注于输入的某些元素。

本文对context进行了两种编码:1.只编码句子;2.同时编码句子和段级信息。

2.3 Decoder

将公式1中的条件因式分解为词级预测的乘积:
P ( y ∣ x ) = ∏ t = 1 ∣ y ∣ ( y t ∣ x , y < t ) (2) P(y|\mathrm{x})=\prod_{t=1}^{|y|}(y_t|\mathrm{x},y_{< t})\tag{2} P(yx)=t=1y(ytx,y<t)(2)
基于先前生成的所有单词(y x \mathrm{x} x来预测每个 y t y_t yt的概率。
P ( y t ∣ x , y < t ) = s o f t m a x ( W s t a n h ( W t [ h t ; c t ] ) ) (3) P(y_t|\mathrm{x},y_{P(ytx,y<t)=softmax(Wstanh(Wt[ht;ct]))(3)
其中 h t h_t ht是在时间步t的递归神经网络的状态变量, c t c_t ct是在解码时间步 t t t x \mathrm{x} x的基于注意力的编码。
h t = L S T M 1 ( y t − 1 , h t − 1 ) (4) h_t=LSTM_1(y_{t-1},h_{t-1})\tag{4} ht=LSTM1(yt1,ht1)(4)
将先前生成的单词 y t − 1 y_{t-1} yt1的表示和先前状态 h t − 1 h_{t-1} ht1作为LSTM的输入,获得新的隐状态 h t h_t ht

2.4 Encoder

Attention-based sentence encoder
b t → = L S T M 2 → ( x t , b t − 1 → ) b t ← = L S T M 2 ← ( x t , b t + 1 ← ) \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}}) bt=LSTM2(xt,bt1)bt=LSTM2(xt,bt+1)

c t = ∑ i = 1 , . . . , ∣ x ∣ a i , t b i c_t=\sum_{i=1,...,|\mathrm{x}|}a_{i,t}b_i\\ ct=i=1,...,xai,tbi

通过双线性评分函数和softmax归一化计算注意力权重:
a i , t = e x p ( h t T W b b i ) ∑ j e x p ( h t T W b b j ) a_{i,t}=\frac{exp(h^T_tW_bb_i)}{\sum_{j}exp(h^T_tW_bb_j)} ai,t=jexp(htTWbbj)exp(htTWbbi)
Paragraph encoder

给定句子 x \mathrm{x} x,对包含 x \mathrm{x} x的段落进行编码。对较长的段落进行硬截断,截断后的段落也叫段落,将段落表示为 z z z,然后用BiLSTM进行编码:
d t → = L S T M 3 → ( z t , d t − 1 → ) d t ← = L S T M 3 ← ( z t , d t + 1 ← ) \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}}) dt=LSTM3(zt,dt1)dt=LSTM3(zt,dt+1)

2.5 Training

给出sentence-question对的训练语料库:
S = { ( x ( i ) ) , y ( i ) } i = 1 S S=\{(x^{(i)}),y^{(i)}\}^{S}_{i=1} S={(x(i)),y(i)}i=1S
对目标函数进行最小化负对数似然:
L = − ∑ i = 1 S l o g P ( y ( i ) ∣ x ( i ) ; θ ) = − ∑ i = 1 S ∑ j = 1 ∣ y ( i ) ∣ l o g P ( y j ( i ) ∣ x ( i ) , y < j ( i ) ; θ ) 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)}_{L=i=1SlogP(y(i)x(i);θ)=i=1Sj=1y(i)logP(yj(i)x(i),y<j(i);θ)
使用波束搜索进行推理。

由于输入句子中可能有许多不在目标端词典中的生词,在解码过程中将输出许多 U N K UNK UNK标记。对于在时间步t处解码 U N K UNK UNK token,,本文将其替换为具有最高注意力分数的输入句子中的token,其索引为 a r g m a x   x i a i , t argmax\ \mathrm{x}_ia_{i,t} argmax xiai,t

3 启示

  1. 代码写的太拉胯了,一点不想看
  2. 感觉文章讲的不清不楚

你可能感兴趣的:(论文笔记,自然语言处理,深度学习,lstm)