3.2_上下文学习

3.2 上下文学习

随着模型训练数据规模和参数数量的持续扩大,大语言模型涌现出了上下文学习(In-Context Learning,ICL)能力。其使得语言模型能够通过给定的任务说明或示例等信息来掌握处理新任务的能力。引入上下文学习,我们不再需要针对某个任务训练一个模型或者在预训练模型上进行费时费力的微调,就可以快速适应一些下游任务。这使得用户可以仅仅通过页面或者API的方式即可利用大语言模型来解决下游任务,为“语言模型即服务”(LLM as a Service)模式奠定了坚实的能力基础。本节从上下文学习的定义,演示示例选择,和影响其性能的因素,对上下文学习展开介绍。

3.2.1 上下文学习的定义

上下文学习(In-Context Learning, ICL)[2]是一种通过构造特定的 Prompt,来使得语言模型理解并学习下游任务的范式,这些特定的 Prompt 中可以包含演示示例,任务说明等元素。上下文学习实现的关键在于如何设计有效的 Prompt,以引导模型理解任务的上下文和目标。通常,这些 Prompt 会包含任务说明以及一系列的示例,模型能够从这些上下文信息中学习任务的逻辑和规则,从而在没有额外训练的情况下,生成符合任务要求的输出。基于以上优点,上下文学习被广泛应用于解决垂域任务,数据增强,智能代理等应用中。

在上下文学习中,Prompt通常包含几个与待解决任务相关的演示示例,以展示任务输入与预期输出。这些示例按照特定顺序组成上下文,并与问题拼接共同


(a) 上下文学习做分类任务。


(b)上下文学习做生成任务。
图3.5: 上下文学习示例。

组成 Prompt 输入给大语言模型。大语言模型从上下文中学习任务范式,同时利用模型自身的能力对任务进行作答。在图 3.5的例子 (a) 中,模型被用于文本情感分类任务,给定一段文本,模型能够判断其情感倾向,识别出文本表达的是积极还是消极情绪。图 3.5的例子 (b) 则展示了数学运算任务,模型会仿照示例的形式,直接给出对应的运算结果。按照示例数量的不同,上下文学习可以呈现出多种形式:零样本(Zero-shot)上下文学习、单样本(One-shot)上下文学习和少样本(Few-shot)上下文学习 [2],如图 3.6所示。

  • 零样本上下文学习:在此种学习方式下,仅需向模型提供任务说明,而无需提供任何示例。其具有强大的场景泛化能力。但零样本学习的性能完全依赖于大语言模型的能力,并且在处理任务时可能表现欠佳。

  • 单样本上下文学习:这种方式仅需为模型提供一个示例,贴合人类“举一反三”的学习模式。不过,单样本学习的效果强依赖于示例相对于任务的代表性。

  • 少样本上下文学习:这种方法通过为模型提供少量的示例(通常为几个至十几个),显著提升模型在特定任务上的表现。但在,示例的增加会显著增加大语言模型推理时的计算成本。示例的代表性和多样性也将影响其生成效果。

Zero-shot


图3.6: 三种上下文学习形式的示例。

判断下面句子的情感为积极还是消极

小浣熊连续吃了20包烧堵味的干脆面,撑得肚子疼。

One-shot

判断下面句子的情感为积极还是消极

待分类的句子:小浣熊连续吃了2口烧烤味的干脆面,撑得肚子疼。

针对此问题有如下示例:

示例:小浣熊吃了一包麻辣味的干脆面,辣得肚子疼。\n消极

Few-shot

判断下面句子的情感为积极还是消极

待分类的句子:小浣熊连续吃了2口包烧烤味的干脆面,撑得肚子疼。

针对此问题有如下示例:

示例:浣熊爸爸背了一箱干腹面走来,小浣熊手舞足蹈迎接爸爸。n积极

示例2:小浣熊吃了一包麻辣味的干脆面,辣得肚子疼。n消极

示例3:小浣熊吃了一包烧烤味的干脆面,脸上露出了满意的笑容。n积极

