CMU 10423 Generative AI:lec10(few-shot、提示工程、上下文学习)

文章目录

1 概述

该文件主要内容涵盖了**In-context Learning(ICL)**的概念,讲解了零样本学习(Zero-shot Learning)、少样本学习(Few-shot Learning)、提示工程(Prompt Engineering)等主题。以下是对主要部分的概述:

  1. 零样本学习与少样本学习(Zero-shot and Few-shot Learning)
  • 零样本学习:训练数据中没有任何包含测试数据标签的样本,模型需要从未见过的标签中进行推断。

  • 少样本学习:训练数据中包含每个标签的少量样本(如2-4个),模型需要通过这些少量的样本进行学习。

  • 提示(Prompting)

    • 语言模型通常会根据前面给定的上下文生成下一个词语。
    • 关键思想是通过提供一个前缀(prompt),让模型根据提示的上下文生成期望的答案。
    • 给出了许多不同类型的提示范例,包括文本补全、翻译、问答、摘要等。
  • 大语言模型(LLM)的能力

    • 通过提示,可以将LLM应用于各种自然语言处理任务。
    • 零样本LLM模型如GPT-2和GPT-3在无监督预测任务中表现出色。
  • 指令微调模型(Instruction Fine-tuned Models)

    • 像ChatGPT和Llama-2 Chat等模型通过微调,针对特定的提示模板被训练成聊天助手,并遵循系统/用户/助手的分段格式。
  • Few-shot In-context Learning

    • 通过提示的方式让模型利用训练数据中的少量样本,在推理过程中获取规律并进行预测。介绍了few-shot in-context learning对样本顺序、标签平衡等的敏感性。
  • 提示工程(Prompt Engineering)

    • 强调了不同的提示会影响模型的输出结果,提出了通过选择模型在给定提示下最小的困惑度来优化提示的方法。
  • 连锁式思维提示(Chain-of-Thought Prompting)

    • 提出让模型进行逐步推理可以提高few-shot in-context learning的性能。
  • 学习提示(Learning to Prompt)

    • 提到通过不同方式学习更好的提示,如提示改写、基于梯度搜索的提示优化以及提示调优等方法。

整体内容聚焦于如何有效利用提示与大语言模型进行少样本与零样本学习,并探讨了提示工程的相关技巧与方法。

2 摘录

2.1 zero-shot 和 few-shot

以下是对 Zero-shot LearningFew-shot Learning 的详细介绍:

一、Zero-shot Learning(零样本学习)

定义:Zero-shot Learning 是一种不需要见到目标任务标签的情况下,对测试数据进行分类或预测的方法。这意味着在训练阶段,模型从未见过与测试数据标签相关的样本,需要依赖模型的预训练知识和提示(prompts)来完成预测任务。

特点:
  1. 无训练样本:在测试任务中,模型没有见过任何与测试标签相关的样本。
  2. 依赖预训练知识:模型通过在大量无标签数据或其他任务中预训练来获取知识,并在推理阶段利用这些知识进行推断。
  3. 应用广泛:Zero-shot Learning 在开放领域问答、文本分类、机器翻译等任务中非常有效,尤其是在资源稀缺或无法获得标注数据的情况下。
工作原理:
  • 模型通常通过自然语言提示(prompts)来引导预测。例如,给模型提供一个描述目标任务的提示(如“翻译为法语”),让模型利用其预训练时学到的语言和上下文知识,来完成该任务。
  • 模型生成结果的过程依赖于理解任务描述以及对输入数据的正确推理。
优点:
  • 无需标注数据:在无标签或标签数据稀缺的情况下,可以直接进行预测。
  • 广泛适用性:模型可以用于多种任务,而无需针对每个任务进行重新训练。
缺点:
  • 准确性有限:由于没有见过目标任务的标签,模型的预测准确性通常比有标签数据训练的模型要低。
  • 对提示依赖性强:模型对提示的依赖较高,不同的提示会对预测结果产生显著影响。

二、Few-shot Learning(少样本学习)

