LLM2D
基于语义引导的大语言模型高效程序修复方法
Semantic-guided Search for Efficient Program Repair with Large Language Models
作者: Thanh Le-Cong, Bach Le, Toby Murray
发布日期: 10/23/2024
arXiv ID: oai:arXiv.org:2410.16655v1

摘要

本文首先表明,即使对于小型语言模型(10亿到70亿参数),增加 beam size 也会导致巨大的 GPU 资源消耗,从而导致基于 LLM 的自动程序修复 (APR) 中高达 80% 的内存溢出崩溃。看似简单的降低内存消耗的解决方案包括:(1) 量化 LLM 模型,即将 LLM 的权重从高精度值转换为低精度值;以及 (2) 将 beam search 设为顺序执行,即依次将每个 beam 通过模型,然后将它们连接回单个模型输出。然而,我们通过理论分析和实验表明,这些方法仍然无效。为了解决这个问题,我们引入了 FLAMES,这是一种新颖的基于 LLM 的 APR 技术,它采用语义引导的补丁生成来提高修复效率和内存效率。与依赖于 beam search 的传统方法不同,FLAMES 利用贪婪解码来提高内存效率,同时通过语义引导的最佳优先搜索算法将搜索引导到更有可能产生良好修复结果的候选方案。在每个解码步骤中,FLAMES 使用来自测试验证的语义反馈(例如通过和失败的测试用例数量)来选择最有希望的标记以进一步探索。我们在 Defects4J 和 HumanEval-Java 数据集上的实证评估表明,与传统的基于 LLM 的 APR 相比,FLAMES 不仅将内存消耗大幅降低了高达 83%,而且还加快了修复过程。值得注意的是,FLAMES 在 Defects4J 和 HumanEval-Java 数据集上分别成功地为 333 个和 163 个 bug 生成了 133 个和 103 个正确的修复方案。这表明 FLAMES 不仅更高效,而且优于最先进的技术,在 Defects4J 和 HumanEval-Java 数据集上分别比最先进的基线多修复至少 10 个和 11 个 bug。