verify+code
西风 发自 凹非寺
量子位 | 公众号 QbitAI
GPT-4数学能力还能更强!
新研究发现GPT-4代码解释器做题准确率与其使用代码的频率有关。
为此,研究人员提出新方法对症下药,直接将其数学能力拔至新SOTA:
在MATH数据集上,做题准确率从53.9%增加到了84.3%。
![](https://p0.ssl.img.360kuai.com/t019af1dee70a02e0ac.jpg)
你没听错,就是前段时间被称为ChatGPT推出后最强模式的那个代码解析器(Code Interpreter)。
研究人员窥探了其代码生成和执行机制,使用自我验证、验证引导加权多数投票的方法,直接打开其做数学题的任督二脉。
好奇网友随即而来:
还想看他们做高数。
![](https://p0.ssl.img.360kuai.com/t01459f0771c3ca7b54.jpg)
还有网友认为:
这也就是大脑的工作方式,人类在解决数学问题时也会自我验证。
![](https://p0.ssl.img.360kuai.com/t0171f902e332b34c2e.jpg)
一起来康康这项研究的细节~
两步提升数学能力
GPT-4代码解析器的代码生成和执行机制究竟是怎样的?
来自港中文MMLab、南京大学、中科大、清华、城大、长沙理工等多个机构的学者为解开这一问题,使用特定代码约束提示进行了一项试验。
![](https://p0.ssl.img.360kuai.com/t01ff17fc74d9a361be.jpg)
他们设计了3种不同的提示方法,限制GPT-4代码解析器使用代码的频率:
- Prompt 1:完全不允许使用代码,输出完全依赖自然语言推理,禁止将代码合并到解决方案中。
- Prompt 2:只允许使用1次代码,也就是在生成解决方案时,只能在单个代码块内使用代码。
- Basic Prompt:没有限制,GPT-4代码解析器可以进行一系列推理步骤,每个步骤都可由文字+Python代码组成。
![](https://p0.ssl.img.360kuai.com/t019d75c4b2f634e149.jpg)
△(a)不同提示回答准确率比较(b)代码使用频率与五个难度级别准确率都成比例,数学问题相对复杂时更明显
结果发现,允许GPT-4代码解析器多次生成和执行代码,其解题正确度明显高于仅用自然语言推理或只用1次代码的情况。
经分析,研究人员认为代码的多次生成和执行可以让GPT-4代码解析器逐步完善解决方案,当代码执行产生错误时,GPT-4代码解析器可以自我调试修改方案。
继而引入“代码使用频率”概念,量化不同提示方法下代码的使用次数。
基于前面的分析结果,研究人员希望能加强GPT-4代码解析器生成准确代码、评估代码执行结果以及自动调整解决方案的能力。
所以提出了CSV(自我验证)提示的方法,也就是为解决方案C引入了一个额外的验证阶段,称为V。
加入自我验证提示效果对应上图绿色Verification Prompt。
如此一来,GPT-4代码解析器需额外生成代码来验证答案,如果结果是False则重新推理得到正确答案。
![](https://p0.ssl.img.360kuai.com/t01148ca792f8bf9ae4.jpg)
CSV提示不仅对验证到逻辑推理每一步都进行了扩展,而且可以自动更正错误,无需外部模型或人工参与。
![](https://p0.ssl.img.360kuai.com/t01562749c27291377b.jpg)
△MATH数据集中第712个中级代数问题。
CSV prompt:To solve the problem using code interpreter step by step, and please verify your answer using code interpreter.
通过上图这个例子可看出,在没有自我验证的情况下,模型生成了一个错误的答案。通过自我验证,模型纠正了错误并生成了正确的答案。
此外,鉴于CSV可以有效地验证问题的答案,研究人员又提出了验证引导加权多数投票(VW-voting)的方法,将自我验证结果集成到多数表决中,给予不同验证状态不同权重,使表决更可靠。
![](https://p0.ssl.img.360kuai.com/t01a3b4eae45838f1c0.jpg)
在实际操作中,一旦一个答案被确认为错误,那就不会进行额外的验证,从而得到一个错误的验证状态。研究人员分配相应的权重给这些状态:真实(wT)、不确定(wU)和错误(wF)。
![](https://p0.ssl.img.360kuai.com/t0145ed7292dda8aad4.jpg)
最后从候选答案中择取得分最高的那一个:
![](https://p0.ssl.img.360kuai.com/t0107dc8b09867459d4.jpg)
比此前最高水平提高30%
用上了上述方法,GPT-4代码解析器做数学题的能力up up。
在MATH数据集上,原始GPT-4代码解析器的准确率为69.69%,使用CSV提示后提高到73.54%,再结合加权多数表决后进一步提高到84.32%,相比之前SOTA提高了30%以上。
![](https://p0.ssl.img.360kuai.com/t01998a57ad4db0bfc9.jpg)
△在MATH数据集上的准确率(%)
在MATH数据集的各个子任务中,提出方法均取得显著提高,尤其是在高难度级别的题目中效果更明显。例如在中级代数(Intermediate Algebra)题目中,原来的GPT-4代码解析器准确率为50.1%,使用新方法后提高到74.4%。
除此之外,研究人员还在GSM8K、MMLU-Math、MMLU-STEM等数据集上进行了验证。
![](https://p0.ssl.img.360kuai.com/t01b57bca97ff3b232e.jpg)
△在GSM8K数据集上的表现
上表可以看出,使用验证引导加权多数投票的方法还可以显著减少需要采样的解路径数量(Sampled paths),在GSM8K数据集上只需要5个路径就达到97%的准确率。
![](https://p0.ssl.img.360kuai.com/t0166e1a01987f63b6f.jpg)
△在MMLU数据集上的表现
针对不同难度的题目(下图a)以及不同类型题目(下图b)的测试中,使用新方法后准确率都有了提升。
![](https://p0.ssl.img.360kuai.com/t019d97de185f247b07.jpg)
△每条曲线上的四个点分别对应于使用Prompt 1、Prompt 2、BasicPrompt、CSV Prompt得到的结果。
研究人员还发现GPT-4代码解析器的代码使用频率提高与准确率提高正相关。随着题目难度的增加,代码使用频率稳步上升。这说明在较难的数学问题上,更频繁地使用代码很重要。
此外,值得注意的是,尽管添加基于代码的自我验证可以提高每个单独题目类型的性能,但改进的程度也因题目类型而异,从7.6%到仅0.6%不等。
研究人员指出:
特别是几何问题的准确性仅提高了0.6%,原本GPT-4代码解析器的准确性也只有54.0%,在各个题目类型中属于较低的。这种差异可能是因为解决几何问题通常需要多模态,超出了本文研究范围。
论文传送门:https://arxiv.org/abs/2308.07921
参考链接:
[1]https://twitter.com/_akhaliq/status/1691734872329699813?s=20[2]https://x.com/justfannet/status/1691983780498600376?s=46&t=iTysI4vQLQqCNJjSmBODPw— 完 —
量子位 QbitAI · 头条号签约
","gnid":"92ff02114da6e6bf5","img_data":[{"flag":2,"img":[{"desc":"","height":"296","title":"","url":"https://p0.ssl.img.360kuai.com/t019af1dee70a02e0ac.jpg","width":"468"},{"desc":"","height":"180","title":"","url":"https://p0.ssl.img.360kuai.com/t01459f0771c3ca7b54.jpg","width":"1172"},{"desc":"","height":"160","title":"","url":"https://p0.ssl.img.360kuai.com/t0171f902e332b34c2e.jpg","width":"1176"},{"desc":"","height":"466","title":"","url":"https://p0.ssl.img.360kuai.com/t01ff17fc74d9a361be.jpg","width":"1076"},{"desc":"","height":"430","title":"","url":"https://p0.ssl.img.360kuai.com/t019d75c4b2f634e149.jpg","width":"1022"},{"desc":"","height":"146","title":"","url":"https://p0.ssl.img.360kuai.com/t01148ca792f8bf9ae4.jpg","width":"812"},{"desc":"","height":"680","title":"","url":"https://p0.ssl.img.360kuai.com/t01562749c27291377b.jpg","width":"1034"},{"desc":"","height":"644","title":"","url":"https://p0.ssl.img.360kuai.com/t01a3b4eae45838f1c0.jpg","width":"1032"},{"desc":"","height":"106","title":"","url":"https://p0.ssl.img.360kuai.com/t0145ed7292dda8aad4.jpg","width":"892"},{"desc":"","height":"86","title":"","url":"https://p0.ssl.img.360kuai.com/t0107dc8b09867459d4.jpg","width":"436"},{"desc":"","height":"238","title":"","url":"https://p0.ssl.img.360kuai.com/t01998a57ad4db0bfc9.jpg","width":"1010"},{"desc":"","height":"340","title":"","url":"https://p0.ssl.img.360kuai.com/t01b57bca97ff3b232e.jpg","width":"900"},{"desc":"","height":"428","title":"","url":"https://p0.ssl.img.360kuai.com/t0166e1a01987f63b6f.jpg","width":"936"},{"desc":"","height":"412","title":"","url":"https://p0.ssl.img.360kuai.com/t019d97de185f247b07.jpg","width":"1014"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"hbase","pub_time":1692259020000,"pure":"","rawurl":"http://zm.news.so.com/b72a0aa9529f32dd72e736f9c09e93b0","redirect":0,"rptid":"f9ea0aba75df9507","rss_ext":[],"s":"t","src":"量子位","tag":[],"title":"GPT-4数学再提30分,代码解析器任督二脉被打开,数学能力登SOTA
牧叔尚1139c#winform 生成验证码怎么验证 -
叶嵇世15717294534 ______ 窗体中,需要自己增加的控件:一个picturebox控件pbVerifyCode,一个按钮butUpdateVerifyCode(看不清楚,换一张图);其它代码可复制使用. public partial class FrmLogin : Form {//随机码的长度 private const int iVerifyCodeLength = 6;...
牧叔尚1139C#winform中如何判断验证码? -
叶嵇世15717294534 ______ 我写了个生成图片的方法,可以和您的CheckCode()方法配合使用..返回Bitmap对象.. private Bitmap DrawVerifyCodePicture(string verifyCode) { int imageWidth = 15 * (verifyCode.L
牧叔尚1139在Thinkphp中怎么做登陆的验证码 -
叶嵇世15717294534 ______ ThinkPHP自带验证码的函数类,存放路径为:ThinkPHP/Lib/ORG/Util/验证码类--------------------------------------------------------------- 使用的时候只需在Index控制器中引入,方法如下:public function verify() { import ( "ORG.Util.Image" ); Image::...
牧叔尚1139Verify new PIN code是什么意思 -
叶嵇世15717294534 ______ 验证新的PIN码
牧叔尚1139java junit单元测试怎么测试 -
叶嵇世15717294534 ______ 首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试.这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明.该...
牧叔尚1139C#winForm怎么实现激活码验证? -
叶嵇世15717294534 ______ 一般是通过一段程序把用户的输入截取成一个一个字符,然后再转成ASCII码,然后再根据计算,你自定的方计算法,最后得到某一个数,然后与你最先设置的比较
牧叔尚1139yii自带验证码怎么做? -
叶嵇世15717294534 ______ 共三步,分别controllers,models,views各一层添置一行代码即可实现 第一步在controllers添加 public function actions() { return array( 'captcha' => array( 'class' => 'CCaptchaAction', 'backColor' => 0xF5F5F5,'transparent'=>true,'minLength'=>4, //最...
牧叔尚1139verify code error
叶嵇世15717294534 ______ 验证码错误..可能是网页需要你输入验证码..但是你输入错误了..重新输入就可以.
牧叔尚1139求验证码的简单制作方法
叶嵇世15717294534 ______ 两种方法—— 1)手动制作(点击, http://blog.csdn.net/zhangyj_315/archive/2008/07/22/2688752.aspx,查看详细步骤) 2)直接使用控件(免费的, http://henryfan.cnblogs.com/archive/2006/02/09/327565.aspx,点击下载,其中可以下载例子和控件)
牧叔尚1139JavaScript做的验证码并且在本页判断对比的正确性! -
叶嵇世15717294534 ______ 给你贴一个,js写的: function login(){ if(...