相关文章:

基础知识介绍:

【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀、的博客-CSDN博客_ernie模型

百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-CSDN博客_paddlenlp 安装


项目实战:

PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-CSDN博客

PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-CSDN博客

PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-CSDN博客

PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】_汀、的博客-CSDN博客


  • 【模型种类丰富】: 涵盖CV、NLP、Audio、Video、工业应用主流五大品类的 350+ 预训练模型,全部开源下载,离线可运行
  • 【超低使用门槛】:无需深度学习背景、无需数据与训练过程,可快速使用AI模型
  • 【一键模型快速预测】:通过一行命令行或者极简的Python API实现模型调用,可快速体验模型效果
  • 【一键模型转服务化】:一行命令,搭建深度学习模型API服务化部署能力
  • 【十行代码迁移学习】:十行代码完成图片分类、文本分类的迁移学习任务
  • 【跨平台兼容性】:可运行于Linux、Windows、MacOS等多种操作系统

1.PaddleHub环境安装:

先创建虚拟环境:

# 在命令行输入以下命令,创建名为paddle_env的环境
# 此处为加速下载,使用清华源
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # 这是一行命令
  • 该命令会创建1个名为paddle_env、python版本为3.8的可执行环境,根据网络状态,需要花费一段时间

  • 之后命令行中会输出提示信息,输入y并回车继续安装

激活刚创建的conda环境,在命令行中输入以下命令:

# 激活paddle_env环境
conda activate paddle_env
# 查看当前python的位置
where python

1.1 安装paddle:

有问题参考下面链接:

【一】飞桨paddle【GPU、CPU】安装以及环境配置+python入门教学_汀、的博客-CSDN博客

使用pip命令在刚激活的环境中安装paddle,

# 在命令行中输入以下命令
# 确认当前所用的pip是否是paddle_env环境下的pip
where pip
# 默认安装CPU版本,安装paddle时建议使用百度源
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

1.2 安装paddlehub:

安装完paddle后,继续在paddle_env环境中安装paddlehub:

# 在命令行中输入以下命令
pip install paddlehub -i https://mirror.baidu.com/pypi/simple

paddlehub的介绍文档:

PaddleHub/README_ch.md at release/v2.1 · PaddlePaddle/PaddleHub · GitHub

1.3 安装paddlehub并下载模型

安装完paddlehub后,下载风格迁移模型:

# 在命令行中输入以下命令
hub install stylepro_artistic==1.0.1

文档链接:

https://www.paddlepaddle.org.cn/hubsearch?filter=en_category&value=%7B%22scenes%22%3A%5B%22GANs%22%5D%7D

1.4 demo 风格迁移数据和代码

切换工作目录到E:\style_transfer,在命令行中输入以下命令

# 在命令行中输入以下命令
#把当前工作目录切换到D盘根目录
E:
#创建style_transfer目录
mkdir style_transfer
#切换当前目录到style_transfer目录
cd style_transfer

分别放置待转换图片和风格图片

  • 将待转换图片放置到E:\style_transfer\pic.jpg

  • 将风格图片放置到E:\style_transfer\fangao.jpg
  • 在E:\style_transfer目录下创建代码文件style_transfer.py

    • 若没有vscode等编辑器,可使用记事本先创建1个txt文件,再将文件名改成style_transfer.py
  • style_transfer.py中复制进如下代码:

import paddlehub as hub
import cv2 # 待转换图片的绝对地址
picture = 'E:\\style_transfer\\pic.jpg' # 注意代码中此处为双反斜杠
# 风格图片的绝对地址
style_image = 'E:\\style_transfer\\fangao.jpg' # 创建风格转移网络并加载参数
stylepro_artistic = hub.Module(name="stylepro_artistic") # 读入图片并开始风格转换
result = stylepro_artistic.style_transfer(
images=[{'content': cv2.imread(picture),
'styles': [cv2.imread(style_image)]}],
visualization=True
)

