文本多分类

还在用BERT做文本分类?分享一套基于预训练模型ERNIR3.0的文本多分类全流程实例【文本分类】_ernir 文本分类-CSDN博客

/usr/bin/python3 -m pip install --upgrade pip

python3-c"import platform;print(platform.architecture()[0]);print(platform.machine())"

python3 -m pip install paddlepaddle==2.5.2 -i https://mirror.baidu.com/pypi/simple  

python3 -m  pip install --upgrade paddlenlp -i https://mirror.baidu.com/pypi/simple

echo 'export PATH="/usr/local/python3/bin:$PATH"' >> ~/.bashrc

source ~/.bashrc

pip3 install --upgrade paddlenlp -i https://mirror.baidu.com/pypi/simple

echo 'export PATH="/usr/local/python3/bin:$PATH"' >> ~/.bashrc

source ~/.bashrc

pip3 install scikit-learn==1.0.2

3.2 文心ERNIE系列模型介绍

     最新开源ERNIE 3.0系列预训练模型:

  • 110M参数通用模型ERNIE 3.0 Base
  • 280M参数重量级通用模型ERNIE 3.0 XBase
  • 74M轻量级通用模型ERNIE 3.0 Medium

文档链接: https://github.com/PaddlePaddle/ERNIE
ERNIE模型汇总
ERNIE模型汇总

3.3 预训练模型加载

PaddleNLP内置了ERNIE、BERT、RoBERTa、Electra等40多个的预训练模型,并且内置了各种预训练模型对于不同下游任务的Fine-tune网络。用户可以使用PaddleNLP提供的模型,完成问答、序列分类、token分类等任务。

这里以ERNIE 3.0模型为例,介绍如何将预训练模型Fine-tune完成文本分类任务。

PaddleNLP采用AutoModelForSequenceClassification,AutoTokenizer提供了简单易用的接口,可以用过from_pretrained() 方法来加载不同的预训练模型,在输出层上叠加一层线性层,且相应预训练模型权重下载速度快、稳定。

下面以ERNIE 3.0中文base模型为基础,演示如何添加预训练语言模型和分词器:

-------------------------------------------------------------------------------------------------------------------------

sudo yum install git

git clone https://github.com/PaddlePaddle/PaddleNLP.git

pip3 install --upgrade paddlenlp

pip install paddlepaddle

参考:

PaddleNLP/applications/text_classification at develop · PaddlePaddle/PaddleNLP · GitHub

如何选择合适的方案和预训练模型、数据标注质量差、效果调优困难、AI入门成本高、如何高效训练部署等问题使部分开发者望而却步

文本分类应用针对多分类、多标签、层次分类等高频场景开源了产业级分类应用方案,打通数据标注-模型训练-模型调优-模型压缩-预测部署全流程,旨在解决细分场景应用的痛点和难点,快速实现文本分类产品落地。

  • 方案全面🎓: 涵盖多分类、多标签、层次分类等高频分类场景,提供预训练模型微调、提示学习(小样本学习)、语义索引三种端到端全流程分类方案,满足开发者多样文本分类落地需求。
  • 高效调优✊: 文本分类应用依托TrustAI可信增强能力和数据增强API,提供模型分析模块助力开发者实现模型分析,并提供稀疏数据筛选、脏数据清洗、数据增强等多种解决方案。

2.1 文本分类方案全覆盖

文本分类应用涵盖多分类(multi class)、多标签(multi label)、层次分类(hierarchical)三种场景

多分类🚶: 数据集的标签集含有两个或两个以上的类别,所有输入句子/文本有且只有一个标签。在文本多分类场景中,我们需要预测输入句子/文本最可能来自 n 个标签类别中的哪一个类别。以上图多分类中新闻文本为例,该新闻文本的标签为 娱乐

二分类/多分类数据集的标签集含有两个或两个以上的类别,所有输入句子/文本有且只有一个标签。在文本多分类场景中,我们需要预测输入句子/文本最可能来自 n 个标签类别中的哪一个类别。在本项目中二分类任务被视为多分类任务中标签集包含两个类别的情况,以下统一称为多分类任务。。多分类任务在商品分类、网页标签、新闻分类、医疗文本分类等各种现实场景中具有广泛的适用性。

