太简单了吧!!!
现在随着深度学习各种框架以及高阶API的封装,自己从头搭一个模型真的是成本太低了,说白了,也就是现在入门或者简单跑跑demo的门槛几乎为零,接下来就简单的聊聊两个库的使用吧
对于NLPer 的同学来说, transformres 这个包应该是在熟悉不过了,如果你还没用过这个东西,说明你已经落后啦(其实也不能这样说,应该说如果你还没fine-tuning过bert相关模型,那你就落后主流NLP技术啦)
nlp 这个包其实是类似 Tensorflow Datasets 的一个东西,反正就是来对数据预处理转成tensor的一个东西
废话少说, talk is cheaper, show me the code.
以文本分类为demo说起吧
如果单纯的使用 transformers来做文本分类,大概是长下面这个样子的
下载bert预训练文件
加载两个类 BertForSequenceClassification , BertTokenizer
定义 optimizer
加载数据转到batch-tensor, 数据大概长下面这个样子(anyway, 随你自己怎么定吧)
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
'version':'0.0.1',
'train':[
{
'sent':'我是一个句子',
'label':'pos'
},
{
'sent':'我是一个句子',
'label':'pos'
},
...
]
}
训练模型
1 | import torch |
没啥废话好说的,一个文本分类任务就是这么快,不费任何脑子
上面demo还是有一点烦, 需要自己构造一个batch,以及model.forward() loss.backward() optimizer.step() 等一系列操作,那能不能不要自己弄呢,答案是,可以,看下面
如果在加上 nlp 这个数据预处理模块,那真的是更加酸爽,直接看代码吧,处理的方式大致是一样的
下载bert预训练文件
加载两个类 BertForSequenceClassification , BertTokenizer
通过 nlp 来对数据做预处理,转成batch-tensor, 数据大概就是一个json 一行存储,如下:
1
2{'sent''我是一个句子', 'label':'1'}
{'sent''我是一个句子', 'label':'1'}
定义 TrainingArguments
通过 Trainer 开启 训练,验证,推理等一系列操作
1 | from nlp import load_dataset |
就是这么简单 !!!!!!!