CN112698831B - 一种代码自动生成质量评估方法 - Google Patents

一种代码自动生成质量评估方法 Download PDF

Info

Publication number
CN112698831B
CN112698831B CN202011557515.3A CN202011557515A CN112698831B CN 112698831 B CN112698831 B CN 112698831B CN 202011557515 A CN202011557515 A CN 202011557515A CN 112698831 B CN112698831 B CN 112698831B
Authority
CN
China
Prior art keywords
code
node
executing
feature detector
dimension
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.)
Active
Application number
CN202011557515.3A
Other languages
English (en)
Other versions
CN112698831A (zh
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.)
Kunming University of Science and Technology
Original Assignee
Kunming University of Science and 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 Kunming University of Science and Technology filed Critical Kunming University of Science and Technology
Priority to CN202011557515.3A priority Critical patent/CN112698831B/zh
Publication of CN112698831A publication Critical patent/CN112698831A/zh
Application granted granted Critical
Publication of CN112698831B publication Critical patent/CN112698831B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种代码自动生成质量评估方法,本发明首先定义了代码自动生成质量属性,并基于代码自动生成数据和程序员行为数据抽取与代码质量属性相关的特征项及通用项,有助于从大量的代码生成数据中挖掘出体现代码生成质量的数据;通过代码上下文建立多维语法树,使用特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性,从而通过全连接神经网络得到代码质量属性。综上,本发明有助于从代码自动生成与程序员行为数据中挖掘出体现代码生成质量的特征,可以对代码自动生成质量进行有效评估。

Description

一种代码自动生成质量评估方法
技术领域
本发明涉及一种代码自动生成质量评估方法,属于代码自动生成质量评估领域。
背景技术
在基于机器学习的代码自动生成的研究过程中,HindleA等人将传统的N-Gram模型应用到代码自动生成的研究中,使用语言模型N-Gram进行代码预测,实验通过MRR评估代码自动生成的质量。Hellendoorn VJ等人在语言模型的基础上加入“缓存”机制来维护程序的局部信息,通过对比循环神经网络与带有“缓存”机制的N-Gram,发现代码的局部性特征对于token的预测有极大的帮助,使用循环神经网络进行代码预测时使用MRR对生成代码质量进行评估。Nguyen TT等人使用一种统计语言模型SLAMC(A Novel StatisticalSemantic Language Model For Source Code),在语言模型的基础上加入“缓存”机制来维护程序的局部信息。实验结果表明,加入“缓存”机制的模型捕获了源代码中的局部规律,实验使用Top-K的Precision对模型生成代码准确性进行评估。RaychevV等人使用N-gram模型与循环神经网络结合,在JavaAPI调用级别进行代码补全,利用N-Gram模型对程序中的API调用序列建模,从而对API的调用序列进行预测。该研究通过分析Top-K个推荐代码的Precision来评估模型的效果。Raychev V等人基于循环神经网络,将程序代码的抽象语法树的序列化结果作为训练数据集,并将网络输出结果区分为终结符的预测和非终结符的预测,该方法在一定程度上运用了存在于抽象语法树中的结构化信息,进一步提升了与生成代码相关的非终结符预测的准确性,该研究使用Top-K个推荐代码的Precision来对模型生成代码质量进行评估。
Allamanis M等人提出了专门为方法命名问题设计的神经概率语言模型的源代码,该模型通过在一个高维连续空间中将名称分配到称为嵌入的位置,以一种具有相似嵌入的名称倾向于在相似的上下文中使用的方式来了解哪些名称在语义上是相似的,并通过F1-Measure评估模型的质量。
在现有研究中,用来评估代码自动生成质量的方法主要包括Precision(精确率)、Recall(召回率)、MRR(Mean Reciprocal Rank)、F1-Measure。如果代码自动生成工具推荐的是排序后的K个结果,可以使用Top-K的Precision、Recall、MRR、F-Measure对代码自动生成性能进行评估。Precision又称查准率,指代码自动生成工具正确推荐的代码数目占代码自动生成工具推荐代码总数的比例。Recall又称查全率,定义为代码自动生成工具正确推荐代码数目与程序员真实需要的推荐代码总数之间的比例。MRR主要体现代码自动生成工具推荐代码结果的优劣情况,靠前的结果较优,评分越高。第一个推荐代码成功推荐,则分数为1;第二个推荐代码成功推荐则分数为0.5;第n个推荐成功分数为1/n;若没有推荐成功分数为0。F1-Measure是Precision和Recall的加权调和平均。现有研究中,缺乏针对代码自动生成质量的统一评估方法。多数研究使用Precision、Recall、MRR、F1-Measure作为评估代码自动生成质量的指标,但这些指标仅基于代码自动生成个数以及生成代码的正确性来进行计算。在实际开发中,代码自动生成的质量不仅仅由代码自动生成工具决定,程序员的行为在其中也起到了较大的作用。现有评估方法忽略了程序员行为在代码自动生成过程中的重要性,只是针对代码自动生成结果进行了评估。此外,由于大部分研究采用不同的评估指标,且各指标之间无法直接转化,难以对各种代码自动生成模型和方法进行对比。因此,针对代码自动生成过程进行质量评估是亟待解决的问题。
发明内容
本发明提供了一种代码自动生成质量评估方法,以用于基于代码自动生成与程序员行为数据对代码自动生成过程进行质量评估。
本发明的技术方案是:一种代码自动生成质量评估方法,所述方法步骤如下:
Step1、基于代码自动生成数据和程序员行为数据抽取特征项并进行标注,作为数据集D;
Step2、使用数据集D中代码上下文进行预训练,生成代码符号向量;
Step3、根据代码上下文建立多维语法树;
Step4、通过特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性;
Step5、使用全连接神经网络输出的代码质量属性对代码自动生成质量进行评估。
所述Step1具体如下:
Step1.1、定义代码自动生成质量属性集合A,初始化代码自动生成数据和程序员行为数据,执行Step1.2;
Step1.2、基于代码自动生成数据和程序员行为数据抽取与代码质量属性相关的特征项、抽取通用特征项并进行标注,作为数据集D,执行Step2。
所述Step2具体如下:
Step2.1、将数据集D中所有代码上下文Codecontext存入代码code,执行Step2.2;
Step2.2、将code转换为语法树tree,初始化节点队列sample_queue=[tree],初始化节点类型集合node_type=[],节点代码集合node_code=[],执行Step2.3;
Step2.3、判断sample_queue是否为空,若sample_queue为空,执行Step2.9,否则执行Step2.4;
Step2.4、将sample_queue队首元素出队,并将队首元素表示为node,执行Step2.5;
Step2.5、将node节点类型存入node_type,执行Step2.6;
Step2.6、判断node节点是否含有子节点,是则执行Step2.7,否则执行Step2.8;
Step2.7、将node节点的子节点加入队列sample_queue中,执行Step2.3;
Step2.8、将node节点所表示的代码存入node_code中,执行Step2.3;
Step2.9、对node_code中的元素进行去重,执行Step2.10;
Step2.10、以node_code作为词典,将code进行分词,并以空格进行分隔,执行Step2.11;
Step2.11、初始化窗口windows=8,start=0,训练样本集合vec_train=[],训练样本标签集合vec_label=[],执行Step2.12;
Step2.12、以node_code为词典,将分词后的code转换为one-hot序列,并将其表示为code_one_hot,执行Step2.13;
Step2.13、判断start是否小于code序列长度,是执行Stpe2.14,否则执行Step2.17;
Step2.14、序列line=code_one_hot中起始点为start,长度为windows的序列,执行Step2.15;
Step2.15、将line中start处的元素存入vec_train,将line中除start处以外的元素存入vec_label,执行Step2.16;
Step2.16、start=start+1,执行Step2.13;
Step2.17、初始化全连接神经网络,使用vec_train与vec_label训练代码符号向量,执行Step3。
所述Step3具体如下:
Step3.1、输入数据集D,执行Step3.2;
Step3.2、将数据集D中所有文件路径存入file中并去重,初始化文件路径个数f=0,样本samples=[],执行Step3.3;
Step3.3、判断f是否小于file中文件路径个数,是则执行Step3.4,否则执行Step4;其中,一条代码自动生成数据和程序员行为数据对应一个文件路径;
Step3.4、将第f个文件路径file[f]中代码上下文解析为语法树root,将数据集D中文件路径为file[f]与代码质量属性相关的特征项存入records,代码自动生成质量标注存入label,执行Step3.5;
Step3.5、初始化节点队列queue=[root];根节点字段root_josn={'node':root节点类型,'code':root节点表示的代码,'children':[],'record':None};节点队列字段queue_json=[root_json];f+=1,执行Step3.6;
Step3.6、判断queue是否不为空,是则执行Step3.7,否则执行Step3.3;
Step3.7、当前节点current_node=queue队首元素,并将queue队首元素出队;当前节点字段current_node_json=queue_json=[root_json],执行Step3.8;
Step3.8、孩子节点children=current_node子节点列表,将children存入queue,c=0,执行Step3.9;
Step3.9、判断c是否小于children节点个数,是则执行Step3.10,否则执行Step3.3;
Step3.10、初始化记录re=None,num=0,rc=0,执行Step3.11;
Step3.11、判断rc是否小于records个数,是则执行Step3.12,否则执行Step3.15;其中,一条代码自动生成数据和程序员行为数据对应的records个数取值为1;
Step3.12、判断children[c]代码是否等于数据集D中生成代码内容,是则执行Step3.13,否则执行Step3.14;
Step3.13、re=数据集D中生成代码内容为children[c]的与代码质量属性相关的特征项,子树datum={'tree':root_json,'label':label[num]},num+=1,将datum添加到samples中,执行Step3.15;
Step3.14、rc=rc+1,执行Step3.11;
Step3.15、孩子节点字段child_json={'node':children[c]节点类型,'code':children[c]中生成代码内容,'children':[],'record':re},执行Step3.16;
Step3.16、将child_json添加到current_node_json['children']中,rc+=1,c+=1,执行Step3.9。
所述Step4具体如下:
Step4.1、初始化T_Syntax语法维度特征检测器:
Figure BDA0002859087130000041
初始化T_Semantics语义维度特征检测器:
Figure BDA0002859087130000051
初始化T_Generation生成信息维度特征检测器:
Figure BDA0002859087130000052
其中,t、l、r表示根、左、右;
Figure BDA0002859087130000053
分别表示语法维度根节点特征检测器、语法维度左孩子节点特征检测器、语法维度右孩子节点特征检测器、语法维度特征检测器偏置参数;
Figure BDA0002859087130000054
分别表示语义维度根节点特征检测器、语义维度左孩子节点特征检测器、语义维度右孩子节点特征检测器、语义维度特征检测器偏置参数;
Figure BDA0002859087130000055
分别表示生成信息维度根节点特征检测器、生成信息维度左孩子节点特征检测器、生成信息维度右孩子节点特征检测器、生成信息维度特征检测器偏置参数;执行Step4.2;
Step4.2、使用T_Syntax语法维度特征检测器在syntax语法树中进行滑动,T_Syntax语法维度特征检测器每次输出y_syntax为:
Figure BDA0002859087130000056
其中,y_syntax和
Figure BDA0002859087130000057
Figure BDA0002859087130000058
表示维度为Nf
Figure BDA0002859087130000059
表示维度为Nc×Nf,Nc为特征检测器的数量,Nf为代码符号向量的维度,syntaxi表示syntax语法树中的第i个节点;对于任意一个在T_syntax语法维度特征检测器中的节点,它的权重参数Wconv_syntax,i
Figure BDA00028590871300000510
的线性组合,节点特征检测器权重系数分别为
Figure BDA00028590871300000511
Figure BDA00028590871300000512
Figure BDA00028590871300000513
Figure BDA00028590871300000514
Figure BDA00028590871300000515
其中,di为节点i在根节点特征检测器中的位置;d为窗口深度;pi为节点i在右孩子节点特征检测器中的位置,syntax_bi为作为语法维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.3;
Step4.3、使用T_Semantics语义维度特征检测器在semantics语义树中进行滑动,T_Semantics语义维度特征检测器每次输出y_semantics为:
Figure BDA0002859087130000061
其中y_semantics和
Figure BDA0002859087130000062
semanticsi表示semantics语义树中的第i个节点,对于任意一个在T_semantics语义维度特征检测器中的节点,它的权重参数Wconv_semantics,i
Figure BDA0002859087130000063
的线性组合,节点特征检测器权重系数分别为
Figure BDA0002859087130000064
Figure BDA0002859087130000065
Figure BDA0002859087130000066
Figure BDA0002859087130000067
Figure BDA0002859087130000068
其中,semantics_bi为作为语义维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.4;
Step4.4、使用T_Generation生成信息维度特征检测器在generation生成树中进行滑动,T_Generation生成信息特征检测器每次输出y_generation为:
Figure BDA0002859087130000069
其中,y_generation和
Figure BDA00028590871300000610
generationi表示genreation生成树中的第i个节点,对于任意一个在T_Generation生成信息维度特征检测器中的节点,它的权重参数Wconv_generation,i
Figure BDA00028590871300000611
的线性组合,节点特征检测器权重系数分别为
Figure BDA00028590871300000612
Figure BDA00028590871300000613
Figure BDA00028590871300000614
Figure BDA00028590871300000615
Figure BDA0002859087130000071
其中,generation_bi为作为生成信息维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.5;
Step4.5、对y_syntsc,y_semantics,y_generation进行最大池化,对不同维度的特征取最大值,从而将提取到的特征规约到一个固定的大小,最大池化后将y_syntsc,y_semantics,y_generation连接为y,执行Step4.6;
Step4.6、将y输入到一个固定大小的全连接神经网络层,然后将其反馈到输出层,使用全连接神经网络输出的代码自动生成质量属性与训练批次batch对应的代码自动生成质量标注label计算偏差,根据反向传播过程,得到神经网络每层参数的误差,根据这些误差调整各层参数,完成网络模型的优化,执行Step4.7;
Step4.7、不断迭代步骤Step4.6,直至网络收敛,执行Step5。
所述Step5具体如下:
Step5.1、将Step4中全连接神经网络输出的G行H列代码自动生成质量属性值表示为G*H的矩阵M,执行Step5.2;
Step5.2、对M进行归一化处理,计算方式如下:
Figure BDA0002859087130000072
其中,xgh表示M中第g行第h列代码自动生成质量属性值,min(xh)为M中第h列代码自动生成质量属性值中的最小值,max(xh)表示为M中第h列代码自动生成质量属性值中的最大值,执行Step5.3;其中,g=1,2,...G;h=1,2,...H;
Step5.3、计算M中第h项代码自动生成质量属性中第g个代码自动生成质量属性值所占比重Pgh
Figure BDA0002859087130000073
执行Step5.4;
Step5.4、计算M中第h项代码自动生成质量属性的熵值eh
Figure BDA0002859087130000074
Figure BDA0002859087130000075
执行Step5.5;
Step5.5、计算M中第h列代码自动生成质量属性的差异系数Fh,Fh=1-eh,执行Step5.6;
Step5.6、计算M中第h顶代码自动生成质量属性的权重Wh,
Figure BDA0002859087130000076
执行Step5.7:
Step5.7、计算M中第g行代码自动生成质量评估值为Qg
Figure BDA0002859087130000077
Mgh表示归一化后M的第g行第h列,结束。
本发明的有益效果是:本发明首先定义了代码自动生成质量属性,并基于代码自动生成数据和程序员行为数据抽取与代码质量属性相关的特征项及通用项,有助于从大量的代码生成数据中挖掘出体现代码生成质量的数据;通过代码上下文建立多维语法树,使用特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性,从而通过全连接神经网络得到代码质量属性。综上,本发明有助于从代码自动生成与程序员行为数据中挖掘出体现代码生成质量的特征,可以对代码自动生成质量进行有效评估。
附图说明
图1是本发明总流程图;
图2是步骤Step2的流程图;
图3是步骤Step3的流程图;
图4是神经网络结构。
具体实施方式
实施例1:如图1-4所示,一种代码自动生成质量评估方法,所述方法的具体步骤如下:
Step1、基于代码自动生成数据和程序员行为数据抽取特征项并进行标注,作为数据集D;
Step2、使用数据集D中代码上下文进行预训练,生成代码符号向量;
Step3、根据代码上下文建立多维语法树;
Step4、通过特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性;
Step5、使用全连接神经网络输出的代码质量属性对代码自动生成质量进行评估。
进一步地,可以设置所述方法的具体步骤如下:
Step1、基于代码自动生成数据和程序员行为数据抽取特征项并进行标注,作为数据集D;
Step1.1、定义代码自动生成质量属性集合A如表1所示,初始化代码自动生成数据和程序员行为数据(每条代码自动生成数据和程序员行为数据是由若干特征项组成;本步骤以一条数据进行举例)如表2所示。
表1代码自动生成质量属性
Figure BDA0002859087130000091
表2代码自动生成数据和程序员行为数据
代码自动生成数据和程序员行为数据
Codecontext print('hello')
File test.py
Generate_code print
生成代码是否成功推荐 0.03447179162297498
生成代码语义相似度 0.44821123213961412
代码生成工具生成代码索引位置 0.06769157842859497
程序员选择生成代码时间 0.12863582415177677
程序员输入长度 0.8469677586819615
程序员选择代码按键次数 0.2464917888555196
代码生成工具生成代码个数 0.1581186486749533
生成代码是否合法 0.2435432623454325
程序员的删除行为 0.9345432584325229
生成代码是否为可扩展代码结构 0.998234578252372
代码自动生成时间 0.02156412345641
生成代码占用空间 0.064512324564121
单行代码生成个数 0.853125642132456
多行代码生成个数 0.154645213546541
Token生成个数 0.548216546123245
表2中,Codecontext表示代码上下文,File表示当前数据文件路径,Generate_code表示生成代码内容。执行Step1.2;
Step1.2、基于代码自动生成数据和程序员行为数据抽取与代码质量属性相关的特征项、抽取通用特征项并进行标注,将抽取的数据集初始化为D,执行Step2,具体为:
基于表1中定义的代码自动生成质量属性,使用表2中代码自动生成数据和程序员行为数据抽取与代码自动生成质量属性相关的特征项。将表2中生成代码是否成功推荐、生成代码语义相似度抽取为代码自动生成质量属性中正确性相关的特征项;表2中代码生成工具生成代码索引位置、程序员选择生成代码时间、程序员输入长度、程序员选择代码按键次数、代码生成工具生成代码个数抽取为代码自动生成质量属性中易用性相关的特征项;表2中生成代码是否合法抽取为代码自动生成质量属性中规范性相关的特征项;表2中程序员的删除行为、生成代码是否为可扩展代码结构抽取为代码自动生成质量属性中可维护性的相关特征,抽取通用特征项Codecontext、File和Generate_code,抽取结果如表3所示。
表3抽取与代码自动生成质量属性相关的特征项
Figure BDA0002859087130000101
根据代码自动生成质量属性的定义对表3中的代码自动生成数据和程序员行为数据进行代码自动生成质量属性值标注,标注为Label,将表3中的数据以及代码自动生成质量属性标注值初始化为数据集D,如表4所示。
表4数据集D
Figure BDA0002859087130000111
Step2、使用数据集D中代码上下文进行预训练,生成代码符号向量;
Step2.1、将表4中所有代码上下文Codecontext存入code,执行Step2.2;
Step2.2、将code转换为语法树tree,tree=[Module(body=[Expr(value=Call(func=Name(id='print',ctx=Load()),args=[Str(s='hello')],keywords=[]))])],初始化节点队列sample_queue=[tree]=[[Module(body=[Expr(value=Call(func=Name(id='print',ctx=Load()),args=[Str(s='hello')],keywords=[]))])]],初始化节点类型集合node_type=[],节点代码集合node_code=[],执行Step2.3;
Step2.3、sample_queue不为空,执行Step2.4;
Step2.4、将sample_queue队首元素出队,并将其表示为node,node=[Module(body=[Expr(value=Call(func=Name(id='print',ctx=Load()),args=[Str(s='hello')],keywords=[]))])],执行Step2.5;
Step2.5、将node节点类型存入node_type,node_type=['Module'],执行Step2.6;
Step2.6、node节点包含子节点,执行Step2.7;
Step2.7、将node节点的子节点[Expr(value=Call(func=Name(id='print',ctx=Load())],keywords=[]))],[Str(s='hello')]加入队列sample_queue,sample_queue=[Expr(value=Call(func=Name(id='print',ctx=Load())],keywords=[]))],[Str(s='hello')],执行Step2.3;
Step2.3、sample_queue=[Expr(value=Call(func=Name(id='print',ctx=Load())],keywords=[]))],[Str(s='hello')]不为空,执行Step2.4;
Step2.4、将sample_queue队首元素出队,并将其表示为node,node=[Expr(value=Call(func=Name(id='print',ctx=Load())],keywords=[]))],执行Step2.5;
Step2.5、将node节点类型存入node_type,node_type=['Module','Expr'],执行Step2.6;
Step2.6、node节点不包含子节点,执行Step2.8;
Step2.8、将node节点表示的代码存入node_code中,node_code=['print'],执行Step2.3;
Step2.3、sample_queue=[[Str(s='hello')]不为空,执行Step2.4;
Step2.4、将sample_queue队首元素出队,并将其表示为node=[Str(s='hello')],执行Step2.5;
Step2.5、将node节点类型存入node_type,node_type=['Module','Expr','Str'],执行Step2.6;
Step2.6、node=[Str(s='hello')],node节点不包含子节点,执行Step2.8;
Step2.8、将node节点所表示代码上下文存入node_code中,node_code=['print','hello'],执行Step2.3;
Step2.3、sample_queue为空,执行Step2.9;
Step2.9、对node_code中元素进行去重,node_code=['print','hello'],执行Step2.10;
Step2.10、以node_code作为词典,将code进行分词,并以空格进行分隔,code=“print(‘hello’)”,执行Step2.11;
Step2.11、初始化滑动窗口windows=8,起始位置start=0,训练样本集合vec_train=[],训练样本标签集合vec_label=[],执行Step2.12;
Step2.12、以node_code为词典,将分词后的code转换为one-hot序列,code_one_hot=[10,01,00,00,00,00,00,00],(若code序列小于windows长度,则使用0填充到windows长度,此处使用0将code_one_hot填充到windows长度)执行Step2.13;
Step2.13、start=0小于code序列长度2,执行Step2.14;
Step2.14、line=[10,01,00,00,00,00,00,00],即起始位置为0,长度为8的序列;执行Step2.15;
Step2.15、vec_train=[[10]],vec_label=[[01,00,00,00,00,00,00]],执行Step2.16;
Step2.16、start=start+1,执行Step2.13;
Step2.13、start=1小于code序列长度,执行Stpe2.14;
Step2.14、line=[01,00,00,00,00,00,00,00],执行Step2.15;
Step2.15、vec_train=[01],vec_label=[00,00,00,00,00,00,00],执行Step2.16;
Step2.16、start=start+1,执行Step2.13;
Step2.13、start=2等于code序列长度,执行Stpe2.17;
Step2.17、初始化全连接神经网络,使用vec_train与vec_label训练代码符号向量,结束。其中,词向量训练结果如表5所示。
表5代码符号向量
Figure BDA0002859087130000131
Step3、根据代码上下文建立多维语法树;
Step3.1、输入数据集D,执行Step3.2;
Step3.2、将表4数据集D中所有代码文件路径File存入代码文件路径集合file中并去重,file=[‘test.py’],初始化f=0,样本samples=[],执行Step3.3;
Step3.3、f小于file中文件路径个数(一条代码自动生成数据和程序员行为数据对应一个文件路径,本实施例以一条数据为例,此处文件路径个数为1),执行Step3.4;
Step3.4、将file[f]中代码上下文解析为语法树root,root=[Module(body=[Expr(value=Call(func=Name(id='print',ctx=Load()),args=[Str(s='hello')],keywords=[]))])],将D中文件路径为file[f]的代码自动生成数据与程序员行为数据中与代码质量属性相关的特征项存入records,records=[[0.03447179162297498,0.44821123213961412,0.06769157842859497,0.12863582415177677,0.8469677586819615,0.2464917888555196,0.1581186486749533,0.2435432623454325,0.9345432584325229,0.998234578252372]],代码自动生成质量标注存入label,label=[[0.8,0.5,0.6,0.7]],执行Step3.5;
Step3.5、初始化节点队列queue=[root];根节点字段root_josn={'node':Model,'code':'print(‘hello’)','children':[],'record':None};节点队列字段queue_json=[root_json],queue_json=[{'node':Model,'code':'print(‘hello’)','children':[],'record':None}];f+=1,执行Step3.6;其中,'node'表示多维语法树中语法维度信息,'code'表示多维语法树中语义维度信息,'record'表示多维语法树中生成信息维度信息,'children'表示root_json里的'node'、'code'、'record'的子节点列表,None表示空;
Step3.6、queue不为空,执行Step3.7;
Step3.7、current_node=root,并将queue队首元素出队;current_node_json=queue_json=[root_json],执行Step3.8;
Step3.8、children=current_node子节点列表,即children=[Name(id='print',ctx=Load()),[Str(s='hello')]],将children存入queue,变量c=0,执行Step3.9;c主要是用来取children中的每一个元素的,c=0时表示children中的第0个元素;
Step3.9、c=0小于children节点个数2,执行Step3.10;
Step3.10、初始化re=None,标签个数num=0,记录个数rc=0,执行Step3.11;
Step3.11、rc=0小于records个数1(一条代码自动生成数据和程序员行为数据对应的records个数取值为1),执行Step3.12;
Step3.12、children[0]代码为print等于数据集D中生成代码内容print,执行Step3.13;
Step3.13、re=数据集D中生成代码内容为print的与代码质量属性相关的特征项,子树datum={'tree':{'node':Model,'code':'print(‘hello’)','children':[],'record':},'label':[0.4,0.3,0.6,0.7]},num+=1,将datum添加到samples中,执行Step3.15;其中,'tree'表示多维语法数,'label'表示的是这棵树对应的代码自动生成质量标注;
Step3.15、孩子节点字段child_json={'node':'Name','code:'print','children':[],'record':[0.03447179162297498,0.44821123213961412,0.06769157842859497,0.12863582415177677,0.8469677586819615,0.2464917888555196,0.1581186486749533,0.2435432623454325,0.9345432584325229,0.998234578252372]},执行Step3.16;
Step3.16、将child_json添加到current_node_json['children']中,rc=1,c=1执行Step3.9;
Step3.9、c=1小于children节点个数2,执行Step3.10;
Step3.10、初始化re=None,num=0,rc=0,执行Step3.11;
Step3.11、rc=0小于records个数1,执行Step3.12;
Step3.12、children[1]代码为hello不等于数据集D中生成代码内容print,执行Step3.14;
Step3.14、rc=rc+1,执行Step3.11;
Step3.11、rc=1等于records个数1,执行Step3.15;
Step3.15、孩子节点字段child_json={'node':'Str','code:'hello','children':[],'record':re},执行Step3.16;
Step3.16、将child_json添加到current_node_json['children']中,rc=2,c=2,执行Step3.9;
Step3.9、c=2等于children节点个数2,执行Step3.3;
Step3.3、f等于file中文件路径个数1,结束;
Step4、通过特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性;网络结构如图4所示。
为了更清晰的阐述Step4,假设Step3中得到的samples为表6所示:
表6 samples实施例
Figure BDA0002859087130000151
Figure BDA0002859087130000161
Figure BDA0002859087130000171
Figure BDA0002859087130000181
使用Samples中'node'维度信息以层次遍历的方式构建syntax语法树,其中'node'中的代码符号使用Step2中得到的代码符号向量进行数值化表示,数值化后的syntax语法树如表7所示。
表7 syntax语法树
Figure BDA0002859087130000182
Figure BDA0002859087130000191
Figure BDA0002859087130000201
使用samples中'code'维度信息以层次遍历的方式构建semantics语义树,其中'code'代码符号使用Step2中得到的代码符号向量进行数值化表示,数值化后的semantics语义树如表8所示。
表8 semantics语义树
Figure BDA0002859087130000202
Figure BDA0002859087130000211
Figure BDA0002859087130000221
使用samples中'record'维度信息以层次遍历的方式构建generation生成树。如表9所示。
表9 generation生成树
Figure BDA0002859087130000222
Figure BDA0002859087130000231
Step4.1、初始化T_Syntax语法维度特征检测器:
Figure BDA0002859087130000232
初始化T_Semantics语义维度特征检测器:
Figure BDA0002859087130000233
初始化T_Generation生成信息维度特征检测器:
Figure BDA0002859087130000234
其中,t、l、r表示根、左、右;
Figure BDA0002859087130000235
分别表示语法维度根节点特征检测器、语法维度左孩子节点特征检测器、语法维度右孩子节点特征检测器、语法维度特征检测器偏置参数;
Figure BDA0002859087130000236
分别表示语义维度根节点特征检测器、语义维度左孩子节点特征检测器、语义维度右孩子节点特征检测器、语义维度特征检测器偏置参数;
Figure BDA0002859087130000237
分别表示生成信息维度根节点特征检测器、生成信息维度左孩子节点特征检测器、生成信息维度右孩子节点特征检测器、生成信息维度特征检测器偏置参数。通过T_Syntax语法维度特征检测器,T_Semantics语义维度特征检测器,T_Generation生成信息维度特征检测器对syntax,semantics,generation进行特征提取。执行Step4.2;
Step4.2、使用T_Syntax语法维度特征检测器在syntax语法树中进行滑动,T_Syntax语法维度特征检测器每次输出为:
Figure BDA0002859087130000241
其中y_syntax和
Figure BDA0002859087130000242
Figure BDA0002859087130000243
表示维度为Nf
Figure BDA0002859087130000244
表示维度为Nc×Nf,Nc为特征检测器的数量(即语法维度特征检测器、语义维度特征检测器、生成信息维度特征检测器的数量),Nf为代码符号向量的维度,syntaxi表示syntax语法树中的第i个节点,对于在底部没有像特征检测器那么多层的节点,使用0对节点进行填充。在训练过程中,对于不同的训练批次batch,取batch中最大节点数对其余数据进行填充。对于任意一个在T_syntax特征检测器中的节点(也可看做特征检测器窗口中的节点),它的权重参数Wconv_syntax,i
Figure BDA0002859087130000245
的线性组合,节点特征检测器权重系数分别为
Figure BDA0002859087130000246
Figure BDA0002859087130000247
Figure BDA0002859087130000248
Figure BDA0002859087130000249
Figure BDA00028590871300002410
其中,di为节点i在根节点特征检测器中的位置:如果用于语法维度特征检测器,则对应语法维度特征检测器的根节点特征检测器;如果用于语义维度特征检测器,则对应语义维度特征检测器的根节点特征检测器;如果用于生成信息特征检测器,则对应生成信息特征检测器的根节点特征检测器;d为窗口深度;pi为节点i在右孩子节点特征检测器中的位置:如果用于语法维度特征检测器,则对应语法维度特征检测器的右孩子节点特征检测器;如果用于语义维度特征检测器,则对应语义维度特征检测器的右孩子节点特征检测器;如果用于生成信息特征检测器,则对应生成信息特征检测器的右孩子节点特征检测器;syntax_bi为作为语法维度右孩子节点特征检测器pi的兄弟节点总数,semantics_bi为作为语义维度右孩子节点特征检测器pi的兄弟节点总数,generation_bi为作为生成信息维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.3;
Step4.3、使用T_Semantics语义维度特征检测器在semantics语义树中进行滑动,T_Semantics语义维度特征检测器每次输出y_semantics为:
Figure BDA0002859087130000251
其中y_semantics和
Figure BDA0002859087130000252
semanticsi表示semantics语义树中的第i个节点,对于任意一个在T_semantics语义维度特征检测器中的节点,它的权重参数Wconv_semantics,i
Figure BDA0002859087130000253
的线性组合,节点特征检测器权重系数分别为
Figure BDA0002859087130000254
Figure BDA0002859087130000255
Figure BDA0002859087130000256
Figure BDA0002859087130000257
Figure BDA0002859087130000258
执行Step4.4;
Step4.4、使用T_Generation生成信息维度特征检测器在generation生成树中进行滑动,T_Generation生成信息特征检测器每次输出y_geneeation为:
Figure BDA0002859087130000259
其中,y_generation和
Figure BDA00028590871300002510
generationi表示genreation生成树中的第i个节点,对于任意一个在T_Generation生成信息维度特征检测器中的节点,它的权重参数Wconv_generation,i
Figure BDA00028590871300002511
的线性组合,节点特征检测器权重系数分别为
Figure BDA00028590871300002512
Figure BDA00028590871300002513
Figure BDA00028590871300002514
Figure BDA00028590871300002515
Figure BDA00028590871300002516
执行Step4.5;
Step4.5、对y_syntsc,y_semantics,y_generation进行最大池化,对不同维度的特征取最大值,从而将提取到的特征规约到一个固定的大小,最大池化后将y_syntsc,y_semantics,y_generation连接为y,执行Step4.6;
Step4.6、将y输入到一个固定大小的全连接神经网络层,然后将其反馈到输出层,使用全连接神经网络输出的代码自动生成质量属性与训练批次batch对应的代码自动生成质量标注label计算偏差,根据反向传播过程,得到神经网络每层参数的误差,根据这些误差调整各层参数,完成网络模型的优化,执行Step4.7;
Step4.7、不断迭代步骤Step4.6,直至网络收敛,执行Step5。
Step5、使用全连接神经网络输出的代码质量属性对代码自动生成质量进行评估。
Step5.1、将Step4中全连接神经网络输出的G行H列代码自动生成质量属性值表示为G*H的矩阵M,为了清晰阐述Step5,本实施例使用Step4中全连接神经网络输出的6条代码自动生成质量属性值进行说明,如表10所示。
表10代码质量属性数据
Id 正确性 易用性 规范性 可维护性
1 0.68 0.32 0.69 0.45
2 0.34 0.24 0.61 0.5
3 0.34 0.22 0.54 0.56
4 0.63 0.28 0.58 0.27
5 0.24 0.15 0.67 0.64
6 0.23 0.21 0.7 0.3
G=6,H=4,M=[0.68,0.32,0.69,0.45],[0.34,0.24,0.61,0.5],[0.34,0.22,0.54,0.56],[0.63,0.28,0.58,0.27],[0.24,0.15,0.67,0.64],[0.23,0.21,0.7,0.3]]
执行Step5.2;
Step5.2、对M进行归一化处理,计算方式如下:
Figure BDA0002859087130000261
其中,xgh表示M中第g行第h列代码自动生成质量属性值,min(xh)为M中第h列代码自动生成质量属性值中的最小值,max(xh)表示为M中第h列代码自动生成质量属性值中的最大值,其中,g=1,2,...G;h=1,2,...H,归一化后M=[[1,1,0.9375,0.48648649],[0.24444444,0.52941176,0.4375,0.62162162],[0.24444444,0.41176471,0,0.78378378],[0.88888889,0.76470588,0.25,0],[0.02222222,0,0.8125,1],[0,0.35294118,1,0.08108108]],执行Step5.3;
Step5.3、计算M中第h项代码自动生成质量属性中第g个代码自动生成质量属性值所占比重Pgh
Figure BDA0002859087130000271
执行Step5.4;
Step5.4、计算M中第h项代码自动生成质量属性的熵值eh
Figure BDA0002859087130000272
Figure BDA0002859087130000273
执行Step5.5;
Step5.5、计算M中第h列代码自动生成质量属性的差异系数Fh,Fh=1-eh,执行Step5.6;
Step5.6、计算M中第h顶代码自动生成质量属性的权重Wh,
Figure BDA0002859087130000274
W=[0.381234,0.381234,0.196902,0.243886],执行Step5.7;
Step5.7、计算M中第g行代码自动生成质量评估值为Qg
Figure BDA0002859087130000275
Q=[0.62684508,0.46316894,0.45639428,0.52697532,0.43669264,0.37874016],即Q1=0.62684508,Q2=0.46316894,Q3=0.45639428,Q4=0.52697532,Q5=0.43669264,Q6=0.37874016,即表11中最后一列。
表11代码质量评估结果
Id 正确性 易用性 规范性 可维护性 Q<sub>g</sub>
1 0.68 0.32 0.69 0.45 0.62684508
2 0.34 0.24 0.61 0.5 0.46316894
3 0.34 0.22 0.54 0.56 0.45639428
4 0.63 0.28 0.58 0.27 0.52697532
5 0.24 0.15 0.67 0.64 0.43669264
6 0.23 0.21 0.7 0.3 0.37874016
通过对代码自动生成质量属性权重计算,从而得到代码自动生成质量评估结果,通过本方法可以综合不同代码自动生成质量属性的权重,直观的反映出代码自动生成质量。
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。

Claims (5)

1.一种代码自动生成质量评估方法,其特征在于:所述方法步骤如下:
Step1、基于代码自动生成数据和程序员行为数据抽取特征项并进行标注,作为数据集D;
Step2、使用数据集D中代码上下文进行预训练,生成代码符号向量;
Step3、根据代码上下文建立多维语法树;
Step4、通过特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性;
Step5、使用全连接神经网络输出的代码质量属性对代码自动生成质量进行评估;
所述Step3具体如下:
Step3.1、输入数据集D,执行Step3.2;
Step3.2、将数据集D中所有文件路径存入file中并去重,初始化文件路径个数f=0,样本samples=[],执行Step3.3;
Step3.3、判断f是否小于file中文件路径个数,是则执行Step3.4,否则执行Step4;其中,一条代码自动生成数据和程序员行为数据对应一个文件路径;
Step3.4、将第f个文件路径file[f]中代码上下文解析为语法树root,将数据集D中文件路径为file[f]与代码质量属性相关的特征项存入records,代码自动生成质量标注存入label,执行Step3.5;
Step3.5、初始化节点队列queue=[root];根节点字段root_josn={'node':root节点类型,'code':root节点表示的代码,'children':[],'record':None};节点队列字段queue_json=[root_json];f+=1,执行Step3.6;
Step3.6、判断queue是否不为空,是则执行Step3.7,否则执行Step3.3;
Step3.7、当前节点current_node=queue队首元素,并将queue队首元素出队;当前节点字段current_node_json=queue_json=[root_json],执行Step3.8;
Step3.8、孩子节点children=current_node子节点列表,将children存入queue,c=0,执行Step3.9;
Step3.9、判断c是否小于children节点个数,是则执行Step3.10,否则执行Step3.3;
Step3.10、初始化记录re=None,num=0,rc=0,执行Step3.11;
Step3.11、判断rc是否小于records个数,是则执行Step3.12,否则执行Step3.15;其中,一条代码自动生成数据和程序员行为数据对应的records个数取值为1;
Step3.12、判断children[c]代码是否等于数据集D中生成代码内容,是则执行Step3.13,否则执行Step3.14;
Step3.13、re=数据集D中生成代码内容为children[c]的与代码质量属性相关的特征项,子树datum={'tree':root_json,'label':label[num]},num+=1,将datum添加到samples中,执行Step3.15;
Step3.14、rc=rc+1,执行Step3.11;
Step3.15、孩子节点字段child_json={'node':children[c]节点类型,'code':children[c]中生成代码内容,'children':[],'record':re},执行Step3.16;
Step3.16、将child_json添加到current_node_json['children']中,rc+=1,c+=1,执行Step3.9。
2.根据权利要求1所述的代码自动生成质量评估方法,其特征在于:所述Step1具体如下:
Step1.1、定义代码自动生成质量属性集合A,初始化代码自动生成数据和程序员行为数据,执行Step1.2;
Step1.2、基于代码自动生成数据和程序员行为数据抽取与代码质量属性相关的特征项、抽取通用特征项并进行标注,作为数据集D,执行Step2。
3.根据权利要求1所述的代码自动生成质量评估方法,其特征在于:所述Step2具体如下:
Step2.1、将数据集D中所有代码上下文Codecontext存入代码code,执行Step2.2;
Step2.2、将code转换为语法树tree,初始化节点队列sample_queue=[tree],初始化节点类型集合node_type=[],节点代码集合node_code=[],执行Step2.3;
Step2.3、判断sample_queue是否为空,若sample_queue为空,执行Step2.9,否则执行Step2.4;
Step2.4、将sample_queue队首元素出队,并将队首元素表示为node,执行Step2.5;
Step2.5、将node节点类型存入node_type,执行Step2.6;
Step2.6、判断node节点是否含有子节点,是则执行Step2.7,否则执行Step2.8;
Step2.7、将node节点的子节点加入队列sample_queue中,执行Step2.3;
Step2.8、将node节点所表示的代码存入node_code中,执行Step2.3;
Step2.9、对node_code中的元素进行去重,执行Step2.10;
Step2.10、以node_code作为词典,将code进行分词,并以空格进行分隔,执行Step2.11;
Step2.11、初始化窗口windows=8,start=0,训练样本集合vec_train=[],训练样本标签集合vec_label=[],执行Step2.12;
Step2.12、以node_code为词典,将分词后的code转换为one-hot序列,并将其表示为code_one_hot,执行Step2.13;
Step2.13、判断start是否小于code序列长度,是执行Stpe2.14,否则执行Step2.17;
Step2.14、序列line=code_one_hot中起始点为start,长度为windows的序列,执行Step2.15;
Step2.15、将line中start处的元素存入vec_train,将line中除start处以外的元素存入vec_label,执行Step2.16;
Step2.16、start=start+1,执行Step2.13;
Step2.17、初始化全连接神经网络,使用vec_train与vec_label训练代码符号向量,执行Step3。
4.根据权利要求1所述的代码自动生成质量评估方法,其特征在于:所述Step4具体如下:
Step4.1、初始化T_Syntax语法维度特征检测器:
Figure FDA0003647443050000031
bconv_syntax
初始化T_Semantics语义维度特征检测器:
Figure FDA0003647443050000032
bconv_semantics
初始化T_Generation生成信息维度特征检测器:
Figure FDA0003647443050000033
bconv_generation
其中,t、l、r表示根、左、右;
Figure FDA0003647443050000034
bconv_syntax分别表示语法维度根节点特征检测器、语法维度左孩子节点特征检测器、语法维度右孩子节点特征检测器、语法维度特征检测器偏置参数;
Figure FDA0003647443050000041
bconv_semantics分别表示语义维度根节点特征检测器、语义维度左孩子节点特征检测器、语义维度右孩子节点特征检测器、语义维度特征检测器偏置参数;
Figure FDA0003647443050000042
bconv_generation分别表示生成信息维度根节点特征检测器、生成信息维度左孩子节点特征检测器、生成信息维度右孩子节点特征检测器、生成信息维度特征检测器偏置参数;执行Step4.2;
Step4.2、使用T_Syntax语法维度特征检测器在syntax语法树中进行滑动,T_Syntax语法维度特征检测器每次输出y_syntax为:
Figure FDA0003647443050000043
其中,y_syntax和
Figure FDA0003647443050000044
Figure FDA00036474430500000412
表示维度为Nf
Figure FDA00036474430500000413
表示维度为Nc×Nf,Nc为特征检测器的数量,Nf为代码符号向量的维度,syntaxi表示syntax语法树中的第i个节点;对于任意一个在T_syntax语法维度特征检测器中的节点,它的权重参数Wconv_syntax,i
Figure FDA0003647443050000045
bconv_syntax的线性组合,节点特征检测器权重系数分别为
Figure FDA0003647443050000046
Figure FDA0003647443050000047
Figure FDA0003647443050000048
Figure FDA0003647443050000049
Figure FDA00036474430500000410
其中,di为节点i在根节点特征检测器中的位置;d为窗口深度;pi为节点i在右孩子节点特征检测器中的位置,syntax_bi为作为语法维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.3;
Step4.3、使用T_Semantics语义维度特征检测器在semantics语义树中进行滑动,T_Semantics语义维度特征检测器每次输出y_semantics为:
Figure FDA00036474430500000411
其中y_semantics和
Figure FDA0003647443050000051
semanticsi表示semantics语义树中的第i个节点,对于任意一个在T_semantics语义维度特征检测器中的节点,它的权重参数Wconv_semantics,i
Figure FDA0003647443050000052
bconv_semantics的线性组合,节点特征检测器权重系数分别为
Figure FDA0003647443050000053
Figure FDA0003647443050000054
Figure FDA0003647443050000055
Figure FDA0003647443050000056
Figure FDA0003647443050000057
其中,semantics_bi为作为语义维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.4;
Step4.4、使用T_Generation生成信息维度特征检测器在generation生成树中进行滑动,T_Generation生成信息特征检测器每次输出y_generation为:
Figure FDA0003647443050000058
其中,y_generation和
Figure FDA0003647443050000059
generationi表示genreation生成树中的第i个节点,对于任意一个在T_Generation生成信息维度特征检测器中的节点,它的权重参数Wconv_generation,i
Figure FDA00036474430500000510
bconv_generation的线性组合,节点特征检测器权重系数分别为
Figure FDA00036474430500000511
Figure FDA00036474430500000512
Figure FDA00036474430500000513
Figure FDA00036474430500000514
Figure FDA00036474430500000515
其中,generation_bi为作为生成信息维度右孩子节点特征检测器pi的兄弟节点总数;
执行Step4.5;
Step4.5、对y_syntsc,y_semantics,y_generation进行最大池化,对不同维度的特征取最大值,从而将提取到的特征规约到一个固定的大小,最大池化后将y_syntsc,y_semantics,y_generation连接为y,执行Step4.6;
Step4.6、将y输入到一个固定大小的全连接神经网络层,然后将其反馈到输出层,使用全连接神经网络输出的代码自动生成质量属性与训练批次batch对应的代码自动生成质量标注label计算偏差,根据反向传播过程,得到神经网络每层参数的误差,根据这些误差调整各层参数,完成网络模型的优化,执行Step4.7;
Step4.7、不断迭代步骤Step4.6,直至网络收敛,执行Step5。
5.根据权利要求4所述的代码自动生成质量评估方法,其特征在于:所述Step5具体如下:
Step5.1、将Step4中全连接神经网络输出的G行H列代码自动生成质量属性值表示为G*H的矩阵M,执行Step5.2;
Step5.2、对M进行归一化处理,计算方式如下:
Figure FDA0003647443050000061
其中,xgh表示M中第g行第h列代码自动生成质量属性值,min(xh)为M中第h列代码自动生成质量属性值中的最小值,max(xh)表示为M中第h列代码自动生成质量属性值中的最大值,执行Step5.3;其中,g=1,2,...G;h=1,2,...H;
Step5.3、计算M中第h项代码自动生成质量属性中第g个代码自动生成质量属性值所占比重Pgh
Figure FDA0003647443050000062
执行Step5.4;
Step5.4、计算M中第h项代码自动生成质量属性的熵值eh
Figure FDA0003647443050000063
Figure FDA0003647443050000064
执行Step5.5;
Step5.5、计算M中第h列代码自动生成质量属性的差异系数Fh,Fh=1-eh,执行Step5.6;
Step5.6、计算M中第h顶代码自动生成质量属性的权重Wh
Figure FDA0003647443050000065
执行Step5.7;
Step5.7、计算M中第g行代码自动生成质量评估值为Qg
Figure FDA0003647443050000066
Mgh表示归一化后M的第g行第h列,结束。
CN202011557515.3A 2020-12-25 2020-12-25 一种代码自动生成质量评估方法 Active CN112698831B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011557515.3A CN112698831B (zh) 2020-12-25 2020-12-25 一种代码自动生成质量评估方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011557515.3A CN112698831B (zh) 2020-12-25 2020-12-25 一种代码自动生成质量评估方法

Publications (2)

Publication Number Publication Date
CN112698831A CN112698831A (zh) 2021-04-23
CN112698831B true CN112698831B (zh) 2022-08-09

Family

ID=75510215

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011557515.3A Active CN112698831B (zh) 2020-12-25 2020-12-25 一种代码自动生成质量评估方法

Country Status (1)

Country Link
CN (1) CN112698831B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114254068B (zh) * 2022-02-28 2022-08-09 杭州未名信科科技有限公司 一种数据流转方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657140B (zh) * 2015-02-10 2018-01-09 广州华多网络科技有限公司 代码生成方法及装置
CN109101235A (zh) * 2018-06-05 2018-12-28 北京航空航天大学 一种软件程序的智能解析方法
CN109960506A (zh) * 2018-12-03 2019-07-02 复旦大学 一种基于结构感知的代码注释生成方法
CN110738984A (zh) * 2019-05-13 2020-01-31 苏州闪驰数控系统集成有限公司 人工智能cnn、lstm神经网络语音识别系统
US10656940B1 (en) * 2019-02-04 2020-05-19 Architecture Technology Corporation Systems, devices, and methods for source code generation from binary files
CN112035165A (zh) * 2020-08-26 2020-12-04 山谷网安科技股份有限公司 基于同构网络的代码克隆检测方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10963226B2 (en) * 2017-10-25 2021-03-30 Aspiring Minds Assessment Private Limited Generating compilable code from uncompilable code

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657140B (zh) * 2015-02-10 2018-01-09 广州华多网络科技有限公司 代码生成方法及装置
CN109101235A (zh) * 2018-06-05 2018-12-28 北京航空航天大学 一种软件程序的智能解析方法
WO2019233112A1 (zh) * 2018-06-05 2019-12-12 北京航空航天大学 一种软件源代码的向量化表征方法
CN109960506A (zh) * 2018-12-03 2019-07-02 复旦大学 一种基于结构感知的代码注释生成方法
US10656940B1 (en) * 2019-02-04 2020-05-19 Architecture Technology Corporation Systems, devices, and methods for source code generation from binary files
CN110738984A (zh) * 2019-05-13 2020-01-31 苏州闪驰数控系统集成有限公司 人工智能cnn、lstm神经网络语音识别系统
CN112035165A (zh) * 2020-08-26 2020-12-04 山谷网安科技股份有限公司 基于同构网络的代码克隆检测方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
"CNN-based approach for visual quality improvement on HEVC";Young-woon Lee 等;《2018 IEEE International Conference on Consumer Electronics》;20180329;1-3 *
"word2vec原理与代码";黎明程序员;《https://www.cnblogs.com/itmorn/p/8196605.html》;20180105;1-8 *
"基于用户评论的代码质量识别与分析";姜瑛 等;《计算机科学》;20200315;第47卷(第3期);41-47 *

Also Published As

Publication number Publication date
CN112698831A (zh) 2021-04-23

Similar Documents

Publication Publication Date Title
CN109472024B (zh) 一种基于双向循环注意力神经网络的文本分类方法
CN108363790B (zh) 用于对评论进行评估的方法、装置、设备和存储介质
CN111444320B (zh) 文本检索方法、装置、计算机设备和存储介质
US5524240A (en) Method and apparatus for storage and retrieval of handwritten information
CN112732934B (zh) 电网设备分词词典和故障案例库构建方法
WO2020232898A1 (zh) 文本分类方法、装置、电子设备及计算机非易失性可读存储介质
CN112306494A (zh) 一种基于卷积和循环神经网络的代码分类及聚类方法
CN110795526B (zh) 一种用于检索系统的数学公式索引创建方法与系统
Ciurumelea et al. Suggesting comment completions for python using neural language models
CN108491381B (zh) 一种汉语二分结构的句法分析方法
CN109522396B (zh) 一种面向国防科技领域的知识处理方法及系统
CN111857660B (zh) 一种基于查询语句的情境感知api推荐方法及终端
CN111241410A (zh) 一种行业新闻推荐方法及终端
CN111881256A (zh) 文本实体关系抽取方法、装置及计算机可读存储介质设备
CN116661805A (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN112698831B (zh) 一种代码自动生成质量评估方法
CN112732863B (zh) 电子病历标准化切分方法
CN113486670A (zh) 基于目标语义的文本分类方法、装置、设备及存储介质
CN113377844A (zh) 面向大型关系型数据库的对话式数据模糊检索方法及装置
EP4254279A1 (en) Machine learning pipeline augmented with explanation
Barari et al. CloniZER spell checker adaptive language independent spell checker
CN116127097A (zh) 一种结构化文本关系抽取方法、装置、设备
CN115129890A (zh) 回馈数据图谱生成方法、生成设备、问答设备及冰箱
CN114626378B (zh) 命名实体识别方法、装置、电子设备及计算机可读存储介质
CN114676155A (zh) 代码提示信息的确定方法、数据集的确定方法及电子设备

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
GR01 Patent grant
GR01 Patent grant