首页/新闻资讯/正文详情

PaddleNLP 中 ERNIE 1.0 模型中文情感分类推理部署实战指南

发布时间:2026/9/26 2:04:53 来源:云帆数科 栏目:资讯中心
PaddleNLP 中 ERNIE 1.0 模型中文情感分类推理部署实战指南
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载ERNIE 1.0Enhanced Representation through kNowledge IntEgration是百度提出的知识增强语义理解模型通过对词、实体及实体关系的建模学习真实世界语义知识相较于 BERT 直接对先验语义知识单元建模具有更强的中文语义表示能力。本文基于 PaddleNLP 开源仓库中slm/model_zoo/ernie-1.0/finetune/deploy/目录下的官方部署示例完整讲解从模型微调、导出到 Python 推理部署的全流程重点剖析infer.py的实现原理与全部命令行参数。读完本文你将能够独立完成 ERNIE 1.0 中文情感分类模型在 CPU/GPU 上的推理部署并根据实际业务调整 batch size、序列长度、线程数等关键参数。1. 部署示例概览本部署示例位于 slm/model_zoo/ernie-1.0/finetune/deploy目录下提供infer.py脚本可快速完成在 CPU/GPU 上的中文情感分类任务 Python 推理。该示例以ChnSenticorp中文情感评论数据集上的文本分类任务为实战场景输入一段中文酒店评论或图书评论文本输出positive正面或negative负面的类别标签以及两类别的预测概率。推理脚本基于飞桨PaddlePaddle的Paddle Inference 预测引擎实现整个推理链路为加载已导出的推理模型静态图模型文件 权重文件使用AutoTokenizer对文本做分词、padding、truncation 预处理通过 Predictor 将输入喂给模型得到 logits对 logits 做 softmax 归一化取概率最大的类别作为预测结果。2. 前置条件先微调再导出推理模型infer.py需要的模型不是普通的动态图权重而是经过do_export 导出的推理模型。示例中模型是按照 ERNIE 1.0 训练文档 微调并导出得到的默认导出目录为model_zoo/ernie-1.0/finetune/tmp/chnsenticorp_v2/export。2.1 微调并导出模型在finetune目录下执行序列分类微调脚本 run_seq_cls.py同时开启模型导出功能cd slm/model_zoo/ernie-1.0/finetune # 开始 finetune 训练并导出模型 datasetchnsenticorp_v2 python run_seq_cls.py \ --do_train \ --do_eval \ --do_predict \ --do_export \ --model_name_or_path ernie-1.0-base-zh \ --dataset $dataset \ --output_dir ./tmp/$dataset \ --eval_steps 200 \ --save_steps 200 \ --metric_for_best_model eval_accuracy \ --load_best_model_at_end \ --save_total_limit 3与普通微调相比此命令新增了以下关键配置配置项作用--do_export开启模型导出功能训练完成后自动导出静态图推理模型--eval_steps/--save_steps评估和保存 checkpoint 的 step 间隔此处设为 200--metric_for_best_model eval_accuracy以验证集 accuracy 作为模型择优比较指标需保证save_steps是eval_steps的倍数--load_best_model_at_end训练结束时加载最优 checkpoint 再进行导出--save_total_limit 3最多保留 3 个 checkpoint超过限制时效果更差或更旧的 checkpoint 将被自动删除针对chnsenticorp_v2数据集仓库的 config.yml 中预设了超参数学习率0.00005、batch_size16、num_train_epochs8。脚本会通过ALL_DATASETS自动覆盖命令行同名参数见 utils.py 中 yaml 配置加载逻辑。2.2 模型导出与产出的文件导出过程由paddlenlp.transformers.export_model完成实现见 paddlenlp/transformers/export.py通过paddle.jit.to_static将动态图模型按input_spec转成静态图再paddle.jit.save保存同时把 tokenizer 配置一并写入导出目录。在 run_seq_cls.py 中模型输入规格被定义为两个[None, None]的 int64 张量input_ids分词后的 token 编号序列segment_idstoken_type_ids句对区分标记。导出完成后tmp/chnsenticorp_v2/export/目录下将包含model.jsonPIR 新执行模式或model.pdmodel旧模式推理模型结构文件model.pdiparams推理模型权重文件tokenizer 相关配置文件vocab 等。其中模型文件后缀由飞桨执行模式决定见 paddlenlp/utils/env.py 中的PADDLE_INFERENCE_MODEL_SUFFIX定义PIR 模式下为.json否则为.pdmodel权重文件后缀统一为.pdiparams。infer.py默认按前缀model拼装这两个文件名加载逻辑同样引用这两个常量。3. 快速开始CPU/GPU 推理进入deploy目录通过--model_dir指定导出的模型目录通过--device指定运行设备# CPU 推理 python infer.py --model_dir ../tmp/chnsenticorp_v2/export/ --device cpu # GPU 推理 python infer.py --model_dir ../tmp/chnsenticorp_v2/export/ --device gpu说明--model_dir的相对路径以deploy目录为基准即slm/model_zoo/ernie-1.0/finetune/deploy用户可按实际导出位置修改该路径。运行后脚本会自动加载chnsenticorp数据集的测试集load_dataset(chnsenticorp, splits[test])逐 batch 推理并打印每一条文本的预测结果输出形式如下...... Batch id: 1189, example id: 0, sentence: 作为五星级 酒店的硬件是差了点 装修很久 电视很小 只是位置很好 楼下是DFS 对面是海港城 但性价比不高, label: positive, negative prob: 0.0001, positive prob: 0.9999. Batch id: 1190, example id: 0, sentence: 最好别去,很差,看完很差想换酒店,他们竟跟我要服务费.也没待那房间2分种,居然解决了问题,可觉的下次不能去的,, label: negative, negative prob: 1.0000, positive prob: 0.0000. Batch id: 1191, example id: 0, sentence: 看了一半就看不下去了后半本犹豫几次都放下没有继续看的激情故事平淡的连个波折起伏都没有职场里那点事儿也学得太模糊没有具体描述而且杜拉拉就做一个行政而已是个人都会做的没有技术含量的工作 也能描写的这么有技术含量 真是为难作者了本来冲着畅销排行第一买来看看觉得总不至于大部分人都没品味吧结果证明这个残酷的事实一本让人如同嚼蜡的“畅销书”......, label: negative, negative prob: 0.9999, positive prob: 0.0001. Batch id: 1192, example id: 0, sentence: 酒店环境很好 就是有一点点偏 交通不是很便利 去哪都需要达车 关键是不好打 酒店应该想办法解决一下, label: positive, negative prob: 0.0003, positive prob: 0.9997. Batch id: 1193, example id: 0, sentence: 价格在这个地段属于适中, 附近有早餐店,小饭店, 比较方便,无早也无所, label: positive, negative prob: 0.1121, positive prob: 0.8879. Batch id: 1194, example id: 0, sentence: 酒店的位置不错附近都靠近购物中心和写字楼区。以前来大连一直都住但感觉比较陈旧了。住的期间酒店在进行装修翻新和升级房间设备。好是好希望到时房价别涨太多了。, label: positive, negative prob: 0.0000, positive prob: 1.0000. Batch id: 1195, example id: 0, sentence: 位置不很方便周围乱哄哄的卫生条件也不如其他如家的店。以后绝不会再住在这里。, label: negative, negative prob: 1.0000, positive prob: 0.0000. Batch id: 1196, example id: 0, sentence: 抱着很大兴趣买的买来粗粗一翻排版很不错姐姐还说快看吧如果好我也买一本。可是真的看了实在不怎么样。就是中文里夹英文单词说话才翻了2页实在不想勉强自己了。我想说的是练习英文单词靠这本书肯定没有效果其它好的方法比这强多了。, label: negative, negative prob: 1.0000, positive prob: 0.0000. Batch id: 1197, example id: 0, sentence: 东西不错不过有人不太喜欢镜面的我个人比较喜欢总之还算满意。, label: positive, negative prob: 0.0001, positive prob: 0.9999. Batch id: 1198, example id: 0, sentence: 房间不错,只是上网速度慢得无法忍受,打开一个网页要等半小时,连邮件都无法收。另前台工作人员服务态度是很好只是效率有得改善。, label: positive, negative prob: 0.0001, positive prob: 0.9999. ......每条输出包含四部分信息Batch id批次序号、example id批次内样本序号、sentence原始输入文本、label预测类别以及negative/positive prob两个类别的归一化概率。4. 参数说明infer.py支持的全部命令行参数如下表所示对应 infer.py 中parse_arguments的定义参数参数说明--model_dir必填。指定部署模型的目录目录下需包含model.pdmodel或model.json与model.pdiparams文件--batch_size输入的 batch size默认为 1--max_length最大序列长度默认为 128超过部分截断、不足部分 padding--device运行的设备可选范围[cpu, gpu]默认为cpu--device_id运行设备的 idGPU 卡号默认为 0--cpu_threads当使用 CPU 推理时指定推理的 CPU 线程数默认为 1--vocab_path可选tokenizer 词表目录路径为空时默认使用内置ernie-1.0分词器--model_prefix可选模型与权重文件前缀默认为model用于拼接model.pdmodel/model.pdiparams4.1 参数核心影响分析--batch_size控制每次喂给推理引擎的样本数。批量推理能充分利用矩阵运算的并行度吞吐更高默认为 1 时逐条推理延迟更稳定。脚本内部通过batchfy_text将测试集按该值切分为多个 batch。--max_length与微调时的max_seq_lengthconfig.yml 中chnsenticorp_v2默认 128保持一致效果最佳。过长文本会被截断过短文本会被 padding二者都会影响最终表征因此部署时的max_length建议与训练时对齐。--cpu_threads仅 CPU 推理生效对应Config.set_cpu_math_library_num_threads。线程数增加可提升 CPU 上矩阵运算的并行度但并非越大越好通常设置为机器物理核数附近。--device_idGPU 推理时指定使用的显卡编号对应Config.enable_use_gpu中的设备号参数。5. 源码深度解析infer.py 的推理链路下面逐段剖析 infer.py 的实现理解每一步背后做了什么。5.1 Predictor 初始化加载推理引擎与分词器class Predictor(object): def __init__(self, args): if args.vocab_path and os.path.isdir(args.vocab_path): self.tokenizer AutoTokenizer.from_pretrained(args.vocab_path) else: self.tokenizer AutoTokenizer.from_pretrained(ernie-1.0) model_file os.path.join(args.model_dir, args.model_prefix f{PADDLE_INFERENCE_MODEL_SUFFIX}) params_file os.path.join(args.model_dir, args.model_prefix f{PADDLE_INFERENCE_WEIGHTS_SUFFIX}) config inference.Config(model_file, params_file) if args.device gpu: config.enable_use_gpu(100, args.device_id) else: config.disable_gpu() config.set_cpu_math_library_num_threads(args.cpu_threads) config.switch_use_feed_fetch_ops(False) self.predictor inference.create_predictor(config) self.input_handles [self.predictor.get_input_handle(name) for name in self.predictor.get_input_names()] self.output_handle self.predictor.get_output_handle(self.predictor.get_output_names()[0])关键点分词器优先从--vocab_path指定的目录加载适用于导出自定义词表的模型未指定时回退到 PaddleNLP 内置的ernie-1.0分词器保证默认开箱即用。模型与权重文件通过--model_prefix默认model拼接推理模型文件与权重文件路径后缀常量来自paddlenlp.utils.env。推理配置GPU 模式下调用enable_use_gpu(100, device_id)100 为显存分配上限单位 MBCPU 模式下调用disable_gpu()并设置数学库线程数。feed/fetch 优化switch_use_feed_fetch_ops(False)关闭旧的 feed/fetch 算子走更高效的零拷贝推理接口。输入输出句柄按模型输入名拿到输入句柄此处为input_ids与token_type_ids取第一个输出作为 logits。5.2 预处理tokenizer 编码def preprocess(self, texts): encoded self.tokenizer( texts, max_lengthself.max_length, paddingTrue, truncationTrue, return_token_type_idsTrue ) input_ids np.array(encoded[input_ids], dtypeint64) token_type_ids np.array(encoded[token_type_ids], dtypeint64) return input_ids, token_type_idspaddingTrue同一 batch 内按最长序列补齐保证 batch 内张量形状一致truncationTrue超过max_length的文本截断return_token_type_idsTrue返回用于区分句对的 token type ids与导出模型的第二个输入对应结果转为int64的 numpy 数组作为推理引擎的 CPU 输入。5.3 推理与后处理def infer(self, input_ids, token_type_ids): self.input_handles[0].copy_from_cpu(input_ids) self.input_handles[1].copy_from_cpu(token_type_ids) self.predictor.run() return self.output_handle.copy_to_cpu() def postprocess(self, logits): probs softmax(logits, axis1) return {label: probs.argmax(axis1), confidence: probs}infer通过copy_from_cpu将输入拷贝到输入句柄predictor.run()执行一次前向再从输出句柄取回 CPU 结果postprocess使用scipy.special.softmax对 logits 按行axis1归一化为概率argmax(axis1)得到概率最大的类别索引类别索引到语义标签的映射在__main__中定义label_map {0: negative, 1: positive}因此该模型输出维度为 2负面 / 正面。5.4 主流程batch 推理与结果打印if __name__ __main__: args parse_arguments() predictor Predictor(args) test_ds load_dataset(chnsenticorp, splits[test]) texts_ds [d[text] for d in test_ds] label_map {0: negative, 1: positive} batch_texts batchfy_text(texts_ds, args.batch_size) for bs, texts in enumerate(batch_texts): outputs predictor.predict(texts) for i, sentence in enumerate(texts): label outputs[label][i] confidence outputs[confidence][i] print( fBatch id: {bs}, example id: {i}, sentence: {sentence}, flabel: {label_map[label]}, negative prob: {confidence[0]:.4f}, positive prob: {confidence[1]:.4f}. )主流程要点通过 PaddleNLP 数据集 APIload_dataset(chnsenticorp)自动加载内置的中文情感分类测试集无需手动准备数据batchfy_text按--batch_size将全部测试样本切分成批次每个批次调用predictor.predict内部串起 preprocess → infer → postprocess 三个步骤打印时保留 4 位小数概率label_map将 0/1 索引映射为negative/positive可读标签。6. 推理脚本的二次开发建议官方示例的infer.py是一个「数据集中自带测试集」的演示版本。将其改造成生产可用服务时可从以下几点入手建议在本地拷贝脚本后修改不改动仓库内容替换数据来源将load_dataset(chnsenticorp)替换为读取本地文件或接入消息队列逐条处理业务文本抽象 predict 接口保留Predictor类对外暴露predict(texts)便于接入 Flask/FastAPI 等 HTTP 服务调整--model_dir指向自己导出的任意 ERNIE 系列模型目录只要模型输入约定一致input_idstoken_type_ids即可复用CPU 服务化调优设置--cpu_threads为物理核心数并适当增大--batch_size换取吞吐多卡部署多路--device_id进程各自绑定一张 GPU配合负载均衡横向扩展。7. 总结本文完整覆盖了 ERNIE 1.0 中文情感分类模型从微调导出到 Python 推理部署的完整链路通过 run_seq_cls.py 配合--do_export导出静态图推理模型再由 infer.py 基于 Paddle Inference 完成 CPU/GPU 上的 batch 推理与概率输出。通过--device、--device_id、--batch_size、--max_length、--cpu_threads等参数可以灵活适配不同的硬件环境与业务吞吐需求深入阅读其源码实现也能为构建自定义的 ERNIE 推理服务提供可直接复用的工程骨架。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 10分钟搞定高精度中文情感分析ERNIE 预训练模型 Fine-tune 实战指南PaddleNLP 10分钟搞定高精度中文情感分析ERNIE 预训练模型 Fine tune 实战指南 导读 本文以 PaddleNLP 官方快速入门文档为主人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP SKEP 情感分析实战情感预训练模型的三类任务微调、Taskflow 预测与模型部署PaddleNLP SKEP 情感分析实战情感预训练模型的三类任务微调、Taskflow 预测与模型部署 情感分析旨在自动识别和提取文本中的倾向、立场、评价、人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP 中 Mixtral-8x7B 的模型推理与部署实战指南PaddleNLP 中 Mixtral 8x7B 的模型推理与部署实战指南 本指南基于 PaddleNLP 开源仓库中 docs/zh/llm/docs/pre人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇【免费下载】 矢量化神器vectorizer - 将PNG图像转换为SVG的利器下一篇第三章高级配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

