基于检索的代码相关小样本学习的提示选择

互联不一般哥 2024-04-29 10:50:42

Retrieval-Based Prompt Selection for Code-Related Few-Shot Learning

Noor Nashid, Mifta Sintaha, Ali Mesbah

University of British Columbia,Vancouver, Canada

引用

Nashid N, Sintaha M, Mesbah A. Retrieval-based prompt selection for code-related few-shot learning[C]//2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE). IEEE, 2023: 2450-2462.

论文:https://ieeexplore.ieee.org/abstract/document/10172590

摘要

本文提出了一种名为CEDAR的提示创建技术,可用于小样本学习中的代码相关任务。通过嵌入或频率分析,CEDAR自动检索与开发人员任务相似的代码演示,并将其作为输入。我们将CEDAR应用于两种编程语言和两种任务:测试断言生成和程序修复。实验结果表明,CEDAR在这两项任务中表现出了竞争力,仅需少量相关代码演示。对于测试断言生成,CEDAR的准确度比特定任务模型和微调模型高出333%和11%。对于程序修复,CEDAR的准确度比特定任务模型高出189%,与最近的微调模型相比具有竞争力。这一发现对从业者具有实际意义,因为CEDAR可应用于多语言和多任务环境,无需特定任务或语言的培训,仅需最少的示例和努力。

1 引言

基于学习的技术已应用于广泛的源代码相关任务,例如程序修复和断言生成。虽然特定于任务的 ML 模型可以取代硬编码的规则和启发式方法,但构建大型示例数据集和(重新)训练模型需要付出巨大的努力,并且不能推广到给定的代码处理任务或编程语言之外。

超大型神经网络,例如用于语言理解和生成的BERT和T5,近年来在各种任务中取得了巨大的成果。然而,它们仍然需要大量特定于任务的训练示例来微调模型,并且通常可以支持少数编程语言。此外,必须更新一些模型参数以适应任务,这增加了模型微调的复杂性

最近,诸如 GPT-3之类的大型语言模型在大规模数据集上进行了训练,已被证明可以泛化到新任务,而无需针对特定任务进行微调。这些模型采用文本输入,文本输入由自然语言指令、一些任务演示示例以及定义为提示的查询组成。这种从所需的任务描述以及一些示例中学习的概念被称为基于提示的小样本学习。通过使用提示,这些大型语言模型在模型未明确训练的不同任务中被证明是有效的,而不需要大规模的特定于任务的数据收集或模型参数更新。

已经提出了许多用于代码生成的大型预训练语言模型,它们主要关注从自然语言描述生成代码的提示。 GITHUB COPILOT采用大型语言模型(例如 CODEX)来完成代码完成任务。最近的研究评估了采用大型语言模型的代码完成如何有助于提高开发人员的生产力,或解决编码面试问题和竞争性编程,或者如何利用外部反馈诸如生成测试之类的来源,以提高生成代码的质量。人们还努力采用大型语言模型来修补简单的错误。

在本文中,我们重点关注基于提示的少样本学习在代码相关任务中的应用,并解决以下问题:(a)少样本学习是否可以应用并推广到特定的代码相关任务? (b) 少样本学习与特定任务或微调模型相比如何? (c) 代码相关任务的有效提示包含哪些要素? (d) 如何选择有效的例子作为代码相关任务的演示?

我们研究如何为不同的代码处理任务构建有效的几次学习提示。我们提出了一种新技术,通过应用基于嵌入或频率分析的基于检索的技术,从大量代码示例中选择一些演示。我们在名为 CEDAR(代码示例演示自动检索)的框架中实施了我们的方法。我们将 CEDAR 应用于两个不同的任务,即测试断言生成和程序修复。我们提出一个评估我们使用 CODEX 来实例化具有代码相关的各种数字(例如,零样本、单样本或 n 样本)和形式(例如,随机与系统,或有自然语言描述与没有自然语言描述)的少样本学习提示。

在本文中,我们做出以下贡献:

