Code Concepts:从编程概念种子生成的大规模合成数据集
Source: Hugging Face Blog
在大规模 LLM 开发中,提升模型质量不仅取决于数据量,还取决于数据的质量和针对性。虽然预训练数据集通常包含海量信息,但它们可能缺乏强化特定技能(如推理或编程能力)所需的概念性定位。
为了解决这一挑战,我们设计了一种 可扩展、概念驱动的合成数据生成 方法——一种工作流,使研究人员能够生成与期望模型能力对齐的数据。作为初步应用,我们构建了一个预训练规模的合成数据集,包含 1500 万个 Python 编程题目,并作为 Nemotron‑Pretraining‑Code‑Concepts 子集发布在 Nemotron‑Pretraining‑Specialized‑v1.1 dataset 中。
关键结果: 在 Nemotron‑Nano‑v3 预训练的最终 1000 亿 token 中加入这些数据,可在 HumanEval 基准上实现 六分的提升。
基于分类法的工作流
我们的工作流以从大规模标注的 Nemotron‑Pretraining‑Code‑{v1,v2} 数据集中提取的精心策划的编程知识分类法为中心。
该分类法对数千个编程概念进行层级组织,从基础构造(例如 字符串、递归)到高级算法和数据结构模式。
利用此分类法,开发者可以:
- 选择 特定概念(或其组合)。
- 控制 生成数据的难度、多样性和概念平衡。
- 提炼 并 过滤 生成的问题以确保质量。
Source: …
数据集创建
- 概念选择 – 我们通过在我们的分类体系中对 HumanEval 基准的代码补全提示进行分类,识别出 91 个核心概念,这些概念与 HumanEval 最相关(同时在更广泛的实际编程知识中具有代表性)。
- 问题生成 – 在这些概念的组合指引下,我们生成了约 1500 万条合成的 Python 编程问题。每个问题都使用
ast.parse验证其包含可运行的 Python 代码。 - 质量过滤 – 对生成的问题进行解析,并过滤出语法和语义上正确的题目。
图 1 可视化了整体工作流;图 2 展示了一个概念种子及其生成的合成问题的具体示例。
图 1
概念驱动的数据生成用于生成 Code Concepts 数据集。我们使用从 Nemotron‑Pretraining‑Code‑{v1,v2} 数据集构建的分类体系,提取 HumanEval 提示中的编程概念,并将其用于开放式生成。我们的工作流产生了约 1500 万条源自 91 种不同编程概念的 Python 编程问题。
图 2
Python 编程问题生成的可视化,作为我们概念驱动数据生成工作流的一部分。一个提示由概念组合(在蓝框中使用点表示法显示)、指令和约束构成。使用 GPT‑OSS 120B 生成问题后,对其进行解析并过滤质量。在本例中,概念 data-structures.sets.operation、algorithms.arrays.processing 和 algorithms.geometry.computational 共同促成了一个涉及从列表中所有足够大的子集计数不同凸包面积的题目。
实证验证
我们在 Nemotron‑Nano‑v3 预训练的最后 1000 亿 token 中注入了 100 亿 token 的 Code Concepts 数据集。训练并评估后:
- HumanEval 准确率 从 73 % → 79 %(提升了六个百分点)。
- 质性评估显示,在各种编程概念(例如图算法、集合操作)上表现更强,并且对边缘案例和执行推理的处理也有所改进。
图 3 对比了标准 Nemotron‑Nano‑v3 与使用 Code Concepts 数据集进行训练的版本的基础模型评估结果。
图 3
在进行约 100 0 亿 token 数据消融实验,使用约 100 亿 token 的 Code Concepts 数据集后得到的基础模型基准评估结果。
Outlook
我们将此数据集视为概念驱动生成工作流的更广泛验证,而不是一次性产物。通过在宽松的开放许可证(CC‑BY‑4.0)下发布数据集及其底层分类法,我们希望能够让社区将此方法扩展到其他领域和用例,实现可扩展、针对性的 LLM 预训练。
欲了解更多细节,请参阅完整的博客文章以及相关的 Hugging Face 仓库。
- **Code Concepts data**: The model trained on the Code Concepts data achieves a six‑point gain on HumanEval, while most other benchmarks remain unchanged.