OpenClaw-China-Docker故障排查完全清单:Permission denied、JSON非法、401/403等10大问题怎么解
OpenClaw-China-Docker故障排查完全清单:Permission denied、JSON非法、401/403等10大问题怎么解

OpenClaw-China-Docker故障排查完全清单:Permission denied、JSON非法、401/403等10大问题怎么解 【免费下载链接】openclaw-china-docker OpenClaw 的中国IM平台整合Docker版本,预装并配置了飞书、钉钉、QQ机器人、企业微信等主流中国IM软件的插件&… · 2026/9/26 2:04:53

TypeDoc 中 @throws 标签详解:为 TypeScript 函数与方法标注异常
TypeDoc 中 @throws 标签详解:为 TypeScript 函数与方法标注异常

开发工具文档 【免费下载链接】typedoc Documentation generator for TypeScript projects. 项目地址: https://gitcode.com/gh_mirrors/ty/typedoc 点击查看 免费下载 throws 是 TypeDoc 支持的标准块级标签(Block Tag),用于在函… · 2026/9/26 2:04:27

Windows-universal-samples 系统媒体传输控件(SMTC)手动集成指南:JavaScript 示例源码级解析
Windows-universal-samples 系统媒体传输控件(SMTC)手动集成指南:JavaScript 示例源码级解析