一种基于提示的小样本学习的系统方法,用于两个与代码相关的任务,即测试断言生成和程序修复。据我们所知,第一个工作是提出与代码相关的提示和基于检索的方法(基于嵌入和频率),用于小样本学习中的演示选择。我们的框架 CEDAR,可用。与最先进的技术相比,评估我们基于提示的演示检索方法的有效性。对于程序修复任务,通过采用基于检索的技术,CEDAR 的性能明显优于最先进的特定任务模型 188.94%,优于微调模型 4.91%。对于断言生成,基于检索的演示选择的性能分别优于特定任务模型和微调模型 333.47% 和 11.05%。

2 技术介绍

我们的目标是设计一个有效的提示符,可以帮助大型语言模型完成不同的代码相关任务。我们首先为代码生成任务定义了提示的概念。然后,我们介绍我们的提示构建技术,称为CEDAR,它采用不同的技术进行代码演示选择。

图1:CEDAR方法概述

2.1 问题定义:提示创建

在少样本学习中,需要为给定的代码相关处理任务提供提示。我们定义一个提示,P = { xtest + CD + NL } 其中 xtest 是要推断的开发者查询,CD 是输入代码序列 (xi) 的一组代码演示 CD = {(xi, yi)}n i=1和期望的输出序列(yi),NL是自然语言模板; size(P) ≤ context-window,即提示适合语言模型的上下文窗口限制。我们将代码实例化称为演示示例,E 与自然语言查询一起,组成一个提示。

现在,对于新的开发人员查询 xtest,挑战是设计一种代码检索技术 CR(xtest, CD),以便它将选择代码演示示例的子集 E = {(xj , yj)}m j=1 ⊂ CD,其中 m ≤ n 使得所选示例与 xtest 中的任务相似并且适合语言模型的上下文窗口限制。给定一个大型语言模型LLM,在推理过程中,一个精心创建的提示,P应该以高精度产生所需的目标输出序列,并且在处理时间或资源使用方面不会产生显着的过载,以便检索技术可以被采用即时的。

2.2 示范检索

图1描述了我们的整体方法。在高层次上,CEDAR的输入是一组代码演示,输出是一个基于文本的提示符(P),它由带有或不带有自然语言指令的任务描述和所选代码演示的实例组成。接下来,我们将介绍CEDAR的主要组成部分。

第一步是构建一个提示,以从语言模型中引出预期的响应。开发者的意图可以以自然语言文本的形式进行描述,无论是否包含代码演示的实例。虽然自然语言可以为LLM提供线索,但添加代码演示可以帮助模型解释开发人员明确期望的预期响应。要实现这个演示构建器有两个组件,即(1)演示检索器,和(2)模板选择器。对于一个未见过的测试示例xtest,演示检索器从演示池中提取类似的代码使用示例。几个写得很好的演示实例,展示了任务所需的内容,可以帮助LLM理解预期的行为。

我们选择示例的方法涉及找到与开发人员查询中指定的任务相似的演示。为此,我们采用信息检索技术,从与给定查询匹配的演示池中获得top-K相关演示。在图1中,我们使用每个任务中准确预测的样本作为我们的运行示例。在这里,不完整的代码代表每个任务测试集中的一个真实样本查询,检索到的相似代码代表基于查询xtest的单个匹配CD。我们采用了一个稀疏检索模型来执行词汇匹配,并基于查询(xtest)计算相关性分数和排序代码演示(CD)。此外,我们探索了使用句子transformer基于嵌入向量检索相关文档的密集检索技术。接下来,我们描述了我们基于检索的演示选择步骤。

基于检索的示范选择。在此步骤中,我们使用神经搜索和基于频率的检索技术来根据与查询的相似性来选择演示。因此,每个查询 xtest 的 CD 数量可能会根据为该查询找到的类似演示的数量而变化。但是,由于 CODEX 中对于给定提示存在上下文窗口限制,因此我们选择可以满足该限制(包括查询)的相似演示的最大数量。

