Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Caria-Tarnished/Graduation_Project

Repository files navigation

基于混合 NLP 模型的财经分析系统

Python PyTorch License

一个智能财经分析 Agent 系统,采用 BERT + RAG 双引擎架构,结合规则引擎和大语言模型,实现高频快讯情感分析和深度财报检索问答。

目录

项目简介

本项目是一个毕业设计项目,旨在构建一个智能财经分析系统,解决传统金融 NLP 任务中"高频快讯"与"深度财报"难以兼顾的问题。

核心创新点

  1. 双引擎架构:BERT 处理高频快讯 + RAG 处理深度财报,各司其职
  2. 代理标注方法:利用 K 线走势反向标注情感,解决标注成本问题
  3. 混合推理策略:ML 模型 + 规则引擎 + LLM,兼顾准确性和可解释性
  4. 端到端自动化:从数据获取、模型推理到可视化呈现的完整流程

项目特点

  • 完整的数据管线(MT5 分钟价 + 金十快讯/日历)
  • 3 类情感分类模型(Test Macro F1 = 0.377,相比基线提升 186%)
  • RAG 财报检索系统(633 个文档切片,支持中英文检索)
  • Agent 编排器(自动判断查询类型,协调多个引擎)
  • Streamlit Web UI(聊天、K 线图表、财报检索三大页面)
  • 性能优化(缓存 + 数据库索引,响应时间提升 99.9%)

系统架构

整体架构图

graph TB
 subgraph "宿主层 Host Layer"
 UI[Streamlit UI<br/>聊天/图表/财报]
 end
 
 subgraph "用例层 Application Layer"
 AN[analyze_news<br/>快讯分析]
 AR[ask_report<br/>财报问答]
 UTILS[超时/缓存/重试]
 end
 
 subgraph "核心层 Core Layer"
 AGENT[Agent 编排器<br/>查询类型判断]
 EA[Engine A<br/>BERT 情感分类]
 EB[Engine B<br/>RAG 检索]
 RE[Rule Engine<br/>后处理规则]
 DTO[DTO 数据结构]
 end
 
 subgraph "适配器层 Adapters Layer"
 LLM[Deepseek API<br/>LLM 客户端]
 VS[Chroma<br/>向量库]
 DB[(SQLite<br/>finance_analysis.db)]
 end
 
 UI --> AN
 UI --> AR
 AN --> AGENT
 AR --> AGENT
 AGENT --> EA
 AGENT --> EB
 AGENT --> RE
 EA --> LLM
 EB --> VS
 AGENT --> DB
 
 style UI fill:#e1f5ff
 style AGENT fill:#fff4e1
 style EA fill:#ffe1e1
 style EB fill:#ffe1e1
 style LLM fill:#e1ffe1
Loading

双引擎设计

Engine A:高频快讯引擎

  • 模型:BERT(hfl/chinese-roberta-wwm-ext)微调
  • 任务:3 类情感分类(Bearish / Neutral / Bullish)
  • 输入增强:市场上下文前缀(如 [Strong Rally][Sideways])
  • 后处理:规则引擎(预期兑现检测、观望信号)
  • 性能:Test Macro F1 = 0.377,推理时间 ~1.1s/条(CPU)

Engine B:深度财报引擎

  • 技术:RAG(检索增强生成)
  • 向量模型:BAAI/bge-m3(1024 维)
  • 向量库:Chroma(633 个文档切片)
  • 检索策略:语义相似度 Top-K + 元数据过滤
  • 性能:检索时间 ~0.15s,支持中英文混合检索

核心功能

1. 快讯情感分析

  • 输入财经快讯,自动判断市场情感(利好/中性/利空)
  • 结合前期 K 线走势,检测"预期兑现"和"建议观望"信号
  • 提供置信度和详细解释

2. K 线图表联动

  • 使用 Plotly 绘制交互式 K 线图
  • 在图表上标注重要事件(带星级和内容预览)
  • 点击事件点触发情感分析,实时展示结果

3. 财报检索问答

  • 输入问题,从 15 个贵金属研报中检索相关内容
  • 显示 Top-K 引用片段(带页码和相似度分数)
  • 使用 LLM 生成结构化答案总结

