当前位置:   article > 正文

语言模型在数学解题中思维链(Chain-of-Thought)设计_chain of thinking prompt设计

chain of thinking prompt设计

介绍一下最近在语言模型做解题方面的进展"Design of Chain-of-Thought in Math Problem Solving".
文章标题
大模型在数学解题方面效果现在其实还并不算完美,尤其是使用自然语言推理,还不能生成完全可靠的Chain-of-thought (CoT)的推理步骤。后来有作者也提出运用Python程序来当作CoT (Gao et al., 2023), 效果也是非常显著。

博客介绍的这篇文章没有太多的去提出一些新的东西,只是针对CoT的各种表达在数学解题中的效果做一个比较,同时也采用了 SFT + Majority Voting 或者 SFT + Reranking 的范式,对整体效果做了一个比较大的提升。

研究介绍

就是看各种各样的CoT,哪一个在数学解题这个任务上表现更好了。比较直接,对比下面几种CoT 和程序的表达对比,同时文章采用了Wolfram和Python两种程序语言来做对比实验。

  • Natual lanuage (NL): 和CoT prompting 的原论文一样,用自然语言来表达中间的推理过程。
  • Comment-Describing Program (CDP): 如下图所示,从符号语言来写程序,但基本上每一行都用自然语言去描述这个代码具体需要得到什么内容。
  • Self-Describing Program (SDP): 如下图所示,变量的名字本身带有一些自然语言的信息,这样其实也非常符合我们平时写代码的习惯。各种程序例子
    这里有一个注意的地方: SDP明显是比CDP更符合我们自己平时写代码的习惯,也是更加符合代码相关的预训练大模型的语料。另一个其实我们也发现, Wolfram这个语言的程序其实在预训练模型中数量非常少。比如Galactica或者CodeLLaMA的预训练数据, 他里面的Wolfram语言数据其实是非常少的,可能只有0.5%这样的量级。

主要有意思的Insights

  1. 虽然文中提出了一些用Wolfram的语言表达CoT,但最后效果最好的一般还是使用Python+SDP表达最为合适。毕竟和预训练数据比较一致。
  2. 这里感觉更有意思的效果是文章中使用 Reward Model进行Reranking 的效果,对效果有非常大的提升,相比SFT,小模型都能有>10%的准确率提升。
  3. Mixture of CoT: 文章中最后的结果将所有CoT类型放到一起然后voting,或者reranking,让模型自己选择哪种CoT去生成。这个地方的效果的提升。这里我觉得最有意思的是 “如果这样混合所有CoT的效果提升最大,那说明每个问题有相应最好的一种CoT作为表达” 。我觉得这里是需要深入研究的。

CoT数据收集

这部分比较常规,因为我们在训练集中有正确的数值答案,我们只需要使用GPT-3.5-Turbo Few-Shot Prompting的办法,去得到中间的CoT推理路径。我们可以从推理路径中抽取出Prompting结果的答案,和我们正确的结果进行比较,如果是正确的,那么大概率CoT也是正确的。

这里其实更像是一个假设,如果CoT是程序的话,大概率可以是正确因为需要跑一下这个程序。但如果CoT是自然语言,“认为CoT也是对的“ 这个假设可能就比较弱了,因为也有可能答案对了,CoT错了。但因为我们预测的是数值,如果这个数值预测,在这么大的空间里面搜索都对了,那也可以认为CoT是对的。因为文章重点并不是数据本身,所以这里其实作者也没有做太多的验证。

方法:微调,Majority Voting/Reranking

这里的做法和SoTA的做法(OpenAI的Let’s Verify Step-by-Step, 以及DeepMind的Solving math word problems with process- and outcome-based feedback)类似,都是一下几个步骤。

  1. Supervised Fine-Tuning: 文章中Base Model是Meta的Galactica,在HuggingFace中开源可下载。
  2. Majority Voting 或者 Reranking
    1. Majority Voting: 直接对SFT Model进行采样(sampling), 采样K=100个,然后对100个CoT 抽取的答案进行投票。最后取票数最高的作为答案。
    2. Reranking: 这里第一步我们需要训练一个Reward Model,然后用Reward Model对上面采样的100个进行打分以及重新排序。

Reward Model 训练

Reward Model 训练主要需要一些正例和负例作为样本,这里参考了OpenAI原来GSM8K数据集论文以及DeepMind的论文。

这里的关键在:“怎么样不用额外数据情况得到正例负例”

  • 生成正例和负例的样本:在SFT训练的时候,训练到大概第一或者第二个epoch的时候,我们拿这个时候的checkpoint出来对训练集进行采样。因为我们有训练集的标注,我们就可以得到一堆的正例和负例的样本。
  • Reward Model训练:主要是一个分类模型,直接对正例负例进行分类。模型从最好的SFT checkpoint初始化。

实验结果

在这里插入图片描述
这里其实我比较关注GSM8K 的效果,最高可以提升到80.9。这里没有放SFT的结果,因为怕太乱了,具体可以参考论文里面的。但这个方法对模型的效果提升,真的是巨大的,和原来的SFT比较,至少>10%的提升。

Mixture-of-CoT

在这里插入图片描述
这里面我们看到,混合在一起,其实也是只需要训练一个模型而已,对生成得到的三种CoT进行ranking,横向比较,这样得到的效果在GSM8K上还能继续提升3.5%。非常的Surprising.

这里意味着 “每个问题可能都有对应最适合的CoT”,后面的research也可以往这个方向继续研究。

Takeaway

  1. 在数学解题中,我们应该怎样寻找合适的CoT?如果用自然语言,确实模型会不确定CoT过程对不对,模型的确会suffer。但这个论文最后的结果说明,有的问题,确实可能还是自然语言去解释更好,虽然论文没有在这方面做更多的分析,但我觉得必然有的问题并不是用program能够解释的 (我觉得肯定会有一些例子)。
  2. 日常使用中,肯定还是自然语言更好,怎么样更准确的我们把程序变成自然语言进行解释?
  3. 如果给出的CoT错了,模型应该怎么样做后续的修正,这篇论文没有给出答案,但感觉也是需要去研究的。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/546933
推荐阅读
相关标签
  

闽ICP备14008679号