解耦知识图谱嵌入
创新点:本文利用注意力机制将实体的表示分解为了多个部分
1 动机
- 以往对知识图谱嵌入的研究,通常是基于黑盒模型的,这导致很难对学习到的表示进行解释
- 于是本文引入注意力机制,根据实体之间的关系,使模型显式集中在实体嵌入的几个component(我将其称为组成部分),简单来说,学习的实体表示可以解耦为多个向量
2 举例
- 实体 “David Beckham” 可能包括几个组成部分,例如,“Characteristic”、“Work”、“Family”、"Places"等
- 对于关系 “country”、“live_city”,实体 “David Beckham” 应该集中在"Places";对于关系"team_of",实体 “David Beckham” 应该集中在"Work"。
注意:从这个例子,我们就可以看出一个实体可能包含多个组成部分,也就是可以将实体嵌入分为多个独立的部分
3 模型架构
该示意图给出的 l=4 K=3 l表示关系嵌入维度,K表示组成的个数
简单理解:首先根据关系,计算出每一部分(component)的注意力系数,然后和对应部分的表示相乘后相加,就得到了最终的分数
3.1 part one
符号介绍:l表示关系嵌入的维度,d表示实体嵌入的维度,K表示component的个数,l=d/K
公式理解:第一个公式就是将头实体的第k个部分、关系和尾实体的第k个部分拼接在一起,然后和W1(训练参数)相乘,最后利用relu函数激活,得到的应该就是一个标量;第二个公式就是softmax
大家肯定存在一个疑问,这样做到底有什么用?
用通俗的话解释一下,一个实体有K个部分,此处的注意力系数算的是什么呢?算的是关系r和K个部分的相关性,如果更相关,我们应该给关系r很高的权重,也就是注意力系数
3.2 part two
第一个是TransE模型学习的公式;第二个是ConvKB模型的公式(如果不懂可以去看一下这篇论文,非常值得一读)
根据part one得到的注意力系数,然后和TransE或者ConvKB计算得到的表示相乘后相加,W2(训练参数),可以得到最终的分数
3.3 train
loss分为以下三部分
其中 β 和 η 表示对应部分的权重
第一个公式 当三元组存在时,y=1,反之,y=-1 ;loss要尽可能的小,所以当y=1时,f要尽可能的小
第二个公式说 一个关系应该关注不同实体的相同component ,N=50时训练效果最好
第三个公式说 一个关系关注的component应该少一点,m=2时训练效果最好