Python中文文本分类系统 情感分类系统 深度学习 毕业设计(PyQt5+PaddleHub+ Vue双端+OCEMOTION 源码+文档)✅
博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅
2、大数据、计算机专业选题(Python/Java/大数据/深度学习/机器学习)(建议收藏)✅
1、项目介绍
- 技术栈:Python语言、PaddleHub(预训练模型Erine-tiny)、OCEMOTION中文7情感分类数据集、PyQt5(桌面端可视化界面)、前后端分离架构(前端:Vue+Element UI;后端:Flask+PaddleHub)、文本情感细粒度分类技术
- 核心功能:实现中文文本7类情感(愉快、难过、喜欢、愤怒、害怕、惊讶、厌恶)的细粒度分类,支持双端使用——① PyQt5桌面端(单条文本输入预测、批量文本文件上传预测+结果导出);② Web端(前后端分离,在线文本情感预测)
- 研究背景:当前中文情感分类多聚焦“正负中性”粗粒度场景,难以满足细粒度需求(如客服对话中区分“愤怒”与“厌恶”、社交媒体舆情中识别“惊讶”与“愉快”);传统模型依赖手动特征工程,精度低且泛化能力弱;同时缺乏“便捷可视化界面”,非技术用户(如客服人员、舆情分析师)难以快速使用,亟需“预训练模型微调+双端可视化”的细粒度情感分类系统解决。
- 研究意义:技术层面,基于PaddleHub Erine-tiny预训练模型微调,提升中文细粒度情感分类精度(通常测试集准确率达85%以上),构建“模型训练-双端部署”完整链路;用户层面,桌面端适配个人开发者快速测试,Web端满足企业级批量分析;应用层面,可落地客服文本情绪分析、社交媒体舆情洞察、用户评论情感挖掘等场景,具备实际应用与学习价值(如NLP方向毕业设计)。
2、项目界面
-
情感分类(愉快类别示例)

-
情感分类(惊讶类别示例)

-
情感分类(厌恶类别示例)

-
QT界面(单条情感分类)

-
QT界面(批量情感分类-上传文件)

-
QT界面(批量情感分类-参数设置)

-
QT界面(批量情感分类-输出结果)

