Skip to content

Repository files navigation

Qwen3.5-4B Effort Control 实验项目

本项目对应浙江大学 REAL Lab 招生考核题目二,目标是在较小规模模型上实现可控的推理投入(effort control)。项目将 <LOW><MEDIUM><HIGH> 作为显式控制信号,通过教师模型生成同题三档配对数据,并使用 LoRA SFT 微调 Qwen3.5-4B,使模型在同一问题上能够按 effort token 调整可见推理长度。

需要注意:本项目不直接控制模型内部不可观测计算量,而是将 <reasoning>...</reasoning> 中的 token 数作为可观测 effort proxy。核心判断标准是:同一验证问题在 LOW / MEDIUM / HIGH 三档下形成有序推理长度梯度,同时保持较高答案准确率。

1. 项目结构

REAL_Effort_Control/
├── README.md                         # 中文项目说明
├── PROJECT_DESIGN_REPORT.md          # 最终设计说明文档
├── figures/
│   └── effort_control_method.png     # 方法结构图
├── scripts/
│   ├── generate_teacher_effort_data.py      # 调用教师模型生成三档候选数据
│   ├── prepare_main_experiment_data.py      # 构造主实验 train/eval 数据
│   ├── build_no_effort_ablation_data.py     # 构造去 effort token 消融数据
│   ├── build_general_ability_eval.py        # 构造通用能力 OOD 评估集
│   └── evaluate_effort_control.py           # base / LoRA / 消融 / 泛化统一评估脚本
├── configs/
│   ├── credentials/                  # API 配置;真实密钥文件已被 gitignore 忽略
│   ├── data_generation/              # 教师数据生成配置
│   ├── data_prep/                    # 数据切分与消融/泛化数据构造配置
│   ├── training/                     # LoRA 训练配置
│   ├── evaluation/                   # 各类评估配置
│   └── llamafactory/                 # LLaMA-Factory 数据集注册配置
├── data/
│   ├── teacher_candidates_5k.jsonl           # 教师模型原始候选结果
│   ├── effort_teacher_sft_5k_all_accepted.json
│   ├── effort_teacher_sft_5k_paired.json     # 同题三档配对后的完整 SFT 数据
│   ├── effort_teacher_5k_train.json          # 主实验训练集
│   ├── effort_teacher_5k_eval.jsonl          # 主实验验证题目
│   ├── ablation_no_effort_5k_train.json      # 去 effort token 消融训练集
│   └── general_ability_eval.jsonl            # OOD 通用能力评估集
├── outputs/
│   ├── effort_5k_eval/               # 主实验 base / LoRA 评估结果
│   ├── ablation_no_effort_5k_eval/   # 去 effort token 消融结果
│   └── general_ability_eval/         # 通用能力泛化评估结果
└── LLaMA-Factory/                    # LoRA SFT 训练框架

2. 环境与模型路径

推荐使用 environment.yml 创建环境:

cd /root/REAL_lab/REAL_Effort_Control
conda env create -f environment.yml

如果服务器无法直接使用 conda activate,也可以直接调用环境中的 Python:

/root/miniconda3/envs/effort/bin/python

默认学生模型路径:

/root/autodl-tmp/models/Qwen3.5-4B

教师模型使用百炼平台 API,配置文件为:

configs/credentials/bailian_teacher_config.json

该文件包含真实 API Key,已被 .gitignore 忽略。仓库中只应提交示例文件:

configs/credentials/bailian_teacher_config.example.json

3. 数据集获取流程

主实验数据来自 GSM8K 与 ARC-Challenge。流程如下:

  1. 对每个原始问题分别请求教师模型生成 <LOW><MEDIUM><HIGH> 三档回答;
  2. 要求教师输出结构化字段,包括 reasoning、answer、答案类型等;
  3. 对候选结果进行过滤:API 成功、JSON 可解析、答案正确、推理长度满足预算要求;
  4. 只保留同一题三档均 accepted 且满足 LOW < MEDIUM < HIGH 的样本;
  5. 将保留样本转换为 Alpaca 风格 SFT 数据,用于 LoRA 微调。

生成教师数据:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/generate_teacher_effort_data.py --run-config configs/data_generation/teacher_generation_5k.yaml

切分主实验训练集和验证集:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/prepare_main_experiment_data.py --run-config configs/data_prep/main_split_5k.yaml

构造去 effort token 消融数据:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/build_no_effort_ablation_data.py --run-config configs/data_prep/no_effort_ablation_5k.yaml

构造 OOD 通用能力评估集:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/build_general_ability_eval.py --run-config configs/data_prep/general_ability_eval.yaml

4. LoRA 训练

训练前需要确保 LLaMA-Factory 能读取本项目的数据集注册信息,并且训练数据已复制到 LLaMA-Factory/data/effort_control/。当前项目已经整理好主实验和消融实验的数据注册。

主实验 LoRA 训练:

cd /root/REAL_lab/REAL_Effort_Control/LLaMA-Factory
/root/miniconda3/envs/effort/bin/llamafactory-cli train ../configs/training/qwen_effort_teacher_5k_lora_sft.yaml

去 effort token 消融训练:

cd /root/REAL_lab/REAL_Effort_Control/LLaMA-Factory
/root/miniconda3/envs/effort/bin/llamafactory-cli train ../configs/training/qwen_no_effort_ablation_5k_lora_sft.yaml

训练后的主要 LoRA checkpoint:

LLaMA-Factory/saves/qwen3_5-4b/lora/effort_teacher_5k
LLaMA-Factory/saves/qwen3_5-4b/lora/ablation_no_effort_5k

5. 评估命令

主实验评估:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/base_eval.yaml
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/lora_eval.yaml
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/compare_base_lora.yaml

去 effort token 消融评估:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/no_effort_ablation_lora_eval.yaml
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/compare_full_lora_no_effort_ablation.yaml

通用能力泛化评估:

cd /root/REAL_lab/REAL_Effort_Control
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/general_base_eval.yaml
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/general_lora_eval.yaml
/root/miniconda3/envs/effort/bin/python scripts/evaluate_effort_control.py --run-config configs/evaluation/compare_general_base_lora.yaml

6. 当前主要结果

主实验结果:

Model Overall Acc. Token Monotonic Rate LOW Reasoning MEDIUM Reasoning HIGH Reasoning
Base Qwen3.5-4B 89.01% 79.79% 146.0 226.7 545.6
LoRA Effort Model 94.50% 88.30% 51.8 93.9 171.2

去 effort token 消融:

Model Overall Acc. Token Monotonic Rate LOW Reasoning MEDIUM Reasoning HIGH Reasoning
Full Effort LoRA 94.50% 88.30% 51.8 93.9 171.2
w/o Effort Token 98.40% 0.00% 67.5 67.5 67.5

通用能力 OOD 小样本评估:

Model Overall Acc. OpenBookQA BoolQ MMLU Parse Failures Avg Reasoning Tokens
Base Qwen3.5-4B 54.33% 64.00% 60.00% 39.00% 107 597.9
LoRA Effort Model 84.00% 92.00% 84.00% 76.00% 12 77.3

7. 结论

实验表明,LoRA 后模型能够根据 <LOW><MEDIUM><HIGH> 生成有序的可见推理长度梯度,并在中高 effort 下保持较高准确率。去除 effort token 后,模型虽然仍可答题,但三档输出完全塌缩,说明 effort token 是实现控制能力的必要条件。OOD 小样本评估中未观察到通用能力退化。

更完整的方法设计、实验分析和 AI 工具使用说明见:

PROJECT_DESIGN_REPORT.md

About

For examination

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages