PaddleHub是飞桨生态下的预训练模型的管理工具,旨在让飞桨生态下的开发者更便捷地享受到大规模预训练模型的价值。用户可以通过PaddleHub便捷地获取飞桨生态下的预训练模型,结合Fine-tune API快速完成迁移学习到应用部署的全流程工作,让预训练模型能更好服务于用户特定场景的应用。
当前PaddleHub已经可以支持文本、图像和视频三大类主流方向,为用户准备了大量高质量的预训练模型,可以满足用户各种应用场景的任务需求,包括但不限于词法分析、情感分析、图像分类、目标检测、视频分类等经典任务。
使用之前先确保paddleHub版本为最新:
pip install --upgrade paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple
以LAC为例,官网给出的使用方式非常简单,两行命令:
# 安装模型
hub install lac==2.2.0
# 使用第一种或第二种方式切词和词性分析
$ hub run lac --input_text "今天是个好日子"
$ hub run lac --input_file test.txt --user_dict user.dict
安装
~/paddleHub$ hub install lac==2.2.0
Download https://bj.bcebos.com/paddlehub/paddlehub_dev/lac_2.2.0.tar.gz
[##################################################] 100.00%
Decompress /home/aistudio/.paddlehub/tmp/tmpbxd_91m1/lac_2.2.0.tar.gz
[##################################################] 100.00%
[2022-02-15 15:18:26,837] [ INFO] - Successfully installed lac-2.2.0
预测
~/paddleHub$ hub run lac --input_text "今天是个好日子"
[{'word': ['今天', '是', '个', '好日子'], 'tag': ['TIME', 'v', 'q', 'n']}]
- __init__(user_dict=None) 构造LAC对象
- cut(text, use_gpu=False, batch_size=1, return_tag=True)) lac预测接口,预测输入句子的分词结果
- context(trainable=False) 获取lac的预训练program以及program的输入输出变量
- set_user_dict(dict_path) 加载用户自定义词典
- del_user_dict() 删除自定义词典
- get_tags() 获取lac的标签
预测
import paddlehub
loc = paddlehub.Module(name='lac')
test_text1 = ["今天是个好日子", "天气预报说今天要下雨", "下一班地铁马上就要到了"]
test_text2 = ["现在,慕尼黑再保险公司不仅是此类行动的倡议者,更是将其大量气候数据整合进保险产品中,并与公众共享大量天气信息,参与到新能源领域的保障中。"]
result1 = loc.cut(test_text1)
result2 = loc.cut(test_text2)
结果为字典组成的列表,关键字为word和tag
print(f'-------{test_text1}------')
for result in result1:
print(result['word'])
print(result['tag'])
print(f'-------{test_text2}------')
print(result2[0]['word'])
print(result2[0]['tag'])
-------['今天是个好日子', '天气预报说今天要下雨', '下一班地铁马上就要到了']------ ['今天', '是', '个', '好日子'] ['TIME', 'v', 'q', 'n'] ['天气预报', '说', '今天', '要', '下雨'] ['n', 'v', 'TIME', 'v', 'v'] ['下', '一班', '地铁', '马上', '就要', '到', '了'] ['f', 'm', 'n', 'd', 'v', 'v', 'xc'] -------['现在,慕尼黑再保险公司不仅是此类行动的倡议者,更是将其大量气候数据整合进保险产品中,并与公众共享大量天气信息,参与到新能源领域的保障中。']------ ['现在', ',', '慕尼黑再保险公司', '不仅', '是', '此类', '行动', '的', '倡议者', ',', '更是', '将', '其', '大量', '气候', '数据', '整合', '进', '保险', '产品', '中', ',', '并', '与', '公众', '共享', '大量', '天气', '信息', ',', '参与', '到', '新能源', '领域', '的', '保障', '中', '。'] ['TIME', 'w', 'ORG', 'c', 'v', 'r', 'n', 'u', 'n', 'w', 'd', 'p', 'r', 'a', 'n', 'n', 'v', 'v', 'n', 'n', 'f', 'w', 'c', 'p', 'n', 'v', 'a', 'n', 'n', 'w', 'v', 'v', 'n', 'n', 'u', 'vn', 'f', 'w']
配置文件
{
"modules_info": {
"lac": {
"init_args": {
"version": "2.2.0"
}
}
},
"port": 8866,
"use_singleprocess": false,
"workers": 2
}
启动PaddleHub Serving
hub serving start -c serving_config.json
编辑请求脚本,发送请求:
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))