TransE算法(Translating Embedding)

一、引言

网络上已经存在了大量知识库(KBs),比如OpenCyc,WordNet,Freebase,Dbpedia等等。这些知识库是为了各种各样的目的建立的,因此很难用到其他系统上面。为了发挥知识库的图(graph)性,也为了得到统计学习(包括机器学习和深度学习)的优势,我们需要将知识库嵌入(embedding)到一个低维空间里(比如10、20、50维)。我们都知道,获得了向量后,就可以运用各种数学工具进行分析。深度学习的输入也是向量。(考虑一下,word2vec,我们训练出一个向量后,可以做好多事情,深度学习的输入也往往是一个矩阵。另可见:词嵌入的类比特性有实用意义吗?)。

二、基础背景

一条知识图谱可以表示为一个三元组(sub,rel,obj)。举个例子:小明的爸爸是大明,表示成三元组是(小明,爸爸,大明)。前者是主体,中间是关系,后者是客体。主体和客体统称为实体(entity)。关系有一个属性,不可逆,也就是说主体和客体不能颠倒过来。

知识图谱的集合,链接起来成为一个图(graph),每个节点是一个一个实体,每条边是一个关系,或者说是一个事实(fact)。也就是有向图,主体指向客体。

具体的用处和知识图谱提取方式可见刘知远大神的文章http://www.36dsj.com/archives/31317(ps,最好是买本他的书)

Freebase的例子:

(Barack Obama, place of birth, Hawai)
(Albert Einstein, follows diet, Veganism)
(San Francisco, contains, Telegraph Hill)

上面三条都是知识图谱的例子。

三、TransE的提出

TranE是一篇Bordes等人2013年发表在NIPS上的文章提出的算法。它的提出,是为了解决多关系数据(multi-relational data)的处理问题。我们现在有很多很多的知识库数据knowledge bases (KBs),比如Freebase、 Google Knowledge Graph 、 GeneOntology等等。

TransE的直观含义,就是TransE基于实体和关系的分布式向量表示,将每个三元组实例(head,relation,tail)中的关系relation看做从实体head到实体tail的翻译(其实我一直很纳闷为什么叫做translating,其实就是向量相加),通过不断调整h、r和t(head、relation和tail的向量),使(h + r) 尽可能与 t 相等,即 h + r = t。

以前有很多种训练三元组的方法,但是参数过多,以至于模型过于复杂难以理解(作者表达的意思就是,我们的工作效果和你们一样,但我们的简单易扩展)。(ps:作者以前也做过类似的工作,叫做Structured Embeddings,简称SE,只是将实体转为向量,关系是一个矩阵,利用矩阵的不可逆性反映关系的不可逆性。距离表达公式是1-norm)。

如下图,作者的目的是将向量转为这种形式(此图是2维)

为此,作者定义了距离公式为

四、TransE的训练

注释:

1、

直观上,我们要前面的项(原三元组)变小(positive),后面的项(打碎的三元组)变大(negative)。就跟喂小狗一样,它做对了,就给骨头吃;做错了,就打两下。前面的项是对的(来自于训练集),后面的项是错的(我们随机生成的)。不同时打碎主体和客体,随机挑选一个打碎,另一个保持不变,这样才能够有对照性。

2、图上的加号是大于0取原值,小于0则为0。我们叫做合页损失函数(hinge loss function),这种训练方法叫做margin-based ranking criterion。是不是听起来很熟悉?对的,就是来自SVM。支持向量机也是如此,要将正和负尽可能分开,找出最大距离的支持向量。同理,TransE也是如此,我们尽可能将对的和错的分开。margin值一般设为1了。

3、关于模型的参数:参数θ是所有实体的向量。设一共有 |E| 个实体和 |R| 个关系,每个实体/关系的向量长度为d维,因此,一共有( |E| + |R| ) *  d 个参数。

4、关于参数的更新:我们使用的是随机梯度下降(Stochastic Gradient Descent,SGD)训练方法。SGD不用对所有的和求梯度,而是对一个batch求梯度之后就立即更新theta值。

对于数据集大的情况下,有速度。但是每一次更新都是针对这一个batch里的三元组的向量更新的,也就是意味着,一次更新最多更新(3+2)*batch_size*d 个参数(设一个batch的长度为batch_size)。并不是把所有的theta值都更新了,或者说不用更新整个( |E| + |R| ) *  d 矩阵,只需要更新sample里抽出来的batch里的向量即可。为什么可以这样呢(也就是为什么可以不用把参数全更新了,而是只更新一部分)?因为参数之间并没有依赖(或者说冲突conflict),对于此,可以参考论文 Hogwild!: A Lock-Free Approach to Parallelizing Stochastic。

5、对SGD多说两句:SGD的收敛没有GD好,但是,这反而是优点,因为在机器学习领域,过于best的结果反而是害处,因为用于过拟合(overfitting)。也就是,尽管叫做D(下降),但整个过程我们难保一直D下去。只能保证在forever可以做到D。

