Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

智能数学问题路由系统 - 详细使用指南

🎯 项目概述

这是一个基于数据驱动的智能路由系统,通过分析不同"专家角色"在数学问题上的表现,自动将新问题分配给最适合的专家来解答,从而显著提高数学问题求解的准确率。

核心理念

  • 离线分析: 一次性分析和学习,构建专家知识库
  • 在线路由: 实时智能分配问题给最优秀的专家角色
  • 数据驱动: 基于200个GSM8K样本的实际性能数据

🏗️ 系统架构

┌─────────────────────────────────────────────────────────────┐
│                    离线分析阶段                             │
├─────────────────────────────────────────────────────────────┤
│ 1. 角色性能画像 → 2. 问题分类 → 3. 性能分析 → 4. 路由指南生成 │
└─────────────────────────────────────────────────────────────┘
                                ↓
┌─────────────────────────────────────────────────────────────┐
│                    在线推理阶段                             │
├─────────────────────────────────────────────────────────────┤
│        新问题 → 路由决策 → 专家求解 → 返回结果              │
└─────────────────────────────────────────────────────────────┘

📂 项目文件结构

CISC_PRO/
├── role_profiles.py              # 🎭 角色性能画像脚本
├── question_classifier.py        # 🏷️  问题分类脚本  
├── performance_analyzer.py       # 📊 性能分析与路由指南生成
├── intelligent_router.py         # 🧭 智能路由器实现
├── run_complete_pipeline.py      # 🚀 一键执行完整流程
├── ROUTING_SYSTEM_README.md      # 📖 本文档
├── src/                          # 📁 核心模块
│   ├── models.py                 # 🤖 模型接口
│   ├── datasets.py               # 📊 数据集处理
│   └── evaluator.py              # 📈 评估器
├── role_profiling_results/       # 📈 角色画像结果
├── question_classification_results/ # 🏷️ 问题分类结果
├── analysis_results/             # 📊 性能分析结果
└── intelligent_routing_results/  # 🎯 路由评估结果

🚀 快速开始

环境要求

# 确保已激活正确的conda环境
conda activate reasoner

# 检查必要的Python包
pip install torch transformers datasets pandas numpy

方法1: 一键执行(推荐新手)

# 进入项目目录
cd /home/czy/CISC_PRO

# 使用默认配置执行完整流程
python run_complete_pipeline.py

# 🎯 高级配置示例
python run_complete_pipeline.py \
  --model qwen2.5-3b \
  --samples 200 \
  --eval-samples 50

预期输出:

🎯 开始构建智能数学问题路由系统
使用模型: qwen2.5-3b
样本数量: 200

==================================================
步骤 1/4: 执行角色性能画像
==================================================
🚀 开始执行: 角色性能画像
✅ 角色性能画像 完成
✅ 角色画像文件: role_profiling_results/role_profile_detailed_20240907_143022.csv

==================================================
步骤 2/4: 执行问题分类
==================================================
🚀 开始执行: 问题分类
✅ 问题分类 完成
✅ 问题分类文件: question_classification_results/question_categories_20240907_144513.csv

... (继续执行剩余步骤)

🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
🎉 智能路由系统构建完成!
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉

方法2: 分步执行(适合调试和自定义)

步骤1: 角色性能画像

# 基础用法
python role_profiles.py

# 自定义配置
python role_profiles.py \
  --model qwen2.5-3b \
  --samples 200

功能说明:

  • 定义8个专家角色(详见下文角色介绍)
  • 让每个角色解答200个GSM8K数学题
  • 记录每个角色在每道题上的正确性
  • 生成角色性能排名和详细报告

输出文件:

  • role_profiling_results/role_profile_detailed_TIMESTAMP.csv - 详细记录
  • role_profiling_results/role_accuracy_summary_TIMESTAMP.csv - 准确率汇总
  • role_profiling_results/role_performance_report_TIMESTAMP.json - 完整报告

步骤2: 问题分类

# 基础用法
python question_classifier.py

# 自定义配置  
python question_classifier.py \
  --model qwen2.5-3b \
  --samples 200

功能说明:

  • 使用LLM作为分类器
  • 将数学问题分类到12个预定义类别
  • 支持金钱、时间、代数、几何等多种类型
  • 生成分类统计和分布报告

输出文件:

  • question_classification_results/question_categories_TIMESTAMP.csv - 分类结果
  • question_classification_results/classification_summary_TIMESTAMP.json - 统计摘要

步骤3: 性能分析与路由指南生成

# 需要指定前两步的输出文件路径
python performance_analyzer.py \
  --profile-file role_profiling_results/role_profile_detailed_20240907_143022.csv \
  --classification-file question_classification_results/question_categories_20240907_144513.csv

