随着GPT-3等超大模型的兴起,in-context learning的形式也流行起来。在in-context learning中,模型不根据下游任务调整参数,而是将下游任务的输入输出接起来之后作为prompt,引导模型根据测试集的输入生成预测结果。该方法的表现可以大幅超越零监督学习,并给大模型高效运用提供了新的思路。
然而,in-context learning中,模型真的学习了下游任务么?作为prompt的训练样本,到底是如何让模型work的?
本文作者发现,in-context learning学习的并不是输入与标注之间的关联,而是通过展示数据形式,来激活预训练模型的能力。此外还有两个附带的结论:(1)在meta learning的环境下,in-context learning的这一特点更为明显;(2)因为标签不重要,所以可以用无标注领域内数据做in-context zero shot learning。
论文题目:Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?论文链接:https://arxiv.org/abs/2202.12837项目地址:https://github.com/Alrope123/rethinking-demonstrations
背景
大规模预训练模型的无监督预测:对预训练好的语言模型,输入测试数据的输入(x),直接通过语言模型预测输出(P(y|x))。如下图所示。其中minimal是最简单的方式,mannual是加入人工设计的部分。蓝色是需要预测的标签部分。这篇论文中,作者默认采用Minimal的方式处理测试数据。
而in-context learning,类似于上述的无监督预测,但在输入测试样例前输入少量标注数据。同样不需要参数调整,直接训练。相当于在无监督预测的基础上,引入如下前缀:
而本文主要探究的,就是in-context learning中,模型究竟从加入的这段前缀中学到了什么。
实验设置
本文主要探究了6种不同的预训练模型,其中,MetaICL采用了大量的下游任务以in-context learning的形式进行了元学习:
对于每个模型,作者采用了两种应用方式,即direct和channel:
作者一共探究了26个数据集,其中16个分类任务和10个多项选择任务。
在实验细节上,作者对于每个instance,展示了16个标注样例。每组设置(26个数据集6个预训练模型2组使用方式)用5个随机数种子跑了5遍。作者在 airseq 13B 和 GPT-3 两个大模型上,出于算力的考虑只做了6个数据集,和3个随机数种子。
由于实验较多,作者一般仅汇报各种均值。
模型没有学习标签
这篇文章的第一个结论是:in-context learning中,模型并没有学习输入和标签之间的对应关系。
通过给in-context的训练样本赋予随机标签,可以构建随机标注的设置。从下图中可以看出,无论是分类任务(上),还是多项选择任务(下),随机标注设置下(红)模型表现均和正确标注(黄)表现相当,且明显超过没有in-context样本的zero-shot 设置(蓝)。
这一点趋势,在改变随机标签的in-context样本比例,以及改变in-context样本数量时,都是保持的。选用人工设计的in-context展示形式(prompt),结论也不发生改变。
下图调整的是改变随机标签的in-context样本比例。
下图左边是Channel MetaICL,右边是 Direct GPT-J,K调的是展示样例的数目。
下图+T表示采用人工设计的in-context展示形式。
模型学习任务形式
这篇文章的第二个结论是:in-context learning中,模型学到(激活)了输入数据、预测标签的分布,以及这种数据+label的语言表达形式。
下图中,青绿色的柱子为用(从外部语料中)随机采样的句子替换输入句子的设置。可以看到,模型表现明显下降。因此,in-context learning中,展示样本和测试样本在语料分布上的一致性比较中央。猜测模型很可能学到了展示样本的语言风格。
下图中,青绿色的柱子为用随机词汇替代展示样本中的标签。可以看到,模型表现明显下降。因此,in-context learning中,展示样本中的标签内容与测试样本的标签内容的一致性是比较重要的。猜测模型很可能从展示样本中学到了标签词汇的分布。
下图中,分别用labels only(深紫)和no labels(深绿)来探索展示模式的差异对模型表现的影响。可以看到,模型相对于上面两图的OOD setting而言,都有了进一步的下降。这可以表明,除了领域内,输入和标签表达方式之外,in-context learning中模型还会学习这种输入输出的语言模式。
总结与讨论
模型有没有学习?
作者认为,传统意义上的学习指模型建模输入样本和输出样本之间的关联(P(y|x)或P(x,y)∝P(x|y))。在这种意义下,in-context learning并没有学习。
然而,模型可以通过展示样例,中的输入、输出、及输入+输出的语言表达风格来提升表现。在一定程度上,这种利用前缀输入激活大模型语言表达建模能力的方式也算是一种学习。
因此,这也表明:大模型零监督能力远超预期。
毕竟,学习表达形式、语言风格与标签形式,不需要标注数据的参与。大模型潜在地就具有了这种(分类)能力。
当然,反过来,也表明了in-context learning的局限在于,它不能真正建模输入和输出之间的关系,因此在一些输入输出之间的关系必然没有被无监督预训练任务所建模的下游任务而言,in-context learning很可能失效。
不过,看起来目前大多数传统NLP的任务都不会满足上述“失效”设定。
额外的一点启示
这篇文章的一作 Sewon Min 近期创作了很多相关主题的高质量工作,包括:
- Noisy Channel Language Model Prompting for Few-Shot Text Classification ~ https://arxiv.org/pdf/2108.04106.pdf
- MetaICL: Learning to Learn In Context ~ https://arxiv.org/pdf/2110.15943.pdf
平时有些同学做了很多实验,一到写论文就什么实验结果都想往论文里放。
这里还是可以学习一下 Sewon Min。这三篇文章arxiv的时间跨度只有6个月,很多实验甚至是有overlap的,基本可以判断为一作同时在做的几项工作。作者从不同的角度去分割了这些实验,以不同的汇报方式,讲出了三个故事,每个故事看起来都完整且独立,看起来就很棒。