Ultra-FineWeb:用于高质量大语言模型训练数据的高效数据过滤与验证

《Ultra-FineWeb: Efficient Data Filtering and Verification for High-Quality LLM Training Data》清华刘知远团队出品 摘要 模型驱动的数据过滤仍然面临两大挑战:(1)缺乏有效的数据验证策略,难以对数据质量提供及时的反馈;(2)用于训练分类器的种子数据选择缺乏明确标准,且过度依赖人工经验,引入了一定的主观性。针对第一个挑战,我们提出了一种高效的验证策略,能够以极低的计算成本快速评估数据对 LLM 训练的影响。针对第二个挑战,我们基于高质量种子数据有利于 LLM 训练的假设,结合提出的验证策略,优化了正负样本的选择,并提出了一种高效的数据过滤流程。该流程不仅提升了过滤效率、分类器质量和鲁棒性,还显著降低了实验和推理的成本。此外,为了高效过滤高质量数据,我们采用了一种基于 fastText 的轻量级分类器,并将该过滤流程成功应用于两个广泛使用的预训练语料库,即 FineWeb 和 Chinese FineWeb 数据集,从而创建了更高质量的 Ultra-FineWeb 数据集。Ultra-FineWeb 包含约 $1$ 万亿个英语 Token 和 $1200$ 亿个中文 Token。实验结果表明,在 Ultra-FineWeb 上训练的 LLM 在多个基准测试任务中表现出显著的性能提升,验证了我们的流程在提升数据质量和训练效率方面的有效性。 总体工作流 所提出的基于高效验证的高质量过滤管道的总体工作流程如图1(c)所示。我们首先构建一个初始候选种子池,并应用我们的高效验证策略来识别能够显著提高训练性能的高质量样本。这些经过验证的样本作为正样本种子,用于训练分类器,而负样本则从原始数据池中随机选择,以创建一个平衡的训练集。在分类器过滤阶段,我们从原始数据池中抽取一个小样本子集,并使用我们的高效验证策略来验证分类器的选择,以评估其有效性。基于验证结果,我们迭代更新高质量种子池,调整正样本和负样本的比例,并微调分类器训练超参数,以优化数据选择策略。只有在高效验证中表现出稳定可靠性能的分类器才会被部署用于全尺度数据选择和后续模型训练,从而在保持高数据质量的同时,显著降低计算成本。 高效验证策略 验证训练数据的有效性通常需要大量的计算资源。例如,在一个包含1000亿 (B) 个 Token 的数据集上训练一个 10 亿参数的大语言模型 (LLM),大约需要 1200 个 H100 GPU 小时(相当于 64 个 GPU 连续运行近 19 小时)。当迭代开发高质量的数据分类器时,这种计算负担变得尤其令人望而却步。此外,大规模的训练验证对于较小的数据集来说是不切实际的,因为使用有限的 Token 数量训练的模型无法表现出具有统计意义的性能差异,而训练的不稳定性进一步损害了结果的可靠性。这种限制在我们对 FineWeb 和 FineWeb-edu 的比较分析中很明显。当从头开始使用 80 亿个 Token 进行训练时,FineWeb-edu 在 HellaSwag 上取得了优异的性能,而在 3800 亿个 Token 时,FineWeb 在包括 Winogrande、HellaSwag 和 PIQA 在内的多个基准测试中表现更好,这突出了基于训练规模的评估结果的不一致性[^1]。 ...

May 11, 2025 · 小茄墩

字节Seed:Seed-Coder,model-centric的领域模型训练