功能说明:

  • 合并角色表现数据和问题分类数据
  • 计算每个角色在每个问题类别上的专业优势
  • 为每个类别推荐前3名最佳专家
  • 生成路由指南文档和程序可用的JSON数据

输出文件:

  • analysis_results/role_category_performance_TIMESTAMP.csv - 性能矩阵
  • analysis_results/routing_matrix_TIMESTAMP.csv - 路由矩阵
  • analysis_results/routing_guide_TIMESTAMP.md - 人类可读指南
  • analysis_results/routing_guide_TIMESTAMP.json - 程序用数据

步骤4: 智能路由器评估

# 基础用法
python intelligent_router.py \
  --routing-guide analysis_results/routing_guide_20240907_145601.json

# 完整配置
python intelligent_router.py \
  --model qwen2.5-3b \
  --routing-guide analysis_results/routing_guide_20240907_145601.json \
  --samples 50

功能说明:

  • 实现两步推理:问题路由 + 专家求解
  • 对50个新问题进行智能路由和求解
  • 评估路由系统的整体性能
  • 生成详细的评估报告

输出文件:

  • intelligent_routing_results/routing_evaluation_TIMESTAMP.json - 详细决策记录
  • intelligent_routing_results/routing_evaluation_report_TIMESTAMP.md - 性能报告

🎭 专家角色详细介绍

系统包含8个专门设计的数学解题专家角色:

1. step_by_step_teacher (循序渐进的数学老师)

特长: 逐步分解和详细解释
解题风格: 
  1. 仔细阅读题目,理解问题要求
  2. 识别已知条件和未知量  
  3. 逐步分解问题,每一步都清楚说明
  4. 进行必要计算,确保步骤正确
  5. 检查答案合理性
适用场景: 需要详细解题过程的复杂问题

2. logical_decomposer (逻辑分解师)

特长: 将复杂问题分解为简单子问题
解题风格:
  1. 分析问题结构,识别关键信息
  2. 将复杂问题分解为若干简单子问题
  3. 为每个子问题建立数学关系或方程
  4. 依次解决每个子问题
  5. 整合所有子问题的解答
适用场景: 多步骤复杂推理问题

3. equation_builder (方程构建师)

特长: 建立和求解数学方程
解题风格:
  1. 定义变量,明确每个变量含义
  2. 根据题目条件建立方程或方程组
  3. 选择合适方法求解方程
  4. 验证解的正确性和合理性
  5. 给出最终数值答案
适用场景: 代数思维类问题

4. practical_calculator (实用计算师)

特长: 实际计算和数值准确性
解题风格:
  1. 快速识别问题类型和所需计算
  2. 提取关键数字和运算关系
  3. 按数学运算顺序进行精确计算
  4. 在每个步骤后检查数值合理性
  5. 确保最终答案的数值精度
适用场景: 金钱、时间等直接计算类应用题

5. pattern_recognizer (模式识别师)

特长: 识别数学模式和应用标准解法
解题风格:
  1. 识别问题属于哪种常见数学问题类型
  2. 回忆该类型问题的标准解法和公式
  3. 将标准解法应用到当前问题
  4. 根据具体数值进行计算
  5. 验证解答是否符合典型特征
适用场景: 有固定解题模式的标准问题

6. creative_solver (创新解题师)

特长: 寻找多种解法并选择最优路径
解题风格:
  1. 思考问题的多种可能解法
  2. 评估不同解法的优缺点
  3. 选择最简洁有效的解题路径
  4. 运用数学技巧和巧妙方法
  5. 检查是否有更简单的解法
适用场景: 需要创新思维的复杂问题

7. verification_expert (验证专家)

特长: 答案验证和多重检查
解题风格:
  1. 理解问题并制定解题计划
  2. 执行计算过程,记录每个步骤
  3. 得到初步答案后,用不同方法验证
  4. 检查答案是否符合题目所有条件
  5. 确认最终答案的正确性
适用场景: 需要高准确性的重要问题

8. word_problem_specialist (应用题专家)

特长: 文字应用题的语言理解和转换
解题风格:
  1. 仔细阅读题目,理解实际情境
  2. 识别题目中的关键信息和隐含条件
  3. 将文字描述转换为数学表达式
  4. 建立清晰的数量关系
  5. 计算并回到实际情境验证答案合理性
适用场景: 复杂的文字描述问题

📊 问题分类体系

系统将GSM8K问题智能分类到12个类别:

