应用实践:Paddle分类模型大集成者[PaddleHub、Finetune、prompt]

在这里插入图片描述

项目连接:

应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]

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

PaddleHub–API接口文档说明:遇到不知道参数设置具体情况清查接口说明!!!

https://paddlehub.readthedocs.io/zh_CN/release-v2.1/api_index.html

使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤。

\1. 选择模型

\2. 加载数据集

\3. 选择优化策略和运行配置

\4. 执行fine-tune并评估模型

## 1.1 二分类模型demo

选择模型

paddlehub支持模型列表

PaddleHub还提供BERT等模型可供选择, 当前支持文本分类任务的模型对应的加载示例如下:

模型名 | PaddleHub Module

---------------------------------- | :------:

ERNIE, Chinese | hub.Module(name='ernie')

ERNIE tiny, Chinese | hub.Module(name='ernie_tiny')

ERNIE 2.0 Base, English | hub.Module(name='ernie_v2_eng_base')

ERNIE 2.0 Large, English | hub.Module(name='ernie_v2_eng_large')

BERT-Base, English Cased | hub.Module(name='bert-base-cased')

BERT-Base, English Uncased | hub.Module(name='bert-base-uncased')

BERT-Large, English Cased | hub.Module(name='bert-large-cased')

BERT-Large, English Uncased | hub.Module(name='bert-large-uncased')

BERT-Base, Multilingual Cased | hub.Module(nane='bert-base-multilingual-cased')

BERT-Base, Multilingual Uncased | hub.Module(nane='bert-base-multilingual-uncased')

BERT-Base, Chinese | hub.Module(name='bert-base-chinese')

BERT-wwm, Chinese | hub.Module(name='chinese-bert-wwm')

BERT-wwm-ext, Chinese | hub.Module(name='chinese-bert-wwm-ext')

RoBERTa-wwm-ext, Chinese | hub.Module(name='roberta-wwm-ext')

RoBERTa-wwm-ext-large, Chinese | hub.Module(name='roberta-wwm-ext-large')

RBT3, Chinese | hub.Module(name='rbt3')

RBTL3, Chinese | hub.Module(name='rbtl3')

ELECTRA-Small, English | hub.Module(name='electra-small')

ELECTRA-Base, English | hub.Module(name='electra-base')

ELECTRA-Large, English | hub.Module(name='electra-large')

ELECTRA-Base, Chinese | hub.Module(name='chinese-electra-base')

ELECTRA-Small, Chinese | hub.Module(name='chinese-electra-small')

通过以上的一行代码,model初始化为一个适用于文本分类任务的模型,为ERNIE的预训练模型后拼接上一个全连接网络(Full Connected)。

```python

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为示例(二分类经典数据集)

```python

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

```

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

参数问题请查看文档: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方法获取。

```python

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并评估模型

```python

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: 保存模型的间隔频次,单位为执行训练的轮数。

```python

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完成后,我们加载训练后保存的最佳模型来进行预测,完整预测代码如下:

```python

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

```

```python

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分

社会 众多白领因集体户口面临结婚难题

```

```python

#查看数据集

%cd /home/aistudio/数据集

!tar -zxvf thu_news.tar.gz

!ls -hl thu_news

!head -n 3 thu_news/train.txt

```

c. 加载自定义数据集。 加载文本分类的自定义数据集,用户仅需要继承基类TextClassificationDataset,修改数据集存放地址以及类别即可,具体可以参考如下代码:

```python

#方法一:

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)

```

```python

# 方法二:对上述步骤精简了一下,但是出现了一些警告,不过对结果不影响,介意的话推荐用第一个

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/how_to_load_data.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 训练&预测结果

```python

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

```

在这里插入图片描述

```python

# 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]))

```

```python

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预训练模型汇总

在这里插入图片描述

程序中主要修改地方:

\1. 加载数据集:PaddleNLP内置了多种数据集,用户可以一键导入所需的数据集。

\2. 加载预训练模型:PaddleNLP的预训练模型可以很容易地通过 from_pretrained() 方法加载。 Auto模块(包括AutoModel, AutoTokenizer, 及各种下游任务类)提供了方便易用的接口, 无需指定类别,即可调用不同网络结构的预训练模型。 第一个参数是汇总表中对应的 Pretrained Weight,可加载对应的预训练权重。 AutoModelForSequenceClassification 初始化 init 所需的其他参数,如 num_classes 等, 也是通过 from_pretrained() 传入。Tokenizer 使用同样的from_pretrained 方法加载。

\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. 如需恢复模型训练,则可以设置init_from_ckpt, 如init_from_ckpt=checkpoints/model_100/model_state.pdparams。

\2. 如需使用ernie-tiny模型,则需要提前先安装sentencepiece依赖

如pip install sentencepiece

\3. 使用动态图训练结束之后,还可以将动态图参数导出成静态图参数,具体代码见export_model.py。静态图参数保存在output_path指定路径中。 运行方式:

```

python export_model.py --params_path=./checkpoint/model_900/model_state.pdparams --output_path=./export

```

其中params_path是指动态图训练保存的参数路径,output_path是指静态图参数导出路径。

导出模型之后,可以用于部署,这里我就不做过多介绍了,需要部署的小伙伴去参考官方文档去操作吧。

将待预测数据如以下示例:

```

这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般

怀着十分激动的心情放映,可是看着看着发现,在放映完毕后,出现一集米老鼠的动画片

作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。

```

可以直接调用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)抽取,大幅度降低标注数据依赖,在降低成本的同时,还提升了效果,更进一步!

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的ziyuan得到学习提升
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习zhinhan已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值