MiniMind 新手教程

第 5 章:分词器与数据

词表决定模型有多「瘦」,jsonl 决定它读过什么。不要自己重训 tokenizer。

1Tokenizer 可以看成一本词典

它把句子切成 token id,再把 id 拼回文字。仓库提供 train_tokenizer.py 当示例,不建议重训:词表一变,权重、数据、推理接口和社区生态全部对不上。

模型词表大小
Yi64,000
Qwen2151,643
Llama 3128,000
Mistral32,000
MiniMind6,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.jsonl1.2GB推荐:快速预训练
sft_t2t_mini.jsonl1.6GB推荐:快速 SFT(含部分 Tool Call)
rlaif.jsonl24MB推荐:PPO / GRPO / CISPO
pretrain_t2t.jsonl10GB完整预训练
sft_t2t.jsonl14GB完整 SFT
dpo.jsonl53MBDPO 偏好对齐
agent_rl.jsonl86MBAgentic RL
agent_rl_math.jsonl18MB带校验的数学 Agent
最快出对话模型:pretrain_t2t_mini + sft_t2t_mini。完整复现主线再用全量 t2t + rlaif / agent_rl。训练参数 max_seq_len 是 token 数,不是字符数。