uie-base使用记录(paddlenlp)

news2024/11/24 5:35:28

参考文章:https://aistudio.baidu.com/aistudio/modelsdetail?modelId=22
参考文章:https://paddlenlp.readthedocs.io/zh/latest/FAQ.html
参考文章:https://developer.aliyun.com/article/1066857
参考文章:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie#%E8%AE%AD%E7%BB%83%E5%AE%9A%E5%88%B6
参考文章: https://github.com/PaddlePaddle/PaddleNLP/discussions/3316
官方网址:https://www.paddlepaddle.org.cn/
python版本:3.8.10
相关包的版本

scipy==1.7.3
numpy==1.21.6
pandas==1.2.4
SQLAlchemy==1.4.18
cuda-python==11.7.1

系统:win10
显卡:GTX1060

 nvidia-smi
 +---------------------------------------------------------------------------------------+
| NVIDIA-SMI 531.68                 Driver Version: 531.68       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                      TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce GTX 1060 6GB   WDDM | 00000000:01:00.0  On |                  N/A |
| 47%   63C    P2              122W / 120W|   4767MiB /  6144MiB |     96%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_May__3_19:00:59_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.7, V11.7.64
Build cuda_11.7.r11.7/compiler.31294372_0

CUDA:11.7

安装

首先,先安装paddlepaddle-gpu版,具体安装逻辑可以在官网查找到
在这里插入图片描述
这里,我使用的gpu安装版本,下面是复制语句

python -m pip install paddlepaddle-gpu==2.4.2.post117 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple

安装好后用下面语句测试一下是否安装成功

import paddle
paddle.utils.run_check()

正常反馈信息

Running verify PaddlePaddle program ...
W0424 12:49:36.235811 1876 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 12.1, Runtime API Version: 11.7
W0424 12:49:36.240806 1876 gpu_resources.cc:91] device: 0, cuDNN Version: 8.8.
PaddlePaddle works well on 1 GPU.
PaddlePaddle works well on 1 GPUs.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

然后安装paddlenlp

pip install paddlenlp -i https://pypi.tuna.tsinghua.edu.cn/simple

使用

参考文章:https://paddlenlp.readthedocs.io/zh/latest/FAQ.html
参考文章:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie#%E8%AE%AD%E7%BB%83%E5%AE%9A%E5%88%B6

直接使用预训练模型

from pprint import pprint
from paddlenlp import Taskflow

# os.environ['PPNLP_HOME'] = 'test_path'# 修改环境变量中的默认路径-不需要手动创建根目录-不知道是不是中文路径问题,导致无效
# os.environ['HUB_HOME'] = 'test_path'
ie = Taskflow('information_extraction', model='uie-base') # 下载到默认路径

# 设置
schema = ['时间', '选手', '赛事名称']  # Define the schema for entity extraction
ie.set_schema(schema)
pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint

打印结果

[{'时间': [{'end': 6,
          'probability': 0.9857378532924486,
          'start': 0,
          'text': '2月8日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503087726820695,
            'start': 6,
            'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981548639781138,
          'start': 28,
          'text': '谷爱凌'}]}]

自行构造数据进行微调

构造数据

首先,使用doccano进行数据标注,具体可以参考这篇文章或者PaddleNLP中doccano文章的来进行数据标注。

其次,准备utils.py,finetune.py,doccano.py这三份代码。在命令行模式下,先将刚刚导出的doccano数据转化成需要的数据格式。

python doccano.py --doccano_file ./data/doccano_ext.json --task_type "ext" --save_dir ./data --negative_ratio 5

