查看原文
其他

信息抽取新SOTA!首个结构化生成式信息抽取预训练模型,一统信息抽取四大任务

樊润泽 PaperWeekly 2022-07-04


©PaperWeekly 原创 · 作者 | 樊润泽

单位 | 中科院计算技术研究所

研究方向 | 信息抽取


前两天在 arxiv 刷到了一篇已被 ACL 2022 主会接受的文章,题名《Unified Structure Generation for Universal Information Extraction》,简单看了摘要后整个震惊。作者采用生成式 text to structure 结构统一了信息抽取的四个任务,并且在 13 个数据集上采用全监督、低资源和少样本设置下均取得了 SOTA。


论文标题:

Unified Structure Generation for Universal Information Extraction

论文作者:

Yaojie Lu, Qing Liu, Dai Dai, Xinyan Xiao, Hongyu Lin, Xianpei Han, Le Sun, Hua Wu

作者单位:

中科院软件所中文信息处理实验室,百度

收录会议:

ACL 2022

论文链接:

https://arxiv.org/abs/2203.12277

Demo链接:

https://universal-ie.github.io/




研究背景与动机


文章主要针对信息抽取的四个任务:命名实体识别、关系抽取、事件抽取和观点抽取。信息抽取旨在从无结构的自然语言文本中抽取出结构化的信息,但是不同的信息抽取任务都有不同的结构,且差异较大。如图 1 所示,实体识别任务一般是采用 span 及其实体类别表示,关系抽取任务一般采用三元组(triplet)结构表示,事件抽取任务一般采用记录(record)表示,观点抽取任务采用三元组(triplet)来表示。

▲ 图1:信息抽取任务的不同结构与统一化信息抽取模型

不同的输出结构使得很难对所有信息抽取任务统一化建模,这样就产生了三个问题:

  1. 由于不同的任务、不同的设置(全监督、低资源、少样本、零样本)、不同的作用场景(医学、金融等),研究人员需要设计大量针对特定情况的模型,这是一件极其耗费资源的事情。

  2. 不同的任务有很多可以公用的知识,比如从图 1 中的(a)图可以看出,关系抽取需要用到命名实体识别的结果,事件抽取中的论元也是实体,而现在存在大量的针对特定任务的模型无法做到共享这些实体知识。
  3. 信息抽取的数据标注是一件极其耗费时间和人力的事情,但由于任务之间的独立,需要对每一个任务都标注数据。
针对上述问题,文章做了如下贡献:

  1. 设计了一种结构化抽取语言(Structural Extraction Language, SEL),它能够将四种信息抽取任务的不同结构统一描述,使得模型的输出结构针对不同任务都是一致的。

  2. 由于模型可以做多个任务,所以需要一种方式去指导模型做指定的任务,因此作者设计了结构化模式指导器(Structural Schema Instructor, SSI),其实这就是一种 prompt。
  3. 由于模型的输出都是符合 SEL 语法的结构化信息,而目前常用的生成式预训练模型如 T5、BART 都是以生成自然语言为主,若直接采用这种预训练模型会影响到模型性能,因此作者专门针对 text to structure 的结构来预训练了一个大模型。



如何统一每一个信息抽取任务?


这一节主要介绍作者如何采用 SEL 和 SSI 来统一化建模信息抽取任务。


2.1 统一信息抽取任务输出结构的结构化抽取语言SEL


作者发现四种信息抽取任务的目标都可以拆解成两个原子操作:

  1. Spotting:指在输入的原句中找到目标信息片段,比如说实体识别中某个类型的实体,事件抽取中的触发词和论元,他们都是原句中的片段。
  2. Associating:指找出 Spotting 输出的信息片段之间的关系,比如关系抽取中两个实体之间的关系,或事件抽取中论元和触发词之间的关系。


而每个信息抽取任务都可以用这两个原子操作去完成,因此作者设计了结构化抽取语言 SEL 可以对这两个原子操作进行表示,不同的任务只要组合不同的原子操作对应结构即可统一表示。

▲ 图2:SEL统一建模信息抽取任务的例子

如图 2(a)所示,作者使用三种形式来表示:(1)Spot Name:指目标信息片段的类别,在实体抽取中指实体类别,在事件抽取中可以指事件类型和论元类别。(2)Info Span:Spotting 操作的输出,即原句子中的目标信息片段。(3)Asso Name: 指两个信息片段之间的关系类型,也就是 Associating 操作的输出。

