OpenBMB · HF

呵

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 上进一步扩大。

🔎 L2 选择框架

L2 框架独立应用于 UltraData-Code-L1 中的 11 种语言中的每一种:

  1. 编码文件。 每个文件使用来自 Qwen3-Embedding-0.6B 的 1024 维 embedding 表示。
  2. 预测文件角色。 角色分类器将每个文件分配为 ALGO、WEB、TOOL、DATA、TEST、CONFIG 或 EXCLUDE 之一。
  3. 构建双线索监督。 ALGO 角色标签与语言特定的启发式证据相结合,以识别超越 ALGO 角色本身的算法相关文件。
  4. 对相关性和质量进行评分。 相关性模型输出 algo_rel_score;质量模型输出 quality_score。
  5. 校准和选择。 在留出数据上校准特定语言的相关性阈值。当文件通过相关性和质量阈值且未被预测为 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: {文件是否通过选择策略}

注意事项

❤️ 致谢

本发布基于 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}}
}
译自 OpenBMB · HF · 录于 二〇二六年九月八日