赞!支持8192个Token长度文档的信息抽取UIE模型开源了,覆盖命名实体识别(NER)、关系抽取(RE)和事件抽取(EE)

PP-UIE(PaddleNLP’s Pre-trained Universal Information Extraction model)是由百度 PaddleNLP 团队开发的通用信息抽取大模型,专门用于处理中文和英文的命名实体识别(NER)、关系抽取(RE)和事件抽取(EE)任务。该模型基于百度的 UIE 建模思路,通过大模型能力实现信息抽取,并在多个数据集上表现出色,相比其他模型在准确率(ACC)和 F1 指标上有显著提升。
在这里插入图片描述

模型简介

  • PP-UIE 提供了四个不同规模的模型版本:0.5B1.5B7B14B,以适应不同场景下的信息抽取需求。
  • 这些模型在多个数据集(如 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.5B2489614中、英文
paddlenlp/PP-UIE-1.5B28153612中、英文
paddlenlp/PP-UIE-7B28358428中、英文
paddlenlp/PP-UIE-14B48512040中、英文

更多配置

  • 用户可以根据需要调整模型的配置,例如 schemaschema_langbatch_sizemodelprecision 等。以下是一个配置示例:

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.pypaddlenlp.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-shot5-shot 场景下均表现出色,尤其是在垂直领域数据集上,通过少量数据微调可以进一步提升效果。
  • 以下是部分实验结果:
数据集名称模型名称0-shot F15-shot F1
CMeEE-V2 (医疗领域)PP-UIE-0.5B0.479-
Boson (通用领域)PP-UIE-0.5B0.638-
CLUENER (通用领域)PP-UIE-0.5B0.593-
CCIR2021-NER (新闻领域)PP-UIE-0.5B0.773-
任务对话2018-NER (对话领域)PP-UIE-0.5B0.723-
银行借贷2021-NER (金融领域)PP-UIE-0.5B0.361-
SKE2019 (金融领域)PP-UIE-0.5B0.782-
平均值PP-UIE-0.5B0.621-
数据集名称模型名称0-shot F15-shot F1
CMeEE-V2 (医疗领域)PP-UIE-14B0.5560.588
Boson (通用领域)PP-UIE-14B0.7120.729
CLUENER (通用领域)PP-UIE-14B0.6370.67
CCIR2021-NER (新闻领域)PP-UIE-14B0.8410.837
任务对话2018-NER (对话领域)PP-UIE-14B0.8430.865
银行借贷2021-NER (金融领域)PP-UIE-14B0.4880.576
SKE2019 (金融领域)PP-UIE-14B0.8320.832
平均值PP-UIE-14B0.7010.728

直接体验:https://github.com/PaddlePaddle/PaddleNLP

命名实体识别NER)是自然语言处理(NLP)中的一个基础任务,目标是识别文本中的实体类别。要使用BERT模型进行中文文本的命名实体识别,可以参考《基于BERT的中文序列标注项目实战与教程》这份资源,它提供了详细的教程可直接运行的源码。 参考资源链接:[基于BERT的中文序列标注项目实战与教程](https://wenku.csdn.net/doc/2dsdt5bsiy?spm=1055.2569.3001.10343) 首先,你需要安装BERT模型相关的Python库,比如transformersTensorFlow。这些可以通过pip命令安装: ```bash pip install transformers pip install tensorflow ``` 接下来,使用BERT进行NER任务的步骤大致如下: 1. 准备数据集:你需要一个标注好的中文NER数据集,比如MSRA、OntoNotes等。将数据集分为训练集、验证集测试集,并进行必要的格式转换。 2. 加载预训练的BERT模型分词器:使用transformers库中的BertTokenizerBertModel来加载预训练的BERT模型及其对应的分词器。 ```python from transformers import BertTokenizer, TFBertModel tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = TFBertModel.from_pretrained('bert-base-chinese') ``` 3. 数据预处理:使用分词器对数据集中的文本进行编码,生成BERT模型所需的输入格式,包括token_ids、attention_masktoken_type_ids。 ```python inputs = tokenizer.encode_plus( text, add_special_tokens=True, # 添加特殊字符 max_length=128, # 最大长度,需要根据实际情况调整 return_token_type_ids=True, return_attention_mask=True, pad_to_max_length=True, truncation=True ) ``` 4. 构建模型:在BERT模型的基础上添加序列标注所需的输出层。例如,在BERT的基础上添加一个全连接层用于输出实体标签。 ```python from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense sequence_input = model.input[0] # 只取模型输入的第一部分 pooled_output = model.output[0] # 取BERT的输出 x = Dense(num_tags, activation='softmax')(pooled_output) # 添加全连接层 model = Model(inputs=sequence_input, outputs=x) ``` 5. 编译模型:选择优化器、损失函数,并编译模型。 ```*** ***pile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 6. 训练模型:使用训练集数据训练模型,并在验证集上进行评估。 ```python model.fit(x_train, y_train, validation_data=(x_val, y_val), epochs=3, batch_size=16) ``` 7. 评估与预测:在测试集上评估模型性能,并进行预测。 ```python loss, accuracy = model.evaluate(x_test, y_test) predictions = model.predict(x_test) ``` 8. 后处理:将模型的预测结果转换为可读的实体标注格式。 以上步骤代码仅提供一个大致的框架,具体的实现需要根据你的数据集任务要求进行调整。通过实践BERT在中文NER上的应用,你将能更加深入地理解序列标注技术,并在实际问题中灵活运用。对于想要更深入学习BERT模型及其在NLP中的应用,推荐查看《基于BERT的中文序列标注项目实战与教程》这份资料,它不仅提供了详细的教程,还包含了源码项目说明,帮助你更好地理解并应用于你的项目中。 参考资源链接:[基于BERT的中文序列标注项目实战与教程](https://wenku.csdn.net/doc/2dsdt5bsiy?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI仙人掌

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值