【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks

作者提供的代码链接404了,https://github.com/DianboWork/SPN4RE

目前在NYT和WebNLG上都是SOTA
https://paperswithcode.com/task/relation-extraction
【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第1张图片【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第2张图片

1.编码器

用bert

2.非自回归解码器

传统的seq2seq方法进行关系抽取的时候,将三元组集合转化为三元序列,然后利用自回归解码器逐个生成三元组。它的目标集合的条件概率是这样的:
【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第3张图片
它需要学习多个三元组的提取顺序。给模型带来不必要的负担。

非自回归解码器解决了这个问题,它可以根据双向信息生成三元组,而非单纯的从左到右。
【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第4张图片
PL代表句子可能包含的三元组个数,论文中统一设置为m个,m大于所有句子包含的三元组个数。
在这里插入图片描述代表某个三元组Yi,不仅和给定的句子X有关系,而且与其他某个三元组Yj有关系。

使用transformer作为解码器,并行产生三元组。由N个相同的transformer堆叠而成,transformer内部的多头自注意机制可以模拟三元组之间的关系,各个三元组之间先做多头自注意。多头相互注意力机制可以融合给定句子的信息,也就是和给定的句子做注意力。
输出的HD维度是m*d。HD送入前馈网络FFN,得到m个预测的三元组。

前馈网络FFN的架构如下:
对于每个hd,送入softmax预测关系。
在这里插入图片描述
对于关系的主客体预测,类比span的预测,融合了句子He以及输出的三元组embedding。He是bert的输出。
【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第5张图片

3.损失函数

由于交叉熵损失对于输出的顺序的敏感的,所以在这里不合适。(SPN利用的transformer是双向的,不考虑输出三元组的顺序)

采用二部图匹配损失函数(Bipartite Matching Loss)
在这里插入图片描述
设ground truth有n个关系,如果n 在这里插入图片描述
这样表示ground truth,关系,主体开始,主体结尾,客体开始,客体结尾。
在这里插入图片描述
这是预测的结果。
预测集合大小为m,如果ground truth Y的集合小于m,那就用null补充到m个。

损失函数的设计分成了两步,寻找最优匹配,和计算损失。

3.1 寻找最优匹配

【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第6张图片
从所有长度为m的排列找出cost最低的排列π星,作者使用的思想是匈牙利算法
这个过程相当于对m个人分配m个任务,第i个人做到第j个任务的代价为Cij,寻找最优的方式分配,使得总cost最小,这就是二部图匹配问题。
【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第7张图片

3.2 计算损失函数

算出cost最小的m个三元组排列,对其计算Loss。
如果预测关系不存在,对于此类关系的实体的损失也就不参与计算了。
【论文阅读】Joint Entity and Relation Extraction with Set Prediction Networks_第8张图片

你可能感兴趣的:(论文阅读,python,神经网络)