定义:Few-shot Learning 是指在训练数据中只有少量(例如2-4个)的带标签样本的情况下,让模型进行学习并完成任务。与 Zero-shot Learning 不同,Few-shot Learning 提供了一些与测试任务相关的样本,帮助模型进行更准确的预测。

特点:
  1. 少量样本:训练集中每个类别只有少数几个示例,这种情况在实际应用中非常常见,例如医学图像分类、语言处理等。
  2. 需要快速适应:模型必须根据这些少量样本快速学习并适应任务。
工作原理:
  • In-context Learning:Few-shot Learning 通常结合大语言模型(如 GPT-3)的“上下文学习”能力,通过提示将少量样本输入到模型中,模型利用这些样本的上下文关系进行推理和预测。
  • 元学习(Meta-Learning):一种常见的 Few-shot Learning 方法,模型通过在大量任务上训练,学习到对新任务快速适应的能力。
优点:
  • 节省标注成本:在数据标注成本高昂或难以获得大量标注数据的情况下,Few-shot Learning 能够有效发挥作用。
  • 灵活性:适用于各类任务,包括图像分类、自然语言处理等。
缺点:
  • 对样本敏感:模型对少量训练样本的顺序、选择和质量非常敏感,容易导致结果不稳定。
  • 性能有限:虽然比 Zero-shot Learning 更准确,但相较于充分训练的模型,Few-shot Learning 仍存在性能差距。

三、Zero-shot 与 Few-shot Learning 的对比

特性Zero-shot LearningFew-shot Learning
训练样本无任何目标任务标签样本少量目标任务标签样本(2-4个)
对提示的依赖极高较高
泛化能力较强(适应广泛任务)较强(对新任务有快速适应能力)
预测准确性较低(与任务相关性不高时)较高(有少量样本的辅助)
应用场景无法获得标注数据的任务有少量标注数据的任务

四、应用案例

  • Zero-shot Learning

    • 语言翻译:将一句话从一种语言翻译成另一种语言,模型没有见过具体语言对的训练数据,但通过提示可以完成翻译任务。
    • 图像分类:对未见过的新类别进行分类,例如在训练集中只有猫和狗的样本,但希望模型识别马的图像。
  • Few-shot Learning

    • 医学图像诊断:利用少量标注的医学图像进行疾病分类。
    • 文本分类:针对某一特定领域,仅提供少量标注样本来训练模型,完成如情感分析、新闻分类等任务。

通过 Zero-shot 和 Few-shot Learning,我们可以有效应对缺乏大量标注数据的场景,并利用预训练模型的能力实现对多样化任务的处理。

2.2 Prompting(提示)

以下是对 Prompting(提示)的详细整理:

一、Prompting(提示)的定义

Prompting 是指向预训练的大规模语言模型(如 GPT-3、LLaMA、ChatGPT 等)提供一段上下文或前缀,利用这些提示引导模型生成符合特定任务需求的输出。Prompting 是大语言模型在 Zero-shot 和 Few-shot 学习中的关键技术,通过巧妙设计提示,可以让模型完成多种自然语言处理任务。

二、Prompting 的原理

大多数语言模型是通过最大化训练数据中序列的似然性来进行训练的,模型根据输入序列的上下文来预测下一个词。因此,提示的关键在于为模型提供一个足够明确且连贯的上下文,使得模型在生成时能“理解”任务需求并输出符合预期的结果。

三、Prompting 的类别

Prompting 可分为两大类:Zero-shot PromptingFew-shot Prompting

1. Zero-shot Prompting
  • 定义:直接向模型提供一个问题或任务描述,模型不依赖任何示例,利用其预训练知识进行推理和生成。

  • 示例

    • 问题:翻译“猫”这个词成英文。
    • 提示:Translate “猫” to English:
    • 模型输出:“cat”
  • 优点:无需提供示例,简单直接,适用于各种任务。

  • 缺点:模型对任务的理解可能不够准确,输出效果可能不稳定。