问题 ---- lable --- {新闻,娱乐}

问题       lable       分类

-------------------------------

多分类数据标注-模型训练-模型分析-模型压缩-预测部署流程图


接下来我们将以CBLUE公开数据集KUAKE-QIC任务为示例,演示多分类全流程方案使用。下载数据集:

wget https://paddlenlp.bj.bcebos.com/datasets/KUAKE_QIC.tar.gz

tar -zxvf KUAKE_QIC.tar.gz

mv KUAKE_QIC data
rm -rf KUAKE_QIC.tar.gz

训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考文本分类任务doccano数据标注使用指南进行文本分类数据标注。指定格式本地数据集目录结构:

训练、开发、测试数据集 文件中文本与标签类别名用tab符'\t'分隔开,文本中避免出现tab符'\t'

2.4 模型训练

推荐使用 Trainer API 对模型进行微调。只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务,可以一键启动多卡训练、混合精度训练、梯度累积、断点重启、日志显示等功能,Trainer API 还针对训练过程的通用训练配置做了封装,比如:优化器、学习率调度等。

2.4.1 预训练模型微调

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/multi_class/README.md

使用CPU训练只需将设备参数配置改为--device cpu,可以使用--device gpu:0指定GPU卡号:

python3 train.py --do_train --do_eval --do_export --model_name_or_path ernie-3.0-tiny-medium-v2-zh --output_dir checkpoint --device cpu --num_train_epochs 100 --early_stopping True --early_stopping_patience 5 --learning_rate 3e-5 --max_length 128 --per_device_eval_batch_size 32 --per_device_train_batch_size 32 --metric_for_best_model accuracy --load_best_model_at_end --logging_steps 5 --evaluation_strategy epoch --save_strategy epoch --save_total_limit 1

python3 train.py --do_train --do_eval --do_export --model_name_or_path ernie-3.0-tiny-medium-v2-zh --output_dir checkpoint --device gpu:0 --early_stopping True --early_stopping_patience 5 --learning_rate 3e-5 --max_length 128 --per_device_eval_batch_size 32 --per_device_train_batch_size 32 --metric_for_best_model accuracy --load_best_model_at_end --logging_steps 5 --evaluation_strategy epoch --save_strategy epoch --save_total_limit 1


train

paddle.device.set_device('cpu')  

找个gpu的服务

https://aistudio.baidu.com/bd-cpu-01/user/7541663/7506482/lab

conda install cudatoolkit=10.2

参考:安装paddlepadddle-gpu的正确方式_please use paddlepaddle with gpu version-CSDN博客

python -m pip install paddlepaddle-gpu==2.5.2.post102 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

 python -m pip install paddlepaddle-gpu==2.5.2.post102 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

这个是好事gpu的,

find . -name "libcudart.so.10.2"

参考:https://blog.csdn.net/weixin_45742602/article/details/129386113

成功的命令:

python3 train.py --do_train --do_eval --do_export --model_name_or_path ernie-3.0-tiny-medium-v2-zh --output_dir checkpoint --device gpu:0 --early_stopping True --early_stopping_patience 5 --learning_rate 3e-5 --max_length 128 --per_device_eval_batch_size 32 --per_device_train_batch_size 32 --metric_for_best_model accuracy --load_best_model_at_end --logging_steps 5 --evaluation_strategy epoch --save_strategy epoch --save_total_limit 1

python3 train.py --do_train --do_eval --do_export --model_name_or_path ernie-3.0-tiny-medium-v2-zh --output_dir checkpoint --device gpu:0 --early_stopping_patience 5 --learning_rate 3e-5 --max_length 128 --per_device_eval_batch_size 16 --per_device_train_batch_size 16 --metric_for_best_model accuracy --load_best_model_at_end --logging_steps 5 --evaluation_strategy epoch --save_strategy epoch --save_total_limit 1

