数据去重、去污染与质量标准

2026-10-31 · 依据 main@de0eae4 源码与 HANDOFF.MD 记录 · 只读核实,未重跑
12SWE-bench Verified 保护家族
596family_duplicate 拒收
0 / 355仅因家族重复被拒中,文件与已准入完全不重叠
1,735 → 989A/C 合并后训练视图

1 · 总流程

L0 家族隔离 repo 名 casefold+strip ∈ 12 个保护家族 → 拒 train/dev 按家族不交叉 dev ≥100 确认未见 split_isolation.py L1 精确 problem_key = sha256(去空白[:800])[:16] patch digest 相同 sample / source 唯一 family_recovery.py:52 L2 词汇模糊 SWE:改动文件集 Jaccard ≥0.8 重复 · (0,0.8) 复核 合成题:词 5-gram Jaccard ≥0.45 → hold family_cap3.py / review.py L3 语义 LLM 教师逐对判定 KEEP / DUPLICATE / REVIEW 先剔除 harness 噪声 每仓 ≤3(新增 ≤2) family_teacher.py L4 监督位置 同源 ids+mask 完全一致 A/C 监督位置取并集 (source, request, span) 每段只暴露一次 native_release.py:162 L0 门在准入、加载 split、生成 manifest、发布四处重复检查(fail-closed) 去污染 去重 → 由便宜确定到昂贵语义

2 · SWE 同仓库候选判定(family_recovery.classify)

候选轨迹与同家族已准入 peer 比 质量门失败(超长/无think…) 家族内没有已准入 peer same_problem / same_patch或 文件 Jaccard ≥ 0.8 0 < 文件 Jaccard < 0.8 reject review duplicate review LLM 教师(deepseek-flash) 输入:双方题面、补丁 substantive_jaccard (去掉 harness .gitignore 块) 无实质改动 → 机器直接 hold 文件不重叠 → provisional_keep KEEP DUPLICATE REVIEW 全部 training_eligible=0,进入候选 release 而非冻结集

3 · cap-one 拒收的回收漏斗

成功轨迹 1,186 规则 A / 被拒 704 482 只因家族重复 355 127 补质量门 + 文件重叠 262 超长 39 · 高重叠 54 → 教师判定 全部 KEEP 另:同仓库候选互比 33 对 → 4 对 J≥0.8 暂缓,29 对 KEEP 文件完全不重叠 = 0;KEEP 无独立标注或负对照,不等于语义非重复真值,也不生成 loss mask

4 · 合成题对 LiveCodeBench 的去污染(analysis/synthesis/review.py)

title + statementcasefold → [a-z0-9]+ 词 5-gram shinglesha1[:8] 指纹集合 倒排索引 · LCB test*精确 Jaccard 最近邻 倒排索引 · 同批合成题跳过自身 job max ≥ 0.45→ overlap_hold training_eligible恒为 0
阈值 0.45 未校准,只用于暂停,不证明独立;LCB 旧 L 池因来自累计 release_v6 已整池退役。

5 · 监督位置去重(A/C 合并)

合并前视图 1,735 合并后视图 989 唯一源任务数不变,只去掉重复曝光 同一源实例:先核对 token ids 与 mask 一致,再把 A/C 的 loss=1 位置取并集;B 池作局部恢复视图另计

6 · 对照通用三阶段方案

阶段通用做法本项目缺口
精确SHA-256 全文sha256(去空白前 800 字符)、patch digest、样本/来源/监督区间唯一只在同仓库内比;800 字符前缀相同即碰撞
词汇模糊字符 n-gram + MinHash-LSHSWE 比文件集合 Jaccard;合成题词 5-gram 精确 Jaccard无跨仓库题面比对;0.8 / 0.45 未校准
向量embedding 余弦LLM 教师逐对判定无 embedding 层;教师判定无负对照
去污染与 benchmark 逐题比对保护家族整仓隔离,4 个检查点 fail-closedfork / 改名仓库不在精确家族名覆盖内
——监督位置级去重(轨迹数据特有)