类别 英文名称 描述 示例
基础算术 arithmetic_operations 主要涉及加减乘除等基本运算 简单的数字计算题
金钱问题 word_problems_money 涉及价格、购买、找零、成本等 购物、工资、储蓄类问题
时间问题 word_problems_time 涉及时间计算、工作效率、工期等 工作时间、日程安排类问题
距离速度 word_problems_distance 涉及速度、距离、时间的关系 行程问题、运动问题
百分比 percentage_problems 涉及百分比计算、折扣、增长率等 折扣、税率、增长类问题
比例比率 ratio_proportion 涉及比例关系、比率计算 配比、缩放类问题
代数思维 algebraic_thinking 需要建立方程或使用代数方法 年龄问题、数字问题
多步推理 multi_step_reasoning 需要多个步骤的复杂推理 复合应用题
模式序列 pattern_sequence 涉及数列、规律发现 数列、规律类问题
几何测量 geometry_measurement 涉及形状、面积、体积等 几何计算题
概率统计 probability_statistics 涉及概率计算、统计分析 概率、平均数类问题
逻辑推理 logical_reasoning 主要考查逻辑思维能力 逻辑判断题

🎯 实际使用示例

示例1: 解决单个数学问题

# 创建intelligent_router_example.py文件
from intelligent_router import IntelligentRouter

# 初始化路由器
router = IntelligentRouter(
    model_name="qwen2.5-3b",
    routing_guide_file="analysis_results/routing_guide_latest.json"
)

# 示例问题
question = "Sarah有15个苹果。她给朋友3个苹果,然后又买了8个。她现在有多少个苹果?"

print("🔍 问题:", question)
print("="*50)

# 步骤1: 路由决策
selected_role, category, confidence, reasoning = router.route_question(question)
print(f"📍 预测类别: {category}")
print(f"🎭 选择专家: {selected_role}")
print(f"💪 信心度: {confidence}")
print(f"🤔 选择理由: {reasoning}")
print("="*50)

# 步骤2: 专家求解
final_answer, extracted_answer = router.solve_with_role(question, selected_role)
print(f"💡 专家解答:")
print(final_answer)
print("="*50)
print(f"🎯 最终答案: {extracted_answer}")

运行:

python intelligent_router_example.py

预期输出:

🔍 问题: Sarah有15个苹果。她给朋友3个苹果,然后又买了8个。她现在有多少个苹果?
==================================================
📍 预测类别: arithmetic_operations
🎭 选择专家: practical_calculator
💪 信心度: high
🤔 选择理由: 这是一个基础的算术运算问题,涉及加减法计算
==================================================
💡 专家解答:
我来逐步计算这个问题:

1. Sarah最初有15个苹果
2. 她给朋友3个苹果:15 - 3 = 12个苹果
3. 她又买了8个苹果:12 + 8 = 20个苹果

因此,Sarah现在有20个苹果。
==================================================
🎯 最终答案: 20

示例2: 批量评估系统性能

# 评估路由系统在多个问题上的表现
routing_decisions = router.evaluate_routing_system(num_samples=20)

# 分析结果
correct_count = sum(1 for d in routing_decisions if d.is_correct)
total_count = len(routing_decisions)
accuracy = correct_count / total_count

print(f"📊 评估结果:")
print(f"   总问题数: {total_count}")
print(f"   正确答案数: {correct_count}")
print(f"   整体准确率: {accuracy:.2%}")

# 按专家角色分析
role_stats = {}
for decision in routing_decisions:
    role = decision.selected_role
    if role not in role_stats:
        role_stats[role] = {"total": 0, "correct": 0}
    role_stats[role]["total"] += 1
    if decision.is_correct:
        role_stats[role]["correct"] += 1

print(f"\n🎭 专家角色使用情况:")
for role, stats in role_stats.items():
    role_accuracy = stats["correct"] / stats["total"] if stats["total"] > 0 else 0
    print(f"   {role}: {role_accuracy:.2%} ({stats['correct']}/{stats['total']})")

⚙️ 高级配置选项

模型选择

# 使用不同的LLM模型
python run_complete_pipeline.py --model qwen2.5-3b     # 推荐: 平衡性能和效率
python run_complete_pipeline.py --model ministral-7b   # 更大模型: 可能更准确但较慢
python run_complete_pipeline.py --model gemma-2-2b     # 轻量模型: 速度快但可能准确率较低

样本数量调整

# 调整画像和分类样本数量
python run_complete_pipeline.py --samples 100         # 快速测试
python run_complete_pipeline.py --samples 200         # 标准配置(推荐)
python run_complete_pipeline.py --samples 500         # 高精度配置

