Press "Enter" to skip to content

算术推理问题的快速工程

探索使用Vellum.ai进行算术推理问题的各种提示工程技术、最佳实践和快速实验

四种不同提示技术的架构:输入-输出、思维链(CoT)、思维链的自一致性(CoT)和思维树(ToT)(图片来源:Yao等人(2023))

介绍

大型语言模型(LLMs)因其理解和生成语言的能力而引起学术研究人员和行业专家的越来越多关注。它们的文本理解能力背后的原因在于它们的训练过程,该过程包括暴露于大量数据以预测后续单词为主要目标。为了优化这些模型以适应特定任务,微调是必不可少的。这可以通过两种方法实现:“预训练和微调”或“提示微调”。

在传统的“预训练和微调”方法中,LLM在与其后续执行的任务相关的数据集上进行微调,从而在微调阶段更新参数。相反,“提示微调”通过提供文本片段来指导模型执行任务。

提示是用户提供的输入,模型被设计为对其做出响应。提示可以包含指令、背景、问题或输出指示器。提示工程是一个新兴的领域,致力于开发和优化语言模型的提示以实现有效利用。

然而,一个重要的挑战在于确保模型能够解决需要算术和常识推理的问题。在本文中,我们特别关注算术问题的提示工程。

先决条件

不需要先前的知识。下面提供的所有演示都可以在OpenAI Playground上执行,或通过OpenAI API运行。尽管本文主要使用OpenAI模型,但重要的是要注意,这些仅仅是我们将要探讨的提示技术,您可以自由应用市场上提供的任何LLM。

算术问题的提示工程

以下所有问题均来自GSM8K数据集,并使用OpenAI的GPT-3.5 Turbo Instruct模型进行测试,默认配置。

我们将在以下算术问题上测试各种技术:

Jennifer在去见同学Mark之前在商店买了40罐牛奶,Mark也在买牛奶。Jennifer每买5罐,就再买6罐。如果Mark买了50罐,Jennifer从商店带回家的牛奶有多少罐?

以上问题的正确答案是100罐

零示范提示

shot实际上是指一个示范。零示范是一种基本的提示技术,即向模型提出问题而不提供任何示范。一般来说,在经过大量数据训练的大型模型中,这种技术产生了良好的结果。

提示:

问题:{{ question }}答案:

输出:

詹妮弗从商店买回了76罐牛奶。

在前面的提示中,我们没有在问题前加上任何演示,导致模型无法提供正确的算术问题答案。理性和常识问题在零示范提示下很少能得到满意的结果。因此,在处理这类问题时,包含示例是必要的。

少样本提示

通过少样本提示,我们为模型提供一小部分演示,也称为样本示例。这些示例用来指导模型,以便处理后续的问题。所需示例的数量根据问题的复杂性和使用的具体模型而异。

提示:

Q:肯恩为了寄给在寄宿学校的兄弟的一个关心礼包。肯恩把一个盒子放在一个秤上,然后把足够多的软糖放入盒子中,让重量达到2磅。然后,他添加了足够多的布朗尼,使重量增加三倍。接下来,他再加入了2磅的软糖。最后,他添加了足够多的蠕虫,使重量再次加倍。盒子里的好东西最终重多少磅?A:16 Q:马克有一个种着花的花园。他在花园里种植了三种不同颜色的植物。其中有十朵是黄色的,紫色的比黄色的多80%。绿色的花的数量只有黄色和紫色花的数量的25%。马克的花园里有多少朵花?A:35 Q:詹姆斯每周给两个不同的朋友写一封3页的信,一星期写两次。他一年写了多少页?A:624 Q:艾伯特想知道他一天能吃多少比萨。他买了两个大比萨和两个小比萨。一个大比萨有16片,一个小比萨有8片。如果他全部吃完,他那天吃了多少片?A:48 Q:贝蒂正在为一个价值100美元的新钱包存钱。贝蒂只有她需要的一半的钱。她的父母决定给她15美元来完成这个目标,她的祖父母给她的钱是她父母的两倍。贝蒂还需要多少钱来买钱包?A:5 Q:{{ question }}A:

输出:

76

尽管这种技术在解决困难问题方面效果不错,但模型在算术推理问题中仍可能无法找到令人满意的结果。这是因为模型无法推理出立即的步骤。

少样本思路链 (CoT) 提示

少样本思路链 (CoT) 提示为模型提供了少量的示例,引导它完成达到解决方案的过程。这种引导,也称为中间推理步骤,在协助模型推理出逻辑输出的步骤中起着关键作用。

提示:

Q:詹姆斯每周给两个不同的朋友写一封3页的信,一星期写两次。他一年写了多少页?A:他每周给一个朋友写6页,所以他每周写12页,这意味着他每年写12*52=624页。答案是624。Q:{{ question }}A:

输出:

詹妮弗购买了40+6/5*50=40+12*10=40+120=160罐牛奶。答案是160。

在上面的输出中,模型试图通过步骤推理,但得出了不正确的最终答案。我们观察到,这种差异可能归因于提供的无关示例。解决此问题有两种方法:要么为模型提供更多示例,要么确保给出的示例是相关的。下面,我们尝试用一个相关的示例来解决这个问题。

提示:

Q:马克有一个种着花的花园。他在花园里种植了三种不同颜色的植物。其中有十朵是黄色的,紫色的比黄色的多80%。绿色的花的数量只有黄色和紫色花的数量的25%。马克的花园里有多少朵花?A:黄色的花比紫色的花多80/100*10=8朵。所以在马克的花园里,有10+8=18朵紫色的花。黄色和紫色的花加起来总共有10+18=28朵花。这意味着在马克的花园里有25/100*28=7朵绿色的花。所以马克的花园里共有28+7=35朵植物。答案是35。Q:{{ question }}A:

输出:

对于每5罐,马克买,詹妮弗又买了6罐。所以对于50罐饮料,詹妮弗又买了6/5 * 50 = 60罐。总共,詹妮弗买了40 + 60 = 100罐牛奶。因此,詹妮弗从商店带回了100罐牛奶。

得到的最终答案现在是正确的。考虑任务、模型的选择以及示例的相关性,这些都有助于得出正确的解决方案。

程序辅助语言模型 (PAL)

程序辅助语言模型 (PAL) 不是一种提示技术,而是对提示工程的应用。与 CoT 类似,PAL 旨在推理出中间步骤。然而,PAL 不使用常规文本作为推理步骤,而是使用使用编程运行时(如 Python 解释器)的中间编程步骤。

提示:

问:James 每周给两个不同的朋友写一封3页的信两次。他一年写多少页?答:#James 有朋友数量为2#他每次给每个朋友写3页信#他一周给每个朋友写两次#每周向每个朋友写的总页数为page_letter_size*number_of_times_written_to_friend=6#所以,他每周总共写了total_pages_each_week*total_weeks_in_a_year=624#页。答案是624。问:{{ question }}答:

输出:

#Jennifer 最初买了40罐牛奶.initial_cans_bought=40#对于马克买的每5罐,詹妮弗买了6罐.additional_cans_bought=6mark_cans_bought=50#所以,对于马克买的每5罐,詹妮弗买了6罐.additional_cans_bought=6mark_cans_bought=50#马克买了5罐的次数number_of_times_mark_bought=mark_cans_bought/5=10#詹妮弗总共买的额外饮料数total_additional_cans_bought=additional_cans_bought*number_of_times_mark_bought=60#詹妮弗从商店带回的总罐数total_cans_brought_home=initial_cans_bought+total_additional_cans_bought=40+60=100答案是100罐牛奶。

即使在无关的示例中,使用 few-shot CoT 技术无法得出正确答案,PAL 仍然成功找到了正确的最终解决方案。

零样本链式思维 (CoT) 提示

在没有 few-shot chain-of-thought (CoT) 技术演示的情况下,一种简单而有效的方法是要求模型自行推理中间步骤。这被称为零样本链式思维 (CoT)。您可以通过在提示问题中添加类似于“让我们一步一步思考…”的文本来实现这一点。这种简单的技术显示出了非凡的结果。

提示:

问:{{ question }}答:让我们一步一步思考...

输出:

1. Jennifer 最初买了40罐牛奶。2. 对于每5罐马克买的牛奶,詹妮弗买6罐附加牛奶。3. 由于马克买了50罐,詹妮弗对于每5罐买6罐附加牛奶,这意味着她买了(6/5) x 50 = 60罐。4. 因此,詹妮弗从商店带回了总共40 + 60 = 100罐牛奶。

从上面的示例中,我们观察到模型成功地推理出了步骤,并在不需要任何示例或指导的情况下得出了正确的解决方案。