4. 智能对话

  • 自动判断查询类型(快讯分析 vs 财报问答)
  • 记录工具调用追踪(Tool Trace),展示分析过程
  • 支持多轮对话和上下文理解

技术栈

核心框架

  • 深度学习:PyTorch 2.0+, Transformers 4.35+
  • 向量检索:ChromaDB 0.4+, Sentence-Transformers 2.2+
  • Web 框架:Streamlit 1.30+
  • 数据处理:Pandas, NumPy

模型与算法

  • BERT 模型:hfl/chinese-roberta-wwm-ext(情感分类)
  • 嵌入模型:BAAI/bge-m3(文档向量化)
  • LLM:Deepseek API(总结生成)
  • 基线模型:TF-IDF + LinearSVC(对比实验)

数据与存储

  • 数据库:SQLite(finance_analysis.db,736K+ 分钟价数据)
  • 向量库:Chroma(持久化存储)
  • 数据源:MT5(分钟价)、金十数据(快讯/日历)

开发工具

  • 训练环境:Google Colab(T4 GPU)
  • 版本控制:Git, GitHub
  • 代码规范:PEP8, Flake8

项目结构

Graduation_Project/
├── app/ # 应用代码
│ ├── core/ # 核心层(不依赖 UI/HTTP)
│ │ ├── dto.py # 数据传输对象(7 个核心数据类)
│ │ ├── engines/ # 引擎模块
│ │ │ ├── sentiment_engine.py # Engine A 推理
│ │ │ └── rag_engine.py # Engine B 检索
│ │ ├── orchestrator/ # 编排器
│ │ │ ├── agent.py # Agent 主编排器
│ │ │ └── tools.py # 工具函数集合
│ │ └── utils/ # 工具类
│ │ └── cache.py # LRU 缓存
│ │
│ ├── application/ # 用例层
│ │ ├── analyze_news.py # 快讯分析用例
│ │ ├── ask_report.py # 财报问答用例
│ │ └── utils.py # 超时/缓存/重试
│ │
│ ├── adapters/ # 适配器层
│ │ └── llm/
│ │ └── deepseek_client.py # Deepseek API 客户端
│ │
│ ├── services/ # 服务层
│ │ └── sentiment_analyzer.py # 情感分析服务(BERT + 规则引擎)
│ │
│ └── hosts/ # 宿主层
│ └── streamlit_app/ # Streamlit UI
│ ├── app.py # 主入口(聊天页面)
│ ├── pages/
│ │ ├── 2_Charts.py # K 线图表页面
│ │ └── 3_Reports.py # 财报检索页面
│ └── README.md # UI 使用文档
│
├── scripts/ # 离线脚本
│ ├── crawlers/ # 数据爬虫
│ │ ├── jin10_dynamic.py # 金十日历爬虫
│ │ ├── jin10_flash_api.py # 金十快讯爬虫
│ │ └── storage.py # SQLite 存储
│ │
│ ├── modeling/ # 模型训练
│ │ ├── baseline_tfidf_svm.py # TF-IDF 基线
│ │ ├── bert_finetune_cls.py # BERT 微调
│ │ ├── prepare_3cls_dataset.py # 3 类数据集生成
│ │ └── build_enhanced_dataset_3cls.py # 输入增强
│ │
│ ├── rag/ # RAG 管线
│ │ ├── build_chunks.py # PDF 解析与切片
│ │ ├── build_vector_index.py # 向量化与索引构建
│ │ └── test_rag_engine.py # RAG 引擎测试
│ │
│ ├── qlora/ # QLoRA 微调(可选)
│ │ ├── build_instruction_dataset.py # 指令集构建
│ │ └── train_qlora.py # QLoRA 训练
│ │
│ ├── tools/ # 工具脚本
│ │ ├── sync_results.py # 同步训练结果
│ │ └── copy_model_weights.py # 复制模型权重
│ │
│ ├── test_system_integration.py # 系统集成测试
│ ├── test_end_to_end.py # 端到端测试
│ ├── benchmark_performance.py # 性能测试
│ ├── optimize_database_indexes.py # 数据库索引优化
│ └── test_batch_processing.py # 批处理测试
│
├── data/ # 数据目录
│ ├── raw/ # 原始数据
│ │ └── reports/ # 财报 PDF
│ ├── processed/ # 处理后数据
│ │ ├── train_3cls.csv # 训练集(3 类)
│ │ ├── val_3cls.csv # 验证集
│ │ └── test_3cls.csv # 测试集
│ └── reports/ # RAG 数据
│ ├── chunks.json # 文档切片(633 个)
│ └── chroma_db/ # Chroma 向量库
│
├── models/ # 模型目录
│ └── bert_3cls/ # 3 类 BERT 模型
│ └── best/ # 最优权重(~400MB)
│
├── configs/ # 配置文件
│ └── config.yaml # 项目配置
│
├── finance_analysis.db # 主数据库(736K+ 分钟价)
├── requirements.txt # Python 依赖
├── .env.example # 环境变量模板
├── README.md # 项目说明(本文件)
├── PLAN.md # 项目计划
├── Project_Status.md # 项目状态(详细文档)
└── REMAINING_TASKS.md # 任务分解与实施指南

