PullNet: Open Domain Question Answering with Iterative Retrieval on Knowledge Bases and Text 论文笔记
PullNet: Open Domain Question Answering with Iterative Retrieval on Knowledge Bases and Text
2019年,EMNLP,Google, 本文是IR-based的方法来解决KBQA任务,属于是GRAFT-Net工作的延续和改进。
Overview
本文作者将open-domain问题概括为三大类别:基于文本回答,基于KB回答、两者结合回答。而本文在GRAFT-Net的基础上,提出了一种迭代的信息检索方法,并结合使用KB和文本来做open-domain的QA任务。
首先,本文属于是Information Retrieval的范畴,此类方法的大体流程是从问题中提取topic entity,然后在KB中提取出与该实体相关的subgraph,然后再根据原问题进行答案匹配。那么本文提出的迭代式的IR方法主要解决了两个问题:
- learning what to retrieve :作者设计的方法能够抽取corpus或KB或两者结合的信息
- combining this heterogeneous information :将抽取出的异质的信息用单一的数据结构进行表示并得出问题的答案
文章描述的主要是这个迭代检索方法,而提取出subgraph以后与答案进行匹配得出答案的部分作者直接使用的GRAFT-Net,GRAFT-Net的作者也是本文的作者之一,整个模型的名字叫做PullNet
The PullNet Model
PullNet模型根据问题生成subgraph,这个过程由一个迭代的方法完成。随着迭代的进行,subgraph被逐渐扩展,每轮迭代进行扩展时,模型都会选择从KB还是corpus中提取信息(作者管这个操作叫"Pull",因此模型也被叫做"PullNet")。
Subgraph Structure
首先来看我们要求的subgraph应该长什么样。给定一个问题Q,它的子图G_{Q}\ =\ \{V,\ E\},其中顶点集合V由三部分组成:
- V_{e}: entity集合
- V_{d}: document集合,文本指的是根据实体从corpus中抽取出来的文本信息,表示为(w_{1},w_{2},\dots,w_{|d|})
- V_{f}: fact集合,一个fact就是KB中的一个三元组(v_{e},\ r,\ v_{o}),所以这fact其实就是模型从KB中抽取出来的信息
对于边集E,它也有两类边:
- V_{e}-V_{f}:一个fact结点v_{f}与一个实体结点v_{e}之间有边当且仅当v_{e}出现在v_{f}所表示的三元组中
- V_{e}-V_{d}:一个document结点v_{d}与一个实体结点v_{e}之间有边当且仅当v_{e}出现在v_{d}所表示的文本中
Iterative Retrieval
下面来看本文的核心:迭代式信息抽取

整个算法的核心就是四个Pull操作、两个classify操作和一个update操作,我们分别来看具体怎么做的。
Pull Operations
四个Pull操作又被分为两种类型,一种是extraction,包括pull\_entities和pull\_headtail;另一种是retrieval操作,包括pull\_docs和pull\_facts。
pull_entities
实体的抽取是比较简单的,有很多成熟的entity linking算法,在我们得到本轮迭代的v_{d}集合后,就从中提取出新的实体用于update
pull_headtail
这一步操作是把本轮迭代得到的fact结点的首尾实体提取出来,所谓首尾,就是v_{e}和v_{o},三元组中的entity和object。
pull_docs
retrieval的操作相对复杂一些,在文本语料库中的信息提取作者采用的是IDF-based的方法
pull_facts
在这一步中,作者先将问题文本用LSTM进行编码得到[h_{1},h_{2},\dots,h_{q}]。然后再得到所有候选fact中的关系的embedding h_{r},这个直接用一个lookup table来获取。为了确定那些候选fact是与问题相关的,作者用内积+sigmoid作为相似度得分,S(r,q)\ =\ sigmoid(h^{T}_{q}h_{r}),排序取前N_{f}个。
Classify
classify_pullnodes
这一步是判断当前subgraph中应该被扩展的实体结点集合\{v_{e}\},作者设置了一个阈值\epsilon,分类得到的概率高于阈值的结点被视为应该在该轮迭代进行扩展。从后面的pull操作也可以看到只有在这一步被选出的实体,才会参与后面的信息抽取。
classify_answer
这一步就是生成好subgraph来预测答案了,作者直接使用GRAFT-Net模型来做。
Update
update操作很简单,就是把该轮迭代新得到的实体和边加入顶点集合和边集合。
Experiment
作者使用了三个数据集进行实验:CWQ、WQSP、MetaQA
baseline有也有三个:Key-Value Memory Network、GRAFT-Net、VRN
在MetaQA上的表现

在WQSP上的表现

在CWQ上的表现

可以看到都是在纯KB上效果最好,但比这三个baseline的效果都要好了很多,尤其是在MetaQA的3-hop问题上。
Analysis
为了展示PullNet的retrieval能力,作者进行了对比

可以看到与使用PageRank-Nibble相比,PullNet在两个数据集上的Recall都高了很多

这个是对比的IDF-based单步retrieval和PullNet的迭代式retrieval效果,Recall还是高了很多
Reflection
这篇文章是IR-based的,但是想法和有些SP-based的很像,可以看到两者都是在建立一张图。本文建图的做法也是一种增量式的,一步一步构建,这与SP-based的构建query graph的一些做法有一些相似之处。
