历数5年89篇钻研,这篇综述告诉我们深度进修中的代码数据加强怎么样了

当今深度进修以及大模型的飞速发展,带来了对创新手艺的不断追求。在这一进程中,代码数据加强手艺显现出其不可忽视的价值。最近,由蒙纳士大学、新加坡管理大学、华为诺亚方舟实验室、北京航空航天大学以及澳大利亚国立大学联合进行的对近 5 年的 89 篇相关钻研调查,发布了一份关于代码数据加强在深度进修中运用的全面综述。论文地址::,还展望了其未来的发展潜力。作为一种在不收集新数据的情况下增加训练样本多样性的手艺,代码数据加强已在机器进修钻研中获得广泛运用。这些手艺对于资本匮乏畛域的数据驱动模型机能提升具有显著意义。然而,在代

当今深度进修以及大模型的飞速发展,带来了对创新手艺的不断追求。在这一进程中,代码数据加强手艺显现出其不可忽视的价值。

最近,由蒙纳士大学、新加坡管理大学、华为诺亚方舟实验室、北京航空航天大学以及澳大利亚国立大学联合进行的对近 5 年的 89 篇相关钻研调查,发布了一份关于代码数据加强在深度进修中运用的全面综述

历数5年89篇钻研,这篇综述告诉我们深度进修中的代码数据加强怎么样了

论文地址:https://arxiv.org/abs/2305.19915

项目地址:https://github.com/terryyz/DataAug4Code

这份综述不仅深入探讨了代码数据加强手艺在深度进修畛域的运用,还展望了其未来的发展潜力。作为一种在不收集新数据的情况下增加训练样本多样性的手艺,代码数据加强已在机器进修钻研中获得广泛运用。这些手艺对于资本匮乏畛域的数据驱动模型机能提升具有显著意义。

历数5年89篇钻研,这篇综述告诉我们深度进修中的代码数据加强怎么样了

然而,在代码建模畛域,这一法子的潜力尚未被完全挖掘。代码建模是机器进修与软件工程交叉的新兴畛域,涉及运用机器进修手艺解决各种代码工作,如代码补全、代码摘要和缺陷检测。代码数据的多模态特性(编程语言和自然语言)为数据加强法子的定制带来了独特的挑战。

这份由多个顶级学术和工业机构联合发布的综述报告,不仅为我们提供了代码数据加强手艺的深入洞见,还为该畛域的未来钻研和运用指明了方向。我们相信,这份综述将激发更多钻研者对代码数据加强在深度进修中运用的兴趣,并推动这一畛域的进一步试探和发展。

背景介绍

代码模型的兴起与发展:代码模型是鉴于大量源代码语料库训练的,能够精准地模拟代码片断的上下文。从早期采用 LSTM 和 Seq2Seq 等深度进修架构,到后来融入预训练语言模型,这些模型已经在多个源代码的下游工作中显示出了出色的机能。例如,有些模型在预训练阶段就考虑了程序的数据流,这是代码的语义层面结构,用于捕捉变量间的关系。

数据加强手艺的意义:数据加强手艺通过数据合成来增加训练样本的多样性,从而提高模型在各方面(如准确性和稳健性)的机能。在计算机视觉畛域,例如,常用的数据加强法子包括图像裁剪、翻转和颜色调整。而在自然语言处理中,数据加强则大量依赖于语言模型,这些模型能够通过交换词汇或重写句子来改写上下文。

代码数据加强的特殊性:与图像和纯文本不同,源代码受到编程语言严格句法规矩的限制,因此加强的灵活性较低。大多数代码的数据加强法子必须遵守特定的变换规矩,以保持原始代码片断的功能性和语法。常见的做法是使用解析器构建源代码的具体句法树,然后变换为抽象句法树,简化表示的同时保留关键信息,如标识符和控制流语句。这些变换是鉴于规矩的数据加强法子的基础,它们帮助模拟现实世界中更多样的代码表示,提高了代码模型通过加强数据训练的稳健性。

代码数据加强法子的深度试探

在深入探讨代码数据加强的世界中,作家将这些手艺主要分为三类:鉴于规矩的手艺、鉴于模型的手艺和示例插值手艺。下面简要介绍了这些不同的分支。

鉴于规矩的手艺:许多数据加强法子利用预定规矩来变换程序,同时保证不破坏语法规矩和语义。这些变换包括交换变量名、重命名法子名和插入无效代码等操作。除了基本的程序语法,一些变换还考虑更深层的结构信息,如控制流图和使用 – 定义链。有一部分鉴于规矩的数据加强手艺专注于加强代码片断中的自然语言上下文,包括文档字符串和注释。

历数5年89篇钻研,这篇综述告诉我们深度进修中的代码数据加强怎么样了

