1. 基于嵌入的知识图推理
- 目标:如何对知识图进行多跳推理?
- 知识图推理:
- 回答多跳查询
- 路径查询
- 连接查询
- Query2box
- 回答多跳查询
- 示例:生物医学图
- 知识图谱上的预测查询
我们是否可以进行多跳推理,即在不完整、大量的KG上回答复杂的查询?
在知识图中,我们有三种查询:一跳查询、路径查询、连接查询,它们的含义如下: - 预测一跳查询
知识图完成问题相当于一跳查询的问题。
- 路径查询
通过在路径上添加更多关系,将一跳查询泛化为路径查询。一个n-跳的路径查询q可以表示为
q = ( v a , ( r 1 , . . . , r n ) ) q=(v_a,(r_1,...,r_n)) q=(va,(r1,...,rn))
其中, v a v_a va是“锚”实体,路径查询的查询计划是一个链:
有如下问题:
给定一个KG,如何回答类似的路径查询呢?我们可以通过遍历KG来回答这样的路径查询:
用这样的方法回答路径查询问题似乎很简单:只需遍历图表即可。但问题是,KGs是不完整和未知的:- 实体之间的许多关系缺失或不完整
- 例如,我们缺乏所有的生物医学知识
- 列举所有的事实需要花费大量的时间和成本,我们不能希望KG能够完全完整
由于KG不完整,所以无法识别所有答案实体
- 实体之间的许多关系缺失或不完整
然而,先使知识图变完整,再遍历完整的(概率)知识图也是不现实的:
- 首先,“完整的”KG图是一个密集图,应用知识图完成之后,我们会得到一个图,其中大多数三元组 ( h , r , t ) (h,r,t) (h,r,t)都会有很多非零的概率链接,KG图将变得越来越密集
- 其次,在这样的密集图上遍历时间代价是非常昂贵的,遍历的时间复杂度是路径长度L的指数函数: O ( d m a x L ) O(d_{max}^L) O(dmaxL)
因此,我们需要一种在不完整的知识图上回答基于路径的查询的方法,这样的方法隐含地估算和解释不完整的KG。
- 任务:预测查询
- 希望能够在隐式输入缺失信息的同时回答任意查询
- 链接预测任务的泛化
2.回答KG上的预测查询
核心思想:
- 将查询映射到嵌入空间,学会在这个空间里进行推理。
- 将查询嵌入欧几里得空间中的单个点:答案节点靠近查询。
- Query2Box:将查询嵌入到欧几里得空间中的超矩形(box)中:答案节点包含在框中。
思想:在向量空间遍历KG
- 关键思想:嵌入查询
- 将TransE推广到多跳推理
注意:嵌入过程只涉及向量加法,与KG中的实体无关!
- 将TransE推广到多跳推理
- 在向量空间中嵌入路径查询
选择TransE的原因:
- 我们可以训练TransE优化知识图完成目标(第10讲)
- 由于TransE可以自然地处理组合关系,因此它可以通过使用关系嵌入的添加在多跳的潜在空间中进行转换来处理路径查询。
- 而对于TransR/DistMult/ComplEx,由于它们不能处理组合关系,因此不能轻易扩展到处理路径查询
用这样的方法可以回答路径查询问题,那么,我们可以用逻辑连接操作回答更复杂的查询吗?比如联合查询。
我们如何通过KG遍历来回答这个问题呢?
最后取交集:
但是,如果知识图不完整,导致期间的重要环节缺失,我们就找不到所有的正确答案。
那么我们如何使用嵌入来隐含地估算缺失(ESR2,Assoc,Breast Cancer)?
直觉:ESR2与BRCA1和ESR1相互作用。
这两种蛋白都与乳腺癌有关。
3. Query2box:使用Box Embeddings对KG进行推理
我们如何用逻辑连接操作回答更复杂的查询?
-
每个中间节点表示一组实体;我们如何表示它?
-
我们如何定义潜在空间中的取交集操作?
-
Box Embeddings
- 使用超矩形(boxes)嵌入查询
- 例如,我们可以将Fulvestrant的副作用嵌入一个包含所有答案实体的框中。
- 使用超矩形(boxes)嵌入查询
-
Intersection
- boxes的交集定义明确
- 当我们遍历KG以找到答案时,每个步骤都会产生一组可到达的实体。
- 我们如何更好地建模这些集合?
- boxes是一个强大的抽象,因为我们可以投影中心并控制偏移量,以建模框中包含的一组实体
-
需要解决的问题:
- 实体嵌入(参数数量:d|V|):实体被视为zero-volume boxes
- 关系嵌入(参数数量:2d|R|):每个关系都有一个boxes并产生一个new boxes
- 交集运算符f:
- 新运算符,输入为框,输出为框
- 直观地模拟框的相交
-
投影运算符 P \mathcal{P} P
- 直觉:将当前框作为输入,并使用关系嵌入来投影和扩展框
-
P
:
B
o
x
×
R
e
l
a
t
i
o
n
→
B
o
x
\mathcal{P}:Box \times Relation \rightarrow Box
P:Box×Relation→Box
- C e n ( q ′ ) = C e n ( q ) + C e n ( r ) Cen(q') = Cen(q) + Cen(r) Cen(q′)=Cen(q)+Cen(r)
-
O
f
f
(
q
′
)
=
O
f
f
(
q
)
+
O
f
f
(
r
)
Off(q') = Off(q) + Off(r)
Off(q′)=Off(q)+Off(r)
-
几何交集运算符 J \mathcal{J} J
- 将多个boxes作为输入并生成相交框box
- 直觉:
- 新box的中心应“接近”输入boxes的中心
- 偏移量(框大小)应该缩小(因为相交集的大小小于所有输入集的大小)
-
j
:
B
o
x
×
.
.
.
×
B
o
x
→
B
o
x
\mathcal{j}:Box \times ... \times Box \rightarrow Box
j:Box×...×Box→Box
- 新的box中心计算:
- 直觉:中心应该在红色区域
- 实现:中心是输入框中心的加权和,
w
i
∈
R
d
w_i \in \mathbb{R}^d
wi∈Rd由神经网路
f
c
e
n
f_{cen}
fcen(具有可训练的参数)计算,
w
i
w_i
wi表示每个输入
C
e
n
(
q
i
)
Cen(q_i)
Cen(qi)中心的“自我注意力”分数
- 新的box偏移值计算
- 直觉:偏移量应该小于输入框的偏移量
- 实现:我们首先将输入框的最小偏移量取最小,然后通过引入一个新函数
f
o
f
f
f_{off}
foff来提取输入boxes的表示,并使用sigmoid函数来保证收缩,从而使模型更具表现力。
f
o
f
f
f_{off}
foff是一个神经网络(具有可训练的参数),它提取输入框的表示以提高表达能力。Sigmoid函数将输出压缩(0,1)区间
-
example
- 从锚点节点遍历KG:ESR2和Short of Breath
- 在查询计划之后再次使用投影运算符
- 使用boxes交集运算符,阴影框表示查询的最终框嵌入
- Entity-to-Box Distance
- 我们如何定义分数函数 f q ( v ) f_q(v) fq(v)( f q ( v ) f_q(v) fq(v)捕获节点v作为查询q的答案的负距离)?
- 给定查询框q和实体嵌入(框)v,
d b o x ( q , v ) = d o u t ( q , v ) + α ⋅ d i n ( q , v ) d_{box}(q,v)=d_{out}(q,v)+\alpha \cdot d_{in}(q,v) dbox(q,v)=dout(q,v)+α⋅din(q,v), 其中, 0 < α < 1 0<\alpha<1 0<α<1
直觉:如果点被封闭在方框中,那么距离应该减小。 -
f
q
(
v
)
=
−
d
b
o
x
(
q
,
v
)
f_q(v)=-d_{box}(q,v)
fq(v)=−dbox(q,v)
- 从锚点节点遍历KG:ESR2和Short of Breath
-
扩展到联合操作 Extending to Union Operation
- 我们可以用联合操作嵌入复杂查询吗?
- 例如:“什么药物可以治疗乳腺癌或肺癌?”
- 称为连接查询+析取
- Existential Positive First-order (EPFO) queries存在性正一阶查询,我们将它们称为“与或”查询
- 我们还可以设计一个析取运算符,并在低维向量空间中嵌入AND-OR查询吗?
- 我们可以用联合操作嵌入复杂查询吗?
-
嵌入AND-OR查询
- 我们可以在低维向量空间中嵌入AND-OR查询吗?
- 不可以!允许联合任意查询需要高维嵌入!
- example:
- 给定三个查询 q 1 , q 2 , q 3 q_1,q_2,q_3 q1,q2,q3并带有答案集 ⟦ q 1 ⟧ = v 1 , ⟦ q 2 ⟧ = v 2 , ⟦ q 3 ⟧ = v 3 ⟦q_1⟧={v_1},⟦q_2⟧={v_2},⟦q_3⟧={v_3} [[q1]]=v1,[[q2]]=v2,[[q3]]=v3
- 如果我们允许并集运算,我们可以将它们嵌入到二维平面中吗
- 我们希望红点(答案)在方框内,而蓝点(否定答案)在框外
- 对于三个点,二维平面式可以做到的,那四个点呢?
- 我们无法做到为 q 2 ∨ q 4 q_2 \vee q_4 q2∨q4设计一个box embedding使得只有 v 2 v_2 v2和 v 4 v_4 v4在盒子中,而 v 1 , v 3 v_1,v_3 v1,v3在盒子外
- 总结:给定任何M个具有非重叠答案的联合查询
q
1
,
.
.
.
,
q
M
q_1,...,q_M
q1,...,qM,我们需要Θ(M)的维数来处理所有OR查询
- 对于真实世界的KG,例如FB15k,我们发现M≥ 13365,其中|V|=14951
- 注意,这是针对任意OR查询的
- 既然我们不能在低维空间中嵌入AND-OR查询,我们还能处理它们吗
- 答案是可以,关键思想是,先去掉所有unions只在最后一步做union操作
-
析取范式
- 任何AND-OR查询都可以转换为等价的DNF,即联合查询的析取
- 给定任何AND-OR查询,
q = q 1 ∨ q 2 ∨ . . . ∨ q m q=q_1 \vee q_2 \vee ... \vee q_m q=q1∨q2∨...∨qm
其中, q i q_i qi的联合查询。 - 现在我们可以首先嵌入所有 q i q_i qi,然后在最后一步“聚合”
-
q和实体之间的距离
- 实体嵌入和DNF
q
=
q
1
∨
q
2
∨
.
.
.
∨
q
m
q=q_1 \vee q_2 \vee ... \vee q_m
q=q1∨q2∨...∨qm之间的距离定义为
d b o x ( q , v ) = m i n ( d b o x ( q 1 , v ) , . . . d b o x ( q m , v ) ) d_{box}(q,v)=min(d_{box}(q_1,v),...d_box(q_m,v)) dbox(q,v)=min(dbox(q1,v),...dbox(qm,v)) - 直觉:只要v是一个联合查询 q i q_i qi的答案,那么v应该是q的答案
- 只要v接近一个联合查询 q i q_i qi,那么v应该接近嵌入空间中的q
- 嵌入任何AND-OR查询的过程:
- 将q转换为一个等价的DNF q 1 ∨ q 2 ∨ . . . ∨ q m q_1 \vee q_2 \vee ... \vee q_m q1∨q2∨...∨qm
- 嵌入 q 1 q_1 q1到 q m q_m qm
- 计算(box)距离 d b o x ( q i , v ) d_{box}(q_i,v) dbox(qi,v)
- 取所有距离中的最小值
- 最终得分 f q ( v ) = − d b o x ( q , v ) f_q(v)=-d_{box}(q,v) fq(v)=−dbox(q,v)
- 实体嵌入和DNF
q
=
q
1
∨
q
2
∨
.
.
.
∨
q
m
q=q_1 \vee q_2 \vee ... \vee q_m
q=q1∨q2∨...∨qm之间的距离定义为
4. 如何训练Query2box
4.1 Training Overview
- 概述和直观(类似于KG完成):
- 给定查询嵌入q,对于答案 v ∈ [ q ] v \in [q] v∈[q]最大化其分数 f q ( v ) f_q(v) fq(v)并最小化否定答案 v ∉ [ q ] v \notin [q] v∈/[q]的分数 f q ( v ′ ) f_q(v') fq(v′)
- 可训练的参数
- 具有d|V|个参数的实体嵌入
- 具有2d|R|个参数的关系嵌入
- 交集运算符
- 如何从KG完成一个查询,获得其答案和其否定答案来训练参数?
- 如何分割KG进行查询回答?
4.2 Training
- Training
- 从训练图
G
t
r
a
i
n
G_{train}
Gtrain中随机抽取一个查询q,回答
v
∈
[
q
]
G
t
r
a
i
n
v\in[q]_{G_{train}}
v∈[q]Gtrain,以及一个负样本
v
′
∉
[
q
]
G
t
r
a
i
n
v'\notin[q]_{G_{train}}
v′∈/[q]Gtrain
- 负样本:与v类型相同但不是答案的实体
- 嵌入查询q.
- 计算分数 f q ( v ) f_q(v) fq(v)和 f q ( v ) f_q(v) fq(v)
- 优化损失ℓ 来最大化
f
q
(
v
)
f_q(v)
fq(v)同时最小化
f
q
(
v
)
f_q(v)
fq(v)
l = − l o g σ ( f q ( v ) ) − l o g ( 1 − σ ( f q ( v ′ ) ) ) l=-log\sigma(f_q(v))-log(1-\sigma(f_q(v'))) l=−logσ(fq(v))−log(1−σ(fq(v′)))
- 从训练图
G
t
r
a
i
n
G_{train}
Gtrain中随机抽取一个查询q,回答
v
∈
[
q
]
G
t
r
a
i
n
v\in[q]_{G_{train}}
v∈[q]Gtrain,以及一个负样本
v
′
∉
[
q
]
G
t
r
a
i
n
v'\notin[q]_{G_{train}}
v′∈/[q]Gtrain
4.3 从模板生成查询:query generation from templates
-
我们如何生成复杂的查询?
-
我们从查询模板开始
-
查询模板可以被视为查询的抽象
-
我们通过用KG中的具体实体和关系实例化每个变量来生成查询
- 例如,用ESR2(KG上的节点)实例化Anchor1
- 用Rel1(KG上的边)实例化Assoc
-
如何实例化给定KG的查询模板?
-
从实例化查询模板的答案节点开始,然后迭代实例化其他边和节点,直到我们固定所有锚节点
-
从实例化查询模板的根节点开始。从KG中随机选择一个实体作为根节点,例如,我们选择Fulvestrant
-
现在我们来看交集。实体集合的交集是Fulvestrant,那么自然这两个集合也应该包含Fulvestant
-
我们通过随机采样与当前实体Fulvestrant关联的一个关系来实例化模板中的投影边。
例如,我们可以选择关系TreatedBy,并检查哪些实体与Fulvestrant在TreatedBy:{Breast Cancer}方面相关 -
我们首先查看一个分支,并将投影边与Breast Cancer相关的关系(例如Assoc)记录。然后,我们使用Assoc检查哪些实体与Breast Cancer有关:{ESR2}
-
然后我们查看第二个分支,并使用与Fulvestrant相关的关系(例如,CausedBy)将投影边接地。然后我们检查哪些实体与Fulvestrant的CausedBy连接:{Short of Breath}
-
我们从{Short of Breath}中选择实体,将其设置为锚节点
-
现在,我们实例化了一个查询q!
- 查询q必须具有KG上的答案,其中一个答案是实例化的答案节点:Fulvestrant。
- 我们可以通过KG遍历获得全部答案 [ q ] G [q]_G [q]G
- 我们可以抽样负样本(答案)
v
′
∉
[
q
]
G
v' \notin[q]_G
v′∈/[q]G
5. Example of Query2box
- 可视化
- 示例:“列出演奏弦乐的男性乐器演奏者”
- 我们使用t-SNE将嵌入空间缩减为二维空间,以便可视化查询结果
- 总结:
- 我们介绍了在大型知识图上回答预测性查询。
- 关键思想是通过导航嵌入空间来嵌入查询!
- 我们通过组合学习的运算符来嵌入查询
- 查询的嵌入接近于嵌入空间中的答案