先把当时的情况摆出来。意图分类十二类,原来六条 few-shot 按类别排,把与 query 最像的那条挪到最前面后,测试集准确率从 0.91 掉到 0.72,退款类大量被判成物流类。
真正麻烦的地方在于,几个原因的现象几乎一样。示例里最后一条与待分类问题最像 被最近邻效应带偏。另一种情况是每类只给一条示例 类别边界没有对比样本。
不容易想到的是,示例标签用中文名 输出却要求英文枚举。还有一种情况,示例长度差异大 长示例稀释了短示例。
固定测试集跑一遍基线
python eval_cls.py --file test.jsonl --out base.json
接着按类别交错排示例 每类补到两条
python build_fs.py --per-class 2 --interleave
标签统一改成英文枚举 提示词同步
python eval_cls.py --file test.jsonl --prompt p2.txt --out inst.json
等前面都确认过,再对比两次结果的混淆矩阵
python cm.py --a base.json --b inst.json --labels 12
怎么算真的好了,看的是同一批现象。准确率回到 0.9 以上,退款与物流的互相误判从 19% 降到 3% 以内。
示例顺序是超参,换了顺序要重跑评测,别只凭感觉说提示词变好了。这类问题最好一次改到位,反复小改反而容易把原因搅混。
