UltraData-Code-L2-分类器
UltraData-Code-L2-Classifier
OpenBMB发布UltraData-Code-L2-Classifier,一套面向11种编程语言的按语言区分的文件级评分器,用于从UltraData-Code-L1中筛选算法相关文件,构成约400B tokens的UltraData-Code-L2语料库,保留约12.23%的L1文件。框架结合文件角色分类与语言特定启发式线索,使用Qwen3-Embedding-0.6B生成的1024维embedding。在1B模型10B-token持续预训练下,L2相较L1在EvalPlus上pass@1提升7.80个百分点,MultiPL-E提升5.13个百分点。
UltraData-Code-L2-Classifier
📚 简介
UltraData-Code-L2-Classifier 是一套面向 UltraData-Code-L1 中 11 种编程语言的、按语言区分的文件级评分器。
对于每种语言,我们训练一个专用的 L2 评分器,并将其应用于 UltraData-Code-L1 中对应的文件。被选中的文件构成 UltraData-Code-L2,这是一个旨在集中可解释计算与问题求解逻辑的语料库。最终的 L2 语料库包含约 400B tokens,整体保留了约 12.23% 的 L1 文件。
💡 亮点
摘要: 代码生成已成为大语言模型的核心能力,而代码数据是预训练过程中发展该能力的关键组成部分。随着代码语料库的持续增长,其规模、多样性和质量日益塑造着预训练期间习得的能力。基于分层数据管理的视角,我们提出 UltraData-Code 作为四个相互关联的数据状态的家族,从 L0 的仓库归档,到 L1 的标准化自然代码,再到 L2 的算法选择,以及 L3 的任务导向合成。L0 归档每个公共 GitHub 仓库默认分支上的最新修订版本,连同其文件结构、关联关系和来源信息。L1 应用可扩展的过滤、归一化和近似去重,以获得标准化的自然代码。L2 随后利用来自文件角色和启发式规则的语言自适应信号,结合代码质量约束,从 L1 中选择算法相关文件,产生约 400B tokens 的 UltraData-Code-L2,涵盖 11 种编程语言。L3 对 L2 中的算法文件应用任务导向合成,将每个实现转化为结构化的编程练习,在相同的 11 种语言中生成约 150B tokens 的 UltraData-Code-L3。在对 1B 模型进行受控的 10B-token 持续预训练下,使用 L2 而非 L1 进行训练,在 EvalPlus 上将 pass@1 提升了 7.80 个百分点,在 MultiPL-E 上提升了 5.13 个百分点,同时分别超过 Stack-Edu 4.37 和 3.05 个百分点。将 L2 训练 tokens 的一半替换为 L3,相较于仅使用 L2 的训练,在 EvalPlus 上进一步获得 8.42 个百分点的提升,在 MultiPL-E 上获得 8.07 个百分点的提升,同时分别超过最强的合成数据基线 5.57 和 7.80 个百分点。当训练预算增加到 100B tokens 时,L2 选择和 L3 合成带来的收益在两个 benchmark 上进一步扩大。
- 一个互联的代码数据构建流水线。 UltraData-Code 将仓库归档和标准化自然代码与选择及结构化合成相连接,在 11 种编程语言中产生约 400B tokens 的 L2 数据和 150B tokens 的 L3 数据。
- 对算法相关代码的细粒度策展。 我们开发了一个语言自适应的选择框架,将文件角色监督与语言特定的启发式线索相结合,以学习超越显式 ALGO 文件的算法相关性。该框架在角色、相关性和质量模型之间复用预计算的语义 embedding,并在选择过程中应用角色和质量约束。
- 基于实现、面向任务的合成。 我们引入了一种结构化的合成协议,将 L2 选择的每个算法相关实现转化为一个编程练习,从同一源实现中联合生成独立的任务、分析、解决方案和测试候选。这种转换保留了源代码的计算意图,同时为代码生成添加了显式的任务和解决方案监督。
🔎 L2 选择框架
L2 框架独立应用于 UltraData-Code-L1 中的 11 种语言中的每一种:
- 编码文件。 每个文件使用来自 Qwen3-Embedding-0.6B 的 1024 维 embedding 表示。
- 预测文件角色。 角色分类器将每个文件分配为
ALGO、WEB、TOOL、DATA、TEST、CONFIG或EXCLUDE之一。 - 构建双线索监督。 ALGO 角色标签与语言特定的启发式证据相结合,以识别超越 ALGO 角色本身的算法相关文件。
- 对相关性和质量进行评分。 相关性模型输出
algo_rel_score;质量模型输出quality_score。 - 校准和选择。 在留出数据上校准特定语言的相关性阈值。当文件通过相关性和质量阈值且未被预测为
EXCLUDE时,该文件被保留。
📈 评估结果
10B-token 的比较使用相同的 1B 基础模型、训练设置、去污染和评估协议。
Python 结果:算法选择产生最强的自然代码结果。 UltraData-Code-L2-py 在 EvalPlus pass@1 的平均值上比 UltraData-Code-L1-py 提升了 17.91 个百分点,比 Stack-Edu-py 提升了 8.46 个百分点。
多语言结果:L2 选择优于 L1 基线。 UltraData-Code-L2 在 EvalPlus 上比 UltraData-Code-L1 提升了 7.80 个百分点,在 MultiPL-E 上提升了 5.13 个百分点,并分别超过 Stack-Edu 4.37 和 3.05 个百分点。
🚀 UltraData-Code-L2 Classifier 的使用
安装运行时依赖:
pip install numpy torch pyarrow
在 Python 中对 embeddings 进行评分
import sys
sys.path.insert(0, "scripts")
from scorers import LanguageScorers
scorers = LanguageScorers.load("classifiers/cpp")
# float32 [N, 1024];paths 是仓库相对路径,并与 embeddings 对齐
out = scorers.score(embeddings, paths)
为每种输入语言使用匹配的语言目录。相关性模型需要真实的仓库相对路径。
对 Parquet 文件进行评分
scripts/score_parquet.py 接受一个 Parquet 文件或递归遍历一个目录。输入必须包含 embedding 列以及 relative_path 或 meta.file_path。
SCORERS=classifiers/cpp
DATA_PATH=data/input
SAVE_PATH=data/output
python scripts/score_parquet.py \
--scorers ${SCORERS} \
--input ${DATA_PATH} \
--output-root ${SAVE_PATH} \
--batch-size 1024 \
--device cpu \
--apply-policy
输出镜像输入目录结构,并保留所有现有列。使用 --describe 检查评分器集合,使用 --limit N 最多处理 N 个 Parquet 文件,或使用 --algo-rel-min、--quality-min 和 --exclude-categories 覆盖策略值。
输出字段
分类器将以下结果附加到每个输入文件中:
category: {预测的文件角色}
cls_confidence: {文件角色置信度}
algo_rel_score: {算法相关性得分}
quality_score: {代码质量得分}
selected: {文件是否通过选择策略}
category是ALGO、WEB、TOOL、DATA、TEST、CONFIG或EXCLUDE之一。cls_confidence和algo_rel_score的范围为0到1;quality_score的范围为0到10。- 仅当启用
--apply-policy时,才会添加selected。它标记通过相关性阈值、EXCLUDE否决和质量阈值的行;行不会被删除。
注意事项
- 输入必须使用由 Qwen3-Embedding-0.6B 生成的 1024 维 embeddings。
- 相关性评分器还使用仓库相对路径。请使用与 embeddings 对齐的真实路径。
config.json提供默认值。命令行选项可以覆盖这些默认值。- 评分脚本是单进程的。对于语料库规模的推理,请在外部调度多个分片或子目录。
❤️ 致谢
本发布基于 Qwen3-Embedding-0.6B、PyTorch、PyArrow。感谢他们的出色工作!开源贡献使 UltraData-Code 成为可能!🙌
💳 许可证
本项目在 Apache 2.0 许可证下发布。
📖 引用
如果您觉得 UltraData-Code 或此分类器有用,请考虑引用:
@misc{ultradata_code,
title = {{UltraData-Code}: From Raw Repositories to Algorithmically Dense and Task-Oriented Code Data},
author = {Chengying Tu and Hengyu Zhao and Shuaikang Xue and Zhongming Qu and Jihao Zhou and Xinle Lin and Junshao Guo and Zixuan Fu and Qiang Ma and Jie Zhou and Chaojun Xiao and Hongfei Yan and Yudong Wang and Xu Han and Zhiyuan Liu and Maosong Sun},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/datasets/openbmb/UltraData-Code}}
}