ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大模型训练数据消融实验:去重强度、质量过滤与领域比例如何影响模型能力

大模型训练数据消融实验:去重强度、质量过滤与领域比例如何影响模型能力 干大模型训练这一行的人十个里有九个会告诉你“数据决定上限”。可真到自己配训练数据的时候基本是另一个画风网页、百科、代码、论文、对话脚本一股脑倒进桶里按什么比例混、要不要去重、过滤到什么程度很多人连自己都不知道当初是怎么拍下来的。这一期LLM Training Lab我专门把这三个最容易被“差不多得了”的变量拎出来做了一组老老实实的消融实验对象是训练数据的去重强度、质量过滤档位和领域比例。这期内容适合两类人一类是正在搭预训练或大规模型微调数据管线的工程师另一类是准备复现论文、却被各种“we mix 3:1:1”含糊描述搞到崩溃的研究员。看完你会知道消融实验不是把变量乱拆一通就算完而是要把每个档位定义清楚、把评估噪声压下去、把实验矩阵控制在算力能承受的范围内才能得出能真正迁移到自己场景里的结论。1. 为什么要专门给训练数据做消融实验1.1 数据配比不是调参是给模型画“能力版图”刚接触大模型的人容易有个错觉训练数据不就是把语料喂给模型吗多喂点高质量的不就行了。真跑起来就发现训练语料的质量和比例直接决定模型最终的能力分布。同样一个1B左右的代理模型你用纯网页语料训出来阅读理解还行数学和代码基本不能看你把代码和数学语料的比例提上去模型做HumanEval和GSM8K的能力立刻有肉眼可见的改善但常识问答可能掉点。这就引出了消融实验的核心价值我们要搞清楚在总token预算固定的前提下每个方向的提升究竟是“因为多加了这类数据”还是“因为少加了另一类数据”还是“因为去重让同样一批数据被看到更多次”。如果不做控制变量的对比最后你只会得到一个“模型好像变好了”的模糊结论等换一组评估集结论可能又站不住了。我自己刚开始做数据配比时踩过一个很典型的坑同时改了三四处管线设置训完模型发现代码能力大涨以为是代码语料比例提升的功劳后来逐步回查才发现真正起作用的是那次把精确去重换成了模糊去重代码样本的重复率下降了模型反而更容易学到结构化模式。1.2 消融实验到底在“消”什么消融实验ablation study的方法论并不复杂本质就是控制变量先确立一个可重复的基线配方然后每次只动一个变量观察最终模型在固定评估集上的表现差异。但数据消融比模型结构消融要恶心很多因为数据对模型的影响是高度非线性、延迟显示且充满噪声的。模型结构改一个算子loss曲线大概率能看出痕迹数据配比动一个百分点可能要在几十个下游任务上做统计检验才能确认不是随机波动。所以做数据消融前提是先把“观测系统”做扎实相同的数据预处理顺序、相同的token预算、相同的模型初始化、相同的学习率计划、相同的评估集以及多次重复实验。不然你消出来的“效应”很可能只是采样噪声。这个观点我会在后面第三部分展开这里先记住一个原则数据消融消的是“配方的边际贡献”而不是“最终指标的大小”。1.3 为什么只盯着去重、质量和比例这三个维度训练数据涉及的变量很多字符规范化、语言过滤、数据混合顺序、shuffle策略、epoch控制每一个都能影响模型。但站在绝大多数团队能复现的立场上最值得先做消融的是这三个去重强度决定样本多样性与数据重复暴露程度质量过滤决定语料信噪比和长尾覆盖领域比例决定能力分布与训练重心。三个变量之间还有明显的交互作用比如强去重之后数据规模缩小质量过滤的保留率也会变领域上采样意味着某些领域的数据会被重复看更多遍。消融实验如果只看单点而不看交互结论很容易偏。我在实验矩阵里采用了“基线 单因素扫描 少量两两交互组合”的设计而不是全因子网格因为全因子三维各取三档就是27组实验按1B模型和几十亿token的预算算大部分团队是顶不住的。我们实际操作时把总组数控制在了12组左右既覆盖了主要主效应又留了足够算力做重复实验。2. 三个实验变量的定义与可复现配置2.1 去重强度从精确去重到模糊去重的三个档位去重这个概念很多刚入门的人以为就是把完全一样的文本删掉。实际上预训练语料里的重复更多是“近似重复”比如同一条新闻转载了几百个版本换个标题、改个段落顺序或者插入几段广告尾巴。精确去重比如按文件哈希或URL去重能干掉完全相同的样本但对近似重复基本无能为力。所以我在这里把“去重强度”定义成三个可复现的档位弱去重仅做URL去重、精确哈希去重MD5或SHA1保留全部长尾近似重复文本中去重在弱去重的基础上用MinHash LSH做模糊去重Jaccard相似度阈值设为0.8对超过该相似度的文档簇只保留代表性样本强去重模糊去重阈值提高到0.7同时叠加n-gram重叠过滤对与已有语料存在高重叠的段落做二次清理。这里稍微解释一下MinHash阈值Jaccard相似度越高说明两个文档越重叠阈值0.8表示“相似度达到0.8的文档会被去重”阈值0.7则更激进会把更多原本差异化较大的文档也合并掉。实际上去重强度不是越高越好强去重很容易误伤有价值的长尾内容尤其是一些领域专有文档它们之间主题相似、措辞不同但阈值设太高就不分青红皂白地给你去掉了。去重强度的效果可以用两个指标度量去重后保留的token比例以及训练语料的全局n-gram重复率。保留比例越低说明语料里冗余越多n-gram重复率则是更精细的信号直接关系到模型会不会出现训练不充分和重复生成的问题。我在下面第三部分会给出具体数值示例。2.2 质量过滤分层管道和三个强度档位质量过滤是个听着简单、做起来门道很多的环节。单纯“去掉低质量文本”这句话没法落地你得先定义什么叫低质量。我把质量过滤管线的三个层次这样拆第一层是规则过滤语言识别比如用fastText做语言分类过滤掉非目标语言或语言置信度极低的文本、最小长度过滤、乱码/符号重复率过滤、URL和广告残留清理。这一层成本最低但能解决80%的明显垃圾。第二层是启发式打分用KenLM或GPT-2计算语料的perplexityPPL统计平均句长、标点密度、字符级重复率。强调一下PPL不是越低越好而是有一个合理区间过低的文本往往是模型见过的模板或重复套话过高的多半是乱码和机器噪音。第三层是模型分类与打分训练一个fastText质量分类器或者用LLM-as-a-judge的方式让大模型对随机抽样批次打质量分再用这个分数训练一个小型回归模型来批量打分。这是成本最高的一层但能把“低质量”从粗粒度变成连续可调。消融实验中我把质量过滤定义为三档轻过滤只跑规则层去掉明显垃圾中过滤再加上PPL区间和分类器剔除低质量长尾重过滤则在中过滤基础上把质量分数垫底的那部分文本也砍掉保留最干净的核心语料。这里要特别提醒重过滤并不总是最好。你在通用任务上会看到指标提升但模型处理非正式文本、口语、特定社区表达的能力会明显变弱后面实验部分就是这个趋势的真实记录。2.3 领域比例自然分布不是唯一答案领域比例的设置是三个变量里最有“策略感”的一个。自然分布按互联网原始语料占比分配是最省事的起点但几乎所有已发布的大模型报告都表明主动调整领域比例能更好对齐目标任务。常见的调整思路包括提高代码与数学数据占比提升推理能力保持甚至略微上采样百科、书籍等长文本保证知识密度控制对话和多轮内容的比例防止模型被某些风格带偏。如何把领域比例落到代码层面我习惯先给语料打领域标签训练一个轻量分类器预算不够时也可以用关键词规则然后按目标比例做带放回采样。这里有一个重要的概念当某个领域被上采样时这个领域的数据在训练中会被看到更多次等效epoch数变高。比如总token预算固定为5B某个领域原始语料只有500M token但你把它的比例从10%拉到20%那么该领域token会被重复看到两次相当于过了2个epoch。需要警惕的是过拟合。代码和数学确实应该多放但放太多模型会开始背诵训练集中的题目和函数而不是学会泛化。我在实验里设置了自然比例、均衡比例和“推理增强比例”三组用来观察能力迁移和过拟合的平衡点。3. 实验全流程与关键环节的实测记录3.1 固定实验装置代理模型与评估策略正式开跑之前先把实验装置说清楚。我们用了1B左右的decoder-only代理模型训练token预算固定为5B序列长度2048batch size约2M tokens总训练步数2560步。优化器用AdamW学习率峰值3e-4warmup 2000步cosine衰减到峰值的十分之一。数据混合在每次实验里都打乱后用同一个随机种子保证各实验组之间的数据顺序差异不是混入的变量。评估集用了一套固定的“闭卷”组合C-Eval中文综合能力、MMLU英文综合知识、GSM8K数学推理用chain-of-thought样例、HumanEval代码生成pass1、BBH大模型基准难题再加一个我们自己设计的重复率检测指标用于观察模型是否过度记忆训练数据。每个实验组用固定初始化权重训练两次取平均值作为报告值。这是压噪声的关键一步——我后面会总结单跑一次的数据配比实验波动经常大到能吞掉真实差异。3.2 去重单因素扫描我看到的收益曲线固定质量过滤为中档、领域比例按自然分布我分别用弱、中、强三个去重档位跑了一轮结果非常有代表性。弱去重跑完语料保留了约98%的token但n-gram重复率高得吓人模型在生成时明显出现重复短语和套话。中去重把语料压缩到85%左右同时把最高频的1000个5-gram重复率降了将近一半各个下游指标平均回升了1到3个百分点。强去重更激进语料降到72%通用指标没有继续显著上涨反而是C-Eval的部分题目出现了轻微掉点。这个结果说明两点第一去重收益存在明显的边际递减第二过度去重会破坏长尾知识覆盖。特别是那些主题相同、但细节和表述各异的文档它们虽然被去重判定为重复却可能承载着不同的实体信息。所以如果预算允许我更推荐用“中档模糊去重 针对高重复率内容做选择性清理”的组合而不是一味地把阈值往低了调。下面的表格是这轮实验的内部记录数值以我们的验证集为样本不代表普适结果但趋势可以参考去重档位保留token比例5-gram重复率相对值C-Eval均值GSM8K重复生成率弱去重98%100%42.128.37.2%中去重85%36%44.830.13.1%强去重72%21%44.229.62.8%注意强去重行的C-Eval反而微降这正是我在前文强调的“长尾覆盖受损”信号。如果只盯着GSM8K或PPL很容易错过这类能力损失。3.3 质量过滤扫描干净语料与多样性之间的拉锯把去重固定在“中”档领域比例不变我对比了轻、中、重三档过滤。轻过滤跑出来的模型知识问答类指标最低但代码生成和创意写作类的多样性指标最好原因很直接轻过滤保留了大量的口语化表达和非标准格式模型更像一个见多识广的“野生选手”。中过滤是最稳的C-Eval和MMLU都比轻过滤提升了1.5分左右代码指标几乎没有下降。重过滤把所有低质量长尾都剔掉之后通用知识指标继续小幅上涨但HumanEval的pass1掉了一个多点而且模型在非正式指令上的跟随能力明显变弱。重过滤的代码能力下降是我当时没预料到的。复盘后认为是这样的很多带注释、带错误示范、格式不够规范的代码片段被当成低质量文本清掉了正好把模型学习“容错处理”的机会给砍了一截。所以如果你的模型要让代码能力更稳质量过滤管线里不能只按“文本干净度”打分还要给代码类样本单独设置质量规则。过滤档位C-EvalMMLUHumanEval(pass1)非正式指令稳定性轻过滤42.643.117.8中中过滤44.244.517.9好重过滤45.045.216.4差3.4 领域比例扫描与两两交互实验领域比例这轮我设了三组自然分布组、均衡组各个主要领域尽量平均和“推理增强组”代码数学教科书合计占比从自然分布的约18%提升到35%对应地从网页比例里扣。固定去重中档、过滤中档跑下来推理增强组的GSM8K从30.1跳到38.7提升幅度接近9个点HumanEval也从17.9涨到22.6提升明显。但均衡组和推理增强组的MMLU都有小幅回落原因是知识密集型长文本百科、书籍、新闻的占比被压缩了。这个现象说明领域比例没有标准答案只能以任务目标为导向去权衡。我们的做法是把每轮消融实验当作一次“配比搜索”用上一轮掉得最厉害的评估方向来修正下一轮的配比方向。更值得关注的是交互效应。我在交互组合里发现了一个关键现象强去重 重过滤这个组合在自然语料比例下会加剧代码能力下降但同样是强去重 重过滤一旦把代码比例拉高效果反而倒了过来代码指标甚至比我之前分开扫描时更好。这说明“去重强度”和“质量过滤”在代码语料上不是独立起作用的强去重把重复的代码样板清理掉之后重过滤才有机会把真正有学习价值的多种风格代码留下来。实验组去重过滤领域比例C-EvalGSM8KHumanEval基线中中自然44.230.117.9强去重重过滤强重自然44.829.816.2强去重重过滤强重推理增强44.538.423.8从表格可以清楚看到单看某个变量的主效应你会得出“强去重会掉点”“重过滤伤代码”的结论但加上领域比例这个调节变量后结论完全变了。这就是交互效应也是我强烈建议不要只做单因素扫描的原因。4. 数据配比实验的常见问题与避坑实录4.1 实验一多就开始抖动“观测噪声”如何压下去如果你也按我这个方法跑了十几个实验组大概率会遇到一个让人极其沮丧的现象同一组配置重复跑两次两次的评估分数差得比不同配置之间的差异还大。这不是你代码写错了而是预训练实验本身噪声就大。压噪声没有捷径只有三板斧第一多重复至少两次取均值预算允许就三次第二固定一切能固定的东西包括随机种子、数据shuffle顺序、初始权重第三不要只看最终分数要看训练曲线某些配置在训练早期差异就出现了等训完才对比会让你失去大量信息。还有一个容易忽略的点评估集也要固定版本。今天用网上某个数据构建的评测集明天又更新一版两轮实验的数字根本没法比。建议把用于数据消融的评估集冻结成私有静态版本每次对比都使用同一份评估样本这样至少能保证差异来自训练数据而不是评估集变化。4.2 评估集污染你的“干净评测”可能并不干净做数据消融污染问题比其他机器学习任务严重得多。预训练语料是海量的其中很容易包含评测集题目、代码题解和标准答案。如果你的质量过滤或去重环节正好把这些评测样本保留了下来模型在评测上“超神”的假象会直接毁掉整个消融结论。现在跑数据实验前我都会先做一个污染扫描把每个评测样本切成若干连续片段去训练语料里比对高相似n-gram发现重叠率超过一定阈值的训练样本必须删除。这个操作不复杂但非常重要。更严格的做法是维护一个“永久隔离集”任何版本的数据管线都不得包含里面的样本专门用来做最终验收。4.3 “小模型结论”迁移到“大模型”时的翻车风险用1B代理模型做数据消融最大的质疑点在于结论能否迁移到大模型。以我的实测看大部分定性结论是可以迁移的比如代码语料上采样提升推理、强去重可能伤害长尾这些在大模型上方向一致。但定量幅度基本都会变有时甚至会反转。典型例子是领域多epoch1B模型对代码语料过拟合的阈值在4个epoch左右而7B或13B模型可能能撑到更久因为模型容量更大记忆和泛化的平衡点不同。所以在汇报消融结论时我养成了一个习惯把结论写成“相对排序”而不是“绝对数值”。例如“推理增强比例优于自然比例差距约1.5到3个点”而不是“GSM8K能达到38.7”。前者在模型规模变化时依然有参考价值后者只会误导下一个人。4.4 问题速查表现象可能原因处理建议同一配置两次实验分数波动大评估集太小、未固定种子冻结评测集重复至少两次取均值去重强度加大后知识分反而下降长尾与近似重复被误删检查被去重样本的领域分布降低模糊去重阈值重过滤后代码能力下降代码容错样本被当噪音删除为代码语料单独设计质量规则推理指标暴涨但常识指标暴跌知识类语料比例被过度压缩下调推理类比例保持百科书籍配额评测集得分高但实际能力差评测样本混入训练语料建立n-gram重叠检查维护永久隔离集我在跑完这十几组实验后最明显的体会是数据配比这件事没有一劳永逸的公式一个所谓的“最优配方”只是为了特定模型、特定任务目标和特定预算求出来的局部最优解。真正值钱的是你用来寻找配方的这套消融流程它能不能复现、能不能控制噪声、能不能把交互效应拆解清楚。建议你如果准备复现直接从一个小规模的代理模型开始把token预算控制在2到5B先跑一组基线和一组单因素扫描把观测系统验证稳定了再去扩展实验矩阵。另外一个小技巧每跑完一组立刻把数据管线的配置、保留token比例、过滤阈值、评估得分全部记录到一个固定的文档里。这个记录习惯会在你回过头分析结果时救你一命。
返回列表