如图 2(b)所示,每个信息抽取任务都可以统一的用 SEL 语法描述,这里都是以“Steve became CEO of Apple in 1997.”为例。其中蓝色部分表示关系抽取任务,采用(Spot Name:Info Span(Asso Name:Info Span))格式,这里的关系指第一个括号里的实体和第二个括号里的实体的关系。

其中红色部分指事件抽取任务,采用(Spot Name:Info Span(Asso Name:Info Span)(Asso Name:Info Span)...)格式来表示,其中外括号里的 Spot Name 信息指的是事件类型及触发词,而中间的多个内括号指的是这个事件下多个论元的片段和类别。灰色部分指命名实体识别任务,由多个(Spot Name:Info Span)组成,每一对括号都指一个实体片段及其类别。

综上,可以看到 SEL 语法可以统一化描述每一个任务不同的输出结构,并且由于拥有很强的结构性,使得解码过程非常简单。

2.2 指导模型做特定任务的结构化模式指导器SSI


有了 SEL 语法,模型统一了不同任务的输出结构,但是当我们输入一个句子后,如何让模型去做我们想要的任务呢?因此作者提出了 SSI(Structural Schema Instructor),是一种基于 Schema 的 prompt。当我们输入句子时,在句子前面拼接上对应的 Prompt,即可让模型做对应的任务。

▲ 图3:UIE模型总架构图

如图3所示,第一个蓝色部分是关系抽取,它的 SSI 格式是:[spot] 实体类别 [asso] 关系类别 [text],这种形式可以告诉模型哪些做 spotting 操作,哪些做 associating 操作。第二个灰色部分是事件抽取,SSI 格式是:[spot] 事件类别 [asso] 论元类别 [text]。第三个绿色部分是实体识别,SSI 格式是:[spot] 实体类别 [text]。文章的附录中列出了每一个数据集每一个任务对应的 SSI,因为不同的数据集所设置的 Schema 是不同的,因此每个数据集都有不同的 SSI,虽然例子中只列出了部分类别,但是在使用时 SSI 就是将所有的类别都列举出来,部分示例如图 4 所示。

▲ 图4:不同任务不同数据集的SSI示例

注意:作者在实际使用中并不是用 [spot],而是采用 <spot>,asoc 同理。

以下用 表示 SSI,用 表示需要输入的原始句子,UIE 表示 UIE 模型,它由 transformer 的 Encoder 和 Decoder 组成,形式化定义如式(1):


输出  就是采用 SEL 语法描述的结构化数据,其中 表示如式(2):



详细来说,首先将 输入至 Encoder,得到每一个 token 的隐层表示,形式化表示如式(3):



接下来使用隐层表示在 Decoder 端生成目标结构化信息,表示如式(4)所示:




预训练与微调


这一节将介绍 UIE 是如何预训练的,以及如何将其应用于下游任务去微调。作者采用的模型是 T5-v1.1-base 和 T5-v1.1-large 作为 UIE-base 和 UIE-large,模型的参数初始化直接使用了 T5-v1.1 的参数,也就是说直接基于其进行了二次预训练。

3.1 预训练数据


主要由 Wikipedia、Wikidata 和 ConceptNet 三部分组成,作者通过这三部分数据构造了如下三种形式的预训练数据:

  1. :(token sequence ,structured record ),数据表示为
  2. :只有基于 SEL 语法的结构性 record,数据表示为  
  3. :只有无结构的原始文本数据,做 masked language model tasks,数据表示为

3.2 预训练任务


针对上述三种类型的数据,分别设计了三种预训练任务:

1. 针对 ,输入数据为 SSI+ 原始文本 ,使其生成结构化的数据 record,不同的是作者在 record 中不仅加入了原本存在的正样本,也加入了一些负样本作为噪音,比如(Spot Name: [NULL]),此任务计算的 Loss 如式(5)所示。



2. 针对 ,这部分输入只有结构化数据 record,输入前面的部分,使其生成剩余部分,并且只训练 UIE 的 decoder 部分,使其学会 SEL 语法,计算的 Loss 如式 (6)所示。



3. 针对 ,这部分做的是无监督的 masked language model 任务,和 T5 中的预训练任务一样,在原始句子中 MASK 掉 15% 的 tokens,然后生成 MASK 的部分,输入中已经呈现的部分输出 MASK,计算的 Loss 如式(7)所示。



