CN111562943B - 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 - Google Patents

一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 Download PDF

Info

Publication number
CN111562943B
CN111562943B CN202010357023.3A CN202010357023A CN111562943B CN 111562943 B CN111562943 B CN 111562943B CN 202010357023 A CN202010357023 A CN 202010357023A CN 111562943 B CN111562943 B CN 111562943B
Authority
CN
China
Prior art keywords
event
layer
node
embedding
vector
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
CN202010357023.3A
Other languages
English (en)
Other versions
CN111562943A (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.)
Hainan University
Original Assignee
Hainan University
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 Hainan University filed Critical Hainan University
Priority to CN202010357023.3A priority Critical patent/CN111562943B/zh
Publication of CN111562943A publication Critical patent/CN111562943A/zh
Application granted granted Critical
Publication of CN111562943B publication Critical patent/CN111562943B/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/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • 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
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于事件嵌入树及GAT网络的代码克隆检测方法和装置。本发明的基于事件嵌入树及GAT网络的代码克隆检测方法将源代码转换为其对应的流程图,并使用自定义的IR中间表示文本对该流程图进行描述;通过事件嵌入层(Event Embeddinhg)对IR中每一个节点的语句进行事件嵌入计算,得到节点向量矩阵(Node Vector Matrix);通过GAT图注意力网络对节点向量矩阵每一节点的事件嵌入向量进行调整融合,使其感知上下文节点的事件嵌入语义,得到节点上下文矩阵(Node Context Vector Matrix);使用卷积层对节点上下文矩阵中每个节点进行卷积计算,从而提取该程序流程图最终的向量表示;使用该向量表示通过分类器(classifier)判断两个代码片段是否为克隆代码对。

Description