快速开始

环境要求

  • Python 3.8+
  • 8GB+ 内存(推荐 16GB)
  • 10GB+ 磁盘空间

安装步骤

  1. 克隆仓库
git clone https://github.com/Caria-Tarnished/Graduation_Project.git
cd Graduation_Project
  1. 创建虚拟环境
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activate
  1. 安装依赖
pip install -r requirements.txt
  1. 配置环境变量

复制 .env.example.env,并填写必要的配置:

cp .env.example .env

编辑 .env 文件:

# Deepseek API(必需,用于 LLM 总结)
DEEPSEEK_API_KEY=your_deepseek_api_key_here
# Tushare Token(可选,用于数据获取)
TUSHARE_TOKEN=your_tushare_token_here
# HuggingFace 缓存路径(可选,如果 C 盘空间不足)
# HF_HOME=F:\huggingface_cache
  1. 下载模型权重

BERT 模型权重(~400MB)需要从训练环境下载,或使用预训练模型:

# 如果有训练好的模型,放到 models/bert_3cls/best/
# 如果没有,系统会在降级模式下运行(使用默认规则)
  1. 启动 Streamlit UI
streamlit run app/hosts/streamlit_app/app.py

访问 http://localhost:8501 即可使用系统。

快速测试

启动 UI 后,可以尝试以下操作:

  1. 聊天页面:输入 "美联储宣布加息 25 个基点",查看情感分析结果
  2. K 线图表页面:选择时间范围,点击事件点查看分析
  3. 财报检索页面:输入 "黄金价格走势如何",查看检索结果

使用指南

数据获取

1. 抓取金十快讯(API 模式)

python -m scripts.crawlers.jin10_flash_api `
 --months 12 `
 --output data/raw/flash_last_12m.csv `
 --db finance_analysis.db `
 --source flash_api `
 --stream --important-only

2. 抓取金十日历(逐日回填)

python -m scripts.crawlers.jin10_dynamic `
 --start 2024-01-01 `
 --end 2026-01-21 `
 --output data/raw/jin10_calendar.csv `
 --db finance_analysis.db `
 --source listing_data `
 --important-only

3. 抓取 MT5 分钟价

python scripts/fetch_intraday_xauusd_mt5.py `
 --timeframe M1 `
 --start "2024年01月01日 00:00:00" `
 --end "2025年12月31日 23:59:59" `
 --out data/processed/xauusd_m1.csv

模型训练

1. 生成 3 类数据集

python scripts/modeling/prepare_3cls_dataset.py `
 --db finance_analysis.db `
 --ticker XAUUSD `
 --window_post 15 `
 --out_dir data/processed

2. 添加输入增强

python scripts/modeling/build_enhanced_dataset_3cls.py `
 --input_dir data/processed `
 --output_dir data/processed

3. 训练 BERT 模型(Colab)

在 Google Colab 中运行 colab_3cls_training_cells.txt 中的训练流程。

4. 训练基线模型(本地)

python scripts/modeling/baseline_tfidf_svm.py `
 --train_csv data/processed/train_3cls.csv `
 --val_csv data/processed/val_3cls.csv `
 --test_csv data/processed/test_3cls.csv `
 --output_dir models/baseline_tfidf_svm

RAG 管线构建

1. PDF 解析与切片

python scripts/rag/build_chunks.py `
 --pdf_dir data/raw/reports/research_reports `
 --output data/reports/chunks.json

2. 向量化与索引构建

python scripts/rag/build_vector_index.py `
 --chunks_file data/reports/chunks.json `
 --output_dir data/reports/chroma_db `
 --model_name BAAI/bge-m3