python3 train.py --do_train --do_eval --do_export --model_name_or_path ernie-3.0-tiny-medium-v2-zh --output_dir checkpoint --device gpu:0 --early_stopping_patience 5 --learning_rate 3e-5 --max_length 128 --metric_for_best_model accuracy --load_best_model_at_end --logging_steps 5 --evaluation_strategy epoch --save_strategy epoch --save_total_limit 1

终于跑成功了  要吐血了。。。!

nvidia-smi命令查看GPU使用情况:

主要的配置的参数为:

  • do_train: 是否进行训练。
  • do_eval: 是否进行评估。
  • debug: 与do_eval配合使用,是否开启debug模型,对每一个类别进行评估。
  • do_export: 训练结束后是否导出静态图。
  • do_compress: 训练结束后是否进行模型裁剪。
  • model_name_or_path: 内置模型名,或者模型参数配置目录路径。默认为ernie-3.0-tiny-medium-v2-zh
  • output_dir: 模型参数、训练日志和静态图导出的保存目录。
  • device: 使用的设备,默认为gpu
  • num_train_epochs: 训练轮次,使用早停法时可以选择100。
  • early_stopping: 是否使用早停法,也即一定轮次后评估指标不再增长则停止训练。
  • early_stopping_patience: 在设定的早停训练轮次内,模型在开发集上表现不再上升,训练终止;默认为4。
  • learning_rate: 预训练语言模型参数基础学习率大小,将与learning rate scheduler产生的值相乘作为当前学习率。
  • max_length: 最大句子长度,超过该长度的文本将被截断,不足的以Pad补全。提示文本不会被截断。
  • per_device_train_batch_size: 每次训练每张卡上的样本数量。可根据实际GPU显存适当调小/调大此配置。
  • per_device_eval_batch_size: 每次评估每张卡上的样本数量。可根据实际GPU显存适当调小/调大此配置。
  • max_length: 最大句子长度,超过该长度的文本将被截断,不足的以Pad补全。提示文本不会被截断。
  • train_path: 训练集路径,默认为"./data/train.txt"。
  • dev_path: 开发集集路径,默认为"./data/dev.txt"。
  • test_path: 测试集路径,默认为"./data/dev.txt"。
  • label_path: 标签路径,默认为"./data/label.txt"。
  • bad_case_path: 错误样本保存路径,默认为"./data/bad_case.txt"。
  • width_mult_list:裁剪宽度(multi head)保留的比例列表,表示对self_attention中的 qkv 以及 ffn 权重宽度的保留比例,保留比例乘以宽度(multi haed数量)应为整数;默认是None。 训练脚本支持所有TrainingArguments的参数,更多参数介绍可参考

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/applications/text_classification/multi_class/README.md

程序运行时将会自动进行训练,评估。同时训练过程中会自动保存开发集上最佳模型在指定的 output_dir 中,保存模型文件结构如下所示:

  • 中文训练任务(文本支持含部分英文)推荐使用"ernie-1.0-large-zh-cw"、"ernie-3.0-tiny-base-v2-zh"、"ernie-3.0-tiny-medium-v2-zh"、"ernie-3.0-tiny-micro-v2-zh"、"ernie-3.0-tiny-mini-v2-zh"、"ernie-3.0-tiny-nano-v2-zh"、"ernie-3.0-tiny-pico-v2-zh"。
2.4.2 训练评估

训练后的模型我们可以开启debug模式,对每个类别分别进行评估,并打印错误预测样本保存在bad_case.txt

python train.py \
    --do_eval \
    --debug True \
    --device gpu \
    --model_name_or_path checkpoint \
    --output_dir checkpoint \
    --per_device_eval_batch_size 32 \
    --max_length 128 \
    --test_path './data/dev.txt'

python train.py --do_eval --debug --device gpu:0 --model_name_or_path checkpoint --output_dir checkpoint --per_device_eval_batch_size 32 --max_length 128 --test_path './data/dev.txt'

文本分类预测过程中常会遇到诸如"模型为什么会预测出错误的结果","如何提升模型的表现"等问题。Analysis模块 提供了可解释性分析、数据优化等功能,旨在帮助开发者更好地分析文本分类模型预测结果和对模型效果进行优化。