2. Few-shot Prompting
  • 定义:在提示中包含少量的示例,使模型通过这些示例学习任务模式,进而推理并生成答案。

  • 示例

    • 任务:将句子翻译成法语
    • 提示
    Translate the following sentences to French:
    - I love apples: J'aime les pommes
    - He is running: Il court
    - They are happy: Ils sont heureux
    - The cat is sleeping: 
    
    • 模型输出:Le chat dort
  • 优点:通过示例,模型能更准确理解任务并生成更符合要求的结果。

  • 缺点:需要在提示中提供足够的示例,提示长度有限,可能无法容纳较多信息。

四、Prompting 的应用

Prompting 可以将大语言模型应用于广泛的自然语言处理任务,包括但不限于:

  1. 文本生成:通过提供故事开头或对话上下文,模型可以续写故事、回答问题或生成对话。
  • 示例:Prompt: “Once upon a time, there was a wise old owl…”

  • 输出:模型继续编写后续故事。

  • 翻译:通过提示将源语言文本转换成目标语言。

    • 示例:Prompt: “Translate the following text to French: ‘The weather is nice today.’”
    • 输出:“Il fait beau aujourd’hui.”
  • 问答:根据提示中的问题,模型可以生成答案。

    • 示例:Prompt: “Who wrote ‘Pride and Prejudice’?”
    • 输出:“Jane Austen”
  • 文本分类:通过提供分类任务描述,模型可以根据提示完成情感分析、主题分类等任务。

    • 示例:Prompt: “Classify the sentiment of the following sentence as positive, negative, or neutral: ‘I love this movie!’”
    • 输出:“positive”
  • 摘要:通过提供长段文本,让模型生成简短摘要。

    • 示例:Prompt: “Summarize the following paragraph: …”
    • 输出:模型生成该段的摘要。
  • 代码生成与补全:通过描述任务或给出部分代码,让模型生成完整代码或进行补全。

五、提示工程(Prompt Engineering)

Prompt Engineering 是指为了让模型生成更高质量、更准确的输出,对提示进行设计、调整和优化的过程。由于语言模型对提示的敏感性,选择合适的提示会显著影响模型性能。以下是提示工程中的一些重要技巧:

  1. 明确任务描述:提供明确而简洁的任务描述,让模型清楚知道需要完成什么任务。
  • 不明确:“Translate:”

  • 明确:“Translate the following English sentence into French:”

  • 提供上下文:在 Few-shot Prompting 中,提供足够的示例,帮助模型学习任务的模式和结构。

  • 控制输出:通过提示中的描述词或指导性语言,引导模型生成所需的格式或类型的输出。例如,“Generate a one-sentence summary:”

  • 调整提示顺序:模型对示例顺序较为敏感,尝试调整提示中示例的顺序,观察对结果的影响。

  • 使用连锁式思维提示(Chain-of-Thought Prompting):通过让模型逐步推理,提供一系列推理步骤提示,使模型生成更复杂的多步推理答案。例如,在数学题中引导模型按步骤解题。

六、Chain-of-Thought Prompting(连锁式思维提示)

Chain-of-Thought Prompting 是一种特殊的提示方式,通过要求模型逐步推理,提高模型在复杂任务中的性能。让模型在生成答案时明确写出思考过程,能够显著提高推理和回答准确性。

示例

  • 问题:一个篮子里有3个苹果,又加入了2个苹果,现在一共有多少个苹果?
  • 普通提示:Prompt: “How many apples are in the basket?”
  • 连锁式思维提示:Prompt: “First, there are 3 apples in the basket. Then, 2 more apples are added. How many apples are in total?”

模型输出

  • 普通提示:“5”
  • 连锁式提示:“First, there are 3 apples. Then, adding 2 apples gives a total of 5 apples.”

七、Prompting 的优缺点

优点

  • 灵活性高:无需对模型进行额外训练,可直接通过 Prompting 引导模型完成各种任务。
  • 适应多任务:通过不同的提示,可以让模型完成各种自然语言处理任务。

缺点

  • 对提示敏感:输出结果对提示的措辞、结构、顺序等非常敏感,不同提示可能会导致模型产生截然不同的输出。
  • 难以控制:Prompting 的效果不总是可预测的,需要反复尝试和调整。

八、Prompting 的挑战与未来

Prompting 仍面临一些挑战,如提示的有效性评估、对不同任务的适应性、提示的设计和优化等。未来,随着 Prompting 技术的不断发展,可能会出现更加智能化的提示设计工具和技术,进一步提高大语言模型在各种任务中的应用性能。

总结

Prompting 是将预训练大规模语言模型应用于不同任务的关键技术,通过提供适当的上下文或示例,Prompting 能有效激活模型的潜在能力,完成多样化的任务。无论是 Zero-shot 还是 Few-shot,合理设计提示是确保模型输出质量的关键,也是当前自然语言处理领域的重要研究方向。

2.3 In-context Learning(ICL,情境学习/上下文学习)

根据文件内容以及补充的知识,以下是对 In-context Learning(ICL) 的整理,力求全面遵循文件并提供适当的知识补充以确保笔记清晰易懂。


一、In-context Learning 的定义

In-context Learning(ICL) 是一种在推理过程中,通过提供上下文提示(prompt)和训练示例,让预训练语言模型在不改变权重的情况下完成任务的方法。ICL 通过在输入中直接提供示例,让模型推理出任务模式并进行预测。

二、ICL 与传统监督学习的对比

文件中将 ICL 与监督微调(Supervised Fine-tuning)进行了对比:

1. 监督微调(Supervised Fine-tuning)
  • 过程:将预训练模型在特定任务的数据集上进行微调。利用反向传播和优化算法(如 Adam)调整模型权重以适应新任务。
  • 优点:标准的机器学习方式,能够很好地适应数据量较大的任务。
  • 缺点
    • 需要完整的训练过程,计算成本高(约为前向计算的3倍内存和计算量)。
    • 必须访问模型权重,这在某些情况下可能不可行(如模型是私有的)。
2. In-context Learning
  • 过程:通过将训练示例作为输入提示提供给模型,模型在推理时自动学习这些示例中的模式并给出预测结果。无需对模型权重进行更新或调整。

  • 优点

    • 无需进行反向传播,只需一次通过训练数据即可进行推理。
    • 无需访问模型权重,通常只需要通过 API 调用模型即可。
  • 缺点

    • 由于 Transformer 模型在处理长提示时需要 (O(N^2)) 的时间和空间复杂度(N 为上下文长度),处理长提示可能效率较低。

补充:ICL 实质上是一种利用模型预训练过程中学到的通用知识,结合特定任务示例来进行推理的方法。它不涉及模型参数的更新,而是将训练数据以提示的形式直接提供给模型。


三、Few-shot In-context Learning 的过程

Few-shot In-context Learning 是 ICL 中的一种典型方式,它的过程包括以下步骤:

  1. 任务描述:首先在提示中明确任务的描述(如“翻译以下句子”)。
  2. 输入/输出示例:随后提供一系列输入/输出示例,通常包括几对训练样本,帮助模型理解任务要求。
  3. 推理和预测:模型根据这些示例推理任务,并对新的输入进行预测。

补充:Few-shot ICL 在模型推理时利用了人类学习的直观方式,即通过少量示例掌握任务的模式。这种能力使模型能够应对一些未经过训练的任务,体现了大模型的泛化能力。


四、ICL 对模型性能的影响因素

文件指出,Few-shot In-context Learning 的效果对以下因素非常敏感:

  1. 训练示例的顺序:训练示例在提示中的排列顺序会对模型的预测产生影响。不同的顺序可能导致模型理解任务方式的变化,进而影响准确性。
  2. 标签的平衡性:训练示例中正负标签的平衡程度会影响模型对任务的判断。如果提示中一种标签明显多于另一种标签,模型可能会倾向于预测出现较多的标签。
  3. 标签的多样性:提示中包含的标签种类越丰富,模型在推理时对不同标签的理解可能会更全面。

补充:这些因素的影响在很大程度上反映了模型在利用提示进行学习时对输入信息的敏感性。因此,在设计提示时,需要仔细考虑这些因素,以确保提示对模型的指导是最有效的。


