前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】

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

作者头像
汀丶人工智能
发布2022-12-21 16:31:12
5710
发布2022-12-21 16:31:12
举报
文章被收录于专栏:NLP/KGNLP/KG

相关文章:

基础知识介绍:

【一】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`在
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更多信息参考服务部署

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.PaddleHub环境安装:
    • 1.1 安装paddle:
      • 1.2 安装paddlehub:
        • 1.3 安装paddlehub并下载模型
          • 1.4 demo 风格迁移数据和代码
          • 2.paddlehub 应用
          • 3、lac--类别文本 - 词法分析
            • 3.1 模型概述
              • 3.2 demo
                • 3.3 LAC 服务部署
                  • 第一步:启动PaddleHub Serving
                  • 第二步:发送预测请求
              • 4. senta_bilstm---类别文本 - 情感分析
                • 4.1 模型概述
                  • 4.2 demo情感分析(三分类--正向/中性/负向)
                    • 4.3  通过PaddleHub Fine-tune API微调
                      • Step1: 加载预训练模型
                      • Step2: 准备数据集并使用LACClassifyReader读取数据
                      • Step3:选择优化策略和运行配置
                      • Step4: 构建网络并创建分类迁移任务进行Fine-tune
                      • 可视化
                      • 模型预测
                    • 4.4 SentaBiLSTM 服务部署
                      • 第一步:启动PaddleHub Serving
                      • 第二步:发送预测请求
                  相关产品与服务
                  人脸识别
                  腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档