2.4.3 模型裁剪(可选)

如果有模型部署上线的需求,需要进一步压缩模型体积,可以使用 PaddleNLP 的 压缩API, 一行命令即可启动模型裁剪。

pip install paddleslim==2.4.1

python train.py \--do_compress \--device gpu \--model_name_or_path checkpoint \--output_dir checkpoint/prune \--learning_rate 3e-5 \--per_device_train_batch_size 32 \--per_device_eval_batch_size 32 \--num_train_epochs 1 \--max_length 128 \--logging_steps 5 \--save_steps 100 \--width_mult_list '3/4' '2/3' '1/2'

还是没有成功。。。

 nvcc -V

https://gitee.com/paddlepaddle/PaddleSlim

还是有问题  尚未解决

2.5 模型预测

可配置参数说明

  • task_path:自定义任务路径,默认为None。
  • is_static_model:task_path中是否为静态图模型参数,默认为False。
  • max_length:最长输入长度,包括所有标签的长度,默认为512。
  • batch_size:批处理大小,请结合机器情况进行调整,默认为1。
  • id2label:标签映射字典,如果task_path中包含id2label.json或加载动态图参数无需定义。
  • precision:选择模型精度,默认为fp32,可选有fp16fp32fp16推理速度更快。如果选择fp16,请先确保机器正确安装NVIDIA相关驱动和基础软件,确保CUDA>=11.2,cuDNN>=8.1.1,初次使用需按照提示安装相关依赖。

用这个服务器即可,环境已搭建好了:

ERNIE 3.0_体验1 (baidu.com)

2.6 模型效果

在线服务化部署搭建请参考:

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

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

相关文章

Linux--Redis 群集

9.1.1 关系型数据库与非关系型数据库 数据库按照其结构可以分为关系型数据库与其他数据库,而这些其他数据库我们将其统称为非 关系型数据库。Redis数据库是一个非关系型数据库。 1、关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型基础上…

MATLAB练习题:排队论问题的模拟

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…

硬盘坏了怎么把数据弄出来?数据恢复方法推荐

在数字化时代电脑硬盘中的数据承载着我们的工作成果、生活回忆和珍贵资料。然而一旦硬盘出现故障,数据的安全就变得岌岌可危。那么当电脑硬盘出现问题时,我们真的无法挽回那些重要数据了吗?答案是:不一定!本文将为您介…

【GPU驱动开发】- AST简介

前言 不必害怕未知,无需恐惧犯错,做一个Creator! AST,抽象语法树,是一种包含丰富语义信息的格式,其中包括类型、表达式树和符号等。 TranslationUnitDecl:该类表示一个输入源文件 ASTContext&…

Socket网络编程(六)——简易聊天室案例

目录 聊天室数据传输设计客户端、服务器数据交互数据传输协议服务器、多客户端模型客户端如何发送消息到另外一个客户端2个以上设备如何交互数据? 聊天室消息接收实现代码结构client客户端重构server服务端重构自身描述信息的构建重构TCPServer.java基于synchronize…

Android 12.0 framework关于systemUI定制之导航栏透明背景的功能实现

1.概述 在12.0的系统rom产品定制化开发中,在对于系统原生SystemUI的导航栏背景在沉浸式导航栏的 情况下默认是会随着背景颜色的变化而改变的,在一些特定背景下导航栏的背景也是会改变的,所以由于产品开发需要 要求需要设置导航栏背景为透明的,所以就需要在Activity创建的时…

第十五天-爬虫项目实战

目录 1.介绍 2.代码 1.main.py 2.PageSider.py 3.DetailSpider.py 4.DataParse.py 5.Constant.py 6.HanderRequest.py 1.介绍 1. 使用多线程爬取网站 2.爬取数据后保存至excel 3.爬取网站(仅做测试)网创类项目爬取:https://www.maomp.com/ 4..实现效果 …

Java已死?凛冽寒风,刺骨现实

文章首发于公众号:职谷智享 2024年,寒风凛冽,不仅吹进了人们的衣领,也吹进了程序员的心里。曾经风光无限的Java,如今似乎正在走向末路。 招聘需求骤减,求职者如过江之鲫 猎聘网的数据显示,20…