五、ICL 对示例质量和数量的敏感性

文件中强调了以下两点对 Few-shot In-context Learning 的重要性:

  1. 训练示例是否具有真实标签:与随机标签相比,提供真实标签示例通常被认为对模型更有帮助。
  2. 提供更多的训练示例:通常认为更多的示例可以提升模型的预测性能。

然而,实验结果表明,情况并非总是如此:即使部分示例的标签不正确,模型仍然能够获得较好的性能。这说明模型在 In-context Learning 中对示例的准确性并不是绝对敏感。

补充:这可能是因为模型已经从预训练中获取了丰富的知识,能够在一定程度上推断出示例的合理性。因此,设计提示时,关注示例的代表性和信息量可能比追求绝对的正确性更重要。


六、ICL 的优缺点总结

优点

  1. 无需训练:ICL 不需要对模型进行微调,节省了大量的训练时间和计算成本。
  2. 灵活性:可以通过不同的提示完成多种任务,适用于多样化的应用场景。
  3. 无需模型权重访问:可以利用预训练模型的 API 接口完成任务,避免了权重访问的限制。

缺点

  1. 对提示敏感:ICL 的性能对提示设计的质量非常敏感,不同提示可能导致截然不同的结果。
  2. 计算复杂度:由于 Transformer 模型的计算复杂度是 (O(N^2)),处理长提示时可能效率较低,尤其是处理长上下文任务时。

七、ICL 的应用场景

  • 文本生成:根据给定的上下文提示生成文本段落。
  • 机器翻译:通过提供源语言和目标语言示例,让模型进行新的翻译任务。
  • 问答系统:提供问题和答案示例,模型根据提示回答新的问题。
  • 文本分类:通过提供分类任务的示例,让模型完成分类任务。

补充:ICL 能够应用于广泛的自然语言处理任务,且无需对模型进行重新训练,显示出极高的应用潜力。


八、Prompt Engineering 在 ICL 中的重要性

Prompt Engineering 是设计有效提示以最大化 In-context Learning 效果的关键。文件中强调了以下几点:

  • 通过仔细设计任务描述和示例,Prompt Engineering 可以帮助模型更好地理解任务。
  • 提示的顺序、措辞和示例选择都会对模型的性能产生显著影响。

补充:Prompt Engineering 的发展有助于让 ICL 更加有效,未来可能出现自动提示生成的工具,进一步优化模型性能。


结论

In-context Learning 是一种创新的学习方式,能够利用预训练模型的知识,通过上下文提示完成多种任务。尽管 ICL 对提示非常敏感,但其无需训练、灵活性高的特点使其在自然语言处理领域具有广泛的应用前景。通过精心设计提示(Prompt Engineering),我们可以充分发挥 ICL 的潜力,实现高效的任务处理。

2.4 Prompt Engineering、Chain-of-Thought Prompting、Learning to Prompt

一、Prompt Engineering 的定义

Prompt Engineering 是设计和优化输入提示,以引导预训练的大型语言模型(LLM)完成特定任务并生成高质量输出的过程。它涉及选择合适的提示格式、措辞和结构,以确保模型能够正确理解任务需求。

二、Prompt Engineering 的关键概念

文件中的一些关键点可以帮助我们更好地理解 Prompt Engineering 的核心思想:

  1. 提示的作用:语言模型被训练为根据给定的上下文生成序列,Prompt Engineering 的核心是为模型提供一个前缀字符串,使其生成与任务要求相匹配的输出【43:0†source】。
  2. 模型如何利用提示:模型通过最大化训练数据中序列的可能性来进行推理。提示实际上是模型完成任务的“指引”,告诉模型要执行什么操作。
  3. 在 Zero-shot Learning 中的提示设计:当不提供示例时,模型需要根据任务描述和单一提示进行推理,这时设计一个高质量的提示就显得尤为重要。

三、Prompt Engineering 的实践

1. 提示的有效性

