PaddleNLP 中基于 TextCNN 的中文对话情绪识别实战:从预训练微调、静态图导出到推理部署
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文围绕 PaddleNLP 仓库中的 对话情绪识别示例 展开讲解如何用一个百度提供的 TextCNN 预训练模型在机器人聊天数据集RobotChat上完成积极/消极/中性三分类微调并走通“数据准备 → 训练 → 静态图参数导出 → 动态图预测与推理部署”的完整链路。读完本文你可以复制示例中的命令独立跑通训练与预测并结合 model.py、train.py 等源码理解模型结构与训练流程的实现细节。任务与示例代码结构情感分析旨在自动识别和提取文本中的倾向、立场、评价、观点等主观信息其中对话情绪识别是一个典型任务针对智能对话中的用户文本自动判断该文本的情绪类别并给出相应置信度情绪类型分为积极positive、消极negative和中性neutral。本示例展示了如何用 TextCNN 预训练模型在机器人聊天数据集上进行 Fine-tune完成中文对话情绪识别任务。示例目录结构如下textcnn/ ├── deploy # 部署 │ └── python │ └── predict.py # python预测部署示例 ├── data.py # 数据处理脚本 ├── export_model.py # 动态图参数导出静态图参数脚本 ├── model.py # 模型组网脚本 ├── predict.py # 模型预测脚本 ├── README.md # 文档说明 └── train.py # 对话情绪识别任务训练脚本对应仓库内的实际文件data.py读取 TSV 数据、构造 DataLoader、预测数据预处理train.py加载词表与数据、组网、加载预训练参数、执行fit训练/评估/测试model.pyTextCNNModel网络结构定义export_model.py把动态图参数导出为静态图参数predict.py动态图预测脚本deploy/python/predict.py基于paddle.inference的静态图部署预测示例。模型结构TextCNNModel 与 CNNEncoder先看 model.py 中的网络组网这是理解整个示例的基础class TextCNNModel(nn.Layer): def __init__( self, vocab_size, num_classes, emb_dim128, padding_idx0, num_filter128, ngram_filter_sizes(1, 2, 3), fc_hidden_size96, ): super().__init__() self.embedder nn.Embedding(vocab_size, emb_dim, padding_idxpadding_idx) self.encoder CNNEncoder(emb_dimemb_dim, num_filternum_filter, ngram_filter_sizesngram_filter_sizes) self.fc nn.Linear(self.encoder.get_output_dim(), fc_hidden_size) self.output_layer nn.Linear(fc_hidden_size, num_classes) def forward(self, text): # Shape: (batch_size, num_tokens, embedding_dim) embedded_text self.embedder(text) # Shape: (batch_size, len(ngram_filter_sizes) * num_filter) encoder_out paddle.tanh(self.encoder(embedded_text)) # Shape: (batch_size, fc_hidden_size) fc_out paddle.tanh(self.fc(encoder_out)) # Shape: (batch_size, num_classes) logits self.output_layer(fc_out) return logits从源码结构看前向流程分为四步词嵌入nn.Embedding(vocab_size, 128, padding_idx...)将 token id 序列映射为(batch_size, num_tokens, 128)的向量序列padding_idx指定 [PAD] 的索引训练与预测脚本中均由词表vocab.to_indices([PAD])得到CNN 编码使用 PaddleNLP 内置的paddlenlp.seq2vec.CNNEncoder见 paddlenlp/seq2vec/encoder.py。它对每个 n-gram 卷积窗口尺寸创建一个nn.Conv2D(in_channels1, out_channelsnum_filter, kernel_size(i, emb_dim))卷积层卷积次数为num_tokens - ngram_size 1随后对每个卷积通道做最大池化。因此池化后的输出维度为num_filter * len(ngram_filter_sizes)即示例中128 * 3 384全连接降维nn.Linear(384, 96)加tanh激活分类输出nn.Linear(96, num_classes)输出三分类 logits。这里有一个容易踩坑的细节当ngram_filter_sizes(1, 2, 3)时输入序列长度必须不小于最大的 n-gram 窗口3否则 3-gram 卷积无法产生任何输出。这一点在 data.py 的preprocess_prediction_data中得到了印证# 序列长度应不小于 TextCNN 模型中最大的 ngram_filter_size if seq_len max_ngram_filter_size: ids.extend([pad_token_id] * (max_ngram_filter_size - seq_len))即对短于 3 个词的输入用 pad token 补齐到长度 3。此外model.py 中TextCNNModel的默认ngram_filter_sizes是(1, 2, 3)而CNNEncoder自身的默认值是(2, 3, 4, 5)示例脚本在实例化模型时显式传入了(1, 2, 3)两者保持一致即可。数据准备数据集示例提供了一份已标注的机器人聊天数据集包含训练集train.tsv、开发集dev.tsv和测试集test.tsv可通过以下命令下载并解压wget https://bj.bcebos.com/paddlenlp/datasets/RobotChat.tar.gz tar xvf RobotChat.tar.gz从 data.py 的read_custom_data函数可以看到数据文件的读取约定def read_custom_data(filename): Reads data. with open(filename, r, encodingutf-8) as f: # Skip head next(f) for line in f: data line.strip().split(\t) label, text data yield {text: text, label: label}即TSV 格式、首行是表头会被跳过、每行以制表符分隔且标签在前、文本在后。三类标签在 train.py 中通过label_map {0: negative, 1: neutral, 2: positive}映射为 0/1/2 三个类别 id训练、预测、部署三处脚本的 label_map 定义完全一致这也是保证预测结果类别顺序正确的前提。词表下载模型训练前需要先下载词表文件word_dict.txt用于构造词-id 映射关系wget https://bj.bcebos.com/paddlenlp/robot_chat_word_dict.txtNOTE词表的选择和实际应用数据相关需根据实际数据选择词表。训练脚本中词表通过 PaddleNLP 的Vocab加载并注入[UNK]与[PAD]两个特殊 tokenvocab Vocab.load_vocabulary(args.vocab_path, unk_token[UNK], pad_token[PAD])后续分词由JiebaTokenizer(vocab)完成即先用 jieba 切词、再查词表得到 id 序列convert_example函数。预训练模型下载示例提供了一个百度基于海量数据训练好的 TextCNN 模型用户通过以下方式下载预训练模型wget https://bj.bcebos.com/paddlenlp/models/textcnn.pdparams对应 train.py 中的加载逻辑当init_from_ckpt指向一个具体文件如./textcnn.pdparams时直接paddle.load后model.set_dict(state_dict)完成预训练参数的初始化随后在 RobotChat 数据上做 finetune。模型训练下载好词表和预训练模型后即可在机器人聊天数据集上 finetune在训练集train.tsv上训练并在开发集dev.tsv上验证通过--init_from_ckpt./textcnn.pdparams指定 TextCNN 预训练模型。CPU 启动python train.py --vocab_path./robot_chat_word_dict.txt \ --init_from_ckpt./textcnn.pdparams \ --devicecpu \ --lr5e-5 \ --batch_size64 \ --epochs10 \ --save_dir./checkpoints \ --data_path./RobotChatGPU 启动unset CUDA_VISIBLE_DEVICES python -m paddle.distributed.launch --gpus 0 train.py \ --vocab_path./robot_chat_word_dict.txt \ --init_from_ckpt./textcnn.pdparams \ --devicegpu \ --lr5e-5 \ --batch_size64 \ --epochs10 \ --save_dir./checkpoints \ --data_path./RobotChatXPU 启动python train.py --vocab_path./robot_chat_word_dict.txt \ --init_from_ckpt./textcnn.pdparams \ --devicexpu \ --lr5e-5 \ --batch_size64 \ --epochs10 \ --save_dir./checkpoints \ --data_path./RobotChat以上参数表示默认值与 train.py 中argparse定义一致参数说明默认值--vocab_path词汇表文件路径./robot_chat_word_dict.txt--init_from_ckpt恢复模型训练的断点路径或预训练参数文件None--device选用什么设备进行训练可选 cpu、gpu 或 xpu使用 gpu 训练时由参数 gpus 指定 GPU 卡号gpu--lr学习率5e-5--batch_size运行一个 batch 的大小64--epochs训练轮次10--save_dir训练保存模型的文件路径checkpoints/--data_path数据集文件路径./RobotChat从源码看训练流程的核心是 PaddlePaddle 高层 APIpaddle.Model模型包裹后配置 Adam 优化器、CrossEntropyLoss损失和Accuracy指标然后调用model.fit(train_loader, dev_loader, epochs..., save_dir..., callbacks...)程序运行时自动完成训练、开发集评估与测试训练结束后还会在测试集上执行一次model.evaluate。训练前通过set_seed(1000)固定random、numpy与paddle的随机种子保证结果可复现。数据侧由 data.py 的create_dataloader构造 DataLoader训练集使用DistributedBatchSamplerGPU 多卡启动时按卡自动切分验证/测试集使用BatchSampler且不 shuffle。训练过程中模型会自动保存到指定的save_dir中如checkpoints/ ├── 0.pdopt ├── 0.pdparams ├── 1.pdopt ├── 1.pdparams ├── ... └── final.pdparams其中*.pdparams是模型参数*.pdopt是对应轮次的优化器状态。NOTE:如需恢复模型训练断点续训init_from_ckpt只需指定到文件名即可不需要添加文件尾缀。如--init_from_ckptcheckpoints/0即可程序会自动加载模型参数checkpoints/0.pdparams也会自动加载优化器状态checkpoints/0.pdopt。使用动态图训练结束之后还可以将动态图参数导出成静态图参数具体代码见 export_model.py静态图参数保存在output_path指定路径中。运行方式python export_model.py --vocab_path./robot_chat_word_dict.txt --params_path./checkpoints/final.pdparams --output_path./static_graph_params其中params_path是动态图训练保存的参数路径output_path是静态图参数导出路径。export_model.py 的导出实现也很简短重新加载词表并按相同参数ngram_filter_sizes(1, 2, 3)重建TextCNNModel载入final.pdparams后用paddle.jit.to_static声明输入规格InputSpec(shape[None, None], dtypeint64)batch 维与序列维均可变再paddle.jit.save落盘。模型预测动态图训练完成后predict.py 可以直接加载动态图参数进行预测CPU 启动python predict.py --vocab_path./robot_chat_word_dict.txt \ --devicecpu \ --params_path./checkpoints/final.pdparamsGPU 启动export CUDA_VISIBLE_DEVICES0 python predict.py --vocab_path./robot_chat_word_dict.txt \ --devicegpu \ --params_path./checkpoints/final.pdparamsXPU 启动python predict.py --vocab_path./robot_chat_word_dict.txt \ --devicexpu \ --params_path./checkpoints/final.pdparams待预测数据如以下示例你再骂我我真的不跟你聊了 你看看我附近有什么好吃的 我喜欢画画也喜欢唱歌预测流程在源码中对应两段逻辑先经preprocess_prediction_data函数处理jieba 分词 查词表 短序列补齐再调用predict函数输出结果。predict内部将数据按batch_size切块用Pad(axis0, pad_valpad_token_id)对齐同批样本前向得到 logits 后经softmax → argmax映射回label_map中的类别字符串输出形如Data: 你再骂我我真的不跟你聊了 Label: negative Data: 你看看我附近有什么好吃的 Label: neutral Data: 我喜欢画画也喜欢唱歌 Label: positivepredict.py还支持--batch_size默认 1与--params_path默认./checkpoints/final.pdparams等参数可用于批量预测自己的文本。静态图导出后的 Python 部署预测导出静态图参数之后可以用于部署deploy/python/predict.py 提供了 Python 部署预测示例。运行方式需区分 PIR 机制的开关状态开启 PIR 机制3.0.0 默认python deploy/python/predict.py --model_filestatic_graph_params.json --params_filestatic_graph_params.pdiparams未开启 PIRpython deploy/python/predict.py --model_filestatic_graph_params.pdmodel --params_filestatic_graph_params.pdiparams两种命令的差异仅在模型描述文件后缀.json与.pdmodel权重文件都是static_graph_params.pdiparams。这一后缀约定在 paddlenlp/utils/env.py 中体现为PADDLE_INFERENCE_MODEL_SUFFIXPIR 下为.json非 PIR 下为.pdmodel与PADDLE_INFERENCE_WEIGHTS_SUFFIX.pdiparams。部署脚本内部的关键流程构造paddle.inference.Config(model_file, params_file)并按设备配置GPU 调用config.enable_use_gpu(100, 0)CPU 调用config.disable_gpu()还可进一步启用 MKL-DNN、设置 CPU 线程数XPU 调用config.enable_xpu(100)同时config.switch_use_feed_fetch_ops(False)创建 Predictor 后通过get_input_handle / get_output_handle拿到输入输出句柄预测时复用与训练一致的预处理jieba 分词 短序列按max_ngram_filter_size3补齐再经Pad对齐成批次copy_from_cpu送入 Predictor、predictor.run()执行推理输出 logits 后softmax → argmax得到情绪标签。该脚本还暴露了--max_seq_length默认 128、--batch_size默认 2、--device默认 gpu等参数方便按实际部署场景调整。小结与参考本示例用约四个脚本串起了 TextCNN 情绪识别任务的全流程数据侧以 TSV jieba 分词 词表查 id 的方式准备输入训练侧借助paddle.Model高层 API 完成预训练初始化、三分类微调与自动断点保存预测与部署侧分别提供了动态图直连预测和paddle.inference静态图部署两条路径且两者共享同一套分词与短序列补齐逻辑保证训练与部署的行为一致。TextCNN 参考论文EMNLP2014-Convolutional Neural Networks for Sentence Classification赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP Transformer 机器翻译实战从 WMT14 英德翻译的训练、推理到静态图部署PaddleNLP Transformer 机器翻译实战从 WMT14 英德翻译的训练、推理到静态图部署 机器翻译Machine Translation是人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP 昇腾 NPU 全流程实战llama2-13B 微调训练与静态图推理PaddleNLP 昇腾 NPU 全流程实战llama2 13B 微调训练与静态图推理 导读 本文基于 PaddleNLP 在昇腾 Ascend NPU 上的人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPActon蓝绿部署无停机部署策略Acton蓝绿部署无停机部署策略 Acton作为TON智能合约开发的完整工具链提供了强大的蓝绿部署能力帮助开发者实现零停机时间的智能合约更新。本文将详细介人工智能语音音频上一篇如何快速搭建AWS CodePipeline全流程从零到英雄的DevOps持续集成实战指南下一篇突破M系列芯片限制xmrig macOS高性能计算完整适配指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Mage 集成 Commercetools 数据源:配置认证与流式同步实战指南

