因此,在本文,将使用transformers库、使用大模型、做一个文本分类任务。这也只是作为一个开始,后面也会介绍更多的nlp任务。
本文虽然是介绍一个大模型做文本分类任务,难道我就是单纯的上代码?并不是
Tokenizer
和模型到底是有什么功能,他们是怎么管理数据的。那就这样,让我们进入文本分类任务中吧
code_01_processdata.ipynb
code_01_processdata.ipynb
文件跑完之后,就可以看到在data_all
里面有一个data
,里面有三个文件,样式都是像下面这样的上图是一个batch
的数据,或者所有的文本分类的数据样式:
text
下面的红色条,就是一个个句子。label
里面有红色有绿色,就是表示标签分类。transformers
包做分类的时候,数据要求就这两列。注意点:
train_data.csv
,test_data.csv
,valid_data.csv
,这三个csv
文件注意是使用,
分割开的。label
,text
label
:表示标签,最好为整型数值。0,1,2,3,4等text
:表示文本,(看你需求,可以有符号,也可以没有标点符号)train_data.csv
,test_data.csv
,valid_data.csv
这三个数据里面,不要有数据相同的,不然会造成数据泄漏。code_02_trainmodel.ipynb
以一个batch为例:
Tokenizer
会将数据中的text
转换成三个矩阵(或者叫三个Tensor
),分别叫input_ids
,token_type_ids
,attention_mask
,至于怎么转换的,我们先不做详细介绍(本仓库后续会介绍)。pretrained model
在被加载之前,需要设置一大堆模型的参数,至于要设置什么参数,我们也不做详细介绍。Trainer
就是一个训练器,也需要预先设置好一大堆参数。至于要设置什么参数,我们也不做详细介绍。Trainer
会把input_ids
,token_type_ids
,attention_mask
;还有数据自带的标签label
;还有pretrained model
都加载进来,进行训练;your new model
就诞生了。大模型做nlp分类
的任务,其实不需要考虑那么多细节,只需要注意数据流程。注意点:
batch_size
,eval_size
大小取决于显存大小。Tokenizer
把所有的文本转换成input_ids
,token_type_ids
,attention_mask
,然后在训练的时候,这步就不再做了,目的是减少训练过程中cpu处理数据的时间,不给显卡休息时间。Tokenizer
把所有的文本做转换的期间,如果设置的文本的长度上限为64,那么会把大于64的文本截断;那些少于64的文本,会在训练的时候,在喂入模型之前,把长度补齐,这么做就是为了减少数据对内存的占用。code_03_predict.ipynb
pipeline
(这个就是把Tokenizer
和你的大模型
放在一起了),然后这个pipeline
就给你返回一个分类结果。pipeline
,如果更加复杂的话,比如修改模型,这个时候,就比较复杂了(后面会再次介绍)。部署
相对于预测
,其实就是再加一层web端口,fastapi包就可以实现。部署
相对于预测
,就需要把模型从pytorch
转换成onnx
格式的,这样可以提高推理效率(也不一定,就是举个例子),可能也不会使用web端口(http协议)了,会使用rpc协议等方法。这部分现在先不看。