# 调整路由器评估样本数量
python run_complete_pipeline.py --eval-samples 20     # 快速验证
python run_complete_pipeline.py --eval-samples 50     # 标准评估(推荐)
python run_complete_pipeline.py --eval-samples 100    # 详细评估

跳过已完成的步骤

# 如果已有角色画像结果,跳过步骤1
python run_complete_pipeline.py --skip-profile

# 如果已有问题分类结果,跳过步骤2  
python run_complete_pipeline.py --skip-classification

# 如果已有性能分析结果,跳过步骤3
python run_complete_pipeline.py --skip-analysis

# 使用指定的现有文件
python run_complete_pipeline.py \
  --profile-file role_profiling_results/role_profile_detailed_20240907_143022.csv \
  --classification-file question_classification_results/question_categories_20240907_144513.csv \
  --routing-guide-file analysis_results/routing_guide_20240907_145601.json

📈 结果文件详解

角色画像结果

详细记录文件 (role_profile_detailed_TIMESTAMP.csv):

sample_id,question,gold_answer,role_name,role_description,full_response,extracted_answer,is_correct,timestamp
0,"Janet's ducks lay 16 eggs per day...",28,step_by_step_teacher,"循序渐进的数学老师","让我逐步解决这个问题...",28,True,2024-09-07T14:30:22

准确率汇总 (role_accuracy_summary_TIMESTAMP.csv):

role_name,accuracy,total_samples,correct_samples,description
practical_calculator,0.75,200,150,"实用计算师 - 注重实际计算和数值准确性"
step_by_step_teacher,0.72,200,144,"循序渐进的数学老师 - 注重逐步分解和详细解释"

问题分类结果

分类结果 (question_categories_TIMESTAMP.csv):

question_id,question,classification_response,category,timestamp
0,"Janet's ducks lay 16 eggs per day...","word_problems_money",word_problems_money,2024-09-07T14:45:13

分类摘要 (classification_summary_TIMESTAMP.json):

{
  "timestamp": "20240907_144513",
  "model_name": "qwen2.5-3b", 
  "total_questions": 200,
  "categories_found": 8,
  "category_distribution": {
    "word_problems_money": {"count": 45, "percentage": 22.5},
    "arithmetic_operations": {"count": 38, "percentage": 19.0}
  }
}

性能分析结果

路由指南 (routing_guide_TIMESTAMP.md):

# 数学问题专家角色路由指南

## Word Problems Money
**最佳专家**: practical_calculator
- 专业描述: 实用计算师 - 注重实际计算和数值准确性
- 在此类问题上的准确率: 78.3% (47/60)
- 🌟 强烈推荐:该专家在金钱相关应用题方面表现卓越

程序用数据 (routing_guide_TIMESTAMP.json):

{
  "timestamp": "20240907_145601",
  "routing_recommendations": {
    "word_problems_money": [
      {
        "role_name": "practical_calculator",
        "role_description": "实用计算师 - 注重实际计算和数值准确性", 
        "accuracy": 0.783,
        "total_questions": 60,
        "correct_answers": 47
      }
    ]
  }
}

路由评估结果

详细决策记录 (routing_evaluation_TIMESTAMP.json):

[
  {
    "question": "Sarah has 15 apples...",
    "predicted_category": "arithmetic_operations",
    "selected_role": "practical_calculator", 
    "routing_confidence": "high",
    "routing_reasoning": "这是基础算术运算问题",
    "final_answer": "Sarah现在有20个苹果",
    "extracted_answer": "20",
    "is_correct": true,
    "timestamp": "2024-09-07T15:20:45"
  }
]

评估报告 (routing_evaluation_report_TIMESTAMP.md):

# 智能路由系统评估报告

生成时间: 20240907_152045
模型: qwen2.5-3b

## 总体性能
- 总样本数: 50
- 正确答案数: 38
- 整体准确率: 0.7600 (76.00%)

## 按专家角色分析
- practical_calculator: 0.8000 (16/20)
- step_by_step_teacher: 0.7500 (12/16)

🔧 故障排除指南

常见问题与解决方案

1. 模型加载失败

错误: Error loading model qwen2.5-3b: [Errno 2] No such file or directory

解决方案:

# 检查模型路径
ls -la /data/Qwen2.5-3B-Instruct/

# 如果模型不存在,检查config.json中的路径配置
cat config.json | grep model_name

# 使用其他可用模型
python run_complete_pipeline.py --model gemma-2-2b

2. 数据集加载失败

错误: Error loading GSM8K dataset: Connection timeout

解决方案:

# 手动下载数据集
python -c "from datasets import load_dataset; load_dataset('gsm8k', 'main', split='test')"

