分享自:

代码语义是否有用?基于执行轨迹信息提升代码大语言模型的综合研究

期刊:findings of the association for computational linguistics: emnlp 2025

关于《代码语义有帮助吗?一项关于基于执行追踪的信息对代码大语言模型作用的全面研究》的学术报告

本研究由来自新加坡管理大学(Singapore Management University)、南洋理工大学(Nanyang Technological University)、中国天津大学以及南京大学软件新技术国家重点实验室的研究人员共同完成。主要作者包括Jian Wang、Xiaofei Xie、Qiang Hu*、Shangqing Liu和Yi Li。该研究论文发表于计算语言学协会(Association for Computational Linguistics)主办的顶级会议EMNLP 2025(会议录页码10367–10385),会议于2025年11月4日至9日举行。

一、 研究背景与目标

本研究属于人工智能(AI)与软件工程交叉领域,具体聚焦于代码大语言模型(Code Large Language Models, Code LLMs)的推理能力增强。近年来,Code LLMs(如Llama、DeepSeek-Coder等)在代码生成、修复、总结等任务上展现出卓越能力,极大地推动了编程自动化的发展。然而,现有研究揭示了这些模型在理解程序运行时行为方面存在关键局限。它们主要从代码的静态文本(如令牌、上下文)中学习,缺乏对程序实际执行时动态语义(dynamic semantics)的理解。这导致模型难以准确预测代码的输出、理解其功能,甚至无法有效进行程序调试,构成了其实际部署的重大挑战。

具体而言,当前研究面临两大问题:1)模型缺乏对程序执行行为的推理能力;2)现有方法中,执行追踪(execution trace)等语义信息的表示方式零散且不一致,阻碍了模型有效泛化和推理。尽管已有一些工作尝试将执行追踪等信息融入模型的训练或推理过程以提升其语义理解,但这些方法采用的语义表示形式各异(如自然语言描述、行内注释等),且缺乏统一的框架和系统性的评估,导致其有效性结论不一,甚至相互矛盾。

因此,本研究旨在系统地探索代码语义信息(特别是基于执行追踪的信息)在增强Code LLMs推理能力方面的实际作用。研究核心目标是:通过构建一个通用的框架来支持集成多种类型的语义信息,并在此基础上,全面评估这些信息在监督微调(Supervised Fine-Tuning, SFT)和测试时推理(inference)两个关键阶段对Code LLMs性能的影响。 研究试图回答一个根本性问题:在当前技术路径下,为Code LLMs提供代码的动态执行信息,究竟能否以及能在多大程度上提升其代码生成与修复的能力?

二、 研究设计与详细流程

本研究设计并实施了一个系统性的评估框架,整个工作流程包含数据构建、模型微调、测试时扩展推理以及综合评估等多个环节。

1. 通用框架与数据构建 研究首先提出了一个通用框架,用于生成、整合和评估多种类型的代码语义表示。该框架的核心组件是 “追踪适配器”(Trace Adapter) 。其工作流程如下:给定一段代码(通常是包含错误的代码)及其对应的测试用例,适配器首先运行代码并利用编译器收集原始的运行时执行追踪(raw execution trace)。随后,适配器将这些原始追踪转换为五种不同的、具有代表性的语义表示形式: * NExT:将变量状态变化以行内注释的形式直接插入到代码旁边。 * SemCoder:使用自然语言逐行描述代码的执行过程、状态变化和输入输出关系。 * CodeExecutor:记录每一行代码执行后变量的状态变化,但与代码本身分开呈现。 * Concise:本研究设计的一种CodeExecutor变体,它在记录状态变化时,忽略那些在该行执行中值未发生改变的变量,从而生成更简洁的表示。 * Scratchpad:一种用于中间推理的表示方法。

基于此框架,研究团队构建并开源了一个高质量的数据集。该数据集不仅包含常见的程序修复任务所需的“错误-补丁”代码对、单元测试和程序描述,还包含了上述五种不同格式的执行追踪信息。数据集的构建涉及从开源编程竞赛数据集(如APPS)中提取代码对,通过代码相似性匹配错误代码与正确补丁,执行测试用例以验证行为差异,并最终利用追踪适配器生成多层次的语义信息。

2. 模型微调实验设计 在微调阶段,研究采用了一种两阶段的微调范式。第一阶段是基于修复的微调:模型学习如何根据包含错误代码、失败测试用例以及相应执行追踪(作为推理依据)的输入,生成正确的修补代码。这旨在迫使模型学习隐藏在错误代码与正确代码执行轨迹差异中的语义信息。第二阶段是下游任务微调:使用标准的代码生成数据集对模型进行进一步微调,以帮助模型学习领域特定知识。

研究选取了三个代表性的开源Code LLMs作为基础模型:DeepSeek-Coder (6.7B)、Llama3.1 (8B) 和 Gemma2 (9B)。实验设置了多种对比条件: * 基线模型:未经特定微调的原始模型。 * 仅代码生成微调:仅使用代码生成数据进行微调,不含修复数据。 * 无追踪修复微调:使用包含修复任务的数据进行微调,但输入中不包含执行追踪信息。 * 含追踪修复微调:使用包含修复任务的数据进行微调,且输入中包含上述五种不同格式之一的执行追踪信息。

此外,研究还探索了参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)策略,特别是LoRA(Low-Rank Adaptation),并将其与全参数微调进行对比,以考察不同训练策略对语义信息利用效果的影响。

3. 测试时扩展推理实验设计 在推理阶段,研究评估了在模型生成代码时,实时提供执行追踪信息作为反馈是否能提升性能。研究比较了两种主要的测试时扩展计算策略: * 顺序扩展:模型首先生成N个候选程序,通过外部检查器(如Python解释器)执行并验证。如果任何候选程序通过所有公开测试用例,则直接返回;否则,检查器为每个失败的候选生成基于追踪的诊断信息。这些诊断信息被添加到提示中,引导模型在下一轮生成修订后的新候选。此“自我调试”循环重复进行,直到找到正确解或达到预定的预算轮次。 * 并行扩展:模型一次性生成多个候选解决方案,然后利用一个“LLM即法官”的机制,根据执行结果及其追踪表示对所有候选进行排序和选择。

实验在多个基准测试上评估模型性能,包括代码生成任务(HumanEval, MBPP, LiveCodeBench, BigCodeBench)、程序修复任务(HE-R, MBPP-R)和代码推理任务(CruxEval-I, CruxEval-O)。对于测试时扩展推理,主要使用LiveCodeBench数据集进行评估。

三、 主要研究结果与分析

实验得出了与先前部分研究相左的、令人惊讶的结论。

1. 微调阶段的结果 核心发现:将基于追踪的语义信息整合到微调数据集中,并不能显著提升Code LLMs的代码生成能力。 * 在程序修复任务上,与不使用追踪信息微调的模型相比,只有SemCoder格式的追踪带来了有限的提升(提升幅度在0.3%到1.4%之间),其他格式的追踪甚至可能导致性能下降或无明显帮助。 * 在代码合成任务上,超过一半的情况(9个案例中的7个)下,不使用追踪信息进行微调的模型取得了最佳结果。语义信息的加入并未带来一致的性能增益。 * 在代码推理任务上,也观察到了类似现象。 * 不同追踪表示的比较:没有一种单一的追踪表示形式能够持续优于其他形式。不过,在程序修复任务中,SemCoder是相对较好的选择;而在代码推理任务中,由GPT-4生成的SemCoder表示能带来相对一致的提升。 * 参数高效微调的影响:LoRA等PEFT方法的有效性高度依赖于模型本身。例如,对于DeepSeek模型,全参数微调效果最好;而对于Llama和Gemma2模型,LoRA在大多数情况下能提升性能。然而,无论采用哪种微调方法,不包含语义信息的微调数据仍然是获得最佳性能的最可靠选择

2. 测试时推理阶段的结果 核心发现:在测试时扩展推理中,语义信息的作用同样有限且模糊,但存在一个例外。 * 测试时扩展策略的有效性:与基础的贪婪解码或思维链(CoT)相比,顺序扩展和并行扩展等测试时计算策略能够一致地提升Code LLMs的代码生成能力。 * 语义信息的作用:在超过一半的案例中(56个案例中的36个),在输入提示中添加语义信息并未能帮助模型生成更正确的代码,这与微调阶段的结论类似。 * 一个例外:本研究自行设计的 Concise 追踪表示形式表现突出,在14个案例中的11个里,其性能不低于不使用追踪信息的基线。这表明,过于冗长或复杂的语义表示可能对模型造成干扰,而简洁、聚焦状态变化的表示可能在推理时提供更有效的指引。

3. 超参数研究 研究还探讨了模型温度(temperature)、顺序扩展中的迭代轮次和每轮生成样本数等超参数的影响。结果表明,较高的温度(如t>0.7)通常优于较低温度(如t=0.2);生成更多样本和进行更多轮迭代通常能带来更好的性能,但需要在计算成本和性能提升之间进行权衡。

四、 研究结论与价值

本研究的核心结论是:现有的、基于执行追踪的代码语义信息,无论是整合到模型的监督微调过程中,还是在测试时作为附加提示提供给模型,对于提升代码大语言模型的性能作用都相当有限。 这一发现挑战了之前一些认为动态语义信息能有效增强Code LLMs推理能力的研究结论。

该研究的科学价值在于: 1. 提供了批判性证据:通过大规模、系统性的实验,揭示了当前将执行追踪语义简单融入Code LLMs训练和推理流程的局限性,促使学界重新思考增强模型代码理解能力的有效路径。 2. 建立了新的基线:研究提出的通用框架和开源数据集为未来该领域的研究提供了统一的工具和基准。研究者可以基于此框架,探索更有效的语义表示形式或集成策略。 3. 指明了未来方向:结论明确指出,未来工作需要:a) 设计更符合Code LLMs处理模式的、全新的语义表示形式(可能涉及更高级的抽象或上下文线索);b) 探索更有效的语义信息整合策略,例如模型架构修改、专门的预训练目标或更自适应的提示技术。

五、 研究亮点

  1. 系统性全面性:这是首个对多种执行追踪表示形式在Code LLMs微调与推理中的作用进行系统性比较和全面评估的研究。涵盖了从数据构建、多阶段微调到多种测试时推理策略的完整流程。
  2. 结论的颠覆性:研究得出了与部分先前工作相悖的结论,即语义信息的直接加入收益有限,这具有重要的警示和纠偏意义,避免了社区在可能低效的方向上过度投入。
  3. 框架与数据集的贡献:研究不仅提出了一个支持多种语义表示的通用框架,还构建并开源了包含丰富语义层信息的高保真数据集,具有很高的工具价值和可复用性。
  4. 细致的实验分析:研究不仅给出了宏观结论,还深入分析了不同模型、不同任务、不同微调方法、不同超参数下的细微差异,例如发现了Concise表示在测试时推理中的相对优势,以及PEFT方法效果对模型的依赖性。

六、 其他有价值内容

研究还讨论了其局限性(如目前仅支持Python语言、实验限于约70亿参数规模的模型)和伦理考量。在伦理方面,研究团队特别关注了执行追踪中可能包含的隐私信息(如凭证、个人身份信息),并设计了三阶段清理流程来缓解此风险。同时,他们也意识到增强的语义推理能力可能被用于生成有害代码,因此采取了控制模型权重发布、部署服务器端过滤机制等措施,并承诺对潜在危害进行持续监控和响应。这些考量体现了负责任的人工智能研究态度。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com