知识图谱嵌入的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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee