T_Sentiment-Analysis-System.../README.md
2026-01-15 23:26:42 +08:00

252 lines
8.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 航空推文情感分析系统
> **机器学习 (Python) 课程设计**
## 👥 团队成员
| 姓名 | 学号 | 贡献 |
|------|------|------|
| 张则文 | 2311020133 | 数据处理、模型训练、Agent 开发、Streamlit开发、文档撰写 |
| 潘俊康 | 2311020121 | 仓库搭建、Streamlit测试、文档撰写 |
| 陈俊均 | 2311020104 | Agent 开发、Streamlit测试、文档撰写 |
## 📝 项目简介
本项目是一个基于**传统机器学习 + LLM + Agent**的航空推文情感分析系统,旨在实现可落地的智能预测与行动建议。系统使用 Twitter US Airline Sentiment 数据集,通过传统机器学习完成推文情感的量化预测,再利用 LLM 和 Agent 技术将预测结果转化为结构化、可执行的决策建议,确保输出结果可追溯、可复现。
## 🚀 快速开始
```bash
# 克隆仓库
git clone http://hblu.top:3000/MachineLearning2025/G05-Sentiment-Analysis-of-Aviation-Tweets.git
cd G05-Sentiment-Analysis-of-Aviation-Tweets
# 安装依赖
pip install uv -i https://mirrors.aliyun.com/pypi/simple/
uv config set index-url https://mirrors.aliyun.com/pypi/simple/
uv sync
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入 API Key
# 运行 Demo
uv run streamlit run src/streamlit_tweet_app.py
```
## 1⃣ 问题定义与数据
### 1.1 任务描述
本项目是一个三分类任务目标是自动识别航空推文的情感倾向negative/neutral/positive。业务目标是构建一个高准确率、可解释的推文情感分析系统帮助航空公司及时了解客户反馈优化服务质量提升客户满意度。
### 1.2 数据来源
| 项目 | 说明 |
|------|------|
| 数据集名称 | Twitter US Airline Sentiment |
| 数据链接 | [Kaggle](https://www.kaggle.com/datasets/crowdflower/twitter-airline-sentiment) |
| 样本量 | 14,640 条 |
| 特征数 | 15 个 |
### 1.3 数据切分与防泄漏
数据按 8:2 比例分割为训练集和测试集,确保模型在独立的测试集上进行评估。在数据预处理和特征工程阶段,所有操作仅在训练集上进行,避免信息泄漏到测试集。使用 TF-IDF 进行文本向量化时,同样严格遵循先训练后应用的原则。
## 2⃣ 机器学习流水线
### 2.1 模型架构
本项目采用 **VotingClassifier** 集成学习方法,结合多个基础分类器的优势:
- **逻辑回归 (Logistic Regression)**:线性模型,适合处理高维稀疏特征
- **多项式朴素贝叶斯 (MultinomialNB)**:适合文本分类任务
- **随机森林 (RandomForestClassifier)**:集成树模型,抗过拟合能力强
- **LightGBM 分类器**:梯度提升树模型,高性能、高效率
### 2.2 模型性能
| 模型 | 指标 | 结果 |
|------|------|------|
| VotingClassifier | 准确率 | 0.8159 |
| VotingClassifier | F1 分数Macro | 0.7533 |
### 2.3 特征工程
1. **文本特征提取**:使用 TF-IDF 向量化,最大特征数为 5000ngram 范围为 (1, 2)
2. **航空公司编码**:使用 LabelEncoder 对航空公司名称进行编码
3. **特征合并**:将文本特征和航空公司特征合并为最终特征矩阵
### 2.4 误差分析
模型在以下类型的样本上表现相对较差:
1. 包含复杂情感表达的推文(如讽刺、反语)
2. 混合多种情感的推文
3. 包含大量特殊字符或缩写的推文
4. 上下文依赖较强的推文
这主要是因为文本特征提取方法TF-IDF对语义理解有限无法完全捕捉复杂的语言模式和上下文信息。
## 3⃣ Agent 实现
### 3.1 工具定义
| 工具名 | 功能 | 输入 | 输出 |
|--------|------|------|------|
| `predict_sentiment` | 使用机器学习模型预测推文情感 | 推文文本、航空公司 | 分类结果和概率 |
| `explain_sentiment` | 解释模型预测结果并生成行动建议 | 推文文本、分类结果、概率 | 结构化的解释和建议 |
| `generate_response` | 生成针对推文的回复建议 | 推文文本、情感分类 | 回复建议文本 |
### 3.2 决策流程
Agent 按照以下流程执行任务:
1. 接收用户提供的推文文本和航空公司信息
2. 使用 `predict_sentiment` 工具进行情感分类预测
3. 使用 `explain_sentiment` 工具解释分类结果并生成行动建议
4. 使用 `generate_response` 工具生成针对性的回复建议
5. 向用户提供清晰、完整的情感分析结果、解释和建议
### 3.3 案例展示
**输入**
```
@United This is the worst airline ever! My flight was delayed for 5 hours and no one helped!
```
**输出**
```json
{
"classification": {
"label": "negative",
"probability": {
"negative": 0.92,
"neutral": 0.05,
"positive": 0.03
}
},
"explanation": {
"key_factors": ["worst airline ever", "delayed for 5 hours", "no one helped"],
"reasoning": "推文中包含强烈的负面情感词汇,描述了航班延误和缺乏帮助的负面体验",
"confidence_level": "高",
"suggestions": ["立即联系客户并提供补偿", "调查延误原因并改进服务流程", "加强员工培训"]
},
"response_suggestion": "尊敬的客户,对于您航班延误和未能获得及时帮助的糟糕体验,我们深表歉意。我们将立即调查此事并为您提供相应的补偿。感谢您的反馈,我们将努力改进服务质量。"
}
```
## 4⃣ 系统特色
### 4.1 多模态情感分析
系统不仅提供情感分类结果,还通过 LLM 生成详细的解释和可执行的行动建议,实现从预测到决策的完整闭环。
### 4.2 实时交互体验
通过 Streamlit 构建的 Web 界面提供直观的交互体验,支持单条推文分析和批量文件处理功能。
### 4.3 结构化输出
所有输出都采用结构化格式,确保结果的可追溯性和可复现性,便于后续分析和应用。
## 5⃣ 开发心得
### 5.1 主要困难与解决方案
1. **文本特征提取**:航空推文包含大量缩写、特殊字符和行业术语,解决方案是使用 TF-IDF 结合 ngram 特征,捕捉更丰富的语言模式。
2. **多分类平衡**:情感分类是三分类任务,需要处理类别不平衡问题,解决方案是使用 Macro-F1 作为主要评估指标。
3. **模型集成**:单个模型在复杂情感识别上存在局限,解决方案是使用 VotingClassifier 集成多个模型的优势。
### 5.2 对 AI 辅助编程的感受
AI 辅助编程工具在代码编写和问题解决方面提供了很大帮助特别是在处理重复性任务和学习新框架时。它可以快速生成代码模板提供解决方案建议显著提高开发效率。但同时也需要注意AI 生成的代码可能存在错误或不符合项目规范,需要人工仔细检查和调试。
### 5.3 局限与未来改进
1. **模型性能**:当前模型在处理复杂语言模式和上下文理解方面仍有提升空间,可以考虑使用更先进的文本表示方法(如 BERT
2. **多语言支持**:目前系统主要支持英文推文,未来可以扩展到多语言情感分析。
3. **实时性**:可以优化模型推理速度,实现实时情感分析功能。
4. **情感细粒度分析**:可以进一步细分情感类别,如愤怒、失望、满意等更细致的情感标签。
## 技术栈
| 组件 | 技术 | 版本要求 |
|------|------|----------|
| 项目管理 | uv | 最新版 |
| 数据处理 | polars + pandas | polars>=0.20.0, pandas>=2.2.0 |
| 数据验证 | pandera | >=0.18.0 |
| 机器学习 | scikit-learn + lightgbm | sklearn>=1.3.0, lightgbm>=4.0.0 |
| LLM 框架 | openai | >=1.0.0 |
| Agent 框架 | pydantic | pydantic>=2.0.0 |
| 可视化 | streamlit | >=1.20.0 |
| 文本处理 | nltk | >=3.8.0 |
## 许可证
MIT License
## 致谢
- 感谢 [DeepSeek](https://www.deepseek.com/) 提供的 LLM API
- 感谢 Kaggle 提供的 [Twitter US Airline Sentiment](https://www.kaggle.com/datasets/crowdflower/twitter-airline-sentiment) 数据集
- 感谢所有开源库的贡献者
## 联系方式
如有问题或建议,欢迎通过以下方式联系:
- 项目地址:[http://hblu.top:3000/MachineLearning2025/G05-Sentiment-Analysis-of-Aviation-Tweets](http://hblu.top:3000/MachineLearning2025/G05-Sentiment-Analysis-of-Aviation-Tweets)
- 邮箱xxxxxxxxxx@gmail.com
---
**© 2026 航空推文情感分析系统 | 基于传统机器学习 + LLM + Agent**