[论文解读] Toward Trustworthy Neural Program Synthesis
本文提出 Speculyzer,一种通过联合生成程序和可执行规范(如输入输出测试用例或逻辑关系)来增强神经程序合成的方法,以提升校准性、可解释性和准确性。通过使用学习模型预测程序正确性并识别最有用的规范,该方法实现了校准良好的置信度估计、人类偏好的解释,并在代码生成基准上保持或提升最先进性能。
We develop an approach to estimate the probability that a program sampled from a large language model is correct. Given a natural language description of a programming problem, our method samples both candidate programs as well as candidate predicates specifying how the program should behave. This allows learning a model that forms a well-calibrated probabilistic prediction of program correctness. Our system also infers which predicates are useful to explain the behavior of the generated code, and humans preferred these in a human study over raw language model outputs. Our method is simple, easy to implement, and maintains state of the art generation accuracy results.
研究动机与目标
- 为解决神经程序合成器缺乏可信度的问题,使系统能够可靠检测何时无法解决问题。
- 通过生成人类可理解的规范来提升可解释性,阐明为何生成的程序是正确的。
- 在引入额外的验证与解释组件的前提下,保持或提升神经代码生成的整体准确性。
- 开发一种系统,对程序正确性形成校准良好的概率估计,降低引入细微错误的风险。
提出的方法
- 系统使用大语言模型从自然语言问题描述中独立采样候选程序和候选规范(输入输出测试用例或参数化逻辑关系)。
- 通过机械检查将规范与生成的程序进行比对,以验证正确性,从而形成程序-规范对的数据集。
- 训练一个学习模型,基于规范检查结果预测程序是否正确,从而实现对正确性的校准概率估计。
- 利用基于人类偏好数据训练的学习评分机制,对规范的有用性进行排序,以评估其在解释程序行为方面的效用。
- 在单一流程中集成程序与规范的生成,使模型能够通过自生成的规范来‘检查自身工作’。
- 该方法在 MBPP 和 HumanEval 基准上进行评估,以 pass@k 为主要准确率指标,并通过人工研究评估解释质量。
实验结果
研究问题
- RQ1神经程序合成器能否生成对程序正确性的校准良好概率估计,从而降低部署错误代码的风险?
- RQ2与原始模型输出相比,模型自动生成的规范是否能显著提升输出的可解释性,根据人类用户的判断?
- RQ3在引入规范生成与验证后,整体程序合成的准确性是否能够提升,还是反而会损害性能?
- RQ4在解释程序行为方面,哪种类型的规范——输入输出测试用例还是逻辑关系——更为有效?
- RQ5当存在多个有效规范时,模型能否学会识别出最有助于解释正确性的规范?
主要发现
- 所提方法实现了对程序正确性的校准良好置信度估计,使系统能够在不依赖未校准模型 logits 的前提下,做出可靠的可信决策。
- 人类研究表明,模型生成的规范作为解释比原始模型输出更受青睐,表明其可解释性与可用性得到提升。
- 该方法在 MBPP 和 HumanEval 基准上保持或略微提升了 pass@k 准确率,表明尽管增加了复杂性,性能并未下降。
- 系统成功识别出最有助于解释程序行为的规范,且排名靠前的规范显著优于随机或排名靠后的规范。
- 该方法实现了某种形式的自我验证,即模型可自动生成测试用例,从而提升鲁棒性并减少对外部测试套件的依赖。
- 规范合成的整合使系统更具可信度,能够在不确定时选择不回答,而非冒着生成错误代码的风险。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。