简单说说PullNet
论文:PullNet: Open Domain Question Answering with Iterative Retrieval on Knowledge Bases and Text
源码:无源码
提出背景
大型的KB也不可能完整的保存所有的知识,所以KB具有不完整性(incomplete)。而语料库中一般较为完备的存储着知识,但没有KB那样结构化。提出的问题也不是简单的一跳回答,而是需要推理的多跳问题。
PullNet结合KB和语料二者,使用迭代的方法构建问题特定的子图,其中包含了问题相关的信息。从问题以及问题包含的实体开始构建一个异质的子图(包含了相关文本节点和三元组节点),每次迭代根据GCN计算各个节点扩充的概率,选取大于阈值的k个节点进行扩充。然后对于选取的k各节点,pull它们相关的文档和实体以及三元组,更新到构建的子图中,最终迭代T次后使用类似的GCN得到答案。
具体方法
Background
对于特定的问题,其问题子图为。该问题子图包含了对问题相关的文本语料和KB相关信息的异质图。就是图中的节点。
有三种节点:
-
:实体节点,,即KB中的实体
-
:文本节点,,语料库中的文档,包含了token的序列:,该文档只是一句话,并且可以通过mention实体直接找到它。
-
:事实节点,,KB中的三元组,包含了头实体尾实体以及关系。
就是节点间的边:
-
如果一个实体节点连接了事实节点,那么是该事实节点的头实体或者尾实体。
-
如果一个实体节点连接了文本节点,那么文本中mention到了这个实体。
算法
-
一开始初始化问题图。,即问题中metion的实体列表。则是空集。
-
迭代次,每次选取个实体取扩充,每次迭代,对于选择好的实体,都检索相关的文本集和事实集。
-
每次迭代的最后,都会增加新的边到问题图中。而次迭代扩充后,分类步骤则添加到最后以在问题图中识别答案。
Pull操作
简单的抽取pull:
-
:从文本中提取所有mention的实体。
-
:从三元组中提取头实体和尾实体。
复杂的检索pull:
-
:在他的论文方法中,所有的文档都可以被实体链接检索到,即一个句子中mention到两个实体A和B,那么可以通过A和B作为索引直接得到该句子。除了实体能直接得到文本,还rank文本和问题的IDF相似性,最终可以得到top个文本句子。
-
:在KB中检索和实体相关得到top个事实节点。限制了事实节点中必须为它的头实体或者尾实体,即在KB中得到实体的一跳子图,并且rank事实节点中关系和问题的相似性,基于公式。
- 关系的embdding为,问题为词的序列。相似度即LSTM转换的最后一层表示和关系embedding的点积。然后输入到sigmoid公式中得到概率。
Classify操作
两类操作都在子图上的节点进行计算(只在图的实体节点上继续计算)。使用graph CNN,所以就算只计算实体节点,一些非实体节点和边也能影响最终的分类结果。
-
:得到实体节点在下次迭代是否进行扩充(expand)的概率。构建子图阶段,在每次迭代只选择个概率最高的节点。
-
:子图构建完成后,计算实体节点能否回答该问题,最高概率的实体则是最终答案。
-
GraftNet:上述Classify操作都是通过GraftNet来进行计算,GraftNet是graph CNN的一个变种。
更新操作
给上一次迭代得到的图添加实体节点,文本节点,和事实节点。并且更新节点间连接的边。
训练
训练过程中给定的是问题和答案对,其中推导路径是隐含的。训练包含上述的操作以及相似度计算。
在训练过程中,由于给定问题和答案对,首先,在KB中找到问题实体到答案实体的最短路径,该路径经过的实体都被标记为候选中间实体(candidate intermediate entities) 。对每个候选中间实体记录他到问题节点的最短路径。
-
在第次迭代中的训练,那些正例就是连接到候选中间实体,并且距离为
-
的正例关系也是到候选中间实体距离为
-
这样在检索时更加关注到到答案的最短路径上的节点。
训练过程中pull所有的实体节点,只要其预测分数大于给定阈值,而不是只要k个最高分数节点。而在训练过程中,如果pull操作没有得到候选中间实体,还是自己添加到图中。
T和阈值都是超参,T必须能够大于等于推导链的最大长度。