情绪分析日记与 AI 心情助手
面向大学生日记场景的中文情绪五分类系统,使用传统机器学习模型本地推理,集成 Django Web 应用。
系统架构
先看图,再看实现细节项目简介
在保留原 Django 情绪日记网页交互层与 SQLite 数据库的前提下,把"情绪识别内核"从原先依赖 Hugging Face API 的在线推理升级为完全本地的传统机器学习五分类系统:jieba 分词 + TfidfVectorizer 特征 + MultinomialNB / LogisticRegression / LinearSVC 分类器 + joblib 持久化 + views.py 调用 predict_emotion()。
当前推理、入库和展示都以五分类为准:难过、焦虑、生气、平静、开心。
技术路线
现有 Django 项目
└── 文本提交 (mood/views.py)
└── ml.predict.predict_emotion(text)
├── ml.preprocess.segment_text # jieba + 停用词 + 自定义词典
├── joblib.load(tfidf_vectorizer.joblib)
└── joblib.load(lr_model.joblib) # LinearSVC / LogisticRegression
└── MoodEntry.objects.create(...)
└── 渲染 templates/mood/index.html
五分类标签规范
0 → 难过(sad,score = -2)1 → 焦虑(anxious,score = -1)2 → 生气(angry,score = -2)3 → 平静(calm,score = 0)4 → 开心(happy,score = +2)
主训练数据来自 Hugging Face zzhdbw/Simplified_Chinese_Multi-Emotion_Dialogue_Dataset。公开数据集里没有焦虑类,因此另外手工补了约 260 条大学生日记焦虑样本(期末、答辩、PPT、项目 DDL、老师检查、代码调不通等)。
端到端流程
- 数据准备:五分类语料整合 + 焦虑样本补全,8:1:1 分层切分。
- 预处理与特征:Unicode 清洗、jieba 分词、自定义词典、停用词过滤、TF-IDF Unigram + Bigram 向量化。
- 模型训练:Naive Bayes、Logistic Regression、LinearSVC 三个分类器同数据同特征训练;LR / SVC 使用
class_weight=balanced处理类别不均衡。 - 评估:测试集 Accuracy、Macro-F1、Weighted-F1、五分类混淆矩阵与误分类样本分析。
- 持久化:joblib 保存向量器与模型,Django 进程内懒加载复用。
- 拓展实验:Hugging Face API 作为对照基线,K-Means / LSA + K-Means 作为无监督拓展(非默认推理链路)。
离线评估结果
在 430 条独立测试样本上,当前 LinearSVC 的离线结果:
- Accuracy:91.86%
- Macro-F1:92.08%
- Weighted-F1:91.84%
以上指标仅代表当前数据集和划分方式下的小规模离线实验结果,不等同于开放场景下的实际效果。
Django 集成
用户在文本框写入心情并提交后,mood/views.py 调用 predict_emotion(text),得到五分类结果与所用模型信息,写入 MoodEntry 后重定向回首页展示:
- 本次分析结果:文本、五分类中文情绪、所用模型、分析时间、趋势分值、建议语句。
- 心情趋势图:基于
display_score字段绘制,y 轴范围-2 ~ +2。 - 历史记录列表:所有
MoodEntry按时间倒序。
技术栈
Python、scikit-learn、pandas、jieba、TF-IDF、MultinomialNB、LogisticRegression、LinearSVC、joblib、Django 5.2、SQLite、Matplotlib、datasets。
项目定位
该项目体现了从数据准备、文本预处理、特征工程、模型训练、离线评估到 Web 应用集成的完整传统机器学习流程,是候选人机器学习基础项目的展示载体。机器学习并非当前主要求职方向,核心方向仍是 Agent、RAG 和 AI 应用后端。