UltraData-Code-L2-Classifier config.json完全讲解3种方法自定义代码筛选阈值含per-language按语言设置UltraData-Code-L2-Classifier是一套面向 11 种编程语言的代码文件级筛选打分器而仓库根目录的 config.json 正是自定义代码筛选阈值的核心入口通过selection_policy字段你可以调整algo_rel_min算法相关性阈值与quality_min代码质量阈值两个分数门槛以及exclude_categories否决类别还能利用per_language为每种语言单独设置筛选阈值。本文将完整讲解 config.json 的每个字段并给出 3 种从全局到按语言的阈值自定义方法帮你快速找到最适合自己数据的代码筛选阈值。️ 先看全局筛选阈值在 L2 流水线中的位置UltraData-Code 把代码数据分为 L0仓库归档、L1标准化自然代码、L2算法导向筛选、L3任务导向合成四个层级。L2 分类器的工作就是对 L1 中每个代码文件打分再按阈值决定保留还是舍弃最终产出约 400B tokens、覆盖 11 种语言的高质量代码语料。也就是说筛选阈值就是 L2 的闸门——阈值松保留文件多阈值严保留的算法密集代码更精。而这个闸门由 config.json 统一管理。 config.json 完整结构逐字段解析下面就是 config.json 的完整内容约 28 行我们逐块拆解{ format: code-selection-scorers/1, embedding_model: { repo_id: Qwen/Qwen3-Embedding-0.6B, dim: 1024, training_max_tokens: 8192 }, languages: [ cpp, csharp, go, java, javascript, php, python, r, ruby, rust, shell ], selection_policy: { algo_rel_min: 0.8, quality_min: 3.0, exclude_categories: [ EXCLUDE ], per_language: {} } }字段作用说明format格式版本标识固定值code-selection-scorers/1一般不用动embedding_model输入 embedding 规格要求 1024 维、由 Qwen3-Embedding-0.6B 生成属于模型约束不是筛选开关languages支持的语言列表对应 classifiers/ 下的 11 个语言目录selection_policy⭐ 筛选策略自定义代码筛选阈值的核心字段重点看这里selection_policy内部包含 4 个子字段子字段默认值取值范围含义algo_rel_min0.80 ~ 1algo_rel_score算法相关性分的保留下限quality_min3.00 ~ 10quality_score代码质量分的保留下限exclude_categories[EXCLUDE]角色类别列表命中这些文件角色直接否决不参与保留per_language{}对象按语言覆盖上述任意阈值详见方法 2一个文件最终被保留selectedtrue的完整规则是algo_rel_score algo_rel_min且category不在exclude_categories中且quality_score quality_min方法 1直接修改 config.json 共享默认值全局阈值这是最直接的方式——把selection_policy里的默认值改成你想要的数对所有 11 种语言统一生效。例如想更严格地筛代码提高相关性阈值到 0.85、质量阈值到 4.0selection_policy: { algo_rel_min: 0.85, quality_min: 4.0, exclude_categories: [EXCLUDE, CONFIG], per_language: {} }适合场景所有语言使用同一套松紧标准追求简单一致。方法 2用 per_language 按语言设置筛选阈值不同语言的算法密集代码分布并不一样。per_language允许你为某个语言单独覆盖任意阈值其余语言仍走共享默认值。例如让r语言的相关性门槛更严格scripts/score_parquet.py 中的官方示例selection_policy: { algo_rel_min: 0.8, quality_min: 3.0, exclude_categories: [EXCLUDE], per_language: { r: { algo_rel_min: 0.9 }, shell: { quality_min: 4.5 } } }含义是只有r语言的相关性下限变为 0.9shell的质量下限变为 4.5其余 9 种语言保持默认。per_language里可以写algo_rel_min、quality_min、exclude_categories中的任意组合没写的字段自动继承共享默认值。适合场景某几种语言数据偏噪或偏宽松需要单独拧松或拧紧闸门。方法 3命令行参数临时覆盖阈值如果只是这一次运行想用不同的阈值比如做 A/B 对比实验不必改文件直接用 scripts/score_parquet.py 的三个命令行参数覆盖--algo-rel-min相关性阈值--quality-min质量阈值--exclude-categories否决类别逗号分隔python scripts/score_parquet.py \ --scorers classifiers/python \ --input data/input \ --output-root data/output \ --batch-size 1024 \ --apply-policy \ --algo-rel-min 0.9 \ --quality-min 5.0 \ --exclude-categories EXCLUDE,CONFIG⚠️ 注意两点必须带--apply-policy阈值策略才会生效并写入selected列不带则只做打分不受策略影响。selected是标记列不会删除未通过阈值的行方便你自行统计不同阈值下的保留率。⚖️ 3 种方法冲突时谁说了算当同一阈值在多处出现时优先级为源码依据见 scripts/score_parquet.py命令行参数 per_language按语言覆盖 config.json共享默认值运行时脚本会打印一行策略摘要一眼确认实际生效的阈值及其来源shared或per_languagepolicy [r, per_language defaults]: algo_rel_score 0.9 AND category not in [EXCLUDE] AND quality_score 3.0这是排查为什么阈值没生效最有用的线索。另外如果 config.json 缺失或格式错误脚本会明确报错并提示改用命令行参数显式传入阈值不会静默使用错误配置。 实用建议筛选阈值该怎么选先看分布再定阈值先跑一轮--apply-policy不改任何文件观察输出中algo_rel_score与quality_score的分布再决定0.8是否适合你的数据相关性阈值管算法浓度质量阈值管代码成色想要更偏算法逻辑的语料优先调高algo_rel_min想要过滤烂代码优先调高quality_min想排除配置、数据类文件把它们加入exclude_categories如CONFIG、DATA比单纯调阈值更精准逐语言微调全局阈值跑通后发现个别语言保留率明显异常时再用per_language单点修正避免牵一发动全身。L2 层筛选带来的收益是实打实的在 1B 模型的受控持续预训练对比中L2 数据相比 L1 在 EvalPlus 与 MultiPL-E 上的 pass1 分别提升 7.80 与 5.13 个百分点而阈值正是控制这份收益的关键旋钮。 小结需求推荐方法生效范围所有语言统一调阈值修改selection_policy共享默认值全局持久生效只调整某一两种语言per_language覆盖指定语言持久生效一次性实验对比--algo-rel-min等命令行参数仅本次运行只要认准algo_rel_min、quality_min、exclude_categories三个字段配合命令行 per_language 共享默认的优先级规则你就能灵活驾驭 config.json 中的每一处筛选阈值为 classifiers/ 下的 11 套语言打分器调出最合适的代码筛选策略。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?