知识图普嵌入技术的极简教程:KGE以及如何计算它们

图是我最喜欢使用的数据结构之一,它们可以使我们能够表示复杂的现实世界网络,如快速交通系统(例如,公交道路、地铁等)、区域或全球空中交通,或者人们的社交网络之类的相关事物。并且他们非常灵活,很容易被人类理解,但是为了让计算机“理解”和“学习”它们,我们需要额外的一步(称为矢量化)。 这种解释可能过于简单,我们将在本人的后续部分详细解释。

知识图谱有何特别之处?

为了轻松理解知识图与其他图的不同之处,我们想象一个具有不同级别的游戏,随着游戏的深入,每个级别都会变得困难。

Level 1:可以是一个简单的无向图,比如大学里的朋友群,朋友是节点,朋友之间的关系是边。这里我们只有节点和边,没有什么太花哨的。

Level 2:在上一层的基础上增加一层信息,比如方向,这样我们就得到有向图。一个简单的例子是城市范围的公交网络。将公共汽车站视为节点,将公共汽车的路线视为边,每辆公共汽车都以特定的方向从一个站点移动到另一个站点,这就是增加了方向信息。

Level 3:我们采用有向图并向节点和边添加多种属性。想象一下互联网上的社交网络,节点上的属性是用户所基于的社交网络类型。例如,它可以是 Twitter、Facebook 或 YouTube。边的属性可以是不同用户之间的交互类型,即关注(在 Twitter 的情况下)、朋友或关注(在 Facebook 的情况下)和订阅(在 YouTube 的情况下)。图的有向性在这里开始发挥作用,因为上面这些属性只能是单向的(相互关注就是有两条边)。例如,你可以关注 Elon Musk,但他可能不会在 Twitter 上关注你,这就是有一条向的边。

Level 4:上一级中的图中,不使用节点和边,而是使用三元组进行表示:三元组是知识图谱的构建块,它是由 3 个元素组成的元组,即:源节点(头)、关系和目标节点(尾)。

这就是我们所说的知识图谱了,源节点和目标节点有时也被称为实体。

“知识图谱”一词的使用有点含糊,因为知识图谱没有固定的定义,从广义上讲可以将任何包含一些知识/重要信息的相当大的图称为知识图谱。这里的关键点是我们将三元组作为知识图谱的基本组成部分。

知识图谱嵌入方法

因为向量化或嵌入(实体的数字表示和图之间的关系表示)对于使用图作为机器学习算法的输入是必要的。我们对知识图谱的处理方式与其他机器学习模型不同,所以我们需要不同的技术来学习它们的数值表示(或嵌入)。生成知识图嵌入 (KGE) 的方法有多种,我们可以大致分为 3 个部分:

1、基于翻译的方法:

使用基于距离的函数(在欧几里得空间中)用于生成嵌入。我们可以建立一个简单的算法使头向量和关系向量的组合等于尾向量。它可以表示为 h + r ≈ t。这种算法称为 TransE。相同算法还有其他版本,但对它的修改很少。一些示例包括 TransH、TransR、TransD、TransSparse 和 TransM。

2、基于分解的方法:

这是基于张量分解的想法,使用这种技术提出的初始算法是 RESCAL。三向张量以 n x n x m 的形式定义,其中 n 是实体的数量,m 是关系的数量。张量保持值 1 表示实体之间存在关系, 0表示不存在则。

通过分解这个张量来计算嵌入。但是对于大型图这通常在计算上非常的费时所以出现了很多基于 RESCAL 理念的 DistMult、HolE、ComplEx 和 QuatE 等算法优化解决计算量问题。

3、基于神经网络的方法:

神经网络现在在许多领域都很流行,它们被用于查找KGE也就是很正常的事情了。Semantic Matching Energy它定义了一个能量(energy )函数,用于通过使用神经网络为三元组分配一个值。神经张量网络(Neural Tensor Network)使用能量函数,但它用双线性张量层代替了神经网络的标准线性层。

像 ConvE 这样的卷积神经网络以“图像”的形式重塑实体和关系的数值表示,然后应用卷积滤波器提取特征,从而学习最终的嵌入。我们还可以找到受 GAN 启发的模型(例如 KBGAN)和基于 Transformer 的模型(例如 HittER)来计算KGE。

为了实现这些算法,我们有多个 python 库,例如:

  • LibKGE
  • PyKEEN
  • GraphVite
  • AmpliGraph

KGE 算法的结构

有一些共同的基本思想来构建一个算法来计算KGE。下面列出了其中一些想法:

Negative Generation:

这是在知识图中生成否定或损坏的三元组的概念。负三元组是不属于原始图的三元组。这些可以随机生成,也可以使用伯努利负采样等策略生成。

Scoring Function:

它是一个包装三元组的函数,它输出一个值或一个分数。如果分数高,那么三元组是有效的,如果分数低,那么它是一个负三元组。评分函数是构建 KGE 算法的重要部分之一。

Loss Function:

由于算法是根据优化问题建模的,因此我们在训练过程中使用了损失函数。这个损失函数使用正负三元组的分数来计算损失。我们的目标是尽量减少损失,减少损失的过程肯定也少不了优化器。

一般情况下损失函数包括——Cross entropy loss, Pairwise margin-based hinge loss等。

生成嵌入后的下一步是什么?

学习 KGE 算法并应用它们来查找嵌入是很有趣的。现在,下一步是什么?嵌入的用途是什么?

有一些图下游任务可以应用于知识图谱,例如:

知识图谱补全:

这也称为链接预测,我们的目标是预测知识图中缺失的关系或潜在的可能关系。它也可以称为知识图谱增强。
这项任务归结为找到一个可以最好地表示为具有给定的关系和一个实体的事实。简单地说,任务是猜测 (?, r, t) 或 (h, r, ?) 中的缺失部分,也可以分别称为头部预测或尾部预测。我们使用基于等级的评估技术来查找我们的知识图嵌入的性能。

三元组分类:

这是一个识别给定三元组是否有效的问题,即它是正三元组还是负三元组。此任务的输出只有是或否。使用评分函数并设置阈值以将正三元组与负三元组分开。通俗的讲就是一个二元分类的问题。

推荐系统是KEG应用的一个重要领域。嵌入的质量对于上述任务的性能和准确性很重要。这些任务的结果告诉我们是否能够生成高质量的嵌入。

作者:Rohith Teja

你可能感兴趣的