北大李戈团队提出新代码模型对齐方法 CodeDPO:显著提升代码准确性与执行效率
北大李戈团队提出新代码模型对齐方法 CodeDPO:显著提升代码准确性与执行效率
北京大学李戈团队与字节跳动合作,提出了一种新的代码模型对齐方法CodeDPO,通过将偏好学习融入代码模型训练中,并利用代码自验证机制,显著提升了代码生成的准确性和执行效率。
研究背景与意义
代码生成模型在推动软件工程发展方面发挥着重要作用。然而,现有的训练方法,如监督微调(SFT),虽然提升了代码质量,但存在关键局限性:没有完全训练模型在正确与错误解决方案之间做出偏好选择。为解决这一问题,北京大学李戈教授团队与字节跳动合作,提出了CodeDPO框架。
CodeDPO的核心原理
CodeDPO框架将偏好学习融入代码模型训练中,基于正确性和效率两个关键因素定义代码偏好。研究团队期望在代码模型的训练过程中,提升模型对正确、高效代码的偏好性。
CodeDPO方法包含四个关键步骤:
- 数据种子构建:从开源代码库中收集数据种子并生成编程任务提示。
- 正确性优化与自验证评分:同时生成代码与测试,通过自验证机制构建用于正确性优化的数据集。自验证评分根据生成代码是否通过测试进行迭代更新。
- 执行时间效率优化:在选定的可信测试集上测量执行时间,以构建效率优化数据集。
- 模型偏好训练:从上述两个阶段收集数据集,并使用DPO方法来训练多种代码模型。
代码自验证机制
CodeDPO通过自验证机制从真实代码库构建数据集,其中代码和测试用例被同时生成并用于评估。团队假设,能被更多代码片段执行的测试更为可靠,而通过更多测试的代码则更有可能是正确的。为此,CodeDPO采用了一套自验证过程:每个代码片段和测试用例首先获得一个自验证分数,随后使用一套类PageRank的算法进行迭代更新。
实验结果
研究团队在HumanEval(+)、MBPP(+)和DS-1000三个数据集上进行了广泛实验,涵盖8种主流代码生成模型。实验结果显示,CodeDPO在提升代码准确性方面取得了显著进步,同时在提升代码执行效率方面也表现出有效性。
在HumanEval数据集上,DeepSeekCoder-6.7B模型配合CodeDPO后,通过率达到了83.5%。在更具挑战性的HumanEval+上也展现出显著进步。在DS-1000数据集上,CodeDPO总体上显示出对其各自基线模型的性能提升。
对于代码执行效率,团队通过测量生成代码的执行时间并计算加速比来评估。结果显示,CodeDPO使生成的代码平均加速1.25至1.45倍,约20%-45%的生成代码解决方案得到了改进。
消融实验
文章还探讨了不同偏好优化策略(DPO、KTO和SFT)对代码生成模型性能的影响。实验结果表明,DPO表现最佳。得益于新型的数据构建方法,团队能够获得分布均衡的正负偏好对,从而增强了DPO中的对比机制。
未来展望
CodeDPO的框架不仅验证了自生成、验证机制和偏好学习在代码生成领域的有效性,还为未来更大规模的代码偏好优化奠定了坚实基础。CodeDPO的特色在于,不需要有大量优质的测试用例,减少了对外部资源的依赖,使得该框架能够在高质量测试数据可能稀少的现实场景中优化代码模型。
随着技术的不断发展,CodeDPO有望在实际应用中帮助开发团队生成更优质、更符合需求的代码,显著提升软件的可靠性与交付质量。