TransE
最基本的模型。后面很多模型都是基于TransE对图的嵌入,再做后续的处理。
TransE的理论简单,它为实体和关系都设置一个向量,并要求一个三元组(h,r,t)在嵌入空间后的位置关系要保证
∣
∣
h
+
r
−
t
∣
∣
≈
0
||h+r-t||≈0
∣∣h+r−t∣∣≈0。
算法如下
input:S是三元组集合,E是实体集合,L是关系集合,超参数γ是为了让正负例距离至少拉开γ远,k是嵌入的维度
- 初始化关系 l l l
- 正则化,使其长度为1.
- 初始化实体e,这里没正则化,因为它更新的时候希望还保持长度为1,所以放循环里正则化。
注意uniform是均匀分布,分布的区域就是给的两个数。 - loop
- 正则化e
- S b a t c h S_{batch} Sbatch:在S里采样b个用于本次训练
- T b a t c h T_{batch} Tbatch:初始化是空,功能看后面
- for 循环 S b a t c h S_{batch} Sbatch
- 为每个三元组采样一个负例,即错误的三元组。怎么采任你发挥,但只能改实体,不能改关系。
- 打包正负例为一组,存到 T b a t c h T_{batch} Tbatch里
- end for。所以这个for纯粹是训练数据的准备阶段。
- 套公式,并梯度更新各个向量。
- end loop
TransR
它把空间分为实体空间和关系空间。
让我举个例子说明它如何工作:
假设老师A与学生a关系为师生r
Aa在实体空间的嵌入用符号表示为A和a
经r对应的关系矩阵Mr转换A和a,得
A
r
=
M
r
A
A_r=M_rA
Ar=MrA
a
r
=
M
r
a
a_r=M_ra
ar=Mra此时Ar和ar就是关系空间的向量了。
我们会训练Mr,让它能做到使Ar和ar的距离恰好等于r。
||注:r也是需要训练的。
我们回过头看实体空间,它的功能是什么?
它要保证这些实体在实体空间里的嵌入能满足不同关系空间的要求。
TransR可以精准地表示1-to-n关系。还以老师学生举例。
TransR可能把学生们分散在实体空间的任意位置,但经Mr变换后,学生们在r的关系空间里,或许会全部变成同一个点or聚成一堆。这时候不就能很简单地训练老师在r的嵌入和r本身的嵌入了吗?只要1-to-n关系的n能聚在一起,1-to-n就是小问题了。
TransR的评分函数很简单 f r ( h , t ) = ∣ ∣ h r + r − t r ∣ ∣ 2 2 f_r(h,t)=||h_r+r-t_r||^2_2 fr(h,t)=∣∣hr+r−tr∣∣22 h r = M r h , t r = M r t h_r=M_rh, t_r=M_rt hr=Mrh,tr=Mrt
论文要求所有嵌入的长度都要比1小,因为等比例放大的嵌入是无意义的,你不管一下它们可能训着训着就上天了,就不停地变大了。
有了评分函数,你可以使用TransE的负采样和loss函数训练了。
超参数γ在TransR中的效果和在TransE中一样,同样是让不符合关系r的其他实体躲远点,距离至少为γ。论文中的这张图就是γ发挥作用的效果,在关系空间中把无关的三角形实体从hr和tr周围赶走了。