# 使用预训练模型Fine-tune完成中文文本分类任务
在2017年之前,工业界和学术界对NLP文本处理依赖于序列模型[Recurrent Neural Network (RNN)](../rnn).
<p align="center">
<img src="http://colah.github.io/posts/2015-09-NN-Types-FP/img/RNN-general.png" width="40%" height="30%"> <br />
</p>
[paddlenlp.seq2vec是什么? 瞧瞧它怎么完成情感分析](https://aistudio.baidu.com/aistudio/projectdetail/1283423)教程介绍了如何使用`paddlenlp.seq2vec`表征文本语义。
近年来随着深度学习的发展,模型参数的数量飞速增长。为了训练这些参数,需要更大的数据集来避免过拟合。然而,对于大部分NLP任务来说,构建大规模的标注数据集非常困难(成本过高),特别是对于句法和语义相关的任务。相比之下,大规模的未标注语料库的构建则相对容易。为了利用这些数据,我们可以先从其中学习到一个好的表示,再将这些表示应用到其他任务中。最近的研究表明,基于大规模未标注语料库的预训练模型(Pretrained Models, PTM) 在NLP任务上取得了很好的表现。
近年来,大量的研究表明基于大型语料库的预训练模型(Pretrained Models, PTM)可以学习通用的语言表示,有利于下游NLP任务,同时能够避免从零开始训练模型。随着计算能力的发展,深度模型的出现(即 Transformer)和训练技巧的增强使得 PTM 不断发展,由浅变深。
<p align="center">
<img src="https://ai-studio-static-online.cdn.bcebos.com/327f44ff3ed24493adca5ddc4dc24bf61eebe67c84a6492f872406f464fde91e" width="60%" height="50%"> <br />
</p>
本图片来自于:https://github.com/thunlp/PLMpapers
本示例展示了以ERNIE([Enhanced Representation through Knowledge Integration](https://arxiv.org/abs/1904.09223))代表的预训练模型如何Finetune完成中文文本分类任务。
## 模型简介
本项目针对中文文本分类问题,开源了一系列模型,供用户可配置地使用:
+ BERT([Bidirectional Encoder Representations from Transformers](https://arxiv.org/abs/1810.04805))中文模型,简写`bert-base-chinese`, 其由12层Transformer网络组成。
+ ERNIE([Enhanced Representation through Knowledge Integration](https://arxiv.org/abs/1904.09223)),支持ERNIE 1.0中文模型(简写`ernie-1.0`)和ERNIE Tiny中文模型(简写`ernie-tiny`)。
其中`ernie`由12层Transformer网络组成,`ernie-tiny`由3层Transformer网络组成。
+ RoBERTa([A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)),支持24层Transformer网络的`roberta-wwm-ext-large`和12层Transformer网络的`roberta-wwm-ext`。
| 模型 | dev acc | test acc |
| ---- | ------- | -------- |
| bert-base-chinese | 0.93833 | 0.94750 |
| bert-wwm-chinese | 0.94583 | 0.94917 |
| bert-wwm-ext-chinese | 0.94667 | 0.95500 |
| ernie-1.0 | 0.94667 | 0.95333 |
| ernie-tiny | 0.93917 | 0.94833 |
| roberta-wwm-ext | 0.94750 | 0.95250 |
| roberta-wwm-ext-large | 0.95250 | 0.95333 |
| rbt3 | 0.92583 | 0.93250 |
| rbtl3 | 0.9341 | 0.93583 |
## 快速开始
### 代码结构说明
以下是本项目主要代码结构及说明:
```text
pretrained_models/
├── deploy # 部署
│ └── python
│ └── predict.py # python预测部署示例
│ └── serving
│ ├── client.py # 客户端预测脚本
│ └── export_servable_model.py # 导出Serving模型及其配置
├── export_model.py # 动态图参数导出静态图参数脚本
├── predict.py # 预测脚本
├── README.md # 使用说明
└── train.py # 训练评估脚本
```
### 模型训练
我们以中文情感分类公开数据集ChnSentiCorp为示例数据集,可以运行下面的命令,在训练集(train.tsv)上进行模型训练,并在开发集(dev.tsv)验证
```shell
$ unset CUDA_VISIBLE_DEVICES
$ python -m paddle.distributed.launch --gpus "0" train.py --device gpu --save_dir ./checkpoints --use_amp False
```
可支持配置的参数:
* `save_dir`:可选,保存训练模型的目录;默认保存在当前目录checkpoints文件夹下。
* `dataset`:可选,xnli_cn,chnsenticorp 可选,默认为chnsenticorp数据集。
* `max_seq_length`:可选,ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数;默认为128。
* `batch_size`:可选,批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为32。
* `learning_rate`:可选,Fine-tune的最大学习率;默认为5e-5。
* `weight_decay`:可选,控制正则项力度的参数,用于防止过拟合,默认为0.00。
* `epochs`: 训练轮次,默认为3。
* `valid_steps`: evaluate的间隔steps数,默认100。
* `save_steps`: 保存checkpoints的间隔steps数,默认100。
* `logging_steps`: 日志打印的间隔steps数,默认10。
* `warmup_proption`:可选,学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0.1。
* `init_from_ckpt`:可选,模型参数路径,热启动模型训练;默认为None。
* `seed`:可选,随机种子,默认为1000.
* `device`: 选用什么设备进行训练,可选cpu或gpu。如使用gpu训练则参数gpus指定GPU卡号。
* `use_amp`: 是否使用混合精度训练,默认为False。
代码示例中使用的预训练模型是ERNIE,如果想要使用其他预训练模型如BERT等,只需更换`model` 和 `tokenizer`即可。
```python
# 使用ernie预训练模型
# ernie-1.0
model = ppnlp.transformers.ErnieForSequenceClassification.from_pretrained('ernie-1.0',num_classes=2))
tokenizer = ppnlp.transformers.ErnieTokenizer.from_pretrained('ernie-1.0')
# 使用bert预训练模型
# bert-base-chinese
model = ppnlp.transformers.BertForSequenceClassification.from_pretrained('bert-base-chinese', num_class=2)
tokenizer = ppnlp.transformers.BertTokenizer.from_pretrained('bert-base-chinese')
```
更多预训练模型,参考[transformers](../../../docs/model_zoo/transformers.rst)
程序运行时将会自动进行训练,评估,测试。同时训练过程中会自动保存模型在指定的`save_dir`中。
如:
```text
checkpoints/
├── model_100
│ ├── model_config.json
│ ├── model_state.pdparams
│ ├── tokenizer_config.json
│ └── vocab.txt
└── ...
```
**NOTE:**
* 如需恢复模型训练,则可以设置`init_from_ckpt`, 如`init_from_ckpt=checkpoints/model_100/model_state.pdparams`。
* 如需使用ernie-tiny模型,则需要提前先安装sentencepiece依赖,如`pip install sentencepiece`
* 使用动态图训练结束之后,还可以将动态图参数导出成静态图参数,具体代码见export_model.py。静态图参数保存在`output_path`指定路径中。
运行方式:
```shell
python export_model.py --params_path=./checkpoint/model_900/model_state.pdparams --output_path=./export
```
其中`params_path`是指动态图训练保存的参数路径,`output_path`是指静态图参数导出路径。
导出模型之后,可以用于部署,deploy/python/predict.py文件提供了python部署预测示例。运行方式:
```shell
python deploy/python/predict.py --model_dir=./export
```
### 模型预测
启动预测:
```shell
export CUDA_VISIBLE_DEVICES=0
python predict.py --device 'gpu' --params_path checkpoints/model_900/model_state.pdparams
```
将待预测数据如以下示例:
```text
这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般
怀着十分激动的心情放映,可是看着看着发现,在放映完毕后,出现一集米老鼠的动画片
作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于传统方法和深度学习方法实现意图识别python源码+数据集+项目说明.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于传统方法和深度学习方法实现意图识别python源码+数据集+项目说明.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于传统方法和深度学习方法实现意图识别python源码+数据集+项目说明.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于传统方法和深度学习方法实现意图识别python源码+数据集+项目说明.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的
资源推荐
资源详情
资源评论
收起资源包目录
基于传统方法和深度学习方法实现意图识别python源码+数据集+项目说明.zip (283个子文件)
基于微博的消费意图挖掘_陈浩辰.caj 2.96MB
一种基于AdaBoost和SVM的短文本分类模型_贾俊华.caj 2.12MB
tokenizer.cc 24KB
seq_cls_infer.cc 4KB
predict.csv 4.64MB
snips_train_df.csv 3.81MB
train.csv 822KB
Bi-LSTM(非预训练模型)_错误.csv 783KB
ERNIE(预训练模型)_错误.csv 656KB
ERNIE(预训练模型)_正确_Bi-LSTM(非预训练模型)_错误.csv 358KB
train.csv 303KB
atis.train.query.csv 259KB
atis.train.query.csv 259KB
atis.train.slots.csv 242KB
atis.train.slots.csv 242KB
ERNIE(预训练模型)_错误_Bi-LSTM(非预训练模型)_正确.csv 231KB
snips_test_df.csv 197KB
dev.csv 65KB
test.csv 60KB
test.csv 44KB
dev.csv 43KB
atis.test.query.csv 43KB
atis.test.query.csv 43KB
atis.test.slots.csv 40KB
atis.test.slots.csv 40KB
atis.train.intent.csv 14KB
atis.train.intent.csv 14KB
error.csv 10KB
atis.dict.vocab.csv 6KB
atis.dict.vocab.csv 6KB
atis.test.intent.csv 2KB
atis.test.intent.csv 2KB
atis.dict.slots.csv 2KB
atis.dict.slots.csv 2KB
atis.dict.intent.csv 323B
atis.dict.intent.csv 323B
error.csv 98B
tokenizer.h 6KB
seq.in 603KB
seq.in 603KB
seq.in 283KB
seq.in 283KB
seq.in 51KB
seq.in 51KB
seq.in 33KB
seq.in 33KB
seq.in 32KB
seq.in 32KB
seq.in 32KB
seq.in 32KB
atis-2.train+dev.w-intent.iob 879KB
atis-2.train+dev.w-intent.iob 879KB
atis-2.train+dev.w-intent.iob 879KB
atis-2.train+dev.w-intent.iob 879KB
atis.test.w-intent.iob 150KB
atis.test.w-intent.iob 150KB
atis.test.w-intent.iob 150KB
atis.test.w-intent.iob 150KB
model.jpg 48KB
model.jpg 48KB
model.jpg 48KB
model.jpg 48KB
train.json 4.37MB
train.json 4.37MB
test.json 770KB
test.json 770KB
en.json 5KB
en.json 5KB
zh.json 4KB
zh.json 4KB
label 180KB
label 180KB
label 56KB
label 56KB
label 11KB
label 11KB
label 10KB
label 10KB
label 10KB
label 10KB
label 6KB
label 6KB
LICENSE 11KB
LICENSE 11KB
README.md 12KB
README.en-US.md 4KB
README.en-US.md 4KB
README.md 4KB
README.md 4KB
README.md 4KB
README.md 2KB
README.md 1KB
readme.md 1KB
readme.md 1KB
readme.md 1KB
readme.md 1KB
seq.out 929KB
seq.out 929KB
seq.out 406KB
seq.out 406KB
共 283 条
- 1
- 2
- 3
资源评论
- suye_yhs012024-06-11超赞的资源,感谢资源主分享,大家一起进步!
盈梓的博客
- 粉丝: 7229
- 资源: 1964
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 运算放大器基础.pdf
- 本仓库包含我们队伍2019年数模美赛题目A、我们的代码及论文
- 基于JavaWeb图书管理系统课程设计软件源码+数据库+实验报告
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6172.0)
- WesternDigital-SSD-Dashboard-v4.2.2.5
- 计算机视觉,课后习题部分解答(章毓晋)
- “推荐系统”相关资源推荐
- 软件工程期末复习笔记 快速冲刺
- 毕业设计基于Spring Boot的健身房管理系统源码+数据库+使用文档(高分项目)
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6170.3)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功