一种基于事件嵌入树及GAT网络的代码克隆检测方法和装置
技术领域
本发明涉及软件代码分析技术领域,特别是涉及一种基于事件嵌入树及GAT网络的代码克隆检测方法和装置。
背景技术
如果一个软件的源程序中的一个代码段和同一程序中另一个代码段在结构或语义上类似,这些代码段便成了代码克隆,代码克隆的存在增加了软件维护的困难,如果对源程序中进行修改的部分有克隆的代码段,这些克隆代码段也常常需要修改。
代码克隆检测在软件工程任务中通常发挥重要作用。例如,在程序理解,抄袭检测,版权保护,代码压缩,软件演化分析,代码质量分析,bug检测和病毒检测的场景中,可能需要分辨出具有文本相似性,句法相似性或语义相似性的代码块,这时边需要进行代码克隆检测。
传统的代码克隆检测方法,核心思想在于通过人为定义,提取代码片段中的某一类别的信息,之后通过这类信息的来进行代码克隆的判断,但这一代码克隆的检测方法的检测不够全面,也不够准确。
发明内容
基于此,本发明的目的在于,提供一种基于事件嵌入树及GAT网络的代码克隆检测方法和装置,通过对每个语句的执行语义以及各个语句之间的执行上下文语义进行建模,所得到的克隆代码判断结果更加全面和准确。
第一方面,本申请实施例提供了一种基于事件嵌入树及GAT网络的代码克隆检测方法,包括如下步骤:
针对每个代码片段,将该代码片段转换为程序流程图,所述程序流程图为包含控制流和数据流的中间表达形式;
将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,其中,所述节点向量矩阵中的第i行表示所述程序流程图第i个节点的嵌入结果;
将所述节点向量矩阵输入图注意力网络层,使每个节点向量学习其上下文临近节点的特征,得到节点上下文向量矩阵;
将所述节点上下文向量矩阵输入卷积网络层,对所述节点上下文向量矩阵进行特征提取,得到该代码片段的特征向量;
将待检测的一组特征向量输入至分类器中,得到该组特征向量所对应的不同代码片段的克隆检测结果。
可选的,将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,包括:
针对该代码片段中的单一事件,将该单一事件输入至第一事件嵌入层,其中,所述第一事件嵌入层的计算公式如下:
Figure GDA0004269932380000021
a=concat(e1,e2,…,ek)
o=Dense(a)
其中,ek为每个所述单一事件的向量表示,a为所有单一事件向量表示的连接,o为所述第一事件嵌入层的输出;Tp1,Tp2为针对指定运算符的两个张量,用于将该运算符对应的两个实体的向量表示映射到多个高维向量空间;Vec函数用于将输入的实体转换为实体的向量表示;Dense函数为全连接层。
可选的,所述Vec函数将出现次数最多的k′个实体映射为k′个不同的向量,并将剩余n-k′个实体映射为一个相同的向量;
或者,
所述Vec函数将每个实体转换为其对应的实体类型后,根据所述实体类型将每个实体映射为不同的向量。
可选的,将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,包括:
针对该代码片段中的多层嵌套事件,将该多层嵌套输入至第二事件嵌入层,其中,所述第二事件嵌入层的计算公式如下:
rt=σ(Wr·[At-1,Ot])
zt=σ(Wz·[At-1,Ot])
Figure GDA0004269932380000022
Figure GDA0004269932380000023
其中,rt为重置门,zt为更新门,Wr为重置门参数,Wz为更新门参数,At-1为原始事件或中间事件,
Figure GDA0004269932380000024
所述第一事件嵌入层,Ec为第一事件嵌入层参数,At为中间事件嵌入或最终嵌入,Pt为对应的运算符。
可选的,所述分类器为余弦相似度分类模型。
可选的,所述卷积网络层包括一维卷积层,用于将所述节点上下文向量矩阵压缩为一维向量。
可选的,所述事件嵌入层、所述图注意力网络层和所述卷积网络层的训练过程包括:
根据如下损失函数,训练所述事件嵌入层、所述图注意力网络层和所述卷积网络层:
g(xi)=Conv(GAT(Et(xi)))
Figure GDA0004269932380000031
Loss=max(1-distance(x1,x2′)+distance(x1,x2))
其中,g(xi)为样本的输出,(x1,x2)为正样本,(x1,x2′)为负样本,Et为第二事件嵌入层,GAT为图卷积注意力层,Conv为卷积网络层,distance为计算两个样本相似度的函数,Loss为根据样本计算的损失。
可选的,所述第二事件嵌入层的反向传播公式为:
Figure GDA0004269932380000032
其中,Et为第t步时的误差,N为某一运算符出现在嵌入链中的位置,Wo为所述第一事件嵌入层中属于该运算符的参数,Ak为第k个实体的嵌入。
第二方面,本申请实施例提供了一种基于事件嵌入树及GAT网络的代码克隆检测装置,所述装置包括:
程序流程图转换模块,用于针对每个代码片段,将该代码片段转换为程序流程图,所述程序流程图为包含控制流和数据流的中间表达形式;
事件嵌入模块,用于将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,其中,所述节点向量矩阵中的第i行表示所述程序流程图第i个节点的嵌入结果;
图注意力网络层模块,用于将所述节点向量矩阵输入图注意力网络层,使每个节点向量学习其上下文临近节点的特征,得到节点上下文向量矩阵;
卷积模块,用于将所述节点上下文向量矩阵输入卷积网络层,对所述节点上下文向量矩阵进行特征提取,得到该代码片段的特征向量;
分类模块,用于将待检测的一组特征向量输入至分类器中,得到该组特征向量所对应的不同代码片段的克隆检测结果。
第三方面,本申请实施例提供了一种电子设备,包括:
存储器以及处理器;
所述存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述处理器执行,使得所述处理器实现如本申请实施例第一方面所述的基于事件嵌入树及GAT网络的代码克隆检测方法。
在本申请实施例中,将每段代码片段转换为描述了程序流程图的结构和内容的中间表达形式后,对该中间表达形式进行事件嵌入计算,得到包括事件嵌入语义的每个向量所组成的节点向量矩阵,通过图注意力网络层得到的能反应每个节点向量以及其上下文节点特征的节点上下文矩阵,并对所述节点上下文矩阵进行特征提取后,通过所提取的特征识别不同的代码片段是否为克隆样本对,相比于现有技术,本申请通过对每个语句的执行语义以及各个语句之间的执行上下文语义进行建模,所得到的克隆代码判断结果更加全面和准确。
为了更好地理解和实施,下面结合附图详细说明本发明。
附图说明
图1为本申请一个实施例中的一种基于事件嵌入树及GAT网络的代码克隆检测方法流程图;
图2为本申请一个实施例中的第二事件嵌入层(Event Transformer)的模型结构示意图;
图3为本申请一个实施例中基于事件嵌入树及GAT网络的代码克隆检测方法所采用的模型结构和方法流程示意图;
图4为本申请一个实施例中的一种基于事件嵌入树及GAT网络的代码克隆检测结构示意图;
图5为本申请一个实施例中的电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
接下来对本说明书实施例进行详细说明。
针对现有技术中代码克隆检测方法的检测不够全面,也不够准确的技术问题,本申请实施例提供了一种基于事件嵌入树及GAT网络的代码克隆检测方法,如图1所示,在一个实施例中,所述方法包括如下步骤:
S101:针对每个代码片段,将该代码片段转换为程序流程图,所述程序流程图为包含控制流和数据流的中间表达形式。
所述代码片段可以是现有常用的编程语言所编写的代码片段,例如,C语言的代码片段。所述中间表达形式,也就是IR(Intermediate Representation),该中间表达形式主要描述了程序流程图的结构及内容,所述程序流程图为树状结构,也就是中间表示树。
在本申请实施例中,针对程序流图中的每一个节点和边的特征进行描述,其中对节点的描述主要包含其节点ID,节点类型(如if条件分支节点或普通表达式节点)以及节点内容(表达式的嵌入树内容),对边的描述主要包括其起始节点和终止节点。
S102:将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,其中,所述节点向量矩阵中的第i行表示所述程序流程图第i个节点的嵌入结果。
所述事件嵌入(Event Embeddinhg)层主要用于针对所述程序流程图中的每个节点的语句进行事件嵌入计算,将所述程序流程图中每个节点的内容嵌入为一个向量,该向量包含了该条语句的事件嵌入语义,通过这一步,构造可以用于输入图注意力网络层(Graph Attention Network,GAT)进行训练的数据结构,即节点向量矩阵(Node VectorMatrix)。
S103:将所述节点向量矩阵输入图注意力网络层,使每个节点向量学习其上下文临近节点的特征,得到节点上下文向量矩阵。
在本申请实施例中,在得到节点向量矩阵后,还通过图注意力网络层来调整所述节点向量矩阵中每一节点的向量表示,使其能融合其邻居节点的信息。所述图注意力网络层在之前图卷积网络GCN的基础之上引入了注意力机制,每一个节点的值只与相邻节点有关,即共享边的节点有关,无需得到整张图的信息,从而使得到的所述节点上下文矩阵(Node Context Vector Matrix)能反应每个节点向量以及其上下文节点的特征。
S104:将所述节点上下文向量矩阵输入卷积网络层,对所述节点上下文向量矩阵进行特征提取,得到该代码片段的特征向量。
所述卷积网络层用于(Convolutional Neural Networks,CNN)对所述节点上下文矩阵进行特征提取,即可获得该代码片段的特征向量。
在一个实施例中,由于图注意力网络层的输出节点上下文向量矩阵为N*K的矩阵,其中N为图中节点个数,K为节点表示向量的维度。所述卷积网络层为一个一维卷积层,用于对N*K矩阵进行压缩,将其压缩为(1,N*m)的一维向量,其中m为一维卷积核的个数。该一维向量即为此段代码的特征向量表示。
S105:将待检测的一组特征向量输入至分类器中,得到该组特征向量所对应的不同代码片段的克隆检测结果。
所述分类器用于对不同代码片段的特征向量进行分类识别,从而根据对特征向量的分类识别结果得到不同代码片段的克隆检测结果。所述分类器可以是常见的用于对向量进行分类的分类器。
在一个实施例中,所述分类器可以是通过比较两个向量的相似度来判断该两个不同的代码片段是否为克隆代码片段。例如,可以设置相似度阈值为\garma,若两个不同的代码片段对应的特征向量得相似度大于\gamma,则判定其为克隆样本对,否则,判断其为非克隆样本对。
在本申请实施例中,将每段代码片段转换为描述了程序流程图的结构和内容的中间表达形式后,对该中间表达形式进行事件嵌入计算,得到包括事件嵌入语义的每个向量所组成的节点向量矩阵,通过图注意力网络层得到的能反应每个节点向量以及其上下文节点特征的节点上下文矩阵,并对所述节点上下文矩阵进行特征提取后,通过所提取的特征识别不同的代码片段是否为克隆样本对,相比于现有技术,本申请通过对每个语句的执行语义以及各个语句之间的执行上下文语义进行建模,所得到的克隆代码判断结果更加全面和准确。
在一个示例性的实施例中,将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,包括:
针对该代码片段中的单一事件,将该单一事件输入至第一事件嵌入层,其中,所述第一事件嵌入层的计算公式如下:
Figure GDA0004269932380000061
a=concat(e1,e2,…,ek)
o=Dense(a)
其中,ek为每个所述单一事件的向量表示,a为所有单一事件向量表示的连接,o为所述第一事件嵌入层的输出;Tp1,Tp2为针对指定运算符的两个张量,用于将该运算符对应的两个实体的向量表示映射到多个高维向量空间;Vec函数用于将输入的实体转换为实体的向量表示;Dense函数为全连接层。
针对C语言的代码片段,可以是预先定义38个程序中常见的运算符(operator),包括:(assign,return,param,~,p++,p--,+,-,++,--,*,/,%,!=,==,<,>,<=,>=,&&,&,||,|,c_*,c_+,c-,^,invoke,parammix,sizeof,<<,>>,!,c_&,c_|,(,),structureaccess)等运算符,这些运算符主要扮演矩阵三元组关系(A,P,O)中P的角色,用来描述两个实体间的关系。例如针对事件c#<#1,其中运算符为<,整个事件可以描述为对变量实体c与常数实体1进行大小对比。
所述单一事件,即为事件嵌入树深度为2的事件,也即在所述程序流程图中深度为2的事件。在本申请实施例中,针对单一事件,定义了第一事件嵌入层(Event Cell单元)对该单一事件进行嵌入。
在一个实施例中,所述第一事件嵌入层中的所述Vec函数将出现次数最多的k′个实体映射为k′个不同的向量,并将剩余n-k′个实体映射为一个相同的向量。
针对一个代码片段,所述第一事件嵌入层将其中的标识符,函数名,各类字面量视为实体。假设该代码片段中共有n个实体,其中每种实体在代码片段中出现的次数都不同,因此vec函数将出现次数最多的k′个实体映射为k′个不同的向量,将剩余n-k′个实体映射为一个相同的向量。从而使这些实体向量参与下一步的事件嵌入运算。
在另一个实施例中,所述Vec函数将每个实体转换为其对应的实体类型后,根据所述实体类型将每个实体映射为不同的向量。
首先将每个实体转换为其对应的实体类型(如:标识符,函数名,字面量等),之后vec函数根据其类型将其转换为不同的实体向量,每种类型的实体将被转换为不同的实体向量。
在一个实施例中,针对该代码片段中的多层嵌套事件,所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,包括:
将该多层嵌套输入至第二事件嵌入层,其中,所述第二事件嵌入层的计算公式如下:
rt=σ(Wr·[At-1,Ot])
zt=σ(Wz·[At-1,Ot])
Figure GDA0004269932380000071
Figure GDA0004269932380000072
其中,rt为重置门,zt为更新门,Wr为重置门参数,Wz为更新门参数,At-1为原始事件或中间事件,
Figure GDA0004269932380000073
所述第一事件嵌入层,Ec为第一事件嵌入层参数,At为中间事件嵌入或最终嵌入,Pt为对应的运算符。
如图2所示,图2为一个实施例中的第二事件嵌入层(Event Transformer)的模型结构示意图,针对嵌套多层事件,例如printf(constantStr,p),通过定义第二事件嵌入层来处理这种链式事件嵌入。
第二事件嵌入层负责将一系列连续的事件嵌入为一个向量,所述第二事件嵌入层在GRU的基础上修改了其输出门结构,将其替换为第一事件嵌入层(Event Cell),同时保留门机制来增强第二事件嵌入层对较长事件链的嵌入能力。需要注意的是,由于第二事件嵌入层将GRU的输出们替换为了第一事件嵌入层,而在计算过程中第一事件嵌入层的运算符张量(Operator Tensor)参数取决于具体的运算符,因此其不再与更新门,重置门之间共享参数,因此其参数训练需要新的方式BPTE(Back propogation through event)。
由于不同节点所包含的事件链长度,类型都不一样,而第一事件嵌入层每一次训练都需要根据Pt将运算符对应的张量进行替换,因此为了进行批量训练,针对每一批输入的事件链选取其最大长度,对长度小于最大长度的事件链,采用遮蔽的方式来避免不必要的运算。
如图3所示,图3为在一个优选的实施例中基于事件嵌入树及GAT网络的代码克隆检测方法所采用的模型结构和流程示意图,在图3中,将C语言源代码转换为其对应的流程图,并使用一种自定义的IR中间表示文本对该流程图进行描述;通过事件嵌入层(EventEmbeddinhg)对IR中每一个节点的语句进行事件嵌入计算,得到节点向量矩阵(NodeVector Matrix);通过GAT图注意力网络对节点向量矩阵每一节点的事件嵌入向量进行调整融合,使其感知上下文节点的事件嵌入语义,得到节点上下文矩阵(Node ContextVector Matrix);使用卷积层对节点上下文矩阵中每个节点进行卷积计算,从而提取该程序流程图最终的向量表示;使用该向量表示通过分类器(classifier)判断两个代码片段是否为克隆代码对。
在一个实施例中,所述事件嵌入层、所述图注意力网络层和所述卷积网络层的训练过程包括:
根据如下损失函数,训练所述事件嵌入层、所述图注意力网络层和所述卷积网络层:
g(xi)=Conv(GAT(Et(xi)))
Figure GDA0004269932380000081
Loss=max(1-distance(x1,x2′)+distance(x1,x2))
其中,g(xi)为样本的输出,(x1,x2)为正样本,(x1,x2′)为负样本,Et为第二事件嵌入层,GAT为图卷积注意力层,Conv为卷积网络层,distance为计算两个样本相似度的函数,Loss为根据样本计算的损失。在训练过程中使用所有正样本,同时针对每一个正样本对(x1,x2),随机替换其中的x2,从而生成一批同等数量的负样本进行训练。实验结果表明对负样本进行采样训练可以有效提高模型对克隆样本的辨别能力。
传统GRU使用随随时间反向传播算法,因为其重置门,更新门,及隐藏层权重是共享的,而在本申请实施例中的第二事件嵌入层(Event Transformer)中,重置门,更新门权重的反向传播公式与传图GRU网络相同,但第一事件嵌入层(Event Cell),中Wo是第t步嵌入时具体的运算符决定的,因此,在本申请实施例中,定义Wo的反向传播BPTE算法如下:所述第二事件嵌入层的反向传播公式为:
Figure GDA0004269932380000091
其中,Et为第t步时的误差,N为某一运算符出现在嵌入链中的位置,Wo为所述第一事件嵌入层中属于该运算符的参数,Ak为第k个实体的嵌入。
与前述基于事件嵌入树及GAT网络的代码克隆检测方法相对应,本申请实施例还提供一种基于事件嵌入树及GAT网络的代码克隆检测装置,应用于电子设备。
图4为本申请实施例提供的一种基于事件嵌入树及GAT网络的代码克隆检测装置的结构示意图,如图4所示,所述基于事件嵌入树及GAT网络的代码克隆检测装置40包括:
程序流程图转换模块41,用于针对每个代码片段,将该代码片段转换为程序流程图,所述程序流程图为包含控制流和数据流的中间表达形式;
事件嵌入模块42,用于将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,其中,所述节点向量矩阵中的第i行表示所述程序流程图第i个节点的嵌入结果;
图注意力网络层模块43,用于将所述节点向量矩阵输入图注意力网络层,使每个节点向量学习其上下文临近节点的特征,得到节点上下文向量矩阵;
卷积模块44,用于将所述节点上下文向量矩阵输入卷积网络层,对所述节点上下文向量矩阵进行特征提取,得到该代码片段的特征向量;
分类模块45,用于将待检测的一组特征向量输入至分类器中,得到该组特征向量所对应的不同代码片段的克隆检测结果。
在一个示例性的实施例中,所述事件嵌入模块42包括:
第一事件嵌入单元,用于针对该代码片段中的单一事件,将该单一事件输入至第一事件嵌入层,其中,所述第一事件嵌入层的计算公式如下:
Figure GDA0004269932380000101
a=concat(e1,e2,…,ek)
o=Dense(a)
其中,ek为每个所述单一事件的向量表示,a为所有单一事件向量表示的连接,o为所述第一事件嵌入层的输出;Tp1,Tp2为针对指定运算符的两个张量,用于将该运算符对应的两个实体的向量表示映射到多个高维向量空间;Vec函数用于将输入的实体转换为实体的向量表示;Dense函数为全连接层。
在一个示例性的实施例中,所述Vec函数将出现次数最多的k′个实体映射为k′个不同的向量,并将剩余n-k′个实体映射为一个相同的向量;
或者,
所述Vec函数将每个实体转换为其对应的实体类型后,根据所述实体类型将每个实体映射为不同的向量。
在一个示例性的实施例中,所述事件嵌入模块42包括:
第二事件嵌入单元,用于针对该代码片段中的多层嵌套事件,将该多层嵌套输入至第二事件嵌入层,其中,所述第二事件嵌入层的计算公式如下:
rt=σ(Wr·[At-1,Ot])
zt=σ(Wz·[At-1,Ot])
Figure GDA0004269932380000102
Figure GDA0004269932380000103
其中,rt为重置门,zt为更新门,Wr为重置门参数,Wz为更新门参数,At-1为原始事件或中间事件,
Figure GDA0004269932380000104
所述第一事件嵌入层,Ec为第一事件嵌入层参数,At为中间事件嵌入或最终嵌入,Pt为对应的运算符。
在一个示例性的实施例中,所述分类器为余弦相似度分类模型。
在一个示例性的实施例中,所述卷积网络层包括一维卷积层,用于将所述节点上下文向量矩阵压缩为一维向量。
在一个示例性的实施例中,所述基于事件嵌入树及GAT网络的代码克隆检测装置40还包括:
训练模块,用于根据如下损失函数,训练所述事件嵌入层、所述图注意力网络层和所述卷积网络层:
g(xi)=Conv(GAT(Et(xi)))
Figure GDA0004269932380000111
Loss=max(1-distance(x1,x2′)+distance(x1,x2))
其中,g(xi)为样本的输出,(x1,x2)为正样本,(x1,x2′)为负样本,Et为第二事件嵌入层,GAT为图卷积注意力层,Conv为卷积网络层,distance为计算两个样本相似度的函数,Loss为根据样本计算的损失。
在一个示例性的实施例中,所述第二事件嵌入层的反向传播公式为:
Figure GDA0004269932380000112
其中,Et为第t步时的误差,N为某一运算符出现在嵌入链中的位置,Wo为所述第一事件嵌入层中属于该运算符的参数,Ak为第k个实体的嵌入。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
图5为本申请实施例一种电子设备50的结构示意图,该电子设备50包括通过系统总线51连接的处理器52、存储器53(例如为非易失性存储介质)、显示屏54和输入装置55。其中,电子设备50的存储器53存储有操作系统和计算机可读指令。该计算机可读指令可被处理器52执行,以实现本申请实施例中的一种基于事件嵌入树及GAT网络的代码克隆检测方法。该处理器52用于提供计算和控制能力,支撑整个电子设备50的运行。电子设备50的显示屏54可以是液晶显示屏或者电子墨水显示屏等,输入装置55可以是显示屏54上覆盖的触摸层,也可以是电子设备50外壳上设置的按键、轨迹球或触控板,也可以是外接的键盘、触控板或鼠标等。该电子设备50可以是计算机、笔记本电脑、服务器等。本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的示意图,并不构成对本申请方案所应用于其上的电子设备50的限定,具体的电子设备50可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

