【论文】deductive verification of CoT reasoning

 这是一篇NeuralPS 2023论文:Deductive Verification of Chain-of-Thought Reasoningicon-default.png?t=N7T8https://proceedings.neurips.cc/paper_files/paper/2023/hash/72393bd47a35f5b3bee4c609e7bba733-Abstract-Conference.html

GitHub - lz1oceani/verify_cot

目录

背景

特点

结构

使用推理链进行逻辑验证的具体方法

NL的演绎推理过程

NL推理验证 + (序列生成策略)

实验

benchmark

演绎验证评价设置

答案抽取

模型和参数

使用两种方法比较推理链的验证accuracy

NL和推理验证对于最终答案正确性的影响

消融实验

局限性


0. 背景

CoT会对推理任务有着明显的帮助,但是CoT对中间推理步骤的强调,可能会引入幻觉hallucination和累计accumulated 错误,从而限制模型解决复杂推理任务的能力。

1. 特点

我们不依赖外部模块和算法,直接利用LLMs的语境学习能力生成更精确、更严谨的deductive reasoning。在这项工作中,我们提出了一种基于自然语言的演绎推理格式,允许LLMs在演绎推理过程的每一个中间步骤中自校验,从而提高推理的严谨性和可信性。

(1)使用语境学习实现推理验证,不需要模型微调

(2)基于自然程序(nature program,之后简称为NP)的LLM验证除了可以识别无效的推理步骤,而且可以对为何无效提供明确的解释,详细说明它涉及的具体推理步骤。

(3)NP方法可以与其他语境抽象任务相结合,例如last letters任务

(4)可以使用没有出现在前文的常识性知识

2. 结构

基于推理的QA任务,可以被定义为(Q ,C ,O ,A),

  • Q是目标问题,
  • C是问题的上下文,
  • 当Q是有k个回答的多选题时,O=(o_1,o_2,...,o_k)是可选的答案
  • A是ground-truth

        当给出Q和C作为输入,LLMs生成的回答tokens为T=(t_1,t_2,...,t_n)

        在CoT中 T 由 m 个中间推理步骤组成,记为S=(s_1,s_2,...,s_m)

        中间步骤 s_i可以用T中的token(t_{l_i},t_{r_i})来表示。

在之前的许多工作中,都只追求answer correct答案正确最后一个推理步骤s_m中预测的最终答案与ground truth A一样

但是我们观察到,对于LLM产生错误最终答案的所有情况,中间推理步骤S之间至少存在一个错误。此外,即使最终答案是正确的,S之间也可能存在一些错误。如表1,发生在我们测试的所有LLM中,包括最先进的模型,如Chat GPT和GPT - 4 。由于后面的推理步骤受制于先前的推理步骤,这些错误往往会引发滚雪球效应,导致后续错误的复合。这大大降低了正确解决问题的可能性,阻碍了实现人类水平复杂推理的进程。

中间推理chain有错误,但是答案是对的

所以,在这个工作中,强调每一个推理步骤的有效性,尤其是演绎推理有效性,不仅仅是最终答案的正确性。

在演绎推理中,会给一个(前提,结论)对,我们要探究的是结论是否遵循前提

对于 每一步的推理步骤s_i,我们将其演绎有效性 V(s_i)定义为一个二元变量,V(s_i)=0/1。即如果一个推理步骤是dedctively valid的,那么 V(s_i) =1 。

这种情况当且仅当,s_i可以从其对应的premise p_i中进行逻辑推导,p_i包括【上下文C,问题Q,所有之前的推理步骤s_j ( j < i )

整个推理链S的推理有效性为 V(S)

评估演绎有效性比通过精准字符串匹配等简单的函数来评估答案的正确性更难,这里用LLMs去检查推理链的有效性。

3. 使用推理链进行逻辑验证的具体方法

给定一个推理链S=(s_1,s_2,...,s_m),直接要求LLMs一次性检查整个推理链进行了一个初步的实验:对于一个数据集问题及其由ChatGPT生成的推理链S,我们用“Do you think the above reasoning process is correct? Let’s think step by step”来提示ChatGPT,检查S中的推理步骤是否存在错误。然而,正如表2所示,对大多数数据集的验证准确率为50%,且ChatGPT在发现错误推理方面存在困难。值得注意的是,对于大多数推理链查询,不管它们的实际有效性如何,它都会持续地输出“Correct ”。

猜想:可能是因为每一步的推理step都包含不相关的前提

假设,对于一个推理步骤s_i的前提p_i是由问题Q和问题上下文C以及前面的推理步骤s_{\leqslant j}=\{s_j:j<i\}组成的。

对于Q和C,我们可以进一步地提取并分解Q\cup C到一个“问题相关前提”的集合中QC=\{​{qc}_1,...,{qc}_m\},其中的qc_i是由Q和C中得到的前提或者条件。

p_i=QC\cup s_{\leqslant j}中的大多数元素与s_i的有效性无关,也就是LLMs容易被无关的上下文所干扰

