Few Shot:最少的样本,最大的可能

在LLM提示工程中,链式推理是一种方法,少样本提示也是一种。如何能让“少样本”发挥出最大的价值,这篇文章提供了多种思路。

图片

前两周我们探讨了LLM 提示工程中的一个关键方法:链式推理(Chain of Thought)在实际产品开发中的应用和注意要点。这篇文章我们会分享少样本提示(few shot)的概念和应用。

一、概念:零样本提示(Zero shot)与少样本提示(Few shot)

想象一下,你有一位非常聪明的助手。

很多时候,你只需要告诉他你想要做什么,他就能立刻理解并正确无误地替你办完。比如,你告诉他“请帮我找最近3个月AIGC的最新研究发现”,他就能快速又贴心地给你想要的。但如果,你要他做的任务是“给客户写一封正式的邀请函”,且这类邀请函自带独特的排版格式、语言要求。你的助手纵然天赋异禀,也得知道邀请函怎么写才行。那么,你会怎么做?

第一种方法,絮叨半小时,把规则一条条说清楚:“请给我写一封客户的邀请函,第一行必须是客户抬头,而且要顶格;第二行是……;日期的格式要这样,结尾的格式要那样……”。

第二种方法,简单指示+参考:“这次的活动要请XX公司的张总参加,客户名片、活动时间在这里。你来草拟正式的邀请函,具体的格式和语言风格按照以前的邀请函来,这里有一些好的例子,你拿去参考。

如果助手够聪明,也有具备写作能力,第二种方法对你和助手来说,显然都是轻松又高效的。

这两种“提要求”的方法,恰恰就是prompt两种不同的技术:零样本提示(Zero Shot)和少样本提示(Few Shot)样本。

  1. 零样本提示(Zero Shot):是一种在没有任何相关示例的情况下,直接对模型进行提问的方法。
  2. 少样本提示(Few Shot):在提示中提供少量的示例,以帮助模型更好地理解任务的目标和输出要求。

如果你的提示直接明确,或者想获得开放性的回答,零样本提示(Zero Shot)足矣。但如果需要模型从事特定的模式或结构,就需要少样本提示(Few Shot)了。

二、应用:Few Shot的举例方式

严格来说,Few Shot重在“举例”,对提示的形式几乎没有特别要求。常见的写法有以下两种:

1. 用“输入-输出”的示例结构,让LLM理解你要的结果:

(Few Shot 部分)

情感分析任务。

示例1:

输入:这个餐厅的服务太棒了,强烈推荐!

输出:正面

示例 2:

输入:我对我购买的耳机感到非常失望,音质很差。

输出:负面

(任务要求)

新任务:

输入:这部电影的演员表现非常出色,剧情紧凑,值得一看。

输出:

LLM回答:

正面。

这类要求适合对输出的格式有严格要求的内容。

2. 给示例+语言描述输出要求:

示例1:

长江悲已滞,万里念将归。

况属高风晚,山山黄叶飞。

示例2:

江旷春潮白,山长晓岫青。

他乡临睨极,花柳映边亭。

示例3:

城阙辅三秦,风烟望五津。

与君离别意,同是宦游人。

海内存知己,天涯若比邻。

无为在歧路,儿女共沾巾。

请模仿示例中的3首诗歌风格,写一首五言绝句。

LLM回答:

碧波漾秋意,孤舟载梦回。

远山衔落日,归鸟入林催。

三、进阶:如何用好Few Shot

Few shot既然是Prompt技术的一种,自然也和其他技术一样,有放大优势的“妙招”和限制发挥的“昏招”。我们在这里,为你做了总结:

1. 量不在多,有用就好

很多人也许会好奇“

样本”的数量到底多少合适。一般来说,Few shot通常指2到20个示例之间。在实践中,使用3-shot、5-shot 或 10-shot 的情况较多。而超过20个示例通常不再被认为是“few-shot”了。另外,已经有大量研究证明few shot并不是越多越好,更多的示例并不能提升输出的结果。因此,提供高质量的示例才是更好的方法。

2. 如果有标签,“全面”比“贴对”更重要

用“输入-输出”方式所做的few shot示例集,往往会为输出定义一个分类或者内容,比如在上面的情感分析中“正面”、“负面”、“积极”和“消极”等。这样的分类在few shot技术中被称为“标签”。这类标签能帮助模型理解示例,并且定义可能输出的范畴。

有意思的是,有人做了对比研究:让人类专家给示例集贴上正确的标签(后称为“黄金标签”),和让机器自己在标签范围内(比如消极、积极)随机选择,对示例集贴上标签(后称为“随机标签”)。研究后发现,即使随机标签会出错,但“随机标签”的做法并不影响最终的输出。反而,这些标签给得够不够全面,决定了LLM的输出范畴。如果标签范畴有明显的缺漏,那会明显影响输出的准确性。

所以,当few shot示例集需要用标签的方式时,准备全面且准确的标签分类,比思考给每个示例贴上正确标签更重要。

3. 既“相似”又“多样”

在选择few shot上,最理想的示例集是“相似性”与“多样性”兼顾。

相似性:

指的是few shot和输出任务在主题、概念或情感上相似,这样可以帮助模型更快地理解和适应新任务。比如,你的输出任务是让LLM模型来分析人们对餐馆/食物的点评是积极还是消极的。那么,示例应该与点评相关。

相关:

这家饭店真是太好吃了,我强烈推荐!(标签:积极)

我非常喜欢这家饭店,食物非常出色。(标签:积极)

非相关:

这部电影让我很失望,剧情平淡无奇。(标签:消极)

消极:我对这部电影不太满意,角色的发展不够深入。(标签:消极)

多样性:

指的是few shot之间,要在风格、结构或语义上有差异,这样可以确保模型接触到不同的语境,提高泛化能力。来对比一下“多样”和“非多样”之间的差别。

非多样的示例集:

正面:这家餐厅的食物非常好吃。

正面:我非常喜欢这家餐厅的服务。

正面:餐厅的环境很棒。

负面:我不太喜欢这家餐厅的食物。

负面:这家餐厅的服务不太好。

负面:餐厅的环境让我感到不舒服。

多样性的示例集:

正面:这家餐厅的食物让我印象深刻,每一道菜都烹饪得恰到好处。

正面:虽然价格不菲,但这家餐厅的服务和氛围绝对值得。

正面:餐厅的装潢很有特色,让人用餐时心情愉悦。

负面:我对这家餐厅的体验感到失望,期待的菜肴并没有达到预期。

负面:昨晚的餐厅之旅并不理想,服务生似乎很忙,忽略了我们的需求。

负面:餐厅的布局有些拥挤,影响了我们的用餐体验。

可以看到,非多样的示例中,示范示例在语义上过于相似,都是直接表达对食物、服务和环境的正面或负面评价。而多样性示例,在内容上更加丰富(食物、装潢、价格),语言风格的表达也有不同,这可以帮助模型学习到更广泛的语言模式和情感表达,提高性能。

4. 实验、实验,还是实验

在实践过程中,你可能会发现在不同的任务中,相似性和多样性的重要性不同,有些任务中,强调多样性的示例集表现更好,有些任务则恰恰相反。已经有研究证明了这一点,在《IN-CONTEXT LEARNING WITH ITERATIVE DEMON- STRATION SELECTION》中研究者就发现,在他们的训练集的研究中,常识问答的任务中多样性维度优于相似性维度,而在新闻报道类的任务中相似性维度优于多样性维度。

因此,即使是有了相似性和多样性的策略,在真实实践中,也需要我们不断“调试”,找到最合适任务的双维度“配比”。

5. 最后的最后:选择合适的模型

如果以上方法都不奏效,那么,你得看看现在的模型到底合适不合适了。

模型在预训练阶段接触到的输入数据会有一定的特征,比如词汇的使用频率、句子的结构、主题等等。在Few Shot的应用中,模型是需要根据给定的示例集来理解特定任务,并据此对新的输入做出预测。如果示例集中的数据与模型在预训练阶段接触到的数据特相匹配,那么模型更有可能准确地理解和执行任务。这是因为模型能够利用其在预训练阶段学到的知识,来推断和生成与示例集一致的输出。

比如:如果一个模型在预训练阶段主要接触到的是科技领域的文本,那么它在处理科技相关的上下文学习任务时可能会表现得更好,因为它对这类文本的输入分布已经有了很好的理解。相反,性能可能会下降。因此,到最后你真的无计可施了,emmm,也许问题并不在few shot词身上。

本文由 @AI 实践干货 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自 Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务