文件通过实验强调,提示的设计对模型的性能有很大影响。即使保持任务和数据集不变,仅更改提示也会导致输出结果的显著差异。这表明提示的措辞、结构以及提示中提供的信息量对模型的性能至关重要【43:0†source】。

示例

  • 任务:新闻主题分类
  • 数据集:AG News
  • 模型:OPT-175B
  • 设置:Zero-shot Learning

在这个例子中,不同提示可能导致模型输出不同的分类结果,这反映了 Prompt Engineering 对模型性能的影响【43:0†source】。

2. 如何选择合适的提示

一个实用的方法是选择在模型中具有**最低困惑度(Perplexity)**的提示。困惑度是一种衡量模型对某个序列的预测准确性的方法,困惑度越低,表示模型对该序列的预测越准确。因此,选择困惑度最低的提示可以帮助模型更好地完成任务【43:1†source】。

四、案例:不同任务中的 Prompt Engineering

文件提供了两个具体案例来说明如何在不同任务中进行 Prompt Engineering:

  1. 新闻主题分类(Zero-shot Learning 场景)【43:1†source】:
  • 问题:如果在模型评估过程中保持其他条件不变,只更改提示,结果会有变化吗?

  • 答案:会有变化,这就是为什么选择最佳提示非常重要。

  • 法语词汇级翻译(Zero-shot Learning 场景)【43:2†source】:

    • 数据集:NorthEuraLex
    • 模型:Bloom(多语言 LLM)
    • 答案:选择困惑度最低的提示可以优化模型的翻译性能。

五、链式思维提示(Chain-of-Thought Prompting)

文件介绍了Chain-of-Thought Prompting,它是一种提示技术,要求模型在生成答案时进行推理,逐步解释思路,进而提高模型在复杂任务中的表现。这种方法尤其适用于 Few-shot In-context Learning 中的多步骤推理任务。

  • 链式思维提示的优势
    • 增强了模型的推理能力,使其在回答需要多步骤推理的问题时表现更好。
    • 提供了对答案的解释,使模型生成的答案更加透明和可解释【43:3†source】。

六、提示学习(Learning to Prompt)

文件最后提到了几种学习如何优化提示的方法:

  1. 提示改写(Prompt Paraphrasing):通过改写生成多个不同版本的提示,并选择效果最好的一个。
  2. 基于梯度的搜索(Gradient-based Search):通过梯度优化搜索能够最大化期望输出的离散提示表示。
  3. 提示调优(Prompt Tuning):优化提示的嵌入表示,而不考虑提示的离散形式【43:3†source】。

补充知识

Prompt Tuning 是一种常用于大型预训练模型的方法,通过在训练过程中调整特定任务的提示嵌入向量,可以有效提高模型在新任务中的表现,而无需对整个模型进行微调。

七、Prompt Engineering 的挑战

  1. 提示敏感性:模型对提示的措辞和结构非常敏感,提示的微小变化可能导致模型生成出截然不同的结果。
  2. 任务依赖性:不同任务对提示的要求不同,设计一个适用于所有任务的提示通常很困难。
  3. 提示优化难度:在一些情况下,手工设计提示需要反复尝试,尤其当任务复杂或模型对提示不敏感时。

八、Prompt Engineering 的应用场景

  • 文本分类:通过提供分类任务描述,让模型根据提示完成分类任务。
  • 机器翻译:设计合适的提示,使模型能够将文本翻译成目标语言。
  • 问答系统:通过提示引导模型回答问题,并根据提示提供所需的细节和推理过程。
  • 文本生成:利用提示,指导模型生成与任务相关的文本段落。

九、结论

Prompt Engineering 是确保大型语言模型在 In-context Learning 和 Zero-shot/Few-shot Learning 场景下有效工作的关键。通过仔细设计提示,可以引导模型生成更符合任务要求的高质量输出。然而,Prompt Engineering 是一项复杂的技术,涉及对任务、提示和模型行为的深入理解,需要反复试验和优化。

补充:随着 Prompt Engineering 的不断发展,未来可能会出现更加自动化和智能化的提示设计工具,使得在不同任务中应用预训练模型变得更加高效和便捷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值