作者: Yangruibo Ding, Jinjun Peng, Marcus J. Min, Gail Kaiser, Junfeng Yang, Baishakhi Ray
提交日期: 2024年6月3日(v1)
代码大语言模型(Code LLMs)在代码补全等任务上表现优异,但常常缺乏对执行效果和动态状态等深层语义的理解。本文旨在弥合Code LLMs对静态文本数据的依赖与在调试和程序修复等复杂任务中所需深入语义理解之间的差距。我们提出了一种新策略,通过全面的语义来训练Code LLMs,包括高级功能描述、单个语句的局部执行效果以及整体输入/输出行为,从而将静态代码文本与动态执行状态联系起来。
我们首先收集了PyX,这是一个干净、完全可执行的代码语料库,包含功能描述和执行跟踪。我们提议训练Code LLMs编写代码,并使用自然语言表示和推理执行行为,模拟人类的口头调试过程。该方法开发了SemCoder,一个仅拥有6.7B参数的Code LLM,在代码生成和执行推理任务上展现出与GPT-3.5-turbo相竞争的性能。
SemCoder在HumanEval上达到81.1%(GPT-3.5-turbo: 76.8%),在CRUXEval-I上达到54.5%(GPT-3.5-turbo: 50.3%)。我们还研究了SemCoder的独白式执行推理相较于具体暂存器推理的有效性,表明我们的方法更平滑地整合了来自多个维度的语义。最后,我们展示了将所学语义应用于改进Code LLMs调试和自我优化能力的潜力。