3、项目说明
本项目是基于PaddleHub预训练模型开发的中文细粒度情感分类系统,核心通过Erine-tiny模型在OCEMOTION数据集上微调实现7类情感精准分类,同时提供PyQt5桌面端与Vue+Flask Web端双入口,满足“快速测试+批量分析”不同需求,旨在解决中文细粒度情感分类精度低、使用门槛高的问题。
(1)系统架构与技术逻辑
- 架构设计:采用“模型层-应用层”双层架构,兼顾精度与易用性:
- 模型层:基于PaddleHub加载Erine-tiny预训练模型(轻量高效,适合部署),使用OCEMOTION数据集(含数万条标注中文文本,覆盖7类情感)进行微调——80%数据为训练集优化模型参数,20%为测试集验证精度,最终生成适配中文7情感分类的专用模型;
- 应用层:分为双端部署——
- 桌面端(PyQt5):构建可视化交互界面,支持单条文本输入、批量文件上传,本地化运行模型预测,适合个人开发者或离线场景;
- Web端(前后端分离):Vue+Element UI构建前端交互界面,Flask搭建后端API(调用微调后的PaddleHub模型),支持在线文本预测,适合多人协作或企业级使用;
- 核心流程:Erine-tiny模型微调→生成7情感分类模型→双端调用模型(桌面端本地化加载/Web端通过API调用)→用户输入文本(单条/批量)→模型输出情感类别+置信度→双端展示结果(桌面端弹窗/文件导出,Web端页面渲染)。
(2)核心功能模块详解
① 模型训练与微调模块(技术核心)
- 功能:构建高精度中文7情感分类模型,解决“通用模型细粒度分类精度不足”问题;
- 技术实现(PaddleHub核心操作):
- 数据准备:加载OCEMOTION数据集,按“文本-情感标签”格式整理(如文本“今天收到礼物好开心!”标签为“愉快”),划分训练集(80%)与测试集(20%);
- 模型加载与微调:
- 加载预训练模型:通过PaddleHub加载Erine-tiny模型(聚焦中文语义理解,参数少、训练快);
- 添加分类头:在预训练模型后接入全连接层,输出维度设为7(对应7类情感);
- 训练优化:使用交叉熵损失函数计算误差,Adam优化器迭代训练(如训练50轮,学习率0.001),每轮验证测试集准确率,保留最优模型;
- 模型评估:最优模型在测试集上准确率达85%以上,可有效区分易混淆情感(如“愤怒”与“厌恶”);
- 模型导出:将微调后的模型保存为本地文件,供桌面端加载或Web端部署调用。
② PyQt5桌面端模块(离线便捷使用)
聚焦“本地化、轻量快速”,满足个人用户离线分析需求:
- 单条情感分类功能:
- 操作流程:用户在QT界面文本框输入中文文本(如“这部电影剧情太烂了,让人反感!”)→点击“预测”按钮→系统加载本地微调模型→输出情感类别(如“厌恶”)与置信度(如92%)→界面弹窗或文本框展示结果;
- 价值:适合快速测试单条文本情感,即时获取结果;
- 批量情感分类功能:
- 操作流程:
- 上传文件:用户点击“上传”按钮,选择TXT/CSV格式的批量文本文件(每行1条中文文本);
- 参数设置:在QT界面选择“结果导出路径”“是否显示置信度”;
- 批量预测:点击“开始批量预测”→系统逐行读取文本,调用模型批量预测;
- 结果输出:预测完成后,系统自动将“文本+情感类别+置信度”导出至指定路径的Excel/CSV文件,同时在QT界面展示部分结果(如前10条);
- 价值:适合处理大量文本(如数百条用户评论),高效完成情感分类与结果归档。
- 操作流程:
③ Web端模块(在线协作使用)
采用前后端分离架构,适配多人在线使用或企业级场景:
- 前端(Vue+Element UI):
- 功能界面:设计简洁交互界面,包含“单条文本输入框”“批量文本粘贴区”“结果展示区”;
- 交互逻辑:用户输入文本后点击“预测”→前端通过Axios发送POST请求至Flask后端→接收后端返回的“情感类别+置信度”→在页面实时渲染结果(如用不同颜色标注情感:“愉快”绿色、“愤怒”红色);
- 后端(Flask+PaddleHub):
- API开发:开发
/predict/single(单条预测)、/predict/batch(批量预测)两个核心接口; - 模型调用:后端启动时加载微调后的Erine-tiny模型,接收前端请求后,对输入文本进行简单预处理(去特殊字符、统一编码)→调用模型预测→将结果格式化为JSON返回给前端;
- 优势:支持多用户同时在线调用,无需本地安装模型,降低使用门槛。
- API开发:开发
④ 文本预处理模块(数据支撑)
- 功能:优化输入文本质量,提升模型预测精度;
- 核心操作:
- 清洗:去除文本中的特殊字符(如@、#、表情符号)、多余空格、换行符;
- 编码统一:将文本转为UTF-8编码,避免中文乱码导致模型识别错误;
- 批量格式适配:对批量上传的文件,自动按行分割文本,确保每条文本独立输入模型。
本项目主要基于PaddleHub通过预训练模型Erine-tiny在中文7情感分类数据集OCEMOTION上进行微调训练从而实现较为精确的情感7分类任务:
微情感分类: 愉快、难过、喜欢、愤怒、害怕、惊讶、厌恶(7个类别)
(1)基于PyQt5完成了项目可视化界面的开发,支持支持单条和批量文本细粒度情感分类预测。
(2)该项目前后端分离式的web端部署,所用技术栈:前端:Vue+Element UI;后端:Flask+PaddleHub。


4、核心代码
import paddlehub as hub
import interface
import sys
import xlrd
import csv
import re
import pandas as pd
import numpy as np
from functools import partial
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow
from time import time
# 单条文本情感分类
def Single_classification(ui):
content = ui.textEdit.toPlainText() # 获取输入的要进行情感分类的文本
# 要进行情感分类的文本内容不能为空
if content == '':
ui.label_3.setVisible(False) # 隐藏结果
ui.lineEdit_5.setVisible(False)
ui.warn1() # 提示补全文本内容
else:
# 格式处理:
data = []
list = []
list.append(content)
data.append(list)
t1 = time()
# 对单条文本进行预测
label = model.predict(data, max_seq_len=128, batch_size=16, use_gpu=False) # 若下载了GPU的paddle,可以将此处use_gpu设置为True
t2 = time()
# 单条预测时间检测
print('单条文本分类CPU环境下预测耗时(毫秒):%.3f' % ((t2 - t1) * 1000.0))
ui.lineEdit_5.setText(label[0]) # 完成预测后在界面显示预测的情感类别
ui.label_3.setVisible(True)
ui.lineEdit_5.setVisible(True)
# 批量文本情感分类
def Batch_classification(ui):
excel_path = ui.lineEdit_2.text() # 获取输入文件路径
output_path = ui.lineEdit_4.text() # 获取输出文件路径
# 路径不能为空
if excel_path == '':
ui.warn2() # 提示未选择要进行批量情感分类的excel文件
elif output_path == '':
ui.warn3() # 提示未选择生成结果文件输出路径
else:
# ui.showloading() # 显示加载中
# 读取导入的excel文件
df = pd.read_excel(excel_path)
# 格式处理:
news = pd.DataFrame(columns=['content'])
news['content'] = df["content"]
# 首先将pandas读取的数据转化为array
data_array = np.array(news)
# 然后转化为list形式
data_list =data_array.tolist()
# 批量文本预测
results = model.predict(data_list, max_seq_len=128, batch_size=16, use_gpu=False) # 若下载了GPU的paddle,可以将此处use_gpu设置为True
df['label'] = results # 将结果填充到label列上
# 保存结果文件为excel文件
df.to_excel(output_path, sheet_name='预测结果', index=False, header=True)
# ui.cancelloading() # 完成预测后取消显示加载中
ui.success() # 提示分类完成
if __name__ == '__main__':
# 定义要进行情感分类的7个类别
label_list=['难过', '愉快', '喜欢', '愤怒', '害怕', '惊讶', '厌恶']
label_map = {
idx: label_text for idx, label_text in enumerate(label_list)
}
# 加载训练好的模型
model = hub.Module(
name='ernie_tiny',
version='2.0.2', # 与训练时统一好,若未指定版本将自动下载最新的版本
task='seq-cls',
num_classes=7,
load_checkpoint='../Ernie-model/model.pdparams', # 注意模型参数一定要加载对!
label_map=label_map
)
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = interface.Ui_Form()
ui.setupUi(MainWindow)
MainWindow.show()
# 为按钮绑定相关功能函数完成功能添加:
# 单条文本情感分类
ui.pushButton.clicked.connect(partial(Single_classification, ui))
# 批量文本情感分类
ui.pushButton_4.clicked.connect(partial(Batch_classification, ui))
sys.exit(app.exec_())
🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅
点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻
更多推荐


所有评论(0)