示例工程 【免费下载链接】Windows-universal-samples API samples for the Universal Windows Platform. 项目地址: https://gitcode.com/gh_mirrors/wi/Windows-universal-samples 点击查看 免费下载 本指南围绕 Windows-universal-samples 仓库中 archived/Syst… · 2026/9/26 2:04:27

AI 生成工具实测:用 Step-5-Preview 跑通 3D 游戏、金融分析与网页设计
AI 生成工具实测:用 Step-5-Preview 跑通 3D 游戏、金融分析与网页设计

1. Step-5-Preview:一次跑完三个方向的 AI 生产力工具先给结论:Step-5-Preview 是一个面向开发者和设计师的 AI 生成与预览工具,我上手之后最大的感受是它把“从需求到成品”的工作流连起来了。以前做 3D 游戏,我得先搭 Three.js … · 2026/9/26 4:44:25

Raft 与 Paxos 的异同与工程化选型:从规范到实现清单
Raft 与 Paxos 的异同与工程化选型:从规范到实现清单

Raft 与 Paxos 的异同与工程化选型:从规范到实现清单在分布式强一致性共识协议的浩瀚星空中,Paxos(Leslie Lamport 提出)被公认为分布式共识的理论鼻祖与数学奠基石,而 Raft(Diego Ongaro 提出)… · 2026/9/26 4:44:19

