Transformers文本分类微调和TensorRT推理加速

本文详述了使用Transformers进行文本分类模型的微调过程,包括数据准备、模型加载、训练参数设置及验证。接着,文章演示了如何将模型转换为.pth、Onnx格式,并通过TensorRT进行模型加速,详细介绍了TensorRT的Docker环境配置、模型转换及推理流程。
摘要由CSDN通过智能技术生成

Transformers文本分类微调和TensorRT推理加速

本文介绍了使用Transformers模块微调文本分类模型,以及模型转pth格式,进而转为onnx格式和TensorRT的engine格式,最后通过TensorRT进行推理的完整流程

PS: 大模型基础和进阶付费课程(自己讲的):《AIGC大模型理论与工业落地实战》-CSDN学院 或者《AIGC大模型理论与工业落地实战》-网易云课堂

开发环境简介

宿主机环境

Linux version:  Ubuntu20.04
Docker version: 20.10.20
Python version: 3.8.5 (3.6-3.9)
NVIDIA version: 1080Ti
Cuda version: cuda11.6 (>11.1)
Driver version: 510.47.03 (>460)

Python packages:

transformers           4.24.0
torch                  1.13.0+cu116
scikit-learn           1.1.3
pandas                 1.5.1
numpy                  1.23.5

容器内环境

容器由TensorRT DockerFile构建,将在后续进行介绍,这里只介绍python环境

Python version: 3.6.9

Python packages:

numpy               1.19.5
pycuda              2022.1
torch               1.10.2+cu111
transformers        4.18.0

一. 准备数据

1.数据样例

数据集可以从 数据样例这里进行下载

(base) ys@ys:~/Documents/my_trt/data$ head -10 dev.csv 
label,txt
-1,一个月都有点卡了,
1,手机很不错,玩游戏很流畅,快递小哥态度特别特别特别好,重要的事情说三遍?
1,初步用了一下,开始拿到手觉得真**大,玩了一会以后 真香!玩游戏很爽,双扬声器看片也很震撼~拍照的话现在还凑活看后期更新优化吧!这款手机比较适合影音娱乐用,一般人不建议用。
-1,续航不行 玩吃鸡卡
1,物流配送速度很快,三天左右就到了,画面清晰,音质还挺好的,总之超喜欢的
0,着好看,都挺不错的。   但是京东的保价,双十一便宜100元,联系客服,说退100,这都10多天了,仍然没有解决。
1,手机是正品,质量很好,速度很快,价格不比别家便宜,还送膜、送耳机、送自拍神器。谢谢商家!
1,机很流畅,买的很好的一次,下次还要购买,一点都不卡。
0,不能再相信它了

标注为1表示情感积极,标注为0表示情感中立,标注为-1表示情感消极

(base) ys@ys:~/Documents/my_trt/data$ tree
.
├── dev.csv
├── test.csv
└── train.csv

2.数据处理

#!/usr/bin/env python
# coding: utf-8

# ## 读取本地数据

import pandas as pd

df_train = pd.read_csv("data/train.csv")
df_dev   = pd.read_csv("data/dev.csv")
df_test  = pd.read_csv("data/test.csv")

dict_key = {
   -1:2, 0:0, 1:1}  # 标签为-1的改为2,其他保持不变;标签-1在Transformers中读取会报错
df_train["label"] = df_train["label"].apply(lambda x: dict_key[x])
df_dev["label"]   = df_dev["label"].apply(lambda x: dict_key[x])
df_test["label"]  = df_test["label"].apply(lambda x: dict_key[x])

3.构造DataSets格式数据

import os
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from sklearn.metrics import accuracy_score, precision_recall_fscore_support
from transformers import Trainer, TrainingArguments
from transformers import pipeline, DataCollatorWithPadding
from datasets import load_dataset, Dataset, Features, Value, ClassLabel

# 构造dataset格式数据集

class_names = [0, 1, 2]
features = Features({
   'txt': Value('string'), 'label': ClassLabel(names=class_names)})

train_dataset = Dataset.from_pandas(df_train, split="train", features=features)
dev_dataset = Dataset.from_pandas(df_test, split="dev", features=features)
test_dataset = Dataset.from_pandas(df_test, split="test", features=features)

二.下载和加载预训练模型

1.下载bert预训练模型参数

前往https://huggingface.co/models,搜索bert-base-chinese,在Files and versions中下载三个文件

