Calibrate Before Use: Improving Few-Shot Performance of Language Models
Tony Z. Zhao, Eric Wallace, Shi Feng, Dan Klein, Sameer Singh
ICML 2021
cs.CL, cs.LG
2021-02-19
UC Berkeley 等发现 GPT-3 少样本对示例顺序极度敏感:SST-2 同一组 4 条示例换序可从 54.3% 到 93.4%。用 N/A 等空输入估计先验并对角缩放后,平均准确率最高涨 30.0 个点。
GPT-3 把几条训练样本写进 prompt,就能做分类、抽槽、补事实,不必微调参数。这个少样本接口的真实问题是不稳定:换模板、换例子、甚至只调换例子顺序,准确率可以从接近随机跳到接近当时的 SOTA。
SST-2、GPT-3 2.7B、4-shot,同一组 4 条样本换排列,准确率从 54.3% 到 93.4%。附录更直白:两条样本对调顺序,从 88.5% 掉到 51.3%。加到 16-shot 方差仍然大。DBPedia 从 0-shot 的 36.0% 掉到 1-shot 的 25.9%。靠手写 prompt 的人拿不到稳定数字。
根因是三种会把输出分布整体平移的偏差。
多数标签偏差:prompt 里哪种答案多,模型就爱重复哪种。4-shot LAMA、GPT-3 2.7B 上,50.2% 的预测是四条训练答案之一的重复,真实该重复的比例只有 24.7%。1-shot 比 0-shot 更差,常常是模型在复读那一条的标签。
近因偏差:更爱复读靠近 prompt 末尾的答案。4 条情感样本排成「正正正负」,验证集上近 90% 预测成 Negative,尽管四分之三的例子是 Positive。LAMA 上,第 1 到第 4 条训练答案被多预测的幅度分别是 8.5%、8.3%、14.3%、16.1%。近因可以压过多数标签。
常见词偏差:更爱预训练里常见的 token。平衡的 14 类 DBPedia 上,「book」被预测的次数是「artist」的 11 倍;标签在 Google Ngrams 上的频率与预测率相关系数 r=0.67。
这些偏差合在一起,往往只是把决策边界平移。某个 SST-2 prompt 里,测试句换成「N/A」,模型给出 61.8% Positive;默认 50% 阈值会大量假阳性。阈值若能调到 0.68,验证集就能到 94%。
校准因此不需要新标注。把内容为空的探针塞进同一条 prompt(实验对「N/A」「[MASK]」、空字符串三个概率取平均),得到先验 pcf。分类任务把对角矩阵 W 设成 1/pcf、偏置为 0,按先验缩放,让空输入在各类上均匀。生成任务词表约 5 万,对角矩阵太大,改成偏置设成 -pcf、W 为单位阵,并且只校准第一个 token。多一次前向,几行代码。
这里的「校准」是仪器调零,不是 Guo et al. 那种把置信度对齐准确率的统计校准。当时 OpenAI API 只给概率不给 logits,仿射变换打在 softmax 之后。
固定模板,随机抽 5 组 0/1/4/8-shot 样本,不刻意平衡标签。基线是 Brown et al. 的贪心解码。
| 设置 | 基线 | 校准后 |
| AGNews, GPT-3 175B, 0-shot | 43.9 | 73.9 |
| DBPedia, GPT-3 175B, 0-shot | 22.0 | 59.7 |
| SST-2, GPT-3 2.7B, 8-shot | 54.0 | 82.0 |
| AGNews, GPT-3 2.7B, 4-shot | 43.3 | 71.1 |
| TREC, GPT-3 175B, 1-shot | 57.7 | 75.7 |
| DBPedia, GPT-3 2.7B, 1-shot | 25.9 | 61.6 |
最大绝对提升 30.0 个点,出现在 AGNews 175B 0-shot。带校准的 2.7B 有时超过未校准的 175B,最大领先 19.3 个点,参数量差五十倍以上。多数任务上跨样本方差下降。0-shot 掉到 1-shot 的四次里,校准修掉三次。
不是处处都涨。RTE 上 175B 的 0-shot 持平在 57.8,8-shot 从 66.2 微降到 65.5。LAMA 主要在 0-shot 有用:2.7B 从 14.0 到 22.7,175B 从 23.5 到 30.1;4-shot 和 8-shot 几乎不动。GPT-2 1.5B 同样不稳定,同样能直接套这套校准。
空输入的选择有影响,但很多都能用。1-shot SST-2 / 0-shot AGNews:基线 66.5 / 48.5,「N/A」74.2 / 64.5,三输入集成 79.0 / 66.5,乱码字符串也能到 79.3 / 64.5。AGNews 上,无验证集的内容自由校准已经接近用验证集搜最优对角 W 的 oracle。
这是少样本 in-context learning 早期最清楚的一篇失败模式加补丁。它把 prompt 工程的一部分从手感变成可测量的输出偏移:先测空输入的先验,再除回去。今天做分类、多选题、闭集抽槽,只要能拿到各类别的 token 概率,对角缩放仍然值得作为默认后处理。代价是多一次前向,不用标注。
它没有取消 prompt 工程。论文自己写,校准让最好、平均、最差 prompt 的准确率更接近、整体更高,但差距还在。对开源模型,logits 比 API 概率更干净,仿射变换应打在 softmax 前。对开放生成、思维链、工具调用,只校准首 token 不够。
另一个教训:少样本论文如果只报一组 prompt 的点估计,那个数字可能被示例顺序撑起来。这篇建议后续探测与评测都带上校准,否则会低估模型。
校准不总是正向。RTE 几乎无增益,LAMA 在有示例之后饱和,个别抽取任务(ATIS-D、GPT-3 13B 1-shot)校准后均值还略降(97.9 到 95.5)。内容自由输入在 AGNews 上挑过,再复用到所有数据集;任务特化的探针只在 LAMA 上试了「N/A was born in」这一种。
实验预算卡在 8-shot,当时调 OpenAI API 更贵。16-shot 的方差曲线画了,完整校准表没有。仿射打在概率上是 API 限制,不是最优形式。生成任务只动第一个 token,开放生成被标成未来工作。
外部有效性更需要打折。这是 2021 年的 GPT-3 和 GPT-2,指令微调、RLHF、chat 模板会改写多数标签和近因偏差的形态。今天把「N/A」塞进对话模板,先验估计可能不准。论文也没验证校准后的概率是否在统计意义上更校准,标题里的 calibrate 容易被误读成置信度对齐。