零样本和少样本学习

本文介绍 .NET 中提示工程的零样本和少样本学习,包括其主要用例。

GPT 模型性能受益于提示工程,这是向模型提供指令和示例以优化其输出的做法。 零样本学习和少样本学习是提供示例时可以使用的技术。

通过零样本学习,可以包含提示,但不包括逐字完成。 可以包含仅包含提示的完成。零样本学习完全依赖于模型的现有知识来生成响应,这会减少创建的令牌数,并有助于控制成本。 但零样本学习不会增加模型的知识。

下面是一个零样本提示示例,它告知模型评估用户输入以确定输入表示的四个可能意向中的哪一个,然后使用“意向:”作为其响应的开头

prompt = $"""
Instructions: What is the intent of this request?
If you don't know the intent, don't guess; instead respond with "Unknown".
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.
User Input: {request}
Intent: 
""";

通过少样本学习,你将包含与逐字完成内容配对的提示。 与零样本学习相比,这意味着少样本学习会产生更多的令牌,并导致模型更新其知识,这会使少样本学习使用更多的资源。 但出于同样的原因,少样本学习也有助于模型生成更相关的响应。

prompt = $"""
Instructions: What is the intent of this request?
If you don't know the intent, don't guess; instead respond with "Unknown".
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.

User Input: Can you send a very quick approval to the marketing team?
Intent: SendMessage

User Input: Can you send the full update to the marketing team?
Intent: SendEmail

User Input: {request}
Intent:
""";

零样本学习用例

零样本学习是传递未与逐字完成内容配对的提示的做法(尽管它们可以与提示配对)。 零样本学习存在两个主要用例:

  • 使用经过微调的 LLM - 由于依赖于模型的现有知识,因此零样本学习使用的资源少于少样本学习,而且非常适用于已根据指令数据集进行微调的 LLM。 你也许可以完全完全依赖零样本学习,并保持相对较低的成本。
  • 建立性能基线 - 零样本学习可帮助你模拟应用面对实际用户的性能。 通过此方法,可以评估模型当前性能的各个方面,例如准确度或精度。 在这种情况下,你通常会使用零样本学习来建立性能基线,然后尝试使用少样本学习来提高性能。

少样本学习用例

少样本学习是传递与逐字完成(少样本提示)配对的提示的做法,用于显示模型如何响应。 与零样本学习不同,少样本学习可以增加模型的知识。 你甚至可以通过执行检索扩充生成来使用自己的数据集自动生成少样本提示。

少样本学习具有两个主要用例:

  • 优化 LLM - 由于可以添加到模型的知识中,因此少样本学习可以提高模型的性能。 它还会导致模型创建比零样本学习更多的令牌,这最终可能会变得极其昂贵,甚至不可行。 但如果你的 LLM 尚未微调,则使用零样本提示不会实现良好的性能,因此需要使用少样本学习。
  • 修复性能问题 - 可以使用少样本学习作为零样本学习的后续步骤。 在本例中,你将使用零样本学习建立性能基线,然后根据所使用的零样本提示进行少样本学习试验。 通过此操作,可以在查看模型当前响应方式后将其添加到模型的知识中,以便可以迭代和提高性能,同时最大程度地减少引入的令牌数。

注意事项

  • 基于示例的学习不适用于复杂的推理任务。 但添加说明会有助于解决此问题。
  • 少样本学习需要创建较长的提示。 包含大量令牌的提示可能会增加计算和延迟。 这通常意味着成本增加。 提示的长度也存在限制。
  • 使用多个示例时,模型可以学习错误的模式,例如“情绪正面可能性比负面高两倍”。