绝了!关系抽取新SOTA

绝了!关系抽取新SOTA作者|Nine整理|NewBeeNLP关系抽取目前的算法大概可以分为以下几种:pipelineapproach:先抽实体,再判关系,比如陈丹琦的《AFrustratinglyEasyApproachforJointEntityandRelationExtraction》(后面称为PURE)JointEntityandRealtion…

3c73e0a5f1c752d93550f095cede38c0.png

作者 | Nine 

整理 | NewBeeNLP

关系抽取目前的算法大概可以分为以下几种:

  • pipeline approach:先抽实体,再判关系,比如陈丹琦的《A Frustratingly Easy Approach for Joint Entity and Relation Extraction 》(后面称为PURE)

  • Joint Entity and Realtion Extraction:联合模型,目前我看过的有这么几种方式:

    • 将联合任务看做是一个填表问题,比如:table sequence[1],TPlinker[2]

    • 将联合任务看做是一个序列标注问题,比如:ETL Span[3],PRGC[4]

    • 将联合任务看做是一个seq2seq问题,比如:SPN4RE[5]

今天分享的论文是一篇pipeline方法,来自清华和微信ACL2022的工作,《Packed Levitated Marker for Entity and Relation Extraction》,是PURE的升级版,这里我们先简单介绍一下PURE。

PURE

PURE中 NER部分 是将文本送入PLM中获取每个token的上下文表征,然后将每个span的start token、end token的上下文表征以及span长度的embedding拼接在一起得到span的表征,然后送进两层前馈神经网络,最后预测entity type。

PURE中的 关系抽取部分 采用了往句子中的subject span和object span的前后插入 “typed marker” 的方式,这个typed marker就是一对标记,

  • object span的 typed marker 为 start marker [O: entity_type]和end marker [/O: entity_type],

  • Subject span的[S: entity_type]和[/S: entity_type]

通过这种方式对句子改造以后,将改造后的句子送入PLM,然后将 subject span 和 Object 的start marker 的上下文表征拼接在一起作为span的表征,然后过线性变换和softmax预测这个span的relation type。(后面称为PURE-Full)

这种方式的问题就在于每一个训练和预测样本都只能插入一对subject span和object span,导致计算量很大。

他们提出了一种加速方法,这种加速方式也是本文的主要参考的模型: 将typed marker全部放在句子末尾,然后通过让typed marker与相应的subject span或object span中的头/尾单词共享position embedding,并且利用attention mask矩阵来完成一些限定,typed marker进可以与文本以及当前span pair内的typed marker进行attention, text仅可以与text进行attention

这样的话就可以在一个句子中并行处理多对span pairs了,他们提出的这种加速方法提升了关系抽取的速度,但是效果会有一些折扣。(后面成为PURE-Approx.)

PL-Marker

  • 论文:《Packed Levitated Marker for Entity and Relation Extraction》

  • 发表方:清华大学+微信,ACL2022

  • 论文链接:https://arxiv.org/abs/2109.06067v4

  • 开源代码:https://github.com/thunlp/PL-Marker

接下来就是今天的重点,PL-Marker。主要对NER和RE中span的表征进行改进,在之前的工作中,有三种span表征方式:

  • T-Concat :这种方式将span 的start 和end token的representation拼接起来作为span的representation,也就是PURE中NER用的方式,其实很多模型都用的这种方式;

  • Solid Marker(固定标记) :显式的在句子中的span前后插入两个marker,如果是关系抽取,就在subject span和object span前后,但这种方式没法一次性处理多对span,因为在句子中要塞入多对marker的话,不但句子结构会很乱,而且对于有交叉的span也不好处理。PURE-Full就用的这种方式。

  • Levitated Marker(悬浮标记) :就是PURE-Approx,这里不赘述了,目前仅有PURE-Approx中用了这种方式,效果相较于PURE-Full是有折扣的,论文中认为简单将悬浮标记放到句子后面的方式没有考虑多个span之间的关联。

本篇论文对span表征的建模采用的是后两种Marker的方式,针对单个span和多个span提出了两种标签打包的策略:

  • 在做NER的时候提出了: Neighborhood-oriented Packing for span,就是将相邻的span的悬浮标记拼接在同一个样本里面

  • 在做RE的时候提出了: Subject-oriented Packing for span pair,就是将subject span用固定标记插入句子中,其对应的Object span们,用悬浮标记拼接在句子后面,放在一个样本里面

6a13f836418a8d9721945a41221ca645.png

PL-Marker的两种标签打包策略

模型结构

PL-Marker使用的模型就是PLM,与PURE-Approx类似:

  • 拼接在句子后面的悬浮标记对中的start marker与其在句子中对应的span的start token共享position embedding,end marker与对应span的end token共享 position embedding;

  • 通过attention mask矩阵进行限制,使得悬浮标记可以看到它的搭档标记和前面的文本,看不到其他悬浮标记对,文本仅可以看到文本

NER部分:Neighborhood-oriented Packing for span

这部分采用的悬浮标记,将所有的可能的实体span的悬浮标记对都放在句子最后面。但是这样就出现了一个问题,因为要遍历句子中所有可能的span,而PLM能处理的句子长度有限。