嵌入(SROBERTA):对于基于嵌入的搜索,我们使用句子转换器模型将代码片段编码为向量。具体来说,我们采用在 CodeSearchNet 数据集上训练的预训练 st-codesearch-distilroberta-base3 模型。在断言生成任务中,对于给定的查询,测试方法片段被输入到句子转换器模型中以生成嵌入向量。然后,使用余弦相似度度量从代码演示集 CD 中检索向量空间中最接近此查询的前 N ​个测试代码片段。对于程序修复,给定错误类别的查询 (xtest),CEDAR 会根据该特定错误类别的代码演示中的错误代码片段执行相似性搜索。频率(BM-25):我们使用稀疏检索方法BM-25,它是TF-IDF的扩展,以找到具有最相似相关性分数的每个测试样本的演示。在断言生成中,BM-25 根据测试代码片段的相似性对 CD 进行排名给定查询,xtest。另一方面,对于程序修复,BM-25 对 CD 中该错误类型内的错误代码片段进行排名。

模板选择。可以使用或不使用自然语言指令来编写提示。在提示中包含自然语言指令可以为模型提供有关开发人员意图的附加信息,但由于使用自然语言固有的实验性质,它也增加了提示工程的风险。在模板选择步骤中,我们为每个任务中的最佳表现策略构建带有和不带有自然语言指令的提示,以评估自然语言指令的效果。

2.3 提示构建器和模型调用层

对于给定的与代码相关的任务,在这一步中,我们通过编写(a)代码演示、CD(b)开发人员查询、xtest 和(c)自然语言指令来构建提示。为了选择演示,我们从演示检索器组件中获取示例。然后我们选择一个特定于任务的模板并结合这三个元素来构建最终的提示。对于小样本学习,我们可以采用不同的LLMs。在这项工作中,CEDAR 采用了 CODEX,这是一种基于 GPT3 的LLM。它接受了海量代码语料库的训练,其中包含来自多种编程语言(例如 JavaScript、Python、C/C++ 和 Java)的示例。 CODEX 由 OpenAI4 发布,并为 GITHUB COPILOT 提供支持——一个 AI 对程序员,可以生成整个代码片段,并给出自然语言描述作为提示。与 GPT-3 类似,CODEX 被训练为预测下一个标记作为自动完成任务,给定过去的标记为大型代码语料库的上下文。我们选择了 CODEX,因为它是一种流行的源代码LLM,并且已在文献中进行了研究。我们使用 CODEX API 通过构建的提示来调用模型。

一旦模型生成代码建议,CEDAR 就会清理输出并执行评估。不同的任务需要不同的评估指标,并且可能需要更多特定于任务的评估指标来自动评估给定任务。 CEDAR 提供通用评估指标,例如准确度、编辑距离、LCS 和延迟。 CEDAR 的最终输出是经过净化的模型建议和评估结果。

2.4 代码相关任务的提示模板

断言生成的提示设计。图 2 说明了断言生成的提示模板。输入提示包含两部分——代码演示、CD 和查询,x测试。自然语言指令在模板中用蓝色文本表示。每个演示都用分隔符 END_OF_DEMO 分隔。对于断言生成,每个演示都包含焦点方法、包含 <AssertPlaceholder> 的测试方法以及预期的断言。该查询包含单元测试的上下文(焦点方法和测试方法),后跟指令。这本质上是一个自动完成任务,其中查询是用于提示模型的不完整示例。最后,给定提示的预期输出是一行断言。

图2:断言生成提示模板

程序修复的提示设计。图3展示了提示模板中程序修复的运行示例。与之前的模板类似,输入提示包含相同的两个部分(CD 和 xtest);蓝色文本表示模板中的自然语言指令,每个演示均以 END_OF_DEMO 作为分隔符分隔。对于程序修复,每个演示都包含错误代码片段、错误上下文(即 ESLint 规则名称、错误消息/证据、警告行片段)和固定代码片段。该查询包含自然语言指令,后跟有错误的代码片段的上下文。由于它是自动完成任务,因此注释“Fixed JavaScript”用于指示模型生成正确的代码片段。最后,给定提示的预期输出是解决错误的多行代码片段。

图3:程序修复提示模板

3 实验评估

为了评估 CEDAR 的有效性,我们解决了以下研究问题:

• RQ1:基于检索的提示创建有多有效?

• RQ2:CEDAR 的准确性与最先进的模型相比如何?

为了运行我们的实验,我们使用 CODEX 模型代码-davinci-002。我们将温度设置为 0,以便从 CODEX 获得明确定义的答案。我们在具有 62 GB RAM 的 Intel(R) Xeon(R) CPU 2.50GHz 机器上运行所有实验。运行的操作系统平台是 RHEL 8。为了实现 BM-25,我们使用了 gensim5。这是一个广泛使用的大型语料库相似性检索包。对于向量搜索,我们使用 vdblite6,它是一个用于向量相似性搜索的数据库。在以下小节中,我们概述了为回答每个研究问题而设计的实验结果。

3.1 数据集

我们将 CEDAR 与用于断言生成的ATLAS和用于程序修复的TFIX进行比较。为了与这些特定于任务的模型进行比较,我们从相应的训练数据集中选择代码演示 CD。 TFIX和 ATLAS等特定任务模型需要大型训练数据集。相比之下,CEDAR 的目标是从 TFIX 和 ATLAS 训练数据集中选择一些演示实例。在这项工作中,为了检索演示,我们使用各个任务的训练数据集作为演示池,但从概念上讲,可以从包含类似格式的上下文信息和给定任务的查询的任何项目创建该演示池。

ATLAS数据集。我们使用 ATLAS中的数据集来验证 CEDAR 为 Java 代码生成断言语句的能力。每个数据点都包含一个焦点方法和一个测试方法,作为给定测试方法生成单个断言的上下文,称为测试断言对 (TAP)。这些测试方法仅使用JUnit测试框架,JUnit测试框架是Java中流行的单元测试框架。 ATLAS包含抽象的 AGabs 和原始源代码 AGraw;对于我们的评估,我们仅使用原始源代码。该数据集包含八类断言; assertEquals、assertTrue、assertNotNull、assertThat、assertNull、assertFalse、assertArrayEquals、assertSame。训练集中的TAP用作提取演示的池,测试集中的所有TAP用于评估。 AGraw 中的样本总数为 188,154,其中 18,815 个实例用于评估我们的方法。该数据集的训练集大小为 150,523,用作选择 CD 的演示池。

TFIX 数据集。我们使用 TFIX的数据集来评估 CEDAR 修复 JavaScript 代码的能力。该数据集包含根据星数从前 50 万个 GitHub 公共存储库收集的静态 linting 错误,并包含来自 ESLint7 的 52 种错误类型。每个数据点都包含一个有错误的代码片段(通常为 2-4 行),以及来自 ESLint 的错误上下文,该上下文提供有关错误类型、消息和警告行的信息。在他们的论文中,TFIX的作者使用两种类型的数据集来评估他们的模型,即干净测试和随机测试。我们使用干净的测试数据集来查询我们的模型,因为它已用于与中的其他模型进行比较,这与随机测试不同。与 ATLAS 数据集类似,我们使用训练集来提取演示。该数据集中的样本总数为 104,804。按照与 TFIX 相同的分割,我们在推理过程中选择 10% 的样本作为 xtest。从剩余的样本量中,选择 90% 进行微调,10% 进行 TFIX 验证。我们使用用于微调的样本来选择 CD。

3.2 评估指标

准确度完全匹配(%)。该指标用于确定推断输出在词法上与预期输出匹配的样本百分比。

合理匹配的准确性 (%)。我们使用此指标来确定预测输出与预期输出相似的样本百分比。

