这类问题我又碰上了一次。训练集用 set 做了完全相等去重,8 万条剩 7.6 万条,人工一看还有三成是同义改写,模型在少数几类问题上过拟合,验证集分数虚高。
第一反应是「同义改写没有做相似度聚类」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。去重只比较原始字符串;标点和空格差异被当成不同样本;去重后没有统计剩余簇的分布。
上来先用 MinHash 估算近重复比例
python -c "from datasketch import MinHash;print('minhash ready')"
再往下按相似度阈值聚类并抽样核对
python dedup.py --in train.jsonl --method minhash --thr 0.85 --report clusters.json
保留每簇一条并记录簇大小
python dedup.py --in train.jsonl --method minhash --thr 0.85 --keep one --out dedup.jsonl
等前面都确认过,再对比去重前后的类目分布
python -c "import json,collections;print(collections.Counter(json.loads(l)['label'] for l in open('dedup.jsonl')))"
改完先别撤,确认这几项。近重复簇从 4100 个降到 0,训练集剩下 5.1 万条,验证集分数回落 4 分,更接近线上人工抽检。
补一句。去重看的是语义而不是字节,MinHash 加人工抽样就够用;去掉重复后分数下降通常是好事,说明之前的分数是背出来的。这类问题最好一次改到位,反复小改反而容易把原因搅混。