尽管上下文学习在许多任务中表现出色,但它为何奏效仍然是一个重要的研究问题。对此,斯坦福大学的一项研究[40]提供了一种解释——“将上下文学习视为隐式贝叶斯推理”。在大语言模型的预训练阶段,模型从大量文本中学习潜在的概念。当运用上下文学习进行推理时,大语言模型借助演示示例来“锚定”其在预训练期间所习得的相关概念,从而进行上下文学习,并对问题进行预测。以图3.5为例,模型之所以能给出正确答案,是因为模型在预训练时已经学习到与情感相关的概念,比如积极情感的表现形式(满意的笑容,手舞足蹈……)、句法结构和句法关系等等,当模型在推理时,借助“浣熊吃了一包麻辣味的干脆面,辣得肚子疼。\n消极”等示例“锚定”到情感等相关概念,并基于这些概念,给出问题答案。

3.2.2 演示示例选择

在上下文学习中,演示示例在引导大语言模型理解任务中扮演着重要作用,其内容和质量直接影响着学习效果。因此,合理选择演示示例对提升上下文学习性能至关重要。演示示例选择主要依靠相似性和多样性[20]:

  • 相似性是指精心挑选出与待解决问题最为相近的示例。相似性可以从多个层面进行度量,如语言层面的相似性(包括关键字匹配或语义相似度匹配)、结构相似性等等。通过选取相似的示例,能够为模型提供与待解决问题接近的参照,使大语言模型更易理解该问题。

  • 多样性则要求所选的示例涵盖尽量广的内容,扩大演示示例对待解决问题的覆盖范围。多样化的示例能够帮助模型从不同的角度去理解任务,增强其应对各种问题的能力。

除了相似性和多样性,在某些任务中,还需对任务相关的因素进行考虑。本节主要关注相似性和多样性两个因素,并探讨基于相似性和多样性如何从大量候选示例中选择出合适的演示示例。接下来对基于相似性和多样性的三类示例选择方法[20]展开介绍:

1. 直接检索

给定一组候选示例,直接检索的方法依据候选示例与待解决问题间的相似性对候选示例进行排序,然后选取排名靠前的 KK 个示例。直接检索的代表性方法是 KATE [17]。如图 3.7 所示,KATE 利用 RoBERTa 对待解决问题和候选示例(移除标签)进行编码。然后通过计算解决问题编码和候选示例编码间的向量余弦相似度对二者的相似度进行评分。基于此评分,选择评分最高的 KK 个示例作为上下文学习的演示示例。直接检索的方法简单易操作,是目前应用广泛的示例选择策略之一。但是,其未对示例的多样性进行考虑,选择出的示例可能趋向同质化。


图3.7: 直接检索。

2. 聚类检索

为缓解直接检索中存在的样例趋同的问题,聚类检索方法采用先聚类后检索的方法来保证检索结果的多样性。其先把所有候选示例划分为 KK 个簇,然后从每个簇中选取最为相似的一个示例。这样可以有效避免选择出多个相似的示例,从而保障了多样性。Self-Prompting [15] 是其中的代表性方法。如图 3.8 所示,Self-Prompting 首先将候选示例和待解决问题编码成向量形式,接着运用 K-Means 算法把示例集合聚为 KK 个簇。依照问题与示例之间的余弦相似度,从每个簇中选取与问题最相似的示例,由此得到 KK 个示例。虽然聚类检索方法提高了示例的多样性,但因为有些簇与问题可能并不相似,导致选择的示例的相似性可能不够高。


图3.8: 聚类检索。

3. 迭代检索

直接检索和聚类检索在相似性和多样性之间往往顾此失彼。为了兼顾相似性多样性,迭代检索策略应运而生。迭代检索首先挑选与问题高度相似的示例,随后在迭代过程中,结合当前问题和已选示例,动态选择下一个示例,从而确保所选示例的相似性和多样性。RetICL [28] 是迭代检索的代表性方法,如图 3.9 所示。RetICL 根据当前问题初始化基于 LSTM [10] 的检索器内部状态,并选择一个示例。接着根据当前问题和所选示例集更新检索器内部状态,并选择下一个示例。这一过程不断迭代,直到得到 kk 个示例。尽管迭代检索在计算上相对复杂,但其能够生成更优的示例集,在复杂任务中展现出更好的适应性和灵活性。


图3.9: 迭代检索。

除了在示例选择策略上有所不同外,现有的示例选择方法在检索器的选择和设计上亦呈现出差异。一些方法采用现成的检索器,而另一些方法则为了追求更卓越的性能,选择在特定语料库上对检索器进行微调。关于检索器的深入介绍及其分类,将在第六章6.8中进行详尽阐述。

3.2.3 性能影响因素

通过精心设计示例选择策略,上下文学习的效果可以得到显著提升。但是,除了示例选择以外,上下文学习的性能仍受到多种因素的共同影响。这些因素涉及预训练数据、预训练模型,以及演示示例等多个方面[48]。本小节将讨论这些关键因素如何影响上下文学习的效果。

1. 预训练数据的影响

预训练数据是上下文学习能力的来源,深刻影响着上下文学习的性能。对预训练数据而言,以下三方面因素是影响上下文学习性能的关键:

  • 领域丰富度:预训练数据的所覆盖的领域的丰富度直接影响模型的领域泛化能力。在丰富的跨领域语料库进行预训练的模型具备更稳定的上下文学习能力。而单一领域的语料库可能限制模型的适应性,即使该领域与目标任务高度相关,也无法保证最佳的上下文学习性能 [31]。

  • 任务多样性:预训练数据中的任务多样性是提升上下文学习性能的重要因素。多样化的任务类型有助于模型学习到更广泛的知识和技能,增强其任务泛化能力,从而在面对新任务时表现也更为出色 [26]。

  • 训练数据的分布特性:训练数据中存在突发性分布和罕见类别时,能够增强模型的上下文学习能力。突发性分布使得“文本-标签映射”的数据模式在整个训练过程中得以反复出现,罕见类别增强模型处理少见或新颖输入的能力,从而提升模型上下文学习的表现[4]。

2. 预训练模型的影响

预训练模型对上下文学习的性能影响主要体现在模型参数规模上。当模型参数达到一定的规模时,上下文学习才能得以涌现。通常,模型的参数数量需达到亿级别及以上。常见的拥有上下文学习能力的模型中,规模最小的是来自阿里巴巴通义实验室的Qwen2-0.5B模型,具有5亿参数。一般而言,模型的规模越大,其上下文学习性能也越强[39]。此外,模型的架构和训练策略也是影响上下文学习性能的重要因素。

3. 演示示例的影响

在3.2.2节中,我们已经讨论了演示示例选择对上下文学习的重要性。接下来,我们将继续探讨演示示例的格式、输入-标签映射、示例数量及顺序对上下文学习的影响。

示例格式。不同的任务对于示例格式的要求不同。如图3.5中展示的用上下文学习做情感分类的例子,我们只需要给出输入以及输出。但是,一些复杂推理任务,例如算术、代码等,仅仅给出输入和输出不足以让模型掌握其中的推理过程。在这种情况下,以思维链的形式构造示例,即在输入和输出之间添加中间推理步骤,能帮助模型逐步推理并学习到更复杂的映射关系,思维链将在3.3详细介绍。

输入-输出映射的正确性。对于一个包含输入、输出的示例,大语言模型旨在从中学习到输入-输出映射,以完成目标任务。如果给定示例中的输入-输出映射是错误的,势必会对上下文学习的效果产生影响。例如在情感分类任务中,将积极的文本错误地标记为消极,模型可能会学习到这种错误的映射方式,从而在下游任务中产生错误。对输入-输出映射错误的敏感性与模型规模大小有关[14, 43]。较大的模型在上下文学习中对输入-输出映射的正确性表现出更高的敏感性[14]。相比之下,较小的模型输入-输出映射错误的敏感性较弱[24, 39]。

演示示例的数量和顺序。增加演示示例的数量通常能够提升上下文学习性能,但随着示例数量的增多,性能提升的速率会逐渐减缓 [23]。此外,相较于分类任务,生成任务更能从增加的示例数量中获益 [16]。此外,演示示例的顺序同样是影响上下文学习性能的关键因素,不同示例顺序下的模型表现存在显著差异。最优的示例顺序具有模型依赖性,即对某一模型有效的示例顺序未必适用于其他模型 [19]。同时,示例顺序的选择也受到所使用数据集的特定特性影响 [17]。

除上述因素外, Prompt 中的任务说明的质量也直接影响上下文学习的效果。清晰、明确的任务说明能够为模型提供明确指导, 从而提升上下文学习的性能 [43]。因此, 在设计演示示例和任务说明时, 应综合考虑这些因素, 以优化模型的表现。

本节介绍了上下文学习,区分了零样本、单样本和少样本三种形式。探讨了直接检索、聚类检索和迭代检索三种示例选择策略,分析其优缺点及代表性方法。最后从预训练数据、模型本身及演示示例等方面分析影响上下文学习性能的因素。

3.2_上下文学习 - 大模型基础 | OpenTech