生命周期成本 (%)。最长公共子序列(LCS)是预测输出与期望输出之间最长公共子序列的比率。我们将其计算为百分比。该指标已用于 NLP 任务的句子排序。

编辑距离 (ED.)。该指标确定推断输出与预期输出匹配所需的编辑操作数量。这些编辑操作可以是添加、删除或修改。编辑距离越小,预测输出越接近实际输出。该指标已在基于学习的代码相关工作中用作衡量开发人员工作量的代理。

断言方法匹配 (AMM) %。该指标仅用于断言生成任务,我们在其中计算预期断言类型/方法与预测断言类型/方法之间的匹配百分比。该指标已在之前的工作中使用过。

推理时间。这是在给出提示的情况下预测输出的时间量(以秒为单位)。

3.3 基线

我们将 CEDAR 与在演示检索器中选择随机代码片段的几种基线方法进行比较。在随机策略中,我们从演示池中随机选择示例。

对于基线,我们在选择提示中使用的演示样本时认为搜索空间是随机的。为此,我们通过无样本(零样本)、一个样本(单样本)、随机选择 N 个样本(随机 N 样本)和基于类别的 N 个样本(每个类别 N 样本)来改变样本数量):

零射击:此提示不包含任何代码演示、CD;相反,直接使用自然语言指令查询模型,无需任何示例。一次性:此提示仅包含一张 CD,后跟一个查询。每个类别N-shot 1 个示例:此提示包含来自该代表性任务的每个类别的N 个随机示例。目标是向LLMs展示该代码生成任务的每个类别的示例。对于断言生成,有 8 种不同的断言类型,如 III-A 中所述。我们从每种断言类型中选择了 1 个示例,因此断言生成是 8 个样本。对于程序修复,由于有 52 种不同的错误类型,因此我们选择 52-shot 来包含每个错误类别中的一个实例。N-shot:我们选择代码演示示例 E,以两种方式来理解: (a) 每个类别示例的作用:而对于之前的策略,我们每个类别选择 1 个示例,这里我们随机使用 N 个示例,而不需要类别的明确考虑。结果,断言生成和程序修复的示例数量分别保持为 8 和 52 个; (b) 包含更多示例的效果:我们向LLMs提供更多示例以了解其影响。我们为每个提示选择了 20 个适合上下文窗口限制的断言生成示例。对于用于程序修复的给定开发人员查询 (xtest),我们从上下文窗口内的同一错误类别中随机选择 60 个示例。这些是所有策略中使用的代码演示的最大数量。

3.4 提示的有效性(RQ1)

为了研究提示的有效性,我们尝试了各种输入配置。正如第二节中所讨论的,我们使用从训练集中提取的演示构建提示,并使用测试集中的数据点查询模型。我们对每个数据集执行此操作,并改变演示选择策略和模板。演示模板通过在提示中排除或包含自然语言指令而有所不同。我们尝试了两种类型的演示选择策略——随机和基于检索。我们对整个测试数据集执行随机策略两次并报告平均值。首先,我们确定即时学习所需的最佳演示策略。在确定了效果最佳的演示策略后,我们研究了提示中自然语言指令的效果。

表I:代码相关任务中示范选择策略的结果

表II:代码相关任务中演示模板的结果

结果。表 I 和表 II 显示了每个代码相关任务的结果。我们在下面讨论每项任务的结果。

