知识图谱推理

​ 知识图谱中一个很常见的任务是知识图谱补全,也就是给定一个head和realtion,我们预测出对应的tail,这是知识图谱推理中的推理任务(Reasoning)

image-20210629142130549

Reasoning和query

​ 知识图谱推理的任务就是在知识图谱上进行multi-hop的推理,也就是在图上的多条路径中进行连续的推理,比如下面的生物医学知识图谱中通过症状进行疾病的推理:

image-20210629142543061

而知识图谱具体的推理任务需要根据一系列的query来表述,也就是说在给定的不完整并且大规模的知识图谱中对输入的自然语言形式的query进行推理并返回结果,而query可以分为One-hop Queries,Path Queries和Conjunctive Queries三种,分别是单次跳转的推理,多次跳转的推理和联合推理,可以用下面的图来表示三种query之间的关系:

image-20210629143115673

query的形式化表述

one-hop query

​ one-hop query实际上就是一个head和一个relation组成的,可以写成,然后判断一个tail是否为答案,转化成知识图谱补全的问题就是判断一个三元组是否存在于知识图谱中。

path query

​ path query实际上就是一系列的one-hop query,可以写成,然后需要在知识图谱中进行遍历来得到最终的结果,比如输入的path query是What proteins are associated with adverse events caused by Fulvestrant,那么经过分析就可以得到就是Fulvestrant,而caused,associated就是一系列关系,然后就可以开始在知识图谱中进行一步步的查询。

​ 虽然看起来很容易,然而知识图谱往往是不完整的,可能有很多实体和关系是缺失的,因此在推理的过程中我们很可能不能获得所有可能的结果实体。但是我们又不能把知识图谱补全之后再进行推理,因为完整的知识图谱是一个非常稠密的图,大部分三元组都会有一定概率存在,而知识图谱推理的复杂度是指数级别的,因此完整的知识图谱上的query的时间复杂度非常高。

​ 因此我们希望能在不完整的知识图谱上完成基于路径的查询,同时我们希望可以隐式地对知识图谱做出一定的解释,这实际上是一种泛化后的链接预测任务。

知识图谱推理和问答

​ 接下来就需要研究如何在知识图谱中进行query的问答,上一章的内容中已经提到知识图谱中的实体和关系都可以表示在向量空间中,也就是知识图谱嵌入,因此我们可以考虑将知识图谱上的问答转化到向量空间中进行,而具体的方法就是将query也转换成一个向量,并使用嵌入模型的打分函数来评估结果。一个查询 在向量空间中可以表示为:

image-20210629150727581

