作者: Hung Le, Yue Wang, Akhilesh Deepak Gotmare, Silvio Savarese, Steven C.H. Hoi
提交/修订日期: 2022年7月5日提交,2022年11月3日修订(v3)
主题分类: Machine Learning (cs.LG); Computation and Language (cs.CL); Programming Languages (cs.PL)
摘要:
程序合成或代码生成的目标是生成满足问题规范的代码。近期使用大规模预训练语言模型(LMs)的方法已显示出有前景的结果,但它们存在一些关键局限。具体而言,这些方法通常遵循标准的监督微调流程,仅从自然语言问题描述和真实程序的配对中训练代码生成模型。这种范式在很大程度上忽略了问题规范中一些重要但可能有用的信号,例如单元测试,因此在解决复杂、未见过的编码任务时往往表现不佳。
为了应对这些局限,我们提出了“CodeRL”,一个通过预训练语言模型和深度强化学习(RL)进行程序合成任务的新框架。具体来说,在训练阶段,我们将代码生成语言模型视为一个行动者网络,并引入一个评论家网络,该网络被训练来预测生成程序的功能正确性,并为行动者提供密集的反馈信号。在推理阶段,我们引入了一种新的生成过程,采用关键采样策略,使模型能够基于来自示例单元测试和评论家评分的反馈自动重新生成程序。对于模型主干,我们扩展了CodeT5的编码器-解码器架构,采用了增强的学习目标、更大的模型规模和更好的预训练数据。
我们的方法不仅在具有挑战性的APPS基准测试中取得了新的SOTA结果,而且在更简单的MBPP基准测试中也显示出强大的零样本迁移能力,并取得了新的SOTA结果。