对知识图谱进行推理

点乘,也叫数量积。结果是一个向量在另一个向量方向上投影的长度,是一个标量。
叉乘,也叫向量积。结果是一个和已有两个向量都垂直的向量。
一般点乘用来判断两个向量是否垂直,因为比较好算。也可以用来计算一个向量在某个方向上的投影长度,就像定义一样。
叉乘更多的是判断某个平面的方向。从这个平面上选两个不共线的向量,叉乘的结果就是这个平面的法向量。

 目标:
        ▪ 如何在知识图谱上进行多跳推理?
 对知识图谱进行推理
        ▪ 回答多跳查询
        ▪ 路径查询
        ▪ 合取查询
        ▪ Query2Box

我们能否进行多跳推理,即在不完整的大规模知识图谱上回答复杂查询?
单跳查询:Fulvestrant 导致哪种不良事件?(e:Fulvestrant,(r:Causes))
路径查询:与 Fulvestrant 导致的不良事件相关的蛋白质是什么?(e:Fulvestrant,(r:Causes,r:Assoc))
合取查询:治疗乳腺癌并导致头痛的药物是什么?((e:BreastCancer,(r:TreatedBy)),(e:Migraine,(r:CausedBy)))
在本讲中,我们只关注在知识图谱上回答查询!接下来将详细介绍表示法。 

 我们可以将知识图谱补全问题形式化为回答一跳查询。
 知识图谱补全:连接(ℎ,𝑟,𝑡)是否在知识图谱中?
 一跳查询:𝑡 是否是查询(ℎ,𝑟)的答案?
        ▪ 例如:哪些副作用由药物 Fulvestrant 导致?
 通过在路径上添加更多的关系,将一跳查询推广为路径查询。
 跳路径查询 𝑞 可以用以下方式表示:
                q = (v_a,(r_1, \cdots ,r_n))
        ▪ v_a 是“锚定”实体,
        ▪ 记图 𝐺 中的查询 𝑞 的答案为 \left [ q \right ]_G
        查询计划的 𝑞:路径查询的查询计划是一个链条。

问题:“与 Fulvestrant 导致的不良事件相关的蛋白质是什么?”
         v_a 是 e :Fulvestrant
        (𝑟1,𝑟2)是(r:Causes,r:Assoc)
         查询:(e:Fulvestrant,(r:Causes,r:Assoc))

在给定知识图谱的情况下,如何回答路径查询?
 我们通过遍历知识图谱来回答路径查询:
        从锚定节点“Fulvestrant”开始,通过关系“Causes”遍历知识图谱,我们到达实体{“Brain Bleeding”,“Short of Breath”,“Kidney Infection”,“Headache”}。
        从节点{“Brain Bleeding”,“Short of Breath”,“Kidney Infection”,“Headache”}开始,通过关系“Assoc”遍历知识图谱,我们到达实体{“CASP8”,“BIRC2”,“PIM1”}。这些是答案。

 回答查询似乎很简单:只需遍历图。
 但是知识图谱是不完整和未知的:
        ▪ 实体之间的许多关系缺失或不完整
                ▪ 例如,我们缺乏所有的生物医学知识
                ▪ 枚举所有的事实需要相当长的时间和成本,我们不能指望知识图谱会完全完整
 由于知识图谱的不完整性,人们无法识别出所有答案实体。

我们可以首先完成知识图谱补全,然后遍历已完成的(概率)知识图谱吗?
         不可以!“完成”的知识图谱是一个稠密图!
                ▪ 大多数(ℎ,𝑟,𝑡)三元组(知识图谱上的边)将具有一些非零概率。
 遍历稠密知识图谱的时间复杂度与路径长度 𝐿 的指数函数成正比:o(d_{max}^L)
 我们需要一种方法来回答基于路径的不完整知识图谱的查询。
 我们希望我们的方法能够隐含地填充和考虑不完整的知识图谱。
 任务:预测查询
        ▪ 希望能够在隐含地填充缺失信息的同时回答任意查询
        ▪ 链接预测任务的概括