Claims (8)

1.一种基于事件嵌入树及GAT网络的代码克隆检测方法,其特征在于,包括如下步骤:
针对每个代码片段,将该代码片段转换为程序流程图,所述程序流程图为包含控制流和数据流的中间表达形式;
将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,包括:
针对该代码片段中的单一事件,将该单一事件输入至第一事件嵌入层,其中,所述第一事件嵌入层的计算公式如下:
Figure FDA0004269932370000011
a=concat(e1,e2,…,ek)
o=Dense(a)
其中,ek为每个所述单一事件的向量表示,a为所有单一事件向量表示的连接,o为所述第一事件嵌入层的输出;Tp1,Tp2为针对指定运算符的两个张量,用于将该运算符对应的两个实体的向量表示映射到多个高维向量空间;Vec函数用于将输入的实体转换为实体的向量表示;Dense函数为全连接层;
针对该代码片段中的多层嵌套事件,将该多层嵌套输入至第二事件嵌入层,其中,所述第二事件嵌入层的计算公式如下:
rt=σ(Wr·[At-1,Ot])
zt=σ(Wz·[At-1,Ot])
Figure FDA0004269932370000012
Figure FDA0004269932370000013
其中,rt为重置门,zt为更新门,Wr为重置门参数,Wz为更新门参数,At-1为原始事件或中间事件,
Figure FDA0004269932370000014
为所述第一事件嵌入层,Ec为第一事件嵌入层参数,At为中间事件嵌入或最终嵌入,Pt为对应的运算符;
其中,所述节点向量矩阵中的第i行表示所述程序流程图第i个节点的嵌入结果;
将所述节点向量矩阵输入图注意力网络层,使每个节点向量学习其上下文临近节点的特征,得到节点上下文向量矩阵;
将所述节点上下文向量矩阵输入卷积网络层,对所述节点上下文向量矩阵进行特征提取,得到该代码片段的特征向量;
将待检测的一组特征向量输入至分类器中,得到该组特征向量所对应的不同代码片段的克隆检测结果。
2.根据权利要求1所述的一种基于事件嵌入树及GAT网络的代码克隆检测方法,其特征在于:
所述Vec函数将出现次数最多的k′个实体映射为k′个不同的向量,并将剩余n-k′个实体映射为一个相同的向量,其中,n为代码片段中所包含的实体总数;
或者,
所述Vec函数将每个实体转换为其对应的实体类型后,根据所述实体类型将每个实体映射为不同的向量。
3.根据权利要求1所述的一种基于事件嵌入树及GAT网络的代码克隆检测方法,其特征在于:
所述分类器为余弦相似度分类模型。
4.根据权利要求1所述的一种基于事件嵌入树及GAT网络的代码克隆检测方法,其特征在于:
所述卷积网络层包括一维卷积层,用于将所述节点上下文向量矩阵压缩为一维向量。
5.根据权利要求1所述的一种基于事件嵌入树及GAT网络的代码克隆检测方法,其特征在于,所述事件嵌入层、所述图注意力网络层和所述卷积网络层的训练过程包括:
根据如下损失函数,训练所述事件嵌入层、所述图注意力网络层和所述卷积网络层:
g(xi)=Conv(GAT(Et(xi)))
Figure FDA0004269932370000021
Loss=max(1-distance(x1,x2′)+distance(x1,x2))
其中,g(xi)为样本的输出,(x1,x2)为正样本,(x1,x2′)为负样本,Et为第二事件嵌入层,GAT为图卷积注意力层,Conv为卷积网络层,distance为计算两个样本相似度的函数,Loss为根据样本计算的损失。
6.根据权利要求5所述的一种基于事件嵌入树及GAT网络的代码克隆检测方法,其特征在于:
所述第二事件嵌入层的反向传播公式为:
Figure FDA0004269932370000022
其中,Et为第t步时的误差,N为某一运算符出现在嵌入链中的位置,Wo为所述第一事件嵌入层中属于该运算符的参数,Ak为第k个实体的嵌入。
7.一种基于事件嵌入树及GAT网络的代码克隆检测装置,其特征在于,包括:
程序流程图转换模块,用于针对每个代码片段,将该代码片段转换为程序流程图,所述程序流程图为包含控制流和数据流的中间表达形式;
事件嵌入模块,用于将所述程序流程图输入事件嵌入层,对所述程序流程图中每个节点的语句进行事件嵌入计算,得到节点向量矩阵,包括:
针对该代码片段中的单一事件,将该单一事件输入至第一事件嵌入层,其中,所述第一事件嵌入层的计算公式如下:
Figure FDA0004269932370000031
a=concat(e1,e2,…,ek)
o=Dense(a)
其中,ek为每个所述单一事件的向量表示,a为所有单一事件向量表示的连接,o为所述第一事件嵌入层的输出;Tp1,Tp2为针对指定运算符的两个张量,用于将该运算符对应的两个实体的向量表示映射到多个高维向量空间;Vec函数用于将输入的实体转换为实体的向量表示;Dense函数为全连接层;
针对该代码片段中的多层嵌套事件,将该多层嵌套输入至第二事件嵌入层,其中,所述第二事件嵌入层的计算公式如下:
rt=σ(Wr·[At-1,Ot])
zt=σ(Wz·[At-1,Ot])
Figure FDA0004269932370000032
Figure FDA0004269932370000033
其中,rt为重置门,zt为更新门,Wr为重置门参数,Wz为更新门参数,At-1为原始事件或中间事件,
Figure FDA0004269932370000034
为所述第一事件嵌入层,Ec为第一事件嵌入层参数,At为中间事件嵌入或最终嵌入,Pt为对应的运算符;
其中,所述节点向量矩阵中的第i行表示所述程序流程图第i个节点的嵌入结果;
图注意力网络层模块,用于将所述节点向量矩阵输入图注意力网络层,使每个节点向量学习其上下文临近节点的特征,得到节点上下文向量矩阵;
卷积模块,用于将所述节点上下文向量矩阵输入卷积网络层,对所述节点上下文向量矩阵进行特征提取,得到该代码片段的特征向量;
分类模块,用于将待检测的一组特征向量输入至分类器中,得到该组特征向量所对应的不同代码片段的克隆检测结果。
8.一种电子设备,其特征在于,包括:
存储器以及处理器;
所述存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述处理器执行,使得所述处理器实现如权利要求1-6中任一所述的基于事件嵌入树及GAT网络的代码克隆检测方法。
CN202010357023.3A 2020-04-29 2020-04-29 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 Active CN111562943B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010357023.3A CN111562943B (zh) 2020-04-29 2020-04-29 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010357023.3A CN111562943B (zh) 2020-04-29 2020-04-29 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置

