Multi-Style Generative Reading Comprehension
这是2019年发表在ACL的一篇文章,与前面所读的几篇RC、QA文章不同,这篇文章关注的是生成式的RC模型,并且引入多风格的答案生成。
Overview
以往的QA模型通常是抽取式的,即从passage中抽取出一段区间作为预测答案(span prediction),因此这篇文章希望设计出一种生成式的模型,并且希望通过单个模型生成不同风格的答案。这里的不同风格我的理解是传统QA基于span抽取的和语言模型进行生成的这两种风格,通过本文提供的例子可以直观感受一下
这里作者标注了Q&A和NLG,因此这应该就是本文所谈到的不同风格的答案。
本文的主要贡献有两个:
- Multi-source abstraction summarization:多源摘要,使用指针生成器机制从问句、多段落中生成多样化风格的答案,并扩展至Transformer,允许生成器从词表,或从问句、段落原文中以复制方式生成答案。
- Multi-style learning for style control and transfer:多风格学习,控制答案输出样式,满足RC所有形式输出,引入风格化的人工token扩展指针生成器为条件解码器,给定风格下,每一步解码控制三个分布占解码输出的权重。
总体来说,这篇文章所提出的方法是很新颖的,但是也的确比较不好理解。
Task Description
本文采用的是MS Masco数据集,所作的任务是:给定一个问题和多个段落,模型生成一段答案。训练数据是一个六元组: ( x q , { x p k } , s , y , a , r p k ) (x^{q},\{x^{p_{k}}\},s,y,a,r^{p_k}) (xq,{xpk},s,y,a,rpk): s s s表示答案风格,生成的答案风格控制; a ∈ { 0 , 1 } a \in \{0,1\} a∈{0,1}表示问题是否可回答; r p k ∈ { 0 , 1 } r^{p_{k}} \in \{0,1\} rpk∈{0,1}表示该段落是否对答案有贡献
Model Architecture
模型主要分为四大部分:
- Passage-Question Reader:说白了就是encoder
- Passage Ranker:用于计算不同段落的重要度,参考PageRank
- Answer Possibility Classifier:用于判断问题是否有答案
- Answer Sentence Decoder:说白了就是decoder
作者管他们的模型叫Masque
Passage-Question Reader
这个部分有点类似QANet中encoder的结构,也是分为四个子模块:
- Word Embedding
- Shared Encoder Block
- Dual Attention
- Modeling Encoder Block
Word Embedding
词向量本文采用的是Glove+ELMo,其中ELMo代替了positional embedding的作用,然后作者又把这两种word embedding输入两层highway network中进行融合。
Shared Encoder Block
采用Transformer的encoder block,做multi-head self-attention,passage和question共享,分别得到 E p k ∈ R d × L E^{p_{k}}\in R^{d \times L} Epk∈Rd×L和 E q ∈ R d × J E^{q} \in R^{d \times J} Eq∈Rd×J
Dual Attention
这一部分用于计算P2Q和Q2P的双向attention。首先计算similarity score,得到相似度矩阵
S
p
k
∈
R
L
×
J
S^{p_{k}} \in R^{L \times J}
Spk∈RL×J
S
l
j
p
k
=
w
α
T
[
E
l
p
k
;
E
j
q
;
E
l
p
k
∘
E
j
q
]
S^{p_{k}}_{lj} \ =\ w^{T}_{\alpha}[E^{p_{k}}_{l};E^{q}_{j};E^{p_{k}}_{l} \circ E^{q}_{j}]
Sljpk = wαT[Elpk;Ejq;Elpk∘Ejq]
接着分别对row和column做softmax得到attention weights
A
p
k
=
s
o
f
t
m
a
x
j
(
S
p
k
T
)
B
p
k
=
s
o
f
t
m
a
x
l
(
S
p
k
)
A^{p_{k}}\ =\ softmax_{j}({S^{p_{k}}}^{T}) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ B^{p_{k}}\ =\ softmax_{l}(S^{p_{k}})
Apk = softmaxj(SpkT) Bpk = softmaxl(Spk)
接下来作者借鉴DCN来计算Dual Attention:
G
q
→
p
k
=
[
E
p
k
;
A
ˉ
p
k
;
A
^
p
k
;
E
p
k
∘
A
ˉ
p
k
;
E
p
k
∘
A
^
p
k
]
G
p
→
q
=
[
E
q
;
B
ˉ
;
B
^
;
E
q
∘
B
ˉ
;
E
q
∘
B
^
]
G^{q \rightarrow p_{k}}\ =\ [E^{p_{k}};\bar{A}^{p_{k}};\hat{A}^{p_{k}};E^{p_{k}}\circ \bar{A}^{p_{k}};E^{p_{k}} \circ \hat{A}^{p_{k}}]\\ G^{p \rightarrow q}\ =\ [E^{q};\bar{B};\hat{B};E^{q}\circ \bar{B};E^{q} \circ \hat{B}]\\
Gq→pk = [Epk;Aˉpk;A^pk;Epk∘Aˉpk;Epk∘A^pk]Gp→q = [Eq;Bˉ;B^;Eq∘Bˉ;Eq∘B^]
我们分别解释公式中的这几个量:
- A ˉ p k \bar{A}^{p_k} Aˉpk: E q A p k E^{q}A^{p_{k}} EqApk,表示段落各位置的问题context向量
- B ˉ p k \bar{B}^{p_{k}} Bˉpk: E p k B p k E^{p_{k}}B^{p_{k}} EpkBpk,表示问题各位置的问题context向量
- A ^ p k \hat{A}^{p_{k}} A^pk: B ˉ p k A p k \bar{B}^{p_{k}}A^{p_{k}} BˉpkApk,表示query-aware的文章各位置context向量
- B ^ p k \hat{B}^{p_{k}} B^pk: A ˉ p k B p k \bar{A}^{p_{k}}B^{p_{k}} AˉpkBpk,表示passage-aware的问题各位置context向量
- B ˉ \bar{B} Bˉ: m a x k B ˉ p k max_{k} \bar{B}^{p_{k}} maxkBˉpk
- B ^ \hat{B} B^: m a x k B ^ p k max_{k}\hat{B}^{p_{k}} maxkB^pk
Modeling Encoder Block
这里依然是stack几层encoder block,passage堆叠5层,query堆叠2层,最终得到 M p k ∈ R L × d M^{p_{k}} \in R^{L \times d} Mpk∈RL×d和 M q ∈ R J × d M^{q} \in R^{J \times d} Mq∈RJ×d
Passage Ranker
passage ranker是用来评估每个段落的重要程度,在后面decoder部分会用到。作者取每个
M
p
k
M^{p_{k}}
Mpk的第一个token向量(也就是
M
1
p
k
∈
R
d
M_{1}^{p_k} \in R^{d}
M1pk∈Rd)来计算
β
p
k
=
σ
(
w
r
M
1
p
k
)
\beta^{p_k}\ =\ \sigma(w^{r}M_{1}^{p_{k}})
βpk = σ(wrM1pk)
使用sigmoid的原因是我们只需要0或1的输出来判断该段落是否有用。
Answer Possibility Classifier
这一层是用来判断该问题是否能够被回答,作者将每个段落的第一个token向量concat起来,乘一个向量,然后再用sigmoid激活:
P
(
a
)
=
s
i
g
m
o
i
d
(
w
c
[
M
1
p
1
;
M
1
p
2
;
…
;
M
1
p
k
]
)
P(a)\ =\ sigmoid(w^{c}[M^{p_{1}}_{1};M^{p_{2}}_{1};\dots;M^{p_{k}}_{1}])
P(a) = sigmoid(wc[M1p1;M1p2;…;M1pk])
Answer Sentence Decoder
decoder同样分为四个子模块:
- Word Embedding
- Decoder Block
- Multi-source Pointer-Generator
- Combined Attention
Word Embedding
与Encoder相同,但是ELMo采用单向,因为这一部分要做生成
Decoder Block
与Transformer的Decoder Block结构相同,有一点变化是在Encoder-Decoder attention部分,我们要分别将answer与query和passage做self-attention,对于answer-passage attention,作者将encoder部分得到的 M p k M^{p_{k}} Mpk拼接起来得到 M p a l l = [ M p 1 ; M p 2 ; … ; M p k ] M^{p_{all}}=[M^{p_{1}};M^{p_{2}};\dots;M^{p_{k}}] Mpall=[Mp1;Mp2;…;Mpk]再去做attention。这一层得到的输出是一个生成的答案序列 [ s 1 , s 2 , … , s T ] [s_1,s_2,\dots,s_T] [s1,s2,…,sT]
Multi-source Pointer-Generator
这一部分就是overview里所说的允许模型从词库、问题和段落中复制来作为答案,而这一部分得到的输出也是passage、query和decoder自身三部分加权得到的结果。
Extend Vocabulary
首先作者对词库进行扩充,新词库包含词典中常见词、所有query中的词和所有passage中的词。令
P
v
(
y
t
)
P^{v}(y_{t})
Pv(yt)表示答案中第
t
t
t个单词的概率分布,计算公式为:
P
v
(
y
t
)
=
s
o
f
t
m
a
x
(
W
2
(
W
1
s
t
+
b
1
)
)
P^{v}(y_t)\ =\ softmax(W^2(W^1s_t+b^1))
Pv(yt) = softmax(W2(W1st+b1))
W
1
W^1
W1和
b
1
b^1
b1是可训练的参数,
W
2
∈
R
d
w
o
r
d
×
V
e
x
t
W^2 \in R^{d_{word} \times V_{ext}}
W2∈Rdword×Vext
Copy Distribution
作者认为传统的随机选取一个注意力头来复制分布效果并不好,本文选择再添加一层attention来进行copy distribution:
e
l
p
k
=
w
p
T
t
a
n
h
(
W
p
m
M
l
p
k
+
W
p
s
s
t
+
b
p
)
α
t
p
=
s
o
f
t
m
a
x
(
[
e
p
1
;
e
p
2
;
…
;
e
p
k
]
)
c
t
p
=
∑
l
α
t
l
p
M
l
p
a
l
l
e_{l}^{p_{k}}\ =\ {w^{p}}^{T}tanh(W^{pm}M^{p_{k}}_{l}+W^{ps}s_{t}+b^{p})\\ \alpha^{p}_{t}\ =\ softmax([e^{p_{1}};e^{p_{2}};\dots;e^{p_{k}}])\\ c_{t}^{p}\ =\ \sum_{l}\alpha_{tl}^{p}M_{l}^{p_{all}}
elpk = wpTtanh(WpmMlpk+Wpsst+bp)αtp = softmax([ep1;ep2;…;epk])ctp = l∑αtlpMlpall
同理得到query的attention weight和context vector
α
t
q
,
c
t
q
\alpha^{q}_{t},c^{q}_{t}
αtq,ctq,然后query和passage的copy distribution计算方式如下:
P
q
(
y
t
)
=
∑
j
:
x
j
q
=
y
t
α
t
j
q
P
p
(
y
t
)
=
∑
l
:
x
l
p
k
(
l
)
=
y
t
α
t
l
p
P^{q}(y_{t})\ =\ \sum_{j:x_{j}^{q}=y_{t}}\alpha^{q}_{tj}\\ P^{p}(y_{t})\ =\ \sum_{l:x_{l}^{p_k(l)}=y_{t}}\alpha^{p}_{tl}
Pq(yt) = j:xjq=yt∑αtjqPp(yt) = l:xlpk(l)=yt∑αtlp
Final Distribution
最终的概率分布为三者的加权和:
P
(
y
t
)
=
λ
v
P
v
(
y
t
)
+
λ
q
P
q
(
y
t
)
+
λ
p
P
p
(
y
t
)
λ
v
,
λ
q
,
λ
p
=
s
o
f
t
m
a
x
(
W
m
[
s
t
;
c
t
q
;
c
t
p
]
+
b
m
)
P(y_t)\ =\ \lambda^{v}P^{v}(y_t)+\lambda^{q}P^{q}(y_t)+\lambda^{p}P^{p}(y_t)\\ \lambda^{v},\lambda^{q},\lambda^{p}\ =\ softmax(W^{m}[s_t;c^{q}_{t};c^{p}_{t}]+b_m)
P(yt) = λvPv(yt)+λqPq(yt)+λpPp(yt)λv,λq,λp = softmax(Wm[st;ctq;ctp]+bm)
Combined Attention
之前我们计算了一个passage rank,这里我们要用它来过滤掉与答案按不相关的passage来防止copy distribution复制到这些不相关的passage。我们把
α
t
p
\alpha_t^{p}
αtp修改为以下形式:
α
t
l
p
=
α
t
l
p
β
l
p
k
∑
l
′
α
t
l
′
p
β
l
′
p
k
\alpha^{p}_{tl}\ =\ \frac{\alpha_{tl}^{p}\beta^{p_{k}}_{l}}{\sum_{l'}\alpha_{tl'}^{p}\beta^{p_{k}}_{l'}}
αtlp = ∑l′αtl′pβl′pkαtlpβlpk
Loss Function
最后还有一个损失函数的问题,模型的最终损失函数由三个部分组成
L
=
L
d
e
c
+
γ
r
a
n
k
L
r
a
n
k
+
γ
a
n
s
L
a
n
s
L\ =\ L_{dec}+\gamma_{rank}L_{rank}+\gamma_{ans}L_{ans}
L = Ldec+γrankLrank+γansLans
Experiment
本文实验部分倒是没有什么特别要说的,因为这篇文章的核心就是对模型的创新,简单来看一下实验数据,首先是在MS Marco数据集上的效果
然后是在NarrativeQA数据集上的效果
消融实验证明了本文所提出的多风格学习还是很有效的