《Seed-Coder: Let the Code Model Curate Data for Itself》 这篇论文的核心启发在于提出了一种最小化人工参与、以模型为中心的数据构建管线pipeline来生产大语言模型(LLM)的代码预训练数据。关键做法是利用LLM本身进行代码数据的评分和筛选,而不是依赖大量人工制定的、针对特定语言的过滤规则或人工标注数据。基于此,他们推出了Seed-Coder系列8B模型(基础、指令、推理),并通过监督微调、偏好优化(DPO)以及长链思维(LongCoT)强化学习来进一步提升指令遵循和多步代码推理能力,展示了这种数据策略在提升模型代码相关任务(生成、补全、编辑、推理、软件工程)上的卓越表现。 引言部分强调了现有开源代码LLM在预训练数据构建上对人工的重度依赖(如手工规则过滤)所带来的局限性,包括可扩展性差、主观偏见和维护成本高。最具启发性的一点是作者引用“The Bitter Lesson”来说明AI领域的发展趋势:依赖大规模计算和数据的通用方法最终会胜过依赖人类知识的复杂方法。Seed-Coder正是基于这一理念,倡导使用LLM来自动化代码数据的筛选和评估,从而克服人工方法的瓶颈,并构建了一个包含6万亿token的预训练语料库。 预训练: 数据管线 (Data Pipeline): 启发性在于其解耦的并行设计,允许各个处理模块(如去重、基础过滤、LLM高级质量过滤)独立运行,便于增量扩展和灵活调整,避免了重新运行整个冗长流程。数据被分为文件级代码、仓库级代码、提交记录和代码相关的网页数据四类,并针对不同预训练阶段(常规预训练和持续预训练)进行组合。 数据成分 (Data Ingredients): GitHub数据: 关键做法是构建一个LLM驱动的文件级质量评分模型。他们随机抽取代码文件,让一个“神谕”模型(DeepSeek-V2-Chat)从可读性、模块化、清晰度和可复用性四个维度打分,然后用这些评分数据微调一个13B的Llama 2模型作为高效的质量评估器,过滤掉低质量文件。这比传统基于规则的过滤更能捕捉代码质量的细微差别且可扩展性强。 提交数据 (Commits Data): 做法是将GitHub提交记录格式化为代码变更预测任务,利用提交信息和上下文(包括README、目录结构和BM25检索的相关文件)预测修改的文件和代码补丁,从而让模型学习真实世界的代码演化模式。 代码相关的网页数据: 亮点在于一个优化的两阶段提取框架:首先通过规则提取和fastText模型进行大规模召回(在标注数据上训练,实现高召回率),初步筛选出代码相关内容;然后使用LLM质量过滤器进行精细评估和筛选,并特别注意缓解不同网站类型(如电商、文档、论坛)带来的打分偏见。 用于持续预训练的高质量数据: 关键在于迭代训练fastText模型。先基于特定特征(如质量分、语言、注释率)构建小的种子数据集作为正样本,并精心设计难负样本(如高分但无注释的代码,或第一轮fastText召回但质量分低的数据),以提升fastText模型的判别能力,通过2-3轮迭代扩展高质量数据集。 用于持续预训练的长上下文数据: 通过支持高达32K的序列长度进行长上下文训练。文件级数据通过LLM过滤,而仓库级数据则针对主流语言(Python, Java, C)实施了基于文件依赖关系的拓扑拼接,对于HTML, SQL, Shell等则使用随机拼接,大型仓库则分解为子图,以在保持逻辑连贯性的同时适应上下文窗口。 Fill-in-the-Middle (FIM): 实践中发现SPM(Suffix-Prefix-Middle)模式比PSM模式略好,可能与注意力机制的位置偏见有关。采用字符级随机分割,并在常规和持续预训练阶段设置不同FIM比例。 预训练策略 (Pretraining Policy): 采用了Llama 3架构,82亿参数,分阶段进行预训练,从混合数据开始,然后是大量代码数据,最后在持续预训练阶段转向高质量和长上下文数据,并相应调整学习率。 后训练: 后训练部分展示了如何从预训练好的基础模型进一步打造出强大的指令模型和推理模型。 指令模型 (Instruct Model): 数据构建:多样性 (Data Construction: Diversity): 核心是合成数据生成,强调种子片段多样性(来自高质量GitHub、OSS-Instruct、Markdown/Jupyter/StackExchange等代码-文本混合数据以模拟真实交互)和风格多样性(构建元风格集并随机混合风格,再结合WildChat数据)。 数据过滤:质量与难度 (Data Filtering: Quality and Difficulty): 结合规则(Tree-sitter去语法错误)和模型(LLM评估正确性)进行质量过滤;通过主题分类和模型评估难度来筛选出过于简单的实例。 沙盒验证的自我修正 (Self-Correction with Sandbox Verification): 这是一个非常实用的做法。为了保留高难度样本(它们通常错误率也高),模型被提示生成解决方案和单元测试,在沙盒中评估,并对失败的方案进行迭代修正,直到测试通过或达到最大尝试次数。 ...

May 11, 2025 · 小茄墩