ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

大模型从数据到模型的完整链路:清洗、预训练、微调与数据工程实践

大模型从数据到模型的完整链路:清洗、预训练、微调与数据工程实践 1. 从数据到模型大模型诞生的第一性原理讲大模型怎么来我习惯先打一个比方模型像一个人数据像他吃进去的饭。一个人能长多高、身体多结实、脑子多灵活一方面看基因——也就是模型架构另一方面看你给他吃什么、怎么吃、吃了多少。大模型之所以叫大直观上是参数量大但真正支撑起这个大字的地基反而是大多数人容易忽略的东西——数据。过去两年我陆续参与过不少大模型相关项目的落地从数据清洗管线搭建、预训练语料配比调优到微调和部署踩过的坑攒了一箩筐。每次跟刚入行的朋友聊大家最常问的一句话是这些效果炸裂的模型到底是怎么训出来的其实拆开了看整个链路并不神秘就是一条原始数据 → 清洗过滤 → Token化 → 预训练 → 后训练微调对齐→ 评估 → 上线迭代。每一个环节都有大量工程细节而其中最底层、最容易被低估的永远是数据。这篇文章我想沿着这条链路把大模型是怎么来的这件事讲透。适合正在入门大模型、准备自己动手跑预训练或微调、又或者只是想知道凭什么大模型这么强的读者。我不会只讲概念还会结合实操过程中遇到的具体问题和取舍逻辑尽量让你看完之后脑子里能够形成一张完整的、可执行的地图。先把结论放在前头数据决定模型能力的上限架构和算法只是去逼近这个上限。所以你会发现现在各家做大模型团队数据组往往比模型组还大这真不是没有道理的。2. 原始数据从哪里来大模型的食材采购阶段2.1 主流数据来源爬虫、开源数据集与垂类数据大模型的预训练语料来源就三大类互联网爬虫数据、开源数据集、特定场景的垂类数据。互联网爬虫数据是绝对主力。像Common Crawl这个非营利组织每隔一段时间就会抓取全网网页单次抓取量能到几十TB甚至上百TB里面什么都有新闻、论坛、博客、商品页面、代码、论文PDF解析文本……大模型预训练语料里Common Crawl往往能占到五到八成。开源数据集则是质量更可控的补充。比如用于训练代码能力的有The Stack、StarCoder数据集用于训练推理能力的开源数学语料还有像RedPajama、SlimPajama这类把Common Crawl等原始数据做了一遍清洗后重新打包的半成品数据集。直接用这些开源清洗过的数据能省不少事但需要注意的是它们已经是别人嚼过一遍的东西里面的数据分布、去重程度、过滤规则未必适合你的场景拿过来最好还是自己做一遍抽样质检。垂类数据指的是针对特定行业或场景专门采集的数据比如医疗领域的电子病历、病历报告法律领域的裁判文书、法规条文金融领域的研报和公告。这类数据在公开互联网上占比极低但价值极高通常需要专门跟数据供应商采购或者跟机构合作脱敏后获取。做垂直行业大模型时垂类数据的质量和数量往往直接决定了模型在领域内的专业度。2.2 数据规模的一个体感参考你可能经常看到新闻里说某个模型用了几万亿Token训练。Token是啥可以粗略理解成模型读文本的最小单位英文里一个Token大约对应0.75个单词中文里一个字或词可能对应一到三个Token。拿LLaMA系列来举例LLaMA-1的65B模型用了约1.4万亿Token训练LLaMA-2的70B模型用了2万亿Token到了LLaMA-3的405B模型训练数据直接干到了15万亿Token。15万亿Token是什么概念如果你每天读一万字得读四万多年才能读完。整个人类文明至今积累的文本总量估计也就几百亿本书的量级而大模型训练时吞进去的文本量远超任何一个个体能消化的极限。这个体量也解释了为什么大模型训练必须动用成千上万张GPU动辄卡着跑几个月。数据搬运、清洗、过滤、去重、Token化这些步骤在PB级数据规模上每一步都是分布式计算的大工程。我之前帮一个团队搭过数据清洗的pipeline数据量刚过TB级时单机处理还勉强能跑一旦上PB连I/O都成了瓶颈没经验的人根本扛不住。2.3 多模态数据图像、音频、视频也是数据现在大家口中的Foundation Model基础模型早已不止于纯文本。像GPT-4o、Gemini这类模型训练数据里除了文本还有海量的图文对、音频、视频。图像数据主要来自LAION-5B这类大规模图文数据集音频数据来自各种开源语音库和播客转录文本。多模态数据带来的工程挑战是不同模态的数据格式完全不同没法用一套pipeline处理。图像要经过裁剪、缩放、质量过滤文本跟图像之间的对应关系要对齐音频要转成波形特征后跟文本做时序对齐。任何一个环节处理不当模型的跨模态理解能力就会打折扣。我在做图文数据清洗时发现图文对里文本跟图不对应的问题非常普遍——搜索引擎抓到一张猫的图片旁边配的文字可能是家用宠物喂养指南这种噪声对训练多模态模型的负面影响远大于纯文本里的噪声。3. 数据清洗与过滤模型吃的是精粮还是泔水3.1 质量过滤如何识别并剔除垃圾数据原始爬虫数据有多脏我举个直观的例子一份原始网页文本里可能包含页面导航栏、广告标签、Cookie提示、乱码文本、重复段落、无意义字符甚至还有被人机识别验证码拦下来之后生成的垃圾页面。如果直接拿这些数据训练模型模型会学到一种很诡异的口癖——生成的内容里时不时蹦出来点击此处查看更多该页面不存在之类的废话。质量过滤的常见手段包括启发式规则过滤根据文本长度、标点密度、重复率、符号占比等设定阈值。比如一行文本里如果超过50%是符号和数字基本可以判定它是程序生成的文本或者乱码。分类器过滤先人工标注一批高质量文本和低质量文本训练一个文本分类模型再拿这个模型去过滤剩余的海量数据。OpenAI的GPT-3论文里就明确提到用了这种两级过滤策略。困惑度过滤用一个已经训好的语言模型去计算每条文本的困惑度——简单说就是模型觉得这段文本正常的概率。困惑度异常的文本大概率是机器生成的垃圾文本或者格式诡异的页面。这三种方法各有优劣。规则过滤快但只能干掉最明显的垃圾分类器过滤效果好但需要准备标注数据困惑度过滤能捕捉语义层面的异常但计算量大。实际工程里一般是三管齐下先上规则过滤掉九成垃圾再用分类器精筛最后用困惑度兜底。3.2 去重为什么不能拿重复数据凑数去重是数据工程里特别关键的一环。你可能觉得数据不够的时候把相同内容重复几遍不就能增加数据量了吗绝对不行。原因在于模型训练的优化目标是最小化在训练数据上的损失。如果某条数据在语料库里出现了100次模型就会在它上面反复计算梯度相当于这条数据被过度学习了。轻则导致模型生成内容时偏好这些高频数据比如一本书被重复录入模型就更容易整段背出来重则引发训练不稳定。去重的手段有精确去重用哈希算法MinHash、SimHash计算文本指纹指纹相同的直接删除。模糊去重对文本做分片用SimHash算一个64位的相似度签名签名之间的汉明距离小于某个阈值就判定为相似只保留一条。跨语言去重不同语言翻译版的内容也算重复比如同一篇新闻的中文版和英文版可能只需要保留一条。我记得之前看过一份报道SlimPajama在做数据清洗时仅去重这一步就删掉了超过50%的原始数据。听起来吓人但这恰恰是常态——互联网数据的水分就是这么重。3.3 敏感信息过滤与隐私保护这一块虽然在技术上不复杂但在合规层面极其重要。原始网页里包含大量个人信息比如身份证号、手机号、邮箱、家庭住址、银行卡号等。如果直接进模型训练模型可能把这些信息记住然后在生成时泄露出来。处理方式通常是两类。一类是基于正则表达式的敏感模式匹配匹配到就把整条数据标记为待删除或待脱敏。另一类是用命名实体识别模型去识别人名、地名、机构名等实体能做更细粒度的脱敏。但注意脱敏比删除更麻烦因为脱敏过程中如果处理得不干净仍然可能通过上下文推断出敏感信息。在实际项目里我们一般采取比较保守的策略涉及个人隐私的文本直接整段丢弃不冒脱敏不彻底的风险。虽然这样会损失一部分宝贵数据但安全永远是第一位的。3.4 语言配比与数据混合的艺术不同语言的数据在预料里如何配比是一个玄学与科学并存的问题。互联网上英语的内容占比最高中文、西班牙语、印地语等次之。如果完全按自然比例取数据模型会把绝大多数注意力放在英语上其他语言能力就会被碾压。所以训练中文大模型时通常会有意提高中文数据的配比。我见过一些团队的内部配置英文和中文的比例控制在6:4或者7:3左右然后再加入少量日韩、欧洲语言数据保持语言多样性。除了语言还有领域配比。代码数据、数学数据、教科书数据、对话数据、长文档数据……每类数据的配比调整都会影响模型最终的能力结构。代码数据给多了模型推理能力变强但对话显得生硬教科书和论文数据给多了模型知识密度高但回答过于学术化。这个配比没有一个固定的最优解只能靠小规模实验加主观评估来反复试。每个团队内部都有自己的一套祖传配比表这也是大模型公司最核心的机密之一。4. 预训练模型长身体的炼狱之旅4.1 Token化把人类语言翻译成模型能读的编号数据清洗完之后并不是直接把文本丢给模型训练。计算机只认识数字语言模型也不认识字符所以要先把文本转换成一串整数ID这个过程叫Token化。目前主流的Token化算法是字节对编码简单说就是统计语料里出现频率最高的字符对把它们合并成一个新Token然后反复迭代直到达到预设的词典大小。实际操作里一个中文Token可能是一个字也可能是一个词甚至是一个成语或常用短语。Token化得好不好直接影响训练效率和模型效果。举例来说如果词典里没有深度学习这个词那深度学习就会被拆成深度学习四个Token模型要花更多计算去理解这四个字之间的关系。但如果词典里冗余词太多词典本身占用参数又会导致过拟合。工程上一般把词典大小设在3万到15万之间中文模型通常比英文模型需要更大的词典。我在实践中有个体会Token化这个环节看起来不起眼但如果语料里夹杂了大量特殊符号、表情符号、不规范的Unicode字符Tokenizer很容易把这些内容拆得乱七八糟。所以很多团队的pipeline里甚至会在清洗阶段就把表情符号直接干掉省得后面给Tokenizer添乱。4.2 Transformer架构自注意力机制为什么会赢架构层面现在几乎所有的Foundation Model都基于Transformer。2017年谷歌提出Transformer的那篇论文《Attention Is All You Need》到现在依然是整个大模型领域最核心的基石。它最妙的地方在于自注意力机制让序列中任意两个位置的Token都可以直接对话而不像RNN那样必须按顺序一个个处理。用一个好懂的类比读一篇小说时RNN像是一个一个字往后读记住的东西难免会忘Transformer像是把整页文字平铺在桌面上随时可以扫一眼任意位置。这种全局建模能力让Transformer训练时可以高度并行化GPU利用率大幅提升模型规模也能一路往上堆。大模型里使用的Transformer和解码器架构核心是下一个Token预测。给定前面一段文本让模型预测下一个最可能出现的Token。听起来很单调但这个简单的目标函数配合海量数据和超大模型竟然能让模型涌现出语法、知识、推理甚至上下文学习能力这也是大模型最不可思议的地方。4.3 自监督学习不用人工标注数据自己当老师传统机器学习需要人工标注比如给图片标出这是猫、那是狗。但互联网上有海量的无标注文本人工标注根本不可能。预训练阶段使用的方法是自监督学习——文本本身就是标签。在预测下一个Token这个任务里模型输入的是前半句话标签就是后半句话。比如喂给模型今天天气真不错我们一起去模型要预测下一个词大概率是公园或散步。就这样每一条文本都可以拆成无数个预测下一个Token的训练样本数据自动化地变成了带标签数据。这个设计精妙在语言本身就蕴含着知识、逻辑和世界信息模型在日复一日地猜下一个词时被迫学会理解语法、记忆事实、建立常识。没有谁教过GPT地球绕着太阳转但它在成千上万次猜下一个词的过程中把这句话及相关文本背后的规律内化成了参数。4.4 训练目标与损失函数模型如何学会预训练的训练目标通常是最小化交叉熵损失。通俗解释就是模型对每个位置预测的概率分布跟真实Token的概率分布之间有多大差距差距越大损失越大。具体到实现每次训练时模型要算出每个位置Top-K个候选Token的预测概率取真实Token对应概率的负对数作为该位置的损失然后做反向传播更新参数。一批数据算下来把所有位置的损失取平均就是这一个batch的训练损失。这个阶段的训练量极其巨大。目前训练一个百亿参数模型至少需要成千上万亿Token的计算量。为了加速工程上会用到混合精度训练FP16/BF16、梯度累积、ZeRO显存优化、张量并行、流水线并行、数据并行等手段。很多预训练框架——比如Megatron-LM、DeepSpeed、Fairscale——就是专门为这个场景设计的。如果只是个人想在单卡上跑实验直接用Hugging Face的Trainer加上LoRA之类的微调手段就够了预训练阶段个人很难玩得动。5. Scaling Law与训练工程为什么大是必要而非炫技5.1 三个维度一起扩大参数、数据、算力OpenAI在2020年发表的Scaling Law论文里给出过一个拟合公式模型最终性能大致跟参数量、数据量、计算量的幂指数呈正相关。这意味着在合理范围内你把参数从10亿加到100亿、数据量从100B Token加到1T Token、计算资源相应的等比例增加模型能力就能稳定地变强。这个规律在业界成了军备竞赛的基石。大家发现与其在算法上花心思做精巧的设计不如把同样的算力换成更多参数和更多数据提升效果往往更直接。这也是为什么GPT系列一路从几亿参数涨到几千亿、上万亿参数。但Scaling Law也不是无限成立的。当模型参数增长到一定程度如果数据量不够模型就会过拟合反过来数据量够了参数不够模型又记不住。所以LIMA那篇论文专门强调数据质量的重要性甚至提出一个观点一个约65000条精选数据微调出来的模型在部分场景下可以跟训练数据量极大的大模型一战。这说明数据和参数的匹配度比单纯的堆积更重要。5.2 训练稳定性Loss尖峰、梯度爆炸与炼丹玄学大模型预训练是一项极其昂贵且脆弱的工程。动辄几千张GPU跑几个月中间一旦出现训练发散Loss突然飙到NaN之前的时间成本全部白费。最常见的坑包括Loss尖峰Loss Spike训练中后期Loss突然大幅升高可能与学习率设置、数据边界、批大小不一致有关。处理办法是设置Loss尖峰回滚机制——周期性保存检查点一旦发现Loss尖峰就回滚到之前的检查点降低学习率再继续。梯度爆炸梯度数值过大导致参数更新失控。处理办法是梯度裁剪把梯度最大值限制在一个范围内。数据混入脏数据清洗不彻底的数据可能造成局部Loss异常所以数据质量检测需要贯穿整个训练过程。这些炼丹经验在论文里很少写但在实际工程中一个团队能稳定地跑完一次预训练而不出事故就已经是核心竞争力了。5.3 算力调度与成本估算一个直觉上的账本算账这件事给大家一个粗粒度的参考训练一个7B参数的模型大概需要几万到十几万A100卡时的计算量。按当前主流云厂商的价格每卡时几块钱人民币一次7B规模的预训练成本在几十万到几百万人民币之间。如果是70B规模的模型计算量大约要放大二三十倍账单直接奔着几千万去了。这也是为什么大模型军备竞赛本质上是在拼资金和电力单纯的算法优势很难弥补百倍级的算力差距。6. 后训练微调与对齐从聪明变得好用6.1 指令微调让模型学会听话预训练阶段的模型是一个续写机器你给它中国的首都是它会接北京但你问它中国首都是哪它就不知道该怎么答了——因为它没被训练成问答的形式。指令微调要做的就是把这个续写模型训练成能理解用户指令、按要求回答的助手。指令微调的数据格式一般是三元组指令、输入、输出。指令是用户问题输入是附带上下文输出是期望的答案。数据来源有几个途径人工编写的高质量指令对从已有模型比如GPT-4生成的合成数据开源指令数据集在微调过程中LoRA技术被用得非常多。它通过冻结原模型参数、只训练一小部分低秩分解的增量参数把微调成本降低了好几个数量级。个人单卡就能搞定7B、13B模型的指令微调门槛比预训练低了不止一点。6.2 RLHF与DPO对齐人类偏好指令微调之后模型已经能回答问题了但回答质量良莠不齐——有时胡说八道有时语气生硬。这时候就要做对齐让模型尽可能地符合人类偏好。RLHF基于人类反馈的强化学习是最早被OpenAI用起来的方法流程大概是让人工对同一个问题的多个模型回答打分排序用这些排序数据训练一个奖励模型用强化学习算法PPO让模型在回答问题时尽力获得高奖励。RLHF的工程复杂度很高训练不稳定超参敏感。所以后来出现了DPO直接偏好优化这类更简单的方法——不需要单独训奖励模型直接通过人类偏好数据微调模型即可。DPO在不少场景下能达到跟RLHF接近的效果但工程成本大幅降低。目前很多开源模型已经用DPO替代了传统的RLHF。6.3 评估怎么判断模型好与坏评估一个Foundation Model的能力现在有一套相对标准的做法。通用能力用MMLU多任务语言理解、Benchmark GSM8K数学推理、HumanEval代码生成等公开基准在垂直领域则要自建评测集。但公开基准有个问题模型可能见过测试题数据泄漏导致分数虚高。所以我一直建议除了公开Benchmark一定要自建一套不对外公开、跟业务强相关的评测集定期用这套私有评测集来筛选模型版本。我见过不止一次某模型公开Benchmark刷得很高到了真实业务场景一塌糊涂的情况多半就是评估环节出现了数据泄漏或者评测集脱离实际。7. 数据工程实战踩过的一些坑和应对方法7.1 常见问题速查表我在数据工程里踩过的坑汇总成一张表方便读者对照排查问题现象可能原因排查与解决办法训练损失持续偏高数据清洗不彻底大量低质量文本抽样检查训练数据增加质量过滤日志模型输出频繁重复数据去重不充分做MinHash模糊去重查最高相似的簇中文能力明显偏弱中文数据配比不足提高中文语料配比补充高质量中文数据模型背训练数据去重失败或者数据重复率过高做全量去重尤其检查长文本段落级别的重复微调效果不如预期指令数据格式不一、噪声过大统一指令模板人工质检至少几千条Loss尖峰后发散数据batch间分布差异过大检查数据Shuffle逻辑按source分组这个表格里的问题每一个都是我从实际项目里遇到过的。拿模型输出频繁重复来说最初我以为是模型采样参数的问题调了半天temperature和repetition penalty都没用最后排查到数据层才发现是清洗阶段一个去重脚本配置错误导致MinHash根本没跑起来。可见很多上层问题病根其实在数据层。7.2 数据不足时的应对思路个人开发者或者小型团队往往没能力收集海量数据。这时候我的建议是优先用高质量开源数据集比如Alpaca、OpenOrca、MathInstruct等这些是社区验证过的优质数据比自己爬来的脏数据靠谱得多。做数据增强比如对已有指令数据做同义改写、扩写、翻译加回译可以一定程度扩充数据量。用大模型生成合成数据让GPT-4之类的模型帮你生成一批带标签的训练数据再用规则清洗。这在很多场景下效果不错。需要提醒的是合成数据要在标注上保持谨慎。如果大模型生成的数据本身就有事实性错误拿它训练出来的模型就是谬误放大器危害很大。8. 从大模型到Foundation Model一次范式转移8.1 为什么叫Foundation ModelFoundation这个词很精准——它强调的是一种基础能力。早期的NLP模型像是专门做一件事的工具比如翻译模型只会翻译、情感分类模型只会打标签。Foundation Model不一样它在海量数据上学会了通用的语言理解和生成能力之后只要在它的基础上稍作适配就能解决翻译、摘要、问答、代码、多模态理解等一大堆不同的任务。打个比方以前的NLP是给每个人定制一套房子费钱费时Foundation Model是先把一栋大楼的地基和主体结构盖好之后每家设计自己内部装修就行了。这个范式转变直接推动了整个行业从每个任务训练一个模型走向了预训练一个基础模型按需微调的路线。8.2 Foundation Model的能力涌现与边界大模型最让人兴奋的是涌现能力。参数规模跨过某个阈值之后模型能表现出小模型不具备的能力——比如上下文学习给它几个示例它就模仿着做、思维链推理让它一步步思考再回答准确率大幅提升。但同时也要清醒认识边界模型会一本正经地胡说八道幻觉会受训练数据中的偏见影响会在推理任务上犯低级错误。数据工程做得再好也只能降低这些问题出现的概率无法根治。所以做产品时永远要给大模型配一个安全垫——比如检索增强、人工审核、兜底规则。8.3 大模型数据生态的未来走向现在行业里一个明显的趋势是公开互联网数据的红利正在见顶。高质量文本数据被采集得差不多了所以各家都在做三件事——从多模态数据里挖掘信息视频、音频、传感器数据、用合成数据补充训练、聚焦垂直行业数据做深度加工。数据本身正在成为比模型架构更稀缺的资源数据壁垒也逐渐取代算法壁垒成为大模型公司之间竞争的主战场。这给我们普通从业者的启示是与其追着最新的模型架构跑不如沉下心构建自己领域内的数据资产。手里有干净、高质量、持续更新的数据不管是做模型训练还是后续微调优化都会比单纯刷排行榜更有长期价值。9. 写在最后的个人体会做数据工程和大模型这些年我最大的感受就一句话慢工出细活。外界看到的是模型发布时的惊艳效果看不到的是背后数据团队日复一日地清洗、过滤、质检、配比调优。机器学习圈有个流传很广的说法——Garbage in garbage out——垃圾进垃圾出。这句话放在大模型时代不但没有过时反而比以往任何时候都更贴近真相。如果你是自己动手学习大模型我强烈建议你从数据入手。哪怕只是找一个开源数据集试着做一轮清洗、统计一下质量指标、看看清洗前后训练效果的差别也是对大模型从数据到模型这条链路最直观的理解。参数你暂时调不动架构你暂时改不了但数据的每一点变化都能实实在在反映到模型行为上这就是学习这个领域最好的切入点。最后再分享一个小技巧做任何数据实验之前先写清楚你的质量指标和验收标准。比如清洗后数据里垃圾文本占比低于1%、去重后数据重复率低于5%、模型在评测集上准确率提升2个百分点。没有目标的清洗和训练大概率会变成无止境的调参炼油既浪费时间也积累不下真正有用的经验。数据工程和大模型训练本质上都是工程问题工程问题就要用工程的方式来对待——目标清晰、流程标准、结果可度量这样才能让你每次投入都沉淀成资产而不是打水漂。
返回列表