TransE算法解析

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

概念

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

TransE算法解析_第1张图片

原理

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️⃣ 然后以恒定的学习速率梯度更新参数。

下图是论文里的算法描述:
TransE算法解析_第2张图片

代码从网上下载即可。
运行的部分结果:
TransE算法解析_第3张图片

论文:Translating Embeddings for Modeling Multi-relational Data

你可能感兴趣的:(Deep,Learning)