PP-UIE(PaddleNLP’s Pre-trained Universal Information Extraction model)是由百度 PaddleNLP 团队开发的通用信息抽取大模型,专门用于处理中文和英文的命名实体识别(NER)、关系抽取(RE)和事件抽取(EE)任务。该模型基于百度的 UIE 建模思路,通过大模型能力实现信息抽取,并在多个数据集上表现出色,相比其他模型在准确率(ACC)和 F1 指标上有显著提升。
模型简介
- PP-UIE 提供了四个不同规模的模型版本:0.5B、1.5B、7B 和 14B,以适应不同场景下的信息抽取需求。
- 这些模型在多个数据集(如 Boson、CLUENER 和 CCIR2021)上进行了测试,均取得了优异的性能。
开箱即用
- PP-UIE 通过
paddlenlp.Taskflow
提供了便捷的接口,用户无需训练即可使用模型进行信息抽取。支持实体抽取、关系抽取等多种任务,并且可以通过自然语言定义抽取目标。
实体抽取
- 用户可以通过定义
schema
来指定需要抽取的实体类型,例如“时间”、“选手”和“赛事名称”。以下是一个代码示例:
Python复制
from paddlenlp import Taskflow
schema = ['时间', '选手', '赛事名称']
ie = Taskflow('information_extraction', schema=schema, model='paddlenlp/PP-UIE-0.5B')
result = ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")
print(result)
- 输出结果将包含指定的实体及其对应的信息。
关系抽取
- 关系抽取任务中,用户可以定义更复杂的
schema
,例如以“竞赛名称”为主体,抽取“主办方”、“承办方”和“时间”等关系。以下是一个代码示例:
Python复制
schema = {'竞赛名称': ['主办方', '承办方', '时间']}
ie.set_schema(schema)
result = ie('2022年语言与智能技术竞赛由中国中文信息学会和中国计算机学会联合主办,百度公司、中国中文信息学会评测工作委员会和中国计算机学会自然语言处理专委会承办,已连续举办4届,成为全球最热门的中文NLP赛事之一。')
print(result)
- 输出结果将包含竞赛名称及其相关的主办方、承办方和时间信息。
模型选择
PP-UIE 提供了多个模型版本,用户可以根据精度和速度需求选择合适的模型。以下是各版本的参数对比:
模型名称 | 层数 | 隐藏单元数 | 注意力头数 | 语言 |
---|---|---|---|---|
paddlenlp/PP-UIE-0.5B | 24 | 896 | 14 | 中、英文 |
paddlenlp/PP-UIE-1.5B | 28 | 1536 | 12 | 中、英文 |
paddlenlp/PP-UIE-7B | 28 | 3584 | 28 | 中、英文 |
paddlenlp/PP-UIE-14B | 48 | 5120 | 40 | 中、英文 |
更多配置
- 用户可以根据需要调整模型的配置,例如
schema
、schema_lang
、batch_size
、model
、precision
等。以下是一个配置示例:
Python复制
ie = Taskflow('information_extraction',
schema={'竞赛名称': ['主办方', '承办方', '时间']},
schema_lang="zh",
batch_size=1,
model='paddlenlp/PP-UIE-0.5B',
precision='float16')
训练定制
- 对于更细分的场景,PP-UIE 支持通过少量数据进行模型微调,以提升效果。
- 用户可以使用数据标注平台 doccano 进行数据标注,并通过提供的脚本将标注数据转换为模型训练所需的格式。
数据标注
- 用户可以在 doccano 平台上创建标注项目,定义实体标签类别,并开始标注数据。
- 标注完成后,可以导出数据并使用
doccano.py
脚本进行数据转换。
模型微调
- 用户可以使用
run_finetune.py
脚本进行模型微调,指定预训练模型、数据集路径、输出目录等参数。 - 例如:
bash复制
python -u -m paddle.distributed.launch --gpus "0,1" run_finetune.py ./config/qwen/sft_argument.json
- 其中
sft_argument.json
包含了训练的详细配置。
定制模型一键预测
- 微调后的模型可以用于快速推理。用户可以使用
predictor.py
或paddlenlp.Taskflow
进行推理。 - 例如:
bash复制
python predict/predictor.py \
--model_name_or_path ./checkpoints/ie_ckpts \
--dtype float16 \
--data_file ./application/information_extraction/data/test.json \
--output_file ./output.json \
--src_length 512 \
--max_length 20 \
--batch_size 4
- 或者使用
Taskflow
:
Python复制
my_ie = Taskflow("information_extraction", schema=schema, model='paddlenlp/PP-UIE-0.5B', precision="float16", task_path='./checkpoints/ie_ckpts')
result = my_ie("城市内交通费7月5日金额114广州至佛山")
print(result)
实验指标
- PP-UIE 在多个数据集上进行了实验,包括通用领域和垂直领域的数据集。
- 实验结果表明,PP-UIE 在 0-shot 和 5-shot 场景下均表现出色,尤其是在垂直领域数据集上,通过少量数据微调可以进一步提升效果。
- 以下是部分实验结果:
数据集名称 | 模型名称 | 0-shot F1 | 5-shot F1 |
---|---|---|---|
CMeEE-V2 (医疗领域) | PP-UIE-0.5B | 0.479 | - |
Boson (通用领域) | PP-UIE-0.5B | 0.638 | - |
CLUENER (通用领域) | PP-UIE-0.5B | 0.593 | - |
CCIR2021-NER (新闻领域) | PP-UIE-0.5B | 0.773 | - |
任务对话2018-NER (对话领域) | PP-UIE-0.5B | 0.723 | - |
银行借贷2021-NER (金融领域) | PP-UIE-0.5B | 0.361 | - |
SKE2019 (金融领域) | PP-UIE-0.5B | 0.782 | - |
平均值 | PP-UIE-0.5B | 0.621 | - |
数据集名称 | 模型名称 | 0-shot F1 | 5-shot F1 |
---|---|---|---|
CMeEE-V2 (医疗领域) | PP-UIE-14B | 0.556 | 0.588 |
Boson (通用领域) | PP-UIE-14B | 0.712 | 0.729 |
CLUENER (通用领域) | PP-UIE-14B | 0.637 | 0.67 |
CCIR2021-NER (新闻领域) | PP-UIE-14B | 0.841 | 0.837 |
任务对话2018-NER (对话领域) | PP-UIE-14B | 0.843 | 0.865 |
银行借贷2021-NER (金融领域) | PP-UIE-14B | 0.488 | 0.576 |
SKE2019 (金融领域) | PP-UIE-14B | 0.832 | 0.832 |
平均值 | PP-UIE-14B | 0.701 | 0.728 |