​ 这样一来上一章提到的各种知识图谱嵌入方法,比如TransE,TransR,DisMult和ComplEx等等就可以使用到知识图谱的问答中,而上述方法中,只有TransE可以刻画传递关系(composition relations)其他几个方法都不行,因此最终用于知识图谱推理问答的只有TransE,而如果是更复杂的conjunctive query,比如“What are drugs that cause Short of Breath and treat diseases associated with protein ESR2?”,它可以表示为((e:ESR2, (r:Assoc, r:TreatedBy)), (e:Short of Breath, (r:CausedBy)) 而查询的过程可以表示为:

image-20210629153622220

Query2Box

​ 这一节的内容将着重介绍一种新提出的知识图谱推理方式:使用Box Embedding进行推理。这种方法中,一系列的query被表示成了一系列超矩形(hyper-rectangles),也叫做box,采用center和offset两个量来描述一个query,依然用上面那张生理医学知识图谱为例,我们可以将Fulvestrant(一种药)的所有不良反应都嵌入到一片矩形的区域内:

image-20210629154928968

Box embedding使我们在遍历KG进行查询的时候,每一步都可以得到一系列reachable的实体组成的集合,并且box的交集(Intersection)是良好定义的。Box是一种很强的抽象,可以通过将中心节点进行投影并控制offset,将相关的实体包含在内,将无关的实体排除在外。在Query2Box中,

  • 每个实体用d维的向量来表示,并且被视为一种没有容积(zero-volume)的box
  • 每个关系用一个box来描述,包含center和offset两个量来描述
  • 交集运算符f,可以计算一系列box的交集

投影操作

​ 利用已有的关系嵌入,将输入的一个box投影成另一个box,即 这个过程可以用下面的图来描述:

image-20210701233741887

取交集(Intersection)操作

​ 求交集是Query2Box的另一种基本操作,这种操作可以求出输入的一系列box的交集,也是一个box,根据基本常识,这个新的box的中心应该接近于输入的box的中心,并且offset不能超过输入box中的最小值。新的交集box计算方式如下: 这里的是权重参数,可以通过如下方式计算得到,本质上是一种注意力机制 而offset可以用如下方式计算: 这里的函数f是一个神经网络,可以提取输入box的特征,增强表达能力,并用sigmoid函数归约到(0,1)区间内

Query2Box详解

​ 依然用What are drugs that cause Short of Breath and treat diseases associated with protein ESR2?这样的一个query作为例子,我们可以先将这个query处理为:((e:ESR2, (r:Assoc, r:TreatedBy)), (e:Short of Breath, (r:CausedBy)),然后我们就可以使用投影,从head实体开始一步步投影进行投影,得到如下结果:

image-20210701234133658

然后在进行求交集的操作,得到最终的结果(阴影部分)

image-20210702001130830

打分函数

​ Query2Box的知识图谱推理框架中,使用实体到box的负距离来定义打分函数,对于一个查询q和一个嵌入空间中的实体v,我们定义其距离函数为: 这里的距离被分成了外部距离和内部距离两个部分,外部距离就是到box的边界的距离,而内部距离是box的边界到中心点的距离,而当一个实体在box内部的时候,其而内部距离应该定义成负权重的,因此打分函数可以定义为: 和知识图谱嵌入一样,我们希望这个打分函数对于正确的而言分数更高,而对错误的分数更低,因此训练的时候需要用到负样本。

Union操作的扩展

​ 在Query2Box的框架下,交集的操作已经有了良好的定义,而并集操作是否也可以使用低维的向量来表示呢?一系列析取(disjunction)的连续查询又被叫做Existential Positive First-order (EPFO) queries,这类查询可以分解为一系列AND-OR操作。

​ 然而AND-OR查询不能用低维的向量来表示,比如有3个不同的query和对应的结果,可以使用2维空间表示,而如果有4个不同的query,当下面这种情况出现的时候就需要3维的空间:

image-20210704105528406

这是为了保证任意两个query的并集中不能包含其他的query,而对于M个组合的query,表示出所有的OR操作至少需要规模的嵌入空间,因此数据规模一大就不能用低维向量来表示所有的并集操作。

​ 但这个问题也不是完全没有解决的办法,论文中提出的一个key idea就是改变处理一个联合查询时候的顺序,到最后一步再做union

image-20210704124001196

​ 具体的做法是,任何一个AND-OR查询可以转变成一个等价的析取范式(DNF),即,这样一来我们来处理一个查询的时候就可以先求出所有的嵌入,到最后一步再进行union操作。在最后计算距离作为score的时候,容易得到有:

Query2Box的训练

​ 在Query2Box模型中,需要训练的参数主要有所有的实体的嵌入向量,所有的关系的嵌入向量和Intersection运算中的各种参数。

​ 一个很直观的想法是,在训练Qeury2Box模型的过程中,对于一个查询q的嵌入向量,我们要让属于q中的实体v对应的打分函数最大化,而要让不在其中的打分函数最小化,为此需要用到负采样,也就是在训练的过程中,对于每个正样本v随机选取一个负样本与之对应,具体的训练过程可以分为以下几个步骤:

  • 对输入的样本进行负采样
  • 计算查询q的box embedding
  • 计算正负样本的打分函数
  • 计算损失函数并进行优化,每个样本训练过程中的loss是

query的生成

​ 在训练之前我们需要提取出一系列查询,而这个过程称为Query Generation,可以通过一系列模板生成:

image-20210704132959992