# 或使用本地缓存
export HF_DATASETS_OFFLINE=1

3. GPU内存不足

错误: RuntimeError: CUDA out of memory

解决方案:

# 使用更少样本
python run_complete_pipeline.py --samples 50 --eval-samples 20

# 或使用CPU模式
export CUDA_VISIBLE_DEVICES=""

4. 文件路径错误

错误: 角色画像文件不存在: role_profiling_results/xxx.csv

解决方案:

# 列出现有文件
ls -la role_profiling_results/

# 使用最新文件
python performance_analyzer.py \
  --profile-file $(ls -t role_profiling_results/*.csv | head -1) \
  --classification-file $(ls -t question_classification_results/*.csv | head -1)

性能优化建议

提高准确率

  1. 增加样本数量: --samples 500
  2. 使用更大模型: --model ministral-7b
  3. 优化角色定义: 修改role_profiles.py中的角色prompt
  4. 细化分类体系: 在question_classifier.py中添加更多类别

提高运行速度

  1. 减少样本数量: --samples 100 --eval-samples 20
  2. 使用更小模型: --model gemma-2-2b
  3. 跳过已完成步骤: --skip-profile --skip-classification
  4. 并行处理: 修改代码支持多GPU或多进程

增强稳定性

  1. 添加重试机制: 在模型调用失败时自动重试
  2. 错误处理: 为每个步骤添加异常捕获
  3. 中间结果保存: 定期保存中间结果避免重新计算
  4. 降级策略: 在高级功能失败时回退到基础方法

📊 性能基准测试

测试环境

  • 硬件: GPU V100 32GB × 2
  • 模型: Qwen2.5-3B-Instruct
  • 数据: GSM8K测试集200样本

基准结果

指标 单一最佳角色 随机选择角色 智能路由系统 提升幅度
整体准确率 68.5% 62.3% 74.2% +8.4%
平均推理时间 12.3s 12.8s 15.6s +26.8%
金钱类问题 72.1% 65.4% 81.7% +13.3%
代数类问题 64.2% 58.9% 71.8% +11.8%

各角色专业领域准确率

角色 最擅长类别 该类别准确率 整体准确率
practical_calculator 金钱问题 81.7% 71.2%
equation_builder 代数思维 78.3% 69.8%
step_by_step_teacher 多步推理 76.9% 72.1%
word_problem_specialist 应用题 75.4% 68.9%

🚀 扩展和自定义

添加新的专家角色

  1. role_profiles.py中添加新角色:
RoleConfig(
    name="math_genius",
    description="数学天才 - 擅长复杂数学推理和高级技巧",
    prompt_template="""你是一位数学天才。请用高级数学技巧解决问题:
    
1. 识别问题的数学本质和深层结构
2. 运用高级数学概念和定理
3. 寻找最优雅简洁的解法
4. 使用数学思维的抽象和推广
5. 验证解法的数学严谨性

问题:{question}

请展示你的数学天赋:

解答:"""
)
  1. intelligent_router.py中添加对应的prompt模板

添加新的问题类别

  1. question_classifier.py中扩展分类列表:
MATH_CATEGORIES = [
    # 现有类别...
    "advanced_algebra",        # 高级代数
    "calculus_problems",       # 微积分问题
    "number_theory",          # 数论问题
    "combinatorics",          # 组合数学
]
  1. 更新分类prompt模板以包含新类别

自定义评估指标

  1. intelligent_router.py中添加新的评估维度:
@dataclass
class ExtendedRoutingDecision(RoutingDecision):
    difficulty_level: str      # 问题难度
    solving_time: float        # 解题时间
    confidence_score: float    # 置信度分数
    alternative_roles: List[str]  # 备选角色

🤝 贡献指南

报告问题

  1. 提供详细的错误信息和日志
  2. 包含运行环境信息(Python版本、GPU型号等)
  3. 提供可复现的最小示例

提交改进

  1. Fork项目并创建feature分支
  2. 添加充分的测试和文档
  3. 确保代码风格一致
  4. 提交Pull Request

开发路线图

  • 支持更多数学数据集(MATH、MathQA)
  • 实现在线学习和角色性能动态更新
  • 添加Web界面和API服务
  • 支持多模态数学问题(图表、几何图形)
  • 集成外部工具(计算器、绘图工具)

📞 联系与支持

如有问题或建议:

  1. 📧 查看本文档的故障排除部分
  2. 📋 检查GitHub Issues中的已知问题
  3. 💬 在讨论区发起新话题
  4. 🐛 提交详细的bug报告

最后更新: 2024年9月7日
版本: v1.0.0
作者: CISC团队

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages