现场是这样的。回归报告里只有一行均分 0.88,看着比上一版高,上线后差评集中在多轮追问和否定句,翻评测集才发现这两类样本一共只占 6%。

中间走过弯路,把「没有按意图分组统计,看不到分布」当成主因,改完现象没变。

这类报错背后常见的原因有几处,逐个排除就行。均分掩盖了小类别的系统性失败;评测集类别不均衡,长尾样本太少;失败样本跑完就丢,没有留档复盘。

上来先按意图给评测集打标签再分组算分

python -c "import pandas as pd;d=pd.read_csv('eval.csv');print(d.groupby('intent')['score'].mean())"

再往下输出每组最差的二十条样本

python -c "print(d.sort_values('score').head(20)[['intent','question','score']])"

给长尾类别补样本到至少五十条

python -c "print({'multi_turn':50,'negation':50})"

失败样本落盘并在下一次回归里复用

python -c "print(open('fails.jsonl','a').write('{}\n'))"

别只看报错消失,验证要多做一步。报告里能看到每个意图的分组分数,多轮与否定句两类的分数暴露出来,补样本后这两类提升了 12 个点。

提醒一点。均分是给汇报看的,分组分数才是给迭代用的,评测集里每一类样本太少时,任何总体提升都可能是噪声。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189