TransE [ Bordes et al., 2013] 是最具代表性的位移距离模型, 其核心思想是实体和关系间的位移假设: 三元组中头实体向量表示h与关系的向量表示r之和与尾实体向量表示 t越接近越好, 即 h + r ≈ t
TransE基于实体和关系的分布式向量表示,将每个三元组实例(head,relation,tail)中的关系relation看做从实体head到实体tail的翻译,通过不断调整h、r和t(head、relation和tail的向量),使(h + r) 尽可能与 t 相等,即 h + r = t。 代码的实现:
项目数据采用FB15数据集实现TransE模型,代码来源:https://github.com/Anery/transE
实体数据:entity2id,第一列为实体名字,第二列为实体ID
关系数据:relation2id,第一列为关联名字,第二列为关系ID
(h,t,r)数据,包括三列,第一列H实体名字,第二列T实体名字,第三列R关系名字。分为训练集,验证集和测试集
- 首先,TransE模型采用k维随机均匀分布对每个实体和每个关系进行向量初始化
- 然后,批训练数据集构建,从训练集中随机选出正面样本(h,r,t),然后基于正面样本,保持正面样本中h,r或r,t不变,改变t或h,获得负面样本,合并一起构成批训练数据集。
- 表示向量更新,采用随机梯度下降法,对批训练数据集中正面样本(h,r,t)和负样本的向量表示进行更新。update_embeddings函数中,要对correct triplet和corrupted triplet都进行更新(因为不同时替换头尾实体,所以在每步更新时重叠的实体要更新两次)
- TranE直接对向量表示进行训练,每个实体(head或tail)对应一个k维向量,每个关系对应一个k维向量,所有的k维向量即为TransE模型的参数,需要训练的参数。
TransE模型训练 :
TransE模型的目标函数:
L1范数,也称为曼哈顿距离,使用L1范数可以衡量两个向量之间的差异性,也就是两个向量的距离
L2范数,也称为欧式距离,L2范数也可以用来衡量两个向量之间的差距
其中距离度量方式有L1范数和L2范数两种。在测试时,以⼀个三元组为例,用语料中所有实体替换当前三元组的头实体计算距离,将结果按升序排序,用正确三元组的排名情况来评估学习效果,同理,对尾实体也这样做。
度量标准选择hits@10和mean rank,前者代表命中前10的次数/总查询次数,后者代表正确结果排名之和/总查询次数。
测试结果:
超参选择:对FB15k数据集,epoch选了20,可以增加epoch来提高模型,nbatches选了400(训练最快),embedding_dim=50, learning_rate=0.01,margin=1。
参考文章:
https://blog.csdn.net/shunaoxi2313/article/details/89766467
https://blog.csdn.net/weixin_44023339/article/details/100080669