微信扫码
与创始人交个朋友
我要投稿
大家很熟悉:从大语言模型获得更好输出的最佳方法之一是在提示中包含示例。这种方法称为 shot prompting。通过在提示中提供示例,您可以准确地向模型展示您在输出结构、语气和风格方面所希望的内容。Shot这个词很多翻译软件翻译成为射击、镜头,其实它还有概率、可能性的意思,在LLM语境下理解成为示例、样本是恰当的。
结合谷歌最新的(4月17日)这篇文章《Many-Shot In-Context Learning 》(2404.11018)以及另外三篇相关论文,我将为大家介绍shot的不同使用方法、何时使用它、以及一些使用时的细节、和偏差。
图片来自DALL.E
三种Shot prompting方式
这种prompting方式主要有三种Zero-shot、Few-shot、Many-shot,这三种方式中的每一种都有多篇顶级论文作为学术支撑,尤其是上一篇文章中告别手写Prompt怕DSPy学不会?10行代码捏一个Agent,用DSPy Optimizers帮你优化PromptDSPy也用到了BootstrapFewShot作为一种优化方法,所以了解一下Shot很重要。
简单来说,Zero-shot大家都在用,比如Step by step,Take a deep breath之类,这其中又细分为很多类别,什么CoT核心、情感刺激、贿赂小费之类,每一种模型的敏感度也都不一样,但总体的共同点都是不需要具体的示例也能够提升模型的输出性能。
大家有兴趣可以扒一下Zero-shot的这些论文,有具体的数据支撑和论证实验,能发出来毕竟也要受到一些严格审查。告诉你一个技巧,你从ArXiv上找一篇本主题的最新论文(当然ICLR上发过的更有营养价值),找个时间,来一杯咖啡,从这篇论文的Reference上仔细研究,你就可以串起来很多本主题的相关研究(作者总要引述别人已经发表的观点来佐证自己每个字的出处,大致是这个意思),得到一些个究竟的知识。这些知识,比你从公众号等自媒体上来得要更节省时间和精力,当然也包括我的公众号和我的赞赏群。
Many-shot是一个主要用于提高模型性能的一个方式,和我们普通人写Prompt用于网页和大语言模型交互关系不大,论文里的多样本In-Context学习(Many-Shot In-Context Learning)主要是一种提升大型语言模型性能的技术手段,而不是普通用户与网页或对话式AI系统交互时使用的Prompt技术。
多样本In-Context学习是一种面向研究人员和开发人员的技术,它的核心思想是在推理阶段向语言模型提供大量相关的示例数据,使其能够更好地理解和学习所需完成的任务。这一技术主要应用于复杂的特定任务领域,如机器翻译、文本摘要、数学推理、规划等,旨在充分发挥大型语言模型的泛化能力。
与之相比,普通用户在与网页或对话式AI系统交互时,更多地使用少样本(Few-Shot)或零样本(Zero-Shot)Prompt。这些Prompt往往更加简洁、直接,目的是指导AI系统产生恰当的回应。用户无需提供大量示例,而是依赖AI系统在训练过程中已经学习到的知识。
无法破除的逆转诅咒
在介绍Few-shot之前,有一些概念我需要对我的公众号(AI修猫Prompt)读者厘清。那就是,你需要理解,我们现阶段的大语言模型语境下提到的learning和我们人类的learning是不一样的,或者说大语言模型目前很难突破逆转诅咒,情境学习根本不是学习。还是你熟悉的ICLR024重磅 | 逆转诅咒,LLMs接受"A是B"的训练却无法学习"B是A"(The Reversal Curse: LLMs trained on "A is B" fail to learn "B is A"(2309.12288),用这篇文章中的例子Few-shot一下,关于现实世界名人的问题,例如“谁是汤姆克鲁斯的母亲?”[答:玛丽李菲佛]”和反向“谁是玛丽李菲佛的儿子?“. GPT-4在79%的时间内正确回答了前一个问题,而后者只有33%。
这种泛化失败揭示了自回归LLMs的学习能力的显著局限性。尽管模型可以处理“A是B”的场景,但在没有对这种模式进行明确训练的情况下,它很难推断出相反的关系。人类可以利用创造力和推理来处理新的情况,但当面对与训练数据严重偏离的场景或问题时,LLMs可能会动摇。他们的反应受到他们所受训练的程度和多样性的限制,他们无法超越它。而人类反思自己的错误并从中学习,和LLM的学习不是一个意思。
究竟什么是Few-shot,这种方法建立在 LLM 从少量示例中学习和概括信息的能力之上。当您没有足够的数据来微调模型时,这使得它特别有用。
以下是一个可用于coze、质谱、Dify上的Few-shot示例,可以用于workflow,假如
你的工作是为用户{{user_name}}创建内容。以下是我们过去根据简要介绍创建的一些内容示例:
"""
示例 1:
简介:{{introduce_1}}
内容:{{content_1}}
示例 2:
简介:{{introduce_2}}
内容:{{content_2}}
"""
以下是创建的最新内容输出:
"""
简介:{{introduce}}
内容:{{content}}
通过以前简要介绍和根据此介绍生成的内容,模型将了解特定客户的语气和风格。我将示例封装在分隔符(三个引号)中,以设置提示的格式,并帮助模型更好地理解提示的哪一部分是示例与指令。这个提示虽然很简单,但适用于任何智能体,你需要做的就是拷走更新和设置变量。
为什么要用Few-shot Prompting
资源效率:Few-shot提示只需要几个示例数据
节省时间:它加快了模型适应新任务的能力,这意味着 AI 驱动的功能和产品的部署时间更快,上市时间更快。
降低成本:与收集和标记数据以微调模型所花费的时间相比,小样本提示要便宜得多,尤其是对于较小的团队而言。
小改变大收获:设置和测试少量样本提示相对容易,可以帮助您获得更好的输出。
你应该掌握的Few-shot细节:
1、我的prompt应该包括多少个示例?
添加更多示例并不一定能提高准确性;在某些情况下,添加更多示例实际上会降低准确性。多篇研究论文指出,在两个例子之后,先是大获全胜,然后是停滞不前。在 2 个示例之后,你只是在燃烧Token而已。
来源:语言模型是少数学习者《Language Models are Few-Shot Learners 》
2、示例的顺序重要吗?
是的,示例的顺序很重要。它对输出质量的影响程度取决于您使用的模型。这篇名为Calibrate Before Use:Improving Few-Shot Performance of Language Models的论文通过改变GPT-3提示中相同示例的顺序来证明这一点。我认为可以肯定的是,“更智能”的模型应该受到顺序的影响较小。不仅如此,小的改动对模型输出的改变都是巨大的应该自动生成 Prompt 还是手写?提示措辞中微不足道的变化对生成内容有重大影响
研究人员发现,该模型的预测根据示例顺序而有很大差异。在某些情况下,正确的示例排列导致了近乎最先进的性能,而另一些则下降到几乎是偶然的水平。下图显示了更多详细信息。
来源:《用途:用少样本提高语言模型性能》(Calibrate Before Use:Improving Few-Shot Performance of Language Models)
告诉你一个只有在我的公众号(AI修猫Prompt)你才能看到的策略:将最关键的例子放在顺序的最后。众所周知,LLM 非常重视他们处理的最后一条信息。
3、Few-shot中哪种示例方法更好?
这要视情况而定,但这里有几件事需要记住。
3.1 在以下情况下,多条示例可能会更好:
模拟交互:现实世界的应用程序涉及来回交互,例如在客户服务聊天机器人中,模型需要在对话流中理解和响应。
上下文连续性:您的目标是在多个交互中保持叙述或上下文连续性,并且模型需要生成在正在进行的序列中连贯的响应。
增量复杂性:该任务受益于上下文的逐步构建,其中每条消息都可能为对话增加一层复杂性或细微差别,而单个提示可能无法封装。
3.2 在以下情况下,单个示例的提示可能更好:
简化处理:效率是重中之重,您希望模型一次性处理示例并生成响应
输出的统一性:您正在寻求输出中一致的样式或格式,如果所有示例都在单个提示中提供,则可能会更可靠地生成。
我建议你需要反复测试,看看它们的表现如何。
4、何时使用Few-shot prompting
什么时候应该使用少样本提示?以下是一些用例,我的实践经验是:在这些用例中,Few-shot可能特别有用。
专业领域:在法律、医学或技术领域等专业领域工作时,收集大量数据可能很困难,只需少量提示即可获得高质量的特定领域输出,而无需大量数据集。
动态内容创建:非常适合内容生成等任务,在这些任务中,一致的风格和语气至关重要。
严格的输出结构要求:很少有镜头提示在向模型展示您希望输出的结构方面特别有用。
定制用户体验:在个性化应用程序中,例如聊天机器人或推荐系统,人工智能需要根据个人用户的偏好和输入快速调整。
Few-shot prompting的偏差
尽管Few-shot prompting很棒,但它并不完美。最大的限制是它依赖于所提供示例的质量和多样性。正如,垃圾进,垃圾出。
有时,这些示例甚至会降低性能,或将模型引导到错误的方向。
此外,还存在模型过度拟合的风险,即模型无法概括示例,并创建过于接近示例的输出。这也是我上一篇文章开头给你的那些我尝试过的苦涩教训之一,找开源模型还是要用大厂的,读到这里,你能理解了吗?此外,还有一些偏见需要注意:
多数标签偏差(Majority Label Bias):该模型倾向于支持提示中更频繁的答案。这种偏差的大小因模型而异。
新近偏差(Recency Bias):众所周知,LLM 偏爱他们收到的最后一块信息。上面提到的。
我在群里为你准备了不少Prompt的示例,关于DSPy的问题SEMMO的问题你都可以来群里问我。另外,群里为你准备了开群以来大量的Prompt模板、模块和一些代码文件完整示例,等你来一起讨论!另外,如果你有更多关于论文里Prompt的问题也可以到群里来,我会耐心解答你的问题。
<本文完结>
想把方法论转化为复杂提示词?Prompt心法与算法高级指南,帮你从知到行升维实践
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-04-12
2024-05-28
2024-05-14
2024-04-25
2024-07-18
2024-04-26
2024-05-06
2024-12-22
2024-12-21
2024-12-21
2024-12-21
2024-12-21
2024-12-20
2024-12-20
2024-12-19