TransE算法解析

transE(Translating Embedding)详解+简单python实现

概念

transE算法是一个非常经典的知识表示学习,用分布式表示(distributed representation)来描述知识库中的三元组。

TransE

原理

transE算法利用了word2vec的平移不变性,TransE的直观含义,就是TransE基于实体和关系的分布式向量表示,将每个三元组实例(head,relation,tail)中的关系relation看做从实体head到实体tail的翻译(其实就是向量相加),通过不断调整h、r和t(head、relation和tail的向量),使(h + r) 尽可能与 t 相等,即,实体向量 + 关系向量 = 实体向量 (h+l = t)

损失函数

img

1️⃣ ( h ′ , l , t ′ )称为corrupted triplet,通过随机替换头或尾实体得到的

2️⃣ 正样本 - 即原有样本,公式中的d(h+l, t)

3️⃣ 负样本 - 随机替换h或者l, 不同时替换,公式中的d(h’+l, t’)

4️⃣ γ>0为 margin(一个边际参数),表示正负样本之间的间距

5️⃣ transE针对给定三元组进行二分类任务

​ 其中的负例是通过替换自行构造的,目标是使得最相近的正负例样本距离最大化。

6️⃣ 距离度量方式

​ L1和L2范数

7️⃣ 关系向量 (l)需要归一化,避免训练时带来实体向量的尺度变化

8️⃣ 让正样本的距离最小,也就是m i n ( d i s t a n c e ( h + r , t ) ),让负样本的相反数最小也就是min(-distance(h’+r’,t’)),对于每一个正样本和负样本求和,再增加一个常数的间距margin,就是整体距离的最小值。也就是我们的目标函数。

9️⃣ 如何产生负样本
通过随机替换头实体的方式来实现一个错误的三元组,或者采用随机替换一个错误的尾实体的方式来形成一个错误的三 元组。

在这里插入图片描述

同时,为了避免出现生成的负例其实存在于知识库中的情况,我们在替换形成的三元组也存在于知识图谱中,我们需要在替换之后进行过滤

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

通常为了方便训练并避免过拟合,会加上约束条件
∣ ∣ h ∣ ∣ ≤ 1 , ∣ ∣ r ∣ ∣ ≤ 1 , ∣ ∣ t ∣ ∣ ≤ 1 ,

具体的优化过程

1️⃣ 所有实体和关系的嵌入首先按照随机过程进行初始化;
2️⃣ 在算法的每次主要迭代中,对实体的嵌入向量进行归一化;
3️⃣ 从训练集中采样一个小的三元组集合,作为小批的训练三元组;
4️⃣ 对于每一个这样的三元组,我们取样一个损坏的三元组;
5️⃣ 然后以恒定的学习速率梯度更新参数。

下图是论文里的算法描述:
在这里插入图片描述

代码从网上下载即可。
运行的部分结果:
在这里插入图片描述

论文:Translating Embeddings for Modeling Multi-relational Data

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

perfect Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值