运行代码:

  • 在命令行中,输入python style_transfer.py
  • 程序执行时,会创建新文件夹transfer_result,并将转换后的文件保存到该目录下

2.paddlehub 应用

PaddleHub/README_ch.md at release/v2.1 · PaddlePaddle/PaddleHub · GitHub

图像类(161个)

  • 包括图像分类、人脸检测、口罩检测、车辆检测、人脸/人体/手部关键点检测、人像分割、80+语言文本识别、图像超分/上色/动漫化等

文本类(129个)

  • 包括中文分词、词性标注与命名实体识别、句法分析、AI写诗/对联/情话/藏头诗、中文的评论情感分析、中文色情文本审核等

视频类(8个)

  • 包含短视频分类,支持3000+标签种类,可输出TOP-K标签,多种算法可选。
  • 感谢CopyRight@PaddleVideo提供预训练模型,训练能力开放,欢迎体验。

语音类(3个)

  • TTS语音合成算法,多种算法可选

3、lac--类别文本 - 词法分析

网络BiGRU+CRF;数据集百度自建数据集

3.1 模型概述

Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。在百度自建数据集上评测,LAC效果:Precision=88.0%,Recall=88.7%,F1-Score=88.4%。该PaddleHub Module支持预测。

https://www.paddlepaddle.org.cn/hubdetail?name=lac&en_category=LexicalAnalysis

3.2 demo

import paddlehub as hub

lac = hub.Module(name="lac")
test_text = ["今天是个好日子", "天气预报说今天要下雨", "下一班地铁马上就要到了"] results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True) for result in results:
print(result['word'])
print(result['tag']) """
['今天', '是', '个', '好日子']
['TIME', 'v', 'q', 'n']
['天气预报', '说', '今天', '要', '下雨']
['n', 'v', 'TIME', 'v', 'v']
['下', '一班', '地铁', '马上', '就要', '到', '了']
['f', 'm', 'n', 'd', 'v', 'v', 'xc']"""
import paddlehub as hub

lac = hub.Module(name="lac")
test_text = ["今天是个好天气。"] results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)
print(results)
#{'word': ['今天', '是', '个', '好天气', '。'], 'tag': ['TIME', 'v', 'q', 'n', 'w']}

3.3 LAC 服务部署

PaddleHub Serving可以部署一个在线词法分析服务,可以将此接口用于词法分析、在线分词等在线web应用。

第一步:启动PaddleHub Serving

运行启动命令:

$ hub serving start -c serving_config.json

serving_config.json的内容如下:

{
"modules_info": {
"lac": {
"init_args": {
"version": "2.2.0"
"user_dict": "./test_dict.txt"
}
}
},
"port": 8866,
"use_singleprocess": false,
"workers": 2
}

其中user_dict含义为自定义词典路径,如果不使用lac自定义词典功能,则可以不填入。

这样就完成了一个词法分析服务化API的部署,默认端口号为8866。

NOTE: 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。

第二步:发送预测请求

配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果

import request
import json # 待预测数据
text = ["今天是个好日子", "天气预报说今天要下雨"] # 设置运行配置
# 对应本地预测lac.cut(text=text, batch_size=1)
data = {"text": text, "batch_size": 1} # 指定预测方法为lac并发送post请求,content-type类型应指定json方式
# HOST_IP为服务器IP
url = "http://HOST_IP:8866/predict/lac"
headers = {"Content-Type": "application/json"}
r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 打印预测结果
print(json.dumps(r.json(), indent=4, ensure_ascii=False))

关于PaddleHub Serving更多信息参考服务部署

详细部署参考:超链接

PaddleHub Serving模型一键服务部署

4. senta_bilstm---类别文本 - 情感分析

网络BiLSTM;数据集百度自建数据集

4.1 模型概述

情感倾向分析(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。该模型基于一个双向LSTM结构,情感类型分为积极、消极。该PaddleHub Module支持预测和Fine-tune。

4.2 demo情感分析(三分类--正向/中性/负向)

 hub install senta_bilstm==1.2.0
import paddlehub as hub

senta = hub.Module(name="senta_bilstm")
test_text = ["这家餐厅很好吃", "这部电影真的很差劲"]
results = senta.sentiment_classify(texts=test_text, use_gpu=False, batch_size=1) for result in results:
print(result['text'])
print(result['sentiment_label'])
print(result['sentiment_key'])
print(result['positive_probs'])
print(result['negative_probs'])
这家餐厅很好吃
1
positive
0.9407
0.0593
这部电影真的很差劲
0
negative
0.02
0.98

4.3  通过PaddleHub Fine-tune API微调

import paddlehub as hub

senta = hub.Module(name="senta_bilstm")
inputs, outputs, program = senta.context(trainable=True) words = inputs["text"]
sent_feature = outputs["sentence_feature"]

senta_finetune.py 给出了如何使用Senta模型的句子特征进行Fine-tuning的实例代码。 可以运行以下命令在ChnSentiCorp数据集上进行Fine-tuning。

$ sh run_finetune.sh

其中脚本参数说明如下:

--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型;
--num_epoch: Fine-tune迭代的轮数;
--use_gpu: 是否使用GPU进行训练,如果机器支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关;

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

Step1: 加载预训练模型

module = hub.Module(name="senta_bilstm")
inputs, outputs, program = module.context(trainable=True)

PaddleHub提供Senta一列模型可供选择, 模型对应的加载示例如下:

模型名 PaddleHub Module
senta_bilstm hub.Module(name='senta_bilstm')
senta_bow hub.Module(name='senta_bow')
senta_gru hub.Module(name='senta_gru')
senta_lstm hub.Module(name='senta_lstm')
senta_cnn hub.Module(name='senta_cnn')

更多模型请参考PaddleHub官网

如果想尝GRU模型,只需要更换Module中的name参数即可。

# 更换name参数即可无缝切换GRU模型, 代码示例如下
module = hub.Module(name="senta_gru")

Step2: 准备数据集并使用LACClassifyReader读取数据

dataset = hub.dataset.ChnSentiCorp()
reader = hub.reader.LACClassifyReader(
dataset=dataset,
vocab_path=module.get_vocab_path())

hub.dataset.ChnSentiCorp() 会自动从网络下载数据集并解压到用户目录下$HOME/.paddlehub/dataset目录;

module.get_vocab_path() 会返回预训练模型对应的词表;

LACClassifyReader中的data_generator会自动按照模型对应词表对数据进行切词,以迭代器的方式返回Senta所需要的word id;

更多数据集信息参考Dataset

自定义数据集

如果想加载自定义数据集完成迁移学习,详细参见自定义数据集

Step3:选择优化策略和运行配置

strategy = hub.AdamWeightDecayStrategy(
learning_rate=1e-5,
weight_decay=0.01,
warmup_proportion=0.1,
lr_scheduler="linear_decay",
) config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strategy)

优化策略

PaddleHub提供了许多优化策略,如AdamWeightDecayStrategyULMFiTStrategyDefaultFinetuneStrategy等,详细信息参见策略

其中AdamWeightDecayStrategy

  • learning_rate: Fine-tune过程中的最大学习率;
  • weight_decay: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数;
  • warmup_proportion: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate;
  • lr_scheduler: 有两种策略可选(1) linear_decay策略学习率会在最高点后以线性方式衰减; noam_decay策略学习率会在最高点以多项式形式衰减;

运行配置

RunConfig 主要控制Fine-tune的训练,包含以下可控制的参数:

  • use_cuda: 是否使用GPU训练,默认为False;
  • checkpoint_dir: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成;
  • num_epoch: Fine-tune的轮数;
  • batch_size: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size;
  • strategy: Fine-tune优化策略;

Step4: 构建网络并创建分类迁移任务进行Fine-tune