测试与优化

1. 系统集成测试

python scripts/test_system_integration.py

2. 端到端测试

python scripts/test_end_to_end.py

3. 性能测试

python scripts/benchmark_performance.py

4. 数据库索引优化

python scripts/optimize_database_indexes.py

性能指标

模型性能

模型 Test Macro F1 Test Accuracy 训练时间
TF-IDF + SVM(基线) 0.3458 - ~5 分钟(CPU)
BERT 3 类(方案 A) 0.3770 0.3819 ~1.5 小时(T4 GPU)
提升幅度 +186% - -

系统性能

指标 优化前 优化后 提升幅度
重复查询响应时间 0.8-0.9s <0.001s 99.9%
混合场景平均响应 ~0.8s 0.276s 65.5%
数据库查询时间 155.83ms 0.20ms 99.9%
缓存命中率 0% 90% -
BERT 推理次数 100% 10% -90%

数据规模

  • 分钟价数据:736,304 行(2024年01月02日 至 2026年01月31日)
  • 事件数据:1,475 条(2026年01月27日 起,覆盖率 100%)
  • 文档切片:633 个(12/15 个 PDF 成功处理)
  • 训练样本:12,859 条(train)+ 2,661 条(val)+ 3,823 条(test)

开发文档

核心文档

训练脚本

UI 文档

代码规范

  • 遵循 PEP8 规范
  • 使用中文注释
  • 避免使用 emoji 符号
  • 文件编码统一为 UTF-8

常见问题

1. 启动 UI 时报错 "ModuleNotFoundError"

解决方案:确保已激活虚拟环境并安装所有依赖:

pip install -r requirements.txt

2. BERT 模型未找到

解决方案:系统会在降级模式下运行,使用默认规则。如需完整功能,请下载训练好的模型权重到 models/bert_3cls/best/

3. Deepseek API 调用失败

解决方案:

  1. 检查 .env 文件中的 DEEPSEEK_API_KEY 是否正确
  2. 检查网络连接(可能需要代理)
  3. 查看 API 余额是否充足

4. Chroma 向量库未找到

解决方案:运行 RAG 管线构建脚本:

python scripts/rag/build_chunks.py
python scripts/rag/build_vector_index.py

5. 数据库查询慢

解决方案:运行数据库索引优化脚本:

python scripts/optimize_database_indexes.py

项目亮点

1. 代理标注创新

利用 K 线走势反向标注情感,解决了金融领域缺乏大规模标注数据的痛点。

2. 混合架构设计

ML 模型专注于可学习的 3 类基础方向,"预期兑现"等复杂逻辑由规则引擎处理,兼顾准确性和可解释性。

3. 性能优化实践

通过三层缓存(查询结果、市场上下文、RAG 检索)+ 数据库索引优化,实现 99.9% 的性能提升。

4. 工程化实现

完整的测试覆盖(系统集成测试 + 端到端测试)、性能监控、降级策略,确保系统稳定可靠。

未来展望

短期计划(答辩后)

  • BERT 模型量化(预期提升 50-70%)
  • ONNX Runtime 转换(预期提升 30-50%)
  • GPU 加速支持
  • 更多数据源接入(东方财富、雪球等)

长期计划

  • FastAPI 服务化
  • 集成到 QuantSway 交易平台
  • 实时快讯推送(WebSocket)
  • 多标的支持(A 股、美股、商品)
  • 移动端适配

致谢

开源项目

数据来源

  • 金十数据 - 财经快讯和日历
  • MT5 - 分钟级价格数据
  • 各大券商研报 - 财报 PDF 数据

特别感谢

感谢所有开源社区的贡献者,以及在项目开发过程中提供帮助的老师和同学。

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

联系方式


更新时间:2026年02月10日
项目状态:核心功能已完成,接近收尾阶段

About

毕设项目-金融财经新闻分析Agent

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /