CN113741964A - 一种面向代码可读性评估的数据增强方法 - Google Patents

一种面向代码可读性评估的数据增强方法 Download PDF

Info

Publication number
CN113741964A
CN113741964A CN202110877655.7A CN202110877655A CN113741964A CN 113741964 A CN113741964 A CN 113741964A CN 202110877655 A CN202110877655 A CN 202110877655A CN 113741964 A CN113741964 A CN 113741964A
Authority
CN
China
Prior art keywords
code
data
readability
data set
gan
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110877655.7A
Other languages
English (en)
Inventor
米庆
郝逸群
王小可
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Technology
Original Assignee
Beijing University of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing University of Technology filed Critical Beijing University of Technology
Priority to CN202110877655.7A priority Critical patent/CN113741964A/zh
Publication of CN113741964A publication Critical patent/CN113741964A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种面向代码可读性评估的数据增强方法,属于软件理论、软件工程与服务领域,主要涉及到三种可以在保持数据可读性标签不变的情况下生成新数据的技术,分别是通过基于领域知识的代码变换、基于线性插值的代码合成、基于生成对抗网络的代码增强。通过分别或组合使用这三种数据增强技术可以对可读性数据实现自动化倍增。可用于从有限的数据中生成大量的新数据,从而克服代码可读性评估领域中已标注数据不足带来的局限性并提高可读性评估模型的准确率和泛化能力。

Description

一种面向代码可读性评估的数据增强方法
技术领域
本发明属于软件理论、软件工程与服务领域,涉及一种面向代码可读性评估的数据增强方法。通过基于领域知识的代码变换、基于线性插值的代码合成、基于生成对抗网络的代码增强三种技术进行可读性数据的自动化倍增。可用于从有限的数据中生成大量的新数据,从而克服代码可读性评估领域中已标注数据不足带来的局限性。
背景技术
现代软件产品的存续周期越来越长,随着版本迭代,原有代码经历多次改动后难免会出现可读性水平的降低,而源代码能否被开发者快速、正确地理解是进行缺陷修复、功能扩展的前提条件,换言之,只有保持代码的高可读性才能确保软件产品在长期的迭代过程中易维护、易扩展。代码可读性又称为易读性,通常指的是源代码被阅读和理解的难易程度,主要关注源代码的写法,比如标识符命名、空间结构等对阅读者阅读速度和理解程度的影响。代码可读性评估是软件工程领域一个新兴的研究方向,具有广阔的应用前景与发展空间。
在现有的研究中,代码可读性评估通常被形式化为一个二分类预测问题,以一个代码片段作为输入,以一个可读或者不可读的预测作为输出。现有的研究方案大多是基于机器学习框架的,首先邀请多位领域专家利用李克特五分量表法标注给定代码片段,然后对影响可读性的代码特征进行归纳、分析和提取,最后构建机器学习分类器预测代码的可读性类别。
基于机器学习框架的代码可读性评估方法不仅耗时耗力,而且可移植性不强,无法在代码可读性评估任务上取得令人满意的效果。针对这些问题,深度学习技术于近年来被引入代码可读性评估领域:一种利用卷积神经网络自动提取并识别可读性相关特征的模型取得了高达83.8%的分类准确率,这不仅超过了以往的所有基于特征工程的评估模型,更展现了深度学习技术的巨大潜力,为代码可读性评估提供了一种全新的研究路径。然而,由于召集领域专家进行可读性数据标注这一过程成本较高且耗时较长,导致可用的已标注数据集规模较小。而深度学习模型的训练需要大量的有标签数据作为支撑,当数据匮乏时,极易出现过拟合的问题,制约了深度学习模型的表现。
为此,本发明针对代码可读性评估领域中已标注数据不足的问题,提出一种数据增强方法,在保留原有标签的情况下实现可读性数据的自动化倍增,以应对小规模数据集训练问题,从而更好地发挥深度学习模型的优势。
发明内容
本发明的目的在于提供一种面向代码可读性评估的数据增强方法,通过变换或者合成的方式从有限的数据中生成新数据,以支持深度学习模型的训练,进而提升评估模型的准确率以及泛化能力。为了实现上述目的,本发明采用以下技术方案:
步骤1:数据预处理。
步骤1.1:数据收集,收集已标注的可读代码数据集和不可读代码数据集。
步骤1.2:数据表征,使用两种代码表征技术,对步骤1.1中所得的已标注数据集进行编码。
步骤1.2.1:图像表征方式,将代码片段在集成开发环境中的截屏转换为RGB矩阵,用于模拟源代码呈现在集成开发环境中的效果。
步骤1.2.2:字符表征方式,将代码片段中的每个字符(即字母、数字、符号和空白符)都视为独立的符号并将其转换为对应的ASCII值,最终的输出采用二维矩阵的形式。
步骤2:基于领域知识的代码变换。
步骤2.1:对步骤1.1中所得的可读代码数据集,以局部调整的方式进行变换,变换过程保持其可读性不变或上升,实现在保留原有标签的情况下生成新的可读代码片段。
步骤2.1.1:使用驼峰命名法或下划线命名法规范标识符命名方式以提高代码的可读性。
步骤2.1.2:添加或优化注释以提高代码的可读性。
步骤2.1.3:规范空间结构(比如缩进或对齐)以提高代码的可读性。
步骤2.2:对步骤1.1中所得的不可读代码数据集,以局部调整的方式进行变换,变换过程保持其可读性不变或下降,实现在保留原有标签的情况下生成新的不可读代码片段。
步骤2.2.1:将自定义标识符替换为无意义的字符串以降低代码的可读性。
步骤2.2.2:随机删除一些注释以降低代码的可读性。
步骤2.2.3:随机删除一些空白符(即空格、水平制表符和行结束符)以降低代码的可读性。
步骤3:基于线性插值的代码合成。
步骤3.1:随机抽取两组步骤1.2.1中所得的RGB矩阵或步骤1.2.2中所得的字符矩阵。
步骤3.2:使用基于邻域风险最小化原则的mixup进行代码合成,以得到新样本数据,具体合成方式如下:
Figure BDA0003190919460000031
Figure BDA0003190919460000032
其中,(xi,yi)和(xj,yj)是步骤3.1中随机抽取的两组代码片段,
Figure BDA0003190919460000033
是经过插值生成的新样本数据,λ~Beta(α,α),α∈(0,∞)是一个超参数,用于控制混合的程度。
步骤4:基于生成对抗网络的代码增强。
步骤4.1:模型构建,构建一个Auxiliary Classifier GAN(AC-GAN),AC-GAN由相互竞争的生成网络G和判别网络D两部分组成。
步骤4.2:模型训练,AC-GAN的G使用随机噪声z和类标签c来生成伪代码片段Xfake=G(z,c),AC-GAN的D在判断输入数据是否为真的同时,利用辅助分类器判断其所属类别,其损失函数如下所示:
LS=E[log P(S=real|Xreal)]+E[log P(S=fake|Xfake)]
LC=E[log P(C=c|Xreal)]+E[log P(C=c|Xfake)]
其中,G训练的目标是最大化LC-LS,D训练的目标是最大化LC+LS
步骤5:构建卷积神经网络,将步骤1中的原始数据集和步骤2、3、4中的增强数据集分别输入卷积神经网络作为训练数据,对比卷积神经网络的评估准确率,验证所提出的数据增强方法的有效性。
与现有技术相比,本发明具有以下显著优势:
在公共数据集DBuse、DDorn和DScalabrino上进行实验,实验结果表明,本发明不仅能够有效扩充数据集并增加训练样本的多样性,获得高达87.38%的分类准确率,而且使用简便、可扩展性强。
附图说明
图1为本发明的实施流程图。
具体实施方式
以下结合具体实施例子,并参照附图,对本发明进行进一步的细化说明。
步骤1:数据预处理。
步骤1.1:数据收集,收集已标注的可读代码数据集和不可读代码数据集。可直接使用业界常用的三个数据集DBuse、DDorn和DScalabrino,其中总共包含210段可用的已标注代码,或对新的数据集进行人工标注。例如,邀请数位领域专家对以下两个代码段进行可读性评估:
Figure BDA0003190919460000041
通过统计多位领域专家的标注结果,可以看出大多数领域专家将代码段1标注为不可读,因此将该代码段的标签设为:不可读。
Figure BDA0003190919460000042
同样,通过统计领域专家们的标注结果,可以看出大多数领域专家将代码段2标注为可读,因此将其标签设为:可读。
通过这种二分类的方式将一组代码段标注为不可读或可读,从而收集实验数据。
步骤1.2:数据表征,使用两种代码表征技术,对步骤1.1中所得的已标注数据集进行编码。
步骤1.2.1:图像表征方式,将代码片段在集成开发环境中的截屏转换为RGB矩阵,用于模拟源代码呈现在集成开发环境中的效果。
Figure BDA0003190919460000051
Figure BDA0003190919460000052
步骤1.2.2:字符表征方式,将代码片段中的每个字符(即字母、数字、符号和空白符)都视为独立的符号并将其转换为对应的ASCII值,最终的输出采用二维矩阵的形式。
Figure BDA0003190919460000053
Figure BDA0003190919460000054
Figure BDA0003190919460000061
步骤2:基于领域知识的代码变换。
步骤2.1:对步骤1.1中所得的可读代码数据集,以局部调整的方式进行变换,变换过程保持其可读性不变或上升,实现在保留原有标签的情况下生成新的可读代码片段。
步骤2.1.1:使用驼峰命名法或下划线命名法规范标识符命名方式以提高代码的可读性。
Figure BDA0003190919460000062
步骤2.1.2:添加或优化注释以提高代码的可读性。
Figure BDA0003190919460000063
Figure BDA0003190919460000071
步骤2.1.3:规范空间结构(比如缩进或对齐)以提高代码的可读性。
Figure BDA0003190919460000072
步骤2.2:对步骤1.1中所得的不可读代码数据集,以局部调整的方式进行变换,变换过程保持其可读性不变或下降,实现在保留原有标签的情况下生成新的不可读代码片段。
步骤2.2.1:将自定义标识符替换为无意义的字符串以降低代码的可读性。
Figure BDA0003190919460000073
步骤2.2.2:随机删除一些注释以降低代码的可读性。
Figure BDA0003190919460000074
Figure BDA0003190919460000081
步骤2.2.3:随机删除一些空白符(即空格、水平制表符和行结束符)以降低代码的可读性。
Figure BDA0003190919460000082
步骤3:基于线性插值的代码合成。
步骤3.1:随机抽取两组步骤1.2.1中所得的RGB矩阵或步骤1.2.2中所得的字符矩阵。
Figure BDA0003190919460000083
Figure BDA0003190919460000084
步骤3.2:使用基于邻域风险最小化原则的mixup进行代码合成,以得到新样本数据,具体合成方式如下:
Figure BDA0003190919460000091
Figure BDA0003190919460000092
其中,(xi,yi)和(xj,yj)是步骤3.1中随机抽取的两组代码片段,
Figure BDA0003190919460000093
是经过插值生成的新样本数据,λ~Beta(α,α),α∈(0,∞)是一个超参数,用于控制混合的程度。
Figure BDA0003190919460000094
步骤4:基于生成对抗网络的代码增强。
步骤4.1:模型构建,构建一个Auxiliary Classifier GAN(AC-GAN),AC-GAN由相互竞争的生成网络G和判别网络D两部分组成。其中生成网络由一个全连接层,两个卷积层和一个扁平化层相继构成,辨别网络则由两个卷积层和一个扁平化层构成。
步骤4.2:模型训练,AC-GAN的G使用随机噪声z和类标签c来生成伪代码片段Xfake=G(z,c),AC-GAN的D在判断输入数据是否为真的同时,利用辅助分类器判断其所属类别,其损失函数如下所示:
Ls=E[log P(S=real|Xreal)]+E[log P(S=fake|Xfake)]
LC=E[log P(C=c|Xreal)]+E[log P(C=c|Xfake)]
其中,G训练的目标是最大化LC-LS,D训练的目标是最大化LC+LS
步骤5:构建卷积神经网络,将步骤1中的原始数据集和步骤2、3、4中的增强数据集分别输入卷积神经网络作为训练数据,对比卷积神经网络的评估准确率,验证所提出的数据增强方法的有效性。实验结果显示,在仅使用原始数据集的情况下,分类准确率为80.71%。在采取基于领域知识的代码变换并生成出两倍于原数据集的新数据之后,分类准确率达到了87.38%。在采用基于基于线性插值的代码合成并生成出与原数据集数量相同的新数据后,准确率可达到82.38%。而在采用基于生成对抗网络的代码增强并生成出与原数据集数量相同的新数据后,准确率可达到83.81%。这表明在代码可读性领域中采用数据增强技术可以将辨别模型的准确率升高3%到7%,显著提高了模型效力且模型具有更好的泛化能力。

Claims (4)

1.一种面向代码可读性评估的数据增强方法,其特征在于:该方法的步骤如下:
步骤1:数据预处理;
步骤1.1:数据收集,收集已标注的可读代码数据集和不可读代码数据集;
步骤1.2:数据表征,使用两种代码表征技术,对步骤1.1中所得的已标注数据集进行编码;
步骤2:基于领域知识的代码变换;
步骤2.1:对步骤1.1中所得的可读代码数据集,以局部调整的方式进行变换,变换过程保持其可读性不变或上升,实现在保留原有标签的情况下生成新的可读代码片段;
步骤2.2:对步骤1.1中所得的不可读代码数据集,以局部调整的方式进行变换,变换过程保持其可读性不变或下降,实现在保留原有标签的情况下生成新的不可读代码片段;
步骤3:基于线性插值的代码合成;
步骤3.1:随机抽取两组步骤1.2.1中所得的RGB矩阵或步骤1.2.2中所得的字符矩阵;
步骤3.2:使用基于邻域风险最小化原则的mixup进行代码合成,以得到新样本数据,具体合成方式如下:
Figure FDA0003190919450000011
Figure FDA0003190919450000012
其中,(xi,yi)和(xj,yj)是步骤3.1中随机抽取的两组代码片段,
Figure FDA0003190919450000013
是经过插值生成的新样本数据,λ~Beta(α,α),α∈(0,∞)是一个超参数,用于控制混合的程度;
步骤4:基于生成对抗网络的代码增强;
步骤4.1:模型构建,构建一个Auxiliary Classifier GAN(AC-GAN),AC-GAN由相互竞争的生成网络G和判别网络D两部分组成;
步骤4.2:模型训练,AC-GAN的G使用随机噪声z和类标签c来生成伪代码片段Xfake=G(z,c),AC-GAN的D在判断输入数据是否为真的同时,利用辅助分类器判断其所属类别,其损失函数如下所示:
LS=E[log P(S=real|Xreal)]+E[log P(S=fake|Xfake)]
LC=E[log P(C=c|Xreal)]+E[log P(C=c|Xfake)]
其中,G训练的目标是最大化LC-LS,D训练的目标是最大化LC+LS
步骤5:构建卷积神经网络,将步骤1中的原始数据集和步骤2、3、4中的增强数据集分别输入卷积神经网络作为训练数据,得到准确率高且泛化能力好的可读性评估模型。
2.根据权利要求1所述的一种面向代码可读性评估的数据增强方法,其特征在于:步骤1.2包括如下步骤,步骤1.2.1:图像表征方式,将代码片段在集成开发环境中的截屏转换为RGB矩阵,用于模拟源代码呈现在集成开发环境中的效果;
步骤1.2.2:字符表征方式,将代码片段中的每个字符即字母、数字、符号和空白符都视为独立的符号并将其转换为对应的ASCII值,最终的输出采用二维矩阵的形式。
3.根据权利要求1所述的一种面向代码可读性评估的数据增强方法,其特征在于:步骤2.1包括如下步骤,步骤2.1.1:使用驼峰命名法或下划线命名法规范标识符命名方式以提高代码的可读性;
步骤2.1.2:添加或优化注释提高代码的可读性;
步骤2.1.3:规范空间结构提高代码的可读性。
4.根据权利要求1所述的一种面向代码可读性评估的数据增强方法,其特征在于:步骤2.2包括如下步骤,步骤2.2.1:将自定义标识符替换为无意义的字符串以降低代码的可读性;
步骤2.2.2:随机删除一些注释以降低代码的可读性;
步骤2.2.3:随机删除一些空白符即空格、水平制表符和行结束符以降低代码的可读性。
CN202110877655.7A 2021-08-01 2021-08-01 一种面向代码可读性评估的数据增强方法 Pending CN113741964A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110877655.7A CN113741964A (zh) 2021-08-01 2021-08-01 一种面向代码可读性评估的数据增强方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110877655.7A CN113741964A (zh) 2021-08-01 2021-08-01 一种面向代码可读性评估的数据增强方法

Publications (1)

Publication Number Publication Date
CN113741964A true CN113741964A (zh) 2021-12-03

Family

ID=78729711

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110877655.7A Pending CN113741964A (zh) 2021-08-01 2021-08-01 一种面向代码可读性评估的数据增强方法

Country Status (1)

Country Link
CN (1) CN113741964A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115455177A (zh) * 2022-08-02 2022-12-09 淮阴工学院 基于混合样本空间的不平衡化工文本数据增强方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103927179A (zh) * 2014-04-18 2014-07-16 扬州大学 一种基于WordNet的程序可读性分析方法
CN111553587A (zh) * 2020-04-26 2020-08-18 中国电力科学研究院有限公司 一种基于对抗学习模型的新能源场景生成方法及系统
CN112416354A (zh) * 2020-10-28 2021-02-26 北京工业大学 一种基于多维度特征和混合神经网络的代码可读性评估方法
CN112580807A (zh) * 2020-12-29 2021-03-30 中国科学院空天信息创新研究院 一种基于效能评估的神经网络改进需求自动生成方法及装置
US20210132915A1 (en) * 2019-11-06 2021-05-06 Google Llc Automatically Generating Machine Learning Models for Software Tools That Operate on Source Code

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103927179A (zh) * 2014-04-18 2014-07-16 扬州大学 一种基于WordNet的程序可读性分析方法
US20210132915A1 (en) * 2019-11-06 2021-05-06 Google Llc Automatically Generating Machine Learning Models for Software Tools That Operate on Source Code
CN111553587A (zh) * 2020-04-26 2020-08-18 中国电力科学研究院有限公司 一种基于对抗学习模型的新能源场景生成方法及系统
CN112416354A (zh) * 2020-10-28 2021-02-26 北京工业大学 一种基于多维度特征和混合神经网络的代码可读性评估方法
CN112580807A (zh) * 2020-12-29 2021-03-30 中国科学院空天信息创新研究院 一种基于效能评估的神经网络改进需求自动生成方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张峰逸 等: "基于深度学习的代码分析研究综述", 计算机应用与软件, no. 06, 12 June 2018 (2018-06-12) *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115455177A (zh) * 2022-08-02 2022-12-09 淮阴工学院 基于混合样本空间的不平衡化工文本数据增强方法及装置
CN115455177B (zh) * 2022-08-02 2023-07-21 淮阴工学院 基于混合样本空间的不平衡化工文本数据增强方法及装置