鉴于模型的手艺:一系列针对代码模型的数据加强手艺旨在训练各种模型来加强数据。例如,一些钻研利用辅助分类生成对抗网络(ACGAN)来生成加强程序。另一些钻研则训练了生成对抗网络,以同时提升代码生成和代码搜索的能力。这些法子主要是针对代码模型特别设计的,旨在通过不同方式加强代码的表示和上下文理解。

示例插值手艺:这类数据加强手艺源自 Mixup,它通过插值输入和两个或更多实际样本的标签来操作。例如,给定计算机视觉中的二分类工作和两张分别是狗和猫的图片,这些数据加强法子可以将这两张图片的输入和它们对应的标签根据随机挑选的权重混合在一起。然而,在代码畛域,这些法子的运用受到独特的程序语法和功能的限制。相比于表面层次的插值,大多数示例插值数据加强法子通过模型嵌入将多个真实样例融合为单一输入。例如,有钻研将鉴于规矩的手艺与 Mixup 结合,混合原始代码片断及其变换后的表示。

历数5年89篇钻研,这篇综述告诉我们深度进修中的代码数据加强怎么样了

历数5年89篇钻研,这篇综述告诉我们深度进修中的代码数据加强怎么样了

策略与手艺

在实际运用中,针对代码模型的数据加强手艺的设计和有效性受到多种因素的影响,例如计算成本、样本多样性和模型的稳健性。本节重点介绍了这些因素,提供了设计和优化适合的数据加强法子的洞见和技巧。

法子堆叠:在之前的讨论中,许多数据加强策略在单一工作中被同时提出,目的是加强模型的机能。通常,这种组合包括两种类型:同类型数据加强或不同数据加强法子的混合。前者通常运用于鉴于规矩的数据加强手艺,其出发点在于单一代码变换无法完全代表现实世界中多样的代码风格和实现。一些工作展示了将多种类型的数据加强手艺融合可以加强代码模型的机能。例如,结合鉴于规矩的代码变换方案和鉴于模型的数据加强来创建加强的语料库,用于模型训练。而另一些钻研则在编程语言上加强,包括两种数据加强手艺:鉴于规矩的非关键词提取和鉴于模型的非关键词交换。

优化:在某些场景中,如加强稳健性和最小化计算成本,挑选特定加强样例候选者至关重要。作家将这种目标导向的候选挑选在数据加强中称为优化。文章主要介绍三种策略:概率性挑选、鉴于模型的挑选和鉴于规矩的挑选。概率性挑选是通过从概率分布中采样进行优化,而鉴于模型的挑选则由模型指导挑选最合适的例子。在鉴于规矩的挑选中,使用特定预定的规矩或启发式来挑选最合适的例子。

概率性挑选:作家专门挑选了三种代表性的概率性挑选策略,包括 MHM、QMDP 和 BUGLAB-Aug。MHM 采用 Metropolis-Hastings 概率采样法子,这是一种马尔可夫链蒙特卡洛手艺,用于通过标识符交换挑选对抗性示例。QMDP 使用 Q-learning 法子来战略性地挑选和执行鉴于规矩的结构变换。

鉴于模型的挑选:采用这种策略的一些数据加强手艺利用模型的梯度信息来指导加强样例的挑选。一个典型的法子是数据加强 MP 法子,它鉴于模型损失进行优化,挑选并通过变量重命名生成对抗性示例。SPACE 通过梯度上升对代码标识符的嵌入进行挑选和扰动,目标是在保持编程语言的语义和语法正确性的同时最大化模型的机能影响。

鉴于规矩的挑选:鉴于规矩的挑选是一种强大的法子,它使用预定的适应度函数或规矩。这种法子通常依赖于决策指标。例如,IRGen 使用鉴于遗传算法的优化手艺和鉴于 IR 相似性的适应度函数。而 ACCENT 和 RA 数据加强 R 分别使用 BLEU 和 CodeBLEU 等评估指标来指导挑选和交换过程,以实现最大的对抗性影响。

运用场景

在几种常见的代码场景中,数据加强法子可被直接运用。

对抗性示例用于稳健性:稳健性在软件工程中是一个关键且复杂的维度。设计有效的数据加强手艺来生成对抗性示例,以识别和减轻代码模型中的漏洞,已成为近年来的一个钻研热点。多个钻研利用各种数据加强法子测试和加强模型的稳健性,进一步加强了代码模型的稳健性。

低资本畛域:在软件工程畛域,编程语言资本严重不平衡。流行的编程语言如 Python 和 Java 在开源仓库中扮演主要角色,而许多语言如 Rust 资本非常匮乏。代码模型通常鉴于开源仓库和论坛进行训练,编程语言资本的不平衡可能会对它们在资本匮乏的编程语言上的机能产生不利影响。在低资本畛域内运用数据加强法子是一个反复出现的主题。

检索加强:在自然语言处理和代码畛域,检索加强的数据加强运用越来越受到关注。这些针对代码模型的检索加强框架在预训练或微调代码模型时纳入来自训练集的检索加强示例,这种加强法子提高了模型的参数效率。

