2021 年,提示学习(Prompt Learning)的研究浪潮兴起。而早在 2020 年,OpenAI 在 NeurIPS 2020 发表的一篇论文 Language Models are Few-Shot Learners 中就已经探讨了如何利用提示学习来提升大语言模型(Large Language Models,LLMs)的推理能力。论文中介绍了 Zero-shot、One-shot、Few-shot 三种不同的提示方法,如下图示意。
提示学习(Prompt Learning)是大语言模型领域中的一种调优方法。它的核心理念是调整模型以对特定的输入提示(Prompt)做出响应。这些提示可以是各种形式的文本,如问题、指令或其他类型的语句。在提示学习的过程中,模型的目标是产生一个与输入提示相关且符合预期行为的输出。例如,当输入提示是一个问题时,模型的任务便是生成一个合理的答案。
典型的提示学习方法:其实是指在使用预训练语言模型(Pre-trained Language Models)来处理特定下游任务(例如文本分类、问答等)时,并不对这些预训练模型进行复杂的微调(Fine-tuning)。这意味着,我们无需用传统的有监督训练方法来使模型适应这些特定任务。这种方法主要依赖于给模型提供的提示信息(Prompts),通过这些精心设计的提示信息,来 “引导” 预训练好的语言模型正确理解并完成任务需求。这种方法的核心在于,通过少量的提示信息,激活或调用预训练语言模型中的相关知识,从而完成特定的下游任务,无需对模型进行额外的训练。
在提示学习中,Zero-shot、One-shot 和 Few-shot 三者之间的差异为:
小结:Zero-shot、One-shot 和 Few-shot 学习代表了 LLM 处理未知任务时依赖已有知识量级的不同阶段。Zero-shot 依赖于模型的泛化能力;One-shot 要求模型能从单一实例中快速学习;而 Few-shot 则提供了稍微多一些的示例来帮助模型适应新任务。提示学习作为一种灵活的方法,在所有这三种情况下都非常有用,因为它允许研究人员以自然语言形式直接与模型交互,从而更容易地引导模型理解和执行新任务。
Prompt,也称为提示,其字面含义是在输入时为模型提供一定的上下文信息。它的作用就像一个指示标志,向模型说明或指导接下来应该执行的任务。换句话说,Prompt 可以将下游任务转化为预训练模型期望接收的形式,从而适应并完成特定任务。模型在下游任务中的表现对提示词(Prompt)的选择十分敏感,即模型的性能会因提示词的不同而有显著差异。选择合适的提示词对于确保模型在特定下游任务中的良好表现至关重要。如果设计出合适的提示(Prompt),我们可以利用预训练的大语言模型来完成多种任务,无需为每个特定任务进行再训练和微调。此外,使用 Prompt 可以显著提高少样本学习的效果,甚至在模型未接触任何样本数据的情况下,也能展现出良好的性能。简而言之,这种方法可以大大节省模型训练的时间和资源,提高模型的通用性和效率。
这种方法的一个显著优点是,即使在没有明确标签的情况下,也能训练模型。这得益于模型可以通过自我监督的方式,从海量文本数据中学习如何对各类提示进行响应。然而,提示学习也面临一些挑战。例如,选择适当的提示对模型的性能至关重要,但这通常需要进行大量的实验和调整。此外,由于模型是在海量的文本数据上进行训练的,因此可能会学习到一些我们不希望的偏见或错误信息。
连续提示(Continuous Prompts、Soft Prompts):这种方法使用可学习的向量,而非手工设计的提示,以生成和优化连续空间中的特征向量。例如,前缀调整(Prefix Tuning)的目标是学习一种可以端到端优化的连续提示,而不是依赖于人工提示工程。当输入前缀时,学习到的前缀会提供必要的上下文,以引导模型行为以实现任务目标。通过利用提示并实现连续提示的端到端优化,ACL 2024 Prefix-Tuning - 前缀调整提供了一种方法,该方法无需大量参数调整就能适应语言模型。该前缀允许我们以轻量级的方式将特定任务的知识注入到预训练模型中。
离散提示(Discrete Prompts):这是人类手工设计的提示词,易于阅读和理解。在提示调整领域,离散提示是用于指导语言模型行为的特定手工制作的文本提示,适用于各种自然语言处理任务。这些提示由人类设计,由可解释的单词和标记构成。这些提示是通过枚举或解析等技术创建的,旨在在训练或推理过程中向模型提供指令或约束。离散提示与软提示有所不同,软提示是通过基于梯度的方法优化的连续特征向量。离散提示具有可解释性和可在不同模型中重复使用的优点,但优化它们可能具有挑战性,而且它们可能并不总是遵循人类语言模式。因此,离散提示可能并非总是最优的。
与离散提示相比,通过学习得到的连续提示往往会为了提高性能而牺牲可读性、可解释性和可迁移性,这引发了人们的不信任,并给跨模型迁移带来了挑战。因此,对于大多数人来说,他们更倾向于通过手工提示工程(离散提示)来利用大语言模型的能力。
随着社会的发展,我们将遇到越来越多的专业领域(也称为垂直领域),并且新的专业领域产生的速度会越来越快。这就要求预训练语言模型在缺乏大量领域特定数据的情况下,必须能够迅速适应并有效工作。在传统的微调方法之后,提示学习(Prompt Learning)已经成为一种非常有效的策略。它可以在短时间内帮助预训练语言模型迅速提升性能。提示学习实际上是一种人工引导的策略,它通过深入分析预训练语言模型,帮助我们更好地理解模型掌握的知识和能力。这种方法不仅可以提升模型在特定任务上的性能,还可能推动更强大的语言模型的开发和出现。总的来说,提示学习是一种强大的工具,它使大语言模型能够处理各种复杂的任务,但同时也需要进行谨慎的管理和调整。
📚️ 参考链接: