Calibrate Before Use: Improving Few-Shot Performance of Language Models

  • 来源:ICML 2021
  • 机构:UCB(大四学生 Orz)
  • 任务:研究 in-context learning, prompt engineering
  • 动机:in-context learning 性能不稳定
  • 性能不稳定的所在:强烈依靠选择的训练样本、强烈依靠
  • 性能不稳定的具体体现:会被数据标签分布不均 bias、会更偏向最近的 demonstration 而 bias、会选择预训练语料里更常见的 token 做为预测的 verbalizer 而 bias
  • 最后得到的预测结果就是这样的,负例本应该有很小的 logits(<0.5)
  • Contextual Calibration:对于空的输入,应该也有空的输入,从而让输入输出的“0刻度线”对齐(就跟很多仪器一样,比如天平要用螺丝先调平(太妙了))
    • 具体实现也很简单,就是在后面再接一层线性层,将输出的 scale 调整到正常的 scale
    • 但是小样本很难学这个 W 和 b,咋办呢?具体地,线性层是 q = softmax(Wp+b),p 是原来的各类 logits。作者就将 W 设置成输入 null 得到的 p 的逆,b 设为零,这样相当于让 null 输入的时候,得到一个 uniform 分布,即 caliberate 的意思。
  • 实验:
    • 结果稳定了很多
    • 不同 {prompt、数据顺序、数据} 带来的平均性能、最低性能、方差都有提升
    • 用 dev 找最好的 W(因为 W 其实也只是由一组实验决定的),还能提升

发表评论