对比进修:对比进修是另一个代码场景中部署数据加强法子的运用畛域。它使模型能够进修一个嵌入空间,在这个空间中,相似样本彼此接近,而不相似的样本则相距较远。数据加强法子被用于构造与正样本相似的样例,以提高模型在缺陷检测、克隆检测和代码搜索等工作中的机能。

文章又接着讨论了几个常见的代码工作以及评估数据集上的数据加强工作,包括克隆检测、缺陷检测和修复、代码摘要、代码搜索、代码生成和代码翻译。

挑战与机遇

作家认为代码数据加强方面面临着许多显著的挑战。然而,正是这些挑战为这一畛域的新可能性和令人激动的机遇铺平了道路。

理论探讨:目前,对代码中数据加强法子的深入试探和理论理解存在明显差距。大多数现有钻研集中在图像处理和自然语言畛域,将数据加强视为一种运用预先存在的关于数据或工作不变性的知识的法子。转向代码时,虽然以前的工作引入了新法子或演示了数据加强手艺如何有效,但它们经常忽略了特别是从数学角度来看的原因和方式。代码的离散性质使得理论讨论变得更为重要。理论讨论使大家能够从更广阔的视角理解数据加强,而不仅仅是根据实验结果。

预训练模型的更多钻研:近年来,预训练的代码模型在代码畛域得到了广泛运用,通过大规模语料库的自我监督积累了丰富的知识。尽管许多钻研利用预训练代码模型进行了数据加强,但大多数尝试仍局限于遮罩令牌交换或微调后的直接生成。在代码畛域中,利用大规模语言模型的数据加强潜力是一个新兴的钻研机会。

不同于以前在数据加强中使用预训练模型的方式,这些工作开启了「鉴于提示的数据加强」时代。然而,在代码畛域中,鉴于提示的数据加强试探仍然是一个相对未被触及的钻研畛域。

处理特定畛域数据:作家重点调查了处理代码的常见下游工作的数据加强手艺。然而,作家意识到在代码畛域的其他特定工作数据方面仍有少量钻研。例如,API 推荐和 API 序列生成可以被视为代码工作的一部分。作家观察到在这两个不同层次之间的数据加强手艺存在差距,为未来工作试探提供了机会。

项目级别代码和低资本编程语言的更多试探:现有法子在函数级别代码片断和常见编程语言方面取得了足够的进展。同时,低资本语言的加强法子虽然需求更大,但却相对稀缺。在这两个方向的试探仍然有限,作家认为它们可能是有前景的方向。

缓解社会偏见:随着代码模型在软件开发中的进步,它们可能被用于开发以人为中心的运用程序,如人力资本和教育,其中偏见程序可能导致对代表性不足的人群做出不公正和不道德的决定。虽然 NLP 中的社会偏见已经得到了很好的钻研并可以通过数据加强进行缓解,但代码中的社会偏见尚未受到关注。

小样本进修:在小样本场景中,模型需要实现与传统机器进修模型相媲美的机能,但训练数据极其有限。数据加强法子为这个问题提供了直接的解决方案。然而,在小样本场景中采用数据加强法子的工作还很有限。在少数样本场景中,如何通过生成高质量的加强数据为模型提供快速泛化和问题解决能力,作家觉得这是一个有趣的问题。

多模态运用:需要注意的是,仅关注函数级别的代码片断并不能准确地代表真实世界编程情况的复杂性和细微差别。在这种情况下,开发人员通常同时处理多个文件和文件夹。尽管这些多模态运用变得越来越流行,但尚未有钻研对它们运用数据加强法子。挑战之一是在代码模型中有效地桥接每种模态的嵌入表示,这已在视觉 – 语言多模态工作中进行了钻研。

缺乏统一:当前的代码数据加强文献呈现出一个具有挑战性的景观,其中最流行的法子通常被描绘为辅助性的。一些实证钻研试图比较代码模型的数据加强法子。然而,这些工作没有利用大多数现有的先进数据加强法子。尽管存在针对计算机视觉(如 PyTorch 中的默认加强库)和 NLP(如 NL-Augmenter)的公认数据加强框架,但对于代码模型的通用数据加强手艺相应库明显缺失。此外,由于现有数据加强法子通常使用各种数据集进行评估,因此很难确定其有效性。因此,作家认为通过建立标准化和统一的基准工作,以及用于比较和评估不同加强法子的有效性的数据集,将大大促进数据加强钻研的进展。这将为更系统和比较性地理解这些法子的优势和局限性铺平道路。

给TA打赏
共{{data.count}}人
人已打赏
理论

达摩院调理AI突破胰腺癌早筛难题,成果登上Nature Medicine,首次实现大规模胰腺癌筛查

2023-11-22 11:54:00

理论

南开&山大&北理工团队开发trRosettaRNA:利用Transformer网络自动猜测RNA 3D布局

2023-11-24 14:06:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索