新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleNLP 中基于 TextCNN 的中文对话情绪识别实战:从预训练微调、静态图导出到推理部署

发布时间:2026/9/25 5:22:19来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Airtest aircv SIFT 图像识别模块解析:特征点匹配、置信度计算与实战使用指南 2026/9/25 6:05:51

Airtest aircv SIFT 图像识别模块解析:特征点匹配、置信度计算与实战使用指南

测试质量保障计算机视觉 【免费下载链接】Airtest UI Automation Framework for Games and Apps 项目地址: https://gitcode.com/gh_mirrors/ai/Airtest 点击查看 免费下载 导读 airtest.aircv.sift 是 Airtest 开源 UI 自动化框架(项目主页&#xff0…

阅读更多 →
机器学习大作业:个贷违约预测AUC优化与三种模型对比 2026/9/25 6:05:51

机器学习大作业:个贷违约预测AUC优化与三种模型对比

简介:这份资源是面向高校机器学习课程大作业场景的个贷违约预测完整项目源码,适合正在完成课程设计、需要参考完整建模流程的本科生与研究生。项目以ROC曲线下面积AUC作为核心评价指标,围绕描述性聚类到软聚类的思路展开,并实现了…

阅读更多 →
无障碍修复人力估算翻译:从工程师人天到团队真实日历的严谨换算 —— vscode-gitlens a11y-remediate 技能实战指南 2026/9/25 6:05:51

无障碍修复人力估算翻译:从工程师人天到团队真实日历的严谨换算 —— vscode-gitlens a11y-remediate 技能实战指南

开发工具版本控制 【免费下载链接】vscode-gitlens Supercharge Git inside VS Code and unlock untapped knowledge within each repository — Visualize code authorship at a glance via Git blame annotations and CodeLens, seamlessly navigate and explore Git reposit…

阅读更多 →
JSP+SqlServer房产中介系统毕设:从环境搭建到答辩避坑全指南 2026/9/25 6:05:51

JSP+SqlServer房产中介系统毕设:从环境搭建到答辩避坑全指南

简介:这是一套面向高校计算机相关专业学生的房产中介系统毕业设计参考资料,采用JSP与SqlServer技术栈实现,适合作为毕设项目、课程设计或工程实训的参考方案。系统涵盖用户注册登录、房屋供求信息录入(出租、出售、求购、求租&…

阅读更多 →
WPScan 如何利用插件 CHANGELOG.md 定位版本:以 HTML Forms 1.3.6 为实例的 ChangeLog 动态查找器深度解析 2026/9/25 6:05:51

WPScan 如何利用插件 CHANGELOG.md 定位版本:以 HTML Forms 1.3.6 为实例的 ChangeLog 动态查找器深度解析

网络安全漏洞扫描渗透测试应用安全CLI 【免费下载链接】wpscan WPScan WordPress security scanner. Written for security professionals and blog maintainers to test the security of their WordPress websites. Contact us via contactwpscan.com 项目地址: ht…

阅读更多 →
工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现 2026/9/25 6:05:45

工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现

简介:这份PPT方案面向工业运维工程师、设备管理人员及AR技术方案选型者,系统梳理了以XR技术为核心的智能巡检落地路径,重点解决传统巡检中状态参数无法实时查看、误操作漏检、专业水平参差与应急处理能力不足等痛点。包内共1个pptx文件&#…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