文本多分類

還在用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://www.pswp.cn/news/713732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言實現航班管理

航班管理系統&#xff0c;用C語言實現&#xff0c;可以作為課程設計&#xff0c;代碼如下&#xff1a; #include<iostream> #include<fstream> #include<vector> #include<string> #include<stdlib.h> using namespace std; //信息基類 clas…

Linux第67步_linux字符設備驅動_注冊和注銷

1、字符設備注冊與注銷的函數原型” /*字符設備注冊的函數原型*/ static inline int register_chrdev(unsigned int major,\ const char *name, \ const struct file_operations *fops) /* major:主設備號&#xff0c;Limnux下每個設備都有一個設備號&#xff0c;設備號分…

【六袆 - React】Next.js:React 開發框架;Next.js開發框架的特點

Next.js&#xff1a;React 開發框架 Next.js的特點 1.直觀的、基于頁面的路由系統&#xff08;并支持動態路由&#xff09; Next.js 提供了基于文件系統的路由&#xff0c;意味著你可以通過創建頁面文件來定義路由。 偽代碼示例&#xff1a; // pages/index.js export defa…

【GStreamer】basic-tutorial-2:創建、鏈接GstElement,修改其屬性、狀態

【目錄】郭老二博文之:圖像視頻匯總 1、示例注釋 #include <gst/gst.h>int main (int argc, char *argv[]) {GstElement *pipeline,

MYSQL--JDBC優化

一.JDBC優化: 優化前提: 有時候我們并不清楚某些表當中一共有多少列,以及這些列的數據類型,這個時候我們就需要提前通過一些方法提前了解到這些數據,從而更好的進行輸出 具體語句: package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String…

C語言中的動態內存管理技巧:實現靈活的內存分配和釋放

概念 在C語言中&#xff0c;動態內存管理是實現靈活內存分配和釋放的關鍵。合理地管理動態內存可以提高程序的效率和擴展性。本文將介紹C語言中常用的動態內存管理方法和技巧&#xff0c;幫助讀者優化內存分配和釋放的過程。 常用的動態內存管理方法 內存分配&#xff1a;C語…

【數學建模獲獎經驗】2023第八屆數維杯數學建模:華中科技大學本科組創新獎獲獎分享

2024年第九屆數維杯大學生數學建模挑戰賽將于&#xff1a;2024年5月10日08:00-5月13日09:00舉行&#xff0c;近期同學們都開始陸續進入了備賽階段&#xff0c;今天我們就一起來看看上一屆優秀的創新獎選手都有什么獲獎感言吧~希望能幫到更多熱愛數學建模的同學。據說點贊的大佬…

elment-ui table表格排序后 清除排序箭頭/恢復默認排序 的高亮樣式

問題描述&#xff1a; 1.默認排序是按照名稱升序排列&#xff08;圖一&#xff09; 2.在選擇了篩選項以及其他排序方式之后&#xff0c;箭頭高亮是這樣的&#xff08;圖二&#xff09; 3.當我點擊清空按鈕后&#xff0c;類型清空了&#xff0c;并且傳給后端的排序方式是名稱/升…

探索色彩搭配的奧秘:如何選擇適合產品的理想配色方案

title: 探索色彩搭配的奧秘&#xff1a;如何選擇適合產品的理想配色方案 date: 2024/3/1 20:47:45 updated: 2024/3/1 20:47:45 tags: 色彩搭配品牌形象用戶體驗情感連接信息傳達視覺層次色調選擇 引言 友善的色彩搭配和色調選擇是現代產品設計中不可忽視的關鍵因素。通過正確…

Linux yum安裝pgsql出現Bad GPG signature錯誤

官方文檔&#xff1a;https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

Rust使用calamine讀取excel文件,Rust使用rust_xlsxwriter寫入excel文件

Rust使用calamine讀取已存在的test.xlsx文件全部數據&#xff0c;還讀取指定單元格數據&#xff1b;Rust使用rust_xlsxwriter創建新的output.xlsx文件&#xff0c;并寫入數據到指定單元格&#xff0c;然后再保存工作簿。 Cargo.toml main.rs /*rust讀取excel文件*/ use cala…

