知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD

本文主要是介绍知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一文打尽图嵌入Translate模型,各种模型的动机,优缺点分析。

本文对知识图谱嵌入/知识表示的转换模型进行了简要的总结。你可以从TensorFlow-TransX中找到开源的TensorFlow代码。

知识表示的一些背景知识

通常,我们使用三元组(head, relation, tail)来表示知识。在这里,头和尾是实体。例如,(sky tree, location, Tokyo)。我们可以用独热向量来表示这个知识。但实体和关系太多,维度太大。当两个实体或关系很近时,独热向量无法捕捉相似度。受Wrod2Vec模型的启发,我们想用分布表示来表示实体和关系。

下游任务的应用

以防万一,如果你不熟悉知识图谱,我将介绍一些知识图谱可以使用的应用。

连接预测

连接预测通常被称为预测某个实体与另一个给定实体是否具有特定关系的任务。比如,给定h预测 (r,t)或者给定t预测(h, r),前者表示为(?,r,t),后者表示为(h,r,?)。例如,(?, 导演,惊魂),是预测电影的导演,(毒液,导演,?),就是预测某个电影被某个人导演。这本质上是一个知识图谱的完善的任务。

推荐系统

推荐系统为用户提供他们可能想要购买或查看的物品的一些建议。在不同的推荐策略中,协同过滤技术取得了显著的成功。但是,并不总是有效,因为用户-物品的交互可能非常稀少。在这种情况下,混合推荐系统通常可以取得更好的性能,混合推荐系统将用户-物品的交互作用与用户或物品的辅助信息相结合。

利用知识图提高协同过滤的质量。具体来说,他们使用存储在KG中的三种类型的信息,包括结构化知识(三元组)、文本知识(例如,一本书或一部电影的文本摘要)和视觉知识(例如,一本书的封面或电影的海报图像),来推导物品的语义表征。为了对结构化知识进行建模,提出了一种典型的知识图谱的嵌入技术。TransR为每个物品学习了一个结构化的表示。对于另外两种类型的信息,可以使用堆叠去噪自动编码器和堆叠的卷积自动编码器分别提取物品的文本表示和视觉表示。

也有一些应用利用到了知识图谱的嵌入,如实体解析,关系提取,问题回答等。你可以从这篇文章中找到更多的信息:Knowledge Graph Embedding: A Survey of methods and Applications(2017)。

TransE

标题:Translating Embeddings for Modeling Multi-relational Data(2013)

这是转换模型系列的第一部作品。该模型的基本思想是使head向量和relation向量的和尽可能靠近tail向量。这里我们用L1或L2范数来衡量它们的靠近程度。

损失函数是使用了负抽样的max-margin函数。

L(y, y’) = max(0, margin - y + y’)

y是正样本的得分,y'是负样本的得分。然后使损失函数值最小化,当这两个分数之间的差距大于margin的时候就可以了(我们会设置这个值,通常是1)。

由于我们使用距离来表示得分,所以我们在公式中加上一个减号,知识表示的损失函数为:

其中,d是:

这是L1或L2范数。至于如何得到负样本,则是将head实体或tail实体替换为三元组中的随机实体。

看代码:

使用embedding_lookup获得head、relation、tail的向量,并计算(head、relation)和tail之间的距离。

但是这个模型只能处理一对一的关系,不适合一对多/多对一关系,例如,有两个知识,(skytree, location, tokyo)(gundam, location, tokyo)。经过训练,“sky tree”实体向量将非常接近“gundam”实体向量。但实际上它们没有这样的相似性。

TransH

标题: Knowledge Graph Embedding by Translating on Hyperplanes(2014)

TransH的目标是处理一对多/多对一/多对多关系,并且不增加模式的复杂性和训练难度。

其基本思想是将关系解释为超平面上的转换操作。每个关系都有两个向量,超平面的范数向量Wr和超平面上的平移向量(dr)。

我们把每个head向量(h)和tail向量(t)投影到超平面上,得到新的向量(h⊥和t⊥)。在这个超平面中存在一个关系(d_r),我们可以像TransE模型一样训练它。

得分函数:

如何在超平面上计算这个投影:

其中w_r的范数约束为1。

h⊥ 是h在超平面上的投影,wrT是h在wr上的投影。这意味着我们将head/tail向量分解为两部分。

损失函数和训练方法与TransE相同。

我们把head/tail向量分解两部分,只使用一个部分(h⊥或t⊥)来训练模型。这可以避免在模型训练时两个实体(head或tail)接近,并处理一对多/多对一/多对多关系。