Publications (2)

Publication Number Publication Date
CN111562943A CN111562943A (zh) 2020-08-21
CN111562943B true CN111562943B (zh) 2023-07-11

Family

ID=72073294

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010357023.3A Active CN111562943B (zh) 2020-04-29 2020-04-29 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置

Country Status (1)

Country Link
CN (1) CN111562943B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113656066B (zh) * 2021-08-16 2022-08-05 南京航空航天大学 一种基于特征对齐的克隆代码检测方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110618930A (zh) * 2019-08-12 2019-12-27 上海戎磐网络科技有限公司 全球软件基因数据库系统、软件基因的处理方法及介质
CN110737469A (zh) * 2019-09-29 2020-01-31 南京大学 一种功能粒度上基于语义信息的源代码相似度评估方法
CN110990273A (zh) * 2019-11-29 2020-04-10 中国银行股份有限公司 克隆代码检测方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10514909B2 (en) * 2017-03-29 2019-12-24 Technion Research & Development Foundation Limited Similarity of binaries
CN110598408B (zh) * 2019-08-23 2021-03-26 华中科技大学 一种基于函数层编码的App克隆检测方法及系统
CN110851176B (zh) * 2019-10-22 2023-07-04 天津大学 一种自动构造并利用伪克隆语料的克隆代码检测方法
CN110943981B (zh) * 2019-11-20 2022-04-08 中国人民解放军战略支援部队信息工程大学 基于层次学习的跨架构漏洞挖掘方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110618930A (zh) * 2019-08-12 2019-12-27 上海戎磐网络科技有限公司 全球软件基因数据库系统、软件基因的处理方法及介质
CN110737469A (zh) * 2019-09-29 2020-01-31 南京大学 一种功能粒度上基于语义信息的源代码相似度评估方法
CN110990273A (zh) * 2019-11-29 2020-04-10 中国银行股份有限公司 克隆代码检测方法及装置