TS码流分析实战:PAT/PMT/PCR结构解析与播放排障
TS码流分析实战:PAT/PMT/PCR结构解析与播放排障

简介:一款专为TS流结构学习与广电故障排查设计的码流分析软件,以树形视图完整呈现节目关联表(PAT)、节目映射表(PMT)、业务描述表(SDT)、事件信息表(EIT)及字… · 2026/9/26 4:44:19

openclaw实战:用LLM代理搭建自主教育游戏开发流水线
openclaw实战:用LLM代理搭建自主教育游戏开发流水线

开头最近一个月,我基本把全部业余时间都压在了同一件事上:用 openclaw 搭一条 Autonomous Educational Game Development Pipeline,让 LLM 代理自主完成"从需求到可试玩教育游戏"的整个链路。这期间最让我上头的不是生成的游戏本身… · 2026/9/26 4:44:19

Windows下MinGW-w64免安装版配置与GCC编译实战
Windows下MinGW-w64免安装版配置与GCC编译实战

简介:一份已在Windows 64位环境下亲测可用的MingW64编译器工具集,面向需要在Windows平台编写C、C或Fortran程序的开发者,可直接解压启用,免去官方安装流程的配置困扰,也适合作为便携式GCC环境随用随取。压缩包共3125个… · 2026/9/26 4:44:19

Linux磁盘与文件系统全攻略:从分区、格式化到挂载实战
Linux磁盘与文件系统全攻略:从分区、格式化到挂载实战

1. 开篇:当拿到一台陌生的Linux服务器,我该先看什么说实话,我见过太多人一接触Linux就急着去敲各种花哨的命令,结果磁盘满了我不知道,分区表错了不会修,最后只能看着系统一步步卡死。我自己刚入行那两年也干… · 2026/9/26 4:44:19

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码