进展报告:BabyLM Challenge 2026 Strict-Small
日期:2026-03-23
当前阶段:代码开发完成,组件验证通过,准备上传 HuggingFace 并开始正式实验
一、项目总览
参加 BabyLM Challenge 2026 Strict-Small 赛道(训练数据 ≤ 10M 词),目标是训练一个小型语言模型(~30M 参数)在多项语言评测任务上取得最佳成绩。
评测任务:BLiMP(语法)、EWoK(世界知识)、Entity Tracking(实体追踪)、GLUE(语言理解,需微调)、WUG(形态学)、COMPS(概念属性)、AoA(词汇习得)、Reading Time(阅读时间)
2025 Strict-Small 排行榜(我们的目标赛道):
| 模型 |
TextAvg |
BLiMP |
GLUE |
EWoK |
| amlm_hd_fail(冠军) |
45.4 |
59.0 |
57.7 |
56.0 |
| MoEP(亚军) |
44.5 |
60.8 |
64.2 |
50.2 |
| Baseline GPT-BERT |
41.2 |
71.7 |
65.1 |
49.5 |
| Baseline GPT-2 |
37.4 |
66.4 |
55.9 |
49.9 |
二、项目结构
BabyLM_Challenge/
├── experiments.csv # 384 个实验配置
├── requirements.txt # Python 依赖
├── scripts/
│ ├── 01_data/ # 数据处理 pipeline (Stage 1-9)
│ ├── 02_model/ # 分词器训练 (BPE / Morfessor)
│ ├── 03_training/ # 训练框架
│ │ ├── config.py # 配置系统 (YAML + CLI override)
│ │ ├── data.py # 数据加载、3种掩码策略、逐句/拼接模式
│ │ ├── train.py # 训练循环 + 自动评测 (fast/full)
│ │ ├── evaluate.py # 评测包装 (zero-shot + GLUE微调 + AoA)
│ │ ├── utils.py # 5种优化器、调度器、checkpoint
│ │ ├── hf_export/ # HuggingFace 模型导出 (5种架构)
│ │ ├── models/ # 7种模型架构
│ │ │ ├── gpt2.py # D0 基线
│ │ │ ├── gpt_bert.py # D1 双目标混合
│ │ │ ├── modern_bert.py # D2 现代双向
│ │ │ ├── xlstm.py # D3 矩阵记忆
│ │ │ ├── rtd.py # D4 替换Token检测
│ │ │ ├── moe.py # D5 MoE稀疏专家 (可叠加)
│ │ │ ├── attn_res.py # D6 注意力残差 (可叠加)
│ │ │ ├── embeddings.py # C0标准 / C1 N-hot
│ │ │ └── distillation.py # 知识蒸馏
│ │ └── configs/exp_A.yaml # 基线YAML配置
│ └── tools/ # 实验管理工具
│ ├── generate_experiments.py # 生成 experiments.csv
│ ├── run_experiments.py # 批量运行 (CSV→YAML→训练→评测→结果)
│ ├── collect_results.py # 结果汇总
│ ├── smoke_test.py # 冒烟测试 (44个代码路径)
│ └── verify_components.py # 组件验证 (32项逐个验证)
├── notes/
│ ├── encyclopedia.md # 改进点百科 (所有优化维度详解)
│ ├── experiment_plan.md # 实验计划 (384个实验, 22阶段)
│ ├── experiment_log.md # 实验结果记录
│ ├── progress_report.md # 本文件
│ ├── ref_datasets.md # 数据集详细信息
│ ├── ref_leaderboard_2025.md # 2025排行榜数据
│ └── babylm_leaderboard_2025.csv # 原始排行榜CSV
├── data/ # 训练数据 (14个源, 119M词原始)
│ ├── raw_files/ # 原始数据文件
│ ├── 1_noise_filtered/ ~ 7_eval_sentences/ # 处理流水线各阶段
│ ├── 8_sample_B/train.txt # 策略B采样 (9.99M词) ✅
│ └── 8_sample_C/train.txt # 策略C采样 (9.99M词) ✅
├── models/
│ ├── tokenizer/ # BPE 8K 分词器 ✅
│ ├── tokenizer_morfessor/ # Morfessor+BPE 分词器 ✅
│ └── qwen3.5-9b/ # Qwen模型 (Paraphrase生成用, 18GB, 不上传)
├── evaluation-pipeline-2025/ # 官方评测pipeline
├── 2025_papers/ # 参考论文PDF
├── checkpoints/ # 训练checkpoint (空)
└── experiment_results/ # 实验结果 (空)
三、已实现的全部功能
编号规则:每个维度 X0 = 基线(不优化的默认选择)
B: 分词器
| 编号 |
方法 |
状态 |
配置 |
| B0 |
BPE 8K(基线) |
✅ |
tokenizer: bpe |
| B1 |
Morfessor+BPE |
✅ |
tokenizer: morfessor_bpe |
| B2 |
词表大小 (4K/8K/16K) |
✅ |
需重新训练分词器 |
C: 嵌入策略
| 编号 |
方法 |
状态 |
配置 |
| C0 |
标准嵌入(基线) |
✅ |
embedding.type: standard |
| C1 |
N-hot 形态嵌入 |
✅ |
embedding.type: nhot |
| C2 |
FastText 初始化 |
✅ 代码 |
embedding.init: fasttext(需先训练FastText模型) |
D: 模型架构
| 编号 |
方法 |
状态 |
验证 |
配置 |
| D0 |
GPT-2(基线) |
✅ |
loss=5.31 |
arch: gpt2, objective: clm |
| D1 |
GPT-BERT |
✅ |
loss=5.74 |
arch: gpt_bert, objective: gpt_bert |
| D2 |
ModernBERT |
✅ |
loss=3.33 |
arch: modernized_bert, objective: mlm |
| D3 |
xLSTM |
✅ |
loss=4.54 |
arch: xlstm, objective: clm |
| D4 |
RTD/ELECTRA |
✅ |
loss=3.99 |
arch: rtd, objective: rtd |
| D5 |
MoE(可叠加) |
✅ |
loss=5.79 |
use_moe: true |
| D6 |
AttnRes(可叠加) |
✅ |
loss=5.74 |
use_attn_res: true |
E: 训练目标与掩码
| 编号 |
方法 |
状态 |
验证 |
配置 |
| E0 |
标准均匀掩码(基线) |
✅ |
loss=5.74 |
masking.type: standard |
| E1 |
AMLM 自适应掩码 |
✅ |
loss=5.75 |
masking.type: amlm |
| E2 |
掩码率衰减 |
✅ |
— |
mask_ratio: 0.30, mask_ratio_end: 0.15 |
| E3 |
频率感知掩码 |
✅ |
loss=5.74 |
masking.type: frequency |
| E4 |
MNTP:CLM 比例 |
✅ |
— |
training.mntp_ratio: 15 |
| E5 |
反向课程 MTP |
✅ |
— |
training.use_mtp: true |
F: 优化器
| 编号 |
方法 |
状态 |
验证 |
配置 |
注意事项 |
| F0 |
Adam(基线) |
✅ |
loss=6.90 |
optimizer.type: adam |
收敛慢 |
| F1 |
AdamW |
✅ |
loss=5.74 |
optimizer.type: adamw |
推荐默认 |
| F2 |
LAMB |
✅ |
loss=5.74 |
optimizer.type: lamb |
fp16下lr≤0.005 |
| F3 |
FORGETTER |
✅ |
loss=5.78 |
optimizer.forgetter: true |
需 wd=1.0 |
| F4 |
Muon |
✅ |
loss=5.69 |
optimizer.type: muon |
慢2.5x,loss最低 |
G: 超参数与训练方式
| 编号 |
方法 |
状态 |
配置 |
| G1-G5 |
lr/batch/wd/dropout/seqlen |
✅ |
YAML 配置 |
| G6 |
逐句模式 |
✅ |
data.packing: sentence(较慢) |
H: 训练技巧
| 编号 |
方法 |
状态 |
| H1 |
Checkpoint 选择 |
✅ 每epoch保存 |
| H2 |
Checkpoint 平均 |
✅ checkpoint.averaging: true |
| H3 |
知识蒸馏 |
✅ 代码完整(需下载teacher模型) |
评测集成
| 模式 |
内容 |
时间 |
| fast |
Zero-shot: BLiMP, EWoK, ET, WUG, Reading |
~15分钟 |
| full |
Zero-shot + GLUE微调(7子任务) + AoA |
~60-90分钟 |
四、验证结果
组件验证(32 项,每项 3 epoch)
| 组 |
通过 |
失败 |
已知问题 |
| 架构 (11项) |
11 |
0 |
— |
| 嵌入 (2项) |
2 |
0 |
— |
| 分词 (2项) |
2 |
0 |
— |
| 掩码 (3项) |
3 |
0 |
— |
| 优化器 (11项) |
8 |
3 |
LAMB+fp16+lr>0.005=NAN(已修复默认LR) |
| 超参 (1项) |
0 |
1 |
sentence模式数据加载慢(需增大timeout) |
| 组合 (2项) |
2 |
0 |
— |
第一个完整实验
GPT-BERT + AdamW + lr=5e-4 + 10 epoch + fast eval:
| 指标 |
我们 |
2025基线 |
| BLiMP |
75.37 |
71.7 |
| BLiMP Supp |
60.40 |
63.2 |
| EWoK |
49.18 |
49.5 |
| Entity Tracking |
42.29 |
34.6 |
| Avg Zero-Shot |
56.81 |
— |
五、已知问题
| 问题 |
状态 |
解决方案 |
| LAMB+fp16+lr>0.005=NAN |
✅ 已修复 |
默认LR改为0.005 |
| G6 sentence模式慢 |
已知 |
增大timeout或优化数据加载 |
| FastText模型未训练 |
待做 |
python scripts/02_model/train_fasttext.py |
| KD teacher模型未下载 |
待做 |
下载Qwen teacher |
| 数据增强脚本未写 |
待做 |
Variation Sets/RecombiText/CD/MATTR/信息密集合成 |
六、下一步工作
立即要做
- 上传项目到 HuggingFace(排除 qwen3.5-9b 模型)
- 开始正式实验 Phase 1-5:
- P1: 5种架构对比
- P2: 核心特性消融 (AMLM/N-hot/FORGETTER/MoE/AttnRes)
- P3: LR sweep
- P4: 正则化 sweep
- P5: 特性组合
后续阶段
- P6-P11: 掩码调参、batch size、优化器、架构修改、分词×嵌入
- P12: 数据集构建方式 (13种)
- P13-P21: 跨架构验证 → 最终候选 → 提交
- 数据增强脚本开发
七、如何运行
环境安装
pip install -r requirements.txt
pip install muon-optimizer torch-optimizer morfessor
单个实验
python -m scripts.03_training.train --config scripts/03_training/configs/exp_A.yaml
python -m scripts.03_training.train --config xxx.yaml --eval-mode fast
python -m scripts.03_training.train --config xxx.yaml --skip-eval
批量实验
python scripts/tools/run_experiments.py --phase 1 --list
python scripts/tools/run_experiments.py --phase 1
python scripts/tools/run_experiments.py --phase 1 --resume
python scripts/tools/collect_results.py --phase 1
组件验证
python scripts/tools/verify_components.py --group arch
python scripts/tools/verify_components.py --resume
八、关键配置速查
model:
arch: gpt2
use_moe: false
use_attn_res: false
data:
tokenizer: bpe
packing: concat
embedding:
type: standard
init: random
training:
objective: gpt_bert
learning_rate: 0.0005
use_mtp: false
masking:
type: standard
optimizer:
type: adamw
forgetter: false