将推理链验证过程分解为一系列逐步推进的过程,每一步推理链只考虑必要的前提。chain整体的有效性由V(S)来表示,可以被分解成V(s_i)

3.1 NP的演绎推理过程

希望LLMs可以输出易于自己验证的演绎推理过程:对于每一个当前的推理步骤 s_i,保证它可以清楚地列出用于演绎推理的p_i最小子集,也就是和当前推理步骤 s_i最相关的前提p_i,以避免验证过程中的潜在歧义

图一中下面的3个绿色框框就是NP格式的推理chain,可以很方便地找到相关的前提

NP( LLMs演绎推理的格式 )包括:

  • 一个instruction,用来提取问题相关前提QC,“First, let’s write down all the statements and relationships in the question with labels

  • QC的编号list

  • 一个instruction,用来基于QC生成推理chain S,“Next, let’s answer the question step by step with reference to the question and reasoning process

  • 有前缀的推理步骤s_i,前缀的格式为 #{number}(by {list_of_premises_used})   ,number是i+|QC|,也就是 前提数+是第几个推理步骤,“list_of_premises_used '是用于s_i的演绎推理中的QC\cup s_{\leqslant j}中的最小子集,也就是和当前推理步骤 s_i最相关的前提。例如上图的#5. (by #2 #1)     总共有4个前提,所以推理的第一步序号为4+1,同时和它最相关的前提为1和2

对于最后一个推理步骤s_m(1)包含一个特殊的标签 final step(2)指出要回答的目标问题的premise数(3)明确给出问题的最终答案

有了NP这个format之后,还要用一条instruction来验证单个推理步骤s_i的推理有效性,这个instruction包括

  • 对于s_i前提的描述

  • s_i的完整描述

  • 一条验证正确性的指令,如“Double-check the reasoning process, let’s analyze its correctness, and end with "yes" or "no" "

需要注意的是,在整个验证过程中:只保留了si的最小必要前提和背景,从而避免了无关背景干扰,显著提高了验证的有效性;还可以使用one-shot,提高了验证准确性

3.2 NP推理验证 + (序列生成策略)

一个两阶段的策略:全体一致+多数投票

(1)采样了k个推理chain和它们的答案作为候选

(2)全体一致:验证这k个chain的有效性,当且仅当只有chain的每一个step都是有效的,某个chain才是有效的

(3)对于每一个中间推理步骤s_i,使用多数投票去对单步有效性进行验证;只保留通过验证的chain候选集S,也就是V(S) = 1

(4)再对V=1的chain进行多数投票

4. 实验

4.1 benchmark

主要包括3类:算数推理、符号操作、数据理解

  • 对于算术推理,我们使用以下基准:1 ) Add Sub ;2 ) Gsm8K;3 )MATH ; 4) AQuA。在这些基准中,AddSub和GSM8K数据集涉及中学水平的多步计算,以得出单个数字作为最终答案。MATH数据集提出了更具有挑战性的问题,需要将答案表示为LaTeX格式的数学表达式。这些问题涉及到线性代数、代数、几何、微积分、统计、数论等学科的概念。AQuA也有类似的挑战性问题,只是问题是多选题。
  • 对于符号操作,我们使用Last Letter连接,其中模型的任务是将问题中提供的所有单词的最后一个字母串联起来。
  • 对于数据理解,我们使用BIG - bench

4.2 演绎验证评价设置

对每个benchmarek采样100个推理chain,其中50个推理正确的,50个推理不正确

每条推理chain的ground-truth是由人类标注者决定的

4.3 答案抽取

从推理解决方案中提取答案,只保留model回答的最后一句话,然后使用正则表达式提取有效答案,以获得态度词,e.g:”yes”、“no”

i.识别“无回答”模式,标注为“no answer!”

ii.识别“回答-拆分”模式,将文本划分为若干块,使用文本的最后一个块来提取答案

iii.扫描剩下的文本,获得可能的最后答案

4.4 模型和参数

使用GPT3.5-turbo进行实验,同时也对LLaMa家族进行了实验(附录A)

使用两种方法比较推理链的验证accuracy

对于数据集问题及其由GPT-3.5-turbo ( ChatGPT)生成的推理链S,进行CoT 演绎验证精度的比较。我们比较了两种方法:

  1. 在不使用NP的情况下,验证由CoT提示生成的整个推理链(用"Do you think the above reasoning process is correct? Let’s think step by step "来提示ChatGPT,使得它检查在S中的任何推理步骤之间是否存在错误)
  2. 对NP格式生成的推理链进行step by step分解验证。

在后一种情况下,我们在验证每一个推理步骤s_i时,只保留必要的前提。为了计算验证准确率,对于每一个数据集,我们随机抽取50个推理链是演绎有效的,50个推理步骤表现出不正确的推理。

table3结果表明:我们的方法在大多数数据集上取得了显著更高的推理验证精度。在有效链保持较低误报率的同时,有效地识别了错误链中的错误推理。

