纵轴为头,横轴为尾,图中的两个红色 1 标签分别标注了(北,市)和(北,府),代表“北京市”和“北京市*”为两个实体。
实体解决了,那么关系怎么办呢?那是一个下午,落日的余光洒在地板上显得格外刺眼,我看了一眼客厅的沙发,忽然想起了那天夕阳下的思考。一拍脑袋,邻接矩阵不就是用来表示节点关系的吗?实体关系可不可以也用两个 token 的关系来表示呢?答案又呼之欲出了。对,那就是 subject 和 object 的头部 token 以及尾部 token。例如:(周星驰,演员,喜剧之王)-> (周,演员,喜),(驰,演员,王)。
有些同学可能会疑惑为什么还要标尾部 token,头部 token 对的关系不就已经足够表达关系了吗?那是因为如果不确定尾部边界,仍然无缝解决嵌套问题。如前文例子中的“北京市”和“北京市*”就是共享头部 token 的嵌套实体。
有些小伙伴可能已经看出来了,我们不知不觉就把 subject 和 object 在同一解码阶段确定了下来。于是,曝光偏差就不存在了。
其中紫色标签代表实体的头尾关系,红色标签代表 subject 和 object 的头部关系,蓝色标签代表 subject 和 object 的尾部关系。
上三角形状的标注,提高标注效率
从图2的左面板可以看出,矩阵是非常稀疏的,尤其是下三角区域。因为实体尾部不可能出现在实体头部之前,所以下三角区域的标签都是0,这是对内存的巨大浪费。但是,客体可能出现在对应的主体实体之前,这意味着直接删除下三角区域是不合理的。在此之前,我们将下三角区域中的所有标记1映射到上三角区域中的标记2,然后删除下三角区域。如图二右侧所示。