CN113741964A - 一种面向代码可读性评估的数据增强方法 - Google Patents
一种面向代码可读性评估的数据增强方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000011156 evaluation Methods 0.000 title description 6
- 230000015572 biosynthetic process Effects 0.000 claims abstract description 13
- 238000003786 synthesis reaction Methods 0.000 claims abstract description 13
- 238000005516 engineering process Methods 0.000 claims abstract description 7
- 238000012549 training Methods 0.000 claims description 16
- 238000013527 convolutional neural network Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 8
- 238000011161 development Methods 0.000 claims description 7
- 239000012634 fragment Substances 0.000 claims description 7
- 230000009466 transformation Effects 0.000 claims description 7
- 239000011159 matrix material Substances 0.000 claims description 6
- 230000001131 transforming effect Effects 0.000 claims description 5
- 230000000694 effects Effects 0.000 claims description 4
- 238000007781 pre-processing Methods 0.000 claims description 3
- 238000013210 evaluation model Methods 0.000 claims description 2
- 230000003416 augmentation Effects 0.000 claims 1
- 238000006243 chemical reaction Methods 0.000 abstract description 2
- 238000012512 characterization method Methods 0.000 description 4
- 238000013136 deep learning model Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000002372 labelling Methods 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations 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进行代码合成,以得到新样本数据,具体合成方式如下:
步骤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段可用的已标注代码,或对新的数据集进行人工标注。例如,邀请数位领域专家对以下两个代码段进行可读性评估:
通过统计多位领域专家的标注结果,可以看出大多数领域专家将代码段1标注为不可读,因此将该代码段的标签设为:不可读。
同样,通过统计领域专家们的标注结果,可以看出大多数领域专家将代码段2标注为可读,因此将其标签设为:可读。
通过这种二分类的方式将一组代码段标注为不可读或可读,从而收集实验数据。
步骤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进行代码合成,以得到新样本数据,具体合成方式如下:
步骤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进行代码合成,以得到新样本数据,具体合成方式如下:
步骤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:随机删除一些空白符即空格、水平制表符和行结束符以降低代码的可读性。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115455177A (zh) * | 2022-08-02 | 2022-12-09 | 淮阴工学院 | 基于混合样本空间的不平衡化工文本数据增强方法及装置 |
Citations (5)
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 |
-
2021
- 2021-08-01 CN CN202110877655.7A patent/CN113741964A/zh active Pending
Patent Citations (5)
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)
Title |
---|
张峰逸 等: "基于深度学习的代码分析研究综述", 计算机应用与软件, no. 06, 12 June 2018 (2018-06-12) * |
Cited By (2)
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 |