简单说说PullNet

简单说说PullNet

论文:PullNet: Open Domain Question Answering with Iterative Retrieval on Knowledge Bases and Text

地址:arxiv.org/abs/1904.09…

源码:无源码

提出背景

大型的KB也不可能完整的保存所有的知识,所以KB具有不完整性(incomplete)。而语料库中一般较为完备的存储着知识,但没有KB那样结构化。提出的问题也不是简单的一跳回答,而是需要推理的多跳问题。

PullNet结合KB和语料二者,使用迭代的方法构建问题特定的子图,其中包含了问题相关的信息。从问题以及问题包含的实体开始构建一个异质的子图(包含了相关文本节点和三元组节点),每次迭代根据GCN计算各个节点扩充的概率,选取大于阈值的k个节点进行扩充。然后对于选取的k各节点,pull它们相关的文档和实体以及三元组,更新到构建的子图中,最终迭代T次后使用类似的GCN得到答案。

具体方法

Background

对于特定的问题qq,其问题子图为Gq={V,E}G_q = \{V,E\}。该问题子图包含了对问题qq相关的文本语料和KB相关信息的异质图。VV就是图中的节点。

有三种节点V=VeVdVfV = V_e \cup V_d \cup V_f

  • VeV_e:实体节点,veVev_e \in V_e,即KB中的实体

  • VdV_d:文本节点,vdVdv_d \in V_d,语料库中的文档,包含了token的序列:(w1,w2,...,wd)(w_1,w_2,…,w_{|d|}),该文档只是一句话,并且可以通过mention实体直接找到它。

  • VfV_f:事实节点,vfVfv_f \in V_f,KB中的三元组(vs,r,vo)(v_s,r,v_o),包含了头实体尾实体以及关系rr

EE就是节点间的边:

  • 如果一个实体节点vev_e连接了事实节点vfv_f,那么vev_e是该事实节点vfv_f的头实体或者尾实体。

  • 如果一个实体节点vev_e连接了文本节点vdv_d,那么文本vdv_d中mention到了这个实体vev_e

算法

fig1.PNG

  1. 一开始初始化问题图Gq0={V0,E0}G_q^0 = \{V^0,E^0\}V0={eqi}V^0 = \{e_{q_i}\},即问题中metion的实体列表。E0E^0则是空集。

  2. 迭代TT次,每次选取kk个实体取扩充,每次迭代,对于选择好的实体,都检索相关的文本集和事实集。

  3. 每次迭代的最后,都会增加新的边到问题图中GqtG_q^t。而tt次迭代扩充后,分类步骤则添加到最后以在问题图中识别答案。

Pull操作

简单的抽取pull:

  • pull_entities(vd)pull\_entities(v_d):从文本中提取所有mention的实体。

  • pull_headtail(vf)pull\_headtail(v_f):从三元组中提取头实体和尾实体。

复杂的检索pull:

  • pull_docs(ve,q)pull\_docs(v_e,q):在他的论文方法中,所有的文档都可以被实体链接检索到,即一个句子中mention到两个实体A和B,那么可以通过A和B作为索引直接得到该句子。除了实体能直接得到文本,还rank文本和问题qq的IDF相似性,最终可以得到topNdN_d个文本句子。

  • pull_facts(ve,q)pull\_facts(v_e,q):在KB中检索和实体vev_e相关得到topNfN_f个事实节点。限制了事实节点中vev_e必须为它的头实体或者尾实体,即在KB中得到实体vev_e的一跳子图,并且rank事实节点中关系rr和问题qq的相似性,基于公式S(r,q)S(r,q)

    • 关系rr的embdding为hrh_r,问题qq为词的序列q=(w1,w2,...,wq)q = (w_1,w_2,…,w_{|q|})。相似度即LSTM转换qq的最后一层表示和关系rrembedding的点积。然后输入到sigmoid公式中得到概率。
    • hq=LSTM(w1,w2,...,wq)Rnh_q = LSTM(w_1,w_2,…,w_{|q|}) \in R^n
    • S(r,q)=sigmoid(hrThq)S(r, q) = sigmoid(h_r^Th_q)

Classify操作

两类classifyclassify操作都在子图GqtG_q^t上的节点进行计算(只在图的实体节点上继续计算)。使用graph CNN,所以就算只计算实体节点,一些非实体节点和边也能影响最终的分类结果。

  • classify_pullnodes(Gqt)classify\_pullnodes(G_q^t):得到实体节点vev_e在下次迭代是否进行扩充(expand)的概率。构建子图阶段,在每次迭代只选择kk个概率最高的节点。

  • classify_answer(Gqt)classify\_answer(G_q^t):子图构建完成后,计算实体节点能否回答该问题,最高概率的实体则是最终答案。

  • GraftNet:上述Classify操作都是通过GraftNet来进行计算,GraftNet是graph CNN的一个变种。

更新操作

给上一次迭代得到的图Gqt1G_q^{t-1}添加实体节点{ve(f)i}{ve(d)i}\{v_{e(f)_i}\} \cup \{v_{e(d)_i}\},文本节点{vdi}\{v_{d_i}\},和事实节点{vfi}\{v_{f_i}\}。并且更新节点间连接的边。

训练

训练过程中给定的是问题和答案对,其中推导路径是隐含的。训练包含上述的classifyclassify操作以及相似度计算。

在训练过程中,由于给定问题和答案对,首先,在KB中找到问题实体到答案实体的最短路径,该路径经过的实体都被标记为候选中间实体(candidate intermediate entities) 。对每个候选中间实体记录他到问题节点的最短路径tet_e

  • classify_pullnodesclassify\_pullnodes在第tt次迭代中的训练,那些正例ee’就是连接到候选中间实体ee,并且距离为et=t+1e_t = t + 1

  • S(r,q)S(r, q)的正例关系也是到候选中间实体ee距离为et=t+1e_t = t + 1

  • 这样在检索时更加关注到到答案的最短路径上的节点。

训练过程中pull所有的实体节点,只要其预测分数大于给定阈值ϵ\epsilon,而不是只要k个最高分数节点。而在训练过程中,如果pull操作没有得到候选中间实体,还是自己添加到图中。

T和阈值ϵ\epsilon都是超参,T必须能够大于等于推导链的最大长度。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享