# 航空推文情感分析系统 > **机器学习 (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 向量化,最大特征数为 5000,ngram 范围为 (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**