如何在Python中使用UltraData-Code-L2-Classifier:新手必学的代码Embedding打分完整教程
- 人工智能
- 大模型
- 机器学习
- 数据清洗
【免费下载链接】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-Classifier2. 安装运行依赖
只需要 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'])几个新手必知的关键点:
- Embedding 必须是 1024 维,且要由 Qwen3-Embedding-0.6B 这类同维度编码器产出(维度会被检查,编码器不对则分数不可信);
paths必须是真实的仓库相对路径。相关性模型 A 会把路径编码为 256 维哈希特征(见 scripts/path_features.py)拼接进输入,路径为空会影响分数;- 返回值含义:
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 |
--device | cpu或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/ 等目录中。
七、总结
一句话回顾本教程的核心路径:
- 装环境:
pip install numpy torch pyarrow; - 写代码打分:
LanguageScorers.load(...)+scorers.score(embeddings, paths); - 跑批量任务:
python scripts/score_parquet.py --apply-policy ...; - 看结果:用
category、algo_rel_score、quality_score和selected完成代码数据的算法相关性筛选。
掌握这套流程,你就能在自己的代码语料库上复现 L2 级的高精度代码筛选了。
- 人工智能
- 大模型
- 机器学习
- 数据清洗
【免费下载链接】UltraData-Code-L2-Classifier
相关推荐
UltraData-Code-L2-Classifier 快速开始:5分钟从安装到跑通11种编程语言的代码文件打分
UltraData Code L2 Classifier 快速开始:5分钟从安装到跑通11种编程语言的代码文件打分 UltraData Code L2 Clas
人工智能大模型机器学习数据清洗如何快速上手 UltraData-Stack-v3-L2:从零加载代码语料的完整教程(含可运行代码)
如何快速上手 UltraData Stack v3 L2:从零加载代码语料的完整教程(含可运行代码) 📌 这是什么数据集? UltraData Stack v
数据集大模型UltraData-Code-L2-Classifier质量模型为何打0-10分?两阶段序数打分机制深度解析
UltraData Code L2 Classifier质量模型为何打0 10分?两阶段序数打分机制深度解析 UltraData Code L2 Classif
人工智能大模型机器学习数据清洗
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考