TransH
(这是一篇小白入门笔记,请勿转载)
简介
为了改善 TransE 在建立复杂关系模型上的不足,在 TransE 的基础上提出了 TransH 算法。TransH 引入了超平面,将关系定义在超平面上,将实体投影到了超平面上。这样对于相同实体,在不同关系下,他们在超平面的上的关系可以同时成立,使得同一实体在不同关系或三元组中所代表的意义可以不同,相当于实体拥有了分布式表示。这就帮助模型解决了多对一、一对多、多对多关系建模的问题。
TransH 定义了一个超平面法向量 Wr,Wr 为单位向量。对于一个关系 r,定义向量 dr 为 r 在这个关系超平面上的表示,而不是在实体嵌入的同一空间中。计算 h 和 t 在超平面上的投影,即 h⊥ = h−wrhwr, t⊥ = t−wrtwr。
规定当三元组正确时,h + r 约等于 t,即在超平面上关系成立,定义得分函数为 f(h,r, t) = ||h⊥ + dr − t⊥||22,三元组越接近事实时,得分函数越低,反之如果三元组与事实不符,则距离越远得分越高。TransH 的目标函数为:
TransH 在目标函数中引入了软约束增加模型的灵活度。在构造负例的方法上也做出了改进。在打乱三元组的过程中根据映射关系类型决定头尾实体被替换的概率,以此方法来减少生成错误负例的情况。对于一对多的关系,更多地去替换头实体,反之对于多对一关系,尾实体被替换得更多。这样的方法有效提升了算法的运行效率。
生成负例的步骤具体为两步。第一步,遍历所有的三元组,在所有的三元组关系中,统计每个头实体平均的尾实体数,记为 tph,以及每个尾实体平均的头实体数量,记为 hpt。第二步,定义一个伯努利分布用于采样,对三元组 (h, r, t) ,以概率 tph/(tph+hpt) 替换头部,以概率 tph/(hpt+hpt) 替换尾部。
缺陷
TransH 算法的不足主要在于,它仍然假设不同关系同属于同一个超平面中,不同实体处于相同的语义空间中,这导致它在表示现实世界情况中的实体和关系时是不够充分的。