清华:基于单元测试的LLM代码偏好优化

在这里插入图片描述

📖标题:IterPref: Focal Preference Learning for Code Generation via Iterative Debugging
🌐来源:arXiv, 2503.02783

🌟摘要

🔸偏好学习通过利用相对质量比较来增强代码LLM,而不仅仅是监督微调。现有的方法基于测试用例的成功率,从n个候选者中构建偏好对,将通过率较高的样本视为阳性,而将通过率较低的样本视为由阴性。然而,这种方法并没有精确定位代码中的特定错误,这阻碍了模型学习更多信息的纠错模式,因为将失败的代码作为一个整体进行对齐缺乏捕获有意义的错误解决关系所需的粒度。
🔸为了解决这些问题,我们提出了IterPref,这是一个新的偏好对齐框架,它模仿人类迭代调试来改进代码LLM。IterPref明确地定位错误区域,并通过定制的DPO算法对齐相应的令牌。为了生成信息对,我们引入了CodeFlow数据集,在该数据集中,样本被迭代地细化,直到通过测试,并通过修改捕获错误更正。
🔸大量实验表明,配备IterPref的各种代码LLM套件在代码生成方面取得了显著的性能提升,并改善了BigCodeBench等具有挑战性的任务。深入分析表明,IterPref产生的错误更少。我们的代码和数据将在最近公布。

🛎️文章简介

🔸研究问题:如何通过迭代调试方法改进代码生成模型的偏好学习,以提高代码的生成准确性并减少优化过程中的噪声。
🔸主要贡献:论文提出了IterPref框架,通过模拟人类的迭代调试过程,生成高质量的偏好对,并采用改进的直接偏好优化算法,在多个基准测试中显著提升了代码生成模型的性能。

📝重点思路

🔸迭代调试数据集构建:构建了一个新的函数级数据集CodeFlow,通过迭代调试生成偏好对,其中最终通过单元测试的代码版本被视为优选,错误版本则为不优选。
🔸关键差异提取:使用最长公共子序列(LCS)算法提取优选和不优选代码之间的关键差异,以便集中优化这些关键错误。
🔸改进的直接偏好优化(DPO)算法:通过掩蔽策略突出不优选代码片段中的关键标记,帮助模型更好地识别和学习生成正确代码的模式。

🔎分析总结

🔸IterPref在HumanEval和MBPP等多个基准测试中,尽管仅使用59k个偏好对,仍显著提高了代码生成模型的性能。
🔸IterPref在复杂编码任务(如Big-CodeBench)上表现优越,表明其在处理困难编码问题时的有效性。
🔸相较于传统的基于通过率生成偏好对的方法,IterPref通过专注于关键错误标记的对比,减少了优化过程中的噪声,提升了模型对错误的识别和修正能力。

💡个人观点

论文的核心在于通过单元测试来判别正负样本对,并提取两者的差异进行针对性的DPO优化。

🧩附录

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型任我行

随意啦,喜欢就好~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值