# LEVER: Learning to Verify Language-to-Code Generation with Execution
- **作者:** Ansong Ni, Srini Iyer, Dragomir Radev, Ves Stoyanov, Wen-tau Yih, Sida I. Wang, Xi Victoria Lin
- **提交日期:** 2023年2月16日(v1),最后修订于2023年9月1日(v3)
- **分类:** 机器学习(cs.LG);计算与语言(cs.CL);编程语言(cs.PL);软件工程(cs.SE)
## 摘要
大型代码语言模型(code LLMs)的出现推动了语言到代码生成的显著进展。该领域的最新方法结合了LLM解码、基于测试用例或执行结果启发式的样本剪枝与重排序。然而,在许多实际语言到代码应用中,获取测试用例具有挑战性,且启发式方法难以充分捕捉执行结果的语义特征(如数据类型和值范围),而这些特征常指示程序的正确性。
本文提出 **LEVER**,一种通过**学习利用执行结果验证生成程序**来改进语言到代码生成的简单方法。具体来说,我们训练验证器,根据自然语言输入、程序本身及其执行结果,判断从LLM中采样的程序是否正确。通过结合验证分数与LLM生成概率,并对具有相同执行结果的程序进行边缘化重排序。在表格问答、数学问答和基础Python编程等四个数据集上,LEVER在基础代码LLM(如code-davinci-002)上实现了一致的性能提升(4.6% 到 10.9%),并在所有数据集上取得了新的最先进结果。
## 备注
- ICML‘23 论文
- 代码已开源:[GitHub](https://github.com/niansong1996/lever)