概述
自然语言处理(NLP)任务的实现方式正在发生显著变化。相较于传统机器学习算法,当前越来越多的场景开始采用大模型技术。通过数据标注、模型训练、调优/微调、压缩及预测部署的全流程,大模型能够覆盖 NLP 多场景需求,满足开发者落地实现与灵活定制的要求。
本文介绍了基于 PaddleNLP 的 UIE 通用信息抽取框架。该框架统一了实体、关系、事件等抽取任务,支持零样本和小样本微调。内容涵盖开箱即用示例、基座模型选择、数据标注与模型微调流程、以及部署方案。通过自然语言定义 Schema,开发者可快速构建定制化信息抽取应用,无需大量训练数据即可实现冷启动。

自然语言处理(NLP)任务的实现方式正在发生显著变化。相较于传统机器学习算法,当前越来越多的场景开始采用大模型技术。通过数据标注、模型训练、调优/微调、压缩及预测部署的全流程,大模型能够覆盖 NLP 多场景需求,满足开发者落地实现与灵活定制的要求。
PaddleNLP 是其中典型的 NLP 解决方案库,聚合了业界优质预训练模型并提供开箱即用的开发体验。它覆盖了 NLP 多场景的模型库搭配产业实践范例,可满足开发者灵活定制的需求。预训练基座模型主要以 ERNIE 系列大模型为主,为中文 NLP 任务提供了强大的知识增强能力。
UIE(Universal Information Extraction)是通用信息抽取统一框架。该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。
PaddleNLP 借鉴相关论文方法,基于 ERNIE 3.0 知识增强预训练模型,训练并开源了首个中文通用信息抽取模型 UIE。该模型支持不限定行业领域和抽取目标的关键信息抽取,实现零样本快速冷启动,并具备优秀的小样本微调能力,能够快速适配特定的抽取目标。
paddlenlp.Taskflow 提供通用信息抽取、评价观点抽取等能力,可抽取多种类型的信息,包括但不限于命名实体识别(如人名、地名、机构名等)、关系(如电影的导演、歌曲的发行时间等)、事件(如某路口发生车祸、某地发生地震等),以及评价维度、观点词、情感倾向等信息。用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。
命名实体识别(Named Entity Recognition,简称 NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。
例如抽取的目标实体类型是'时间'、'选手'和'赛事名称',Schema 构造如下:
schema = ['时间', '选手', '赛事名称']
调用示例:
from pprint import pprint
from paddlenlp import Taskflow
schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema)
pprint(ie("2 月 8 日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以 188.25 分获得金牌!"))
输出结果示例:
[
{
'时间': [{'end': 6, 'probability': 0.9857, 'start': 0, 'text': '2 月 8 日上午'}],
'赛事名称': [{'end': 23, 'probability': 0.8503, 'start': 6, 'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
'选手': [{'end': 31, 'probability': 0.8981, 'start': 28, 'text': '谷爱凌'}]
}
]
若需重置抽取目标,可以通过 set_schema 方法实现。例如在医疗场景下抽取肿瘤相关信息:
schema = ['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
ie.set_schema(schema)
pprint(ie("(右肝肿瘤)肝细胞性肝癌(II-III 级,梁索型和假腺管型),肿瘤包膜不完整,紧邻肝被膜,侵及周围肝组织,未见脉管内癌栓(MVI 分级:M0 级)及卫星子灶形成。(肿物 1 个,大小 4.2×4.0×4.8cm)。"))
UIE 模型是基于 ERNIE 基座模型训练出来的,提供了多种规格的模型以适应不同的性能与资源需求。
| 模型 | 结构 | 语言 |
|---|---|---|
| uie-base (默认) | 12-layers, 768-hidden, 12-heads | 中文 |
| uie-base-en | 12-layers, 768-hidden, 12-heads | 英文 |
| uie-medical-base | 12-layers, 768-hidden, 12-heads | 中文 |
| uie-medium | 6-layers, 768-hidden, 12-heads | 中文 |
| uie-mini | 6-layers, 384-hidden, 12-heads | 中文 |
| uie-micro | 4-layers, 384-hidden, 12-heads | 中文 |
| uie-nano | 4-layers, 312-hidden, 12-heads | 中文 |
| uie-m-large | 24-layers, 1024-hidden, 16-heads | 中、英文 |
| uie-m-base | 12-layers, 768-hidden, 12-heads | 中、英文 |
注:uie-medical-base 针对医疗领域进行了优化,适合医疗文档的信息抽取。
虽然部分平台提供了开箱即用的能力,但在实际业务中往往需要接入定制化实现。PaddleNLP 的微调支持较为完善,允许用户基于自有数据进行模型优化。
建议基于 doccano 等标注平台进行数据标注。数据格式通常遵循 JSONL 标准,每一行代表一条样本,包含文本内容及对应的标签信息。对于 UIE 任务,标签通常以 Schema 的形式定义,并在训练时转换为具体的起止位置或事件角色。
推荐使用 Trainer API 对模型进行微调。只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务。Trainer API 封装了优化器、学习率调度等通用训练配置,支持一键启动多卡训练、混合精度训练、梯度累积、断点重启等功能。
使用下面的命令,使用 uie-base 作为预训练模型进行模型微调,将微调后的模型保存至 $finetuned_model:
export finetuned_model=./checkpoint/model_best
python finetune.py \
--device gpu \
--logging_steps 10 \
--save_steps 100 \
--eval_steps 100 \
--seed 42 \
--model_name_or_path uie-base \
--output_dir $finetuned_model \
--train_path data/train.txt \
--dev_path data/dev.txt \
--max_seq_length 512 \
--per_device_eval_batch_size 16 \
--per_device_train_batch_size 16 \
--num_train_epochs 20 \
--learning_rate 1e-5 \
--label_names "start_positions" "end_positions" \
--do_train \
--do_eval \
--do_export \
--export_model_dir $finetuned_model \
--overwrite_output_dir \
--disable_tqdm True \
--metric_for_best_model eval_f1 \
--load_best_model_at_end True \
--save_total_limit 1
关键参数说明:
--model_name_or_path: 指定预训练模型路径或名称。--train_path: 训练数据文件路径。--learning_rate: 学习率,影响收敛速度和最终效果。--num_train_epochs: 训练轮数。--metric_for_best_model: 用于评估最佳模型的指标,通常为 F1 值。在微调过程中,Trainer API 会自动在验证集上进行评估。主要关注指标包括精确率(Precision)、召回率(Recall)和 F1 分数。开发者可根据验证集表现调整超参数,如学习率、Batch Size 等。
加载定制模型后,通过 Taskflow 指定模型权重文件的路径,路径下需要包含训练好的模型权重文件 model_state.pdparams。
from pprint import pprint
from paddlenlp import Taskflow
schema = ['出发地', '目的地', '费用', '时间']
# 设定抽取目标和定制化模型权重路径
my_ie = Taskflow("information_extraction", schema=schema, task_path='./checkpoint/model_best')
pprint(my_ie("城市内交通费 7 月 5 日金额 114 广州至佛山"))
输出结果将展示提取到的结构化信息及其置信度概率。
模型训练、压缩时已经自动进行了静态图的导出以及 tokenizer 配置文件保存。保存路径 ${finetuned_model} 下应该有 *.pdimodel、*.pdiparams 模型文件可用于推理。
支持 CPU 和 GPU 两种推理模式。部署脚本通常位于 deploy/python/infer.py。
# UIE 模型 CPU 推理
python deploy/python/infer.py --model_dir ./checkpoint/model_best --device cpu
# UIE 模型 GPU 推理
python deploy/python/infer.py --model_dir ./checkpoint/model_best --device gpu
在实际生产环境中,建议将推理服务封装为 RESTful API,以便前端或其他后端服务调用。同时,注意监控推理延迟和吞吐量,必要时可进行量化加速或模型蒸馏以提升性能。
UIE 框架为大模型时代的 NLP 信息抽取提供了一种高效、灵活的解决方案。通过统一的任务建模和强大的基座模型,开发者可以快速构建适应特定领域的抽取系统。无论是零样本的快速原型验证,还是小样本的精细化微调,UIE 都能提供有力的技术支持。结合 PaddleNLP 完善的工具链,从数据标注到模型部署的全流程均可顺畅完成,助力企业快速落地 AI 应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online