因此他们提出了Packing的策略,在Packing的时候,考虑到为了更好的分清楚span的边界(更重要的是区分同一个词为开头的span的差别),会将span相近的放在一起,就是将以开头相同的或者相近的放在一个样本中。

对于一个token数量为N的句子 ,规定最大的span长度为L,具体步骤如下:

  1. 首先,对所有的悬浮标记对(一个开始标记,一个结束标记)进行排序,排序的方式是按照它们每一对悬浮标记所代表的的span的start token的位置,以及end token的位置,从小到大进行排序,得到排序后的候选span列表;

  2. 然后,将所有的悬浮标记拆分成K个组,这样的话相邻的span的悬浮标记就会被分在一个组里,然后每组拼接分别拼接在句子后面,作为K个样本;

  3. 最后,将样本送进PLM,对于每一对悬浮标记对 ,分别将他们的开始标记的表征 和结束标记的表征 拼接在一起,作为其对应span的表征:

  4. 而在进行NER的时候,他们是通过上面的步骤获取到span表征(也就是PL-Marker抽取到的span特征),然后与T-Concat方法抽取的span表征合并起来去预测entity type。

RE部分:Subject-oriented Packing for span pair

这部分采用固定标记和悬浮标记混用的方式,原因是如果也采用PURE-Approx的那种subject span levitated marker与object span levitated marker都拼接在后面的情况的话,虽然可以用attention mask去把两对marker绑定在一起,但是这样的话,那么它就不太能识别出它同span的另一个marker。具体做法如下:

  1. 对于一个句子,以及其中的subject span和它对应的object spans,构成一条训练样本,其中subject span采用固定标记,也就是在句子中span单词的前后直接插入[S]和[/S]两个标记,然后将它对应的候选Object span用悬浮标记的方式拼接在文本后面。

  2. 然后把样本送进Pretrained Encoder,对于样本中的每一个span对 和 ,将Subject span前后的固定标记的表征 和 以及一对object span的悬浮标记的表征 和  拼接在一起,作为这一对span pair的表征: ;

  3. 为了建模实体类型与关系类型之间的关系,他们还增加了预测object entity的辅助loss

  4. 为了增加一些补充信息,他们新增了从object到subject的反向关系的预测,从而实现了双向关系的预测,其实就是实现了一个Object-oriented packing strategy。

其他设置:

  • Prompt Initialization for NER:受prompt tuning的启发,他们在初始化NER的Marker的时候用不是随机初始化,而是embedding of meaningful words,具体的说就是他们用单词[MASK]和entity的embedding来初始化marker,发现效果均有一定程度的提升。

1b70a2f04d784678f87a7dba500a97a7.png

使用embedding of meaningful words的效果

  • 尝试用关系模型预测到的eneity type来refine由NER模型预测到的entity type,但是在不同的数据集上效果不一样,应该是不同数据集中错误数据的多少导致的吧?

1ccd3ab1dca217a3b7835131be1f7747.png

3. 效果

NER效果

df8ccfbbd637120436ea5cb676a9a5f8.png

使用了悬浮标记的NER的效果达到了SOTA

RE效果

13a75506817aa08b57466c6d30e393d7.png

速度

203ca08d1b6f5d39432eed4166fc5c9b.png

因为采用这种拼接的方式,NER的速度一定是不快,所以他们做了这个实验,对比了不同的group下PL-Marker的做NER的速度,比SeqTagger要慢很多,下表中的Two-stage方法是指他们用一个BASE-size T-Concat模型先过滤了以下候选的span,然后才送进PL-Marker的,可以看到,entity的F1没有损失,但速度有了很大

a379721194356b69f91e62c7202741c9.png

关系抽取的速度的话,他们与PURE和PURE的加速版本进行了对比,速度上,PL-Marker自然是在这两个模型之间,而效果的话,是最好的。

消融实验

对比了如下的一些方案:

  1. 在RE模型中,将subject span的solid marker改成和levitated marker,然后将所有的span pairs都pack到一个样本里面,那这个和PURE的近似版本很像啊,只不过marker不是typed marker吗?发现效果变差很多。

  2. 他们在做实验的时候对不对称关系进行了反向Relation进行了预测,这里去掉了这部分的预测,发现效果会有比较大的降低,

  3. 去掉了entity type 的辅助loss,发现效果变差

  4. 在PL-Marker的marker都换成typed marker,就像PURE一样,比如[Subject: PER],发现效果会有所降低

63a2fde638e2fdf8d711bfb1e9418f82.png

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

9c1ad7f36d23b8a37e42cae0a907de2b.png

本文参考资料

[1]

table sequence: https://arxiv.org/abs/2010.03851

[2]

TPlinker: https://www.aclweb.org/anthology/2020.coling-main.138.pdf

[3]

ETL Span: https://arxiv.org/abs/1909.04273v3

[4]

PRGC: https://arxiv.org/abs/2106.09895

[5]

SPN4RE: https://arxiv.org/abs/2011.01675v1

9a20cc77c2c4417517140eb082c9f54e.gif

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38692.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注