拓冰建站拓冰建站
首页 / 资讯中心 / 正文

继续预训练CPT:行业大模型落地的关键工程实践

这两年越来越多企业开始意识到一个扎心的事实通用大模型很强但直接拿到自己行业里用总觉得“差点意思”。金融领域它不懂监管口径医疗领域它分不清临床指南和科普文章制造领域更别提——设备维修手册它读得懂但遇上你们厂独有的工艺参数就开始胡说。网上各种“行业大模型”的案例满天飞真到自己上手做才发现卡在最前面的一步怎么把通用底座变成一个懂行的行业模型。这里要引入一个正在被大量实战团队验证的技术路线——Continued Pre-Training也就是继续预训练行业里常简称为CPT。它和大多数人熟悉的SFT监督微调是两码事。SFT是教模型“怎么说”CPT是教模型“懂什么”。企业如果想要一个真正能在业务里扛活的行业模型光靠微调是不够的必须在微调之前先做一次扎实的行业知识注入。这篇文章我就围绕CPT的完整落地路径来展开从数据工程、训练策略、评估方法到踩坑实录尽量把我自己实操中验证过的方案、参数和思路一次说透。这篇文章适合谁不是研究大模型理论的研究员而是企业里负责AI落地的算法工程师、技术负责人以及想搞清楚“行业模型到底怎么搞”的产品经理。内容会尽量少讲空洞的概念多给可以直接参考的配置和流程。1. 先搞清楚为什么企业需要一个“继续预训练”流程1.1 从通用模型到行业模型的三条路企业把通用大模型变成行业专属模型目前成熟的路子大致有三条第一条是Prompt Engineering加检索增强RAG第二条是指令微调SFT第三条就是本文的主角继续预训练CPT。这三条路不冲突但解决的问题完全不同。RAG解决的其实是“信息实时性和外部知识不足”的问题。模型不懂你内部的知识库那就把知识库切块、向量化、检索出来塞进上下文里。这么做的好处是快、便宜、不用动模型权重缺点是上下文窗口有限塞不下大规模的知识体系而且模型对检索到的内容理解始终是表面的。SFT解决的是“行为对齐”的问题。你想让模型学会按固定的格式输出、学会拒绝无关问题、学会模仿专家回答风格这些都得靠SFT。但SFT的本质是监督学习它只能改变模型输出的概率分布很难真正把一个新的知识体系“写进”模型参数里。你在SFT数据里放一千条设备维修问答模型确实会模仿回答结构但一旦问题换个问法、换个设备型号它就露馅了。CPT解决的核心问题恰恰是前面两条路解决不了的让模型通过大量领域语料的自监督学习把行业知识、术语体系、逻辑关系内化到参数里。只有参数里“真的有”这些知识后续的SFT和RAG才有意义。这也是为什么我把CPT称为“行业模型的地基工程”。1.2 CPT和SFT到底差在哪知识注入与行为对齐我见过不少团队把CPT和SFT混为一谈导致整个训练流程从根上就歪了。CPT和SFT虽然都是对模型做二次训练但它们在训练目标、数据格式、效果边界上完全是两码事。CPT的训练目标是语言建模Language Modeling本质上和基座模型预训练的目标一致——给定前文预测下一个Token。输入是纯文本没有指令前缀也没有标准答案。模型看一千万篇行业文档学会的是这些文档中Token出现的统计规律包括术语搭配、句式结构、概念间的共现关系。当模型学得够多“钻井平台”这种词就不再只是一个词它会在参数里形成和“钻机部件”“井控”“泥浆体系”等一系列概念的高维关联。SFT的训练目标是条件生成输入是指令或问题输出是期望的标准回答。它更像是在给模型“做规矩”遇到这个格式的输入你应该这么答。SFT数据量通常几万到几十万条CPT的数据量动辄上亿Token甚至几十亿Token量级完全不同。打个比方CPT相当于让一个毕业生泡在行业图书馆里读三年书SFT相当于入职培训教他标准化的工作流程。前者建立知识体系后者建立行为规范。一个行业模型要真正好用两步都少不了而且顺序不能反。1.3 什么情况下才真的需要CPT不是所有企业做行业模型都需要CPT。我在跟不少团队交流时发现很多人还没评估清楚就急着训练结果数据量不够、效果不明显白白浪费GPU资源。需要CPT的信号很明确第一你的行业知识体系足够庞大且独特用RAG塞几个片段解决不了。比如法律领域的裁判文书、医疗领域的病历和临床路径、制造领域的工艺文档和维修手册这类知识本身强调深度的上下文依赖不是“检索一段就能懂”的。第二你发现同样的Prompt通用模型在术语表达上总是外行。比如让它写一份项目结项报告它认识每个词但你一看就知道不是这个行业里人写的。第三你希望后续做SFT时模型能更快学到新的业务问答基础扎实了SFT的样本效率才会高。不需要CPT的场景也很明显如果你的业务本质上是“从一堆文档里找答案”那RAG就够如果你的目标是让模型学会你的客服话术、审批流程那直接SFT可能更直接。CPT费时费力只有在“知识密度”是核心瓶颈的时候才值得上。2. 前置准备数据工程决定了CPT的80%效果2.1 领域语料从哪来、怎么攒做CPT最怕的不是训练不稳定而是语料质量差还浑然不觉。训练代码跑的再漂亮数据不行一切白搭。所以数据工程我永远放在第一位讲。领域语料的来源我按优先级和实用程度排个序第一个高价值来源是企业的业务系统和内部知识库。设备运行日志、维修工单、质检报告、工艺参数记录、历史项目文档、专家评审意见这些都是外面买不到的高质量语料。特别是那些带结构化字段的文本比如工单里的故障描述和解决措施天然就是“问题-答案”的对模型学了之后对业务理解极深。拿到这类数据要做的第一件事是脱敏去除客户隐私、内部账号、敏感人员信息这一步千万别省。第二个来源是垂直行业的公开数据。行业协会发布的报告、监管机构的法规条文、行业标准规范、专业期刊论文、龙头企业的公开专利文案。做法律领域的可以把裁判文书网的历史文书作为主力语料做医疗的可以收集临床指南和医学教材做制造业的可以抓取设备说明书和标准库。这类数据的优点是有权威性缺点是数量可能不够而且格式杂乱需要大量清洗。第三个来源是领域社区和高价值网页。比如专业论坛的深度讨论帖、知乎上的行业高赞回答、行业垂直媒体的深度报道。这些内容往往是“有经验的人用大白话把专业知识讲清楚”对模型理解行业非常有用。抓取这类数据要注意版权一般建议作为辅助语料占比控制在两成以内。数据量级上我建议以“有效Token数”为准而不是文档数。一个细分行业目标比如10亿到30亿Token基本能让一个7B模型在行业知识上有明显变化想做更扎实的底座50亿Token以上更好。但这不是硬指标数据质量高、覆盖面广10亿Token也能见到效果数据质量差100亿Token也白搭。2.2 清洗与去重流水线数据进了硬盘不代表能用必须走一套完整的清洗流水线。我这边总结了一套比较实用的流程按顺序过一遍能极大减少训练时“模型学进去一堆垃圾”的概率。第一步是语言与编码过滤。用fastText的语种识别模型过滤掉非目标语言删除乱码、全角半角混乱的文本。这一步看着简单实际上很关键行业语料里经常混着扫描版OCR的残留、PDF抽取的乱码不滤掉这些模型学到的第一个坏习惯就是生成乱码。第二步是规则去噪。去掉HTML标签、markdown标记、URL、重复标点、无意义的表格碎片。这里特别要注意行业文本里的表格和公式纯文本化之后往往惨不忍睹。我的经验是如果表格框架变成一行行的碎片不如直接丢弃保留上下文文字描述就够。第三步是质量打分。我常用的方法是先用一个小的语言模型算文本困惑度Perplexity得分过高的说明语无伦次直接排除。还有一种做法是用现成的分类模型过滤低质内容比如判断文本是不是广告、是不是机器生成的无意义堆积。这一步可以理解为“人工抽样检查模型批量打分”的组合先把规则定为过滤20%的尾部内容运行一轮再看。第四步是去重。行业语料有一个隐蔽的坑联网抓取时大量内容互相转载表面上收集了1万篇文档实际上去重后可能只剩2000篇。不去重就训练模型会严重过拟合这些重复内容表现为生成时不断复读某些段落而且数据一重复模型对这些Text的反向传播次数变多是隐式加权行业分布就被扭曲了。去重首选MinHash或SimHash算法在文档级别做哈希去重然后再对段落做一次更细粒度的重复检测。我一般习惯用datasketch库处理千万级文档很成熟。2.3 数据配比和样本权重怎么设清洗完之后怎么把不同来源的数据混在一起是一个被很多人忽略但影响极大的决策。把行业数据一股脑全塞进去训练效果不一定好因为行业语料和通用语料混合配比不合理模型会“偏科”。我推荐的基准配比思路是“行业数据为主、通用数据保底、任务数据挑大梁”的结构领域主数据业务文档、行业报告、专业文章占比30%~50%领域辅助数据法规标准、术语词典、社区问答占比15%~25%通用高质量数据书籍、百科、通用网页占比20%~30%领域任务导向数据从SFT数据里筛选出的纯文本问答、思维链占比10%~20%为什么必须混入通用数据因为纯行业数据训练会让模型产生严重的灾难性遗忘通用能力断崖式下滑。模型可能变得只会写行业报告连“帮我写一封邮件”这种基础任务都做不好。混入20%~30%的通用数据相当于给模型的通用能力加了一层“防遗忘缓冲垫”行业能力照样提升通用能力掉得慢很多。这个比例不是固定的如果行业领域和通用领域差别特别大比如法律条文和日常对话的风格差异极大通用数据的比例还要再提高一些。样本权重也很简单在Dataset里对每条样本做多次采样或降低采样概率。对高质量专家撰写的文档可以设置采2~3次对质量一般的帖子、问答采1次不再重复。注意不要对低质数据配0权重完全扔掉也行但保留一点点可以增加数据形态的多样性。3. 训练方案设计参数、策略和踩坑记录3.1 全量CPT vs 轻量CPT两种路线怎么选CPT的训练方式表面上都是“用数据继续跑一遍预训练”但实际落地时有两种主流路线全量继续预训练和轻量继续预训练。全量CPT是对模型全部参数做更新相当于把基座模型拉到行业语料里再彻底“洗一遍”。优点是知识注入彻底行业能力上限高缺点是对算力要求高7B模型至少要4~8张A100才能舒舒服服地训练数据量最好也充足。如果团队的GPU资源有限全量CPT跑个几万步可能看不到效果反而浪费资源。另一个缺点是灾难性遗忘风险更大一旦通用数据配比没控好模型的通用能力会明显退化。轻量CPT使用参数高效微调技术比如LoRA、QLoRA、Adapter等把预训练变成在冻结绝大部分参数的基础上训练一小部分额外参数。优点是对显存和算力要求低单张消费级显卡也能跑训练速度快迭代方便。但缺点也很明显知识注入的深度有限。LoRA这种低秩近似方案适合在有限数据量下调整模型的输出风格但对“大规模知识系统”的内化能力不如全量更新。毕竟行业的术语和逻辑关系往往分散在大量参数维度上低秩更新很难完全覆盖。我的选择建议是如果数据量在10亿Token以上、GPU至少4卡起步走全量CPT如果数据量只有几亿Token、GPU资源有限先用LoRA做一轮知识注入实验通过评估看效果是否满足需求不足再升级到全量CPT。大多数中小团队我建议从LoRA开始先验证数据有效性再做重投入。3.2 训练超参参考配置CPT的超参和SFT有很大区别如果直接沿用微调那套参数大概率会出问题。这里给一份经过实践验证的基准配置以7B模型为例。学习率是CPT中最敏感的超参。基座模型已经收敛过一次学习率太大会直接破坏已有的参数结构太小又学不进新知识。我的经验是全量CPT的峰值学习率一般在1e-5到5e-5之间LoRA可以稍高一些到1e-4到2e-4。注意开Warmup步数占整体训练步数的1%到3%即可。训练后期一定加上学习率衰减我倾向用WSD或者Cos调度比线性衰减更稳定。批次大小方面CPT偏爱大批次。原因是大批次能够提供更稳定的梯度估计减少训练震荡也更符合“学知识”的场景。7B模型常用Global Batch Size在128~512个序列每个序列长度2048或4096。算一下128个序列乘以2048Token一个Step就是26万Token左右。10亿Token的数据量大概3800多个Step就能跑完一个Epoch。混合精度方面强烈建议用BF16而不是FP16。FP16在梯度回传时容易出现数值溢出BF16的动态范围更大训练损失曲线会更平滑。显存够的话也可以用FP8或者混合精度加梯度检查点但优先保训练稳定性。下面给一份参考配置用DeepSpeed框架举例是我自己线上常用的一套train_batch_size: 256 train_micro_batch_size_per_gpu: 4 gradient_accumulation_steps: 16 bf16: enabled: true optimizer: type: AdamW params: lr: 3e-5 betas: [0.9, 0.999] eps: 1e-8 weight_decay: 0.01 scheduler: type: WarmupDecay params: total_num_steps: 5000 warmup_min_lr: 0 warmup_max_lr: 3e-5 warmup_num_steps: 100这份配置跑7B模型8张A100 80G训练速度大概每步几秒到十几秒一个10亿Token的语料集一两天内可以完成一轮训练。如果想要更稳可以把学习率降到2e-5同时适当增加训练步数。3.3 数据重复训练还是只跑一遍关于Epoch的纠结很多第一次做CPT的团队会问这批行业数据要不要多跑几个Epoch我的回答是如果数据量足够大超过10亿Token跑1个Epoch就够如果数据量只有1~2亿Token靠重复跑2~3个Epoch来增强知识注入是可行的但一定要监控过拟合风险。判断过拟合最简单的方法是看验证集困惑度。训练前留出1%的数据不参与训练作为验证集如果训练loss持续下降但验证loss开始反弹基本可以断定模型开始背诵训练数据了。此时生成测试样本模型会频繁复读原文片段而不是用自己的话组织答案那就是过拟合的典型症状。为了防止过拟合可以在训练中期就切换到“领域数据通用数据混合采样”的模式并适当扩大通用数据的比例。还有一种退火策略训练的最后5%~10%的步数把学习率从峰值逐渐降到接近0同时把领域数据的比例提高这能让模型在退出训练前集中学习重点领域知识这一技巧我实测下来对行业术语的掌握有明显帮助值得专门说明一下。4. 评估体系怎么判断行业化训练有没有效果4.1 用Perplexity判断知识融入训练结束之后你不能只看训练loss降了就宣布成功——那只能说明数据被拟合了不代表模型真正“掌握”了行业知识。评估CPT效果我一般分三层来做第一层就是Perplexity。具体做法是准备一批评测用的领域语料训练过程和测试过程都不使用这些数据。然后计算模型在这批语料上的平均困惑度和基座模型对比。困惑度明显下降比如下降了1~2个点说明模型在Token概率预测上确实更“懂”这个领域了。反之如果困惑度几乎没有变化可能说明数据量太小或学习率太低知识没注入进去。要注意的是PPL下降是“必要非充分条件”。模型可能学会生成通顺的行业文本但并不意味着它具备逻辑推理能力。所以PPL只能作为快速体检指标不能作为唯一的验收标准。我见过有些团队只盯着PPL看PPL降得很漂亮一上线问答就露馅就是这个原因。4.2 构建领域能力评测集第二层评估是构建一个领域能力评测集针对你自己业务的实际场景出题。这里最忌讳的是拿一个通用的开源benchmark直接套比如法律模型用MMLU来测根本没意义。我建议评测评测题分三类来设计。第一类是术语与概念理解题。从行业词典里抽一批术语让模型给出定义或解释。比如做化工领域就问“简述加氢裂化工艺中催化剂失活的主要原因”。这类题主要检验模型是否认识了行业的基本词汇。第二类是业务知识推理题。找业务专家编写一批需要综合行业知识做推理的问题。比如做设备维护领域给一段设备运行参数让模型判断可能的故障原因和维修优先级。这类题没有标准答案建议由3位以上专家独立打分。第三类是生成质量题。给一个行业场景让模型写总结、生成报告、分析原因最后从专业性、准确性和逻辑性三个维度做人工评分。我习惯把模型生成的结果和基座模型生成的结果做A/B Test通常行业模型应该在专业性维度上有明显领先。评测集不需要很大100~200条高质量题目就能判断出模型在一个细分方向上是否达标。关键是题目要贴合真实业务而不是在网上随便凑。4.3 评估后还要做什么二次SFT的必要性很多团队做CPT时只规划了“预训练”这一步但这里我必须强调CPT完成之后不要直接就丢到业务里用。CPT得到的模型擅长续写行业文本但不一定擅长回答用户的问题——因为它的训练目标里根本没有“指令-回答”这一课。你问它问题它可能继续在那儿“写文章”。所以正规流程里CPT之后必须要接一轮SFT。用几千到几万条高质量的行业问答数据把CPT阶段注入的知识“引导”到问答和任务执行范式里。这算是完整的行业模型生产流水线CPT注入知识SFT对齐行为再用RLHF或DPO优化偏好。如果预算只够做一步那你得想清楚自己的业务是重知识还是重交互否则容易做出来一个“满腹经纶但不会说话”的模型。做完SFT之后再回到4.1和4.2的评测里再反测一遍看行业问答的准确率是否有显著提升。如果提升不明显复盘数据时重点看行业语料覆盖了哪些关键知识点、SFT的问答对是否覆盖了这些知识点两者对齐不上知识就发挥不出来。5. 常见问题与排查技巧实录5.1 训练Loss不降或先降后升Loss不降我见过的主要原因有三个学习率太低、数据质量太差、训练数据长度和模型的最大序列长度不匹配。先看学习率7B全量CPT至少用1e-5起步如果用了5e-6还可能算“温吞水”再看数据随机抽200条拿去人工看如果一半都是乱码或重复文本那问题基本出在清洗流水线序列长度方面如果语料大量超过模型的max length被截断模型只能学到片段的统计信息知识很难完整注入建议把序列长度设到2048以上并统计截断比例。Loss先降后升大概率是过拟合。这时优先降低训练Epoch数或者提高验证集监控频率。另外一个容易被忽略的原因是验证集的分布和训练集差异过大——比如训练集全是标准规范验证集全是社区口语化问答那loss反弹不一定是过拟合而是验证集太难了。做训练和验证数据划分时保证两边来源和格式尽量一致。5.2 模型产生了新的行业知识幻觉CPT之后模型对行业术语更自信了回答错误信息时也特别理直气壮这是非常头疼的情况。原因往往是训练数据里本身有错误内容或者数据覆盖面不够模型在缺失部分用临近概念拼接出了“合理但错误”的答案。排查思路是先做数据审查把训练语料里和错误答案相关的句子全部抽出来逐条检查是不是有来源不权威甚至本身就错的表述。行业语料尤其要注意时效性问题比如政策法规更新了老资料里的旧条文会让模型生成过时答案。对策是在训练数据里加时间戳和版本标记并且在数据清洗阶段过滤掉失效的规范文件。缓解幻觉的工程手段是把RAG接回来让模型在回答时优先检索权威知识库降低“自由发挥”的概率。5.3 通用能力下降灾难性遗忘的现实解法CPT最常被吐槽的问题就是训完行业能力提升了但模型的通用能力、代码能力、逻辑推理能力明显下降。这种现象我见得太多很多团队第一次训练后都吓一跳。解法分三步第一步是数据配比修正把通用数据比例提升到40%以上尤其是保留一批高质量百科、书籍、代码数据。第二步是引入“回放”策略训练过程中每隔一段步数就重新混入一批通用数据模拟人脑复习旧知识的过程。第三步是用EMR弹性记忆重构这类算法在损失函数里加一项约束防止模型在更新参数时大幅偏离原始模型。前两步最实用我建议一般团队优先尝试。还有一个小技巧是LoRA训练时可以尝试冻结embedding层和lm_head层只训练中间的transformer层这样可以显著减少灾难性遗忘。原因是在CPT中词向量矩阵和输出层容易受到训练数据分布的影响把这些关键层冻结住模型的“基础语言能力”就不容易被带偏。这个技巧不是万能的但对很多领域数据形态比较统一的项目实测效果不错。5.4 训练成本控制如何用最小算力跑通全流程CPT听起来很贵但我实际体验下来中小团队也有性价比很高的跑法。如果实在卡在算力不足先考虑用Qwen、Llama这类开源基座模型的小尺寸版本如7B配合QLoRA方式在24G显存的单卡上也能完成轻量CPT训练。虽然知识注入深度有限但快速验证数据有效性足够了。验证有效之后再考虑上更大规模的训练。租用云GPU按小时计费7B模型用8卡A100跑一轮10亿Token的数据成本大概在两三万左右相较自建机房要划算很多。算力预算确实有限的话可以考虑先用蒸馏方案把大模型对行业语料的响应浓缩到小模型上作为CPT的补充手段这些工程技巧可以在后续落地中灵活组合。写在最后一个关于流程顺序的提醒做行业模型这个事最大的误区就是上来就想训练结果绕了很多弯路。我个人在实际操作中最大的体会是CPT、SFT、RLHF/DPO绝不是互相替代的关系而是一条流水线上的三道工序。先想清楚业务要的是“知识密集型”还是“交互密集型”再决定把重心放在哪道工序上。如果你评估下来核心痛点确实是行业知识不足那CPT值得投入如果是交互能力、表达风格不对那直接做SFT和偏好优化效率更高。最后再分享一个小技巧CPT训练过程中务必把每个Step的loss、学习率、梯度范数都完整记录成曲线训练结束后用bert-score或text-quality指标在领域评测集上连续评估中间checkpoint。不要只留最终模型。很多时候最好的模型不是最后一个checkpoint而是某个中途loss已经收敛、还没开始过拟合的checkpoint。回滚到那个checkpoint往往比你花更多算力训完整个流程效果更好。这个回头路能帮你省下大量时间和算力成本。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门