DeepSeek 团队新作:把代码变成思维链,大模型推理各种能力全面提升
编程训练不仅可以提高大型模型的思维能力,还可以增强其他推理技能。
近期,DeepSeek 团队开展了最新研究,他们利用了超过300万个实例,创建了一个名为CODEI/O的数据集,这个数据集将代码转换成了思维过程,并用于训练Qwen、Llama等模型。
研究结果显示,在各种推理任务中,这些模型的性能都得到了全面提升,即使在非编程类推理任务上,这些模型展现出了不错的迁移能力。
研究团队认为,代码中隐含了不同场景的思维过程,因此他们希望将这种思维过程“提取”出来,用于训练推理模型。
为了实现这一目标,他们生成了大量的训练数据并运行这些代码,然后将代码、输入/输出对以及功能描述输入到DeepSeek-V2.5中,从而生成自然语言形式的推理过程。
在这个基础上,团队还引入了验证和修订机制,形成了更高质量的CODEI/O++。
从代码中构建思维链
研究者首先从CodeMix、PyEdu-R等数据集中收集了超过80万份代码文件,涵盖多种编程语言(以Python为主),任务类型多样,且包含丰富的推理模式。
不过,由于原始代码文件通常缺乏结构化,存在不相关的元素,难以自包含地执行,因此作者使用DeepSeek-V2.5模型对其进行预处理,将其转换为统一的格式。
在转换过程中,工作主要包括将核心逻辑功能提取到函数中,添加总结整体逻辑的主入口函数,明确定义主入口函数的输入/输出,创建独立的基于规则的输入生成器函数,以及基于主入口函数生成简明的问题陈述作为查询等步骤。
随后,在转换后的每个函数上,使用输入生成器对多个输入进行采样,并通过执行代码获取相应的输出,从而收集输入-输出对。
在这个过程中,一些代码可能存在超时、复杂度过高、不可执行或结果不确定等情况,这部分代码被作者跳过,最终生成了超过40万份代码文档,产生了350万个样本实例。
然后,作者利用DeepSeek-V2.5,将代码、输入输出对、功能描述等信息合成为自然语言思维链(CoT),并构建了训练样本。
对于每一个输入-输出对,作者首先构建一个输入提示,这个提示由函数定义、文本描述、参考代码和输入/输出等部分组成。
函数定义即之前结构化和标准化后的Python函数代码。
文本描述用自然语言概括函数的功能和目的。
参考代码与函数定义类似,但可能包含一些额外的上下文信息或注释。
输入或输出根据是输入预测还是输出预测任务,提示中会包含具体的输入或期望的输出。
将构建好的提示输入给DeepSeek-V2.5模型,模型会根据提示生成一段自然语言文本用作响应。
这段文本就是作者想要的推理过程,它需要解释如何从给定的输入推导出输出,或者在给定输出的情况下如何构造出满足条件的输入。
通过这种方式收集的数据集便是CODEI/O。
在CODEI/O的基础上,作者进一步利用了代码的可执行特性,合成了数据质量更高的CODEI/O++。
作者首先对CODEI/O中生成的所有响应进行了重新执行验证。对于验证为不正确的响应,作者将执行反馈追加为第二轮输入信息,并要求模型重新生成一个响应。
执行反馈包括输出预测的正误、输入预测基于错误输入的执行输出,以及代码执行失败的错误信息等。
在第二轮生成后,再次检查新响应的正确性。
无论第二轮结果如何,最终的响应都由四个部分按顺序构成:第一轮响应、第一轮反馈、第二轮响应和第二轮反馈。
对于第一轮就正确的响应,第一轮反馈会简单标记为“Success”,且没有第二轮内容。
所有修订后的响应都会被保留,通过引入基于执行反馈的多轮修正所构建的增强型数据集就是CODEI/O++。
数据集构建完成后,作者采用了两阶段训练策略对相关模型进行训练。
首先,使用CODEI/O或CODEI/O++进行推理能力训练,然后再用通用指令数据集进行微调,让模型理解自然语言指令并执行各种任务。
模型推理能力全面提升
为了评估CODEI/O或CODEI/O++的效果,作者对四个模型进行了测试,分别是Qwen 2.5-7B-Coder、Deepseek v2-Lite-Coder、Llama 3.1-8B和Gemma 2-27B。
在测试中,作者选用了10个以上的数据集,测试了模型在常识、数学、代码、物理、工程等领域的表现。
CODEI/O训练后,Qwen-Coder在代码理解任务中取得了显著进展,在阅读理解和推理任务(如DROP)方面也有显著提升,这表明通过代码训练获得的推理能力确实能够迁移到其他领域。
DeepSeek-Coder在CODEI/O的训练下也展现出了均衡的进步,在各个方面都有稳定的改进。
Qwen-Coder和DeepSeek-Coder的表现说明,即使是在代码领域接受过专门训练的模型,也能够从这种结构化的推理训练中受益。
Llama在LeetCode-O上的表现提升了近150%,这表明即使是参数较小的模型,通过适当的训练方法也能在特定任务上取得显著提升。
而作为测试中最大的模型,Gemma展示了CODEI/O方法在大规模模型上的适用性,在多个关键颋域取得了进步。
相比于数据更多的WebInstruct(WI),CODEI/O整体效果更好;相对于专门为特定任务设计的OpenMathInstruct2(OMI2)和PyEdu等方式,CODEI/O展现了更强的通用性。
作者简介
本文的第一作者是上海交通大学硕士生Junlong Li,目前正在DeepSeek实习。
他同时在香港科技大学助理教授何俊贤的指导下从事研究工作,何俊贤也是本文的通讯作者。
此外,DeepSeek的核心研究员、中山大学校友郭达雅也参与了DeepSeek V2、V3以及R1的研发。
论文地址:
https://arxiv.org/abs/2502.07316
GitHub:
https://github.com/hkust-nlp/CodeIO
数据集:
https://huggingface.co/datasets/hkust-nlp/CodeIO-PyEdu-Reasoning
本文来自微信公众号:量子位(ID:QbitAI),作者:克雷西
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。