UIE: 信息抽取的大一统模型

本文介绍了UIE(Universal Information Extraction)模型,它结合了结构化抽取语言SEL,用于统一处理信息抽取的多个子任务,如实体、关系和事件抽取。SEL通过Spotting和Associating两种原子操作对不同任务进行编码,简化了任务表示。模型UIE基于Transformer,通过结构化模式指导(SSI)进行预训练,包括Text-to-Structure Pre-training、Structure Generation Pre-training和Retrofitting Semantic Representation三个损失。实验表明,UIE在多个信息抽取基准上表现出色,特别是在zero-shot和few-shot设置中,显示了其强大的泛化能力。

论文链接: https://arxiv.org/abs/2203.12277

背景

最近由于业务需要,一直在关注信息抽取领域的一些文章,实验上尝试了BERT+Softmax、BERT+NER以及GlobalPointer等模型,效果都还可以,就是标数据有点费人。所以,想找一些few-shot效果比较好的模型,可以辅助标注。无意间,就发现了这篇论文,尝试做了zero-shot实验,效果很惊人。

众所周知,信息抽取通常包含常见的四个子任务: 实体抽取、关系抽取、事件抽取以及情感分析等。在过去,因为不同的任务识别的实体、事件类型等等都不一样,所以针对特定的任务要训练特定的模型,定制化较高,不具有通用性。针对这种问题,本文从生成模型的角度去考虑信息抽取的问题,使得这几种子任务可以通过一个模型去完成。

下面我们看看模型的具体部分。

模型

SEL(Structured Extraction Language)

信息抽取任务的标签表示多种多样,有采用SBME的方式,也有直接用起始终止位置来表示的。本文为了统一建模,需要将不同的IE(information extraction)任务标签编码成统一的形式。因此提出了一种结构化抽取语言SEL。

IE结构其实可以归纳成两个原子操作:

  • Spotting: 表示的是在句子中定位目标信息的片段,如事件中的实体或触发词。
  • Associating: 表示的是两个不同信息片段之间的关系。例如,实体对之间的关系或事件的角色等。

举个例子:

假设输入的句子为:“Steve became CEO of Apple in 1997.”,有三个实体,人: Steve、公司:Apple、时间: 1997. 下图则为结构化抽取语言对于抽取结构的表示。如蓝色代表的是关系抽取,红色代表的事件抽取,最后则为实体的抽取。红色部分的触发词是became。雇主是Apple,雇员是Steve,时间在1997年。

可以看出SEL的优点有:

  1. 对不同的IE结构进行统一编码,因此可以将不同的IE任务建模为相同的text-to-structure生成过程;
  2. 有效地将一个句子的所有提取结果表示为同一结构,能够自然地进行联合提取;
  3. 生成的输出结构非常紧凑,大大降低了解码的复杂度。

SSI(Structural Schema Instructor)

使用SEL, UIE(本文提出的模型)可以均匀地生成不同的IE结构。然而,由于不同的IE任务有不同的模式,在提取过程中,如何自适应地控制我们想要生成的信息? 本文提出了一种结构化模式的指导,类似于Prompt。把需要提取的关系类型、实体类型等和句子进行拼接。如下图:

给定结构化模式的抽取类型S以及文本的序列X,通过UIE模型可以生成SEL结构化的信息。即:

具体的输入可以表示为:


其实就是上图的意思,将要抽取的类型和文本拼接起来,输入给模型。这里可能涉及到本文的一丢丢缺陷了,如果抽取的实体类型、关系类型非常多的话,输入文本长度可能会非常长,效率就是个大问题了。。

UIE( Universal Information Extraction)

前面讲了那么多,感觉还是云里雾里,模型到底是什么呢?其实就是一个标准的Transformer,包含了Encoder和Decoder。首先将SSI信息和句子拼接,用encoder去编码,如下所示:


其中s1,...,s∣s∣s_1, ..., s_{|s|}s1,...,ss是SSI信息,x1,...,x∣x∣x_1, ..., x_{|x|}x1,...,xx是句子。

接着,通过自回归的方式解码出抽取的信息。如下所示:

读到这里,有人可能感觉此方法有点扯,生成任务是不可控,如果生成的信息结构不符合前面定义的结构,那怎样抽出信息呢?作者通过了定义不同的损失避免的这种情况。

loss 设计

Text-to-Structure Pre-training using

首先,定义Dpair=(x,y)D_{pair} = {(x, y)}Dpair=(x,y)。具体x输入为:[spot] person [asso] work for [text]Steve became CEO of Apple in 1997.,y则为:((person: Steve(work for: Apple)))。可以发现在生成的过程中,person和work for在输出时是肯定要出现的。这两个东西就是我们此前定义的spotting、associating。作者发现如果在生成的token中,加个损失,用来判断当前token是不是spotting或者是不是associating效果会变好。这里的正样本就是spotting或者assocating,负样本则是随机抽取的token。损失如下:

Structure Generation Pre-training

这个损失就很容易理解了,就是生成任务中,自回归的一个损失。如下所示:

Retrofitting Semantic Representation

为了提高UIE的语义表示,作者还加了MLM任务。损失如下:

这里的MASK是针对目标文本的。跟bert有点区别。

最后将这三种损失相加,进行大规模的预训练。

至此,模型就讲到这里了。最后看看实验部分。

实验

本文在13个IE基准上进行了实验,涉及4个很有代表性的IE任务(包括实体提取、关系提取、事件提取、结构化情感提取)及其组合(例如,联合实体-关系提取)。结果如下:

其中SEL为没有预训练的UIE模型,也就是直接用T5做这种生成,可以发现效果也非常好。生成模型的大一统指日可待了。加上预训练,效果也得到了不同程度的提升。

另外,作者也给除了few-shot的效果,如下:

有点惊人。。。。

### 关于通用信息抽取模型 PP-UIE #### 模型概述 PP-UIE 是一个强大的统一信息抽取框架,能够处理多种自然语言处理任务。该模型基于 PaddleNLP 平台开发,在多个下游任务上表现出色[^2]。 #### 功能特性 - **多模态支持**:不仅限于纯文本输入,还具备 OCR 和版面分析功能,适用于复杂场景下的文档理解。 - **高性能推理引擎**:兼容 CPU 及 Nvidia GPU 部署环境,并默认集成了 Paddle Inference、ONNX Runtime、OpenVINO 以及 TensorRT 推理后端,确保高效运行性能[^4]。 #### 安装与配置指南 为了使用 PP-UIE 进行模型微调并保存结果到特定位置,可以通过如下 Python 代码片段实现: ```python from paddlenlp import Taskflow # 初始化 UIE 模型实例 schema = ["时间", "地点"] # 自定义实体类别列表 ie = Taskflow("information_extraction", schema=schema, model="paddlenlp/PP-UIE-1.5B") # 微调过程中的超参数设置(此处仅为示意) training_args = { 'output_dir': './results', } # 执行微调操作并将最终版本存储起来 model.save_pretrained(training_args['output_dir']) ``` 上述脚本展示了如何加载预训练权重文件 `paddlenlp/PP-UIE-1.5B` 来初始化一个新的信息提取器对象;接着通过调整某些关键参数完成定制化需求;最后将经过优化后的网络结构及其对应的参数持久化至本地磁盘中以便后续应用或分享给其他开发者继续迭代改进。 #### 获取更多资源 对于希望深入了解 PP-UIE 或者尝试其最新扩展组件如 UIE-X 的研究人员来说,官方 GitHub 页面提供了详尽的技术文档和支持材料,涵盖了从基础概念讲解一直到高级应用场景实践等多个方面的内容[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传道解惑也

打赏一下咯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值