然而,我们观察到我们的方法在" last letters"任务上的有效性是有限的。我们假设这是由于任务的性质决定的,每一个后续的推理步骤都是以之前的所有步骤为条件的,由于前提之间的依赖性增加,对推理验证提出了更大的挑战。

NP和推理验证对于最终答案正确性的影响

(1)对于每个问题,我们指导语言模型以NP格式生成k = 10个候选的推理链,并对最终答案进行简单的多数投票,而不使用推理验证来筛选出推理链候选项;

( 2 )用推理验证方法筛选出候选的推理链,并在此过程中应用全体一致-多数投票( Unanimity-Plurality Voting,UPV )来确定最终答案。

最后在GPT - 3.5 - turbo ( ChatGPT )上进行答案准确率的比较;baseline选取了CoT 和 faithful CoT 。

所有方法都为每个问题生成k = 10的推理链,然后使用我们的演绎验证方法进行多数投票或推理链过滤。

虽然我们的主要目标是提高演绎推理的可信性和可靠性,但我们发现,在我们的NP格式中,促使了语言模型进行推理,在许多推理任务中,获得了与baseline相当或更好的最终答案准确性。进一步应用我们的演绎验证方法来过滤无效的推理链,我们观察到最终答案的准确性略有下降【导致这种下降的一个主要因素是过滤掉那些提供正确答案但表现出不正确中间推理的候选推理chains】

我们在表5中举例说明了一个例子,其中ChatGPT生成正确的最终答案,但分配不正确的前提数来支持第一个推理步骤。

对于该GSM8k问题的推理链候选项,ChatGPT生成正确的最终答案,但提供了不正确的前提数用于接地第一步推理。在"步骤1 "中,正确的前提数应该是# 1和# 2。我们的演绎推理验证方法有效地识别了这些推理错误,增强了推理过程的严谨性和可信性。值得注意的是,从候选推理链中移除一个正确答案对整体的最终答案正确性有轻微的负面影响。

我们注意到,在很多这样的情况下,我们的方法有效地识别了这些推理错误,从而增强了语言模型推理过程的严谨性和可靠性,尽管对最终答案的整体正确性有轻微的负面影响。

4.5 消融实验

变量1:是否只选择前提p_i的最小子集

验证一个遵循我们NP格式的单个推理步骤s_i

(1)利用所有前提pi进行验证,不考虑他们与s_i的相关性,所以可能会引入不相关的上下文。

(2)遵循在NP中的设计,只用必要的上下文和前提。

利用我们的基于自然程序的逐步推理链分解方法,本消融研究有两个变量(1)有多少前提(2)shot个数对演绎验证准确性的影响。为了验证每一个推理步骤s_i,我们要么使用全部的前提p_i=QC\cup s_{\leqslant j},要么使用前提的最小子集。对于每个数据集,我们随机抽取50条演绎有效的推理链和50个不正确的推理步骤。

我们会发现,在许多数据集上,移除无关前提显著提高了推理chain验证的准确率,凸显了该技术的重要性。

one-shot 如下

变量2:不同k对我们的UPV策略的影响

k’代表产生单步推理有效性预测的投票数;k’越多正确率越高,但是需要消耗的计算资源也越多

局限性

例子中的pennies是货币单位也是硬币;问题中是只想算硬币,但是推理过程中换算成了货币单位一起计算。在这种情况下,我们的演绎验证过程是无法发现这样的误读的。这样的上下文歧义在真实世界场景中很常见,突出了我们方法目前的局限性

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该行动研究项目和试点研究旨在通过探索学习和玩电脑游戏扫雷可能本质上有助于提高假设思维的可能性来提高学生的假设思维能力。 一个目标是使用教育工具让学生更容易学习扫雷游戏的逻辑。 第二个目标是确定学习扫雷是否有助于学生获得推理和假设性思维的认知资产。 第三个目标是确定学习扫雷是否有助于学生成为更好的计算机用户。 学生们看到了一个 PowerPoint 演示文稿,其中讨论了扫雷游戏所涉及的思维。 学生还参加了模拟扫雷如何确定游戏中呈现的信息的练习。 学生们还参加了一个关于游戏的模拟程序。 此外,学生们还玩了扫雷游戏,并在部分过程中获得了一对一的帮助。 参与者记录他们的扫雷游戏结果,通过前测和后测评估他们的逻辑假设思维,并评估他们在计算机课程中学到的东西。 将参与者的扫雷游戏能力的结果与逻辑能力的评估和计算机知识和技能的评估进行比较。 这些比较发现潜在的正相关系数为 0.10。 无法确定因果关系。 初步研究的结果表明,进一步的研究可能会得出证实假设的结果,因此作者正在考虑未来进行更全面的研究。 发现了扫雷游戏的教育问题,这表明在未来的研究中使用游戏的变体可能会更好。 发现了阻止因果关系评估的方法学问题,可以在未来的研究中解决。 尚不清楚该研究是否适用于儿童,但该研究的方法可用于任何年级水平以确定有效性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值