- 人工智能
- 大模型
- 微调
- 模型推理服务
【免费下载链接】PaddleFormers
PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.
导读
reading_pictures_writing_poems是 PaddleFormers 仓库中基于 PaddleHub 构建的文本生成类模块,能够"看图写诗"——输入一张图片,自动输出一首古诗词。本指南以该模块的官方文档为主体,结合仓库内 module.py 源码,完整讲解模型基本信息、多网络级联的工作原理、环境依赖与安装步骤、命令行与 Python API 两种预测方式,以及参数细节与更新历史,帮助读者快速上手并理解其底层调用链。
一、模型基本信息
| 模型名称 | reading_pictures_writing_poems |
|---|---|
| 类别 | 文本-文本生成 |
| 网络 | 多网络级联 |
| 数据集 | - |
| 是否支持 Fine-tuning | 否 |
| 模型大小 | 3.16K |
| 最新更新日期 | 2021-04-26 |
| 数据指标 | - |
从基本信息表可以看出,该模块本质上是多个 PaddleHub 预训练模型的级联编排(多网络级联),自身不携带完整网络权重,因此模型大小仅 3.16K,且不支持 Fine-tuning,仅用于预测推理。
模型介绍
看图写诗(reading_pictures_writing_poems)模型可自动根据图像生成古诗词,该 PaddleHub Module 支持预测。官方文档给出的运行效果示例如下:输入一张风景图片,模型生成的古诗为:
- 蕾蕾海河海,岳峰岳麓蔓。
- 不萌枝上春,自结心中线。
二、工作原理:多网络级联的生成链路
要真正理解该模块,需要先看清其内部调用关系。虽然官方文档将"网络"标注为"多网络级联",但并未展开细节,这里从仓库源码 module.py 出发还原完整链路。
2.1 级联的三个子模型
模块在__init__中初始化了三个 PaddleHub 子模块(见 module.py):
| 模块属性 | 实际加载的子模型 | 作用 |
|---|---|---|
module_image | efficientnetb4_imagenet | 图像分类,识别图片内容 |
module_similar | ernie_gen_couplet | 对联生成,为古诗提供近义词语料 |
module_poem | ernie_gen_poetry | 古诗生成,产出完整诗篇 |
需要特别说明:官方文档 readme.md 中写的是依赖xception71_imagenet、ernie_gen_couplet、ernie_gen_poetry这 3 个模型,但从当前仓库的源码结构看,module.py第 24 行实际加载的是efficientnetb4_imagenet(对应仓库目录 modules/image/classification/efficientnetb4_imagenet)。结合 1.1.0 版本更新说明中"更换分类模型"的描述可以推断,文档正文可能未随 1.1.0 版本同步更新,实际以源码为准。若本地未安装这 3 个子模型,代码运行时会自动下载。
2.2 WritingPoem 的四步生成流水线
WritingPoem方法的完整流程(module.py)如下:
- 图像分类:调用
module_image.classification(paths=[image]),取分类结果中得分最高的类别PictureClassification。 - 类别翻译:使用
translate库的Translator(to_lang="chinese")将英文类别名翻译为中文,作为后续生成的关键词。 - 近义词生成:将中文类别作为文本,调用
module_similar.generate(texts=texts, use_gpu=use_gpu, beam_width=20)生成 20 条候选对联/近义词;再通过is_chinese方法过滤,仅保留"全为中文且长度大于 1"的字符串,存入Words列表。 - 古诗组装与续写:
- 取前 8 个合法词语两两拼接为
FirstWord~FourthWord,进而组成出句ChuJu(上句)和对句DuiJu(下句); - 用
"{:.5},{:.5}。"的格式约束上下句各取 5 个字符,得到上阕FirstPoetry; - 调用
module_poem.generate(texts=FirstPoetry, use_gpu=use_gpu, beam_width=5)续写下阕,并用"{:.12}"截取 12 个字符; - 最终合并上阕与下阕,返回结构化结果。
- 取前 8 个合法词语两两拼接为
is_chinese校验逻辑(module.py)通过 Unicode 区间\u4e00~\u9fff逐一判断字符,并剔除长度小于等于 1 的字符串,确保拼接出的诗句均为纯中文词语。
2.3 底层古诗生成实现
级联链路的最后一环ernie_gen_poetry对应仓库 modules/text/text_generation/ernie_gen_poetry,其generate接口(module.py)展示了更多实现细节:
- 加载
ErnieForGeneration.from_pretrained("ernie-1.0"),并用本地微调权重ernie_gen_poetry.pdparams覆盖模型参数; - 使用
ErnieTokenizer编码输入文本,通过beam_search_infilling(decode.py)执行束搜索填充式生成,关键解码参数包括max_decode_len=80、max_encode_len=20、beam_width(默认 5)、tgt_type_id=1; - 输入校验会对"缺少逗号句号""上下句不对仗""含非中文字符"的文本给出告警,提示可能产生不符合预期的输出——这也解释了为什么看图写诗模块要精心拼装出对仗工整的 5 字上阕再交给该模型续写。
三、环境依赖与安装
3.1 环境依赖
官方文档要求的依赖如下:
paddlepaddle >= 1.8.2paddlehub >= 1.8.0,安装方法可参考 PaddleHub 安装文档translate(用于将图像分类结果翻译为中文):
$ pip install translate仓库内 requirements.txt 内容为translate,与文档描述一致,可一键安装:
$ pip install -r modules/text/text_generation/reading_pictures_writing_poems/requirements.txt3.2 安装模块
$ hub install reading_pictures_writing_poems安装说明:
- 本模型运行还需要用到
efficientnetb4_imagenet(源码实际引用)、ernie_gen_couplet、ernie_gen_poetry这 3 个模型(依赖清单以 module.py 源码为准); - 若未预先安装这 3 个模型,代码运行时会自动下载;
- 如安装遇到问题,可参考仓库内的零基础安装指南:Windows 安装、Linux 安装、MacOS 安装。
四、模型 API 预测
4.1 命令行预测
安装完成后,可通过hub run直接对图片进行看图写诗:
$ hub run reading_pictures_writing_poems --input_image "/PATH/TO/IMAGE"命令行参数在源码 module.py 中定义:
--input_image:必选输入参数,类型str,为待检测图片的路径;若文件不存在会抛出RuntimeError("File %s is not exist.");--use_gpu:可选配置参数,类型经ast.literal_eval解析(即支持传入True/False),默认False,用于控制是否使用 GPU 推理。
4.2 预测代码示例
import paddlehub as hub readingPicturesWritingPoems = hub.Module(name="reading_pictures_writing_poems") results = readingPicturesWritingPoems.WritingPoem(image="/PATH/TO/IMAGE", use_gpu=False) for result in results: print(result)代码要点:
- 通过
hub.Module(name="reading_pictures_writing_poems")加载模块; - 调用
WritingPoem(image=..., use_gpu=...)完成一次预测; - 返回结果为列表,逐条打印即可看到生成的古诗词。
4.3 API 详解
def WritingPoem(image, use_gpu=False):看图写诗预测接口,输入一张图像,输出一首古诗词。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
image | str | 待检测的图片路径 |
use_gpu | bool | 是否使用 GPU 进行预测,默认False |
返回
results(list[dict]):识别结果的列表,列表中每一个元素为 dict,包含以下关键字:image:原输入图片的路径;poetry:输出的古诗词文本。
从源码 module.py 可以看到,最终返回值形如:
[{'image': '/PATH/TO/IMAGE', 'poetry': '上阕五言两句,下阕续写十二字'}]五、服务部署说明
官方文档明确指出:本模型不支持 hub serving 部署。原因可以从模型架构推断——WritingPoem内部依赖translate库的在线翻译服务以及三个级联子模型,生成流程包含外部服务调用与多步文本处理,无法被 PaddleHub Serving 的标准服务化流程直接封装。因此如需将其集成到线上服务,只能在自己的应用代码中按上文示例调用。
六、更新历史
- 1.0.0:初始发布。
- 1.1.0:移除 Fluid API,更换分类模型(从源码看,图像分类模型已更换为
efficientnetb4_imagenet;模块版本号在 module.py 的@moduleinfo中登记为1.1.0,作者为 Mr.郑先生_)。
注意:官方文档更新历史一节末尾附带的安装命令疑似为笔误(
hub install porn_detection_lstm==1.1.0与看图写诗模块无关),实际安装请以第二节中的hub install reading_pictures_writing_poems为准。
七、实践要点总结
- 级联思想:看图写诗不是一个端到端大模型,而是"图像分类 → 类别翻译 → 对联近义词生成 → 古诗续写"四条子链路的编排,理解 module.py 的调用顺序是二次开发的关键;
- 依赖完整性:首次运行前确保已安装
translate库以及efficientnetb4_imagenet、ernie_gen_couplet、ernie_gen_poetry三个子模型,缺失时 PaddleHub 会尝试自动下载; - 文本质量约束:底层
ernie_gen_poetry对输入文本的对仗性与中文纯净度敏感(见 ernie_gen_poetry/module.py 的告警逻辑),这也是模块源码用is_chinese过滤、用固定格式拼装上阕的原因; - 部署边界:该模块不支持 hub serving,需要在线服务时应在自身应用中调用 Python API 自行封装。
- 人工智能
- 大模型
- 微调
- 模型推理服务
【免费下载链接】PaddleFormers
PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.
相关推荐
古诗词生成API终极指南:三步快速上手AI诗词创作
古诗词生成API终极指南:三步快速上手AI诗词创作 一言·古诗词 API 是一个可以随机返回一句古诗词名句的接口,采用 Vert.x + Redis 全异步开发
后端深入理解TSDProxy工作原理:端口转发与流量路由的实现机制
深入理解TSDProxy工作原理:端口转发与流量路由的实现机制 TSDProxy(Tailscale Docker Proxy)是一款强大的端口转发与流量路由工
【免费下载】 探索古诗词之美:《诗词》—— 一个开源的古诗词数据库
探索古诗词之美:《诗词》—— 一个开源的古诗词数据库 在这个快节奏的时代,我们常常忘记停下来欣赏传统文化的魅力。而【诗词】()是一个由开发者 @michaell
后端全文检索API网关
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考