记录一下那天晚上的排查过程。清洗完的训练集有八十万条,抽样发现大量只改了几个词的相似样本,训练后模型明显在背模板。
刚开始盯着「去重只做了完全匹配,相似文本没处理」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。爬取数据里同一内容被多次转载。还有一种是模板生成的样本只替换了实体词。
另外,不同来源编码不同,同一句话看起来不一样。
做规范化再计算相似度
python -c "import re;print(re.sub(r'\s+','',text).lower()[:80])"
接着用 minhash 做近似去重
python dedup.py --input clean.jsonl --threshold 0.8 --output dedup.jsonl
再往下统计去重前后的数量变化
python -c "print(before, after, before-after)"
剩下的就是抽样人工检查剩余样本
python -c "import random;print(random.sample(open('dedup.jsonl').readlines(),5))")
别只看报错消失,验证要多做一步。去重后数据量下降三成左右,抽样看不到明显重复,训练时模型不再频繁输出同一段模板。
这里还有个坑。去重阈值太低会误删正常样本,太高又去不干净,先用小样本人工看几组边界案例,再决定阈值。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。