如何在Python中使用UltraData-Code-L2-Classifier:新手必学的代码Embedding打分完整教程

发布时间:2026/11/4 19:47:11
如何在Python中使用UltraData-Code-L2-Classifier:新手必学的代码Embedding打分完整教程
  • 人工智能
  • 大模型
  • 机器学习
  • 数据清洗

【免费下载链接】UltraData-Code-L2-Classifier

项目地址:https://ai.gitcode.com/OpenBMB/UltraData-Code-L2-Classifier
点击查看免费下载

UltraData-Code-L2-Classifier 是面向 11 种编程语言的文件级打分工具,能对代码 Embedding 同时输出文件角色、算法相关性和代码质量三类分数,是筛选高质量算法代码数据的核心工具。本文用零基础也能懂的方式,带你一步步在 Python 中完成代码 Embedding 打分,并批量处理 Parquet 代码库。

一、UltraData-Code-L2-Classifier 是什么?

简单说,它是一个“代码打分器”:

  • 你给它一批代码文件(以1024 维 Embedding的形式),
  • 它还给你每个文件的一组分数:属于什么角色(ALGO、WEB、TOOL、DATA、TEST、CONFIG、EXCLUDE)、算法相关性有多高(algo_rel_score)、代码质量如何(quality_score)。

它是 UltraData-Code 数据流水线中的L2 筛选层:L0 做仓库归档、L1 做标准化自然代码、L2 用本工具精筛算法密集代码(约 400B tokens)、L3 做任务导向合成。整体关系如下图所示:

对每个语言,工具内部其实由 3 个模型协作完成,这也是 scripts/scorers.py 里加载的内容:

模型文件作用
C(角色分类器)C_file_role.bin判断文件角色(如 ALGO / WEB / TEST)
A(相关性模型)A_relevance.bin输出算法相关性分数(Embedding + 路径特征)
Q(质量模型)Q_quality.bin+Q_scaler.npz输出 0~10 的代码质量分

11 种语言的权重分别存放在classifiers/下:cpp、csharp、go、java、javascript、php、python、r、ruby、rust、shell,打分时必须使用与输入代码相同的语言目录。

L2 筛选的完整框架如下图所示,理解它就理解了本工具每一步在做什么:

二、快速上手:克隆仓库并安装依赖

1. 克隆仓库

git clone https://gitcode.com/OpenBMB/UltraData-Code-L2-Classifier cd UltraData-Code-L2-Classifier

2. 安装运行依赖

只需要 3 个库,一条命令即可:

pip install numpy torch pyarrow

💡 如果你要读取 Parquet 数据文件,pyarrow是必需的;纯 Python 打分只依赖numpy和torch。

三、在 Python 中对代码 Embedding 打分(核心用法)

这是最常用的方式:假设你已经有embeddings(float32,形状[N, 1024])和与之一一对应的仓库相对路径paths,几行代码就能拿到分数。

import sys sys.path.insert(0, "scripts") from scorers import LanguageScorers # 注意:python 代码就选 classifiers/python 目录 scorers = LanguageScorers.load("classifiers/python") out = scorers.score(embeddings, paths) print(out.keys()) # dict_keys(['category', 'cls_confidence', 'algo_rel_score', 'quality_score'])

几个新手必知的关键点:

  1. Embedding 必须是 1024 维,且要由 Qwen3-Embedding-0.6B 这类同维度编码器产出(维度会被检查,编码器不对则分数不可信);
  2. paths必须是真实的仓库相对路径。相关性模型 A 会把路径编码为 256 维哈希特征(见 scripts/path_features.py)拼接进输入,路径为空会影响分数;
  3. 返回值含义:
    • category:文件角色,7 类之一;
    • cls_confidence:角色判断置信度(0~1);
    • algo_rel_score:算法相关性(0~1,越高越“含算法逻辑”);
    • quality_score:代码质量(0~10)。

四、批量处理:用命令行给 Parquet 文件打分

当数据量较大时,推荐直接使用封装好的脚本 scripts/score_parquet.py。它支持单个 Parquet 文件或递归遍历整个目录。

输入数据要求:必须包含embedding列,以及relative_path列(或含file_path的meta结构)。

python scripts/score_parquet.py \ --scorers classifiers/python \ --input data/input \ --output-root data/output \ --batch-size 1024 \ --device cpu \ --apply-policy

输出会镜像输入目录结构,并保留所有原有列,同时为每行追加 4 个打分列;加上--apply-policy后还会追加布尔列selected,标记是否通过筛选策略(只打标,不删行)。

常用参数速查:

参数作用
--describe查看当前语言打分器的配置后直接退出
--limit N最多处理 N 个 Parquet 文件(适合先小规模试跑)
--batch-size每批推理的行数,默认 1024
--devicecpu或cuda
--apply-policy追加selected筛选结果列
--algo-rel-min/--quality-min/--exclude-categories覆盖默认筛选策略

筛选策略从哪里来?

默认策略定义在 config.json 中:相关性分 ≥0.8、质量分 ≥3.0,且角色不是EXCLUDE,三者同时满足才算“选中”。命令行参数 > 语言级覆盖(per_language)> 全局默认值,优先级递减,方便你按语言微调阈值。

五、打分效果如何?

官方实验显示,用 L2 工具精筛后的数据训练 1B 模型,Python 语言上 EvalPlus 平均 pass@1 相比 L1 提升17.91 个百分点;多语言场景下 EvalPlus、MultiPL-E 分别提升 7.80 和 5.13 个百分点。Python 方向的训练动态曲线如下:

六、新手常见坑位清单

  • ❌ 用了错误的语言目录(如给 Python 代码传了classifiers/cpp)→ ✅ 严格一语言一目录;
  • ❌ Embedding 维度不是 1024 → ✅ 打分前检查embeddings.shape[1];
  • ❌ 路径用了绝对路径或留空 → ✅ 使用与 Embedding 顺序对齐的仓库相对路径;
  • ❌ 一次性把数百万行塞进单进程 → ✅ 脚本是单进程设计,大规模语料请按目录/分片拆分,外部调度多次运行。

更多细节可阅读 README.md 与 README_ZH.md,各语言模型权重在 classifiers/python/ 等目录中。

七、总结

一句话回顾本教程的核心路径:

  1. 装环境:pip install numpy torch pyarrow;
  2. 写代码打分:LanguageScorers.load(...)+scorers.score(embeddings, paths);
  3. 跑批量任务:python scripts/score_parquet.py --apply-policy ...;
  4. 看结果:用category、algo_rel_score、quality_score和selected完成代码数据的算法相关性筛选。

掌握这套流程,你就能在自己的代码语料库上复现 L2 级的高精度代码筛选了。

  • 人工智能
  • 大模型
  • 机器学习
  • 数据清洗

【免费下载链接】UltraData-Code-L2-Classifier

项目地址:https://ai.gitcode.com/OpenBMB/UltraData-Code-L2-Classifier
点击查看免费下载

相关推荐

上一篇:OpenAI下场、谷歌连发两代,巨头混战AI音乐:开源YuE的窗口期还有多久
下一篇:Micro-World 2.0开发者指南:5步对接AMD-AGI世界模型仓库与动作维度扩展、微调完整策略

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考