Tree-of-Thought (ToT) Prompting

树思维 (ToT) 框架涉及以类似于导航思维树结构的方式探索潜在解决方案,类似于人类解决问题的方式。这种方法使得在需要时可以追溯步骤,反映了人类在解决问题过程中重新评估和调整思维的方式。实质上,ToT通过试错的方式旨在复制人类推理的适应性和迭代性。

基于ToT框架,Dave Hulbert 提出了树思维提示。这种技术采用了直接的单提示方法,要求模型评估中间步骤。

提示:

确定并表现为三名适合回答这个问题的不同专家。所有专家都会写下这个步骤及其对步骤的思考,并与小组分享。然后,所有专家将继续进行下一步,等等。在每个步骤中,所有专家都会评分给他们同行的回答,分数从1到5,1表示非常不可能,5表示非常可能。如果在任何时候任何专家被判断错误,那他们就会离开。在所有专家提供了他们的分析之后,你将分析所有3个分析,并提供共识解决方案或你最好的猜测解决方案。以下是问题:Q: {{ question }}A:

输出:

专家1: 数学专家
步骤1: 计算马克购买的奶罐总数。马克购买了50罐奶。
评分: 5 (非常可能)
步骤2: 计算詹妮弗在与马克见面之前购买的奶罐数量。詹妮弗购买了40罐奶。
评分: 5 (非常可能)
步骤3: 计算詹妮弗为每5罐马克购买的附加奶罐数量。每5罐马克购买,詹妮弗购买6罐附加奶罐。
评分: 5 (非常可能)
步骤4: 计算詹妮弗购买的奶罐总数。詹妮弗购买了40 + (6/5)*50 = 40 + 60 = 100罐奶。
评分: 5 (非常可能)
步骤5: 结论。詹妮弗从商店带回了100罐奶。
评分: 5 (非常可能)

专家2: 零售专家
步骤1: 确定商店顾客购买的平均奶罐数量。根据以前的销售数据,顾客购买的平均奶罐数量为10。
评分: 4 (可能)
步骤2: 计算马克购买的奶罐总数。马克购买了50罐奶。
评分: 5 (非常可能)
步骤3: 计算詹妮弗在与马克见面之前购买的奶罐数量。詹妮弗购买了40罐奶。
评分: 5 (非常可能)
步骤4: 计算詹妮弗购买的奶罐总数。詹妮弗购买了40 + (6/5)*50 = 40 + 60 = 100罐奶。
评分: 5 (非常可能)
步骤5: 结论。詹妮弗从商店带回了100罐奶。
评分: 5 (非常可能)

专家3: 心理学专家
步骤1: 分析詹妮弗的行为和决策过程。詹妮弗可能基于自己的需求和偏好购买了40罐奶。
评分: 4 (可能)
步骤2: 分析马克的行为和决策过程。马克可能根据自己的需求和偏好购买了50罐奶。
评分: 4 (可能)
步骤3: 考虑社会规范和同侪压力的影响。詹妮弗可能在看到马克的购买后感到受到压力,购买更多的奶罐。
评分: 3 (可能性较高)
步骤4: 分析詹妮弗购买每5罐马克购买的附加奶罐的影响。詹妮弗可能基于与马克保持同步或表现慷慨的欲望做出这个决定。
评分: 3 (可能性较高)
步骤5: 结论。詹妮弗从商店带回了100罐奶,可能受到社会规范和同侪压力的影响。
评分: 3 (可能性较高)

共识解决方案:
根据三位专家的分析,非常可能詹妮弗从商店带回了100罐奶。数学专家的分析提供了一个可靠的计算,零售专家的分析则考虑了顾客购买的平均奶罐数量。心理学专家的分析通过考虑社会规范和同侪压力增加了不同的角度。总体而言,共识解决方案是詹妮弗从商店带回了100罐奶。

上述示例中采用的ToT技术产生了一个准确的解决方案。值得一提的是,使用的ToT提示取自Dave Hulbert的ToT提示。然而,这种技术的一个缺点是提示大小的显著增加。

除了上述提到的工程技术,还可以采用一些额外的方法来解决算术推理问题。然而,需要注意的是,这些技术——自动思维链 (Auto-CoT)自我一致性自动推理和工具使用 (ART)以及主动提示——超出了本文的范围。

最佳实践

