论文
Translating Embeddings for Modeling Multi-relational Data
TransE
算法概览
核心思想
实体向量 + 关系向量 = 实体向量 (h+l = t)
Tips
- 关系向量 (l)需要归一化,避免训练时带来实体向量的尺度变化
- 正样本 - 即原有样本,公式中的d(h+l, t)
- 负样本 - 随机替换h或者l, 不同时替换,即为负样本, 公式中的d(h’+l, t’)
- 距离采用l1 norm 或者l2 norm
- 训练方式采用SGD训练法
参考代码
https://github.com/wuxiyu/transE/blob/master/tranE.py
关键代码片段
def update(self, Tbatch):
copyEntityList = deepcopy(self.entityList)
copyRelationList = deepcopy(self.relationList)
for tripletWithCorruptedTriplet in Tbatch:
headEntityVector = copyEntityList[tripletWithCorruptedTriplet[0][0]]#tripletWithCorruptedTriplet是原三元组和打碎的三元组的元组tuple
tailEntityVector = copyEntityList[tripletWithCorruptedTriplet[0][1]]
relationVector = copyRelationList[tripletWithCorruptedTriplet[0][2]]
headEntityVectorWithCorruptedTriplet = copyEntityList[tripletWithCorruptedTriplet[1][0]]
tailEntityVectorWithCorruptedTriplet = copyEntityList[tripletWithCorruptedTriplet