sent_feature = outputs["sentence_feature"]

feed_list = [inputs["words"].name]

cls_task = hub.TextClassifierTask(
data_reader=reader,
feature=sent_feature,
feed_list=feed_list,
num_classes=dataset.num_labels,
config=config) cls_task.finetune_and_eval()

NOTE:

  1. outputs["sentence_feature"]返回了senta模型对应的句子特征,可以用于句子的特征表达;
  2. feed_list中的inputs参数指名了senta中的输入tensor的顺序,与LACClassifyReader返回的结果一致;
  3. hub.TextClassifierTask通过输入特征,label与迁移的类别数,可以生成适用于文本分类的迁移任务TextClassifierTask

可视化

Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令

$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}

其中为本机地址,HOSTIP为本机IP地址,{PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况。

模型预测

通过Fine-tune完成模型训练后,在对应的ckpt目录下,会自动保存验证集上效果最好的模型。 配置脚本参数

CKPT_DIR="ckpt_chnsentiment/"
python predict.py --checkpoint_dir $CKPT_DIR

其中CKPT_DIR为Fine-tune API保存最佳模型的路径

参数配置正确后,请执行脚本sh run_predict.sh,即可看到以下文本分类预测结果, 以及最终准确率。 如需了解更多预测步骤,请参考predict.py

预训练模型 任务类型 数据集 AIStudio链接 备注
ResNet 图像分类 猫狗数据集DogCat 点击体验
ERNIE 文本分类 中文情感分类数据集ChnSentiCorp 点击体验
ERNIE 文本分类 中文新闻分类数据集THUNEWS 点击体验 本教程讲述了如何将自定义数据集加载,并利用Fine-tune API完成文本分类迁移学习。
ERNIE 序列标注 中文序列标注数据集MSRA_NER 点击体验
ERNIE 序列标注 中文快递单数据集Express 点击体验 本教程讲述了如何将自定义数据集加载,并利用Fine-tune API完成序列标注迁移学习。
ERNIE Tiny 文本分类 中文情感分类数据集ChnSentiCorp 点击体验
Senta 文本分类 中文情感分类数据集ChnSentiCorp 点击体验 本教程讲述了任何利用Senta和Fine-tune API完成情感分类迁移学习。
Senta 情感分析预测 N/A 点击体验
LAC 词法分析 N/A 点击体验
Ultra-Light-Fast-Generic-Face-Detector-1MB 人脸检测 N/A 点击体验

4.4 SentaBiLSTM 服务部署

PaddleHub Serving可以部署一个在线情感分析服务,可以将此接口用于在线web应用。

第一步:启动PaddleHub Serving

运行启动命令:

$ hub serving start -m senta_bilstm  

启动时会显示加载模型过程,启动成功后显示

Loading senta_bilstm successful.

这样就完成了服务化API的部署,默认端口号为8866。

NOTE: 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。

第二步:发送预测请求

配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果

import request
import json # 待预测数据
text = ["这家餐厅很好吃", "这部电影真的很差劲"] # 设置运行配置
# 对应本地预测senta_bilstm.sentiment_classify(texts=text, batch_size=1, use_gpu=True)
data = {"texts": text, "batch_size": 1, "use_gpu":True} # 指定预测方法为senta_bilstm并发送post请求,content-type类型应指定json方式
# HOST_IP为服务器IP
url = "http://HOST_IP:8866/predict/senta_bilstm"
headers = {"Content-Type": "application/json"}
r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 打印预测结果
print(json.dumps(r.json(), indent=4, ensure_ascii=False))

关于PaddleHub Serving更多信息参考服务部署

PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】的更多相关文章

  1. Paddle预训练模型应用工具PaddleHub

    Paddle预训练模型应用工具PaddleHub 本文主要介绍如何使用飞桨预训练模型管理工具PaddleHub,快速体验模型以及实现迁移学习.建议使用GPU环境运行相关程序,可以在启动环境时,如下图所 ...

  2. tensorflow利用预训练模型进行目标检测(一):安装tensorflow detection api

    一.tensorflow安装 首先系统中已经安装了两个版本的tensorflow,一个是通过keras安装的, 一个是按照官网教程https://www.tensorflow.org/install/ ...

  3. 预训练模型——开创NLP新纪元

    预训练模型--开创NLP新纪元 论文地址 BERT相关论文列表 清华整理-预训练语言模型 awesome-bert-nlp BERT Lang Street huggingface models 论文 ...

  4. 人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

    图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们 ...

  5. 最强中文NLP预训练模型艾尼ERNIE官方揭秘【附视频】

    “最近刚好在用ERNIE写毕业论文” “感觉还挺厉害的” “为什么叫ERNIE啊,这名字有什么深意吗?” “我想让艾尼帮我写作业” 看了上面火热的讨论,你一定很好奇“艾尼”.“ERNIE”到底是个啥? ...

  6. 提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件

    提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件 11月5日,在『WAVE Summit+』2019 深度学习开发者秋季峰会上,百度对外发布基于 ERNIE 的语义理解 ...

  7. 中文预训练模型ERNIE2.0模型下载及安装

    2019年7月,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE 2.0预训练模型, 它利用百度海量数据和飞桨(PaddlePaddle)多机多卡高效训练优 ...

  8. [.NET6]使用ML.NET+ONNX预训练模型整活B站经典《华强买瓜》

    最近在看微软开源的机器学习框架ML.NET使用别人的预训练模型(开放神经网络交换格式.onnx)来识别图像,然后逛github发现一个好玩的repo.决定整活一期博客. 首先还是稍微科普一下机器学习相 ...

  9. 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

    ​ 参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...

  10. BERT预训练模型的演进过程!(附代码)

    1. 什么是BERT BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Tr ...

随机推荐

  1. 面试官:请聊一聊String、StringBuilder、StringBuffer三者的区别

    面试官:"小伙子,在日常的写代码过程中,使用过String,StringBuilder和StringBuffer没?" 我:"用过的呀!" 面试官:" ...

  2. #2066:一个人的旅行(Dijkstra算法入门题)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. L2-007 家庭房产 (25 分) (并查集)

    给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 ...

  4. 【每日一题】10.树(DFS 序)

    补题链接:Here DFS序列 (非树形DP),这道题成功被骗... 贴一下学姐讲解: 这个题表面上看起来像是个 树上dp,但是你会发现,当xy同色的时候要求x到y的路径上所有点颜色一样这个事情非常难 ...

  5. spring-transaction源码分析(1)概述和事务传播级别

    spring-tx概述 spring-tx包使用注解驱动和AOP通知将事务开启.提交/回滚.以及复杂的传播机制封装了起来,开发者不再需要编写事务管理的代码,而是可以只关注自己的业务逻辑. 本文将简单介 ...

  6. springboot升级到2.6.x和2.7.x 兼容hystrix

    一.pom.xml需要引入的依赖 二.项目开启熔断器开关 2.1 注解方式 2.2 xml方式 三.依赖类缺失问题 四.版本匹配安全检查问题 五.测试验证 六.结论 一.pom.xml需要引入的依赖 ...

  7. 8. exporter

    一.已经实现的收集器 1.1 可收集的内存指标 1.2 可收集的jetty指标 二.自定义收集 2.1 summer 2.2 histogram 三.架构设计 exporter作为Prometheus ...

  8. 【C++】类大小

    [来源]C++类大小详尽讲解 [来源]空类(empty class)

  9. [转帖]阿里云Redis开发规范(供大家参考)

    一.键值设计 1. key名设计 (1)[建议]: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)[建议]:简洁性 ...

  10. [转帖]查看mysql分区名和各分区数据量

    – 查看mysql分区名和各分区数据量 SELECT table_name, partition_name, table_rows FROM information_schema.PARTITIONS ...