- 人工智能
- 大模型
- 微调
- 模型推理服务
【免费下载链接】PaddleFormers
PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.
ERNIE 3.0 Zeus 是 ERNIE 3.0 系列模型的升级版本,本仓库通过 PaddleHub 将其封装为可直接调用的文心大模型 API 模块。本文将完整讲解该模块的安装方式、命令行预测、Python 代码调用、七大预置任务 API 的参数细节,以及基于 PaddleHub Serving 的在线服务与 Gradio 交互部署,帮助你在 PaddleFormers 生态中快速落地中文文本生成能力。
一、模块概览与模型背景
1.1 模块基本信息
| 模型名称 | ernie_zeus |
|---|---|
| 类别 | 文本-文本生成 |
| 网络 | - |
| 数据集 | - |
| 是否支持 Fine-tuning | 否 |
| 模型大小 | - |
| 最新更新日期 | 2022-08-16 |
| 数据指标 | - |
从模块声明看,该模型在 module.py 中被定义为type='nlp/text_generation'、version='1.2.0'的 PaddleHub 模块,其核心实现并非本地推理,而是通过 HTTP 请求调用文心大模型的云端 API,因此文档明确标注“不支持 Fine-tuning”。
1.2 应用效果展示
文档给出了两个典型的中文生成效果示例:
- 作文创作:输入作文标题「诚以养德,信以修身」,模型生成了一篇以《曾国藩家书》为引、围绕“真诚与诚信”展开的完整议论文段落,展示了长文本连贯生成能力。
- 文案创作:输入产品描述「芍药香氛的沐浴乳」,模型输出了一段包含“天然草本精华”“泡沫细腻绵密”“适合干性、中性或敏感性肌肤”等卖点的商品文案,展示了营销文案撰写能力。
1.3 模型介绍
ERNIE 3.0 Zeus 是 ERNIE 3.0 系列模型的最新升级。其除了对无标注数据和知识图谱的学习之外,还通过持续学习对百余种不同形式的任务数据学习,实现了任务知识增强,显著提升了模型的零样本/小样本学习能力。
这一“任务知识增强”的设计理念直接体现在模块的 API 设计上:custom_generation提供了task_prompt参数,内置 PARAGRAPH、Summarization、MT、Dialogue、zuowen、adtext、couplet 等二十余种任务模板,让同一个模型底座可以适配不同类型的生成任务。
二、环境依赖与安装
2.1 环境依赖
使用本模块前需要满足以下环境要求:
paddlepaddle >= 2.0.0paddlehub >= 2.2.0
其中 PaddleHub 的安装方式可参考 安装文档:要求 Python >= 3.6.2,支持 Windows/Mac/Linux 操作系统,先安装 PaddlePaddle 框架(pip install paddlepaddle -U或 GPU 版pip install paddlepaddle-gpu -U),再执行pip install paddlehub==2.1.0。安装后可通过paddlehub.server_check()检查与远端 PaddleHub-Server 的连接状态。
此外,从 requirements.txt 可以看出,本模块实际运行只需requests一个第三方依赖,因为推理全部在云端完成,本地不需要加载模型权重。
2.2 安装模块
在满足上述依赖后,执行:
$ hub install ernie_zeus如安装时遇到问题,可参考各平台的零基础安装指南:Windows 安装、Linux 安装、MacOS 安装。
2.3 使用申请(可选)
本模型通过云端 API 提供服务,调用前需要申请 API Key 和 Secret Key。请前往文心旸谷社区申请使用本模型所需的 API key 和 Secret Key。
申请到凭证后有两种传递方式:
- 在调用时显式传入
ak/sk参数; - 设置
WENXIN_AK和WENXIN_SK环境变量(推荐)。
从 module.py 的get_access_token实现可以看到,模块会优先使用显式传入的ak/sk,否则从环境变量读取;两者都缺失时会抛出运行时错误并提示去文心官网申请。拿到凭证后,模块通过https://wenxin.baidu.com/younger/portal/api/oauth/token换取 access_token,供后续所有生成请求使用。
三、模型 API 预测
3.1 命令行预测
安装完成后,可以通过hub run命令直接进行预测。以作文创作为例:
# 作文创作 # 请设置 '--ak' 和 '--sk' 参数 # 或者设置 'WENXIN_AK' 和 'WENXIN_SK' 环境变量 # 更多细节参考下方 API 说明 $ hub run ernie_zeus \ --task composition_generation \ --text '诚以养德,信以修身'参数说明
--task(str):指定任务名称,与 API 名称保持一致(即下文中各生成方法的函数名)。--text(str):根据不同的任务输入所需的文本。- 其他参数请参考后续 API 章节。
结合 module.py 中@runnable修饰的cmd方法可以看到,命令行还支持--min_dec_len、--seq_len、--topp、--penalty_score、--stop_token、--task_prompt、--penalty_text、--choice_text、--is_unidirectional、--min_dec_penalty_text、--logits_bias、--mask_type、--ak、--sk等全部参数。其中--ak与--sk同时非空时,会重新获取 access_token 覆盖初始化时的凭证。若--task指定的不是custom_generation,命令行会自动剥离仅自定义接口专用的高级参数(如stop_token、task_prompt等),只保留通用生成参数,避免调用出错。
3.2 预测代码示例
在 Python 中使用 PaddleHub 加载模块并调用:
import paddlehub as hub # 请设置 'ak' 和 'sk' 参数 # 或者设置 'WENXIN_AK' 和 'WENXIN_SK' 环境变量 # 更多细节参考下方 API 说明 model = hub.Module(name='ernie_zeus') # 作文创作 result = model.composition_generation( text='诚以养德,信以修身' ) print(result)模块的单元测试 test.py 中覆盖了全部九个 API 方法,均断言返回值为字符串类型,例如composition_generation('诚以养德,信以修身')、copywriting_generation('芍药香氛的沐浴乳')、text_cloze('她有着一双[MASK]的眼眸。')等,可作为各任务调用方式的直接参考。
3.3 API 详解
构造函数
def __init__( ak: Optional[str] = None, sk: Optional[str] = None ) -> None初始化 API。
参数
ak(Optional[str]):文心 API Key,默认为 None,即从环境变量WENXIN_AK中获取;sk(Optional[str]):文心 API Secret Key,默认为 None,即从环境变量WENXIN_SK中获取。
自定义文本生成 API(custom_generation)
这是所有任务的底层接口,其余预置任务本质上都是对该接口的封装。
def custom_generation( text: str, min_dec_len: int = 1, seq_len: int = 128, topp: float = 1.0, penalty_score: float = 1.0, stop_token: str = '', task_prompt: str = '', penalty_text: str = '', choice_text: str = '', is_unidirectional: bool = False, min_dec_penalty_text: str = '', logits_bias: int = -10000, mask_type: str = 'word' ) -> str参数说明
text(str):模型的输入文本,为 prompt 形式的输入。文本长度 [1, 1000]。注:ERNIE 3.0-1.5B 模型取值范围 ≤ 512。min_dec_len(int):输出结果的最小长度,避免因模型生成 END 或者遇到用户指定的 stop_token 而生成长度过短的情况,与 seq_len 结合使用来设置生成文本的长度范围 [1, seq_len]。seq_len(int):输出结果的最大长度,因模型生成 END 或者遇到用户指定的 stop_token,实际返回结果可能会小于这个长度,与 min_dec_len 结合使用来控制生成文本的长度范围 [1, 1000]。(注:ERNIE 3.0-1.5B 模型取值范围 ≤ 512)topp(float):影响输出文本的多样性,取值越大,生成文本的多样性越强。取值范围 [0.0, 1.0]。penalty_score(float):通过对已生成的 token 增加惩罚,减少重复生成的现象。值越大表示惩罚越大。取值范围 [1.0, 2.0]。stop_token(str):预测结果解析时使用的结束字符串,碰到对应字符串则直接截断并返回。可以通过设置该值,过滤掉 few-shot 等场景下模型重复的 cases。task_prompt(str):指定预置的任务模板,效果更好。可选值包括:- PARAGRAPH:引导模型生成一段文章;SENT:引导模型生成一句话;ENTITY:引导模型生成词组;
- Summarization:摘要;MT:翻译;Text2Annotation:抽取;Correction:纠错;
- QA_MRC:阅读理解;Dialogue:对话;QA_Closed_book:闭卷问答;QA_Multi_Choice:多选问答;
- QuestionGeneration:问题生成;Paraphrasing:复述;NLI:文本蕴含识别;SemanticMatching:匹配;
- Text2SQL:文本描述转 SQL;TextClassification:文本分类;SentimentClassification:情感分析;
- zuowen:写作文;adtext:写文案;couplet:对对联;novel:写小说;cloze:文本补全;Misc:其它任务。
penalty_text(str):模型会惩罚该字符串中的 token。通过设置该值,可以减少某些冗余与异常字符的生成。choice_text(str):模型只能生成该字符串中的 token 的组合。通过设置该值,可以对某些抽取式任务进行定向调优。is_unidirectional(bool):False 表示模型为双向生成,True 表示模型为单向生成。建议续写与 few-shot 等通用场景采用单向生成方式,而完型填空等任务相关场景建议采用双向生成方式。min_dec_penalty_text(str):与最小生成长度搭配使用,可以在 min_dec_len 步前不让模型生成该字符串中的 tokens。logits_bias(int):配合 penalty_text 使用,对给定的 penalty_text 中的 token 增加一个 logits_bias,可以通过设置该值屏蔽某些 token 生成的概率。mask_type(str):设置该值可以控制模型生成粒度。可选参数为 word、sentence、paragraph。
返回
text(str):生成的文本。
从 module.py 可以看到,该接口将上述参数连同access_token通过requests.post发送至https://wenxin.baidu.com/moduleApi/portal/api/rest/1.0/ernie/3.0.28/zeus?from=paddlehub,并校验响应码code == 0后从results['data']['result']中取回生成文本。这意味着每次调用都依赖网络连通性与云端服务可用性。
完形填空 API(text_cloze)
def text_cloze( text: str, min_dec_len: int = 1, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.0 ) -> str- 完形填空 API。
text(str):文字段落,使用[MASK]标记待补全文字。- 其余参数含义与
custom_generation中同名参数一致。 - 返回:
text(str):补全词语。
从源码实现看(module.py),该方法在底层将task_prompt固定为cloze,并采用is_unidirectional=False(双向生成),与“完型填空适合双向生成”的官方建议一致。
作文创作 API(composition_generation)
def composition_generation( text: str, min_dec_len: int = 128, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str- 作文创作 API。
text(str):作文题目。- 其余参数含义同上。
- 返回:
text(str):作文内容。
实现上(module.py)会先构造 prompt 格式"作文题目:{} 正文:".format(text),并将task_prompt设为zuowen,min_dec_len默认抬升到 128,保证生成的作文具备足够篇幅。
自由问答 API(answer_generation)
def answer_generation( text: str, min_dec_len: int = 2, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str- 自由问答 API。
text(str):问题内容。- 其余参数含义同上。
- 返回:
text(str):问题答案。
实现上会构造"问题:{} 回答:".format(text)的 prompt,使用task_prompt='qa'、penalty_text='[gEND]',并采用单向生成。
对联续写 API(couplet_continuation)
def couplet_continuation( text: str, min_dec_len: int = 2, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.0 ) -> str- 对联续写 API。
text(str):对联上联。- 其余参数含义同上。
- 返回:
text(str):对联下联。
实现上构造"上联:{} 下联:".format(text)的 prompt,使用task_prompt='couplet',mask_type='word'。
文案创作 API(copywriting_generation)
def copywriting_generation( text: str, min_dec_len: int = 32, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str- 文案创作 API。
text(str):产品描述。- 其余参数含义同上。
- 返回:
text(str):产品文案。
实现上构造"标题:{} 文案:".format(text)的 prompt,使用task_prompt='adtext',min_dec_len默认 32 以保证文案的基本长度。
小说续写 API(novel_continuation)
def novel_continuation( text: str, min_dec_len: int = 2, seq_len: int = 512, topp: float = 0.9, penalty_score: float = 1.2 ) -> str- 小说续写 API。
text(str):小说上文。- 其余参数含义同上。
- 返回:
text(str):小说下文。
实现上构造"上文:{} 下文:".format(text)的 prompt,使用task_prompt='gPARAGRAPH'并采用单向生成,与“续写场景建议单向生成”的建议一致。
文本摘要 API(text_summarization)
def text_summarization( text: str, min_dec_len: int = 4, seq_len: int = 512, topp: float = 0.0, penalty_score: float = 1.0 ) -> str- 文本摘要 API。
text(str):文本段落。- 其余参数含义同上。
- 返回:
text(str):段落摘要。
该任务在实现上构造"文章:{} 摘要:".format(text)的 prompt,使用task_prompt='Summarization'。注意其topp默认值为0.0,即默认采用接近确定性的生成方式,保证摘要结果稳定、忠实于原文。
四、服务部署
PaddleHub Serving 可以部署一个在线文本生成服务,将上述 API 以 HTTP 接口的形式对外开放。
第一步:启动 PaddleHub Serving
运行启动命令:
$ hub serving start -m ernie_zeus这样就完成了一个文本生成在线服务 API 的部署,默认端口号为 8866。结合 serving.py 的实现可以看到,hub serving start支持-m/--modules指定模块、-p/--port指定端口(默认 8866)、--use_multiprocess多进程模式(Windows 不支持)以及--config/-c配置文件方式启动;端口被占用时会报错提示更换端口,停止服务可用hub serving stop -p 端口号。
第二步:发送预测请求
配置好服务端后,以下代码即可实现发送预测请求并获取预测结果:
import requests import json # 发送HTTP请求 # 参数参考自定义文本生成接口 data = {'text': '巨大的白色城堡'} headers = {"Content-type": "application/json"} url = "http://127.0.0.1:8866/predict/ernie_zeus" r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 获取返回结果 print(r.json()["results"])Gradio App 支持
从 PaddleHub 2.3.1 开始,支持在浏览器中访问链接http://127.0.0.1:8866/gradio/ernie_zeus查看并交互使用 ernie_zeus 的 Gradio App。
该能力由模块内的create_gradio_app方法(module.py)提供,界面内置了任务下拉框(text_summarization、copywriting_generation、novel_continuation、answer_generation、couplet_continuation、composition_generation、text_cloze 七种任务)以及 min_dec_len、seq_len、topp、penalty_score 四个滑杆控件,并预置了多个示例输入,无需编写任何前端代码即可体验各任务的生成效果。其路由实现位于 app_compat.py:访问/gradio/<module_name>时,服务端动态创建 Gradio App 并将/gradio/<module_name>/<path>下的所有资源代理到 Gradio 服务器。
五、更新历史
- 1.0.0:初始发布。
- 1.1.0:移除默认 AK 和 SK(即要求用户显式提供文心 API 凭证)。
- 1.2.0:添加 Serving 和 Gradio App 支持。
如需安装指定历史版本,可使用:
$ hub install ernie_zeus == 1.2.0六、小结
ERNIE 3.0 Zeus 模块以“云端 API + PaddleHub 封装”的方式,让开发者无需管理模型权重和 GPU 资源即可获得中文文本生成能力。本文覆盖了从凭证申请、环境安装、命令行与 Python 调用,到七类预置任务 API 的完整参数语义,以及 PaddleHub Serving 在线部署和 Gradio 可视化交互的完整链路。实际使用中,建议根据任务类型选择合适的task_prompt与is_unidirectional组合,并通过min_dec_len/seq_len控制输出长度、topp/penalty_score调节多样性与去重效果,以获得理想的生成结果。
- 人工智能
- 大模型
- 微调
- 模型推理服务
【免费下载链接】PaddleFormers
PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.
相关推荐
PaddleFormers 中 Stable Diffusion 文图生成模型:PaddleHub 安装、推理 API 与在线服务部署实战
PaddleFormers 中 Stable Diffusion 文图生成模型:PaddleHub 安装、推理 API 与在线服务部署实战 导读 本文基于 Pa
人工智能大模型微调模型推理服务PaddleFormers 中文词向量模型 w2v_people_daily_target_word-bigram_dim300 实战指南:安装、API 调用与 Serving 在线服务部署
PaddleFormers 中文词向量模型 w2v_people_daily_target_word bigram_dim300 实战指南:安装、API 调用与
人工智能大模型微调模型推理服务PaddleFormers 色情文本检测:porn_detection_gru 模型安装、API 预测与服务化部署完整指南
PaddleFormers 色情文本检测:porn_detection_gru 模型安装、API 预测与服务化部署完整指南 本指南基于 PaddleFormer
人工智能大模型微调模型推理服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考