1. 为什么行业大模型绕不开Continued Pre-Training先说一个我最近的真实感受。前阵子有家做法律科技的公司找到我他们的团队相当敏锐很早就用开源大模型做了指令微调把合同审查、法条检索这类任务做成了产品Demo。模型在演示的时候表现得挺好用户问一句模型能按固定格式输出条款分析。但一放到真实的非标合同场景里问题立刻暴露——模型经常把对赌协议里的回购条款和股权转让里的优先购买权搞混甚至会出现根据《公司法》第一百四十一条但实际上该条款根本不是讲这个内容的。问题出在哪不是微调的指令不够多也不是LoRA的秩设得不够大而是模型脑子里压根没有足够的法律领域知识。通用大模型的预训练语料里法律文本虽然有但占比极低而且以普法类、新闻类为主真正高质量的法条释义、裁判文书、非标合同条款模型见得太少了。指令微调只能让它学会用已有知识回答问题的格式知识本身没有增长这就是所谓的知道怎么说话但没读过几本专业书。这就是Continued Pre-Training持续预训练下面统一叫CPT要解决的核心问题。它的本质是在通用大模型的基础上用大规模领域无标注语料继续做自回归训练把行业知识直接写进模型的参数里。和传统微调相比它动的不是回答问题的姿势而是脑子里装了多少货。很多人会有疑问现在RAG不是很成熟了吗把知识放向量数据库里检索出来喂给模型不就行了这里我必须说一句公道话RAG确实解决了一部分知识更新的问题但它做不了三件事第一RAG解决不了模型对领域语言的本征理解比如一个模型如果没见过几十万条真实判决书它对本院认为这种法律论述结构的语感就是差的第二RAG在低延迟场景下成本可观每次请求都要检索、重排、拼装而且有一个检索命中率的上限第三也是最关键的CPT训出来的语感是隐式的它能帮助模型在没有外部检索兜底的情况下仅凭上下文就能做出更合理的推断。所以对于真正想在企业级场景里落地行业模型、而不是只做Demo的团队来说CPT几乎是必修课。这篇指南我不打算讲太玄乎的理论就聚焦在企业实操上数据怎么准备、训练怎么配参、框架怎么选以及我踩过的几个必须提醒你避开的坑。2. CPT和SFT/RLHF的本质差异知识注入与行为对齐是两件事我一直觉得很多团队在选型上犯错根子在于没有分清知识和行为是两个层面的东西。这里我用一个多少有点粗糙但很形象的类比来解释预训练Pre-Training相当于一个人接受通识教育学会了语言、逻辑、常识但还不是任何领域的专家。持续预训练CPT相当于这个人去读了一个专业的研究生大量阅读本领域的文献、案例、原始材料建立起专业的知识体系和语感。监督微调SFT相当于他在工作后接受岗位培训学会了面对什么指令给出什么格式的回答。RLHF/DPO相当于公司的价值观考核让他的回答风格更符合人的偏好。这套类比里最关键的认知是SFT改变的是输出的形式CPT改变的是底层的知识结构。你不可能通过SFT让模型学会它从未见过的知识就像你不能指望一个只上过通识课的人靠一套面试培训就变成真正的律师——他也许能在模拟面试里答出几个标准答案但遇到真实的非标问题就露馅了。从技术原理上看这个差异更明显。SFT的数据格式是指令-回答对训练时模型被要求最大化答案部分的似然概率。这个过程中模型确实也会学到一些知识但由于数据规模通常只有几万到几十万条且每条都很短它对领域知识的覆盖度非常有限。更麻烦的是SFT的数据通常经过了人工整理语言风格已经被规整化了模型学到的是整理后的话术而不是原始材料里的真实分布。CPT则完全不同。它用的训练数据就是领域里最原始的文本比如法律领域的裁判文书、合同扫描件转写文本、法规汇编医疗领域的病历脱敏文本、诊疗指南、药典金融领域的招股书、研报、财报电话会纪要。这些文本不需要人工标注只需要清洗和过滤。训练时模型的任务依然是最朴素的预测下一个token但它面对的是几亿甚至几十亿token的领域语料在这样一个量级下模型会逐渐调整内部参数分布把领域词汇的搭配习惯、专业术语的上下文关系、行文逻辑统统内化进去。我见过一个非常典型的案例。某金融团队对Qwen2.5-7B做了两周的CPT用的语料主要是A股上市公司公告和券商研报大概30B token。训练完成后模型在回答请分析一下这家公司的应收账款风险这类问题时输出的分析框架和专业表述明显比基座模型高出一个档次甚至能准确使用坏账计提比例账龄结构回款周期这些术语的正确上下文。而他们之前用SFT做同样的事情效果始终差一口气——模型知道要输出一个分析报告的格式但里面的内容总是泛泛而谈缺少真正懂行的人才能写出的细节。所以我的建议很直接如果你的行业场景对专业性有硬要求模型需要回答大量不在通用语料里的细节知识那就老老实实做CPT。如果你的场景只是需要模型按照特定格式输出、调用工具、做简单的信息抽取那SFT就够了不要浪费算力做CPT。3. 数据工程CPT的成败在进入训练之前就定死了CPT这个事儿有个不太符合直觉的特点训练本身反而是流程里最简单的一环真正决定模型效果上限的是你喂给它的数据。我甚至愿意说数据工程占CPT工作量的70%以上。这一节我把数据处理的几个关键环节掰开揉碎讲清楚。3.1 语料来源什么样的数据才是模型真正需要的首先要明确一个概念不是所有领域文本都适合做CPT。模型需要的是高质量、信息密度大、表达规范的文本。我把它总结成三个来源优先级第一优先级企业自有的存量语料。比如法律团队的合同库、历史判决书金融团队的内部研报、尽调报告医疗团队的病历、诊疗记录。这些数据有两大价值一是外面任何公开数据集都没有是你真正的护城河二是这些数据反映了你实际业务的语言分布模型训练完直接贴合使用场景。但要注意这类数据通常需要做比较重的脱敏和清洗这部分工作别省。第二优先级公开的专业数据库和高密度文本。不同领域有各自的权威来源例如法律领域的裁判文书网、法规库金融领域的巨潮资讯、交易所公告、券商研报医疗领域的PubMed摘要、诊疗指南、药典制造领域的专利全文、技术标准文档。这些数据的质量普遍不错但需要和第一优先级自有语料做配比避免模型被某一类单一来源带偏。第三优先级通用语料中行业相关的子集。比如从大规模通用语料里用关键词和分类器筛出来的行业新闻、行业百科、行业论坛长文。这些数据的好处是覆盖面广、语言多样缺点是噪音大、深度不够。它适合作为辅助语料但绝对不应该当主力。这里必须提醒一句不要迷信语料越多越好。CPT不是简单的堆料数据的多样性和干净度远比总量重要。我见过有团队往语料里塞了几百G从网上爬来的行业帖子结果模型训完以后回答问题开始带上了论坛口吻甚至在专业回答里穿插口语化的水词。这就是典型的语料质量失控。3.2 清洗流水线分五步走每一步都有讲究数据清洗这件事听起来基础但细节决定成败。我列一个我自己在项目里常用的流水线你可以直接抄作业文本抽取与转码。PDF、Word、扫描件转出来的文本经常有乱码、多余换行、页眉页脚残留。这个阶段的目标是把所有源格式统一成纯文本并尽可能去掉明显的OCR噪声。常用的工具包括PyMuPDF、Tika、PaddleOCR针对扫描件具体选哪个看你的源文件形态。规则去噪。用正则表达式批量去掉网页残留标签、重复的广告文案、无意义的超链接、邮箱电话、日期数字串等。这个环节的一个重点是高频重复文本一定要去。比如页眉页脚、免责声明、版权信息往往在千篇文档里重复出现如果不处理模型会在这些片段上过拟合浪费大量训练额度来背诵这些废话。近重复去重MinHash LSH。这是我最想强调的一环。行业语料里经常有大段雷同的内容比如同一份研报被不同平台转载只是标题改了一下同一份法律法规被不同网站整理了带注释版本。如果不做去重这些重复内容会在训练时被反复放大导致模型对这一小段内容产生过拟合记忆而对其他出现次数少的知识学习不足。工程上常用的方案是MinHash算法计算文本的相似度再用LSH做近重复检测相似度阈值一般设在0.7到0.85之间具体看你的语料情况。语言质量过滤。用语言模型比如fastText的语言分类模型过滤掉非目标语言的文本再结合启发式规则去掉过短、过长、标点符号过于稀少、字母数字比异常等明显低质量的文本。字级别困惑度的方式也可以做复杂度偏高不急的话可以不上。隐私与敏感信息脱敏。这块在不同行业有不同的合规要求尤其是医疗、金融、法律涉及个人隐私数据和商业机密。处理方式一般分两类一是规则加实体识别把身份证号、手机号、公司名、人名等替换成占位符二是对某些高危字段直接整段剔除。这一点千万不要省模型会把训练语料里的隐私信息学进去后面被人用Prompt套出来就是合规事故。3.3 数据配比领域语料和通用语料的比例非常关键接下来是一个很多人都忽略、但其实影响巨大的参数混合比。CPT如果只用纯领域语料模型会迅速在领域任务上变得很强但通用能力也会快速退化出现灾难性遗忘——它可能变得擅长合同审查但连常识问答都回答不好了。解决思路是混入一部分通用语料。比例怎么定没有绝对标准但根据我看到的工业界实践和我的项目经验有几个比较稳妥的参考区间场景领域语料占比通用语料占比适用情况领域知识极度稀缺如细分医疗专科60%-70%30%-40%领域语料量级有限需要保证知识覆盖领域知识中等如金融、法律80%20%大多数字号任务场景的推荐选择领域语料极其充足如互联网平台评论90%以上10%以下需要模型对特定风格有极强适应但需要密切监控通用能力增量领域更新已有领域模型做持续更新50%以下50%以上防止大段新知识覆盖旧知识时造成严重遗忘上表里第二行是最常见的配置80/20的混合比在多数任务上都能兼顾领域知识注入和通用能力保持。但注意这只是初始值实际训练中你要不断通过评估集的指标来调这个比例。如果你的领域语料质量很高、与业务场景贴合度很强即使70%的领域占比也基本没风险反之如果领域语料本身的多样性不高那就算50%也太多。还有一个实操细节领域语料和通用语料不是简单拼接而是在每个batch内部按比例混合。比如batch size是32条文本按80/20的比例每个batch里大概26条领域数据、6条通用数据。这样做的好处是模型在每一步更新时都能同时看到两类数据不会出现前面若干步全是领域文本、后面全变成通用文本这种阶段性偏斜。3.4 数据量级到底要多大一个经验公式和真实案例CPT到底要准备多少数据是我被问得最多的问题。这个问题的答案取决于三个变量你的模型参数规模、你的领域语料覆盖度需求、以及你的算力预算。一般有一个大致的锚定关系领域数据量建议在模型参数量对应预训练总token量的1%到5%之间作为起点是合理的。以大模型预训练的常规规律看一个7B模型预训练大约消耗1T到2T token1%就是10B到20B5%就是50B到100B。这给了一个初步的量级参考。实际操作中我见过三类典型的量级轻量级知识补充2B-10B token适合领域词汇特殊、但知识结构不算太深的场景。比如某个制造企业的标准化文档库目的只是让模型学会企业内部的缩写、型号、流程术语。这个量级通常1-3天就能训完单卡A100或者8卡4090成本可控见效明显。中量级知识注入10B-50B token适合法律、金融、医疗这类需要较深专业知识的场景。我自己的经验是30B左右高质量的领域语料配合80/20的混合比对7B-14B模型的知识注入效果已经相当可观。重量级专业训练50B token以上适合对一个垂直领域做全面深入覆盖比如从头打造一个专业领域的底座模型。这个量级需要较大的算力投入建议至少4卡及以上的A100/H800集群训练周期在两周以上。说到案例还是那个金融团队。他们的A股公告和研报语料经过清洗后约28B token加上通用语料混合对Qwen2.5-7B训了大概3个epoch用8卡A100大约跑了一周。训练完成后在内部构建的金融问答评估集上专业问题准确率从基座模型的58%提升到了84%而通用能力下降幅度控制在MMLU下降2个百分点以内。这个结果虽然不及那些动辄高质量调参的实验室数据亮眼但在企业资源约束下已经是相当可观的收益了。4. 训练配置与超参数从7B到70B的推荐方案数据准备好了接下来就是实际训练环节。这一节我不会给你一套放之四海皆准的参数因为不同模型、不同显存、不同框架最优配置差别很大。但我会给你一个经过验证的起点以及每个关键参数背后的逻辑你拿到参数后能自己判断怎么调。4.1 训练框架选型不是只有一条路CPT的工程实现常用的框架有这么几类我按适用场景分开说TorchtitanMeta开源的原生PyTorch训练框架对Llama系列支持极好纯PyTorch实现没有过多封装适合团队里有熟悉PyTorch的工程师自己做定制。它原生支持张量并行、上下文并行、FSDP2对长序列训练的显存优化做得相当好。如果你的目标是训练7B-70B模型Torchtitan是一个很值得考虑的选择。Megatron-LMNVIDIA出品的工业级训练框架功能最全3D并行数据并行张量并行流水线并行的鼻祖稳定性业界公认。缺点是对工程师的要求较高配置较为复杂如果你不需要训练超大规模模型杀鸡用牛刀反而拖慢进度。LLaMA-Factory这个是国内社区很流行的微调框架界面友好、支持LoRA/QLoRA/全参数微调特别适合小团队快速验证。特别注意LLaMA-Factory对SFT的支持非常成熟但对CPT的支持不如前面两个框架那么精细。不过话又说回来如果你只是想对7B-13B模型做一轮轻量级CPT用LLaMA-Factory的全参数微调跑起来也不会有大问题。OpenRLHF / DeepSpeed-Chat这俩更多是偏向RLHF的框架但如果你的技术栈已经深度依赖DeepSpeed直接在DeepSpeed的基础上改数据流做CPT也是完全可以的。我个人建议如果你预算有限、团队没有专门的训练工程师从LLaMA-Factory或者Torchtitan起步是效率最高的选择。如果模型规模超过30B直接上Megatron-LM或者至少用Torchtitan配合成熟的并行策略。下面给一个用Torchtitan做CPT的启动命令示例方便你先跑通流程具体参数后面细说# 以Llama-3.1-8B为例8卡A100 80G torchtitan --model Llama-3.1-8B \ --training.batch_size 8 \ --training.gradient_accumulation_steps 16 \ --training.max_steps 5000 \ --training.warmup_steps 200 \ --training.lr 2e-5 \ --training.weight_decay 0.01 \ --training.checkpoint_interval 500 \ --training.data_path /path/to/your/domain_data.jsonl \ --training.data_weight_ratio 0.8:0.2这里我要多说一句为什么要用全参数训练而不是LoRA。LoRA在SFT阶段表现出色参数效率很高一台消费级显卡就能微调大模型。但CPT的场景下我强烈建议至少用全参数训练或者部分层全参数训练。原因是CPT要修改的是模型的知识基底这需要大规模调整内部注意力头和FFN层的参数分布而LoRA的低秩假设在这里并不成立——领域知识的注入往往需要跨越大量参数维度的协同调整不是低秩矩阵能轻松逼近的。我做过对比实验同样30B token的领域语料全参数训练比秩为64的LoRA在领域评估集上高出将近10个百分点。虽然全参数训练的显存需求更高但这笔账算下来非常划算。4.2 关键超参的推荐基准与调整逻辑这里给你一个我实测下来比较稳的起点配置适用于7B-14B模型8卡或更多A100/H100超参数推荐值调整逻辑学习率1e-5 到 3e-5低于1e-5收敛太慢高于5e-5容易训崩或对遗忘加速Warmup步数总步数的1%-3%让模型逐步适应新数据分布避免一开始就大步长冲Batch Sizetoken数累计至少4M token/step小batch容易让训练不稳定CPT比SFT更依赖大batch序列长度4096-8192行业长文本多短序列会截断上下文关联权重衰减0.01常规值基本不用动梯度裁剪1.0防止个别难样本导致梯度爆炸Epoch数2-3数据量充足时1个epoch也够不要贪多关于学习率我要展开说两句。CPT的学习率通常比SFT要大一个数量级左右——SFT常用1e-6到2e-5因为指令数据量小、容易过拟合学习率必须压低。CPT面对的是几十亿token的大规模语料相当于做第二轮预训练学习率可以放开到1e-5甚至3e-5。但要注意这个值和模型参数规模是负相关的70B模型的学习率要降到5e-6到1e-5之间否则容易不稳定。关于Batch Size我经常看到团队在SFT的习惯下把batch size设得很小比如8条4k长度的样本这只相当于32k token。CPT里这个量级太低了训练会非常不稳定。行业共识是累计batch至少到4M token左右也就是512条8192长度的样本或者1024条4096长度的样本。如果你的显存不够就要靠梯度累积来凑。序列长度的选择同样重要。领域语料经常是长文档比如一份招股书动辄几百页一份裁判文书几万字。如果序列长度只有2048模型最多只能看到两三千token的上下文它学到的领域知识就只是片段的词汇搭配学不到长程的论述结构。所以在显存允许的情况下尽量把序列长度拉到4096以上。Torchtitan对长序列的显存优化做得不错这也是我推荐它的原因之一。4.3 输出层和损失函数有一个容易忽略的细节CPT训练中有一个细节很容易被忽略损失函数在输出层要不要用loss mask标准预训练的做法是对所有token计算交叉熵损失。但在CPT场景里领域语料中往往存在大量通用但重复的内容比如法律文书里的特此通知此致附件清单这类套话如果这些词的loss权重和核心条款一样模型会花费大量学习额度去记忆这些低信息量的套话。我推荐在支持自定义loss mask的框架中用基于词频的loss降权或者基于规则的高频套话降权把语料中出现频率异常高、但信息量低的片段权重降低。这个操作能让模型把学习资源集中在真正承载领域知识的内容上实测能明显加速收敛并小幅提升评估集表现。当然如果你的语料清洗已经把这些套话去掉得差不多了这一步可以省略。4.4 显存优化与训练稳定性监控写到这里我默认你已经能把训练跑起来了。但跑起来和稳定地跑完之间还隔着几个坑。显存方面的第一原则是能做全参数训练就不要用LoRA但全参数训练要配合正确的并行和激活重计算策略。Torchtitan里的FSDP2会默认做参数的显存切分如果你用的是8卡A1007B模型的全参数训练是很轻松的。更大的模型比如70B建议开激活重计算来换显存也可以考虑混合精度训练BF16是标配不要用FP16因为FP16在训练大模型时容易出现精度溢出问题。训练稳定性的监控指标我建议盯这几个Loss曲线正常的CPT loss应该是平滑下降的。如果出现陡降再反弹大概率是学习率过高或者数据里有大片重复文本如果loss长时间不降要考虑是不是learning rate太小或者数据质量出了问题比如噪音太多模型在拟合噪音。Gradient Norm这个指标反应了训练的力度。理想状态是梯度范数保持在1到10之间波动。如果突然飙升到50以上说明遇到了难样本或数据异常需要检查这个batch里有什么。Perplexity on Held-out Domain Data这个指标比loss更直观。在领域语料里留出1%作为验证集不停火地测PPL看它是不是稳步下降。如果PPL下降但生成效果没变好大概率是评估集和你语料的风格差异大如果PPL降到一定程度开始反弹那就是过拟合了。这里还要提一个经常被人忽视的问题长训练任务的断点续训。训练三五天甚至两周中途任何一个环节断了比如掉卡、OOM、机房断电如果没做checkpoint前面的算力就全浪费了。所以checkpoint的保存间隔一定要设好。Torchtitan里checkpoint只有模型参数和优化器状态占用空间不大500步存一次完全可行。另外建议每1000步额外存一个中间版本方便后面做模型合并或回溯——因为CPT不同阶段产出的模型在领域和通用能力上的侧重点是有差异的最后做模型选择时这些中间checkpoint非常有用。5. 评估体系你的领域知识到底涨了多少训练跑完模型文件拿到手里接下来就是最见真章的部分——评估。很多团队在CPT完成后的第一反应是跑几个Prompt看看效果这当然没错但远远不够。模型在几个例子上的表现说服力有限你需要一个系统化的评估体系。5.1 领域知识评估三层递进的测试方法我把领域能力的评估分成三层从浅到深第一层领域困惑度PPL评估。从语料里留出模型没见过的1%领域文本计算模型在这些文本上的PPL。PPL下降说明模型对领域文本的语感确实变好了。这个指标虽然不能完全代表生成质量但它对关注知识注入效果非常灵敏而且只需要计算loss成本极低。注意评估的文本一定不能和训练文本有重叠否则数据泄漏会让PPL虚低。第二层领域测试集问答。准备一批代表你真实任务的问题格式可以是问题-标准答案的单选题、多选题、判断题或简答题。我建议至少准备200-500条覆盖业务里的高频场景。跑这个评估集时用相同的Prompt模板、相同的解码参数对比基座模型和CPT模型的准确率。这个指标最直观地反映了CPT能不能解决我的业务问题。第三层真实业务场景的端到端案例评估。选几个真实的、复杂的、能代表你业务水平的任务让模型完整输出结果让领域专家打分。这个评估最贴近实际成本也最高但它的价值在于能发现前面两层评估看不出来的问题比如模型输出里出现了事实性幻觉或者对专业细节的表述不严谨。5.2 通用能力回退测试别让模型变成一个偏科生CPT最大的副作用就是灾难性遗忘所以通用能力的回退测试绝对不能少。我常用的通用评估集包括MMLU多任务语言理解、C-Eval中文综合评估、GSM8K数学推理、HumanEval代码生成具体选哪些看你业务对通用能力的需求——如果你的应用是纯文本分析工具代码能力回退一些问题不大如果你的应用还要配合代码解释器使用那HumanEval就不能放。关键在于设定回退红线。我一般和团队定一条规矩通用能力的下降幅度以MMLU为例不能超过3个百分点。如果超过了就回退到上一个checkpoint把混合比里的领域语料比例调低一些重新训练。这个红线值没有统一标准它取决于你的业务能容忍多大程度的通用能力损失但提前定好比训练完再纠结要有章法得多。5.3 一个我常用的评估矩阵模板综合下来我建议你用一个表格来管理评估结果像下面这样评估维度评估集基座模型得分CPT模型得分变化是否达到预期领域知识领域问答200条58%84%26%是领域语感领域语料PPL24.115.8-8.3是通用知识MMLU61.2%59.8%-1.4%是中文综合C-Eval64.5%62.1%-2.4%是数学推理GSM8K52.3%49.6%-2.7%可接受这个表格最大的价值并不是那一堆数字本身而是它把训练到底值不值变成了一个可以量化复盘的问题。每次训练完你都能明确地看到知识涨了多少、通用能力退了多少是否在容忍范围内下一次该往哪个方向调。6. CPT实战中的几个高频坑与排查链路如果说前面几节讲的是怎么做对这一节我必须花些篇幅讲怎么避开做错。以下这几个坑全是我自己或者身边团队在真实项目里踩过的有些坑损失的不只是算力还有两周以上的时间和团队信心。6.1 坑一训练Loss下降但生成效果变差这是最迷惑人的一个现象。Loss明明在稳步下降PPL也降了但拿真实的Prompt去测试模型输出的专业度反而下降了甚至开始胡言乱语。我排查这个问题的顺序是第一步检查数据清洗是否引入了指向性偏差。比如你的领域语料里有大量表格和数字清洗时如果不做特殊处理模型会学到输出里频繁带数字的倾向反而破坏了原本流畅的表达。这种情况loss和PPL都会降低但生成质量就是差——因为PPL衡量的是预测下一个token的准确度它并不能代表语义连贯性。第二步检查序列长度是否切碎了长文档。如果你的训练框架在预处理时把一份几万字的文档切成多个长度为4096的片段且片段之间完全没有重叠或连续性模型看到的上下文其实是断裂的学到的知识就是碎片。这种情况在评估集上做短文本测试可能看不出问题但一旦生成长文逻辑混乱就暴露了。解决方法是采用带overlap的滑动窗口切片让相邻片段有几百token的重叠。第三步检查数据配比中的通用语料是否和领域语料存在风格冲突。如果通用语料里有大量对话体、口语化文本模型可能会被带偏行业规范性表述变少。遇到这种问题把通用语料换成更多新闻稿、教科书、学术论文风格的文本就能有效缓解。6.2 坑二灾难性遗忘来得比想象中更猛很多团队在CPT初期的通用能力回退测试结果不理想一查发现通用能力掉了七八个点。这个问题的根源往往并不是混合比不合理而是学习率开太高。和我前面说的逻辑对应CPT的学习率虽然比SFT大但也只是在1e-5到3e-5这个档位。如果你按照SFT的惯性开到5e-5以上模型会在新数据上迈的步子太大把预训练阶段已经学好的通用知识快速覆盖掉。这就像一个成年人突然去学一门新学科如果老师推得太猛他可能连原来熟练的数学能力都会生疏。修复方案很简单调低学习率回到1e-5附近重新训练同时把通用语料占比提高5-10个百分点给通用能力保温。如果调低学习率后还是遗忘明显那就回到更早的checkpoint降低学习率并增加通用语料比例重新跑。6.3 坑三领域语料里混了低质量甚至错误的数据这个坑隐藏得很深通常要等模型上线跑了一段时间后才会暴露。比如训练语料里有大量未经审核的外部来源文本模型学到了一些错误观点在用户提问时一本正经地输出错误信息。这个问题的严重程度不亚于隐私泄漏因为它直接关系到企业专业形象。排查和预防的方法一是在清洗阶段就做质量分级把公开爬取的低可信度文本标记为低质量训练时给予更低的采样权重二是在评估阶段专门设计事实性追问测试让模型复述语料里的具体细节看是否存在明显的知识错乱。如果发现模型产出了明显违背常识或行业共识的内容就需要追溯是语料里本身就有这种表述还是训练过程引入了幻觉。6.4 坑四多轮增量更新导致旧知识崩溃企业在落地CPT后很少只训一轮就完事。业务更新了新的领域语料产生了你需要对模型做增量CPT。这时候如果不做保护新训练会优先覆盖新语料对应的知识而之前学到的一些旧知识会被快速覆盖掉。我的建议是对已有领域模型做增量更新时采用新旧混合的策略——新语料占比控制在40%-50%旧的高质量语料按一定比例混入50%-60%并且学习率要比第一次CPT更低降低30%-50%。这样既能让模型吸收最新的知识又不会把上一轮沉淀的成果冲掉。另一个可选的做法是用LoRA做增量更新来打补丁虽然前面我说CPT不适合用LoRA但增量更新这种小规模的修正场景LoRA有其用武之地——风险可控、成本低失败了大不了换一个适配器不影响基底模型。6.5 坑五训练集与测试集数据泄漏这是我必须专门拿出来警告的坑因为它的隐蔽性特别强。如果你的领域评估集是从同一个语料库里抽样出来的而你之前的清洗流程去重不够彻底评估集里很可能有文本和训练集里的文本高度相似甚至就是同一篇文章的转载版。这种情况下评估集分数会虚高到离谱给你模型已经学得很好的错觉但换到真实业务数据上立刻打回原形。预防方案是保留专用的、永不参与训练的评估集。这个评估集最好来自独立的来源比如人工整理的问答对、或者从不同于训练语料的渠道获取的样本文本。除非是几十亿token的大语料否则我建议在数据准备阶段就划出至少1%作为hold-out评估集并且明确标记绝对不许进入训练管道。7. 从一个7B模型的实际验收说起最后再说一个和训练本身关系不大、但每个项目都躲不开的话题模型验收和上线。我有一次做验收汇报拿着训练完的7B模型给客户演示在准备好的案例上模型的输出几乎完美。然后客户随口换了一个他们刚刚接触到的真实投资条款让模型分析——结果模型顺着对赌协议的关键词就开始套模板把股权回购和业绩补偿的概念混在一起输出了一段看上去格式专业、但实质错误的分析。那一刻我的感受是CPT可以把模型的领域知识上限提高很多但它并没有解决模型是不是真的理解了内容的问题。这件事给我留下一个深刻的教训CPT训练完之后一定要用一套边界测试集做验收。边界测试集不要用和训练数据同分布的文本而是故意使用那些边缘案例——比如条款里有一些罕见的表述方式或者综合了多个知识点的复杂问题。把这类问题喂给模型观察它是不是能稳定输出合理答案。如果边界测试的通过率有明显提升说明模型是真的在理解领域知识如果提升不大说明它只是学会了表面话术的训练模仿你需要重新检查数据配比和训练策略。另一个上线前的关键环节是和业务专家一起过一遍模型的输出规范。即便CPT把领域知识注入了模型模型仍然可能出现表述不够规范、逻辑不够严谨、甚至对专业问题不加以确认就直接下结论的情况。这部分需要结合SFT或者系统的Prompt约束来对齐模型的输出风格。把CPT想象成专业人士的深造SFT想象成入职培训——两个环节是叠加关系不是替代关系。从我个人的项目经验来看把CPT做扎实之后领域模型的效果普遍能拉开可感知的差距。它不是那种训练了一个小时就感觉变聪明了的即时反馈而是用着用着发现模型不再像一个聪明但外行的实习生而是真的像一个读过大量领域材料的同行。这份改进是稳定的、底层的不像RAG那样需要每时每刻依赖外部检索也不像SFT那样容易感觉到模板感。如果你正准备把通用大模型往行业模型方向推进一步我希望这篇实战指南能帮你少走一些弯路。训练参数可以照抄数据清洗的流程可以复用评估矩阵可以直接搭建但最终那份最宝贵的经验还是要靠你自己拿着一批真实的业务数据跑完一个完整的训练周期才能体会到。别怕踩坑CPT本来就是一个需要迭代几次才能找到手感的过程——第一次训练就当交学费把评估体系搭好后面就会越来越顺。