这里使用的是【抽取式任务数据转换】,其他模式请自行参考文章。
配置参数说明

  • doccano_file: 从doccano导出的数据标注文件。
  • save_dir: 训练数据的保存目录,默认存储在data目录下。
  • negative_ratio: 最大负例比例,该参数只对抽取类型任务有效,适当构造负例可提升模型效果。负例数量和实际的标签数量有关,最大负例数量 = negative_ratio * 正例数量。该参数只对训练集有效,默认为5。为了保证评估指标的准确性,验证集和测试集默认构造全负例。
  • splits: 划分数据集时训练集、验证集所占的比例。默认为[0.8, 0.1, 0.1]表示按照8:1:1的比例将数据划分为训练集、验证集和测试集。
  • task_type: 选择任务类型,可选有抽取和分类两种类型的任务。
  • options: 指定分类任务的类别标签,该参数只对分类类型任务有效。默认为[“正向”, “负向”]。
  • prompt_prefix: 声明分类任务的prompt前缀信息,该参数只对分类类型任务有效。默认为"情感倾向"。
  • is_shuffle: 是否对数据集进行随机打散,默认为True。
  • seed: 随机种子,默认为1000.
  • separator: 实体类别/评价维度与分类标签的分隔符,该参数只对实体/评价维度级分类任务有效。默认为"##"。
    备注:
  • 默认情况下 doccano.py 脚本会按照比例将数据划分为 train/dev/test 数据集
  • 每次执行 doccano.py 脚本,将会覆盖已有的同名数据文件
  • 在模型训练阶段我们推荐构造一些负例以提升模型效果,在数据转换阶段我们内置了这一功能。可通过negative_ratio控制自动构造的负样本比例;负样本数量 = negative_ratio * 正样本数量。
  • 对于从doccano导出的文件,默认文件中的每条数据都是经过人工正确标注的。

进行微调训练

参考文章:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie#%E8%AE%AD%E7%BB%83%E5%AE%9A%E5%88%B6
使用下面的代码进行训练

python finetune.py  --device "gpu" --logging_steps 100 --save_steps 100 --eval_steps 100 --seed 42 --model_name_or_path uie-base --output_dir model/paddlepaddle/model_best --train_path data/train.txt --dev_path data/dev.txt  --max_seq_length 256  --per_device_eval_batch_size 8 --per_device_train_batch_size  8 --num_train_epochs 20 --learning_rate 1e-5 --label_names "start_positions" "end_positions" --do_train --do_eval  --do_export --export_model_dir model/paddlepaddle/model_best --overwrite_output_dir --metric_for_best_model eval_f1 --load_best_model_at_end  True --save_total_limit 1 

参数说明

  • model_name_or_path:必须,进行 few shot 训练使用的预训练模型。可选择的有 “uie-base”、 “uie-medium”, “uie-mini”, “uie-micro”, “uie-nano”, “uie-m-base”, “uie-m-large”。
  • multilingual:是否是跨语言模型,用 “uie-m-base”, “uie-m-large” 等模型进微调得到的模型也是多语言模型,需要设置为 True;默认为 False。
  • output_dir:必须,模型训练或压缩后保存的模型目录;默认为 None 。
  • device: 训练设备,可选择 ‘cpu’、‘gpu’ 、'npu’其中的一种;默认为 GPU 训练。
  • per_device_train_batch_size:训练集训练过程批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 32。
  • per_device_eval_batch_size:开发集评测过程批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 32。
  • learning_rate:训练最大学习率,UIE 推荐设置为 1e-5;默认值为3e-5。
  • num_train_epochs: 训练轮次,使用早停法时可以选择 100;默认为10。
  • logging_steps: 训练过程中日志打印的间隔 steps 数,默认100。
  • save_steps: 训练过程中保存模型 checkpoint 的间隔 steps 数,默认100。
  • seed:全局随机种子,默认为 42。
  • weight_decay:除了所有 bias 和 LayerNorm 权重之外,应用于所有层的权重衰减数值。可选;默认为 0.0;
  • do_train:是否进行微调训练,设置该参数表示进行微调训练,默认不设置。
  • do_eval:是否进行评估,设置该参数表示进行评估。

正常训练开始

