第 5 章:分词器与数据
词表决定模型有多「瘦」,jsonl 决定它读过什么。不要自己重训 tokenizer。
1Tokenizer 可以看成一本词典
它把句子切成 token id,再把 id 拼回文字。仓库提供 train_tokenizer.py 当示例,不建议重训:词表一变,权重、数据、推理接口和社区生态全部对不上。
| 模型 | 词表大小 |
|---|---|
| Yi | 64,000 |
| Qwen2 | 151,643 |
| Llama 3 | 128,000 |
| Mistral | 32,000 |
| MiniMind | 6,400 |
6400 对中文切分不如 Qwen / GLM 细,但能显著压低 embedding 和输出层的参数占比,对百兆级模型更合适。主线统一用 minimind_tokenizer,不再维护 mistral 词表分叉。
跨词表比较困惑度(PPL)不公平,更该看 BPB(Bits Per Byte)。中文大约 1.5–1.7 字符/token,英文大约 4–5 字符/token。
2预训练数据:学会词语接龙
主线文件:pretrain_t2t.jsonl / pretrain_t2t_mini.jsonl。每行只有一段 text:
{"text": "如何才能摆脱拖延症?治愈拖延症并不容易,但以下建议可能有所帮助。"}
{"text": "Transformer 通过自注意力机制建模上下文关系,是现代大语言模型的重要基础结构。"}
来源包括通用文本、对话整理、蒸馏语料等宽松协议数据,经过清洗、去重、长度控制和格式统一。mini 版适合快速复现,完整版适合训主线 minimind-3。
3SFT 数据:学会当助手
sft_t2t.jsonl / sft_t2t_mini.jsonl 使用多轮对话。Tool Call 已经混进主线,一般不必再单独做一轮工具微调。
{
"conversations": [
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!"}
]
}
带工具的样本会在 system 上挂 tools,在 assistant 上挂 tool_calls,训练时由 chat template 展开成 <tool_call> / <tool_response>。
4RL 数据
dpo.jsonl:偏好对,chosen更好、rejected更差rlaif.jsonl:格式接近 SFT,但最后一个 assistant 留空,训练时现场生成再打分agent_rl.jsonl/agent_rl_math.jsonl:多轮工具 / 数学可验证任务
5下载清单与推荐组合
放到 ./dataset/。标了推荐的是快速复现 Zero 的最小集合。
| 文件 | 大约体积 | 用途 |
|---|---|---|
| pretrain_t2t_mini.jsonl | 1.2GB | 推荐:快速预训练 |
| sft_t2t_mini.jsonl | 1.6GB | 推荐:快速 SFT(含部分 Tool Call) |
| rlaif.jsonl | 24MB | 推荐:PPO / GRPO / CISPO |
| pretrain_t2t.jsonl | 10GB | 完整预训练 |
| sft_t2t.jsonl | 14GB | 完整 SFT |
| dpo.jsonl | 53MB | DPO 偏好对齐 |
| agent_rl.jsonl | 86MB | Agentic RL |
| agent_rl_math.jsonl | 18MB | 带校验的数学 Agent |
最快出对话模型:
pretrain_t2t_mini + sft_t2t_mini。完整复现主线再用全量 t2t + rlaif / agent_rl。训练参数 max_seq_len 是 token 数,不是字符数。