模型在精心设计的提示下可以发挥出色的性能。Elvis Saravia指出,提示可能包含四个元素,但并非每次都需要所有元素:

  1. 指令:指定模型要执行的特定任务或操作。
  2. 背景:外部信息或额外细节,指导模型生成更准确的回应。
  3. 输入数据:需要回应的具体输入或问题。
  4. 输出指示:输出的预期类型或格式。

建议将指令放在开头,使用指定的分隔符(如“#”)与其余提示分开。

Santu和Feng(2023)提出了一个全面的分类法TELeR(转折、表达、详细程度、角色),旨在实现对多个LLM在各种任务中性能的更有意义的比较。该提示分类将提示指令分为六个级别,根据提供的详细程度进行分类。第六级可以有效地利用给定提示来优化模型的性能:

  1. 提供高层目标的简要描述。
  2. 提供详细的子任务列表。
  3. 指定用于评估语言模型(LLM)输出的标准或包含一些示例。
  4. 通过检索技术获取额外相关信息。
  5. 要求LLM明确陈述其输出。

总的来说,建议具体、明确细节,通过反复迭代来不断完善提示,正确格式化提示并提及做和不做的事项。

让我们根据上述实践重新审视提示,并应用零-shot提示技术。

提示:

### 指令 ###您需要回答算术推理问题。请按照以下步骤解决问题: 1. 所有问题都应根据需要分为多个步骤,并且每个步骤都应编号。2. 所有计算都应明晰简单易懂。3. 在推理结束时,以以下格式提供准确的最终答案:“答案是”。您将根据以下几个方面进行评估:- 计算是否易于理解?- 答案的准确性如何?### 输入数据 ###Q: {{ 问题 }}A:

输出:

1. Jennifer在商店买了40罐牛奶。2. Mark买了50罐牛奶。3. Jennifer每买5罐Mark买的牛奶,就再买6罐额外的。4. 每买5罐Mark买的牛奶,Jennifer就再买6罐额外的。5. 因此,对于Mark买的50罐牛奶,Jennifer买了(6/5)*50 = 60罐额外的。6. Jennifer总共买了40 + 60 = 100罐牛奶。答案是100罐。

最初,使用零射提示技术,该模型无法提供正确的解决方案。然而,通过适当的指示和格式化,同一模型成功使用零射提示技术生成了正确的回应。

免责声明:下面的部分提供有关Vellum的信息,Vellum是一个用于快速生成提示的开发平台。提到Vellum仅供信息目的,并不构成认可或推广。我与Vellum没有任何关联,并不因其包含而获得任何报酬。

Vellum

确定合适的提示可能是一个挑战。这个过程从一个基本提示开始,然后通过多次迭代逐步完善,这是一个很难监督的任务。对于一些实验来说,电子表格可能足够,但当面临需要大量迭代解决的复杂问题时,它们就会出现问题。所以,问题是,我们如何有效地监视我们的提示?如果我们的目标是与团队无缝共享我们的提示实验,怎么办?介绍 Vellum – 解答这些问题。

Vellum 提供了一套工具,用于提示工程、语义搜索、版本控制、定量测试和性能监控,以帮助开发生产级别的 LLM 应用。在提示工程的背景下,它可以测试和评估市场上所有主要 LLM 的给定提示。它还便于提示的合作。

Vellum沙盒截图(作者提供的截图)

上图是Vellum沙盒的截图。Vellum可以轻松切换文本和对话模型,并且可以轻松调整模型参数。它还具有延迟跟踪和四个评估指标的定量评估的优势:精确匹配、正则匹配、语义相似度和webhook。

Vellum – 开发平台-LLM应用

Vellum是用于构建LLM应用的开发平台,提供提示工程、语义搜索、版本…

www.vellum.ai

摘要

本文首先介绍了提示,然后深入探讨了算术推理问题的提示工程。我们探索了各种提示工程技术,包括零射、少射、少射连续思维、零射连续思维、辅助程序语言模型和思维树。

后来,我们学习了一些为了打造更好提示的最佳实践。总体而言,建议具体化、提供清晰的细节、通过迭代持续完善提示、以明确的分隔格式化,并提到应该做和不应该做的事情。

最后,为了解决跟踪和评估提示以及在团队成员之间共享提示的挑战,我们调查了Vellum工具。

如果你喜欢这篇文章,请确保在这里关注我。你可以通过 LinkedInX(以前是Twitter)与我联系。

Leave a Reply

Your email address will not be published. Required fields are marked *