和TransE模型的代码几乎相同。唯一的区别是计算投影向量的步骤。在这一步之前,我们应该将w_r标准化为长度1。

TransR

标题: Learning Entity and Relation Embeddings for Knowledge Graph Completion(2015)

TransE和TransH模型都假设实体和关系是语义空间中的向量,因此相似的实体在同一实体空间中会非常接近。

然而,每个实体可以有许多方面,不同的关系关注实体的不同方面。例如,(location, contains, location)的关系是'contains',(person, born, date)的关系是'born'。这两种关系非常不同。

为了解决这个问题,我们让TransR在两个不同的空间,即实体空间多个关系空间(关系特定的实体空间)中建模实体和关系,并在对应的关系空间中进行转换,因此命名为TrandR。

TransR的基本思想如图1所示。对于每个三元组(h, r, t),将实体空间中的实体通过矩阵Mr投影到r关系空间中,分别为hr和tr,然后有hr + r ≈ tr,损失函数和训练方法与TransE相同。ht为实体嵌入,r为关系嵌入。

特定于关系的投影可以使实际持有这种关系的head/tail实体(表示为彩色圆圈)彼此靠近,同时那些不持有这个关系的实体相互远离(表示为彩色三角形)。

得分函数和目标函数与TransE相同。

TransR有一个变体模型,称为CTransR, C表示聚类。head和tail实体通常呈现不同的模式。仅仅构建一个关系向量来执行从head到tail实体的所有转换是不够的。例如,三元组(location, contains, location)具有许多模式,如country-city、country-university、contin- country等等。为了解决这个问题,CTransR将不同的head和tail实体对进行聚类,并对每一组学习不同的关系向量。

构造CtransR的过程是,对于一个特定的关系r,将训练数据中所有的实体对*(h, t)聚类到多个组中,期望每组中的实体对呈现相似的r关系。我们使用向量偏移量(h-t)表示实体对(h, t)*。我们从TransE得到ht。然后,我们分别学习了每个聚类对应的关系向量r_c,每个关系对应的矩阵Mr。

当我们创建负样本时,我们只替换了head或tail,而不是relation。我们得到两个变换矩阵分别用于正样本和负样本。除了先用矩阵变换对实体向量进行转换然后计算L2范数外,其余代码基本上与TransE相同。

TransD

标题: Knowledge Graph Embedding via Dynamic Mapping Matrix(2015)

TransR也有其不足之处。

  • 首先,head和tail使用相同的转换矩阵将自己投射到超平面上,但是head和tail通常是一个不同的实体,例如,(Bill Gates, founder, Microsoft)。'Bill Gate'是一个人,'Microsoft'是一个公司,这是两个不同的类别。所以他们应该以不同的方式进行转换。
  • 第二,这个投影与实体和关系有关,但投影矩阵仅由关系决定。
  • 最后,TransR的参数数大于TransE和TransH。由于其复杂性,TransR/CTransR难以应用于大规模知识图谱。

TransD使用两个向量来表示每个实体和关系。第一个向量表示实体或关系的意义,另一个向量(称为投影向量)将用于构造映射矩阵。

两个映射矩阵定义如下:

其中映射矩阵由实体和关系定义,I为单位矩阵。这个等式意味着我们使用生成的矩阵(由r和h向量)来修改单位矩阵。投射和训练与TransR相同。

TransE是向量维数满足m=n且所有投影向量都设为零时变换的一种特殊情况。

这个代码结构可能适用于其他模型。我们可以看到,每个实体和关系都由两个向量表示。但该代码没有实现实体空间维数与关系空间维数不同的情况。

模型总结

margin loss适用于所有模型。这些模型都是基于分段的,利用head向量和relation向量的和来预测tail向量。这些模型的不同之处在于它们使用不同的方法来表示实体/关系向量。

评估结果

这是数据集FB15k和WN18中各种方法的结果。

你可以找到更多关于数据集和代码的细节,使用C++实现的thunlp/KB2E,TensorFlow的版本,TensorFlow-TransX。

最后

每个模型都有自己的trick,我们不在这里讨论。

正如我在模型总结部分所说的那样。这些模型的基本思想是相同的,即利用head向量和relation向量的和来预测tail向量。向量的和就是信息的积累。但实体和关系可能比这更复杂。寻找一种更有效的方法来表达知识可能是一个具有挑战性的研究课题。

英文原文:https://towardsdatascience.com/

这篇关于知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080556

相关文章

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl