赞
踩
进NLP群—>加入NLP交流群
ChatGPT 以及 GPT4 作为纯自回归式语言模型,本不应该期待其有什么推理能力,尤其是数学推理,但是他们在基础的推理任务上却十分让我们惊艳(当然肯定不能作为专业的数学解题工具),这让我们非常好奇大模型(LLM)这么多参数里面到底藏了些什么好东西,怎么去激发大模型的潜能给我们带来更多惊喜。
CoT(Chain of thought),思维链,是学者们发现的能够激发LLM通过“思考”来回答一些困难问题的技术,可以显著提高LLM在推理等任务上的正确率。根据猜测,CoT的思想也被用于训练ChatGPT/GPT4,因为它们在回答一些需要推理的任务时,会先给出一步步的推理,再给出答案,而ChatGPT之前的LLM则经常直接给出答案。因此,让我们来一起回顾一下ChatGPT之前,CoT技术如何运用于LLM并提升模型回答的准确性的。
本次主要回顾三篇论文:
CoT 开山之作:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models,NeurIPS2022
Zero-Shot-CoT:Large language models are zero-shot reasoners. NeurIPS2022
AuTo-CoT:Automatic Chain of Thought Prompting in Large Language Models,ICLR2023
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models,NeurIPS2022
Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed Chi, Quoc Le, Denny Zhou(谷歌)
这篇文章很简单很简单,虽然洋洋洒洒写了几十页,但是核心方法一张图就可以表达清楚:
一句话:在问LLM问题前,手工在prompt里面加入一些包含思维过程(Chain of thought)的问答示例,就可以让LLM在推理任务上大幅提升。
注意,这里首先是使用 In-Context-Learning(上下文学习)的范式来进行prompt,即在prompt里面添加一些问答对作为“示范”,LLM在看到这些示范之后,就可以更好地进行Zero-shot任务(或者理解成Few-shot吧,毕竟需要提供一些标注的样本)了。
CoT的方法,就是在 In-Context-Learning 的范式中,增加了对推理的示范,从而希望LLM在给出答案的时候,也像模像样地进行推理。
作者在一些代表性LLM中队这样的方法做了大量实验,其中LLMs包括下面这些:
实验结果如下:
CoT的方法,相比于普通的ICL方式,显著提高了模型的推理能力,而且随着模型规模的增大提升的愈发明显。
这种CoT的方法,虽然十分有效,但需要手工写很多推理过程交给模型作为示范,虽然说对于同一类问题我们只用写一套就行了,但是当场景一换,或者问题改变时,之前有效的示范,可能效果就会打折了,因此还是比较费劲的。
于是,很快啊,就有学者提出了名为Zero-shot CoT的方法。
Large language models are zero-shot reasoners. NeurIPS2022
Takeshi Kojima, Shixiang Shane Gu, Machel Reid, Yutaka Matsuo, Yusuke Iwasawa(东京大学,谷歌)
这篇文章发现:大模型,尤其是足够大的模型,可能不需要你费劲吧啦地写一堆CoT来作为prompt了,它自己可能就会推理了,秘诀就是加上一句咒语:“Let's think step by step.”
具体则是需要LLM两次生成:
先使用 “Let's think step by step.” 让模型自己给出推理过程
把原始问题以及给出的推理过程再合在一起,让模型抽取出最终答案。
其实第二步是不一定需要的,这里只是为了直接给出答案,所以加了第二步。
下图对比了Zero-shot CoT跟其他方法的差别:
本文测试的LLMs主要是这些:
主要效果如下(为了省空间,我只贴出跟Zero-shot的对比了):
可以看到,这个Zero-shot CoT还是可以显著提升LLM的数学推理能力的。
还有一些跟Few-shot CoT和其他CoT改进版本的对比,这里就不放了,重点是这个工作发现了一些值得思考的问题:
Zero-shot CoT和Few-shot CoT在常识推理问题(CommonsenseQA)上,并没有太大的提升(相比于数学推理)。很多时候CoT给不出正确的答案,但是推理过程却是合理且灵活的。Zero-shot CoT在多项选择时,倾向于给出多个答案,很难只给出一个答案。
在数学推理问题上,CoT能有显著的提升,但是Zero-shot CoT和Few-shot CoT犯错误时的特点很不一样:Zero-shot方法在推出正确答案后,可能会继续“画蛇添足”,导致最终错误;另外,Zero-shot有时候干脆不推理,直接重复题目。Few-shot方法则是在生成的推理过程中包含三元运算的时候很容易出错,例如(3+2)*4
总体上,Few-shot CoT(又可以称之为Manual-CoT)的效果还是比Zero-shot CoT更好的,毕竟你手动认真地写了很多示范,努力不会白费嘛。下面介绍的一篇文章,则尝试把二者进行结合,企图既省力、效果又好。
Automatic Chain of Thought Prompting in Large Language Models,ICLR2023
Zhuosheng Zhang, Aston Zhang, Mu Li, Alex Smola(上交,亚马逊)
回顾上面讲的 Zero-shot CoT 和 Manual CoT,前者实际上没有使用 In-Context-Learning,而后者使用了 In-Context-Learning。ICL 提供了LLM更多的示范信息,可能能让LLM在输出的时候更加规范。
因此,一个自然的想法就是,能不能利用 Zero-shot CoT 来让 LLM 产生很多带有推理的QA pair,然后把这些QA pair加入到prompt中,构成ICL的上文,再让LLM进行推理。
作者假设的是这样一个场景:我们有一大堆的待测试的问题(没有标注,不知道正确答案和推理过程),我们要怎么利用 LLM 和这么一个无标注问题集合,在不进行手工编写CoT的情况下,提升LLM回答这些模型的质量。
作者的基本思路是这样的:
给定待测试的问题q,从无标注问题集合中,采样一批问题;
使用 GPT-3 作为产生推理过程的工具,即直接使用 “Let's think step by step.” 咒语,来对这一批采样的问题产生推理过程;
把产生的这些问题和推理过程,构成In-Context-Learning的上文加入到prompt中,再让LLM对问题q进行回答。
关键就在于这个采样过程,作者分别先测试了两种简单的采样过程:
随机采样,Random-Q-CoT
基于跟待测试q的相似度进行采样,Retrieval-Q-CoT
实验发现,居然随机采样还要更好一些。经过探究,作者发现GPT-3自动产生推理过程是有一定比例出错的,而出错的问题也容易聚集:
因此基于相似度搜索的时候,容易导致采样出一批错误的示范,而随机采样的方法,则可能避免聚集性地出错。
基于这样的考虑,作者设计了基于多样性的采样方法,先试用SentenceBERT对所有问题进行聚类,然后从每个cluster中进行采样,示意图如下:
具体采样过程则是:
假设需要再In-Context-Learning的时候加入k个示例,则对问题集合聚k类
对于每个cluster中的问题,按照每个问题跟cluster中心点的相似度来排序
每个cluster采样一个问题,距离中心点越近的越优先采样,但是得符合一些规则:
问题不超过60个token,通过Zero-shot-CoT产生的推理步骤不超过5步(也是前人的经验,简单原则)
就这样采样。。。
其实这个方法让人有些不解,因为采样过程是跟要测试的问题无关的,按照我的理解,应该在考虑多样性的同时,还考虑问题跟待测试问题的相关性(不确定是我对本文方法理解错了,如有错误请读者告知)。
总之,这样子就确实在给定一个问题集合的情况下,解放了双手。
Auto-CoT跟Zero-shot、Few-shot CoT的对比实验如下:
这个结果还是令人惊讶的,Auto的方法居然可以比Manual更好。其实有一种解释,Manual方法其实给多个任务都使用的是同一套模板,比方6个数学任务里面5个都使用的同一套示例(为了省力,同时Manual-CoT的论文也不是为了刷榜,而是为了揭示这么一个现象,所以CoT没有进行仔细调优),而Auto-CoT则是每个任务都会有自己的一套示例产生,毕竟问题集合不一样,聚类的结果也会不一样。
总之,这个方法主要证明了基于多样性的采样方法,对于CoT可能是很有效的。(虽然我近期还看了一篇探讨In-Context-Learning的论文得到的结论跟这个是矛盾的,那篇文章揭示了基于相似度的采样可能比基于多样性的采样更好,具体为什么会有这样的矛盾,可能需要更细致的探究)
进NLP群—>加入NLP交流群
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。