零样本提示与少样本提示:AI提示技术深度解析
零样本提示与少样本提示:AI提示技术深度解析
在AI领域,Prompt技术是与大语言模型(LLM)交互的关键方式之一。本文将深入探讨零样本提示(Zero-shot Prompting)和少样本提示(Few-shot Prompting)这两种重要的提示技术,介绍它们的使用方式、区别、适用场景以及局限性。
零样本提示(Zero-shot Prompting)
零样本提示的定义是直接向AI大模型提出任务,但不提供如何执行的方法或步骤。大模型必须使用其预训练的知识来生成答案。
一个简单的零样本提示示例是询问LLM「中国的首都是什么」。
再比如以下这个例子:
Prompt:从下面的文本中提取技术规格,并以JSON格式表示:Google Pixel 7, 5G network, 8GB RAM, Tensor G2 processor, 128GB of storage, Lemongrass
以上都是很简单的例子,但是,麻雀虽小五脏俱全,有两点需要注意:
- Prompt中不包含任何示例。
- LLM完全依赖其预训练的知识来理解问题并回答它。
现在我将转向一个更复杂的例子。
想象这样一个场景,公司在招聘人员进来的时候,需要考虑人员的职位、技能、以往职称等因素,然后将其映射到每个公司里自身设置的职级序列和职称。这种场景下,零样本提示就可以完成这个任务。
Prompt:
你的任务是将提供的职位名称标准化为以下列表中的一个:
“数据分析师”,“数据科学家”,“数据架构师”,“数据工程师”,“数据库管理员”,“数据库设计师”,“首席信息官”,“首席技术官”,“IT主管”,“开发经理”,“数据处理经理”,“安全经理”。
你的目的是确保标准化和准确性,必须用最接近匹配的职位名称来回应。如果没有合适的匹配职位名称,你可以回应“其他”。
职位名称:“高级数据工程师”
与之前的Prompt类似,这里也没有提供任何示例,LLM需要自己找出最佳匹配。为了确保数据质量和可靠性,这个Prompt允许LLM在职称不符合预定义列表时选择“其他”。
少样本提示(Few-Shot Prompting)
少量样本提示同样只需要向LLM发送单个Prompt。但与零样本提示的关键区别在于:少量示例被添加到了Prompt中,这些示例可以帮助LLM理解并完成任务。
我们以上文中,提取手机技术规格的Prompt为基础,然后加上示例:
Prompt:
请从下面的文本中提取技术规格,并以JSON格式展示。
示例
输入:Google Nest Wifi, network speed up to 1200Mpbs, 2.4GHz and 5GHz
输出:{ "product":"Google Nest Wifi", "speed":"1200Mpbs", "frequencies": ["2.4GHz", "5GHz"], "protocol":"WP3" }
输入:Google Pixel 7, 5G network, 8GB RAM, Tensor G2 processor, 128GB of storage, Lemongrass
再以上文中标准化职称的Prompt为基础,对其进行扩展,加入示例:
Prompt:
你需要把职称分类为两个类别之一:「IC(个人贡献者)」或「管理者」。我会给你提供一个职称输入,你的任务是分析此输入并确定可能的类别。但是请记住,我提供的职称可能并不明确包含「管理者」或「IC」。相反,它可能会暗示职位的性质或者技能。例如,「软件开发人员」或「平面设计师」等职位头衔通常代表「IC」,而「项目负责人」或「运营主管」则可能表示管理职位。职称存在的潜在歧义可能需要你进行创造性的语境解读。你只需要提供一个输出:「IC」或「管理者」。
职称:Senior Data Engineer
Prompt包含了通用指令和具体示例,这可以帮助LLM生成更准确的分类。
提供多少示例效果最好?
如果示例能够让LLM给出准确回答的话,那是不是意味着给的示例越多,LLM给出的回答就会越准确的?事实证明,添加更多示例并不一定会提高准确性。在某些情况下,添加更多示例上反而会降低准确性。多篇研究论文指出,在提供2个示例后准确率会有显著提升,然后趋于平稳。提供超过2个示例可能会浪费资源,也就是浪费Token。
示例的顺序对结果有影响吗?
那在编写Prompt的时候,提供示例的顺序重要吗?顺序很重要,LLM的预测会根据示例的顺序而发生巨大变化。但是,这取决于你所使用的LLM,不同的LLM,顺序对输出结果的影响程度不一样。其中一个策略就是将最关键的示例放在最后,LLM会对它们处理的最后一部分信息给予重要的权重。
一个研究案例
这个案例来自于2024年4月的一篇论文,由伦敦大学的研究人员发表。该论文主要围绕「在开源项目中通过Prompt中的示例来解决Bug」的话题。
研究方法以及步骤如下
- 事实收集:研究人员收集了一组与Bug相关的示例。包括有Bug的代码、错误消息和一些未来用于解决Bug的文档;
- Prompt构建:在Prompt中加入示例;
- 评估:评估这些示例的不同组合会如何影响LLM正确解决Bug的能力。
结论
- 每个示例都有独特的作用,突出了拥有多样化示例的重要性;
- 更多的示例并不意味着更好的输出:添加更多的示例并不总是导致更好的结果,如果Prompt变得过于杂乱或复杂,有时甚至会降低性能。
少样本提示的局限性
尽管少样本提示很有用,但它依然存在很大的局限性。其中,最大的局限性就是它依赖于所提供示例的质量和多样性,也就是说,垃圾进,垃圾出。正如上文所提到的,示例还有可能会降低LLM的性能,或者将其引向错误的方向。此外,还有过拟合的风险——LLM可能不会泛化示例,从而创建出完全照搬模仿示例的回答,这样的回答有可能根本不符合逻辑。
零样本提示 vs. 少样本提示
如何选择这两种技术在一定程度上取决于你想要执行的任务的特定需求,以下是一些考虑因素。
任务的具体性
- 零样本: 适合不需要领域特定知识的通用任务。
- 少量样本: 适用于特定领域的任务,比如法律、医学等领域。少样本提示允许没有大型数据集的情况下也能产生高质量、特定领域的输出。
数据需求
- 零样本: 无需额外的示例,仅依赖模型的预训练。
- 少量样本: 依赖提示提供少量示例输入,引导模型朝正确的方向发展。
准确性
- 零样本: 由于缺乏特定上下文,有时可能会提供不太准确或更一般的答案。
- 少量样本: 由于示例提供了帮助模型细化输出的上下文,因此通常可以为具有高特异性的任务提供更准确的答案。
可扩展性
- 零样本: 可扩展性强,因为它不需要针对任务进行特定的准备。
- 少量样本: 可扩展性略差,因为每种新任务类型可能都需要创建新的提示示例。也可能容易受到语义模式漂移的影响,从而使示例响应的准确性和相关性降低。
总结
总的来说,零样本和少样本提示各有优势和局限,选择使用哪一种方法取决于特定的任务和目标。为了获得更可靠的响应,还可以考虑使用更高级的提示技术,比如思维链提示,或者对模型进行微调和进一步的提示工程实验,以达到更好的结果。