【论文阅读】Data augmentation相关论文

阅读了与代码数据增强相关的论文,分别是:


ICSE2021:Bridging Pre-trained Models and Downstream Tasks for Source Code Understanding
FSE2022:MultIPAs: Applying Program Transformations to Introductory Programming Assignments for Data Augmentation
ICLR2020:Contrastive Code Representation Learning
SIGIR2021:Self-Supervised Contrastive Learning for Code Retrieval and Summarization via Semantic-Preserving Transformations
JSS2021:Data Augmentation by Program Transformation
IST2020:The Effectiveness of Data Augmentation in Code Readability Classification


1、Bridging Pre-trained Models and Downstream Tasks for Source Code Understanding

这篇文章主要内容有以下3个点:

  1. 为原始训练数据集构建保留语义的转换序列,即将给定的程序转换为语义等效的程序,使训练数据更加多样化,然后用这些增强后的数据在 Pre-trained 模型上进行 fine-turn。
  2. 课程式学习。将增强的训练数据集组织成由易到难递增的有序数据集进行课程式学习。
  3. 测试时,将测试数据进行增强,输出的最终结果同时考虑了原始测试数据的结果和增强后的测试数据的结果。模型对单个测试用例的错误预测可以通过结合多个视角进行最终预测得到纠正。

   本文的实验中共测试了两种编程语言:C/C++和Java。对于 C/C++,作者修改了 Quiring 等人的工作。对于 Java,作者应用了现有的 SPAT 工具。这些技术按其更改的粒度分组,分别改变了控制结构、API 和声明,以帮助模型提取和学习相应的特征,同时确保语义保持不变。
example

在这里插入图片描述


   作者在算法分类、克隆检测和代码搜索三个任务上进行了测试评估。结果显示,数据增强(DA)+课程式学习(CL)的微调模式,优于一般微调方式。结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、MultIPAs: Applying Program Transformations to Introductory Programming Assignments for Data Augmentation

    这篇文章发表在 FSE Demonstrations Tracks。本文针对 IPAs 任务,提出了一种程序转换工具 MultIPAs,它可以通过以下方式增强 IPAs 基准集 (是一个C 语言数据集)。

  1. 通过六种句法突变手段,获取与现有程序拥有相同语义、不同语法的新的程序。
  2. 通过三种语义破坏手段,破坏正确实现的程序以引入了语义错误,获得新的语义不正确的程序。
    六种句法突变:比较表达式镜像、if-else 语句交换、递增/递减运算符镜像、变量声明重新排序、For/While 转换和引入新的虚拟变量。
    三种语义破坏:错误的比较运算符、变量误用和删除赋值表达式。
    下面是句法突变和语义破坏示例,其中标红的地方即为 MultIPAs 做过修改的部分。
    在这里插入图片描述
    在这里插入图片描述
        作者将该方法用于两个现有的 IPAs 基准集——ITSP 和 C-Pack-IPAs。结果显示,MultIPAs可以有效增强数据集,例如,可将某一类别的 67 个数据通过突变和破坏手段,增加至上千个数据。
    在这里插入图片描述

3、Contrastive Code Representation Learning

    本文的核心内容是使用编译器转换来生成等效函数的数据集,以扩充数据。然后,使用对比学习来学习代码的向量表示。作者提出了source2source方法,针对JavaScript语言实现的函数,通过编译器对源代码进行保留语义的转换,包括变量重命名、死代码插入和删除等方法。本文提出的方法的亮点是:在构造positive和negative样本并不是向前人工作那样通过改写query,而是通过改造code,这是一种新的观点。
在这里插入图片描述

4、Self-Supervised Contrastive Learning for Code Retrieval and Summarization via Semantic-Preserving Transformations

    本文提出了一个自监督对比学习框架 Corder,训练神经网络从大量转换代码中识别语义等效的代码片段。 Corder 的预训练模型可用于以下两种情况(1)它可以生成代码的向量表示,并将其应用于没有标记数据的代码搜索任务; (2) 它可以用于仍需要标签数据的任务进行微调,比如代码摘要。实验表明,由 Corder 预训练的模型在代码搜索和代码摘要生成两大任务上的表现大大优于其他基线。
    Corder 使用自监督学习对比学习方法,最大化同一代码片段的不同转换片段之间的一致性,并最小化不同代码片段的转换片段之间的一致性。使用这种对比学习目标更新神经网络的参数会导致语义等效片段的表示彼此接近,而不相似片段的表示则相距甚远。据作者所知,他们是第一个使用程序转换技术对源代码模型进行自我监督学习的人。
    模型框架如下图所示,主要包含三个部分,我主要关注了代码片段转换这一部分。在本工作中,作者应用了以下转换:变量重命名、添加死代码(未使用的语句)、语句置换、循环交换和switch和if交换。其中,语句置换是在代码的一个基本块中交换两个相互不依赖的语句,通过遍历 AST 并分析数据依赖关系以提取所有可能的可交换语句对。循环交换是指while和for结构的交换。以上的每个转换方法都旨在以不同的方式更改源代码的结构表示,同时保留其语义。
在这里插入图片描述

5、Data Augmentation by Program Transformation

    数据增强已被公认为提高深度学习模型泛化能力的主要技术之一。本文提出了一种基于程序转换的通用数据增强方法。设计了 18 个转换规则来扩展代码数据集,经实验证明,这些规则不仅保留程序的语义,而且还保留程序的句法自然性。此外,本文还实现并开源了一个基于规则的 Java 部分程序转换工具,名为 SPAT,其数据增强的有效性在三个下游任务中得到验证:方法命名、代码注释和克隆检测。
在这里插入图片描述

6 The Effectiveness of Data Augmentation in Code Readability Classification

    本文针对代码可读性的二分类任务,从两方面对数据进行增强并验证了该方法的有效性。本文使用了两种数据增强方法,一种是对现有代码片段进行一系列转换,生成与原始数据属于同一类别的新数据。另一种是利用 GAN 通过对抗训练生成新样本。
    对于可读类别的数据,采用(1)添加一些评论; (2) 规范化类/方法/变量名,应用camelCase 或 under_score 样式; (3) 修改源代码缩进。对于不可读类别的数据:(1)删除一些注释; (2) 用无意义的字母/数字/字符串替换类/方法/变量的名称; (3) 随机删除一些空格(例如,水平制表符和行终止符)。这是为了生成与原始代码段具有相同或更低可读性的合成代码段。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值