[2023-04-24 14:37:21,978] [    INFO] - ***** Running training *****
[2023-04-24 14:37:21,978] [    INFO] -   Num examples = 282
[2023-04-24 14:37:21,978] [    INFO] -   Num Epochs = 20
[2023-04-24 14:37:21,978] [    INFO] -   Instantaneous batch size per device = 8
[2023-04-24 14:37:21,978] [    INFO] -   Total train batch size (w. parallel, distributed & accumulation) = 8
[2023-04-24 14:37:21,978] [    INFO] -   Gradient Accumulation steps = 1
[2023-04-24 14:37:21,978] [    INFO] -   Total optimization steps = 720.0
[2023-04-24 14:37:21,979] [    INFO] -   Total num train samples = 5640.0
[2023-04-24 14:37:21,990] [    INFO] -   Number of trainable parameters = 117946370
  1%|█▏                                                                               | 10/720 [00:04<05:05,  2.33it/s  
  2%|█▏                                                                               | 11/720 [00:05<05:04,  2.33it/s  
  2%|█▎                                                                               | 12/720 [00:05<05:04,  2.33it/s  
  2%|█▍                                                                               | 13/720 [00:05<05:03,  2.33it/s  
  2%|█▌                                                                               | 14/720 [00:06<05:03,  2.33it/s

正常训练结束

100%|█████████████████████████████████████████████████████████ 
100%|█████████████████████████████████████████████████████████ ███████████████████████| 720/720 [05:55<00:00,  2.03it/s]
[2023-04-24 14:32:25,955] [    INFO] - Saving model checkpoint to model/paddlepaddle/model_best
[2023-04-24 14:32:25,958] [    INFO] - Configuration saved in model/paddlepaddle/model_best\config.json
[2023-04-24 14:32:28,291] [    INFO] - tokenizer config file saved in model/paddlepaddle/model_best\tokenizer_config.json
[2023-04-24 14:32:28,292] [    INFO] - Special tokens file saved in model/paddlepaddle/model_best\special_tokens_map.json
[2023-04-24 14:32:28,294] [    INFO] - ***** train metrics *****
[2023-04-24 14:32:28,294] [    INFO] -   epoch                    =       20.0
[2023-04-24 14:32:28,295] [    INFO] -   train_loss               =     0.0004
[2023-04-24 14:32:28,295] [    INFO] -   train_runtime            = 0:05:55.21
[2023-04-24 14:32:28,295] [    INFO] -   train_samples_per_second =     15.878
[2023-04-24 14:32:28,295] [    INFO] -   train_steps_per_second   =      2.027
[2023-04-24 14:32:28,297] [    INFO] - ***** Running Evaluation *****
[2023-04-24 14:32:28,297] [    INFO] -   Num examples = 28
[2023-04-24 14:32:28,298] [    INFO] -   Total prediction steps = 4
[2023-04-24 14:32:28,298] [    INFO] -   Pre device batch size = 8
[2023-04-24 14:32:28,298] [    INFO] -   Total Batch size = 8
 50%|██████████████████████████████████████████                               
 100%|█████████████████████████████████████████████████████████ 
 100%|█████████████████████████████████████████████████████████ ███████████████████████████| 4/4 [00:00<00:00,  9.79it/s]
[2023-04-24 14:32:28,997] [    INFO] - ***** eval metrics *****
[2023-04-24 14:32:28,997] [    INFO] -   epoch                   =       20.0
[2023-04-24 14:32:28,997] [    INFO] -   eval_f1                 =        1.0
[2023-04-24 14:32:28,997] [    INFO] -   eval_loss               =     0.0003
[2023-04-24 14:32:28,997] [    INFO] -   eval_precision          =        1.0
[2023-04-24 14:32:28,998] [    INFO] -   eval_recall             =        1.0
[2023-04-24 14:32:28,998] [    INFO] -   eval_runtime            = 0:00:00.69
[2023-04-24 14:32:28,998] [    INFO] -   eval_samples_per_second =     40.097
[2023-04-24 14:32:28,998] [    INFO] -   eval_steps_per_second   =      5.728
[2023-04-24 14:32:29,041] [    INFO] - Exporting inference model to model/paddlepaddle/model_best\model
[2023-04-24 14:32:44,238] [    INFO] - Inference model exported.
[2023-04-24 14:32:44,239] [    INFO] - tokenizer config file saved in model/paddlepaddle/model_best\tokenizer_config.json
[2023-04-24 14:32:44,240] [    INFO] - Special tokens file saved in model/paddlepaddle/model_best\special_tokens_map.json

错误记录

参考文章:https://github.com/PaddlePaddle/PaddleNLP/issues/2608
只有运行日志vdlrecords.1677479107.log,没有模型信息
这里会存在一种情况,程序运行到Number of trainable parameters = 117946370处稍微等待了一下就自动跳出,没有训练的信息反馈。同时在输出目录中,只有运行日志vdlrecords.1677479107.log,没有模型信息。
这种是由于GPU的现存不足导致程序出错的,只要调低per_device_train_batch_size ,per_device_eval_batch_size ,max_seq_length 三者的数值即可。
ps:在pytorch中跟tf中都是会弹出错误信息的。这样很好找问题。而paddle中根本不提示信息,像我这种刚开始使用的新人来说,根本不知道哪里出了问题,排查问题排查了3天。

使用微调后的模型

from pprint import pprint
from paddlenlp import Taskflow

local_path = os.path.dirname(os.path.abspath(__file__))
model_path = os.path.abspath(os.path.join(local_path, 'model/paddlepaddle/gup_success_20230424'))

# 加载模型
ie = Taskflow('information_extraction', task_path=model_path)

# 设置
schema = ['时间', '选手', '赛事名称']  # Define the schema for entity extraction
ie.set_schema(schema)
pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机基本原理-数据结构】八大数据结构分类

【计算机基本原理-数据结构】八大数据结构分类 1&#xff09;数组2&#xff09;链表3&#xff09;队列4&#xff09;栈5&#xff09;树6&#xff09;图7&#xff09;堆8&#xff09;散列表(哈希表) 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或…

Java基础(十三)系统相关类

1. 系统相关类 1.1 java.lang.System类 System类代表系统&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造器是private的&#xff0c;所以无法创建该类的对象。其内部的成员变量和成员方法都是static的&#xff0c;所以也可…

Netty(一)深入Hotspot源码与Linux内核理解NIO与Epoll

深入Hotspot源码与Linux内核理解NIO与Epoll 前言介绍Netty 的介绍Netty 的应用场景理解阻塞和同步关键字初始BIO、NIO、AIOBIO(Blocking IO)缺点&#xff1a;应用场景&#xff1a; NIO(Non Blocking IO)应用场景&#xff1a;NIO非阻塞代码示例存在的问题 NIO 有三大核心组件&am…

Mybatis学习基础篇(一)——使用Maven快速搭建一个mybatis项目,并实现简单的增删改查

题外话&#xff1a; 在了解mybatis框架之前&#xff0c;我先说明一句&#xff0c;目前主流的框架技术层出不穷&#xff0c;每个人都有自己喜欢的技术框架&#xff0c;自己喜欢用就行。技术并没有高低之分&#xff0c;喜欢用就用&#xff0c;虽然目前大部分人都喜欢向新技术看齐…

flex布局下两端对齐,不满左对齐

文章目录 解决方案一 (利用父级的 :after 占位)解决方案二(利用:last-child和:nth-child()占位)解决方案三(补位添加节点法&#xff0c;这种方案适用于多种排列方式) 问题情境&#xff1a; 在flex布局下&#xff0c;多行排列&#xff0c;如何让flex布局最后一行没有排满时&…

如何构建适合自己的DevOps软件测试改进方案

根据2022年的DevOps全球调查报告显示&#xff0c;主流软件企业采用或部分采用DevOps且已获得良好成效的占比已达70%&#xff0c;DevOps俨然成为当下软件开发研究的重要方向。 测试作为软件开发的必要过程&#xff0c;是提升软件可靠性、保证软件质量的关键环节。然而&#xff…

上海亚商投顾:沪指失守3300点 传媒、游戏板块逆市大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日继续调整&#xff0c;沪指午后跌超1%&#xff0c;失守3300点整数关口&#xff0c;创业板指一度跌逾2%…

基于PWM技术的三相光伏逆变器研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【手把手做ROS2机器人系统开发二】熟悉ROS2基本命令

【手把手做ROS2机器人系统开发二】熟悉ROS2基本命令 一、上讲回顾 在上一讲开发环境搭建中&#xff0c;我们讲解了如何搭建Ubuntu系统环境和ROS2开发运行环境。 1.Ubuntu系统安装 2.ROS2系统环境安装 二、ROS2核心命令讲解 1、daemon-各种守护进程相关的子命令 查看帮助&am…

[网络原理] 详解Cookie与Session

做好准备,迎接所有的成功吧 文章目录 1. Cookie的概念2. Session的概念3. Cookie与Session的关联与区别3.1 关联3.2 区别 4. Cookie与Session中的核心方法 1. Cookie的概念 Cookie是用户首次登陆网站成功之后,对应页面的服务器会返回给用户一个身份标识,被保存在用户主机的硬盘…

无人机视频与GIS融合三维实景怎么实现?

无人机视频与GIS融合三维实景怎么实现?无人机三维GIS作为一项新兴的测绘重要手段&#xff0c;具有续航时间长、成本低、机动灵活等优点&#xff0c;为城市的规划建设带来极大便利。 那么此项技术有什么样的特点呢?下面智汇云舟就带大家一起来了解一下。 三维是将采集以及经运…

leetcode 1416. Restore The Array(恢复数组)

一台打印机没有把空格打印出来&#xff0c;以至于不知道打印出的 s 中到底有哪些数字。 现在知道数字的取值范围在1 ~ k, 数字开头不能是0. 返回可能的数字个数。取模1097. 思路&#xff1a; DP 假设dp[ i ]为 i ~ n位的s 所能组成的数字组合数。 从右到左遍历&#xff0c;…

【云原生进阶之容器】第六章容器网络6.7.1--阿里云Terway网络模式综述

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

如何在在一个账户内管理多个WhatsApp号

许多企业拥有多个WhatsApp Business账户。这可能是因为他们在多个地点都有商店&#xff0c;或者可能在全球范围内都有客户&#xff0c;并希望用当地语言迎合他们每个人。 无论出于何种原因&#xff0c;管理多个WhatsApp企业帐户既耗时又困难。但是&#xff0c;如果我们说有一种…

LoadRunner参数化最佳实践:让你的性能测试更加出色!

距离上次使用loadrunnr 已经有一年多的时间了。初做测试时在项目中用过&#xff0c;后面项目中用不到&#xff0c;自己把重点放在了工具之外的东西上&#xff0c;认为性能测试不仅仅是会用工具&#xff0c;最近又想有一把好的利器毕竟可以帮助自己更好的完成性能测试工作。这算…

【AI实战】微小目标检测模型MMDet-RFLA--训练环境从零开始搭建

【AI实战】微小目标检测模型MMDet-RFLA--训练环境搭建 RFLA介绍环境搭建安装依赖参考 RFLA介绍 官方连接 https://github.com/Chasel-Tsui/mmdet-rflaarxiv https://arxiv.org/abs/2208.08738 环境搭建 我的机器的cuda是10.2&#xff0c;根据自己的cuda版本到 https://hub.do…

python使用KDDockWidget

编译原理&#xff1a;KDDockWidget是一个C库&#xff0c;通过shiboken转成python的绑定支持。针对特殊版本&#xff0c;需要在cmake文件中增加一些变量。 注&#xff1a;本次编译&#xff0c;Qt版本统一指定为6.4.2&#xff0c;库支持Qt>5.12或6.2.0以上版本 下载仓库 Git…

解决npm安装慢卡顿reify:ajv: timing reifyNode问题、报错require() of ES Module

网上方法众多&#xff0c;但是都没有具体说明原因和具体解决办法 镜像优先推荐&#xff1a;cnpm 和 taobao 文章目录&#xff1a; 第一个错&#xff1a;Error [ERR_REQUIRE_ESM]: require() of ES Module 1.来源 2.错误显示 3.问题解决 第二个错&#xff1a; 卡顿在reify:…

(原创)Flutter基础入门:手把手教你搭建Flutter混合项目

前言 Flutter是Google开源的构建用户界面&#xff08;UI&#xff09;工具包 支持在不同平台构建一致的ui效果 但在实际业务中&#xff0c;一般不会整个APP都用纯Flutter开发 尤其一些老的项目&#xff0c;会采用接入Flutter的方式来混合开发 那么今天就主要讲一下如何搭建一个…

0424作业

实现串口收发字符/字符串 uart4.c #include "uart4.h"void hal_uart_init() {//rcc初始化//使能CPIOB组控制器RCC->MP_AHB4ENSETR | (0x1 << 1);//使能CPIOG组控制器RCC->MP_AHB4ENSETR | (0x1 << 6);//使能UART4控制器RCC->MP_APB1ENSETR | …