[LLM 1/10] 继续预训练:把新知识真正灌进泰语 LLM
一个泰语能力还不错的大语言模型,往往对你所在组织的专业知识"一无所知"—— 不懂泰国的政府法规,不懂你这个行业的术语,更没见过公司内部文档。 这篇文章要讲的是最直接的解法:继续预训练(Continue Pretraining,CPT), 从公式一直讲到能在免费 Colab 上大约 15 分钟真正跑完的代码。
Open in Colab01_continue_pretraining.ipynb
1. 问题(Problem statement)
设想你拿 Qwen3-0.6B 去问一句:"按照泰国总理府的规定,什么情况下可以采用特定方式采购?" 模型会非常自信地回答你,而且答错——因为它压根没见过足够多的泰国政府公文。
很多人试图用几千条问答对做 fine-tuning 来补救,然后发现根本没用。 原因在于:SFT 教的是"回答的形式",不是"知识"本身。 如果知识从来就不在模型权重里, 教它用正确的语气去回答,只不过是让它在胡说八道的时候更加理直气壮而已。
新知识进入模型有三条路,选错路正是大多数 LLM 项目失败的根源:
| 方法 | 适合的场景 | 推理时的开销 |
|---|---|---|
| RAG | 变动频繁、需要标注来源的知识 | 每次都要检索 + prompt 变长 |
| 继续预训练 | 大量且相对稳定的专业领域知识 | 无(知识已在权重里) |
| SFT | 格式、语气、答案结构 | 无 |
这篇文章走的是第二条路。
2. 我们要做什么(Solution)
我们会拿一个 base 模型(尚未经过 instruction tuning), 用与预训练阶段完全相同的 objective——预测下一个词——在我们关心领域的泰语原始文本上继续训练。 没有标签,没有问答对,只有纯文本。
但这篇文章的核心不是"训完变强了",而是你为此付出的代价:
CPT 是用牺牲通用能力来换取领域上的精准。 它是一笔交易,不是免费的午餐,而这笔交易的"汇率"由一个叫 replay ratio 的数字单独控制。
模型忘掉原本会做的事情,这个现象叫作灾难性遗忘(catastrophic forgetting)。 我们不会空口谈它,而是要把它量化成数字,再去找一个你能接受的平衡点。
3. 公式(Equation)
3.1 CPT 的 objective
- = 第 个位置的 token
- = 它前面的全部 token
- = 模型预测出的概率
这个式子和预训练时一模一样,唯一变的是数据。 这正是 CPT 不需要标签的原因——文本自己就是答案。
3.2 Perplexity:我们的度量单位
翻译成人话就是:"平均而言,模型正在多少个选项之间犹豫。" PPL = 20 表示大约在 20 个词之间摇摆,PPL = 5 则笃定得多。困惑度越低越好。
3.3 本章最重要的公式——Replay Mixing
就是每个 batch 中领域数据所占的比例。
- → 纯领域数据 → 领域能力涨得最快,同时也忘得最快
- → 一半一半 → 涨得慢一些,但遗忘少得多
不要把这个值写死,去扫一遍它的取值,然后挑一个你能接受的点。
这篇文章大约是本章的前 30%。其余部分——环境准备、数据准备、核心代码、实测结果与总结——都在免费的 LLM Finetuning 课程中,使用 Google 登录即可阅读。
在课程中阅读完整章节 →