LLM大模型(二)——提示工程(Prompt Engineering)
提示工程(prompt engineering),又称为指令工程,指的是通过结构化文本等方式来完善提示词,引导LLM输出我们期望的结果。通过提示词工程可以在不更新模型权重的情况下,让LLM完成不同类型的任务。其主要依赖于经验,而且提示词工程方法的效果在不同的模型中可能会有很大的差异,因此需要大量的实验和探索。提示工程旨在获取这些提示并帮助模型在其输出中实现高准确度和相关性,掌握提示工程相关技能将有
背景
1、NLP发展的四大范式
在整个自然语言的发展过程中,经历了四个阶段:
- 非神经网络的特征工程:在非神经网络时代, 人工智能主流的计算都是使用完全监督的机器学习的方法。这个方法最大的特点是完全的依赖于统计和传统的机器学习算法(比如贝叶斯算法、决策树)等等, 这些算法的最大的特点是需要先对于存量的数据进行人工的标注, 比如这个是猫那个是狗, 通过这样的方式, 让模型建设先验的知识, 然后当给到一张新的图片之后, 可以基于这个图片进行决策, 得到一个新的结论。这个方式最大的问题,就是标准的数量和质量决定了模型的质量的上限, 同时成本非常巨大。
- 基于神经网络的完全监督学习:这个时代的优势是不需要手动去给训练数据进行单独标注, 而是找到合适的数据进行足够的训练, 就可以获取很好的训练的效果。
- 预训练:其大模型的雏形了。这个阶段的最大的特点是无监督。我们一直说的通用智能, 其实就说大模型,其实已经将我们的大部分的知识, 沉淀到自己的模型中。本质就是讲模型, 用信息压缩的方式记录了起来。通过无监督的预训练得到的通用的大模型之后, 使用特定的数据集, 对模型进行针对性的训练, 使得模型更加适应新的数据。这个就是这次大模型最大的升级。无论 是 GPT 还是 Bert 其实都是一样的方案。通过大模型大量的数据海量的训练,大力出奇迹,然后再用小量的数据, 进行针对性的微调。
- prompt工程:就是我们今天重点要讲的Prompt。通过引入合适的模板, 去管控模型的输入、处理和输出的结果。使用这种模型, 可以用 zero shot(零样本),few shot 少量样本的方式去调试模型, 充分利用了模型的推理能力, 让模型按照 Prompt 中对于模型的要求进行输出, 满足各个行业, 各个场景的个性化的需求。
2、LLMs私有化大模型的三种方法
- 提示工程(Prompt Engineering):这是一种通过设计特定的输入提示来引导模型生成期望输出的方法。它的优点是实现快速,直接针对特定需求,但可能需要多次尝试才能得到最佳答案,并且不适用于所有问题。
- 知识库嵌入(Knowledge Based Embeddings):结合模型与外部知识库,使模型在生成答案时可以引用这些外部知识。这种方法增加了模型处理复杂和特定问题的能力,但需要整合和维护知识库,确保其准确性和及时性。
- 微调(Fine-tuning):在特定数据集上对预先训练的模型进行额外的训练,使其更适应特定任务或领域。微调的优点是优化模型性能,使其更加专业和适应,但缺点是需要大量标记数据,并可能导致过拟合。
一、什么是提示工程(Prompt Engineering)
提示工程(prompt engineering),又称为 指令工程,指的是通过结构化文本等方式来完善提示词,引导LLM输出我们期望的结果。通过提示词工程可以在不更新模型权重的情况下,让LLM完成不同类型的任务。其主要依赖于经验,而且提示词工程方法的效果在不同的模型中可能会有很大的差异,因此需要大量的实验和探索。
提示工程旨在获取这些提示并帮助模型在其输出中实现高准确度和相关性,掌握提示工程相关技能将有助于用户更好地了解 大型语言模型 的能力和局限性。特别地, 矢量数据库、agent和prompt pipeline已经被用作在对话中,作为向 LLM 提供相关上下文数据的途径。
Prompt的构成:
- 任务指示:这是prompt的核心部分,明确告诉模型要执行的具体任务。这可以是生成文本、回答问题、提供解释或任何其他特定的自然语言处理(NLP)任务。
- 上下文信息:为模型提供必要的背景,以帮助其理解任务。在许多情况下,提供更多背景信息可以显著提高生成文本的质量。
- 示例:学术中称为one-shot learning,few-shot learning或in-context learning,提供一个示例可以帮助模型更好地理解你想要的风格或内容类型。这种方法常常被称为“温柔引导”。
- 输入:任务的输入信息,在提示词中明确的标识出输入。
- 输出:输出的描述,包括格式要求或限制、情感或语调指引、问题与开放性提示等。
二、提示工程的分类
- Zero-shot Prompting
Zero-Shot Prompting 指的是在大型语言模型(LLM)中,不需要额外微调或训练,直接通过文本提示就可以完成指定的下游任务。
主要思想:
- 先训练一个通用的大型语言模型,学习语言的基本规则,掌握丰富的常识和知识。
- 然后在不改变模型参数的情况下,只通过软性提示指导模型完成特定任务。
- 模型根据提示和已掌握的知识,生成对应任务的输出。
缺点: Zero-Shot Prompting 技术依赖于预训练的语言模型,这些模型可能会受到训练数据集的限制和偏见。它的输出有时可能不够准确,或不符合预期。这可能需要对模型进行进⼀步的微调或添加更多的提示文本来纠正。
- Few-shot Prompting
few-shot prompting则是通过提供模型少量高质量的示例,这些示例包括目标任务的输入和期望输出。通过观察这些良好的示例,模型可以更好地理解人类意图和生成准确输出的标准。
关键思想:
- 仍然基于预训练好的通用语言模型
- 使用软提示指导模型完成新任务
- 额外提供1-2个相关示例作为提示补充
缺点: 这种方法可能会消耗更多的token,并且在处理长文本的输入或者输出的时候可能会遇到上下文长度限制的问题。大型语言模型(例如GPT-3)在zero-shot能力方面表现出色。但对于复杂任务,few-shot 提示性能更好。为了提高性能,我们使用,few-shot 提示进行上下文学习,通过在提示中提供演示来指导模型执行任务。换句话说,将模型置于一些特定任务的示例中有助于提高模型性能。
- Instruction Prompting
指令提示是LLM的最常见用途,尤其是像ChatGPT这样的聊天机器人。指令提示旨在向大语言模型提供指令提示示例,以便它可以消除训练或测试差异(模型是在Web规模语料库上训练并在大多数指令上进行测试),并模拟聊天机器人的实际使用场景。指令提示使用(任务说明,输入,真实输出)元组对预训练模型进行微调,以使模型更好地与用户意图对齐并遵循说明。与说明模型交互时,应该详细描述任务要求,尽量具体和准确,清楚地指定要做什么(而不是说不要做某事)。
三、提示工程样例
更多推荐


所有评论(0)