
数据集速览
| 数据集名称 | The Stack v2 |
| 发布机构 | BigCode(Hugging Face 与 ServiceNow 联合领导) |
| 发布时间 | 2024 年(随 StarCoder2 发布) |
| 数据规模 | 完整版 67.5TB,去重后 32.1TB,训练集约 9000 亿 token |
| 覆盖语言 | 600 多种编程语言(语料含 658 种语言) |
| 许可证 | 代码各自保留原始许可证(逐文件溯源) |
| 一句话定位 | 目前最大、最适合 LLM 预训练的开源代码数据集 |
它来自哪里:Software Heritage
理解 The Stack v2,得先认识它的数据源——Software Heritage(软件遗产)。这是一个由法国 Inria 发起、与联合国教科文组织(UNESCO)合作的非营利项目,目标只有一个:收集、保存并共享所有公开可用的软件源代码及其开发历史。可以把它理解为”软件界的互联网档案馆”,规模之大、持续性之强,是它区别于其他代码数据来源的根本。
The Stack v2 正是从这个档案馆里”长”出来的。BigCode 项目把它加工成适合大模型预训练的格式,而 The Stack 这个名字,也暗含了”把代码堆成一叠”的意味。
规模有多大
和上一代 The Stack v1 相比,v2 的体量有了数量级的跃升。完整版从 6.4TB 涨到 67.5TB;近重复去重后从 2.9TB 涨到 32.1TB;最终用于训练的 token 数从约 2000 亿涨到约 9000 亿。整个数据集包含超过 30 亿个文件,覆盖 600 多种编程语言和标记语言。相比之下,v1 只覆盖 358 种语言——v2 的语言覆盖也翻了近一倍。
这套数据直接喂养了 StarCoder2 系列模型:15B 旗舰版在 600 多种语言、超过 4 万亿 token 上训练;3B 和 7B 版本则聚焦 17 种精选的高资源语言。
四个版本:不同用途各取所需
The Stack v2 在 Hugging Face 上以四个版本发布,层层递进。bigcode/the-stack-v2 是完整版,含全部文件;the-stack-v2-dedup 是在完整版基础上做了近重复去重;the-stack-v2-train-full-ids 在去重基础上进一步用启发式规则过滤,覆盖 600 多种语言,并按仓库分组;the-stack-v2-train-smol-ids 则只保留 17 种语言,是一个更小、更聚焦的训练子集。
值得注意的一点是:这些数据集本身只存储 SWHID(Software Heritage 的标识符)和元数据,并不直接包含代码文件内容。真正的文件内容存放在 Software Heritage 的 S3 存储桶里,需要单独下载。
许可证:逐文件溯源
The Stack v2 在许可证上的处理相当严谨,这也正是它”负责任”定位的体现。数据集并不整体套一个统一许可,而是尊重每个代码文件自身的原始许可证:团队用 ScanCode 检测出每个文件的 SPDX 许可证,并记录许可证类型(宽松型或无许可证)。使用者必须遵守原始许可证的条款,包括其中的署名要求。为了支持这一点,数据集的每条记录都带有 provenance(来源溯源)信息,可以追溯到具体仓库、文件路径和许可证。
此外,The Stack v2 会定期更新以执行经过验证的数据移除请求——即某个仓库的主人如果选择退出,对应的代码会从后续版本中移除。批量下载还需要与 Software Heritage 和 INRIA 签署协议,这也是它的一个门槛。
代码数据为什么比文本更难清洗
和自然语言语料相比,代码数据的清洗有它特有的难点,这也能解释为什么 The Stack v2 要在许可证和去重上花这么大力气。第一个难点是重复。代码世界里充满了复制粘贴——开源项目互相 fork、通用模板被反复套用、第三方库被大量引用。如果不做近重复去重,模型会在海量重复片段上浪费训练算力,还容易「背下」某个固定实现而缺乏泛化能力。
第二个难点是许可证。自然语言的版权问题相对模糊,但代码的许可证是明确的、有法律约束力的。一个数据集如果混入了带强限制许可证(比如某些禁止商用的许可证)的代码,训练出的模型就可能背上合规风险。所以逐文件做许可证检测、并保留溯源信息,不是锦上添花,而是代码数据集能否「负责任地」用于预训练的前提。The Stack v2 在这两点上的处理,正是它区别于粗糙爬取数据的地方。
第三个独特之处是「仓库上下文」。代码文件不是孤立的——一个函数往往引用同仓库里其他文件的定义。The Stack v2 按仓库分组数据,让模型在训练时能看到跨文件的依赖关系,这对提升代码理解和生成能力帮助很大。这种结构在纯文本语料里并不常见,是代码数据集独有的工程考量。
它喂出了什么:StarCoder2 一览
The Stack v2 最直接的下游成果,是 BigCode 的 StarCoder2 系列代码模型。这一系列有三个规模:3B(ServiceNow 训练)、7B(Hugging Face 训练)、15B(NVIDIA 用 NeMo 框架训练)。旗舰版 15B 在 The Stack v2 的 600 多种语言上训练了超过 4 万亿 token,采用分组查询注意力(GQA)、16384 的上下文窗口加 4096 的滑动窗口注意力,并用 Fill-in-the-Middle(中间填充)目标训练。
从评测成绩看,StarCoder2-15B 在其参数量级表现最佳,在多项评估上匹敌甚至超过 33B 以上的更大模型,StarCoder2-3B 的性能则达到了上一代 StarCoder1-15B 的水平。这一成绩很大程度上要归功于 The Stack v2 在规模和质量上的双重提升——毕竟,代码模型的能力上限,很大程度由训练数据的广度和干净程度决定。
下载与使用
普通使用者可以通过 Hugging Face 的 datasets 库流式加载元数据,也能按语言加载(比如单独取 Dockerfile)。但要拿到代码内容本身,需要配置 AWS 凭证,通过 smart_open 从 Software Heritage 的 S3 桶读取。批量下载则需要联系 datasets@softwareheritage.org 签署协议。换句话说,The Stack v2 的”开放”是有门槛的开放——数据可用,但过程讲规矩。
横向对比同类代码数据集
在代码预训练语料这条线上,The Stack v2 的前身是 The Stack v1,再往前还有 CodeSearchNet 这类早期代码检索数据集。和它们相比,v2 的优势是规模大、语言覆盖广、许可证检测更先进、过滤更精细,而且按仓库分组,支持”仓库上下文”训练。另一个值得一提的对手是 GitHub 上的各类爬取数据,但那些往往缺乏清晰的许可证溯源。The Stack v2 的独特价值,恰恰在于它在”规模”和”合规”之间找到了一个罕见的平衡点——这也是它能支撑 StarCoder2 这种”透明训练”模型的底气。
局限与注意事项
The Stack v2 也有需要留意的地方。第一,下载门槛较高,批量获取需要签署协议,对个人和小团队不太友好。第二,许可证复杂多样,训练出的模型要商用,仍要仔细评估其中非宽松许可证代码的影响。第三,数据以 SWHID 形式分发,意味着你拿到的是”索引”,真正的文件还要二次获取,增加了工程复杂度。第四,虽然做了去重和过滤,但作为大规模代码抓取数据,低质量、重复、甚至恶意代码的残留仍可能存在。这些都不是致命缺陷,但都要求使用者在动手前想清楚自己的场景。
参考来源
BigCode 官方博客《StarCoder2 and The Stack v2》(huggingface.co/blog/starcoder2);The Stack v2 数据集页(huggingface.co/datasets/bigcode/the-stack-v2);Software Heritage 官网。


