关系抽取TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking

关系抽取TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking_第1张图片
纵轴为头,横轴为尾,图中的两个红色 1 标签分别标注了(北,市)和(北,府),代表“北京市”和“北京市政府”为两个实体。

实体解决了,那么关系怎么办呢?那是一个下午,落日的余光洒在地板上显得格外刺眼,我看了一眼客厅的沙发,忽然想起了那天夕阳下的思考。一拍脑袋,邻接矩阵不就是用来表示节点关系的吗?实体关系可不可以也用两个 token 的关系来表示呢?答案又呼之欲出了。对,那就是 subject 和 object 的头部 token 以及尾部 token。例如:(周星驰,演员,喜剧之王)-> (周,演员,喜),(驰,演员,王)。

有些同学可能会疑惑为什么还要标尾部 token,头部 token 对的关系不就已经足够表达关系了吗?那是因为如果不确定尾部边界,仍然无缝解决嵌套问题。如前文例子中的“北京市”和“北京市政府”就是共享头部 token 的嵌套实体。

有些小伙伴可能已经看出来了,我们不知不觉就把 subject 和 object 在同一解码阶段确定了下来。于是,曝光偏差就不存在了。
关系抽取TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking_第2张图片
其中紫色标签代表实体的头尾关系,红色标签代表 subject 和 object 的头部关系,蓝色标签代表 subject 和 object 的尾部关系。
关系抽取TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking_第3张图片
上三角形状的标注,提高标注效率
关系抽取TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking_第4张图片
从图2的左面板可以看出,矩阵是非常稀疏的,尤其是下三角区域。因为实体尾部不可能出现在实体头部之前,所以下三角区域的标签都是0,这是对内存的巨大浪费。但是,客体可能出现在对应的主体实体之前,这意味着直接删除下三角区域是不合理的。在此之前,我们将下三角区域中的所有标记1映射到上三角区域中的标记2,然后删除下三角区域。如图二右侧所示。
关系抽取TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking_第5张图片
为了方便张量计算,用一个映射来记住原始矩阵中的位置。这个序列就像所有标记的握手,这就是为什么我们把这个方案称为握手标记方案的原因。

图2左侧中的案例表明,这个标记方案可以自然地处理单点重叠问题和嵌套实体问题。在本例中,“New York City”和“New York”是嵌套的,并共享同一个对象“De Blasio”,这对以前的许多方法都是一个挑战性的问题。

然而,通过这种标记方案,这三个实体和两个三元组都可以很容易地解码。然而,由于不同的关系不能被标记在同一矩阵中,因此该方法不能处理实体对的实体重叠问题。为了解决这个问题,我们对每个关系类型执行相同的矩阵标记工作。

EH-ET实体头 -实体尾的标记被所有关系共享,因为它关注于一般的实体提取,而不局限于特定的关系类型。
总的来说,如图3所示,将联合提取任务分解为2N+1序列标记子任务,其中N表示预定义关系类型的数量,每个子任务构建一个长度为(n2 + n)/2的标签序列,其中N为输入语句的长度。我们的标记方案似乎是非常低效的,因为标记序列的长度随着句子长度的增加呈平方数增加。幸运的是,我们的实验表明,利用编码器顶部的轻量级标记模型,TPLinker比起目前的SOTA很有竞争力。因为编码被所有标记共享,并且只需要一次产生n个token的表示。

解码

在图三中,(" New ", " York “), (” New ", " City “)和(” De ", " Blasio ")在属性中被标记为EH-ET序列,意思是“New York”,“New York City”,和“De Blasio ”是三个实体。
对于关系“mayor”,(“New”,“De”)在SH-to-OH序列中被标记为1,这意味着以“New”开始的主语的mayor就是以“De”开始的对象。(“City”,“Blasio”)在ST-to-OT序列中被标记为1,这意味着主体和客体都是以“City”和结尾的实体分别为“Blasio”。根据这三个序列所代表的信息,可以解码出一个三元组:(“纽约市”,“市长”,“白思豪”)。

算法1解释了解码的过程。
首先,从EH-ET序列中提取所有跨越的实体,然后用字典D将每个头位置映射到以该位置开始的对应实体。接下来,对每个关系,我们首先解码ST-OT序列,将他们添加到一组E,然后解码SH-OH,从字典D里查找以头实体位置开始的可能实体。最后,我们迭代所有候选主体客体对,检查他们的尾位置是否在E中。如果是,新的三元组答案被提取,添加到结果集T中。

你可能感兴趣的:(python,IE,python)