(base) ys@ys:~/Documents/my_trt/bert-base-chinese$ tree
.
├── config.json
├── pytorch_model.bin
└── vocab.txt

2.加载bert预训练模型参数


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: transformers是一个自然语言处理库,可以用于中文文本分类任务。中文文本分类是指将一段中文文本分为不同的类别,例如新闻分类、情感分析等。使用transformers可以方便地进行中文文本分类,其中包括预训练模型、fine-tuning等功能,可以大大提高分类的准确性和效率。 ### 回答2: Transformers是当前自然语言处理领域的热门技术之一,其模型在多项任务上都达到了state-of-the-art的效果。其中,中文文本分类就是一个非常关键的任务,它在实际应用中有着广泛的应用,例如新闻分类、情感分析、评论分类等。下面我将结合实际案例,详细介绍如何用transformers进行中文文本分类。 首先,我们需要准备数据集。本文以THUCNews数据集为例,该数据集包含10个类别、21万篇新闻文本,可以从清华大学开源网站下载。我们可以使用Python的pandas库将数据集读入内存中,以便后续处理。 接下来,我们需要对数据进行预处理。由于transformers模型需要输入固定长度的文本序列,通常我们需要将数据调整为等长的形式。为了保留文本的信息,我们可以选取定长的截断方式,将文本截断为固定长度,或者使用padding方式,将长度不足的文本补齐。在处理中文文本时,一般需要进行分词,将文本换为单词序列。我们可以使用jieba库对中文文本进行分词,或者使用其他中文分词库。分词之后,我们需要将每个单词换为对应的id值,以便输入模型中。可以使用tokenizer库完成这个工作。 接下来,我们就可以进行模型训练了。常见的transformers模型包括BERT、GPT、RoBERTa等。本文以BERT模型为例,使用Hugging Face开源的transformers库进行实现。在训练模型之前,我们需要先构建模型的结构,并且设置模型的参数。在本文中,我们使用BERT-base模型,并且设置Batch size为32,Epoch为5,learning_rate为2e-5。利用pytorch框架的torch.nn库可以很方便地搭建BERT模型的结构。模型训练完成之后,我们可以对测试集进行预测,并且计算模型的准确率、召回率、F1得分等指标,以评估模型的性能。 综上所述,在使用transformers进行中文文本分类时,主要需要完成以下几个工作:准备数据、数据预处理、构建模型模型训练和模型评估。使用transformers进行中文文本分类,可以帮助我们快速构建高效的文本分类模型,能够节省很多工作量和时间,对于提高文本分类任务的处理效率具有重要意义。 ### 回答3: 自然语言处理中的中文文本分类是一项重要的任务,而 Transformers 模型是当前最热门的深度学习模型之一。在中文文本分类任务中,使用 Transformers 模型可以取得优秀的效果。 Transformers 模型的优点是能够理解上下文的语义和关系,从而避免了以往使用 RNN 和 LSTM 模型时的序列问题。中文文本分类任务大致可以分为以下几个步骤: 1. 数据预处理:将原始的中文文本化成机器可读的形式。对于中文文本,需要进行分词、去除停用词等预处理操作。 2. 构建训练集和测试集:按照一定的比例将原始数据划分为训练集和测试集。通常使用 80% 的数据作为训练集,20% 的数据作为测试集。 3. 搭建 Transformers 模型:使用 Transformers 模型进行中文文本分类。在搭建模型之前,需要对所使用的模型进行了解,例如 BERTBERT-wwm、RoBERTa 等,这些模型都可以选择。 4. 训练模型:使用训练集对模型进行训练。在训练过程中,需要对模型进行参数调整和监督。 5. 后处理:在对测试集进行预测时,需要对模型预测的结果进行后处理,以进行分类。 在中文文本分类任务中,还需要注意以下几点: 1. 中文语言特性:中文文本与英文文本有很大的区别,例如中文没有空格等等。因此在分词和处理中文语言时,需要注意这些特性。 2. 数据量问题:中文文本数据量其实是比较少的,因此需要注意数据的选择和筛选,保证数据量足够。 3. 模型的复杂性:虽然使用 Transformers 模型可以取得优秀的效果,但是模型的复杂性也相对较高,需要更好的计算资源和算法调整。 总之,在中文文本分类任务中使用 Transformers 模型是一种非常有效的方法。通过以上步骤的处理,可以取得非常好的分类效果,并且可以应用于很多实际场景中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NLP小讲堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值