1)在给定实体嵌入的情况下,如何回答任意查询?
        ▪ 路径查询:使用 TransE 的概括
        ▪ 合取查询:使用 Query2Box
        ▪ 与或查询:使用 Query2Box 和查询重写
(我们将假设实体嵌入和关系嵌入已经给出)
2)如何训练嵌入?
        ▪ 确定使我们能够嵌入查询的实体和关系嵌入的过程。

1. 回答知识图谱上的预测查询 (Answering Predictive Queries on knowledge Graphs)

将查询映射到嵌入空间中。在该空间中学习推理。
         将查询嵌入到欧几里德空间中的单个点:答案节点靠近查询。
         Query2Box:将查询嵌入到欧几里德空间中的超矩形(盒子):答案节点被包含在盒子中。
 关键思想:嵌入查询!
        ▪ 将 TransE 推广到多跳推理。
        ▪ 回顾:TransE:使用得分函数 f_r(h,t) = -||h+r-t||将𝐡 转化为𝐭。
        ▪ 另一种解释方式是:
                ▪ 查询嵌入:𝐪 = 𝐡 + 𝐫
                ▪ 目标:查询嵌入 𝐪 靠近答案嵌入 𝐭,  f_q(t)=-||q-t||
        ▪ 将 TransE 推广到多跳推理。
                                        q = (v_a,(r_1, \cdots ,r_n))

                                                q=v_a+r_1\cdots +r_n
嵌入过程只涉及向量加法,与知识图谱中的实体数量无关!
将路径查询嵌入到向量空间中。
         问题:“与 Fulvestrant 导致的不良事件相关的蛋白质是什么?”
         查询:(e:Fulvestrant, (r:Causes , r:Assoc))
按照查询计划进行操作:

 洞见:
         我们可以训练 TransE 以优化知识图谱补全目标(第11讲)
         由于 TransE 可以自然地处理组合关系,它可以通过在潜在空间中使用关系嵌入的加法来处理多跳的路径查询。
         对于 TransR / DistMult / ComplEx,由于它们不能处理组合关系,因此不能很容易地扩展以处理路径查询。
