记录一下那天晚上的排查过程。SaaS 版本用同一套 3000 条评测集给 40 个租户打分,某租户看到自己 92 分很满意,实际这批题里有 60% 在他的业务语料里出现过。
刚开始盯着「租户侧上传的文档被误并入评测池」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。评测集从公共语料构建,与租户训练数据重叠。少数情况下是打分时没有按租户切分数据来源。
不容易想到的是,指标只报总分,没有区分见过的题与没见过的题。
算评测集与租户语料的重复率
python -c "import pandas as pd;a=set(open('eval.txt',encoding='utf-8'));b=set(open('tenant.txt',encoding='utf-8'));print(len(a&b)/len(a))"
然后按租户建立独立留出集
python split_by_tenant.py --tenant t_1024 --eval eval_pool/ --out tenant_eval/
接着在评测报告里分开统计见过与未见样本
python score.py --eval tenant_eval/t_1024.jsonl --report per_tenant.csv
等前面都确认过,再把重复样本从评测池中剔除
python dedup.py --eval eval_pool/ --tenant tenant.txt --out clean_pool/
怎么算真的好了,看的是同一批现象。该租户在去重后的留出集上分数回落到 71 分,报告里两类样本分开统计,租户对指标口径不再有异议。
提醒一点。评测集一旦和训练语料有交集,分数就只是记忆能力的体现,多租户场景必须按租户做留出而不是共用一份。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