Mage 集成 Commercetools 数据源:配置认证与流式同步实战指南

数据工程数据编排ETL任务调度批处理流处理数据集成后端 【免费下载链接】mage-ai 🧙 Build, run, and manage data pipelines for integrating and transforming data. 项目地址: https://gitcode.com/gh_mirrors/ma/mage-ai 点击查看 免费下载 Commerc…

2026/9/25 5:22:20 阅读更多 →
IDURAR ERP CRM 中文部署实战指南:MERN 全栈开源 ERP/CRM 的安装、配置与本地运行

IDURAR ERP CRM 中文部署实战指南:MERN 全栈开源 ERP/CRM 的安装、配置与本地运行

后端前端企业应用CRM 【免费下载链接】idurar-erp-crm Free Open Source ERP CRM Software Accounting Invoicing | Node.Js React 项目地址: https://gitcode.com/gh_mirrors/id/idurar-erp-crm 点击查看 免费下载 IDURAR 是一个基于 "Fair-Code"&#…

2026/9/25 5:22:20 阅读更多 →
PaddleSpeech 实战:基于 CSMSC 语料训练与部署 VITS 端到端语音合成模型

PaddleSpeech 实战:基于 CSMSC 语料训练与部署 VITS 端到端语音合成模型

人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword…

2026/9/25 5:21:20 阅读更多 →

最新新闻

OFDM频谱感知实战:10节点协作+循环平稳检测+历史谱图可视化

OFDM频谱感知实战:10节点协作+循环平稳检测+历史谱图可视化

简介:本资源是一套面向通信工程专业高年级本科生及无线认知网络研究者的OFDM信号协作频谱感知MATLAB仿真方案,聚焦于解决单节点在阴影与深度衰落场景下检测不可靠的问题,通过融合多节点感知结果提升频谱判断准确性。压缩包共6个文件&#xff…

2026/9/25 9:41:42 阅读更多 →
2026年AI大模型应用盘点:从通用对话到Coding Agent的15家主流工具实测

2026年AI大模型应用盘点:从通用对话到Coding Agent的15家主流工具实测

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

2026/9/25 9:41:42 阅读更多 →
计算机网络简答题与论述题核心考点梳理:从TCP/IP到子网划分

计算机网络简答题与论述题核心考点梳理:从TCP/IP到子网划分

简介:计算机网络课程的简答题与论述题常考内容,集中整理进一份Word文档,面向高校学生、考研备考生及求职面试者备考使用。文档系统梳理了电路交换、分组交换与报文交换的优缺点,分组传输中传输、传播、排队等延迟的影响因素&#…

2026/9/25 9:41:42 阅读更多 →
从TMN框架到E300实战:传输网管入门核心知识梳理

从TMN框架到E300实战:传输网管入门核心知识梳理

简介:《中兴传输网管入门知识》是一份面向通信行业新手与传输网管初学者的入门教程,系统梳理电信管理网(TMN)核心概念及其在SDH传输网络中的落地方式。内容从TMN的引入背景、三大结构(功能结构、信息结构、物理结构&am…

2026/9/25 9:41:42 阅读更多 →
Atlas 300V 24G部署YOLO全流程:昇腾推理卡环境搭建与优化

Atlas 300V 24G部署YOLO全流程:昇腾推理卡环境搭建与优化

1. Atlas 300V 24G到底是一张什么卡如果你也是被"atlas部署yolo"这个词带进来的,那你大概率跟我一样,手头或公司机房里躺着一张Atlas 300V 24G,想赶紧把YOLO跑起来,结果一查资料各种术语铺过来,头都大了。先…

2026/9/25 9:41:42 阅读更多 →
Linux服务器SSH连接与GPU开发环境实操指南

Linux服务器SSH连接与GPU开发环境实操指南

1. 项目概述:这不是“连服务器”,而是重建你和算力之间的信任链 “手把手教你如何连上实验室的服务器”——这句话在研究生新生群里刷屏的频率,几乎和开学季的快递单号一样高。但真正点开教程的人,十有八九卡在第二步&#xff1a…

2026/9/25 9:40:41 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →