Reading Wikipedia to Answer Open-Domain Questions
本文是一篇很经典的关于开放领域问答的文章,与之前的几篇文章不同,开放式领域的问答系统是基于一种Retriever-Reader的架构,Retriever通过大规模机器阅读理解提取相关度高的文章,再用Reader进行特征提取。
Overview
本文的开放式QA系统有两个部分组成:
- Document Retriever:作者使用Wikipedia作为资料库,针对不同的问题进行相关文章段落的提取,提取出文章后再构建数据集输入到Reader中进行训练
- Document Reader:这一模块就是DrQA的模型部分,使用神经网络进行机器阅读理解
下图是一个开放领域问答的基本流程图
DrQA
本文提出的open-domin QA system叫做DrQA,分为两个独立的子系统:Retriever和Reader
Document Retriever
Document Retriever模块是针对每个问题从Wikipedia提取出相关文章,作者采用了TF-IDF相似度匹配,加上bigram的hash,用top 5作为该问题的候选文章。实验数据表明本文的这个retriever比Wikipedia的搜索引擎效果好了不少,尤其是加入了bigram hashing以后。
Document Reader
Reader又分为以下几个子模块:
Paragraph Encoding
作者使用的是多层的LSTM进行文本特征提取,得到LSTM embed过后的文本表示
{
p
1
,
p
2
,
…
,
p
n
}
=
L
S
T
M
(
{
p
1
^
,
p
2
^
,
…
,
p
n
^
}
)
\{p_1,p_2,\dots,p_n\}\ =\ LSTM(\{\hat{p_1},\hat{p_2},\dots,\hat{pn}\})
{p1,p2,…,pn} = LSTM({p1^,p2^,…,pn^})
值得注意的是,作者在LSTM的输入上下了不少功夫,每个单词的初始embedding
E
(
p
i
)
E(p_i)
E(pi)由以下几个部分构成:
- word embedding: f e m b ( p i ) f_{emb}(p_i) femb(pi),这里采用的是Glove 300d
- exact match: f e x c a t _ m a t c h ( p i ) f_{excat\_match}(p_i) fexcat_match(pi),用三个binary feature来表示该单词是否与问题中的某个单词匹配
- token feature: f t o k e n ( p i ) f_{token}(p_i) ftoken(pi),这个特征包含三个子特征 ( P O S ( p i ) , N E R ( p i ) , T F ( p i ) ) (POS(p_i),NER(p_i),TF(p_i)) (POS(pi),NER(pi),TF(pi))
- question aligned feature:这一部分其实就是P2Q的attention, f a l i g n ( p i ) = ∑ j α i , j E ( q j ) f_{align}(p_i)\ =\ \sum_{j} \alpha_{i,j}E(q_j) falign(pi) = ∑jαi,jE(qj),而attention weight的计算方式为: α i , j = e x p { α ( E ( p i ) ) ⋅ α ( E ( q j ) ) } ∑ j ′ e x p { α ( E ( p i ) ) ⋅ α ( E ( q j ′ ) ) } \alpha_{i,j}\ =\ \frac{exp\{\alpha(E(p_i)) \cdot \alpha(E(q_j))\}}{\sum_{j'}exp\{\alpha(E(p_i)) \cdot \alpha(E(q_j'))\}} αi,j = ∑j′exp{α(E(pi))⋅α(E(qj′))}exp{α(E(pi))⋅α(E(qj))}
Question Encoding
question encoding依然是采用LSTM,得到输出
{
q
1
,
q
2
,
⋯
,
q
m
}
\{q_1,q_2,\cdots,q_m\}
{q1,q2,⋯,qm}后,再通过一个self-attention映射到一个vector
q
q
q
β
j
=
e
x
p
(
w
⋅
q
j
)
∑
j
′
e
x
p
(
w
⋅
q
j
′
)
q
=
∑
j
=
1
m
β
j
q
j
\beta_{j}\ =\ \frac{exp(w \cdot q_j)}{\sum_{j'}exp(w \cdot q_{j'})}\\ q\ =\ \sum_{j=1}^{m}\beta_{j}q_j
βj = ∑j′exp(w⋅qj′)exp(w⋅qj)q = j=1∑mβjqj
Prediction
p s t a r t ( i ) = e x p ( p i W s q ) ∑ i ′ e x p ( p i ′ W s q ) p e n d ( i ) = e x p ( p i W e q ) ∑ i ′ e x p ( p i ′ W e q ) p_{start}(i) \ =\ \frac{exp(p_iW_sq)}{\sum_{i'}exp(p_{i'}W_sq)}\\ p_{end}(i) \ =\ \frac{exp(p_iW_eq)}{\sum_{i'}exp(p_{i'}W_eq)} pstart(i) = ∑i′exp(pi′Wsq)exp(piWsq)pend(i) = ∑i′exp(pi′Weq)exp(piWeq)
Experiment
DrQA再SQuAD上表现是很优异的,超越了当时的其他模型
消融实验
最后作者使用另外的四个问答数据集来评估整个DrQA开放问答系统
从这个数据可以看出开放领域的问答系统效果的确是都不尽如人意
Further Work
作者提出未来的工作有两点:
- 让Reader把Retriever选取出的段落进行聚合再进行训练,而不是一篇一篇的训练
- 设计出一个end-to-end的开放领域问答系统,DrQA中的Retriever和Reader仍然是两个独立的系统