这类问题我又碰上了一次。训练集用 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 加人工抽样就够用;去掉重复后分数下降通常是好事,说明之前的分数是背出来的。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189