断言生成:在表 I 中,我们观察到在零样本设置中,精确匹配精度 (EM Acc.) 为 0%,合理匹配精度 (PM Acc.) 为 14.42%。然而,零样本设置的推理时间(1.33 秒)和断言匹配百分比(29.16%)是最低的。平均LCS平均只有15.34%。在一次性设置中,精确匹配的准确率显着提高到 44.41%,合理匹配的准确率则显着提高到 47.64%。生成断言的推理时间也增加到 3.64 秒。与零样本设置的编辑距离 (36.62) 相比,单样本的平均编辑距离增加了 (至 57.83)。 LCS (%) 比零样本设置高 4.2 倍,即实际断言顺序与单样本设置中的预期断言顺序相似 64.97%。断言匹配的百分比是零样本设置 (70.24%) 的 2.4 倍。在特定类别的 8 镜头设置中,准确率分别提高到 50.33%(完全匹配)和 53.69%(合理匹配)。 LCS(%)下降至62.65%,平均编辑距离下降至17.94。匹配断言百分比增加到74.48%,推理时间为2.54秒,这低于一次性设置。我们观察到 8 次设置中随机策略的最佳性能,其中演示是从整个数据集中选择的。在这里,精确匹配的准确度增加到 50.57%,合理匹配的准确度增加到 53.34%。 LCS(%)也增加到68.77%,也高于one-shot设置。此外,编辑距离很短,平均只需要 19.10 次编辑操作,就能在不匹配的情况下达到预期的断言。平均推理时间也低于每个类别 8 个镜头的设置。然而,在随机 20 个镜头设置中添加更多示例后,精确匹配和合理匹配准确率分别略有下降至 49.99% 和 52.73%。虽然 LCS (%) 增加到 74.64%,但随着示例数量的增加,平均推理时间(3.16 秒)、编辑距离(20.53)和断言方法匹配(73.80%)略有下降。

CEDAR 基于检索的策略在断言生成方面产生了最佳结果。在此策略中,SROBERTA 和 BM-25 的平均 CD 数量分别为 7 和 6。基于 SROBERTA 嵌入的演示选择显着提高了性能,精确匹配精度为 75.79%,合理匹配精度为 77.40%。平均LCS(%)增加到88.50%,断言匹配(%)增加到88.49%,明显高于表现最好的随机演示选择策略。推理时间和编辑距离也非常低(分别为 1.78 秒和 11.35 秒)。通过基于频率的 (BM-25) 检索策略,我们观察到相对于 SROBERTA 检索的改进,准确率达到 76.55%(完全匹配)和 78.32%(合理匹配)。 LCS (%) 和断言方法匹配 (%) 也分别增加到 88.99% 和 89.31%。然而,编辑距离(13.18)和推理时间(2.20 秒)均略高于 SROBERTA 检索策略。这意味着基于检索的技术 SROBERTA 和 BM-25 在断言生成任务中提供了有竞争力的结果。

我们还通过运行最佳性能策略(基于 BM-25 的检索,无需自然语言指令)来评估演示模板的效果。在断言生成任务中,自然语言指令的影响可以忽略不计,如表二所示。与带有 NL 指令的模板相比,没有自然语言指令的精确匹配 (76.53%) 和合理匹配 (78.27%) 准确率略低。平均编辑距离(13.68)和推理时间(2.95秒)高于包含自然语言指令的模板。然而,我们观察到断言方法匹配百分比 (89.37%) 和平均 LCS 百分比 (89.00%) 略有改善。

程序修复:此外,对于程序修复,我们观察到基于检索的演示选择优于随机选择演示。在随机零样本学习中,精确匹配准确率为 27.33%,然而,当考虑合理匹配时,准确率提高到 32.57%。推理时间为 3.35 秒,高于断言生成任务。这是因为生成多行代码修复,而不是上一个任务中的单行断言。编辑距离最高(98.30%),LCS百分比为68.02%。一次性学习在精确匹配准确率 (28.54%)、合理匹配准确率 (37.57%)、LCS 百分比 (67.93%) 和较低编辑距离 (87.13%) 方面均略有提高。推理时间比零样本设置高0.60秒。在每个类别 52 个镜头中,精确匹配准确率进一步提高到 33.47%,合理匹配准确率提高到 44.10%。然而,LCS百分比略有下降至67.05%。平均编辑距离和推理时间显着下降,分别为 23.64 和 3.83 秒。在随机 52 个镜头设置中,精确匹配和合理匹配准确率略有增加,分别达到 34.65% 和 45.02%。 LCS % 增加到 67.64%,而编辑距离和推理时间仍与每个类别 52 个镜头相似。在 60 次拍摄的设置中,性能略有提高,精确匹配率为 39.88%,合理匹配率为 49.80%。 LCS 百分比、编辑距离和推理时间略有改善,分别为 68.22%、23.09 和 3.85 秒。

