演示视频www.bilibili.com/video/BV1aziZBBENk/
https://www.bilibili.com/video/BV1aziZBBENk/
项目简介
本项目是一个基于循环神经网络(RNN)的买家商品评论情感分析系统,旨在自动识别商品评论的情感倾向(正面/负面)。系统采用了PyTorch框架实现RNN模型,并结合Flask开发了一个直观的网页界面,方便用户进行情感分析操作。
功能特点
- 模型训练:使用SNOWNLP库中的sentiment数据集训练RNN模型
- 实时预测:支持输入评论进行实时情感分析
- 随机抽取:可从数据集中随机抽取评论进行分析
- 可视化展示:左侧显示情感概率和预测结果,包括:
- 输入评论展示
- 情感预测结果(正面/负面)
- 情感概率分布(动态进度条)
- 训练可视化:生成训练损失和准确率曲线
- 模型评估:生成混淆矩阵和分类报告
技术栈
- 后端:Python 3.8, PyTorch 2.0+, Flask
- 前端:HTML, CSS, JavaScript
- 工具库:jieba(中文分词), matplotlib, seaborn, scikit-learn
项目结构
buyer_sentiment_classify/ ├── app.py # Flask应用主程序 ├── generate_results_simple.py # 生成结果文件的简化脚本 ├── buyer_sentiment_classify.ipynb # 原始Jupyter Notebook ├── model_state_dict.pth # 训练好的模型权重 ├── vocabulary.pth # 词汇表 ├── pos.txt # 正面评论数据集 ├── neg.txt # 负面评论数据集 ├── stopwords.txt # 停用词表 ├── training_curves.png # 训练曲线 ├── requirements.txt # 依赖列表 └── templates/ └── index.html # 网页模板数据集说明
本项目使用的数据集来自SNOWNLP库中的sentiment目录,包含:
- pos.txt:正面评论数据,约10,000条
- neg.txt:负面评论数据,约10,000条
数据格式:每行一条评论,已去除HTML标签和特殊字符
模型设计
RNN模型结构
SentimentClassifier( (emb): Embedding(vocab_size, 128) # 词嵌入层 (rnn): GRU(128, 256, num_layers=2, batch_first=True) # 2层GRU (fc): Linear(in_features=256, out_features=2, bias=True) # 全连接层 )模型参数
- 词嵌入维度:128
- 隐藏层维度:256
- 层数:2
- 学习率:1e-2
- 批量大小:256
- 训练轮数:10
- 优化器:Adam
- 损失函数:CrossEntropyLoss
训练结果
训练曲线
模型性能
| 指标 | 训练集 | 测试集 |
|---|---|---|
| 准确率 | 98.74% | 99.00% |
| 损失 | 0.0405 | 0.0400 |
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 启动Flask应用
python app.py
应用将在 http://127.0.0.1:5000 启动
3. 访问网页界面
打开浏览器访问 http://127.0.0.1:5000,即可使用情感分析功能:
- 在右侧文本框输入评论,点击"分析情感"按钮
- 或点击"随机抽取评论"按钮,系统将自动抽取并分析
- 左侧将显示分析结果,包括输入评论、预测结果和情感概率
生成结果文件
生成训练曲线和混淆矩阵
python generate_results_simple.py
运行后将生成:
training_curves.png:训练和测试的损失和准确率曲线confusion_matrix.png:混淆矩阵热力图classification_report.txt:分类报告
核心代码说明
数据处理
# 数据集类定义 class SentenceDataset(Dataset): def __init__(self, pos_file='pos.txt', neg_file='neg.txt', vocab=None): # 加载数据、停用词,构建词汇表 # ... def __getitem__(self, idx): # 分词、过滤停用词、编码转换 # ...
模型定义
class SentimentClassifier(nn.Module): def __init__(self, vocab_size, embed_dim, hidden_dim, output_dim, n_layers=1): super().__init__() self.emb = nn.Embedding(vocab_size, embed_dim) self.rnn = nn.GRU(embed_dim, hidden_dim, num_layers=n_layers, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x, lengths): # 前向传播 # ...
预测函数
def predict_sentiment(sentence): # 分词、编码、模型预测、返回概率 # ...
网页界面说明
右侧输入区
- 文本框:输入要分析的商品评论
- 分析情感按钮:提交评论进行分析
- 随机抽取评论按钮:从数据集中随机抽取一条评论
左侧结果区
- 输入评论:显示当前分析的评论内容
- 预测结果:显示情感倾向(正面/负面),不同颜色区分
- 情感概率:显示正面和负面情感的概率,动态进度条展示
技术亮点
- 高效的RNN模型:采用2层GRU结构,在商品评论情感分析任务上表现优异
- 中文处理优化:结合jieba分词和停用词过滤,提高文本表示质量
- 用户友好界面:直观的网页设计,左侧结果展示,右侧操作区
- 实时响应:模型预测速度快,用户体验流畅
- 完整的评估体系:生成训练曲线、混淆矩阵和分类报告,便于模型分析
总结
本项目成功实现了基于RNN的买家商品评论情感分析系统,结合了深度学习和Web开发技术,提供了一个功能完整、易于使用的情感分析工具。系统不仅可以用于学术研究,也可以集成到电商平台中,帮助商家了解消费者反馈,改进产品和服务。