Also Published As

Publication number Publication date
CN111562943A (zh) 2020-08-21

Similar Documents

Publication Publication Date Title
CN111428044B (zh) 多模态获取监管识别结果的方法、装置、设备及存储介质
CN107516041B (zh) 基于深度神经网络的WebShell检测方法及其系统
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
Huang et al. JSContana: Malicious JavaScript detection using adaptable context analysis and key feature extraction
JP2005158010A (ja) 分類評価装置・方法及びプログラム
US12032605B2 (en) Searchable data structure for electronic documents
CN108804591A (zh) 一种病历文本的文本分类方法及装置
CN113591093B (zh) 基于自注意力机制的工业软件漏洞检测方法
CN111984792A (zh) 网站分类方法、装置、计算机设备及存储介质
CN115033890A (zh) 一种基于对比学习的源代码漏洞检测方法及系统
CN116149669B (zh) 一种基于二进制文件的软件成分分析方法、装置以及介质
CN111639500A (zh) 语义角色标注方法、装置、计算机设备及存储介质
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
Liu et al. Functions-based CFG embedding for malware homology analysis
CN110866172B (zh) 一种面向区块链系统的数据分析方法
CN115577701A (zh) 针对大数据安全的风险行为识别方法、装置、设备及介质
CN106874203B (zh) 一种基于缺陷报告文本主题分析的缺陷定位方法
CN115098857A (zh) 一种可视化恶意软件的分类方法及装置
CN111562943B (zh) 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置
CN112015890B (zh) 电影剧本摘要的生成方法和装置
Harrington et al. Asknet: Automated semantic knowledge network
Haas Protocol to discover machine-readable entities of the ecosystem management actions taxonomy
CN114911933A (zh) 基于图内图间联合信息传播的假新闻检测方法及系统
Heaps et al. Toward detection of access control models from source code via word embedding
Hrkút et al. Current Trends in the Search for Similarities in Source Codes with an Application in the Field of Plagiarism and Clone Detection

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