6、归一化公式的分母是向量的平方和再开方;而对于距离公式,是向量的平方和(没有开方)。公式的错误书写,会引起收敛的失败。

7、对于每一次迭代,每一次的归一化约束(constraint)实体长度为1(减少任意度量(scaling  freedoms(SE)),使得收敛有效(避免 trivially minimize(transE)),但对关系不做此要求。(然而我自己试验的结果是,归一化关系,会使精度加大和收敛加强)

tranE的python代码(github)

[Trans 系列之一]TransE算法(Translating Embedding)相关推荐

  1. TransE:Translating Embedding多元关系数据嵌入(知识图谱嵌入)2013 NIPS

    论文链接:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.447.6132&rep=rep1&type=pdf 代码链 ...

  2. Translating Embedding for Modeling Multi-relational Data

    研究意义: 1.学到了实体(entity)和关系(relation)的embedding表示 2.模型简单而有效,容易训练 3.启发了整个Trans系列知识表示学习,代表性工作有transH,tran ...

  3. 学习笔记(2)——TransE算法(Translating Embedding)

    前言 原理 详细算法流程 前言 TransE算法是知识图谱补全的经典方法. 目前网络上存在大量知识库(KBs):如OpenCyc.WordNet.Freebase.Dbpedia等等,它们因不同目的建 ...

  4. 基于知识图谱的表示学习——Trans系列算法介绍(一)

    鉴于知识图谱的研究越来越多,所以在组会主讲上介绍了知识图谱表示学习的Trans系列方法,以下仅是本人对于此类方法的理解,请批评指正.Trans系列方法的源码均为公开代码,可以自行搜索. 背景介绍 知识 ...

  5. Trans系列文章解读

    本系列,笔者转载搜狐(机器之心博主)的文章,如有侵权,联系笔者立即删除 -----------------------------分割线-------------------------------- ...

  6. 基于翻译模型(Trans系列)的知识表示学习

    翻译模型(Trans) 解决问题:知识表示与推理 将实体向量表示(Embedding)在低维稠密向量空间中,然后进行计算和推理. 主要应用:triplet classification, link p ...

  7. TransE算法解析

    transE(Translating Embedding)详解+简单python实现 概念 transE算法是一个非常经典的知识表示学习,用分布式表示(distributed representati ...

  8. OpenKE实现转移距离模型trans系列代码

    OpenKE实现转移距离模型trans系列代码 前言 前段时间学习了知识图谱表示的转移距离模型trans系列大礼包,编辑这篇博客的起因是一个学妹找我要trans系列的代码,所以就在周日的下午来回忆一下 ...

  9. Spark推荐系列之Word2vec算法介绍、实现和应用说明

    Spark推荐实战系列目前已经更新: Spark推荐实战系列之Swing算法介绍.实现与在阿里飞猪的实战应用 Spark推荐实战系列之ALS算法实现分析 Spark中如何使用矩阵运算间接实现i2i F ...

最新文章

  1. 不同屏幕分辨率 坐标_干货 | 小议光固化3D打印XY轴分辨率精度
  2. C++中的const数据成员
  3. php-redis 下载地址
  4. 小程序分享到朋友圈功能_小程序开发日记 分享到朋友圈
  5. awk命令输出单引号
  6. c++ windows 光标操作_电脑操作常用快捷键
  7. python predict_对Keras中predict()方法和predict_classes()方法的区别说明
  8. matlab复变函数应用,matlab在复变函数中的一些应用修改后的.doc
  9. 网络收藏夹--用来收藏我经常访问的网站
  10. 基于TP-LINK(AC1200)主路由器+FAST(FWR303)副路由器的桥接(中继)信号放大
  11. 程序员薪酬大调查:学哪种语言最赚钱?
  12. flash传值php乱码,Flash中出现中文乱码的解决办法,网页模板帮助中心
  13. OSPF特殊区域(stub、stub no-summary、nssa)
  14. 海康摄像机如何用第三方域名/外网固定IP方式远程观看?--官方文档记录
  15. windows 子系统 linux (WLS):启用Win10的Linux子系统
  16. 无障碍服务(AccessibilityService)
  17. 聚合搜索V2.0泛解析泛目录站群二开源码 可做指定关键词SEO源码
  18. 2022擎创夏洛克AIOps智慧运营平台白皮书正式发布!
  19. 20220715_JaveWeb_MVC模式_三层架构案例
  20. 《《世界因你而不同》》——读后感

热门文章

  1. web项目图片/文件保存方式
  2. C++语言递归实现求从n个数中选k个进行组合的组合数
  3. VSCode实现Cesium的自动提示功能
  4. Win 32API速查
  5. 学习日志-《掘金/知乎-低代码》笔记
  6. Spotify网络钓鱼活动目标锁定音乐爱好者
  7. uniapp进行交互反馈
  8. Python自学难吗?Python课程主要学些什么内容?
  9. 量化投资入门指南:风险模型和交易成本模型
  10. WordPress底部添加备案信息小技巧