大模型PaddleNLP调研笔记

一、文档信息抽取

信息抽取通俗地说就是从给定的文本/图片等输入数据中抽取出结构化信息的过程。在信息抽取的落地过程中通常面临领域多变、任务多样、数据稀缺等许多挑战。针对信息抽取领域的难点和痛点,PaddleNLP信息抽取应用UIE统一建模的思想,提供了文档信息抽取产业级应用方案,支持文档/图片/表格和纯文本场景下实体、关系、事件、观点等不同任务信息抽取。该应用不限定行业领域和抽取目标,可实现从产品原型研发、业务POC阶段到业务落地、迭代阶段的无缝衔接,助力开发者实现特定领域抽取场景的快速适配与落地。

文档信息抽取应用亮点

覆盖场景全面🎓: 覆盖文档信息抽取各类主流任务,支持多语言,满足开发者多样信息抽取落地需求。
效果领先🏃: 以在多模态信息抽取上有突出效果的模型UIE-X作为训练基座,具有广泛成熟的实践应用性。
简单易用⚡: 通过Taskflow实现三行代码可实现无标注数据的情况下进行快速调用,一行命令即可开启信息抽取训练,轻松完成部署上线,降低信息抽取技术落地门槛。
高效调优✊: 开发者无需机器学习背景知识,即可轻松上手数据标注及模型训练流程。

使用版本:

paddle-bfloat 0.1.7
paddle2onnx 1.1.0
paddlefsl 1.1.0
paddlenlp 2.7.1
paddleocr 2.7.0.3
paddlepaddle 2.6.0
pandas 1.3.5
label-studio 1.11.0
label-studio-tools 0.0.3

1.1 代码结构

.
├── deploy # 部署目录
│ └── simple_serving # 基于PaddleNLP SimpleServing 服务化部署
├── utils.py # 数据处理工具
├── finetune.py # 模型微调、压缩脚本
├── evaluate.py # 模型评估脚本
└── README.md

2.2 数据标注

2.2.1 安装

以下标注示例用到的环境配置:

Python 3.8+
label-studio == 1.6.0 --因为运行过程中报错,升级版本至1.11.0
paddleocr >= 2.6.0.1 --因为运行过程中报错,升级版本至2.7.0.3

在终端(terminal)使用pip安装label-studio:

pip install label-studio==1.11.0

安装完成后,运行以下命令行:

/root/.pyenv/versions/3.8.16/bin/python /root/.pyenv/versions/3.8.16/bin/label-studio start -p 8082 --username *** --password ***

在浏览器打开 http://*****:8082/projects/?page=1,输入用户名和密码登录,开始使用label-studio进行标注。

2.2.2 文档抽取任务标注

具体操作步骤查看:https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/information_extraction/label_studio_doc.md

2.2.3 数据导出

勾选已标注图片ID,选择导出的文件类型为JSON,导出数据:
在这里插入图片描述

备注:1. 针对上传的文档文件名,不能含中文名
2. 对导出的json文件,需要修改一下内容其中key值:将ocr 修改为image ,否则后续运行的时候会报错,可能是官方代码各个版本造成的问题
3. 修改代码:/usr/local/lib/python3.10/dist-packages/paddlenlp/utils/tools.py 400行和416行 rectanglelabels 修改为labels

2.3 数据转换

将导出的文件重命名为label_studio.json后,放入./document/data目录下,并将对应的标注图片放入./document/data/images目录下(图片的文件名需与上传到label studio时的命名一致)。通过label_studio.py脚本可转为UIE的数据格式。

路径示例

./document/data/
├── images # 图片目录
│ ├── b0.jpg # 原始图片(文件名需与上传到label studio时的命名一致)
│ └── b1.jpg
└── label_studio.json # 从label studio导出的标注文件

抽取式任务

python label_studio.py \
    --label_studio_file ./data/label_studio.json \
    --save_dir ./data \
    --splits 0.8 0.1 0.1\
    --task_type ext

