GooGooLM / notes /progress_report.md
XiaoyanLi's picture
Initial upload: code, training data, tokenizers, notes
83112d8 verified
|
Raw
History Blame Contribute Delete
11.1 kB

进展报告: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/信息密集合成

六、下一步工作

立即要做

  1. 上传项目到 HuggingFace(排除 qwen3.5-9b 模型)
  2. 开始正式实验 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              # gpt2(D0) | gpt_bert(D1) | modernized_bert(D2) | xlstm(D3) | rtd(D4)
  use_moe: false           # D5 MoE
  use_attn_res: false      # D6 AttnRes
data:
  tokenizer: bpe           # bpe(B0) | morfessor_bpe(B1)
  packing: concat          # concat | sentence(G6)
embedding:
  type: standard           # standard(C0) | nhot(C1)
  init: random             # random | fasttext(C2)
training:
  objective: gpt_bert      # gpt_bert | clm | mlm | rtd
  learning_rate: 0.0005    # AdamW推荐; LAMB需≤0.005(fp16)
  use_mtp: false           # E5 反向课程MTP
masking:
  type: standard           # standard(E0) | amlm(E1) | frequency(E3)
optimizer:
  type: adamw              # adam(F0) | adamw(F1) | lamb(F2) | muon(F4)
  forgetter: false         # F3 FORGETTER