先把当时的情况摆出来。意图分类十二类,原来六条 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% 以内。

示例顺序是超参,换了顺序要重跑评测,别只凭感觉说提示词变好了。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189