Pytest-parametrize實現測試用例與測試數據分離

Pytest自動化框架&#xff0c;實現自動化測試用例與測試數據分離方法&#xff1a; 1.測試用例數據準備&#xff0c;使用yaml文件編輯&#xff0c;如下述teladress.yaml 2.通過pytest框架裝飾器pytest.mark.parametrize實現測試數據傳參 示例&#xff1a; 測試用例文件&…

Tomcat 架構

一、Http工作原理 HTTP協議是瀏覽器與服務器之間的數據傳送協議。作為應用層協議&#xff0c;HTTP是基于TCP/IP協議來傳遞數據的&#xff08;HTML文件、圖片、查詢結果等&#xff09;&#xff0c;HTTP協議不涉及數據包&#xff08;Packet&#xff09;傳輸&#xff0c;主要規定了…

c語言之字符串的輸入和輸出

c語言在輸出字符串時&#xff0c;用格式符‘%s"&#xff0c;代碼比較簡潔 如果說數組長度大于字符串長度&#xff0c;也只輸出\0前的內容 字符串默認后面有\0. 如果字符串有多個\0&#xff0c;會默認在第一個\0結束 #include<stdio.h> int main() {int i;char a…

GO數組切片

1. 數組 數組是一個由固定長度的特定類型元素組成的序列&#xff0c;一個數組可以由零個或多個元素組成。 因為數組的長度是固定的&#xff0c;所以在Go語言中很少直接使用數組。 Go語言數組的聲明&#xff1a; var 數組變量名 [元素數量]Type 1 數組變量名&#xff1a;數…

本地快速部署谷歌開放模型Gemma教程(基于WasmEdge)

本地快速部署谷歌開放模型Gemma教程&#xff08;基于WasmEdge&#xff09; 一、介紹 Gemma二、部署 Gemma2.1 部署工具2.1 部署步驟 三、構建超輕量級 AI 代理四、總結 一、介紹 Gemma Gemma是一系列輕量級、最先進的開放式模型&#xff0c;采用與創建Gemini模型相同的研究和技…

持續集成(CICD)- Jenkins插件安裝失敗解決辦法

解決辦法&#xff1a;將插件安裝更新源需要改成國內鏡像源 具體步驟如下&#xff1a; 步驟一&#xff1a;修改Jenkins工作目錄下的 hudson.model.UpdateCenter.xml 文件&#xff0c;將url 改為http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 步驟二…

RuoYi-Vue-Plus功能分析-jackson配置

文章目錄 前言一、配置文件二、配置類三、注解四、json工具類1. 工具內容2. 使用工具 前言 前端在給我發送請求的時候一般包含三個部分url&#xff0c;header&#xff0c;body。那么就會涉及我們后端如何接收這些請求參數并且我們處理完畢參數后前端又如何接收參數 通過url傳…

代碼隨想錄刷題筆記 DAY 37 | 動態規劃理論基礎 | 斐波那契數 No.509 | 爬樓梯 No.70 | 使用最小花費爬樓梯 No.746

文章目錄 Day 3700. 動態規劃理論基礎01. 斐波那契數&#xff08;No. 509&#xff09;<1> 題目<2> 筆記<3> 代碼 02. 爬樓梯&#xff08;No. 70&#xff09;<1> 題目<2> 筆記<3> 代碼 03. 使用最小花費爬樓梯&#xff08;No. 746&#xff…

ECMAScript-262 @2023版本中的關鍵字和保留字

1、什么是標識符&#xff1f; 所謂標識符&#xff0c;就是javascript里的變量、函數、屬性或函數參數的名稱&#xff0c;可由一個或多個字符組成&#xff0c;當然標識符有命名規范 標識符第一個字符必須是 一個字母、下劃線&#xff08;_&#xff09;或美元符號&#xff08;$…