我们能否用逻辑合取操作回答更复杂的查询?
         合取查询:“导致呼吸急促并治疗与蛋白质 ESR2 相关的疾病的药物是什么?”
                ((e:ESR2, (r:Assoc, r:TreatedBy)), (e:Shortof Breath, (r:CausedBy))

我们如何通过遍历知识图谱来回答这个问题?
        从第一个锚定点“ESR2”通过关系“Assoc”遍历,我们到达一组实体{“Lung Cancer”,“Breast Cancer”}
        从实体集合{“Lung Cancer”,“Breast Cancer”}通过关系TreatedBy遍历,我们到达一组实体{“Paclitaxel”,“Arimidex”,“Fulvestrant”}
        从第二个锚定点“Short of Breath”通过关系“CausedBy”遍历,我们到达一组实体{“Fulvestrant”,“Ketamin”,“Paclitaxel”}
        我们对这两组实体进行交集运算,得到答案{“Fulvestrant”,“Paclitaxel”}

如果缺少此链接,则我们无法找到 Fulvestrant 作为答案。
我们如何使用嵌入来隐含地填充缺失的关系(ESR2, Assoc, Breast Cancer)?
直觉:ESR2 与 BRCA1 和 ESR1 互动。这两个蛋白质都与乳腺癌相关。
每个中间节点表示一组实体,我们如何表示它?我们如何在潜在空间中定义交集运算?

2. Query2Box:使用盒子嵌入进行知识图谱推理(Query2Box:Reasoning over KGs Using Box Embeddings)   

如何使用逻辑合取操作回答更复杂的查询?
        (1) 每个中间节点表示一组实体;我们如何表示它?
        (2) 如何在潜在空间中定义交集运算?   

使用超矩形(盒子)嵌入查询
                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        q = (Center(q),of fset(q))
例如,我们可以使用一个包围所有答案实体的盒子来嵌入 Fulvestrant 的不良事件。

 盒子的交集是有明确定义的!
 当我们遍历知识图谱以找到答案时,每一步都产生一组可到达的实体。
 我们如何更好地对这些集合建模?
        ▪ 盒子是一个强大的抽象,因为我们可以投影中心并控制偏移量来建模盒子中的实体集合。 
需要弄清楚的事情:符号说明:d:出度,|V|:实体数量,|R|:关系数量
 实体嵌入(参数数量:d|V|):
        ▪ 将实体视为零体积的盒子
 关系嵌入(参数数量 2d|R|):
        ▪ 每个关系接受一个盒子并产生一个新的盒子
 交集运算符 𝒇 :
        ▪ 新的运算符,输入为盒子,输出为盒子
        ▪ 直观地模拟了盒子的交集
投影运算符 𝓟
 直观理解:
        ▪ 将当前盒子作为输入,使用关系嵌入来投影和扩展盒子!
 𝒫 : 盒子 × 关系 → 盒子:"×"(叉号)表示投影运算符是一个从任何盒子和关系到新盒子的关系。
​​​​​​​                                        𝐶𝑒𝑛 (𝑞 ′) = 𝐶𝑒𝑛 (𝑞) + 𝐶𝑒𝑛 (𝑟)
                                        𝑂𝑓𝑓 (𝑞 ′) = 𝑂𝑓𝑓 (𝑞) + 𝑂𝑓𝑓(𝑟)

 将查询嵌入到向量空间中:“导致呼吸急促并治疗与蛋白质 ESR2 相关的疾病的药物是什么?”
 从锚定节点 ESR2 和 Short of Breath 遍历知识图谱:
 再次使用投影运算符,按照查询计划进行操作。
 再次按照查询计划使用投影运算符。
如何计算边界框的交集?

 几何交集运算符 \jmath
 将多个盒子作为输入,生成交集盒子
 直观理解:
        ▪ 新盒子的中心应该“接近”输入盒子的中心
        ▪ 偏移量(盒子大小)应该缩小(因为交集集合的大小小于所有输入集合的大小)
\jmath : 盒子 × ⋯ × 盒子 → 盒子

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​Cen(q_{inter})=\underset{i}{\sum }w_i\bigodot Cen(q_i)
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​w_i = \frac{exp(f_{cen}(Cen(q_i)))}{\sum_{j}^{}exp(f_{cen(Cen(q_i))})}
                        通过神经网络 𝑓(𝑐𝑒𝑛) 计算𝒘𝑖 ∈ ℝ𝑑是可训练权重
                        𝒘𝑖表示每个输入 𝐶𝑒𝑛(𝑞𝑖) 的“自注意力”分数。

直观理解:中心应该在红色区域内!
实现:中心是输入盒子中心的加权和

           off(q_{inter})=min(off(q_1),\cdots ,off(q_n))\bigodot \sigma (f_{off}(off(q_1),\cdots ,off(q_n)))

      f_{off} 是一个神经网络(带有可训练参数),用于提取输入盒子的表示以增强表达能力。
直观理解:偏移量应该小于输入盒子的偏移量
实现:我们首先取输入盒子的偏移量的最小值,然后通过引入一个新的函数 𝑓𝑜𝑓𝑓 来提取输入盒子的表示,其中使用 sigmoid 函数来保证收缩。
阴影盒子表示查询的最终盒子嵌入。

 如何定义分数函数 f_q(v)(负距离)?(f_q(v) 捕捉了节点 𝒗 作为答案对 𝒒 的反距离)
 给定查询盒子 𝐪 和实体嵌入(盒子) 𝐯,
        ​​​​​​​                        d_{box(q,v)}=d_out(q,v)+a\cdot d_in(q,v)
其中 0 < 𝛼 < 1。
 直观理解:如果点位于盒子内,距离应该减小。
                                                        f_q(v)=-d_{box(q,v)}

我们能否使用并集来嵌入复杂查询?
        例如:“什么药物可以治疗乳腺癌或肺癌?”
合取查询 + 析取称为存在性正一阶(EPFO)查询。我们将它们称为 AND-OR 查询。
我们能否设计一个析取运算符,并将 AND-OR 查询嵌入到低维向量空间中?
我们能否将 AND-OR 查询嵌入到低维向量空间中?
        不可以!直观理解:允许在任意查询上使用并集需要高维嵌入!
举个例子:
        假设有三个查询 𝑞1, 𝑞2, 𝑞3,其答案集分别为:
                ​​​​​​​        ​​​​​​​        ​​​​​​​        [q_1]=\left \{ v_1 \right \},[q_2]=\left \{ v_2 \right \},[q_3]=\left \{ v_3 \right \}
        如果我们允许使用并集操作,我们能否将它们嵌入到一个二维平面上?

我们希望红色点(答案)位于盒子内,而蓝色点(负答案)位于盒子外。

  假设有四个查询 𝑞1, 𝑞2, 𝑞3,其答案集分别为:
                ​​​​​​​        ​​​​​​​        ​​​​​​​        [q_1]=\left \{ v_1 \right \},[q_2]=\left \{ v_2 \right \},[q_3]=\left \{ v_3 \right \},[q_4]=\left \{ v_4 \right \}
  如果我们允许使用并集操作,我们能否将它们嵌入到一个二维平面上?

我们无法设计一个盒子嵌入来使得 𝒒𝟐 ∨ 𝒒𝟒 的情况下,只有 𝑣2 和 𝑣4 在盒子内,而 𝑣1 和 𝑣3 在盒子外。
我们能否将 AND-OR 查询嵌入到低维向量空间中?
结论:对于给定的 𝑀 个无交答案的合取查询 𝑞1, …, 𝑞𝑀,我们需要 Θ(𝑀) 的维度来处理所有的析取查询。
        对于现实世界的知识图谱,如 FB15k,我们发现 𝑀 ≥ 13,365,其中 𝑉 = 14,951。
        请记住,这是针对任意 OR 查询的情况。
由于我们无法将 AND-OR 查询嵌入到低维空间中,我们是否仍然能够处理它们?
关键思想:将所有的并集操作都移出,只在最后一步进行并集操作!

任何 AND-OR 查询都可以转换为等价的 DNF(合取范式),即合取查询的析取。
对于给定的 AND-OR 查询 𝒒,
                        𝑞 = 𝑞1 ∨ 𝑞2 ∨ ⋯ ∨ 𝑞𝑚,
                        其中 𝑞𝑖 为合取查询。
现在我们可以首先嵌入每个 𝑞𝑖,然后在最后一步进行“聚合”操作!
实体嵌入与 DNF 𝑞 = 𝑞1 ∨ 𝑞2 ∨ ⋯ ∨ 𝑞𝑚 之间的距离定义为:
𝑑𝑏𝑜𝑥 (𝑣, 𝑞) = 𝑑𝑏𝑜𝑥 (𝑣, 𝑞1 ∨ 𝑞2 ∨ ⋯ ∨ 𝑞𝑚) = min(𝑑𝑏𝑜𝑥 (𝑣, 𝑞1), 𝑑𝑏𝑜𝑥 (𝑣, 𝑞2), …, 𝑑𝑏𝑜𝑥 (𝑣, 𝑞𝑚))
直觉:
        只要𝑣是合取查询𝑞𝑖的答案,那么𝑣应该是𝑞的答案。
        只要𝐯接近一个合取查询𝐪𝑖,那么𝐯应该在嵌入空间中接近𝐪。
嵌入任何 AND-OR 查询 𝒒 的过程如下:
        1. 将 𝑞 转换为等价的 DNF 𝑞1 ∨ ⋯ ∨ 𝑞𝑚
        2. 将 𝑞1 到 𝑞𝑚 嵌入
        3. 计算 (box) 距离 𝑑𝑏𝑜𝑥(𝐪𝑖, 𝐯)
        4. 取所有距离的最小值
        5. 最终得分 𝑓𝑞 𝑣 = −𝑑𝑏𝑜𝑥 (𝐪, 𝐯)

3.如何去训练Query2box(How to Train Query2box)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值