Similar Documents

Publication Publication Date Title
CN100589119C (zh) 多字体多字号的基于彝文字符集的印刷体字符识别方法
US8566349B2 (en) Handwritten document categorizer and method of training
CN104966097A (zh) 一种基于深度学习的复杂文字识别方法
CN107908963A (zh) 一种自动化检测恶意代码核心特征方法
CN112800229B (zh) 基于知识图嵌入的涉案领域的半监督方面级情感分析方法
CN109753939B (zh) 一种hla测序峰图识别方法
CN108376257B (zh) 一种燃气表不完整码字识别方法
CN111104912A (zh) 一种书法字体类型与文字内容同步识别方法
CN111241933A (zh) 一种基于通用对抗扰动的养猪场目标识别方法
Devi S et al. A deep learning approach for recognizing the cursive Tamil characters in palm leaf manuscripts
CN113741964A (zh) 一种面向代码可读性评估的数据增强方法
CN111782804A (zh) 基于TextCNN同分布文本数据选择方法、系统及存储介质
CN114299326A (zh) 一种基于转换网络与自监督的小样本分类方法
Ko et al. Convolutional neural networks for character-level classification
CN116258917B (zh) 一种基于tf-idf转移熵的恶意软件分类方法及装置
CN111273911A (zh) 基于双向lstm和注意力机制的软件技术债务识别方法
Hemanth et al. CNN-RNN BASED HANDWRITTEN TEXT RECOGNITION.
CN116521863A (zh) 一种基于半监督学习的标签抗噪文本分类方法
Sun et al. Optimized LSB Matching Steganography Based on Fisher Information.
CN111931665B (zh) 一种基于类内变化字典建模的欠采样人脸识别方法
Leipert et al. The notary in the haystack–countering class imbalance in document processing with CNNs
Alamsyah et al. Autoencoder image denoising to increase optical character recognition performance in text conversion
CN110109994B (zh) 包含结构化和非结构化数据的汽车金融风控系统
CN113204975A (zh) 一种基于远程监督的敏感文风识别方法
De Nardin et al. Is ImageNet Always the Best Option? An Overview on Transfer Learning Strategies for Document Layout Analysis

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination