【毕设项目】基于TextCNN与BERT的中文文本情感与主题联合分类系统设计与实现

📅 2026/7/10 8:56:18
【毕设项目】基于TextCNN与BERT的中文文本情感与主题联合分类系统设计与实现
项目概述本毕设项目实现了一个中文文本双任务联合分类系统能够对任意一段中文评论或短文同时完成主题分类6大类生活、求助、学校、科研、分享、其他情感分类二分类正面/负面系统内置了TextCNN轻量级和BERT预训练微调两种经典模型并提供了完整的训练、评估、可视化以及Flask Web演示系统具备单条预测、批量CSV预测、双模型对比、结果图表展示等功能可作为计算机方向本科毕业设计的完整实践案例。一、选题背景与意义1.1 现实需求在社交媒体、电商评论、政务舆情等场景中快速了解一段文本的话题领域和情绪倾向具有重要价值。传统单一任务分类只能获取一个维度信息而联合分类可以在一次推理中输出更丰富的语义标签提升下游分析效率。1.2 技术选型理由TextCNN结构简单、训练快速、易于部署适合作为基线模型对比验证深度预训练模型的优势。BERT基于Transformer的双向编码器通过大规模中文预训练具备强大的语义理解能力是当前文本分类任务的主流方案。双模型对比可为实际业务提供“速度优先”或“精度优先”的灵活选择也体现毕业设计中的对比实验思想。二、系统总体设计2.1 功能模块划分模块子功能数据预处理文本清洗、分词按字、划分训练/验证/测试集、构建词汇表模型训练TextCNN训练、BERT微调自动保存最佳模型评估分析输出准确率、精确率/召回率/F1、混淆矩阵、训练曲线Web展示首页指标看板、单条预测、批量预测、双模型对比、数据集统计、结果可视化2.2 技术架构图简述后端Flask PyTorch Transformers前端HTML5 CSS3 JavaScript Jinja2模板数据流用户输入 → API路由 → 模型推理 → JSON返回 → 前端渲染三、数据集与预处理3.1 数据来源使用中文评论数据集共计约2万条标注样本原始字段评论文本平均长度约50~80字主题编号0~5情感编号0/13.2 数据划分集合比例用途训练集70%模型参数学习验证集15%超参数调优、早停监控测试集15%最终性能评估3.3 预处理流程去除特殊字符、统一全角半角按字切分中文无需分词构造词表TextCNN使用或使用BERT自带tokenizer设定最大序列长度max_len128超出截断不足补零四、核心算法与模型设计4.1 TextCNN基准模型网络结构Embedding(256维) → 4个并行卷积层核大小2,3,4,5各128个通道 → 1D Max Pooling → 拼接特征 → Dropout(0.2) → 全连接输出训练参数优化器Adamlr2e-3Batch size32损失函数交叉熵特点只训练词嵌入和卷积层参数量约0.8M训练速度快。4.2 BERT精度模型采用 HuggingFace 的bert-base-chinese12层Transformer768维隐层。添加线性分类头num_labels6或2优化器AdamWlr2e-5warmup比例10%Batch size16Epochs10梯度裁剪1.0使用混合精度加速可选特点参数量约110M微调后在下游任务上精度高但推理速度慢需GPU支持。4.3 双任务联合推理实际推理时加载两个独立的分类头主题和情感共用同一个BERT编码器但分开训练对同一输入文本一次前向传播即可获得两个分类结果极大节省计算开销。五、实验与结果分析5.1 评估指标准确率Accuracy整体正确率加权精确率Weighted Precision、加权召回率、加权F1处理类别不平衡5.2 实验结果测试集5.3 可视化图表训练曲线TextCNN loss稳步下降BERT loss收敛更快仅需3~4个epoch。混淆矩阵主题分类中“生活”与“分享”易混淆因两者语义重叠情感分类中负面样本误判率低于5%。数据集分布柱状图显示“学校”类样本最多“科研”类最少验证了加权指标的必要性。5.4 结论BERT在主题分类上比TextCNN高约6%证明预训练模型对复杂语义区分能力更强。情感分类所有模型均超90%表明该任务相对简单对工程部署而言TextCNN已足够实用。联合预测的响应时间TextCNN约20ms/条BERT约120ms/条GPU可满足一般实时需求。六、Web演示系统设计与实现6.1 页面功能路由功能/展示4个实验的评估指标卡片快速导航/predict单条文本预测支持下拉切换模型/predict/batch上传CSV文件含review列异步预测下载结果CSV/compare同一文本同时用TextCNN和BERT预测对比结果及置信度/results展示训练曲线和混淆矩阵图片从exp_results读取/dataset展示训练/验证/测试集各类别数量条形图6.2 技术实现细节模型采用懒加载首次调用时载入内存避免启动时占用过多资源。使用Flask-CORS支持跨域方便前后端分离扩展。前端使用Fetch API发送异步请求页面无刷新动态更新结果。批量预测使用pandas处理CSV预测后自动添加topic_label、topic_name、sentiment_label、sentiment_name四列。6.3 部署与运行python app.py# 访问 http://127.0.0.1:5000七、项目难点与解决方案难点解决方案BERT微调时类别数不匹配加载预训练模型时设置num_labels6并ignore_mismatched_sizesTrue多模型内存占用过高实现模型懒加载按需载入使用torch.no_grad()推理批量预测时文件编码问题自动尝试utf-8-sig和gbk编码并提供错误提示训练曲线绘制混乱每10个step记录一次loss每个epoch记录验证准确率分别绘制类别不平衡影响评估采用加权平均指标并在损失函数中设置class_weight可选八、项目特色与创新点双任务联合不同于传统单任务系统本设计一次推理同时获取主题和情感标签效率更高。双模型对比内置轻量和精度两种方案实验对比充分体现了工程权衡思想。全流程可视化从数据分布、训练过程到预测结果全部用图表展示增强可解释性。即用型Web系统不仅是一个训练框架更是一个可交付的演示产品适合答辩现场展示。模块化设计训练、预测、Web分离方便后续扩展如接入新模型、新增语种。九、未来改进与扩展引入RoBERTa-wwm-ext或ERNIE进一步提升中文场景精度。增加模型融合Ensemble策略综合TextCNN和BERT输出提高鲁棒性。支持流式推理和在线学习适应动态数据分布。容器化部署Docker并发布到云端实现公网访问。添加用户反馈机制收集误报样本用于持续优化。十、毕业答辩常见问题速答Q1为什么选择这两个模型ATextCNN作为传统深度模型的代表训练快、可解释性强BERT作为预训练SOTA能展示迁移学习的优势。两者对比可覆盖主流技术路线。Q2你的数据集规模是否足够A约2万条标注数据对于微调BERT110M参数而言足够且划分了独立的测试集评估结果可信。Q3如何避免过拟合A采用验证集监控早停、Dropout正则化、梯度裁剪以及BERT自带的权重衰减。Q4Web系统的实时性能满足要求吗A单条预测TextCNN在CPU下100msBERT在GPU下200ms满足演示需求若生产部署可改用ONNX加速。Q5你的工作有哪些工程价值A本系统可直接应用于校园论坛舆情分析、电商评论自动打标、政务热线工单分类等场景代码已模块化易于二次开发。十一、总结与心得通过本毕设项目我完整经历了数据清洗 → 模型选型 → 训练调优 → 评估分析 → Web部署的NLP应用全流程。深刻体会到预训练模型虽强但轻量模型在特定简单任务上仍有不可替代的效率优势。可视化对于调试和展示至关重要训练曲线和混淆矩阵能快速定位问题。工程化部署需兼顾性能、易用性和扩展性Flask 懒加载是一种低成本的可行方案。项目地址 https://mbd.pub/o/bread/YZaUk5dyZg本文为毕设项目总结欢迎交流讨论转载请注明出处。