虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:首页 > 技术阅读 >  让大模型像学生一样解数学题,正确率提升14%,微软的MathPrompter了解一下

让大模型像学生一样解数学题,正确率提升14%,微软的MathPrompter了解一下

时间:2024-02-07
算不对就用各种方法多算几遍,中间步骤也检查一下,原来这套教学方法对大模型也管用。
大型语言模型在解决算术推理任务时性能欠佳,经常提供错误的答案。与自然语言理解不同,数学问题通常只有一个正确答案,这使得生成准确解决方案的任务对大型语言模型来说更具挑战性。
为了在一定程度上解决这类问题,来自微软的研究者从人类解决数学问题的方式中获得灵感,将其分解为更简单的多步骤程序,并在每个步骤中利用多种方式来验证他们的方法。
论文链接:
https://arxiv.org/pdf/2303.05398.pdf
具体来说,给定一个问题Q,然后执行以下几个步骤:
1、生成代数模板:研究者首先生成其对应的代数表达式Q_t,用变量替换数字项。
2、Math-prompt:然后,他们向大型语言模型提供多个prompt P,这些prompt可以以不同的方式分析解决Q_t。例如,P可以是「推导出一个代数表达式」或「编写一个 Python 函数」等等。按照这个程序,我们最终会得到P的表达式,它根据 Q_t 的变量解析地求解Q_t。
3、计算验证:通过给Q_t变量分配多个随机值来评估P的解析解。
4、统计学意义:如果P的解析函数的解在N∼5个不同的变量选择上处于「一致」状态,那么将Q中的原始值替换为最终解。如果不「一致」,重复步骤(II)、(III)和(IV)。
这篇论文提出的方法 ——MathPrompter,使用了175B参数量的大型语言模型 ——GPT3 DaVinci  completion engine,能够将模型在MultiArith数据集上的准确率从78.7%提升到92.5%。

方法

由于大型语言模型是生成模型,要确保生成的答案是准确的就变得非常棘手,特别是对于数学推理任务。研究者从学生解决算术问题的过程中获得启发。他们缩小了学生为验证他们的解决方案而采取的几个步骤,即:
  • 与已知结果相一致。通过将解决方案与已知的结果进行比较,可以评估其准确性并进行必要的调整。当问题是一个有既定解的标准问题时,这一点尤其有用。
  • 多重验证。从多个角度处理问题并比较结果有助于确认解的有效性,确保其既合理又准确;
  • 交叉检查。解决问题的过程与最终的答案一样必要。核实过程中的中间步骤的正确性,可以清楚地了解解的背后的思维过程。
  • 计算验证。利用计算器或电脑进行算术计算可以帮助验证最终答案的准确性。
MathPrompter
本文提出的方法——MathPrompter,就是试图将这种思维过程的一部分转移到大型语言模型答案生成过程中。图1概述了MathPrompter解决一个数学推理问题所遵循的步骤。

研究者使用最先进的GPT-3 DaVinci completion engine来完成问答任务。他们使用MultiArith数据集中的以下问题「Q」来演示MathPrompter的解题过程:
问:在一家餐厅,每份成人餐的价格是5美元,儿童免费用餐。如果有一个15人的团体进来,其中8个是儿童,那么这个团体要花多少钱吃饭?
第一步:生成代数模板。首先将问题转化为代数形式,通过使用键值映射将数字替换为变量。在这个例子中,修改后的问题「Q_t」变成了:
Q_t:在一家餐厅,每份成人餐的价格是 A 美元,儿童免费用餐。如果有一个B人的团体进来,其中C个是儿童,那么这个团体要花多少钱吃饭?
映射:{A:5, B:15, C:8} 
第二步:Math-prompt。受到上面提到的多重验证和交叉检查思维过程的启发,研究者使用两种不同的方法生成Q_t的解析解,即代数方式和Python方式。他们给大型语言模型以下prompt,以便为Q_t生成额外的上下文:
代数prompt:写一个数学方程并生成以 “answer =” 格式开头的答案。
Python prompt:编写一个返回答案的Python函数。
大型语言模型在回应上述prompt时产生了以下输出表达式: 
上面生成的解析解给用户提供了一些信息,让他们了解大型语言模型的「中间思维过程」。加入额外的 prompt 将提高结果的准确性和一致性。这将反过来提高MathPrompter生成更精确和有效的解的能力。
第三步:计算验证。研究者使用Q_t中输入变量的多个随机键值映射来评估上一步生成的表达式。为了评估这些表达式,研究者使用了Python的eval ()方法。他们比较输出结果,看能否在答案中找到一个共识。这也提高了他们对答案正确性、可靠性的信心。一旦表达式在输出上达成一致,他们就使用输入Q中的变量值来计算最终的答案,如下所示:
第四步是统计重要性。为了确保在各种表达式的输出中都能达成共识,研究者在实验中对第二、三步重复N∼5次,并报告观察到的最频繁的答案值。

实验结果

表1比较了MathPrompter与基线模型的性能,显示了基于few-shot和zero-shot学习的方法的效果。

结果显示,MathPrompter可以达到92.5%的准确率,远远高于其他SOTA模型。
表2列出了一组样本问题及其各自的输出、中间步骤和由MathPrompter和SOTA模型产生的最终答案。
该表显示了Kojima et al. (2022) 技术的不足之处,以及可以用MathPrompter补救的地方,而MathPrompter就是为了解决这些问题而设计的。例如,生成答案的某个步骤有时会出错,这可以通过多次运行模型并报告共识结果来避免。此外,Kojima et al. (2022) 的推理步骤可能过于冗长,但Pythonic或Algebraic方法可以解决这个问题,通常需要较少的token。此外,在推理步骤正确的情况下,最终的计算结果可能不正确。MathPrompter通过使用Python的eval () 方法函数解决这个问题。
更多细节请参见原论文。

文章来源:机器之心

IEEE Spectrum

《科技纵览》

官方微信公众平台






往期推荐
IBM的量子飞跃
这家公司能称霸绿氢领域吗?

AI大模型出现了人们不可预测的能力