郭彪星座(应用实践:Paddle分类模型的集成者[PaddleHub、Finetune、prompt)

使用实践: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个步调。

  1. 选择模子
  2. 加载数据集
  3. 选择优化战略和运转设置
  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:模子称呼,可以选择ernieernie_tinybert-base-casedbert-base-chinese, roberta-wwm-extroberta-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/datasets
index.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 to be prdicted data = [ ["这个宾馆比力新鲜了,特价的房间也很寻常。总体来说寻常"], ["交通便利;情况很好;办事态度很好 房间较小"], ["还略微重了点,约莫是硬盘大的原故,还要再轻半斤就好了。其他要进一步验证。贴的几种膜气泡较多,用不了多久就要改换了,屏幕膜稍好点,但比没有要强多了。发起配赠几张膜让用用户本人贴。"], ["前台接待太差,旅店有A B楼之分,本人check-in后,前台未报告B楼在何处,并且B楼无分明指示;房间太小,基本不像4星级办法,下次不会再选择入住此店啦"], ["19天硬盘就歇工了~~~算上运来的一周都没用上15天~~~可就是不克不及换了~~~唉~~~~你说这算什么事呀~~~"] ] 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 房产 昌平京基鹭府1029日推别墅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/docs
ch/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

# Data to be prdicted data = [ # 房产 ["昌平京基鹭府10月29日推别墅1200万套起享97折  新浪房产讯(编纂郭彪)京基鹭府(论坛相册户型样板间点评舆图搜刮)售楼处位于昌平区京承高速北七家出口向东北公里路南。项目估计10月29日早盘,总价1200万元/套起,2012年年底入住。待售户型为联排户型面积为410-522平方米,独栋户型面积为938平方米,双拼户型面积为522平方米。  京基鹭府项目位于昌安定泗路与东北边路交界处。项目周边配套完全,幼儿园:伊顿双语幼儿园、温莎双语幼儿园;中学:北师大亚太实行学校、潞河中学(北京市重点);大学:王府言语学校、北京邮电大学、古代音乐学院;病院:王府中中医团结病院(三级甲等)、潞河病院、束缚军263病院、安贞病院昌中分院;购物:龙德广场、中联万家商厦、世纪华联超市、宝贝购物中央、家乐福超市;旅店:拉斐特城堡、鲍鱼岛;休闲文娱办法:九西岳庄、温都温泉度假村、小汤山疗养院、龙脉温泉度假村、小汤山文明广场、皇港高尔夫、高处高尔夫、北鸿高尔夫球场;银行:工商银行、建立银行、中国银行、北京乡村商业银行;邮局:中国邮政储备;别的:北七家建材城、百安居建材超市、北七家镇武装部、北京宏翔鸿企业孵化基地等,享用便捷生存。"], # 游戏 ["只管官方到今天也没有公布《职责召唤:古代战争2》的游戏具体,但《职责召唤:古代战争2》首部包含游戏画面的影片终于现身。固然影片仅有短短不到20秒,但影片最初允许各位将于美国时间5月24日NBA职业篮球东区决赛时将会揭破更多的游戏内容。  这部仅有18秒的倾销片闪现了9个镜头,可以辨识的场景有直升机飞向海岛军事工事,有飞机场争取战,有潜艇和水下工兵,有冰上乘具,以及其他的一些镜头。全体来看《古代战争2》很大约莫仍旧与俄罗斯有关。  片尾有一则预告:“May24th,EasternConferenceFinals”,这是什么?这是说如今美国NBA联赛东部总决赛的日期。原本这部视频是NBA季后赛奥兰多把戏对波士顿凯尔特人队时,TNT电视台播放的倾销。"], # 体育 ["罗马锋王竟公开挑唆两大旌旗拉涅利的球队毕竟错在哪  记者张恺报道主场一球小胜副班长巴里无可吹捧,罗马占优也纯属正常,倒是托蒂罚失点球和前两号门将先后受伤(多尼以三号身份下场)更让人揪心。阵容范围扩展,反而体现不如上赛季,缺乏一流强队的颜色,这是一切球迷对罗马的印象。  拉涅利说:“客岁我们带着妒忌之心看国米,本年我们也有了和国米划一的超等阵容,很多教练都想有罗马的球员。阵容广了,寻觅队内均衡就难了,某些时段球员的互相排挤和跟随前比拟的落差都正常。有好的一面,也有不佳的一面,所幸,我们不休在说一支宏大的罗马,必胜的信心和够级别的阵容,我们有了。”拉涅利的总结由近一阶段困扰罗马的队内摩擦、一局部球员闹意见要走人而发,本赛季武艺层面强化的罗马不休没有上赛季反攻的相貌,内里厘革值得球迷眷注。"], # 教导 ["新总督努力提高加拿大公立教导质量  滑铁卢大学校长约翰斯顿教师于10月1日承继加拿大总督职务。约翰斯顿教师还曾任麦吉尔大学长,并曾在多伦多大学、女王大学和西安大抵大学承继教学职位。  约翰斯顿教师在就职演说中表现,要将加拿大建立成为一个“智慧与关爱的国度”。为完成这一目标,他提出三个支柱:支持并关爱家庭、儿童;勉励学习与创造;倡导慈善和志愿者精力。他尤其重申要关爱并敬重教员,并经过公立教导使每一局部的才智取得富裕提高。"] ] label_list=['体育', '科技', '社会', '文娱', '股票', '房产', '教导', '时政', '财经', '星座', '游戏', '家居', '彩票', '潮水'] 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: 昌平京基鹭府1029日推别墅1200万套起享97折  新浪房产讯(编纂郭彪)京基鹭府(论坛相册户型样板间点评舆图搜刮)售楼处位于昌平区京承高速北七家出口向东北公里路南。项目估计1029日早盘,总价1200万元/套起,2012年年底入住。待售户型为联排户型面积为410-522平方米,独栋户型面积为938平方米,双拼户型面积为522平方米。  京基鹭府项目位于昌安定泗路与东北边路交界处。项目周边配套完全,幼儿园:伊顿双语幼儿园、温莎双语幼儿园;中学:北师大亚太实行学校、潞河中学(北京市重点);大学:王府言语学校、北京邮电大学、古代音乐学院;病院:王府中中医团结病院(三级甲等)、潞河病院、束缚军263病院、安贞病院昌中分院;购物:龙德广场、中联万家商厦、世纪华联超市、宝贝购物中央、家乐福超市;旅店:拉斐特城堡、鲍鱼岛;休闲文娱办法:九西岳庄、温都温泉度假村、小汤山疗养院、龙脉温泉度假村、小汤山文明广场、皇港高尔夫、高处高尔夫、北鸿高尔夫球场;银行:工商银行、建立银行、中国银行、北京乡村商业银行;邮局:中国邮政储备;别的:北七家建材城、百安居建材超市、北七家镇武装部、北京宏翔鸿企业孵化基地等,享用便捷生存。 Lable: 房产 Data: 只管官方到今天也没有公布《职责召唤:古代战争2》的游戏具体,但《职责召唤:古代战争2》首部包含游戏画面的影片终于现身。固然影片仅有短短不到20秒,但影片最初允许各位将于美国时间524日NBA职业篮球东区决赛时将会揭破更多的游戏内容。  这部仅有18秒的倾销片闪现了9个镜头,可以辨识的场景有直升机飞向海岛军事工事,有飞机场争取战,有潜艇和水下工兵,有冰上乘具,以及其他的一些镜头。全体来看《古代战争2》很大约莫仍旧与俄罗斯有关。  片尾有一则预告:“May24th,EasternConferenceFinals”,这是什么?这是说如今美国NBA联赛东部总决赛的日期。原本这部视频是NBA季后赛奥兰多把戏对波士顿凯尔特人队时,TNT电视台播放的倾销。 Lable: 游戏 Data: 罗马锋王竟公开挑唆两大旌旗拉涅利的球队毕竟错在哪  记者张恺报道主场一球小胜副班长巴里无可吹捧,罗马占优也纯属正常,倒是托蒂罚失点球和前两号门将先后受伤(多尼以三号身份下场)更让人揪心。阵容范围扩展,反而体现不如上赛季,缺乏一流强队的颜色,这是一切球迷对罗马的印象。  拉涅利说:“客岁我们带着妒忌之心看国米,本年我们也有了和国米划一的超等阵容,很多教练都想有罗马的球员。阵容广了,寻觅队内均衡就难了,某些时段球员的互相排挤和跟随前比拟的落差都正常。有好的一面,也有不佳的一面,所幸,我们不休在说一支宏大的罗马,必胜的信心和够级别的阵容,我们有了。”拉涅利的总结由近一阶段困扰罗马的队内摩擦、一局部球员闹意见要走人而发,本赛季武艺层面强化的罗马不休没有上赛季反攻的相貌,内里厘革值得球迷眷注。 Lable: 体育 Data: 新总督努力提高加拿大公立教导质量  滑铁卢大学校长约翰斯顿教师于101日承继加拿大总督职务。约翰斯顿教师还曾任麦吉尔大学长,并曾在多伦多大学、女王大学和西安大抵大学承继教学职位。  约翰斯顿教师在就职演说中表现,要将加拿大建立成为一个“智慧与关爱的国度”。为完成这一目标,他提出三个支柱:支持并关爱家庭、儿童;勉励学习与创造;倡导慈善和志愿者精力。他尤其重申要关爱并敬重教员,并经过公立教导使每一局部的才智取得富裕提高。 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预练习模子汇总

步骤中主要修正场合:

  1. 加载数据集:PaddleNLP内置了多种数据集,用户可以一键导入所需的数据集。
  2. 加载预练习模子:PaddleNLP的预练习模子可以很容易地经过 frompretrained() 办法加载。 Auto模块(包含AutoModel, AutoTokenizer, 及种种卑劣职责类)提供了便利易用的接口, 无需指定种别,即可调用不同网络布局的预练习模子。 第一个参数是汇总表中对应的 Pretrained Weight,可加载对应的预练习权重。 AutoModelForSequenceClassification 初始化 init 所需的其他参数,如 numclasses 等, 也是经过 frompretrained() 传入。Tokenizer 使用相反的frompretrained 办法加载。
  3. 经过 Datasetmap 函数,使用 tokenizerdataset 从原始文本处理成模子的输入。
  4. 界说 BatchSamplerDataLoader,shuffle数据、组合Batch
  5. 界说练习所需的优化器,loss函数等,就可以开头举行模子fine-tune职责。

步骤运转时将会主动举行练习,评价,测试。同时练习历程中会主动保存模子在指定的save_dir中。 如:

checkpoints/ ├── model_100 │ ├── model_config.json │ ├── model_state.pdparams │ ├── tokenizer_config.json │ └── vocab.txt └── ...

NOTE:

  1. 如需规复模子练习,则可以设置initfromckpt, 如initfromckpt=checkpoints/model100/modelstate.pdparams。
  2. 如需使用ernie-tiny模子,则必要事先先安装sentencepiece依托
  3. 如pip install sentencepiece
  4. 使用动态图练习完毕之后,还可以将动态图参数导出成静态图参数,具体代码见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

内容底部广告位(手机)
标签:

管理员
星座百科管理员

专业提供星座及生肖的知识分享,做高价值星座的百科网站!

上一篇:喜欢风象星座(风象星座(双子座、天秤座、水瓶座)喜欢的类型)
下一篇:返回列表

相关推荐