在这里插入图片描述

执行之后会产生多个文件:dev.txt sample_index.json test.txt train.txt
在这里插入图片描述

2.4 模型微调

python finetune.py  \
    --device gpu \
    --logging_steps 5 \
    --save_steps 25 \
    --eval_steps 25 \
    --seed 42 \
    --model_name_or_path uie-x-base \
    --output_dir ./checkpoint/model_best \
    --train_path data/train.txt \
    --dev_path data/dev.txt  \
    --max_seq_len 512  \
    --per_device_train_batch_size  8 \
    --per_device_eval_batch_size 8 \
    --num_train_epochs 10 \
    --learning_rate 1e-5 \
    --do_train \
    --do_eval \
    --do_export \
    --export_model_dir ./checkpoint/model_best \
    --overwrite_output_dir \
    --disable_tqdm True \
    --metric_for_best_model eval_f1 \
    --load_best_model_at_end  True \
    --save_total_limit 1

可配置参数说明:

device: 训练设备,可选择 ‘cpu’、‘gpu’、‘npu’ 其中的一种;默认为 GPU 训练。
logging_steps: 训练过程中日志打印的间隔 steps 数,默认10。
save_steps: 训练过程中保存模型 checkpoint 的间隔 steps 数,默认100。
eval_steps: 训练过程中保存模型 checkpoint 的间隔 steps 数,默认100。
seed:全局随机种子,默认为 42。
model_name_or_path:进行 few shot 训练使用的预训练模型。默认为 “uie-x-base”。
output_dir:必须,模型训练或压缩后保存的模型目录;默认为 None 。
train_path:训练集路径;默认为 None 。
dev_path:开发集路径;默认为 None 。
max_seq_len:文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为512。
per_device_train_batch_size:用于训练的每个 GPU 核心/NPU 核心/CPU 的batch大小,默认为8。
per_device_eval_batch_size:用于评估的每个 GPU 核心/NPU 核心/CPU 的batch大小,默认为8。
num_train_epochs: 训练轮次,使用早停法时可以选择 100;默认为10。
learning_rate:训练最大学习率,UIE-X 推荐设置为 1e-5;默认值为3e-5。
label_names:训练数据标签label的名称,UIE-X 设置为’start_positions’ ‘end_positions’;默认值为None。
do_train:是否进行微调训练,设置该参数表示进行微调训练,默认不设置。
do_eval:是否进行评估,设置该参数表示进行评估,默认不设置。
do_export:是否进行导出,设置该参数表示进行静态图导出,默认不设置。
export_model_dir:静态图导出地址,默认为None。
overwrite_output_dir: 如果 True,覆盖输出目录的内容。如果 output_dir 指向检查点目录,则使用它继续训练。
disable_tqdm: 是否使用tqdm进度条。
metric_for_best_model:最优模型指标,UIE-X 推荐设置为 eval_f1,默认为None。
load_best_model_at_end:训练结束后是否加载最优模型,通常与metric_for_best_model配合使用,默认为False。
save_total_limit:如果设置次参数,将限制checkpoint的总数。删除旧的checkpoints 输出目录,默认为None。

2.5 模型评估–非必要

2.6 定制模型一键预测

from pprint import pprint
from paddlenlp import Taskflow
from paddlenlp.utils.doc_parser import DocParser

schema = ['开票日期', '名称', '纳税人识别号', '开户行及账号', '金额', '价税合计', 'No', '税率', '地址、电话', '税额']
my_ie = Taskflow("information_extraction", model="uie-x-base", schema=schema, task_path='./checkpoint/model_best', precision='fp16')

doc_path = "./data/images/b199.jpg"
results = my_ie({"doc": doc_path})
pprint(results)
# 结果可视化
DocParser.write_image_with_results(
    doc_path,
    result=results[0],
    save_path="./image_show.png")

在这里插入图片描述

二、文本信息抽取

与文档步骤一样

  • 50
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值