Linux 任务进程命令练习

1、通过ps命令的两种选项形式查看进程信息 2、通过top命令查看进程 3、通过pgrep命令查看sshd服务的进程号 4、查看系统进程树 5、使dd if/dev/zero of/root/file bs1M count8190 命令操作在前台运行 6、将第5题命令操作调入到后台并暂停 7、使dd if/dev/zero of/root/file2 bs…

Flutter中Future和Stream关系

Future和Stream类是Dart异步编程的核心。 Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的 Future。该 Future 会在结果准备好时通知调用者。 Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable,…

力扣SQL50 大的国家 查询

Problem: 595. 大的国家 Code select name,population,area from World where area > 3000000 or population > 25000000;

国外站群服务器科普:定义、用途与价值

在数字化时代,服务器扮演着至关重要的角色,而站群服务器则是其中的一种特殊形态。尤其对于需要在全球范围内进行业务部署的企业或个人来说,国外站群服务器成为了不可或缺的工具。那么,国外站群服务器究竟是什么呢?它有哪些用途呢…

【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二分法和like模糊搜索

sqli-labs-master 54-65 Challenges 其他关卡和靶场见专栏… 文章目录 sqli-labs-master 54-65 Challenges第五十四关-联合注入第五十五关-联合注入第五十六关-联合注入第五十七关-联合注入第五十八关-报错注入第五十九关-报错注入第六十关-报错注入第六十一关-报错注入第六十…

抖音视频评论批量采集软件|视频数据提取工具

开发背景: 随着抖音视频的流行和使用频率增加,用户对批量采集抖音视频评论的需求逐渐凸显。传统的下载方式效率低下,无法满足快速采集数据的要求。为了解决这一问题,我们开发了一款基于C#的抖音视频评论批量采集软件,旨…

React富文本编辑器开发(三)

现在我们的编辑器显示的内容很单一,这自然不是我们的目标,让呈现的内容多元化是我们的追求。这就需要让编辑器能够接收多元素的定义。从初始数据的定义我们可以推断数据的格式远不止一种,那么其它类型的数据如何定义及呈现的呢,我…

kohya_ss, stable diffusion 显示MaxRetryError: HTTPSConnectionPool()的解决方法

说白了就是访问huggingface.co下载模型、json配置失败,需要挂梯子。 然而有时候明明开了梯子,网页端可以访问google、huggingface.co却依然报上述错。 这时候说明没有开代理,执行的脚本没有连接上梯子对应的端口。 解决办法:手…

【MySQL】数据库中常用的函数

目录 聚合函数COUNT()函数的多种用法COUNT(*)COUNT(主键)COUNT(1)COUNT(常量)COUNT(非主键)COUNT(distinct(字段)) COUNT()函数小结 字符函数length(str)函数:获取参数值的字节个数concat(str1,str2,...)函数:字符串拼接upper(str)、lower(str)函数:大小…

pdf.js使用步骤

使用pdfjs 网页在线预览需要后端服务器支持 1、下载PDF.js 源码包 地址:PDF.js 2、解压源码包,将源码包放置到后端服务器 3、后端部署完成后 访问 viewer.html 类似上图 4、访问在线pdf文件 http://localhost:8081/web/viewer.html?filexxxx.pdf …

[⑥5G NR]: 无线接口协议,信道映射学习

5G系统整体包括核心网、接入网以及终端部分,接入网与终端间通过无线空口协议栈进行连接。无线接口可分为三个协议层:物理层(L1)、数据链路层(L2)和网络层(L3)。 L1:物理…

JVM运行时数据区——虚拟机栈

文章目录 1、虚拟机栈概述1.1、StackOverflowError1.2、OOM异常 2、栈的存储单位3、局部变量表3.1、局部变量表简介3.2、Slot 4、操作数栈5、栈顶缓存技术6、动态链接7、方法的调用7.1、方法调用的分类7.2、虚方法与非虚方法7.3、关于invokedynamic指令7.4、方法重写的本质7.5、…