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: 跨架构验证 → 最终候选 → 提交
- 数据增强脚本开发
---
## 七、如何运行
### 环境安装
```bash
pip install -r requirements.txt
pip install muon-optimizer torch-optimizer morfessor
```
### 单个实验
```bash
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 # 跳过评测
```
### 批量实验
```bash
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 # 查看结果
```
### 组件验证
```bash
python scripts/tools/verify_components.py --group arch # 验证架构
python scripts/tools/verify_components.py --resume # 跑全部(跳过已通过)
```
---
## 八、关键配置速查
```yaml
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
```