为什么去重会误删
训练数据去重最容易犯的错不是删不干净而是把高价值样本一起删掉。⚠️ 当指令微调语料混进模板答案、合成样本和人工标注样本后单看哈希或相似度阈值往往会把长尾问题、硬负例和金标答案当成重复噪声。更麻烦的是去重目标如果只盯删除率很快就会偏离训练目标。 真正该保住的不是绝对唯一而是来源不同、表达相近但信息增量更高的样本它们往往决定模型在边界场景里会不会突然掉线。[外链图片转存中…(img-mQRBlVck-1777612718449)]图 1训练数据去重先看来源再看相似度为什么去重会误删很多团队先做MD5再做MinHash或embedding相似度。 这个顺序本身没错问题在于它只回答“像不像”不回答“值不值”。同一句话如果来自不同版本、不同标注员或不同任务切片训练价值并不一样。更常见的误区是把近似重复和语义重复混成一个桶。 近似重复适合压缩冗余语义重复却可能包含更强的监督信号如果阈值一刀切删掉的往往不是噪声而是最能拉开模型上限的边界样本。图 2去重阈值不是越低越好关键是保留样本语义一次复盘怎么做在一套约12万条指令微调样本的抽样复盘里团队把三种策略并排看纯哈希、语义去重、带保真回收的混合策略。 结果很直观纯哈希最省算力却几乎不处理改写样本语义去重更狠但对硬负例和金标样本的误伤也最大。策略重复检出高价值样本保留计算成本结论MD5仅精确去重低高低只能挡住原文复制MinHash 语义阈值高中中容易误删边界样本混合策略 保真回收高高中高最适合生产治理defkeep_sample(sample,seen_hashes,seen_vectors):ifsample.kindin{gold,eval,hard_negative}:returnTrueifsample.md5inseen_hashes:returnFalsesimmax(cosine(sample.vec,v)forvinseen_vectors)ifseen_vectorselse0.0score0.45*sample.minhash0.35*sim0.20*sample.value_scorereturnscore0.82这段逻辑背后的意思很简单去重不是一刀切而是“评分 例外”。✅ 只要样本被打上金标、评测集、硬负例这类标签就应该优先保留其余样本再按相似度和价值分打分才不会把训练信号一起删掉。图 3去重结果必须和训练目标一起复盘真正该保留什么笔者更倾向把去重看成数据版本治理而不是清洗任务。 每次删除都要能追到来源、阈值、版本和保留原因否则后面一旦出现回归团队根本说不清到底是模型退化还是数据被误删。更稳的做法是给样本建立“保留优先级”。 生产事故复盘、长尾问题集、人工修正样本和新版本事实文档通常都不该和普通重复样本放在同一条删除链路里它们应该走白名单、人工复核或延迟删除。[外链图片转存中…(img-3g2x3yI1-1777612718459)]图 4去重真正要解决的是数据版本可追溯未来 3 到 6 个月接下来训练数据治理会从“离线去重”走向“切片保留”。 也就是说系统不再只算相似度还会同时看任务类型、来源可信度、标注质量和历史回归表现最后给出可解释的保留理由。一句话总结去重的目标不是把语料删得越少越好也不是删得越狠越好而是让每一次删除都对训练结果负责。⭐ 你们现在做数据去重时优先保住的是重复率还是模型最需要的那批边界样本