最终将三个 Loss 相加作为最终 Loss。

值得注意的是,作者并不是分开做这三个预训练任务的,而是将其统一化,全部表示为三元组 ,其中 是加在输入句子前面的 prompt, 是输入的原始句子, 是需要生成的目标句子,在每一个 batch 中随机抽取每一个任务的数据去训练。 数据表示为 数据表示为 数据表示为 ,这样无论是哪种任务都是输入一个三元组,即可统一训练。

3.3 微调


微调部分和预训练任务的 类似,数据形式是 ,微调的 Loss 计算方式如式(9)所示。



微调部分依然加入了负样本,如图 5 所示,表格上部分为输入,下部分为第一行为正样本的输出,第二行为加入了负样本。随机插入一些原标签中没有的信息,即 (Spot Name:[NULL])或(Asso Name:[NULL]),图 5 中输入句子中并没有 facility 的实体,而标签中插入了(facility:[NULL])。

▲ 图5:微调阶段加入负样本的例子



实验


实验基于 4 个任务:命名实体识别、关系抽取、事件抽取和观点抽取,13 个数据集,具体如图 6 所示。

4.1 全监督实验


这部分是在训练阶段采用所有的数据,实验结果如图 6 所示,最右边的 SEL 列是指基于 T5-v1.1-large 进行微调得到的结果,UIE 是指基于 UIE-large 进行微调的结果,可以看到几乎在全部数据集上都取得了 SOTA 的结果,但是通过对比 SEL 和 UIE 发现预训练部分对结果的提升并不大,通过这个可以看出作者设计的 SEL 语法和 SSI 还是很强大的,另一方面也说明 T5 本身的生成能力就很强大。

▲ 图6:全监督设置下的实验结果

4.2 低资源(Low-resource)实验


这部分是在 6 种设置下做的:1/5/10-shot 和 1/5/10% ratio。因为少样本情况下随机性很大,所以作者在每一个设置下都采样了 10 次,报告 10 次结果的平均,结果如图 7 所示,从这个结果中可以看出,UIE 真正强大的地方是小样本情况下,泛化能力非常强,远超基于 T5 的微调结果,在全监督设置下预训练部分的能力没有体现出来,但在低资源下针对性的预训练可以非常好的提升泛化能力。同样,全部任务下都取得了 SOTA。

▲ 图7:低资源设置下的实验结果

4.3 消融实验


如图 8 所示,首先是预训练部分的消融实验,分别去掉三个预训练任务,观察其最终结果可以看到:(1)对于关系抽取和观点抽取的两个数据集来说, 非常重要,因为从 T5 到移除了 后,结果在关系抽取中从 72.12 升到了 75.70,在观点抽取中从 72.03 升到了 74.28,可以看到 带来了非常大的性能提升。(2)  对于事件抽取这种复杂任务非常重要,若移除 ,触发词识别的结果从 72.63 降到了 70.89,论元识别的结果从 57.27 降到了 54.16。(3)  对模型的抽取能力帮助很大,移除掉 以后,关系抽取性能下降了 0.90,事件抽取下降了 1.43/1.48,观点抽取下降了 0.46。


▲ 图8:预训练部分的消融实验结果

此外,对小样本情景下,通过消融实验验证了插入负样本的有效性,结果如图 9 所示,这种插入负样本的方式在小样本情况下影响显著,无论是基于 T5 还是 UIE,precision 平均能提高 13.16。

▲ 图9:小样本情景下对rejection机制的消融实验结果



总结


这篇文章提出了第一个结构化生成的通用信息抽取预训练语言模型,性能直接刷爆了 13 个数据集的 SOTA,特别是在小样本/低资源情景下,提升显著,这也为我们提供了一个思路,如果想在小样本情况下取得较好的性能,而预训练任务和下游任务 gap 较大时,可以自己去设计和下游任务相近的预训练任务,基于现有的预训练模型进行二次预训练。

其实这篇文章的动机也不是作者偶然性想到的,2021 年一作 Yaojie Lu 就将 text to structure 结构应用于了事件抽取任务,并且中了 ACL 2021,本篇文章也是他将这种结构扩展到了整个信息抽取领域。

更多阅读




#投 稿 通 道#

 让你的文字被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。


📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算


📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿


△长按添加PaperWeekly小编




🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



·

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存