使用实践:Paddle分类模子的集成者[PaddleHub、Finetune、prompt
1.基于PaddleHub下的分类模子构建
PaddleHub--API接口文档分析:碰到不晓得参数设置具体情况清查接口分析!!!
https://paddlehub.readthedocs.io/zhCN/release-v2.1/apiindex.html
使用PaddleHub Fine-tune API举行Fine-tune可以分为4个步调。
- 选择模子
- 加载数据集
- 选择优化战略和运转设置
- 实行fine-tune并评价模子
1.1 二分类模子demo
选择模子
paddlehub支持模子列表
PaddleHub还提供BERT等模子可供选择, 如今支持文老实类职责的模子对应的加载示比如下:
经过以上的一行代码,model初始化为一个实用于文老实类职责的模子,为ERNIE的预练习模子后拼接上一个全毗连网络(Full Connected)。
model = hub.Module(name='ernie',task='seq-cls', num_classes=2)
hub.Module的参数用法如下:
- name:模子称呼,可以选择ernie,ernie_tiny,bert-base-cased, bert-base-chinese, roberta-wwm-ext,roberta-wwm-ext-large等。
- task:fine-tune职责。此处为seq-cls,表现文老实类职责。
- num_classes:表现如今文老实类职责的种别数,依据具体使用的数据集确定,默以为2。
加载数据集:
加载官方提供数据集:选用中文心情分类公开数据集ChnSentiCorp为示例(二分类经典数据集)
train_dataset = hub.datasets.ChnSentiCorp(tokenizer=model.get_tokenizer(), max_seq_len=128, mode='train')
dev_dataset = hub.datasets.ChnSentiCorp(tokenizer=model.get_tokenizer(), max_seq_len=128, mode='dev')
test_dataset = hub.datasets.ChnSentiCorp(tokenizer=model.get_tokenizer(), max_seq_len=128, mode='test')
#查察数据集
for i in range(10):
print(test_dataset.examples[i])
参数成绩请查察文档:
https://paddlehub.readthedocs.io/zh
CN/release-v2.1/api/datasetsindex.html
ChnSentiCorp的参数用法如下:
- tokenizer:表现该module所需用到的tokenizer,其将对输入文本完成切词,并转化成module运转所需模子输入格式。
- mode:选择数据形式,可选项有 train, dev, test, 默以为train。
- max_seq_len:ERNIE/BERT模子使用的最大序列长度,若显现显存不敷,请得当调低这一参数。
tokenizer的作用是将原始输入文本转化成模子model可以承受的输入数据情势。 PaddleHub 2.0中的种种预练习模子以前内置了相应的tokenizer,可以经过model.get_tokenizer办法获取。
optimizer = paddle.optimizer.Adam(learning_rate=5e-5, parameters=model.parameters()) # 优化器的选择和参数设置
trainer = hub.Trainer(model, optimizer, checkpoint_dir='./chekpoint', use_gpu=True,use_vdl=True) # fine-tune职责的实行者
优化战略
Paddle2.0-rc提供了多种优化器选择,如SGD, Adam, Adamax等,具体参见
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/Overview_cn.html#about-lr
在本教程中选择了Adam优化器,其的参数用法:
- learning_rate: 全局学习率。默以为1e-3;
- parameters: 待优化模子参数。
- 运转设置
Trainer 主要控制Fine-tune职责的练习,是职责的倡导者,包含以下可控制的参数:
- model: 被优化模子;
- optimizer: 优化器选择;
- use_gpu: 对否使用gpu练习;
- use_vdl: 对否使用vdl可视化练习历程;
- checkpoint_dir: 保存模子参数的地点;
- compare_metrics: 保存最优模子的权衡目标;
实行fine-tune并评价模子
trainer.train(train_dataset, epochs=3, batch_size=32, eval_dataset=dev_dataset,log_interval=10, save_interval=1) # 设置练习参数,启动练习,并指定验证集
trainer.train 主要控制具体的练习历程,包含以下可控制的参数:
def train(
train_dataset: paddle.io.Dataset,
epochs: int = 1,
batch_size: int = 1,
num_workers: int = 0,
eval_dataset: paddle.io.Dataset = None,
log_interval: int = 10,
save_interval: int = 10,
collate_fn: Callable = None):
- train_dataset: 练习时所用的数据集;
- epochs: 练习轮数;
- batch_size: 练习的批轻重,假如使用GPU,请依据实践情况调停batch_size;
- num_workers: works的数目,默以为0;
- eval_dataset: 验证集;
- log_interval: 打印日志的距离, 单位为实行批练习的次数,保举设置为50,100 默许值为10。
- save_interval: 保存模子的距离频次,单位为实行练习的轮数。
result = trainer.evaluate(test_dataset, batch_size=32) # 在测试集上评价如今练习模子
def evaluate(
eval_dataset: paddle.io.Dataset,
batch_size: int = 1,
num_workers: int = 0,
collate_fn: Callable = None):
使用模子举行猜测
当Finetune完成后,我们加载练习后保存的最佳模子来举行猜测,完备猜测代码如下:
import numpy as np
data = [
[ ],
[ ],
[ ],
[ ],
[ ]
]
label_map = {0: 'negative', 1: 'positive'}
model = hub.Module(
name='ernie',
task='seq-cls',
load_checkpoint='./ckpt/best_model/model.pdparams',
label_map=label_map)
results = model.predict(data, max_seq_len=128, batch_size=1, use_gpu=True)
for idx, text in enumerate(data):
print('Data: {} \t Lable: {}'.format(text[0], results[idx]))
Data: 这个宾馆比力新鲜了,特价的房间也很寻常。总体来说寻常 Lable: negative
Data: 交通便利;情况很好;办事态度很好 房间较小 Lable: positive
Data: 还略微重了点,约莫是硬盘大的原故,还要再轻半斤就好了。其他要进一步验证。贴的几种膜气泡较多,用不了多久就要改换了,屏幕膜稍好点,但比没有要强多了。发起配赠几张膜让用用户本人贴。 Lable: negative
Data: 前台接待太差,旅店有A B楼之分,本人check-in后,前台未报告B楼在何处,并且B楼无分明指示;房间太小,基本不像4星级办法,下次不会再选择入住此店啦 Lable: negative
Data: 19天硬盘就歇工了~~~算上运来的一周都没用上15天~~~可就是不克不及换了~~~唉~~~~你说这算什么事呀~~~ Lable: negative
至此二分类职责完成,必要完成步骤,见文件paddlehub train 和predic文件,举行脚本运转!
1.2 多分类职责demo
1.2.1自界说数据集
本示例数据集是由清华大学提供的讯息文本数据集THUCNews。THUCNews是依据新浪讯息RSS订阅频道2005~2011年间的汗青数据挑选过滤天生,包含74万篇讯息文档(2.19 GB),均为UTF-8纯文本格式。我们在原始新浪讯息分类体系的基本上,重新整合区分出14个候选分类种别:财经、彩票、房产、股票、家居、教导、科技、社会、潮水、时政、体育、星座、游戏、文娱。为了快速展现怎样使用PaddleHub完成文老实类职责,该示例数据集从THUCNews练习会合随机抽取了9000条文本数据集作为本示例的练习集,从验证会合14个种别每个种别随机抽取100条数据作为本示例的验证集,测试集抽取办法和验证集相反
假如渴望使用自界说的数据集,则必要对自界说数据举行相应的预处理,将数据集文件处理成预练习模子可以读取的格式。比如用PaddleHub文老实类职责使用自界说数据时,必要切分数据集,将数据集切分为练习集、验证集和测试集。
a. 设置数据集目次。 用户必要将数据集目次设定为如下格式。
├──data: 数据目次
├── train.txt: 练习集数据
├── dev.txt: 验证集数据
└── test.txt: 测试集数据
b. 设置文件格式和内容。 练习集、验证集和测试集文件的编码格式发起为utf8格式。内容的第一列是文本内容,第二列为文本种别标签。列与列之间以Tab键分开。发起在数据集文件第一行填写列分析"label"和"text_a",正中以Tab键分开,示比如下:
label text_a
房产 昌平京基鹭府10月29日推别墅1200万套起享97折
教导 贵州2011高考登科分数线公布文科一本448分
社会 浩繁白领因团队户口面临完婚困难
#查察数据集
%cd /home/aistudio/数据集
!tar -zxvf thu_news.tar.gz
!ls -hl thu_news
!head -n 3 thu_news/train.txt
c. 加载自界说数据集。 加载文老实类的自界说数据集,用户仅必要承继基类TextClassificationDataset,修实数据集存放地点以及种别即可,具体可以参考如下代码:
#办法一:
import paddlehub as hub
import paddle
model = hub.Module(name="ernie_tiny", task='seq-cls', num_classes=14) # 在多分类职责中,num_classes必要显式地指定种别数,此处依据数据集设置为14
import os, io, csv
from paddlehub.datasets.base_nlp_dataset import InputExample, TextClassificationDataset
# 数据集存放地点
DATA_DIR="/home/aistudio/数据集/thu_news"
class ThuNews(TextClassificationDataset):
def __init__(self, tokenizer, mode='train', max_seq_len=128):
if mode == 'train':
data_file = 'train.txt'
elif mode == 'test':
data_file = 'test.txt'
else:
data_file = 'valid.txt'
super(ThuNews, self).__init__(
base_path=DATA_DIR,
data_file=data_file,
tokenizer=tokenizer,
max_seq_len=max_seq_len,
mode=mode,
is_file_with_header=True,
label_list=['体育', '科技', '社会', '文娱', '股票', '房产', '教导', '时政', '财经', '星座', '游戏', '家居', '彩票', '潮水'])
# 剖析文本文件里的样本
def _read_file(self, input_file, is_file_with_header: bool = False):
if not os.path.exists(input_file):
raise RuntimeError("The file {} is not found.".format(input_file))
else:
with io.open(input_file, "r", encoding="UTF-8") as f:
reader = csv.reader(f, delimiter="\t", quotechar=None)
examples = []
seq_id = 0
header = next(reader) if is_file_with_header else None
for line in reader:
example = InputExample(guid=seq_id, text_a=line[0], label=line[1])
seq_id += 1
examples.append(example)
return examples
train_dataset = ThuNews(model.get_tokenizer(), mode='train', max_seq_len=128)
dev_dataset = ThuNews(model.get_tokenizer(), mode='dev', max_seq_len=128)
test_dataset = ThuNews(model.get_tokenizer(), mode='test', max_seq_len=128)
for e in train_dataset.examples[:3]:
print(e)
# 办法二:对上述步调精简了一下,但是显现了一些告诫,不外对后果不影响,介怀的话保举用第一个
from paddlehub.datasets.base_nlp_dataset import TextClassificationDataset
class SeqClsDataset(TextClassificationDataset):
# 数据集存放目次
base_path = '/home/aistudio/数据集/thu_news'
# 数据集的标签列表
label_list=['体育', '科技', '社会', '文娱', '股票', '房产', '教导', '时政', '财经', '星座', '游戏', '家居', '彩票', '潮水']
def __init__(self, tokenizer, max_seq_len: int = 128, mode: str = 'train'):
if mode == 'train':
data_file = 'train.txt'
elif mode == 'test':
data_file = 'test.txt'
else:
data_file = 'dev.txt'
super().__init__(
base_path=self.base_path,
tokenizer=tokenizer,
max_seq_len=max_seq_len,
mode=mode,
data_file=data_file,
label_list=self.label_list,
is_file_with_header=True)
# 选择所必要的模子,获取对应的tokenizer
import paddlehub as hub
model = model = hub.Module(name='ernie_tiny', task='seq-cls', num_classes=len(SeqClsDataset.label_list))
tokenizer = model.get_tokenizer()
# 实例化练习集
train_dataset = SeqClsDataset(tokenizer)
至此用户可以经过SeqClsDataset实例化获取对应的数据集,可以经过hub.Trainer对预练习模子model完成文老实类职责
更多关于图像分类、序列标注等数据自界说参考开发文档:
https://github.com/PaddlePaddle/PaddleHub/blob/release/v2.0.0-rc/docs/docsch/tutorial/howtoloaddata.md#
%E5%9B%9B%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB%E6%95%B0%E6%8D%AE%E9%9B%86
1.2.2 练习&猜测后果
optimizer = paddle.optimizer.Adam(learning_rate=5e-5, parameters=model.parameters()) # 优化器的选择和参数设置
trainer = hub.Trainer(model, optimizer, checkpoint_dir='./ckpt', use_gpu=True,use_vdl=True) # fine-tune职责的实行者,开启可视化
trainer.train(train_dataset, epochs=3, batch_size=32, eval_dataset=dev_dataset, save_interval=1) # 设置练习参数,启动练习,并指定验证集
result = trainer.evaluate(test_dataset, batch_size=32) # 在测试集上评价如今练习模子
练习后果局部展现:
[2022-07-21 11:23:04,936] [ TRAIN] - Epoch=3/3, Step=160/282 loss=0.0756 acc=0.9844 lr=0.000050 step/sec=4.78 | ETA 00:03:26
[2022-07-21 11:23:07,040] [ TRAIN] - Epoch=3/3, Step=170/282 loss=0.0971 acc=0.9781 lr=0.000050 step/sec=4.75 | ETA 00:03:26
[2022-07-21 11:23:09,128] [ TRAIN] - Epoch=3/3, Step=180/282 loss=0.1516 acc=0.9594 lr=0.000050 step/sec=4.79 | ETA 00:03:25
[2022-07-21 11:23:11,210] [ TRAIN] - Epoch=3/3, Step=190/282 loss=0.0854 acc=0.9781 lr=0.000050 step/sec=4.80 | ETA 00:03:25
[2022-07-21 11:23:13,301] [ TRAIN] - Epoch=3/3, Step=200/282 loss=0.0953 acc=0.9781 lr=0.000050 step/sec=4.78 | ETA 00:03:24
[2022-07-21 11:23:15,398] [ TRAIN] - Epoch=3/3, Step=210/282 loss=0.0761 acc=0.9750 lr=0.000050 step/sec=4.77 | ETA 00:03:24
[2022-07-21 11:23:17,497] [ TRAIN] - Epoch=3/3, Step=220/282 loss=0.1358 acc=0.9563 lr=0.000050 step/sec=4.76 | ETA 00:03:24
[2022-07-21 11:23:19,589] [ TRAIN] - Epoch=3/3, Step=230/282 loss=0.1075 acc=0.9750 lr=0.000050 step/sec=4.78 | ETA 00:03:23
[2022-07-21 11:23:21,675] [ TRAIN] - Epoch=3/3, Step=240/282 loss=0.0858 acc=0.9719 lr=0.000050 step/sec=4.79 | ETA 00:03:23
[2022-07-21 11:23:23,764] [ TRAIN] - Epoch=3/3, Step=250/282 loss=0.0670 acc=0.9875 lr=0.000050 step/sec=4.79 | ETA 00:03:23
[2022-07-21 11:23:25,849] [ TRAIN] - Epoch=3/3, Step=260/282 loss=0.0780 acc=0.9781 lr=0.000050 step/sec=4.80 | ETA 00:03:22
[2022-07-21 11:23:27,937] [ TRAIN] - Epoch=3/3, Step=270/282 loss=0.1262 acc=0.9594 lr=0.000050 step/sec=4.79 | ETA 00:03:22
[2022-07-21 11:23:30,025] [ TRAIN] - Epoch=3/3, Step=280/282 loss=0.1550 acc=0.9625 lr=0.000050 step/sec=4.79 | ETA 00:03:22
[Evaluation result] avg_acc=0.9136
'体育', '科技', '社会', '文娱', '股票', '房产', '教导', '时政', '财经', '星座', '游戏', '家居', '彩票', '潮水']
label_map = {
idx: label_text for idx, label_text in enumerate(label_list)
}
model = hub.Module(
name='ernie',
task='seq-cls',
load_checkpoint='./ckpt/best_model/model.pdparams',
label_map=label_map)
results = model.predict(data, max_seq_len=128, batch_size=1, use_gpu=True)
for idx, text in enumerate(data):
print('Data: {} \t Lable: {}'.format(text[0], results[idx]))
data = [
[ ],
[ ],
[ ],
[ ]
]
label_list=[
Data: 昌平京基鹭府10月29日推别墅1200万套起享97折 新浪房产讯(编纂郭彪)京基鹭府(论坛相册户型样板间点评舆图搜刮)售楼处位于昌平区京承高速北七家出口向东北公里路南。项目估计10月29日早盘,总价1200万元/套起,2012年年底入住。待售户型为联排户型面积为410-522平方米,独栋户型面积为938平方米,双拼户型面积为522平方米。 京基鹭府项目位于昌安定泗路与东北边路交界处。项目周边配套完全,幼儿园:伊顿双语幼儿园、温莎双语幼儿园;中学:北师大亚太实行学校、潞河中学(北京市重点);大学:王府言语学校、北京邮电大学、古代音乐学院;病院:王府中中医团结病院(三级甲等)、潞河病院、束缚军263病院、安贞病院昌中分院;购物:龙德广场、中联万家商厦、世纪华联超市、宝贝购物中央、家乐福超市;旅店:拉斐特城堡、鲍鱼岛;休闲文娱办法:九西岳庄、温都温泉度假村、小汤山疗养院、龙脉温泉度假村、小汤山文明广场、皇港高尔夫、高处高尔夫、北鸿高尔夫球场;银行:工商银行、建立银行、中国银行、北京乡村商业银行;邮局:中国邮政储备;别的:北七家建材城、百安居建材超市、北七家镇武装部、北京宏翔鸿企业孵化基地等,享用便捷生存。 Lable: 房产
Data: 只管官方到今天也没有公布《职责召唤:古代战争2》的游戏具体,但《职责召唤:古代战争2》首部包含游戏画面的影片终于现身。固然影片仅有短短不到20秒,但影片最初允许各位将于美国时间5月24日NBA职业篮球东区决赛时将会揭破更多的游戏内容。 这部仅有18秒的倾销片闪现了9个镜头,可以辨识的场景有直升机飞向海岛军事工事,有飞机场争取战,有潜艇和水下工兵,有冰上乘具,以及其他的一些镜头。全体来看《古代战争2》很大约莫仍旧与俄罗斯有关。 片尾有一则预告:“May24th,EasternConferenceFinals”,这是什么?这是说如今美国NBA联赛东部总决赛的日期。原本这部视频是NBA季后赛奥兰多把戏对波士顿凯尔特人队时,TNT电视台播放的倾销。 Lable: 游戏
Data: 罗马锋王竟公开挑唆两大旌旗拉涅利的球队毕竟错在哪 记者张恺报道主场一球小胜副班长巴里无可吹捧,罗马占优也纯属正常,倒是托蒂罚失点球和前两号门将先后受伤(多尼以三号身份下场)更让人揪心。阵容范围扩展,反而体现不如上赛季,缺乏一流强队的颜色,这是一切球迷对罗马的印象。 拉涅利说:“客岁我们带着妒忌之心看国米,本年我们也有了和国米划一的超等阵容,很多教练都想有罗马的球员。阵容广了,寻觅队内均衡就难了,某些时段球员的互相排挤和跟随前比拟的落差都正常。有好的一面,也有不佳的一面,所幸,我们不休在说一支宏大的罗马,必胜的信心和够级别的阵容,我们有了。”拉涅利的总结由近一阶段困扰罗马的队内摩擦、一局部球员闹意见要走人而发,本赛季武艺层面强化的罗马不休没有上赛季反攻的相貌,内里厘革值得球迷眷注。 Lable: 体育
Data: 新总督努力提高加拿大公立教导质量 滑铁卢大学校长约翰斯顿教师于10月1日承继加拿大总督职务。约翰斯顿教师还曾任麦吉尔大学长,并曾在多伦多大学、女王大学和西安大抵大学承继教学职位。 约翰斯顿教师在就职演说中表现,要将加拿大建立成为一个“智慧与关爱的国度”。为完成这一目标,他提出三个支柱:支持并关爱家庭、儿童;勉励学习与创造;倡导慈善和志愿者精力。他尤其重申要关爱并敬重教员,并经过公立教导使每一局部的才智取得富裕提高。 Lable: 教导
1.3 paddlehub小结
- PaddleHub旨在为开发者提供丰厚的、高质量的、直接可用的预练习模子。
- 【无需深度学习背景、无需数据与练习历程】,可快速使用AI模子,享用人工智能年代红利。
- 涵盖CV、NLP、Audio、Video主流四大品类,支持一键猜测、一键办事化摆设和快速迁徙学习全部模子开源下载,离线可运转。
特性:
【丰厚的预练习模子】:涵盖CV、NLP、Audio、Video主流四大品类的 180+ 预练习模子,全部开源下载,离线可运转。
【一键模子快速猜测】:经过一行下令行大概极简的Python API完成模子调用,可快速体验模子后果。
【一键模子转办事化】:一行下令,搭建深度学习模子API办事化摆设才能。
【十行代码迁徙学习】:十行代码完成图片分类、文老实类的迁徙学习职责
【跨平台兼容性】:可运转于Linux、Windows、MacOS等多种利用体系
支持职责【文本识别、人脸检测、图像编纂、目标检测、紧张点检测、图像支解、图像分类、词法分析、文本天生、句法分析、心情分析、文本稽核、语音构成、视频分类等】
优点十明白显易上手,好比数据集构建十分简便,固然缺陷也就体现出来,就是在云端运转的时分不便利对参数设置,天性化设置偏少,以及假如开发者寻求高精度模子,难以微调。
2.基于预练习模子Fine-tune完成文老实类职责
2.1预练习模子先容
比年来随着深度学习的提高,模子参数的数目飞速增长。为了练习这些参数,必要更大的数据集来制止过拟合。但是,关于大局部NLP职责来说,构建大范围的标注数据集十分困难(本钱过高),特别是关于句法和语义干系的职责。比拟之下,大范围的未标注语料库的构建则相对容易。为了使用这些数据,我们可以先从此中学习到一个好的表现,再将这些表现使用到其他职责中。迩来的研讨标明,基于大范围未标注语料库的预练习模子(Pretrained Models, PTM) 在NLP职责上取得了很好的体现。
本项目针对中文文老实类成绩,开源了一系列模子,供用户可设置地使用:
- BERT(Bidirectional Encoder Representations from Transformers)中文模子,简写bert-base-chinese, 其由12层Transformer网络构成。
- ERNIEERNIE 3.0 Titan: Exploring Larger-scale Knowledge Enhanced Pre-training for Language Understanding and Generation,支持ERNIE 3.0-Medium 中文模子(简写ernie-3.0-medium-zh)和 ERNIE 3.0-Base-zh 等 ERNIE 3.0 轻量级中文模子。
- RoBERTa(A Robustly Optimized BERT Pretraining Approach),支持 24 层 Transformer 网络的 roberta-wwm-ext-large 和 12 层 Transformer 网络的 roberta-wwm-ext。
固然另有最新的ernie-3.0-medium-zh这些模子:
ERNIE 3.0-Base (12-layer, 768-hidden, 12-heads)
ERNIE 3.0-Medium (6-layer, 768-hidden, 12-heads)
ERNIE 3.0-Mini (6-layer, 384-hidden, 12-heads)
ERNIE 3.0-Micro (4-layer, 384-hidden, 12-heads)
ERNIE 3.0-Nano (4-layer, 312-hidden, 12-heads)
Fine-tune文件下文件:
├── export_model.py # 动态图参数导出静态图参数脚本
├── predict.py # 猜测脚本
├── README.md # 使用分析
└── train.py # 练习评价脚本
局部后果展现:
global step 850, epoch: 3, batch: 250, loss: 0.19126, accuracy: 0.97937, speed: 9.67 step/s
global step 860, epoch: 3, batch: 260, loss: 0.25743, accuracy: 0.97917, speed: 9.55 step/s
global step 870, epoch: 3, batch: 270, loss: 0.02109, accuracy: 0.98125, speed: 9.56 step/s
global step 880, epoch: 3, batch: 280, loss: 0.15182, accuracy: 0.98203, speed: 9.53 step/s
global step 890, epoch: 3, batch: 290, loss: 0.05055, accuracy: 0.98125, speed: 9.56 step/s
global step 900, epoch: 3, batch: 300, loss: 0.01884, accuracy: 0.98188, speed: 9.63 step/s
eval loss: 0.19699, accuracy: 0.94333
best acc performence has been updated: {best_acc:0.98125} --> {acc:0.98188}
[2022-07-21 14:58:37,435] [ INFO] - tokenizer config file saved in ./checkpoints/model_best/tokenizer_config.json
[2022-07-21 14:58:37,435] [ INFO] - Special tokens file saved in ./checkpoints/model_best/special_tokens_map.json
预练习模子选择,修正步骤中:
# 使用ernie预练习模子
# ernie-3.0-medium-zh
model = AutoModelForSequenceClassification.from_pretrained('ernie-3.0-medium-zh',num_classes=2))
tokenizer = AutoTokenizer.from_pretrained('ernie-3.0-medium-zh')
# 使用bert预练习模子
# bert-base-chinese
model = AutoModelForSequenceClassification.from_pretrained('bert-base-chinese', num_class=2)
tokenizer = AutoTokenizer.from_pretrained('bert-base-chinese')
Transformer预练习模子汇总
步骤中主要修正场合:
- 加载数据集:PaddleNLP内置了多种数据集,用户可以一键导入所需的数据集。
- 加载预练习模子:PaddleNLP的预练习模子可以很容易地经过 frompretrained() 办法加载。 Auto模块(包含AutoModel, AutoTokenizer, 及种种卑劣职责类)提供了便利易用的接口, 无需指定种别,即可调用不同网络布局的预练习模子。 第一个参数是汇总表中对应的 Pretrained Weight,可加载对应的预练习权重。 AutoModelForSequenceClassification 初始化 init 所需的其他参数,如 numclasses 等, 也是经过 frompretrained() 传入。Tokenizer 使用相反的frompretrained 办法加载。
- 经过 Dataset 的 map 函数,使用 tokenizer 将 dataset 从原始文本处理成模子的输入。
- 界说 BatchSampler 和 DataLoader,shuffle数据、组合Batch。
- 界说练习所需的优化器,loss函数等,就可以开头举行模子fine-tune职责。
步骤运转时将会主动举行练习,评价,测试。同时练习历程中会主动保存模子在指定的save_dir中。 如:
checkpoints/
├── model_100
│ ├── model_config.json
│ ├── model_state.pdparams
│ ├── tokenizer_config.json
│ └── vocab.txt
└── ...
NOTE:
- 如需规复模子练习,则可以设置initfromckpt, 如initfromckpt=checkpoints/model100/modelstate.pdparams。
- 如需使用ernie-tiny模子,则必要事先先安装sentencepiece依托
- 如pip install sentencepiece
- 使用动态图练习完毕之后,还可以将动态图参数导出成静态图参数,具体代码见exportmodel.py。静态图参数保存在outputpath指定途径中。 运转办法:
python export_model.py --params_path=./checkpoint/model_900/model_state.pdparams --output_path=./export
此中paramspath是指动态图练习保存的参数途径,outputpath是指静态图参数导出途径。
导出模子之后,可以用于摆设,这里我就不做过多先容了,必要摆设的小伙伴去参考官方文档去利用吧。
将待猜测数据如以下示例:
这个宾馆比力新鲜了,特价的房间也很寻常。总体来说寻常
怀着十分冲动的心境放映,但是看着看着发觉,在放映终了后,显现一集米老鼠的动画片
作为老的四星旅店,房间仍然很划一,相当不错。机场接机办事很好,可以在车上摒挡入中止续,节流时间。
可以直接调用predict函数即可输入猜测后果
Data: 这个宾馆比力新鲜了,特价的房间也很寻常。总体来说寻常 Label: negative
Data: 怀着十分冲动的心境放映,但是看着看着发觉,在放映终了后,显现一集米老鼠的动画片 Label: negative
Data: 作为老的四星旅店,房间仍然很划一,相当不错。机场接机办事很好,可以在车上摒挡入中止续,节流时间。 Label: positive
3. Prompt--UIE分类成绩
UIE这块触及很多事项和知识,我就放在别的一个项目展现,具体参考底下链接:
Paddlenlp之UIE分类模子【以心情倾向分析讯息分类为例】含智能标注方案)
后果如下图:
比力保举!
4. 总结
paddlehub:
- PaddleHub旨在为开发者提供丰厚的、高质量的、直接可用的预练习模子。
- 【无需深度学习背景、无需数据与练习历程】,可快速使用AI模子,享用人工智能年代红利。
- 涵盖CV、NLP、Audio、Video主流四大品类,支持一键猜测、一键办事化摆设和快速迁徙学习全部模子开源下载,离线可运转。
优点十明白显易上手,好比数据集构建十分简便,固然缺陷也就体现出来,就是在云端运转的时分不便利对参数设置,天性化设置偏少,以及假如开发者寻求高精度模子,难以微调。
fine tune
可以看出在使用paddlenlp下的fine tune办法是可控性更多,固然hub简便,但是一局部更倾向使用paddlenlp框架下的预练习模子使用办法
Prompt---UIE
为了提高开发历程中的开发听从,变小不必要的重重新开事情时间,开放域信息抽取可以完成零样本(zero-shot)大概少样本(few-shot)抽取,大幅度低落标注数据依托,在低落本钱的同时,还提升了后果,更进一步!
这里温馨提示碰到成绩多看文档手册
后续将对:文本多分类、多标签分类、条理分类举行解说、以及这块数据集的界说办法
本人博客:
https://blog.csdn.net/sinat_39620217?type=blog