知识图谱中的lhs和rhs怎么理解?

在看别人代码的时候总是出现lhs、rhs的字眼,猜测是约定俗成的命名方式。

反向边

知识图谱嵌入中,经常会增加一个反向边,从而将三元组(h, r, t)转化为(t, r_reverse, h)的形式。

应用场景

  • 在链接预测中,包含了实体预测和关系预测两种,其中实体预测又分为头实体预测、尾实体预测。
  • 对于头实体预测,我们可以将其转化为尾实体预测的形式,即可以通过添加反向边的方法来实现

为什么要转化为尾实体预测呢?

1. 统一实体的预测形式,方便代码实现

在代码层面来说,既有头实体预测,又有尾实体预测,需要分两种情况来讨论,大大增加了代码量且感觉有点冗余
【补充:尾实体预测的原理是,给定h和r,然后将所有实体代入t的位置,从而计算每个实体作为t的置信度分数】

2. 反向边的作用

一是提高知识图谱的查询(在嵌入部分可能体现得不明显),二是反向边可以补充正向边所缺失的信息,尤其对于少见或冷门的知识,这种补充作用更加明显(来源chatgpt平替版)。

lhs和rhs分别代表什么?

贴两段代码感受一下,第一段:这里的lhs、rel、rhs分别代表头实体、关系、尾实体,后续转化为对应的实体id、关系id

for line in to_read.readlines():
    lhs, rel, rhs = line.strip().split('\t')    # h,r,t
    entities.add(lhs)
    entities.add(rhs)
    relations.add(rel)

第二段:这里的lhs是指以(t,rr)为key值,h为value的字典列表,rhs是指以(h,r)为key值,t为value的字典列表。
其中,rel为关系id,(rel + n_relations)可以理解成反向边的id

for lhs, rel, rhs in examples:
    to_skip['lhs'][(rhs, rel + n_relations)].add(lhs)
    to_skip['rhs'][(lhs, rel)].add(rhs)

就第二段代码而言,lhs构造头实体预测的数据集,rhs构造尾实体预测的数据。
也可以记忆成,lhs中l是预测方向往左,rhs中的r是预测方向往右

以上是我在学习知识图谱嵌入过程中遇到的疑问之一,记录下来方便忘了的时候查询

猜你喜欢

转载自blog.csdn.net/qq_38432089/article/details/130270177
今日推荐