论文阅读-Automated Repair of Programs from Large Language Models

2024-02-07 03:28

本文主要是介绍论文阅读-Automated Repair of Programs from Large Language Models,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章主旨:研究了Codex自动生成的程序中的错误,并探讨了现有的程序修复(APR)工具以及新发布的Codex-e是否能够修复自动生成的有缺陷的程序。

现在基于大语言模型,输入自然语言,生成代码的应用非常普遍。但是生成的代码正确率很低,文章以GPT-3模型的后代-Codex模型,为例,试图利用自动化程序修复(APR)技术来修复Codex产生的代码错误。

自动化修复技术接受一个有缺陷的程序和一个正确性规范,通过稍稍修改程序使其满足给定的规范来生成一个固定的程序。典型的修复工具通过推理程序语义与给定的规范来生成补丁。例如,基于语义的修复工具(如SemFix、Angelix)通过使用符号执行和基于搜索的修复工具(如Gen-Prog、TBar)在预定义的补丁中搜索正确的补丁。

本文实验方向

本文探讨了两个方向来修复语言模型生成的代码的错误

1.现有的APR技术(TBar和Recoder)

2.研究探讨了使用Codex-e作为自动化程序修复工具的可能性。

「利用OpenAI最近发布的Codex编辑模式(这个新功能可以使现有的程序内容发生改变。)」

设计了三种构建Codex-e编辑指令的策略:
- Codex-e 𝑏𝑢𝑔:告知Codex-e存在程序中的错误并请求其修复。
- Codex-e 𝑙𝑖𝑛𝑒:利用现有的自动程序修复技术,通过统计故障定位(Ochiai)获取可能修复行的序列,作为修复提示提供给Codex-e。
- Codex-e 𝑠𝑡𝑚:直接使用可疑语句而不是可疑行号作为指令,进一步探究Codex-e的响应。

文章关键内容概述

RQ1: WHAT MISTAKES DO AUTO-GENERATED CODE USUALLY MAKE?

  • 1. 先前关于基于搜索的自动化程序修复技术的研究表明,自动生成的修补程序很可能表现出某些反模式,这些反模式会导致生成无意义的修补程序。
    2. 直觉上,像Codex这样的大型语言模型自动生成的代码也可能包含反模式。
    3. 因此,分析了Codex生成的代码是否犯了LMDefects中的相同常见错误。
    4. 对于Codex要解决的LMDefects中的编程任务,首先运行五个自动生成的解决方案在公共测试上,然后将那些通过公共测试的解决方案提交到LeetCode在线判定平台进行私有测试验证。
    5. 如果Codex生成的五个自动解决方案𝑆都不能通过所有的测试(公共和私有测试),则认为𝑆是未解决的解决方案。
    6. 如果没有一个未解决的解决方案𝑆对一个编程任务,则认为该编程任务已解决。
    7. Codex在简单和中等难度级别上分别产生37个和5个解决问题的编程任务,研究剩余71个未解决的编程任务中355个导致编译错误或测试失败的未解决问题𝑆的错误。
    8. 对于Codex生成的每个未解决的解决方案𝑆𝑏𝑢𝑔𝑔𝑦,我们首先参考其他相同编程任务的解决方案来获取修复提示,然后通过对现有代码进行最少的修改来构建修复错误的简单修补程序。
    9. 我们的目标是构建每个未解决问题𝑆的“基准修补程序”𝑆𝑓𝑖𝑥𝑒𝑑,以获得𝑆𝑏𝑢𝑔𝑔𝑦和𝑆𝑓𝑖𝑥𝑒𝑑之间的“差异”。
    10. 这个“差异”代表了Codex自动生成的程序中的错误或错误。
    11. 根据这个“差异”,我们手动将每个未解决的解决方案归类到以下类别中:对齐算法:使用的算法与任务描述中给出的要求不一致。
    12. 表2展示了未解决解决方案的缺陷分类,以及每个缺陷的示例(“示例”列)和编程任务的难度级别(“简单”和“中等”列),以解释每个缺陷。
    13. 为了更容易比较缺陷类型,我们基于Codeflaws中使用的类别(一个包含编程竞赛参与者错误提交的基准)导出缺陷分类。
    14. 与Codeflaws的缺陷分类相比,我们意识到自动生成的代码的错误类型与Codeflaws中的错误类型重叠。
    15. 特别是,Codeflaws和我们的数据集都包含需要多块或单块修复的缺陷。
    16. 此外,对于单块修复,两个数据集都具有类似的选择突变运算符(例如,运算符突变和变量突变)。
    17. 这表明Codex犯了与人类参与者类似的多块或单块修复缺陷。
    18.我们认为这是可以预料的,因为Codex是用很多可能存在错误的人类编写的程序进行训练的。
    19. 表2显示Codex大多数的错误是语法错误和与算法相关的错误。
    20. 实际上,当编程任务的难度从“简单”增加到“中等”时,语法错误和与算法相关的错误数量增加,这表明与较低难度级别的较低难度问题相比,Codex解决更难的编程任务的可能性较小。

RQ2: HOW EFFECTIVE ARE APR TOOLS IN FIXING THE CODE PRODUCED BY CODEX?

  • 1. Codex的错误与人类编写的解决方案有一些相似之处。
    2. 研究现有APR工具修复Codex生成代码的有效性。
    3. 现有APR工具通常生成小修补(通常是一行或几行修复),因此排除无法编译的程序或需要更改整个算法的程序。
    4. 知道可以自动修复编译错误的技术,但本研究仅评估修复编码错误的工具,将修复编译错误工具的评估留作后续工作。
    5. 对Codex模型未解决的解决方案(排除产生语法错误和算法相关错误的解决方案)运行TBar和Recoder,以评估它们生成修补程序的能力。
    6. 在修补程序验证阶段,自动生成的修补程序被归类为以下几种:可能的修补程序、正确的修补程序。
    7. TBar在容易和中等难度的任务上分别产生12个和8个可能的修补程序,但只正确修复了4个容易和2个中等难度的修补程序。
    8. 与TBar相比,Recoder产生更多可能的修补程序(分别在容易和中等难度任务上产生10个和12个),以及更多正确的修补程序(分别为6个和4个)。
    9. 如果比较所有生成修补程序中正确修补程序的百分比,Recoder仍然优于TBar。
    10. 测试用例在修补程序生成中起着重要作用。
    11. 限制公共测试用例的数量是阻止APR工具生成更多正确修补程序的原因之一。
    12. Table 3显示了TBar和Recoder分别生成的修补程序数量和正确修复的编程任务数量。
    13. Table 4显示了使用不同APR工具正确修复的解决方案数量(仅考虑单块错误)。
    14. Recoder修复了八个编程任务,而TBar只修复了五个任务。
    15. TBar将容易级别任务上解决的程序数量从37增加到40(Recoder进一步通过修复另外两个容易级别任务增加这个数字),而Recoder将中等级别任务上解决的程序数量从5增加到9。
    16. 结合这两个工具,APR工具帮助Codex修复了5个和4个容易级别和中等级别的任务。
    17. 进一步分析两个APR工具修复的缺陷类型。
    18. Table 4显示了每个缺陷类别可以正确修复的解决方案数量,其中“TBar”和“Recoder”列显示了相应工具产生的修补程序数量。
    19. 对于每个类别,修补工具可能不会通过最小化程序更改来修复错误。

RQ3: CAN CODEX EDIT MODE FIX PROGRAM BUGS?

  • 1. OpenAI最近发布了Codex编辑模式的更新,这个新功能可以使现有的程序内容发生改变。
    2. Codex编辑模式通过输入程序和一个自然语言指令来输出一个经过编辑的程序。
    3. 研究探讨了使用Codex-e作为自动化程序修复工具的可能性。
    4. 为了减少自然语言描述对Codex-e的影响,去除了每个未解决方案中的任务描述。
    5. 设计了三种构建Codex-e编辑指令的策略:
    - Codex-e 𝑏𝑢𝑔:告知Codex-e存在程序中的错误并请求其修复。
    - Codex-e 𝑙𝑖𝑛𝑒:利用现有的自动程序修复技术,通过统计故障定位(Ochiai)获取可能修复行的序列,作为修复提示提供给Codex-e。
    - Codex-e 𝑠𝑡𝑚:直接使用可疑语句而不是可疑行号作为指令,进一步探究Codex-e的响应。
    6. 对于每个未解决的解决方案,选择了最可疑的十句话,并要求Codex-e为每句话生成五个可能的编辑。
    7. 与常规Codex模式下的初始解决方案生成类似,设置了温度参数0.8以增加找到正确编辑的可能性。
    8. 表5展示了三种策略的结果,其中列Codex-e 𝑏𝑢𝑔、Codex-e 𝑙𝑖𝑛𝑒和Codex-e 𝑠𝑡𝑚分别显示了使用相应编辑指令的正确补丁数量。
    9. 使用"Fix bug in the program"作为指令时,Codex-e 𝑏𝑢𝑔成功产生了15个正确的补丁。
    10. 当给出错误的行号作为指令时,Codex-e 𝑙𝑖𝑛𝑒只修复了六个需要单块修复的解决方案和一个需要多块修复的解决方案。
    11. Codex-e 𝑠𝑡𝑚使用程序文本(如"i -= 2;")作为指令,成功修复了16个有错误的解决方案,效果最好。
    12. Codex-e 𝑠𝑡𝑚的有效性归功于其使用可能更有助于引导像Codex这样的语言模型匹配相关语句。 

实验结果表明:

- Codex生成的程序与人类程序员生成的程序有共同的缺陷类别;
- 现有的APR技术(TBar和Recoder)在修复自动生成的程序中的bug表现不佳;
- 在适当的指令(来自故障定位的信息)下,Codex-e在代码编辑生成方面显示出初步的潜力,通过修复45%更多的错误程序,其表现优于TBar和Recoder。

这项研究的影响包括:

- 通过传统软件工程技术(例如,AST信息、故障定位)增强语言模型;
- 突显了APR技术的局限性,尤其是基于模式的approach;
- 建议APR研究的未来方向(例如,灵活的故障定位形式)。 

这篇关于论文阅读-Automated Repair of Programs from Large Language Models的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686389

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

BERT 论文逐段精读【论文精读】

BERT: 近 3 年 NLP 最火 CV: 大数据集上的训练好的 NN 模型,提升 CV 任务的性能 —— ImageNet 的 CNN 模型 NLP: BERT 简化了 NLP 任务的训练,提升了 NLP 任务的性能 BERT 如何站在巨人的肩膀上的?使用了哪些 NLP 已有的技术和思想?哪些是 BERT 的创新? 1标题 + 作者 BERT: Pre-trainin

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需