在基于检索的策略中,SROBERTA 检索的精确匹配率为 46.12%,合理匹配准确率为 55.63%,显着高于随机策略。 LCS(%)增加到73.99%,平均编辑距离减少到21.47。推理时间略微缩短至 3.78 秒。通过 BM-25 检索,精确匹配和合理匹配的准确度分别进一步提高到 51.72% 和 60.55%。 LCS(%)为75.57%,是所有策略中最高的。然而,平均编辑距离和推理时间增加到 32.97% 和 4.22 秒。对于 SROBERTA,平均 CD 数量为 48,对于 BM-25,平均 CD 数量为 41。

当改变程序修复中的演示模板时,我们观察到自然语言指令的最佳性能,如表二所示。与断言生成任务不同的是,我们在改变模板时看到了相似的性能,但该任务通过添加自然语言指令而得到了改进。准确度较低的是在没有自然语言指令的情况下,模板中的精确匹配(49.31%)和合理匹配(58.33%)。 LCS (%) 稍低 (74.41%),平均编辑距离增加至 36.25。然而,与包含自然语言指令的模板相比,推理时间为 3.27 秒。我们使用 BM-25 检索获得的结果,使用模板中的自然语言指令作为 CEDAR 中的默认方法,用于后续的两项任务。

3.4 与最先进技术的比较(RQ2)

我们将 CEDAR 与最先进的基于学习的模型进行比较,这些模型已在同一数据集(即 ATLAS AGraw 和 TFIX 数据集)上进行了训练,并在断言生成和程序修复任务中进行了评估。我们使用任务特定模型 ATLAS进行断言生成,使用 HOPPITY、SEQUENCER、COCONUT进行程序修复,以及最近微调的 T5 模型 Mastropaolo 等人。(断言生成)和 TFIX(程序修复)。我们在表 III 中显示了这些方法的最佳报告的 top-1 精确匹配准确度百分比。

表III:与最先进的代码相关任务的比较

断言生成:在表 III 中,任务特定模型 ATLAS、AGraw 的 top-1 准确率为 17.66%。 ATLAS 通过循环神经网络 (RNN) 编码器-解码器模型使用序列到序列学习来学习测试方法中的测试断言语句。它使用焦点方法和测试方法作为序列到序列学习的上下文来生成单个断言语句。最近,Mastropaolo 等人提出了另外两种方法,明显优于基于 NMT 的 ATLAS 模型(分别为 57.60% 和 68.93%)。这两种方法都使用 T5 转换器模型,该模型已在大型源代码和自然语言文本数据库上进行了预训练,然后使用每个代码相关任务的数据集在单任务和多任务设置中进行微调。他们使用来自 ATLAS、AGraw 和 AGabs 的相同数据集来评估其在断言生成方面的性能。 CEDAR 的性能大幅优于微调模型和特定任务模型 (76.55%),无需预训练或微调。

程序修复:在此任务中,我们将中报告的结果用于每个最先进的特定任务和微调模型,这些模型已在包含 JavaScript ESLint 错误的 TFIX 数据集上进行了训练和评估。如表三所示,HOPPITY 的准确度最低,为 7.90%,其次是 COCONUT 的 11.70% 精确匹配准确度。 SEQUENCER 的表现优于 COCONUT,准确率为 17.90%。通过微调大型 T5 变压器模型,TFIX 的性能显着优于所有这四种模型。 TFIX 已针对 94K 样本进行了微调,用于生成 JavaScript 代码修复的任务。尽管如此,CEDAR 的性能优于所有这些模型,其(精确匹配)准确度为 51.72%,无需任何预训练或微调步骤,且示例集要小得多。

转述:朱民笑

0 阅读:0

互联不一般哥

简介:感谢大家的关注