双线性模型(六)(CrossE、RotatE、TuckER)

这是最后一篇记录双线性模型的博文,记录放假前草草看了的、做了屎一样笔记的、而今全部忘了paper在讲啥的 CrossE、RotatE、TuckER。

CrossE

【paper】 Interaction Embeddings for Prediction and Explanation in Knowledge Graphs
【简介】 本文是浙大和苏黎世大学的学者联合发表于 WSDM 2019 上的工作,文章提出了 CrossE,模型的思想也没有很高端,就是引入了一个矩阵C,用于计算实体和关系 crossover interaction,然后挖掘出可靠路径用于为链接预测提供解释。本文的重点有两个,一个是建模了 crossover interaction,另一个是对链接预测进行了 explanation。

问题定义

crossover interaction

crossover interaction 指的是实体和关系的双向(bi-directional)影响,包括从关系到实体的交互和从实体到关系的交互。

文章举了个栗子,为了说明关系(isFatherOf)影响了 information of entities to be chosen for inference,这是从关系到实体的交互;同样,实体信息也影响关系推断路径。

给定三元组(h,r,t),crossE分四步:
1.对头实体 h 生成 interaction embedding \(h_I\)
2.对关系 r 生成 interaction embedding \(r_I\)
3.组合上面二者的 interaction embedding \(h_I\)\(r_I\)
4.比较组合 embedding 和尾实体 t 的相似性。

给出链接预测的解释,就是找出从头实体到尾实体的合理路径和相似结构以支持路径解释。

评价指标有:1.Recall;2.Average Support。

CrossE 模型

首先通过 one-hot 向量查表找到头尾实体和关系的 general embedding:

(1)头实体的 interaction embedding

\(c_r\) depends on 关系 r。

(2)关系的 interaction embedding

头实体的interaction embedding 与 r 做 Hadamard 积得到 r 的 interaction embedding。

(3)头实体与关系组合


(4)相似性度量

上一步得到的头实体与关系的组合表示与尾实体进行相似性度量:

整体的三元组打分函数为:

同时,为了对比 crossover interaction 的作用,文章还给出了没有 interaction 的简化版本:

Loss Function 采用 log-likelihood 的损失函数:

预测结果的解释

链接预测的解释,其实就是类比推理。对于预测出的三元组(X, isFatherOf, M),做出预测的原因有二:一是已有 premise (X, hasWife, Z) 和 (Z, hasChild, M);二是左侧的 similar structure,存在这两个 premise 的 S 和 X 之间存在 hasChild 的关系。和昨天看的四边形的 ANALOGY 类比推理是一回事。

进行 explanation search 有两步:

1.寻找从 h 到 t 的闭合路径;
2.寻找 similar structure 作为 support。

实验

链接预测正确率

实验的效果根本就不是最优,不知道 introduction 里的 state-of-the-art 是怎么写出来的=.=|


explanation

举例展示了挖掘出的六种类比推理结构类型:

该模型没有给出代码。

【总结】 在这篇文章中学到/想到的一点是,如果方法/idea不是那么高端的话,可以通过多做实验另辟蹊径来弥补,如本文如果只做了 crossover interaction 的工作的话,就会显得单薄和鸡肋,但是因为加上了 explanation 这样一个工作重点,就会显得比较详实。

RotatE

【paper】 RotatE: Knowledge Graph Embedding by Relational Rotation in Complex Space
【简介】 本文是北大和加拿大的研究团队发表在 ICLR 2019 上的文章,提出了 RotatE(Rotation Embedding),主要思想是将实体表示为复向量,关系视为从头实体指向尾实体的旋转(Rotation)。这个模型大概是看明白了的,感觉还是比较巧妙的。

问题定义

RotatE 的提出主要是为了建模三种关系:对称/非对称、反向关系、关系组合

这里的对称关系指的就是自反关系,inverse 是对两个关系来说的。TransE 可以建模 inverse 和 composition,无法表示 symmetry。

模型

RotatE 是复空间中的双线性模型,希望 truth triplet 满足:


RotatE 巧妙地利用了欧拉公式,将关系视为从头实体向尾实体的旋转。


RotatE 的距离函数为:

附录中还给出了为什么 RotatE 可以建模这三种关系的证明:

文章还提出了一种 self-adversarial 的负采样方法,为负样本赋权重。

最终 loss 为:

实验

pRotatE 是 RotatE 没有模长(modulus)信息,只有相位(phase)信息的版本。

【code】 https://github.com/DeepGraphLearning/KnowledgeGraphEmbedding

TuckER

【paper】 TuckER: Tensor Factorization for Knowledge Graph Completion
【简介】 这篇文章是英国爱丁堡大学的研究者发表于 ICML 2019 上的文章,提出了 TuckER,是一个线性的张量分解模型,对表示三元组事实的二值张量做 Tucker 分解。

背景知识

本模型基于 1966 年 Tucker 提出的 Tucker decomposition,它将一个张量分解为一个 core tensor 和一组矩阵相乘的形式,可以被视为一种高阶 SVD 的形式,在矩阵是正交的和 core tensor 是“all-orthogonal(全正交)”的 special case 下。

文章声称 TuckER 是 fully expressive 的,这个词也在很多文章中见过,这里解释了它的含义:

对于给定的 golden triplet,一定有 embedding 各维度值的分配方法,使其与负样本分开。

TuckER 可以视为各种 bilinear model (RESCAL、DistMult、ComplEx、SimplE)的通用情况。

Related Work 中介绍了几大 bilinear 模型的方法和打分函数。

Tucker 分解:

一篇博客里介绍得很清楚,贴在这里好了:https://blog.csdn.net/qq_42397330/article/details/116290128

模型

TuckER 对三元组的打分函数:

文章说,TuckER 的优势在于没有将所有的知识编码到 embedding 中,一些被储存在 core tensor 中,通过 multi-task learning 在实体和关系中共享。(不太理解。。。)

将上式计算出的三元组得分输入到 sigmoid 函数中,得到一个概率值,然后计算 loss(伯努利负 log-likelihood loss):

上面博客中的博主研读了代码:

在看代码之前,我认为这个评分函数是对整个三元组的评分,实际上代码中并不是这个意思。前向传播计算输出的是,一个矩阵,大小为(batch,len(entity)),输入的是一个batch的头实体和关系,相当于是在预测尾实体出现在每个位置的概率值。然后将这个概率值同目标位置组成的矩阵(正确位置为1)计算loss(可以理解为二分类问题)

理论分析

和 Rescal 的关系

Rescal 的打分函数是这样的:

少了一个矩阵 B,关系矩阵就是 core tensor \(\mathcal{Z}\) 的 slice。

表示非对称关系

对称关系训练出的矩阵是对称的,非对称关系的矩阵是非对称的。

实验

在四个数据集(FB15k、FB15k-237、WN18、WN18RR)上进行了实验。

【code】 https://github.com/ibalazevic/TuckER

这个代码是用 PyTorch 实现的,看起来很简洁的样子,有时间的话真想好好学习一下,试着跑一下,but我没有。。。


【总结】 双线性模型终于tmd看完了!

posted @ 2021-08-20 11:00  胡萝不青菜  阅读(2893)  评论(2编辑  收藏  举报