利用理论:Paddle分类模子大集成者[PaddleHub、Finetune、prompt]

3个月前 (11-22 03:03)阅读2回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值174525
  • 级别管理员
  • 主题34905
  • 回复0
楼主

1.基于PaddleHub下的分类模子构建

PaddleHub--API接口文档阐明:碰着不晓得参数设置详细情状清查接口阐明!!!

利用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])

参数问题请查看文档:

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等,详尽拜见

在本教程中抉择了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

房产 昌平京基鹭府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完成文天职类使命

更多关于图像分类、序列标注等数据自定义参考开发文档:

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: 昌平京基鹭府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)抽取,大幅度降低标注数据依靠,在降低成本的同时,还提拔了效果,更进一步!

那里温馨提醒碰着问题多看文档手册

后续将对:文本多分类、多标签分类、条理分类停止讲解、以及那块数据集的定义体例

本人博客:

0
回帖

利用理论:Paddle分类模子大集成者[PaddleHub、Finetune、prompt] 期待您的回复!

取消