7 · 高质量数据的量化标准

高质量 = 学生会进入的状态 × 该状态下正确的下一步 × 真实执行验证且无泄漏。judge accepted 只证明结果修好,不证明每步可模仿:旧 936 条全部 accepted,抽样 H3 回合 71% 被双标注判不应模仿。
L1 硬门 · 逐条必过保护家族交集 0 · 独立 judge accepted · 无 HEAD 外 Git/上游副本 · ≤65,536 不截断 · 监督区间唯一 · 每家族 ≤3 L2 过程质量 · 按监督回合复读 0 · 单回合思考 <20K 且压缩比 ≥0.1 · 首写 ≤20 步 · 写后验证即停 ≤5 步 L3 数据集分布学生状态覆盖 >0 · 曝光倍数 ≈1.0× · Issue 广度优先 · 原生 read/edit 份额 L4 训练收益同预算受控对照,独立 dev ≥100 题 resolved ↑、症状率 ↓
L1–L3 判定“合格”,只有 L4 判定“有效”。目前尚无 L4 对照,任何批次都不能称为已证实的高质量。
层指标标准状态
L1去污染与 12 个保护家族交集 0;train / dev / benchmark 家族互斥现有
L1真实正确全新环境独立 judge accepted;基线 F2P 失败、P2P 通过;修复后全部通过现有
L1测试判别力F2P ≥2 节点或有公开 probe 补强(旧数据 330/936 仅 1 节点)建议
L1无答案泄漏HEAD 外对象 / 上游副本读取 0,生成期拒绝重采样;R2/R3 意图回合不监督现有
L1训练合同≤65,536 不截断;仅有效 assistant 新输出 loss=1现有
L1去重监督区间只曝光一次;一 Issue 一条;每家族 ≤3现有
L2复读循环近 5 次调用同一调用 ≥3 次的监督回合占比 0(基座 26/50 题出现)建议
L2推理失控单回合思考 <20K 字符且 deflate 压缩比 ≥0.1(基座 98 回合写满上限,占输出 60%)建议
L2迟迟不动手首次文件写入 ≤ 第 20 步(基座中位 16 / p90 97;教师 9 / 18)建议
L2修好不停最后写入后一次可见验证即停,≤5 步,natural_stop(基座中位 20 步;教师 3 步)建议
L2验证最后编辑后至少一次测试/复现,用项目自身入口(旧数据 pytest 96.7%)建议
L2失败工具调用无后续恢复的失败调用 loss=0(旧监督 read 95%、edit 74% 失败)建议
L2抽样审计双标注“不应模仿”率 <10%,附 95% CI(H1/H2 8%,H3 71%)建议
L3学生状态覆盖重复 / 截断后 / 第 100 回合后 / ≥64K 上下文的监督份额从≈0 提升;目标配方 P2 45 / P1 40 / P3 15(按监督 token,待 pilot)待验证
L3重复曝光同时报告唯一与累计监督 token,倍数≈1.0×(旧 1,735 视图 / 989 唯一)现有
L3工具分布提高原生 read/edit 成功份额(旧 bash 96.1%)建议
L4训练收益P1 / P1+P2 / P1+P2+P3,同初始化、同 LoRA、同监督 token 预算;独立 dev ≥100 题官方判分未执行

8 · 代码位置

环节位置
保护家族清单swefactory_self/configs/data/protected_swe_families.json
split 加载拒收storage/native_release.py:84
manifest 拒收training/swe_world/prepare_lora_data.py · export_map / manifest
problem_key / Jaccard / 判定analysis/swe/family_recovery.py:51 · :64 · classify
cap-3 规则analysis/swe/cap3_rules.py · family_problems;analysis/swe/family_cap3.py:54
教师去重analysis/swe/family_teacher.py
合成题 5-gramanalysis/synthesis/review.py:114 · finish_overlap
监督区间唯一 / 跨 providerstorage/native_release.py:162 · :174 · :180