CN115904918A - 代码特征提取方法、代码检测方法、模型训练方法和装置 - Google Patents

代码特征提取方法、代码检测方法、模型训练方法和装置 Download PDF

Info

Publication number
CN115904918A
CN115904918A CN202110937144.XA CN202110937144A CN115904918A CN 115904918 A CN115904918 A CN 115904918A CN 202110937144 A CN202110937144 A CN 202110937144A CN 115904918 A CN115904918 A CN 115904918A
Authority
CN
China
Prior art keywords
node
code
neural network
map
graph
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
CN202110937144.XA
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.)
Suzhou Dongchayun Information Technology Co ltd
Original Assignee
Suzhou Dongchayun Information Technology Co ltd
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 Suzhou Dongchayun Information Technology Co ltd filed Critical Suzhou Dongchayun Information Technology Co ltd
Priority to CN202110937144.XA priority Critical patent/CN115904918A/zh
Publication of CN115904918A publication Critical patent/CN115904918A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Image Analysis (AREA)

Abstract

本申请公开一种代码特征提取方法、代码检测方法、模型训练方法和装置,代码特征提取方法包括:获取代码的节点图,节点图为代码的AST或者转换AST得到的图;获取节点图的各个节点的位置信息;针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果;基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,特征信息能够用于基于代码是否存在缺陷进行分类。本申请使用深度神经网络模型能够通过对节点的嵌入编码结合节点的位置编码捕捉到节点的上下文信息,使得提取到的代码特征更为丰富,有利于提升代码检测结果的准确性。

Description

代码特征提取方法、代码检测方法、模型训练方法和装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码特征提取方法、代码检测方法、模型训练方法和装置。
背景技术
代码静态检测是一种重要的软件质量保证方法,通过代码静态检测能够尽早发现软件的潜在漏洞。
相关技术中,静态检测方法多是采用静态检测工具,通过固定规则分析在非编译运行下,对输入代码进行缺陷或风险上的分析,但是当在业务上存在缺陷,或在某些变量和字符串中出现逻辑上的缺陷,即存在上下文联系时,静态检测工具就难以提取出上下文信息,进而导致难以得到正确的检测结果。
发明内容
本申请实施例提供一种代码特征提取方法、代码检测方法、模型训练方法和装置。
本申请实施例的技术方案是这样实现的:
第一方面,提供了一种代码特征提取方法,所述方法包括:
获取代码的节点图,其中,所述节点图为所述代码的抽象语法树AST或者转换所述AST得到的图;
获取所述节点图的各个节点的位置信息;
针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,得到所述代码的特征信息,其中,所述特征信息,能够用于基于代码是否存在缺陷进行分类。
第二方面,提供了一种代码检测方法,所述方法包括:
基于第一方面任一所述的代码特征提取方法对被测代码进行特征提取,得到所述被测代码的特征信息,其中,所述深度神经网络模型为预先训练的用于提取代码特征信息的模型;
基于所述被测代码的特征信息,使用分类器进行所述被测代码是否存在缺陷的分类,得到所述被测代码的分类结果。
第三方面,提供了一种深度神经网络模型训练方法,所述方法包括:
获取训练样本集,其中,所述训练样本集中的每一样本均包括样本代码的节点图以及所述样本代码的分类标签,所述分类标签用于指示所述样本代码是否存在缺陷,所述节点图为所述样本代码的抽象语法树AST或者转换所述AST得到的图;
获取所述节点图的各个节点的位置信息;
针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,获得所述样本代码的特征信息;
基于所述样本代码的特征信息,使用分类器进行分类得到所述样本代码的分类结果;
基于所述样本代码的分类结果以及所述样本代码的分类标签,对所述深度神经网络模型进行参数优化。
第四方面,提供了一种代码特征提取装置,所述装置包括:
第一获取模块,用于获取被测代码的节点图,所述节点图为所述代码的抽象语法树AST或者转换所述AST得到的图;
第二获取模块,用于获取所述节点图的各个节点的位置信息;
编码模块,用于针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
提取模块,用于基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,得到所述代码的特征信息,其中,所述特征信息,能够用于基于代码是否存在缺陷进行分类。
第五方面,提供了一种代码检测装置,所述装置包括:
特征提取模块,用于基于第一方面任一所述的代码特征提取方法对被测代码进行特征提取,得到所述被测代码的特征信息,其中,所述深度神经网络模型为预先训练的用于提取代码特征信息的模型;
代码分类模块,用于基于所述被测代码的特征信息,使用分类器进行所述被测代码是否存在缺陷的分类,得到所述被测代码的分类结果。
第六方面,提供了一种深度神经网络模型训练装置,所述装置包括:
第一获取模块,用于获取训练样本集,其中,所述训练样本集中的每一样本均包括样本代码的节点图以及所述样本代码的分类标签,所述分类标签用于指示所述样本代码是否存在缺陷,所述节点图为所述样本代码的抽象语法树AST或者转换所述AST得到的图;
第二获取模块,用于获取所述节点图的各个节点的位置信息;
编码模块,用于针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
提取模块,用于基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,获得所述样本代码的特征信息;
生成模块,用于基于所述样本代码的特征信息,使用分类器进行分类得到所述样本代码的分类结果;
训练模块,用于基于所述样本代码的分类结果以及所述样本代码的分类标签,对所述深度神经网络模型进行参数优化。
第七方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第一方面任一所述代码特征提取方法的步骤;或者,所述处理器执行所述程序时实现上述第二方面任一所述代码检测方法的步骤;或者,所述处理器执行所述程序时实现上述第三方面任一所述神经网络模型训练方法的步骤。
第八方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一所述代码特征提取方法的步骤;或者,所述计算机程序被处理器执行时实现上述第二方面任一所述代码检测方法的步骤;或者,所述计算机程序被处理器执行时实现上述第三方面任一所述神经网络模型训练方法的步骤。
本申请实施例所提供的代码特征提取方法、代码检测方法、模型训练方法和装置,代码特征提取方法包括:获取代码的节点图,节点图为代码的抽象语法树AST或者转换AST得到的图;获取节点图的各个节点的位置信息;针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果;基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,其中,特征信息,能够用于基于代码是否存在缺陷进行分类。由于对代码的节点图的节点进行编码时,不仅对节点进行嵌入编码,而且还对节点进行位置信息的位置编码,这样通过基于对节点的嵌入编码结果和位置编码结果进行融合得到的节点编码结果,使用深度神经网络模型进行特征提取,能够通过对节点的嵌入编码结合节点的位置编码捕捉到节点的上下文信息,使得提取到的代码特征更为丰富,从而能够解决由于静态检测工具难以提取代码中的上下文信息而导致难以得到正确的检测结果的问题,进而有利于提升代码检测结果的准确性。
附图说明
图1为本申请实施例提供的代码特征提取方法的流程示意图;
图2为本申请实施例提供的节点位置编码的流程示意图;
图3为本申请实施例提供的使用深度神经网络模型进行特征提取的流程示意图;
图4为本申请实施例提供的代码检测方法的一个流程示意图;
图5为本申请实施例提供的代码检测方法的另一个流程示意图;
图6a为本申请实施例提供的代码检测方法的又一个流程示意图;
图6b为本申请实施例提供的布局到二维欧式空间后的AST的局部示意图;
图6c为本申请实施例提供的基于图的位置编码层的流程示意图;
图6d为本申请实施例提供的GAGCN的节点信息传递机制的示意图;
图7为本申请实施例提供的深度神经网络模型训练方法的流程示意图;
图8为本申请实施例提供的均衡采样和动态批处理的流程示意图;
图9a为本申请实施例提供的训练样本的P-R曲线;
图9b为本申请实施例提供的训练样本的ROC曲线;
图10为本申请实施例提供的代码特征提取装置的结构示意图;
图11为本申请实施例通过的代码检测装置的结构示意图;
图12为本申请实施例提供的深度神经网络模型训练装置的结构示意图;
图13为本申请实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
可以理解的是,本申请对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
相关技术中,静态检测方法多是采用静态检测工具,通过固定规则分析在非编译运行下,对输入代码进行缺陷或风险上的分析,但是当在业务上存在缺陷,或在某些变量和字符串中出现逻辑上的缺陷,即存在上下文联系时,静态检测工具就难以提取出上下文信息,进而导致难以得到正确的检测结果。
基于此,本申请实施例提供一种代码特征提取方法,通过获取代码的节点图,节点图为代码的抽象语法树AST或者转换AST得到的图,并获取节点图的各个节点的位置信息,在对每个节点进行编码时,不仅对节点进行嵌入编码,而且还对节点进行位置信息的位置编码,这样通过基于对节点的嵌入编码结果和位置编码结果进行融合得到的节点编码结果,使用深度神经网络模型进行特征提取,能够通过对节点的嵌入编码结合节点的位置编码捕捉到节点的上下文信息,使得提取到的代码特征更为丰富,从而能够解决由于静态检测工具难以提取代码中的上下文信息而导致难以得到正确的检测结果的问题,进而有利于提升代码检测结果的准确性。
其中,本申请实施例提供的代码特征提取方法可以应用于代码缺陷检测的场景中,除此之外,还可以应用于其他需要提取代码特征的场景中,例如恶意代码检测、代码克隆检测,等等,本申请实施例对具体的应用场景不作限定。
图1为本申请实施例提供的代码特征提取方法的流程示意图,参见图1,本申请实施例的代码特征提取方法包括以下步骤:
S11,获取代码的节点图,其中,节点图为代码的抽象语法树AST或者转换AST得到的图。
其中,代码可以是任意类型的语言规则所写出的程序代码,代码的语言包括但不限于编程语言和脚本语言。
在一个示例中,节点图为代码的抽象语法树AST。代码的抽象语法树AST指的是代码语法对应的树状结构。对于一种具体编程语言下的代码,通过构建语法树的形式将代码中的语句映射到树中的每一个节点上。也就是说,代码的AST是代码的抽象语法结构的树状表示,树上的每个节点都表示代码中的一种结构,节点可以通过ID值进行唯一标识。
具体地,代码的抽象语法树AST可以通过如下方式获得,包括:
对代码进行解析,获取代码的函数级数据对应的AST。这里,函数级数据是指将代码以一个函数的声明定义作为基本单元进行提取的数据。
其中,对代码进行解析,获取代码的函数级数据对应的AST,可以包括:
如果解析的代码为编程语言,则先获取代码的整体AST,然后将函数级数据对应的子树抽取作为基本数据单元;如果解析的代码为脚本语言,则将脚本语言包含的函数直接转换为对应的AST。
另外,当代码的语言是C/C++、Java、PHP时,可以借助包括Clang Lib的工具实现AST的转换。
可以理解的是,除上述方式实现获取代码的抽象语法树AST之外,还可以采用其他方式实现,例如,对代码进行语句级别的数据提取,并获取语句级别的数据对应的AST,但本申请实施例不限于此。
在另一个示例中,节点图为对代码的AST转换得到的图,其中,图的邻接矩阵用于表征AST的节点之间的连接关系。
具体地,转换AST得到图,该过程可以包括:
对代码的AST转换为节点序列,将AST通过节点序列和邻接矩阵共同表示图数据(graph data)。
此外,在实际应用中,为了节省存储空间,可以对AST的节点之间的连接关系生成对应的边索引(edge index),使用边索引代替图的邻接矩阵进行计算。
S12,获取节点图的各个节点的位置信息。
其中,节点的位置信息可以是如下信息之一:
节点在AST的节点序列中的位置序号;
通过对AST的节点采用双向的遍历方式确定出的节点的隐含的位置信息,其中,双向的遍历方式可以是先进行先序遍历,再进行中序遍历,这里,当使用遍历方式时,位置信息是隐含的,也就是不会有一个实际的张量来表示位置信息,而是体现在时序运算过程中;
节点在AST树结构中的空间位置信息,其中,该空间位置信息可以是节点在布局到二维欧式空间后的AST中的位置信息。位置信息可以包括该节点映射到二维欧式空间后相对于根节点的欧式距离以及该节点相对于垂直方向的偏转角。
可以理解的是,本实施例对节点的位置信息的获取过程不作具体限定。
S13,针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果。
具体地,针对每一个节点,对该节点采用并行方式进行嵌入编码(EmbeddingEncoding)和位置信息的位置编码(Positional Encoding),得到该节点的嵌入编码结果和位置编码结果,然后对该节点的嵌入编码结果和位置编码结果进行融合,生成节点的节点编码结果。其中,融合过程可以是对同一节点的嵌入编码结果和位置编码结果直接求和,即对同一节点的嵌入编码结果和位置编码结果通过直接求和的方式叠加在一起。
通常情况下,无论节点图是AST还是转换AST得到的图,节点图都需要转换为数量化的向量才能用于神经网络模型分析处理,于本实施例中,采用嵌入编码的方式对节点的内容进行向量化,并采用位置编码的方式对节点的位置信息进行向量化,对两种向量化结果进行融合,生成节点的节点编码结果,使得代码的空间结构信息和语法信息转换为向量表示进行后续计算,这样能够有利于深度神经网络模型捕获到更丰富的代码信息。
S14,基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,其中,特征信息能够用于基于代码是否存在缺陷进行分类。
在一个示例中,节点图为代码的AST时,深度神经网络模型可以是基于树结构的处理时序型输入的神经网络模型,基于树结构的处理时序型输入的神经网络模型是以具有各个节点的节点编码结果的AST作为输入,对该输入的AST自底向上进行叶子节点到根节点的信息传递,最终汇集到整棵树的根节点(Root Node),以获得代码的特征表示。基于树结构的神经网络模型可以是基于树形结构的处理时序型输入的神经网络,其中,神经网络包括但不限于:循环神经网络(Recurrent Neural Network,RNN)、长短期记忆神经网络(LongShort-Term Memory,LSTM),等等。
在另一个示例中,为了提高计算效率,节点图可以是对代码的AST转换得到的图,深度神经网络模型可以是图神经网络模型,图神经网络模型是以图(Graph)作为输入,在同一时刻对输入的图的所有节点进行一次状态更新,以获得代码的特征表示。图神经网络模型包括但不限于:图卷积神经网络(Graph Convolution Networks,GCN)、门控图神经网络(Gated Graph Neural Network,GGNN)、注意力图神经网(Graph Attention Networks,GAT),等等。
本申请实施例提供的代码特征提取方法,通过获取代码的节点图,其中,节点图为代码的抽象语法树AST或者转换AST得到的图,并获取节点图的各个节点的位置信息,在对节点图的每个节点进行编码时,不仅对节点进行嵌入编码,而且还对节点进行位置信息的位置编码,这样通过基于对节点的嵌入编码结果和位置编码结果进行融合得到的节点编码结果,使用深度神经网络模型进行特征提取,能够通过对节点的嵌入编码结合节点的位置编码捕捉到节点的上下文信息,使得提取到的代码特征更为丰富,从而能够解决由于静态检测工具难以提取代码中的上下文信息而导致难以得到正确的检测结果的问题,进而有利于提升代码检测结果的准确性。
在一个实施例中,上述步骤S12中,获取节点图的各个节点的位置信息,该过程可以包括:
确定各个节点映射到欧式空间后相对于参考点的距离以及相对于参考方向的偏转角。
具体地,将代码的AST布局到二维欧式空间上,确定被布局到二维欧式空间上的AST的节点相对于参考点的距离以及相对于参考方向的偏转角。
在一个示例中,被布局到二维欧式空间上的AST中,每相邻两个层次的节点之间具有相同的垂直间距,每一层次上的每一个节点与该节点从左至右的第一个子节点位于同一列上,且该节点位于该层次的从左至右的第h个位置上,h的值为AST的根节点在该节点左侧的所有叶子节点的总数加一。这里,层次可以理解为AST的“行”,同一层次的节点可以理解为位于AST的同一个行上的节点,也就是说,对于AST中的任意一个节点,可以根据该节点在AST中的所在行以及属于该行上的第几个位置上的节点,确定该节点的空间位置。
这里,节点所在的层次可以根据从AST的根节点到该节点所经路径上的分支数来确定,AST只有一个根节点,根节点的层次记为1,任意一个节点的子节点的层次等于该节点的层次加1,如果一个节点下不再有子节点,则该节点为叶子节点。
其中,上述的参考点可以是AST在二维欧式空间上的根节点,也可以是AST的其他节点,例如,以AST的最后一个层次上的第一个节点作为参考点,但本申请实施例不限于此。
其中,上述的参考点可以是在二维欧式空间上的垂直方向,也可以是其他方向,例如,以在二维欧式空间上的水平方向作为参考方向,但本申请实施例不限于此。
在一个示例中,获取AST的各个节点在二维欧式空间上的位置信息,可以按照如下的位置计算公式计算得到:
Figure BDA0003213664200000101
其中,pos表示AST的某个节点在二维欧式空间上的位置,该公式在二维空间的计算分为两个部分:第一部分是
Figure BDA0003213664200000102
用来计算二维欧式空间中相对于原点(即参考点,例如以AST的根节点作为参考点)的直线距离,即欧氏距离;第二部分是
Figure BDA0003213664200000103
用来计算二维欧式空间中参考方向(例如以垂直方向作为参考方向)的偏转角。posw和posh分别表示该节点在位置距离中的行和列,即表示该节点是位于AST中的第w行上的第h个位置上的节点。o表示无穷小,用来防止分母为0。α是一个预设的权值系数,用来控制偏转信息的比例,该系数可以是超参数,可以根据实际需要进行设定,例如设定为:α=0.1,此外,该系数也可以是可训练参数。
需要说明的是,转换AST得到的图的节点在图中的位置信息与该节点在AST中的位置信息相等价,也就是说,当节点图为转换AST得到的图的节点时,可以根据AST中的各个节点的位置信息确定转换AST得到的图的各个节点的位置信息。
本实施例中,通过获取节点图的各个节点在二维欧式空间上的位置信息,通过节点的位置信息能够反映原树形结构的结构信息;另外,能够在尽可能减少失真的情况下确保节点的位置唯一性,从而有利于提高代码特征提取的准确性。
在一个实施例中,上述步骤S13中,针对节点图的每一个节点,对节点进行嵌入编码,可以包括:
当节点的节点名称不是词典溢出词OOV时,基于词典获取节点的词语级嵌入编码;
当节点的节点名称是词典溢出词时,以未知标记作为节点的词语级嵌入编码,并基于词典获取节点的字符级嵌入编码,将节点的词语级嵌入编码与字符级嵌入编码进行融合。
考虑到程序代码中存在词典溢出词汇(Out Of Vocabulary,OOV),即存在大量的用户自定义词汇,例如,在程序代码中定义的各种变量名称和函数名称等。对于词典溢出词汇,由于静态检测任务本身是模式识别任务,因此无法使用类似谷歌联合斯坦福提出的指针网络(Pointer Network)对OOV进行复制的方式去处理,但又无法忽视OOV在节点中频繁出现的事实。若直接将OOV转换为未知标记(Unknown Token,简称UNK)进行嵌入编码,则无法对不同的OOV做出区分而影响到代码特征提取的准确性。
在本实施例中,对于非OOV,直接进行词语级(Word level)的嵌入编码,而对OOV加入字符级(Character level)的嵌入编码,这样会使得OOV的嵌入编码结果唯一,且同时具有可区分性,尤其适用于OOV的数据量较多的情形,从而有利于提高代码特征提取的准确性。
可以理解的是,除上述方式实现对节点进行嵌入编码之外,还可以采用其他方式实现,例如:在OOV的数据量较少的情形下,当节点的节点名称不是词典溢出词OOV时,根据节点的ID值进行独热编码,并将独热编码与嵌入层的权重矩阵相乘后产生的向量作为该节点的嵌入编码。当节点的节点名称是词典溢出词OOV时,使用与嵌入层的权重矩阵相同均值方差的正态分布进行采样产生一个向量作为该节点的嵌入编码,但本申请实施例不限于此。
在一个实施例中,参见图2,上述步骤S13中,针对节点图的每一个节点,对节点进行位置信息的位置编码,可以包括:
S131,针对每一节点,使用位置编码公式对节点的位置信息以及节点的向量维度中的偶数维度进行位置编码;
S132,使用位置编码公式对节点的位置信息以及节点的向量维度中的奇数维度进行位置编码。
具体地,可以按照如下位置编码公式进行位置编码的计算:
Figure BDA0003213664200000121
Figure BDA0003213664200000122
其中,PE(pos,2i)表示节点在偶数维度上的位置编码结果,PE(pos,2i+1)表示该节点在奇数维度上的位置编码结果,d表示该节点输入到编码层时的向量维度,2i表示偶数维度,2i+1则表示奇数维度,pos代表该节点的位置信息,该节点的位置信息可以为二维欧式空间上的位置信息。
可以理解的是,除上述方式实现对节点进行位置编码之外,还可以采用其他方式实现,本实施例对此不作具体限定。
在一个实施例中,节点图为代码的AST时,深度神经网络模型是根据基于树结构的神经网络而构建的,神经网络为循环神经网络、长短期记忆神经网络、或者卷积神经网络。
上述步骤S13中,针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,可以包括:
对AST的各个节点进行嵌入编码和位置信息的位置编码,得到AST的各个节点的嵌入编码结果及位置编码结果。
具体地,将AST输入至基于树结构的嵌入层(Tree Embedding Layer)进行遍历,得到嵌入编码后的AST;将AST输入至基于树结构的位置编码层(Tree Positional EncodingLayer)中,对AST的各个节点的位置信息进行位置编码,得到位置编码后的AST;对嵌入编码后的AST与位置编码后的AST进行融合,得到编码处理后的AST。对于编码处理后的AST中的每一个节点而言,该节点的节点编码结果是对该节点的嵌入编码结果与该节点的位置编码结果进行融合得到的向量。
上述步骤S14中,基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,可以包括:
以编码处理后的AST作为基于树结构的神经网络的输入,对该融合后的AST自底向上进行叶子节点到根节点的信息传递,最终汇集到AST的根节点,得到代码的特征信息。
具体地,深度神经网络模型对输入的AST的每个节点进行遍历,将当前遍历到的节点作为当前根节点;根据当前根节点的左子节点和右子节点各自的隐藏状态以及当前根节点的节点编码结果,更新当前根节点的隐藏状态,直至将AST的特征信息汇集到整棵树的根节点时,结束遍历,即得到代码的最终特征表示。
其中,上述遍历的方式可以采用前序遍历的方式,即:每次进入一个节点时,先遍历当前节点的左子节点和右子节点,然后计算当前节点的隐藏状态。由于先遍历了当前节点的子节点,因此会先更新当前节点的子节点的隐藏状态,再更新当前节点的隐藏状态,直至得到汇集了AST的特征信息的根节点,遍历结束,即完成了自底向上的信息传递。
可以理解的是,除了前序遍历之外,还可以使用其他的遍历方式,只要满足自底向上的节点更新规则即可,本申请实施例对此不作限定。
本实施例中,采用基于树结构的长短期记忆神经网络构建的深度神经网络模型,相较于其它神经网络结构而言,在代码特征提取的过程中能够更好地捕获代码特征信息。
在一个实施例中,节点图为对代码的AST转换得到的图时,深度神经网络模型是根据图卷积神经网络而构建的。上述步骤S13中,针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,可以包括:
对图的各个节点进行嵌入编码和位置信息的位置编码,得到图的各个节点的嵌入编码结果以及位置编码结果。
具体地,使用基于图的嵌入层(Graph-Embedding Layer)对图的各个节点进行嵌入编码,得到嵌入编码后的图;使用基于图的位置编码层(Graph Positional EncodingLayer)对图的各个节点的位置信息进行位置编码,得到位置编码后的图。其中,节点在图中的位置信息与该节点在AST中的位置信息相等价。对嵌入编码后的图与位置编码后的图进行融合,得到编码处理后的图。对于编码处理后的图中的每一个节点而言,该节点的节点编码结果是对该节点的嵌入编码结果与该节点的位置编码结果进行融合得到的向量。
上述步骤S14中,基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,可以包括:
将具有各个节点的节点编码结果的图输入到根据图神经网络而构建的深度神经网络模型进行图的节点的状态更新,通过卷积运算直至所有节点的隐藏状态得到更新,更新得到的最终状态即为图的节点的最终特征。
本实施例中,采用根据图神经网络而构建的深度神经网络模型可以在同一时刻对图的所有节点进行一次状态更新,由于不存在节点之间的时序依赖,即不存在节点计算的先后顺序,因此整个计算是并行发生的,这将极大地减少网络的计算时间。另外,由于加入了节点的位置编码后,即使是并行运算,也可以保证不丢失节点在原树形结构存在的执行顺序的先后关系。
在一个实施例中,图卷积神经网络为带有门控机制和/或注意力机制的深度图卷积神经网络;如图3所示,上述步骤S14中,基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,可以包括:
S141,基于图的各个节点的节点编码结果以及图的邻接矩阵,利用深度图卷积神经网络通过卷积运算对图的节点进行隐藏状态的更新。
S142,在隐藏状态的更新过程中,利用门控机制和/或注意力机制计算图的节点之间的信息传递权重,以控制节点对指向节点的信息传递。
S143,当图的所有节点的隐藏状态得到更新后,基于更新得到的最终隐藏状态,获取代码的特征信息。
在一个示例中,图神经网络为带有门控机制及注意力机制的深度图卷积神经网络(Gated Attentional Deep Graph Convolution Neural Networks,GAGCN)。
其中,深度图卷积神经网络采用基于空间的图卷积(Spatial GraphConvolution)对输入的图进行卷积运算直至所有节点的隐藏状态得到更新,在图的级别上将所有节点的信息汇集。门控机制可以采用带有门控结构的循环神经网络来实现。注意力机制可以采用自注意力算法(Self-Attention)来实现。自注意力算法将输入数据通过矩阵变换得到查询向量q(vector query)、键值向量k(vector key)和数值向量v(vectorvalue)等三个向量,并且通过如下公式计算注意力权重α,最后输出结果向量out。
Figure BDA0003213664200000151
Figure BDA0003213664200000152
out=α·v;
其中,d是输入向量x的长度,这里作为一个缩放系数存在。w为参数矩阵,对应q、k、v,这里简写为增广矩阵的形式。
本实施例中,由于图的节点的节点编码结果既包含节点嵌入编码,又包含了节点位置编码,因此通过图卷积计算后,能够使用迭代计算学习到图的节点和边之间的联系,并利用门控机制和/或注意力机制计算图的节点之间的信息传递权重,对节点对指向节点的信息传递进行控制,实现了降低模型过拟合的同时,能够高效地对代码中的上下文信息进行提取。
接下来,在上述实施例提供的代码特征提取方法的基础上,对本申请实施例提供的代码检测方法进行说明。
图4为本申请实施例提供的代码检测方法的一个流程示意图,参见图4,本申请实施例的代码检测方法可以包括以下步骤:
S21,获取被测代码的节点图,其中,节点图为被测代码的抽象语法树AST或者转换AST得到的图。
S22,获取节点图的各个节点的位置信息。
S23,针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果。
S24,基于节点图的各个节点的节点编码结果,使用预先训练的深度神经网络模型进行特征提取,得到被测代码的特征信息。
S25,基于被测代码的特征信息,使用分类器进行被测代码是否存在缺陷的分类,得到被测代码的分类结果。
具体地,将被测代码的特征信息输入到多层感知器进行处理,并通过函数进行二分类,得到被测代码是否存在缺陷的分类结果。
本实施例中,基于上述代码特征提取方法能够捕捉到代码中的上下文信息,使得提取到的代码特征更为丰富,从而进行代码缺陷检测时,能够提升代码缺陷检测结果的准确性。
接下来,以根据Tree-LSTM构建的深度神经网络模型进行代码特征提取为例,对本申请实施例提供的代码检测方法进行进一步说明。
图5为本申请实施例提供的代码检测方法的流程示意图,如图5所示,该方法可以包括以下步骤:
S31、对被测源码进行函数级的数据提取。
其中,函数级的数据提取,是指将被测源码以一个函数的声明定义作为最低级别或基本单元进行提取。
S32、获取函数级数据对应的AST。
如果解析的代码为编程语言,则先获取整体的AST,然后将函数声明定义的子树抽取作为基本数据单元;
如果解析的代码为脚本语言,则将脚本语言包含的函数直接转换为对应的AST。
S33、对AST的各个节点分别进行嵌入编码和位置编码,并分别对各个节点的嵌入编码结果和位置编码结果进行累加,得到编码处理后的AST。
其中,可以使用基于树结构的嵌入层(Tree-Embedding Layer)对AST的节点进行嵌入编码。对于非OOV,直接进行词语级的嵌入编码;对于OOV,先将OOV标记为未知<UNK>,得到<UNK>对应的词语级嵌入编码,然后对OOV进行字符级的嵌入编码,并将两种编码结果融合在一起。
在对AST的节点进行位置编码之前,先获取AST的各个节点在树结构的空间位置信息。具体来说,可以将AST布局在二维欧式空间上,基于各个节点在二维欧式空间中相对于AST的根节点的距离以及在二维欧式空间中相对于垂直方向的偏转角,确定各个节点在二维欧式空间上的位置信息。
可以使用基于树结构的位置编码层(Tree-Positional Encoding Layer)对AST的各个节点进行位置编码。这里,基于树结构的位置编码层,是指在对AST的节点在树结构中的空间位置进行位置编码。
S34、将经编码处理的AST输入到根据基于树的长短期记忆网络而构建的深度神经网络模型中进行特征提取。
S35、将经过深度神经网络模型处理后的AST输入到多层感知器进行处理,并通过函数进行二分类,输出分类结果。
接下来,结合图6a至图6d,以根据GAGCN构建的深度神经网络模型进行代码特征提取为例,进一步对本申请实施例的代码检测方法进行说明。
图6a中用长短不一的直线表示源码。节点为圆形的二维树结构表示AST。节点为圆形的三维树结构表示AST转换的graph。节点为灰色圆柱体的三维树结构表示经过嵌入编码的graph。节点为填充线条的圆柱体的三维树结构表示经过位置编码的graph。节点为填充线条的灰色圆柱体的三维树结构表示编码信息累加的graph。Graph-Embbeding Layer表示基于图的嵌入层。Graph Positional Embbeding Layer表示基于图的位置编码层。“GAGCN+数字”表示带有门控和注意力机制的深度图卷积神经网络的一层。数字从1到N,中间用省略号来表示,表示有N个层,N为正整数值。
如图6a所示,代码检测方法可以包括:对源码进行函数级的数据提取并转换为AST。输入AST通过节点序列和邻接矩阵共同表示为图结构,将AST转换为graph。输入graph到基于图的嵌入层,对graph的节点序列进行嵌入编码。输入graph到基于图的位置编码层,对节点所在图结构的空间位置进行位置编码。两种编码结果通过直接求和的方式叠加在一起。将经编码处理的graph通过嵌入层输出,并输入到GAGCN进行graph节点的状态更新。通过卷积运算直至所有节点的隐藏状态得到更新,更新的最终状态即为graph节点的最终特征。通过加权求和消去节点数量所在维度,然后输入到多层感知器,将特征数合并为一维,其中,可以设置所有的权重均为节点数的倒数,即直接采用求均值的方式消去节点数量的维度。最后通过sigmoid分类器进行二分类,得到标量scalar表示分类结果,这是一个介于0~1的数字,通过阈值划分,解释为0或1两种类别。其中,阈值可以根据时间需要设定,此处不作限定。类别0表示代码不存在缺陷,类别1表示代码存在缺陷。
图6b示出了布局到二维欧式空间后的AST的局部示意图;其中,位于第1行的节点R为AST的根节点,位于第2行的节点1和节点2分别为节点R的第一个子节点和第二个子节点,节点3和节点6均位于第3行,节点3和节点6分别为节点1的第一个子节点和第二个子节点,节点4和节点5分别为节点3的第一个子节点和第二个子节点,节点7和节点8分别为节点6的第一个子节点和第二个子节点。例如计算节点6的位置信息,节点6是第3行的第3个位置上的节点,假设以根节点R为参考点,以垂直方向为参考方向,按照上述实施例中的位置计算公式
Figure BDA0003213664200000191
可以计算得到节点6的位置信息,这里posw和posh分别为3和3。以此类推,计算出布局到二维欧式空间后的AST的各个节点的位置信息,并形成节点位置矩阵pos matrix,该节点位置矩阵等价于转换AST得到的图的节点位置矩阵。
图6c中节点为圆形的三维树结构表示graph G。成串的圆形表示为G的节点序列sn。pos matrix表示G对应的AST在转换为graph前计算获得的位置矩阵。PositionalEncoding是对于序列的位置编码算法。填充线条的灰色圆柱体表示经过位置编码的G的节点序列s′n
如图6c所示,输入G,将其转换为节点序列sn。sn主要是为了并行运算,而不是时序运算。由于G对应的AST是一种有向图,因此G中的节点位置信息应与对应的AST的节点位置信息等价。将G对应的AST在转换为graph前计算获得的位置矩阵pos matrix,与G的节点序列sn一起输入到Positional Encoding中进行位置编码,得到经过位置编码的G的节点序列s′n。其中,AST的节点位置信息可以采用上述实施例中的位置计算公式计算得到,位置编码可以采用上述实施例中的位置编码公式进行编码。
图6d为本申请实施例的GAGCN的节点信息传递机制(Message Parsing)示意图。图6d中节点为填充线条的圆柱体的三维树结构表示经过嵌入编码和位置编码后编码信息累加的graph G。从上至下排列的填充线条的圆柱体表示G的传递序列sg。圆柱体表示sg中的一个指向节点。正方体表示e矩阵。正方形表示矩阵。节点为灰色圆柱体的三维树结构表示经过信息传递后的graph G0。节点为圆柱体的三维树结构表示状态更新后的graph G'。
其中,masked fill(掩模填充)是掩码操作,采用value(值)填充tensor(张量)中的mask(掩模)中值为1位置相对的元素。mask的形状必须与要填充的tensor形状一致。
Softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。
根据信息传递机制(Message Parsing)的基本框架,GAGCN的整个信息传递过程包含Message(传递)、Aggregate(聚合)、Update(更新)三个步骤。
如图6d所示,在Message过程,G根据邻接矩阵得到一个传递序列sg。sg包含了所有的指向节点(向其他节点传递信息的节点)。如果一个指向节点同时指向多个节点,则它会在传递序列中重复出现多次。sg通过wk、wq、wv三个权值矩阵分别计算得到键值向量gk、查询向量gq和数值向量gv
在Aggregate过程,gq和gk的转置会进行矩阵乘法(matrix product),得到e矩阵。e矩阵的每个元素代表节点两两之间的关联。e矩阵与邻接矩阵adj通过masked fill掩码操作,以及Softmax计算,去除部分不存在的节点关联(某两个节点之间没有通过边进行连接),得到矩阵wg。wg表示G的节点之间的信息传递权重。gv通过和wg进行选择性的哈达玛积(点乘),得到的是经过信息传递后的G0
在Update过程,将节点原本的信息与得到信息传递后节点的信息结合,最终完成整个信息传递过程。G的所有节点状态得到更新,得到graph G'。
接下来,对本申请实施例提供的深度神经网络模型训练方法进行说明。
图7为本申请实施例提供的深度神经网络模型训练方法的流程示意图,参见图7,本申请实施例的神经网络模型训练方法包括以下步骤:
S41,获取训练样本集,其中,训练样本集中的每一样本均包括样本代码的节点图以及样本代码的分类标签,分类标签用于指示样本代码是否存在缺陷,节点图为样本代码的抽象语法树AST或者转换AST得到的图。
其中,训练样本集是指已知缺陷分布的源码程序的数据集,即训练样本集包含正样本代码和负样本代码,正样本代码存在缺陷,负样本代码不存在缺陷,例如,负样本代码标记为1,正样本代码标记为0,但本申请实施例不限于此。
在一个示例中,节点图为样本代码的抽象语法树AST。
具体地,样本代码的抽象语法树AST可以通过如下方式获得,包括:
对训练样本集中的每一样本代码进行解析,获取每一样本代码的函数级数据对应的AST。这里,函数级数据是指将样本代码以一个函数的声明定义作为基本单元进行提取的数据。
如果解析的代码为编程语言,则先获取整体的AST,然后将函数声明定义的子树抽取作为基本数据单元;如果解析的代码为脚本语言,则将脚本语言包含的函数直接转换为对应的AST。
在另一个示例中,节点图为对样本代码的AST转换得到的图,其中,图的邻接矩阵用于表征AST的节点之间的连接关系。
具体地,转换AST得到图,该过程可以包括:
对样本代码的AST转换为节点序列,将AST通过节点序列和邻接矩阵共同表示图数据(graph data)。此外,在实际应用中,为了节省存储空间,可以对AST的节点之间的连接关系生成对应的边索引(edge index),使用边索引代替图的邻接矩阵进行计算。S42,获取节点图的各个节点的位置信息。
其中,节点的位置信息可以是如下信息之一:
节点在AST的节点序列中的位置序号;
通过对AST的节点采用双向的遍历方式确定出的节点的隐含的位置信息,其中,双向的遍历方式可以是先进行先序遍历,再进行中序遍历,这里,当使用遍历方式时,位置信息是隐含的,也就是不会有一个实际的张量来表示位置信息,而是体现在时序运算过程中;
节点在AST树结构中的空间位置信息,其中,该空间位置信息可以是节点在被布局到二维欧式空间上的AST中的位置信息。
可以理解的是,本实施例对节点的位置信息的获取过程不作具体限定。
S43,针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果。
具体地,步骤S43的实现过程可以参照上述实施例中的步骤S13,此处不再赘述。
S44,基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,获得样本代码的特征信息。
具体地,步骤S44的实现过程可以参照上述实施例中的步骤S14,此处不再赘述。
S45,基于样本代码的特征信息,使用分类器进行分类得到样本代码的分类结果。
具体地,步骤S45的实现过程可以参照上述实施例中的步骤S25,此处不再赘述。
S46,基于样本代码的分类结果以及样本代码的分类标签,对深度神经网络模型进行参数优化。
具体地,基于样本代码的分类结果以及样本代码的分类标签,获取深度神经网络模型的损失函数的损失值,根据损失值对深度神经网络模型的参数进行优化,直至损失值小于预设损失值时,结束训练。其中,损失函数可以根据实际应用进行选择,此处不作具体限定。
本实施例中,在深度神经网络模型的训练过程中,通过获取样本代码的节点图,其中,节点图为代码的抽象语法树AST或者转换AST得到的图,并获取节点图的各个节点的位置信息,在对节点图的每个节点进行编码时,不仅对节点进行嵌入编码,而且还对节点进行位置信息的位置编码,这样通过基于对节点的嵌入编码结果和位置编码结果进行融合得到的节点编码结果,使用深度神经网络模型进行特征提取,能够通过对节点的嵌入编码结合节点的位置编码捕捉到节点的上下文信息,使得提取到的代码特征更为丰富,从而提高了模型提取代码特征的能力,进而提高了后续对代码检测的准确性。
在一个实施例中,训练样本集包括正样本和负样本,上述步骤S41中,获取训练样本集,该过程可以包括:
采用均衡采样的方式获取正样本和负样本;和/或
采用动态批处理的方式获取正样本和负样本,其中,动态批处理,用于使得训练样本集中的所有节点图的总节点数不超过预设值。
其中,均衡采样(Balanced Sampling)是指在每次获取一个批量的数据时,考虑平衡正负样本的数量,尽可能地让正样本的数量等于负样本的数量。
动态批处理(Dynamic Mini-Batch)是指动态设计每个批次的大小(batch size),使得本次batch的总节点不超过一个预设值,在显存满足的情况下,尽可能地增大批次大小。
本实施例中,在分类数目较少的情况下(如当前为二分类任务),均衡采样让每次参与训练的正负样本相同,防止出现在一个批次(batch)的数据中,连续只存在正样本或负样本的情况。如此以来,每次训练产生的梯度会更稳定,模型的整个训练过程也更加稳定。在每个输入数据个体大小差异较大的情况下,采用动态批处理能保证更高效率的显存利用。由于输入的每个AST(或图数据)的节点数量差异较大,很难保证当前batch的数据在网络计算过程中,不会引起显存的溢出。因此动态设计批处理大小(batch size),使得本次batch的总节点不超过一个预设值,则可以防止显存溢出的情况。同时,动态规划后的批处理由于高效地利用了显存容量,相比固定批处理大小的情况,整个训练的过程得到了加快。
图8为本申请实施例提供的均衡采样和动态批处理的流程示意图。如图8所示,为了从已知缺陷分布的源码数据集中获取训练样本集,对源码数据集进行均衡采样和动态批处理,具体流程如下:
1.采样开始。
2.初始化数据集的正样本载入器和负样本采集器。
3.初始化正负数据下标p_i=0,n_i=0。
4.预设上限,判断p_i是否达到上限或n_i是否达到上限。
5.如果已经达到上限,则结束采样。
6.如果没有达到上限,分别初始化正负样本列表p_list和n_list。
7.分别获取一个临时正样本t_p和临时负样本t_n。
8.将t_p与t_n分别加入p_list和n_list中。
9.统计两个样本列表中样本的总节点数nums_n。
10.判断nums_n是否超出上限。
11.如果没有超出上限,则p_i和n_i增加1,并执行步骤7至步骤10。
12.如果超出上限,则分别删除p_list和n_list中的最后一个数据,将p_list和n_list合并为一个mini-batch数据,进行一次训练,然后执行步骤4。
图8同时体现了均衡采样和动态批处理,每次训练获取一个batch的数据时,都会先尝试性分别获取一个正样本和负样本到正样本列表和负样本列表中,当统计的正负样本列表的节点数总量nums_n超出一个预设上限(即显存溢出的临界),就会同时删除最后添加的那一个正样本和负样本,以此达到每次的batch size都是动态变化的目的,同时也因为样本都是正负成对添加的,因此达到均衡采样的目的。
在一个实施例中,上述步骤S42中,获取节点图的各个节点的位置信息,包括:
确定各个节点映射到欧式空间后相对于参考点的直线距离以及相对于参考方向的偏转角。
具体地,步骤S42的具体实现过程可以参照上述实施例中的步骤S12,此处不再赘述。
在一个实施例中,上述步骤S43中,针对每一个节点,对节点进行嵌入编码,该过程可以包括:
当节点的节点名称不是词典溢出词OOV时,基于词典获取节点的词语级嵌入编码;
当节点的节点名称是词典溢出词时,以未知标记作为节点的词语级嵌入编码,并基于词典获取节点的字符级嵌入编码,将节点的词语级嵌入编码与字符级嵌入编码进行融合。
在一个实施例中,词典的构建过程可以包括步骤a至步骤c:
a,确定原始样本集中的每个样本代码所属的项目。
其中,原始样本集为已知缺陷分布的源码数据集。
b,针对每一个项目,统计项目下的所有样本代码的节点图中的每个节点名称的出现次数,并对每个节点名称的出现次数与项目中带有缺陷的文件总数作平均,得到项目下的每个节点名称对应的平均值。
c,对所有项目下的每个节点名称对应的平均值按照节点名称进行汇总,得到每个节点名称的词频,并基于每个节点名称的词频,构建词典。
其中,节点在词典中的信息可以包括节点ID以及节点名称。
具体地,将词频低于预设阈值的节点名称过滤掉,保留词频不低于预设阈值的节点名称进行创建词典,其中,预设阈值可以根据实际应用进行设定。
进一步地,词典的构建过程还可以包括:
若原始样本集中存在字符串文本节点(StringLiteral Node),则字符串文本节点的子节点不参与词频统计。
本实施例中,通过创建包含节点信息的词典,从而便于后续使用词典对节点进行嵌入编码。
在一个实施例中,上述步骤S43中,针对节点图的每一个节点,对节点进行位置信息的位置编码,包括:
S431,针对每一节点,使用位置编码公式对节点的位置信息以及节点的向量维度中的偶数维度进行位置编码;
S432,使用位置编码公式对节点的位置信息以及节点的向量维度中的奇数维度进行位置编码。
具体地,步骤S431和步骤S432的实现过程可以参照上述实施例中的步骤S131和步骤S132,此处不再赘述。
在一个实施例中,节点图为样本代码的AST时,深度神经网络模型是根据基于树结构的神经网络而构建的,神经网络为循环神经网络、长短期记忆神经网络、或者卷积神经网络。
在一个实施例中,节点图为对样本代码的AST转换得到的图时,深度神经网络模型是根据图卷积神经网络而构建的。
上述步骤S43中,针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,包括:
对图的各个节点进行嵌入编码和位置信息的位置编码,得到图的各个节点的嵌入编码结果以及位置编码结果。
具体地,使用基于图的嵌入层(Graph-Embedding Layer)对图的各个节点进行嵌入编码,得到嵌入编码后的图;使用基于图的位置编码层(Graph Positional EncodingLayer)对图的各个节点的位置信息进行位置编码,得到位置编码后的图。其中,节点在图中的位置信息与该节点在AST中的位置信息相等价。对嵌入编码后的图与位置编码后的图进行融合,得到融合后的图。对于编码处理后的图中的每一个节点而言,该节点的节点编码结果是对该节点的嵌入编码结果与该节点的位置编码结果进行融合得到的向量。
上述步骤S44中,基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,可以包括:
将编码处理后的图输入到根据图神经网络而构建的深度神经网络模型进行图的节点的状态更新,通过卷积运算直至所有节点的隐藏状态得到更新,更新得到的最终状态即为图的节点的最终特征。
本实施例中,采用根据图神经网络而构建的深度神经网络模型可以在同一时刻对图的所有节点进行一次状态更新,由于不存在节点之间的时序依赖,因此整个计算是并行发生的,这将极大地减少网络的计算时间。另外,由于加入了节点的位置编码后,即使是并行运算,也可以保证不丢失节点在原树形结构存在的执行顺序的先后关系。
在一个实施例中,图卷积神经网络为带有门控机制和/或注意力机制的深度图卷积神经网络;上述步骤S44中,基于各个节点的节点编码结果,使用深度神经网络模型进行特征提取,获得样本代码的特征信息,可以包括:
S441,利用深度图卷积神经网络,基于图的各个节点的节点编码结果以及图的邻接矩阵,通过卷积运算对图的节点进行隐藏状态的更新。
S442,在隐藏状态的更新过程中,利用门控机制和/或注意力机制计算图的节点之间的信息传递权重,以控制节点对指向节点的信息传递。
S443,当图的所有节点的隐藏状态得到更新后,基于更新得到的最终隐藏状态,获取代码的特征信息。
在一个示例中,图神经网络为带有门控机制及注意力机制的深度图卷积神经网络。深度图卷积神经网络采用基于空间的图卷积对输入的图进行卷积运算直至所有节点的隐藏状态得到更新,在图的级别上将所有节点的信息汇集。门控机制可以采用带有门控结构的循环神经网络进行实现。门控机制可以采用带有门控结构的循环神经网络来实现。注意力机制可以采用自注意力算法来实现。
下面结合P-R曲线及ROC曲线对本申请实施例的模型训练方法进行评估。
图9a为本申请实施例提供的训练样本的P-R曲线。P-R曲线就是查准率Precision与查全率Recall曲线,以Recall作为横坐标轴,Precision作为纵坐标轴,图中的虚线表示平衡点。
图9b为本申请实施例提供的训练样本的ROC曲线。ROC曲线是接受者操作特性曲线(receiver operating characteristic curve),又称为感受性曲线(sensitivitycurve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚惊概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。在静态检测过程中,横轴表示误检率,纵轴表示真检率,图中的虚线表示误检率与真检率相同的无数个点。
结合图9a以及图9b,不难看出,应用本申请实施例提供的方法训练的深度神经网络模型,能够充分提取出代码中的信息,有效提高代码检测的准确性,降低误检率。
本申请实施例还提供了一种代码特征提取装置。图10为本申请实施例提供的代码特征提取装置的结构示意图,参见图10所示,AST处理装置包括:
第一获取模块1001,用于获取被测代码的节点图,其中,节点图为代码的抽象语法树AST或者转换AST得到的图;
第二获取模块1002,用于获取节点图的各个节点的位置信息;
编码模块1003,用于针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果;
提取模块1004,用于基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,得到代码的特征信息,其中,特征信息,能够用于基于代码是否存在缺陷进行分类。
在一个实施例中,第二获取模块1002具体用于:
确定各个节点映射到欧式空间后相对于参考点的距离以及相对于参考方向的偏转角。
在一个实施例中,编码模块1003用于针对每一个节点,对节点进行嵌入编码,包括:
当节点的节点名称不是词典溢出词OOV时,基于词典获取节点的词语级嵌入编码;
当节点的节点名称是词典溢出词时,以未知标记作为节点的词语级嵌入编码,并基于词典获取节点的字符级嵌入编码,将节点的词语级嵌入编码与字符级嵌入编码进行融合。
在一个实施例中,编码模块1003用于针对节点图的每一个节点,对节点进行位置信息的位置编码,包括:
针对每一节点,使用位置编码公式对节点的位置信息以及节点的向量维度中的偶数维度进行位置编码;
使用位置编码公式对节点的位置信息以及节点的向量维度中的奇数维度进行位置编码。
在一个实施例中,节点图为代码的AST时,深度神经网络模型是根据基于树结构的处理时序型输入的神经网络而构建的,神经网络为循环神经网络、长短期记忆神经网络、或者卷积神经网络。
在一个实施例中,节点图为转换代码的AST得到的图时,深度神经网络模型是根据图卷积神经网络而构建的;编码模块1003用于针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,包括:
对图的各个节点进行嵌入编码和位置信息的位置编码,得到图的各个节点的嵌入编码结果以及位置编码结果。
在一个实施例中,图卷积神经网络为带有门控机制和/或注意力机制的深度图卷积神经网络;提取模块1004具体用于:
基于图的各个节点的节点编码结果以及图的邻接矩阵,利用深度图卷积神经网络通过卷积运算对图的节点进行隐藏状态的更新;
在隐藏状态的更新过程中,利用门控机制和/或注意力机制计算图的节点之间的信息传递权重,以控制节点对指向节点的信息传递;
当图的所有节点的隐藏状态得到更新后,基于更新得到的最终隐藏状态,获取代码的特征信息。
需要说明的是:上述实施例提供的代码特征提取装置在实现代码特征提取方法时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将代码特征提取装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的代码特征提取装置与代码特征提取方法的实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供了一种代码检测装置。图11为本申请实施例提供的代码检测装置的结构示意图,参见图11所示,代码检测装置包括:
特征提取模块1101,用于上述实施例任一的代码特征提取方法对被测代码进行特征提取,得到被测代码的特征信息,其中,深度神经网络模型为预先训练的用于提取代码特征信息的模型;
代码分类模块1102,用于基于被测代码的特征信息,使用分类器进行被测代码是否存在缺陷的分类,得到被测代码的分类结果。
需要说明的是:上述实施例提供的代码检测装置在实现代码检测方法时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将代码检测装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的代码检测装置与代码检测方法的实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供了一种深度神经网络模型训练装置。图12为本申请实施例提供的深度神经网络模型训练装置的结构示意图,参见图12所示,神经网络模型训练装置包括:
第一获取模块1201,用于获取训练样本集,其中,训练样本集中的每一样本均包括样本代码的节点图以及样本代码的分类标签,分类标签用于指示样本代码是否存在缺陷,节点图为样本代码的抽象语法树AST或者转换AST得到的图;
第二获取模块1202,用于获取节点图的各个节点的位置信息;
编码模块1203,用于针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,并对节点的嵌入编码结果以及位置编码结果进行融合,生成节点的节点编码结果;
提取模块1204,用于基于节点图的各个节点的节点编码结果,使用深度神经网络模型进行特征提取,获得样本代码的特征信息;
分类模块1205,用于基于样本代码的特征信息,使用分类器进行分类得到样本代码的分类结果;
优化模块1206,用于基于样本代码的分类结果以及样本代码的分类标签,对深度神经网络模型进行参数优化。
在一个实施例中,训练样本集包括正样本和负样本,第一获取模块1201具体用于:
采用均衡采样的方式获取正样本和负样本;和/或
采用动态批处理的方式获取正样本和负样本,其中,动态批处理,用于使得训练样本集中的所有节点图的总节点数不超过预设值。
在一个实施例中,第一获取模块1202具体用于:
确定各个节点映射到欧式空间后相对于参考点的直线距离以及相对于参考方向的偏转角。
在一个实施例中,编码模块1203用于针对节点图的每一个节点,对节点进行嵌入编码,包括:
当节点的节点名称不是词典溢出词OOV时,基于词典获取节点的词语级嵌入编码;
当节点的节点名称是词典溢出词时,以未知标记作为节点的词语级嵌入编码,并基于词典获取节点的字符级嵌入编码,将节点的词语级嵌入编码与字符级嵌入编码进行融合。
在一个实施例中,装置还包括构建模块,构建模块具体用于:
确定原始样本集中的每个样本代码所属的项目;
针对每一个项目,统计项目下的所有样本代码的节点图中的每个节点名称的出现次数,并对每个节点名称的出现次数与项目中带有缺陷的文件总数作平均,得到项目下的每个节点名称对应的平均值;
对所有项目下的每个节点名称对应的平均值按照节点名称进行汇总,得到每个节点名称的词频,并基于每个节点名称的词频,构建词典。
在一个实施例中,编码模块1203用于针对节点图的每一个节点,对节点进行位置信息的位置编码,包括:
针对每一节点,使用位置编码公式对节点的位置信息以及节点的向量维度中的偶数维度进行位置编码;
使用位置编码公式对节点的位置信息以及节点的向量维度中的奇数维度进行位置编码。
在一个实施例中,节点图为样本代码的AST时,深度神经网络模型是根据基于树结构的处理时序型输入的神经网络而构建的,神经网络为循环神经网络、长短期记忆神经网络、或者卷积神经网络。
在一个实施例中,当节点图为对样本代码的AST转换得到的图时,深度神经网络模型是根据图卷积神经网络而构建的;
编码模块1203用于针对节点图的每一个节点,对节点进行嵌入编码和位置信息的位置编码,包括:
对图的各个节点进行嵌入编码和位置信息的位置编码,得到图的各个节点的嵌入编码结果以及位置编码结果。
在一个实施例中,图卷积神经网络为带有门控机制和/或注意力机制的深度图卷积神经网络;提取模块1204具体用于:
利用深度图卷积神经网络,基于图的各个节点的节点编码结果以及图的邻接矩阵,通过卷积运算对图的节点进行隐藏状态的更新;
在隐藏状态的更新过程中,利用门控机制和/或注意力机制计算图的节点之间的信息传递权重,以控制节点对指向节点的信息传递;
当图的所有节点的隐藏状态得到更新后,基于更新得到的最终隐藏状态,获取代码的特征信息。
需要说明的是:上述实施例提供的深度神经网络模型训练装置在实现深度神经网络模型训练方法时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将深度神经网络模型训练装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的深度神经网络模型训练装置与深度神经网络模型训练方法的实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图13为本申请实施例提供的计算机设备的结构示意图;如图13所示,计算机设备1300包括:处理器1301和用于存储能够在处理器上运行的计算机程序的存储器1302;其中,
计算机设备应用于代码特征提取方法时,处理器1301用于运行计算机程序时,实现上述实施例任一的代码特征提取方法的步骤。
计算机设备应用于代码检测方法时,处理器1301用于运行计算机程序时,实现上述实施例任一的代码检测方法的步骤。
计算机设备应用于神经网络模型训练方法时,处理器1301用于运行计算机程序时,实现上述实施例任一的神经网络模型训练方法的步骤。
实际应用时,计算机设备1300还可以包括:至少一个网络接口1303。计算机设备1300中的各个组件通过总线系统1304耦合在一起。可理解,总线系统1304用于实现这些组件之间的连接通信。总线系统1304除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图13中将各种总线都标为总线系统1304。其中,处理器1301的个数可以为至少一个。网络接口1303用于计算机设备1300与其他设备之间有线或无线方式的通信。
本申请实施例中的存储器1302用于存储各种类型的数据以支持计算机设备1300的操作。
上述本申请实施例揭示的方法可以应用于处理器1301中,或者由处理器1301实现。处理器1301可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1301中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1301可以是通用处理器、数字信号处理器(DSP,DiGital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器1301可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器1302,处理器1301读取存储器1302中的信息,结合其硬件完成前述方法的步骤。
在示例性实施例中,计算机设备1300可以被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,ProgrammableLogic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)、通用处理器、控制器、微控制器(MCU,Micro Controller Unit)、微处理器(Microprocessor)、或其他电子元件实现,用于执行前述方法。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序;计算机可读存储介质应用于代码特征提取方法时,计算机程序被处理器运行时,实现上述实施例任一的代码特征提取方法的步骤。
计算机可读存储介质应用于代码检测方法时,计算机程序被处理器运行时,实现上述实施例任一的代码检测方法的步骤。
计算机可读存储介质应用于神经网络模型训练方法时,计算机程序被处理器运行时,实现上述实施例任一的神经网络模型训练方法的步骤。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是:“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
另外,本申请实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (22)

1.一种代码特征提取方法,其特征在于,所述方法包括:
获取代码的节点图,其中,所述节点图为所述代码的抽象语法树AST或者转换所述AST得到的图;
获取所述节点图的各个节点的位置信息;
针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,得到所述代码的特征信息,其中,所述特征信息,能够用于基于代码是否存在缺陷进行分类。
2.根据权利要求1所述的方法,其特征在于,所述获取所述节点图的各个节点的位置信息,包括:
确定各个所述节点映射到欧式空间后相对于参考点的距离以及相对于参考方向的偏转角。
3.根据权利要求1所述的方法,其特征在于,所述针对所述节点图的每一个节点,对所述节点进行嵌入编码,包括:
当所述节点的节点名称不是词典溢出词OOV时,基于词典获取所述节点的词语级嵌入编码;
当所述节点的节点名称是词典溢出词时,以未知标记作为所述节点的词语级嵌入编码,并基于所述词典获取所述节点的字符级嵌入编码,将所述节点的词语级嵌入编码与所述字符级嵌入编码进行融合。
4.根据权利要求2所述的方法,其特征在于,所述针对所述节点图的每一个节点,对所述节点进行位置信息的位置编码,包括:
针对每一所述节点,使用位置编码公式对所述节点的位置信息以及所述节点的向量维度中的偶数维度进行位置编码;
使用所述位置编码公式对所述节点的位置信息以及所述节点的向量维度中的奇数维度进行位置编码。
5.根据权利要求1至4任一所述的方法,其特征在于,所述节点图为所述代码的AST时,所述深度神经网络模型是根据基于树结构的神经网络而构建的,所述神经网络为循环神经网络、长短期记忆神经网络、或者卷积神经网络。
6.根据权利要求1至4任一所述的方法,其特征在于,所述节点图为转换所述代码的AST得到的图时,所述深度神经网络模型是根据图卷积神经网络而构建的。
7.根据权利要求6所述的方法,其特征在于,所述图卷积神经网络为带有门控机制和/或注意力机制的深度图卷积神经网络;
所述基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,得到所述代码的特征信息,包括:
基于所述图的各个所述节点的节点编码结果以及所述图的邻接矩阵,利用所述深度图卷积神经网络通过卷积运算对所述图的节点进行隐藏状态的更新;
在所述隐藏状态的更新过程中,利用所述门控机制和/或所述注意力机制计算所述图的节点之间的信息传递权重,以控制节点对指向节点的信息传递;
当所述图的所有节点的隐藏状态得到更新后,基于更新得到的最终隐藏状态,获取所述代码的特征信息。
8.一种代码检测方法,其特征在于,所述方法包括:
基于权利要求1至7任一所述的代码特征提取方法对被测代码进行特征提取,得到所述被测代码的特征信息,其中,所述深度神经网络模型为预先训练的用于提取代码特征信息的模型;
基于所述被测代码的特征信息,使用分类器进行所述被测代码是否存在缺陷的分类,得到所述被测代码的分类结果。
9.一种深度神经网络模型训练方法,其特征在于,所述方法包括:
获取训练样本集,其中,所述训练样本集中的每一样本均包括样本代码的节点图以及所述样本代码的分类标签,所述分类标签用于指示所述样本代码是否存在缺陷,所述节点图为所述样本代码的抽象语法树AST或者转换所述AST得到的图;
获取所述节点图的各个节点的位置信息;
针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,获得所述样本代码的特征信息;
基于所述样本代码的特征信息,使用分类器进行分类得到所述样本代码的分类结果;
基于所述样本代码的分类结果以及所述样本代码的分类标签,对所述深度神经网络模型进行参数优化。
10.根据权利要求9所述的方法,其特征在于,所述训练样本集包括正样本和负样本,所述获取训练样本集,包括:
采用均衡采样的方式获取所述正样本和所述负样本;和/或
采用动态批处理的方式获取所述正样本和所述负样本,其中,所述动态批处理,用于使得所述训练样本集中的所有节点图的总节点数不超过预设值。
11.根据权利要求9所述的方法,其特征在于,所述获取所述节点图的各个节点的位置信息,包括:
确定各个所述节点映射到欧式空间后相对于参考点的直线距离以及相对于参考方向的偏转角。
12.根据权利要求9所述的方法,其特征在于,所述针对所述节点图的每一个节点,对所述节点进行嵌入编码,包括:
当所述节点的节点名称不是词典溢出词OOV时,基于词典获取所述节点的词语级嵌入编码;
当所述节点的节点名称是词典溢出词时,以未知标记作为所述节点的词语级嵌入编码,并基于所述词典获取所述节点的字符级嵌入编码,将所述节点的词语级嵌入编码与所述字符级嵌入编码进行融合。
13.根据权利要求12所述的方法,其特征在于,所述词典的构建过程包括:
确定所述训练样本集中的每个所述样本代码所属的项目;
针对每一个所述项目,统计所述项目下的所有所述样本代码的节点图中的每个节点名称的出现次数,并对每个节点名称的出现次数与所述项目中带有缺陷的文件总数作平均,得到所述项目下的每个节点名称对应的平均值;
对所有所述项目下的每个节点名称对应的平均值按照节点名称进行汇总,得到每个节点名称的词频,并基于每个节点名称的词频,构建所述词典。
14.根据权利要求11所述的方法,其特征在于,所述针对所述节点图的每一个节点,对所述节点进行位置信息的位置编码,包括:
针对每一所述节点,使用位置编码公式对所述节点的位置信息以及所述节点的向量维度中的偶数维度进行位置编码;
使用所述位置编码公式对所述节点的位置信息以及所述节点的向量维度中的奇数维度进行位置编码。
15.根据权利要求9至14任一所述的方法,其特征在于,所述节点图为所述样本代码的AST时,所述深度神经网络模型是根据基于树结构的神经网络而构建的,所述神经网络为循环神经网络、长短期记忆神经网络、或者卷积神经网络。
16.根据权利要求9至14任一所述的方法,其特征在于,所述节点图为转换所述代码的AST得到的图时,所述深度神经网络模型是根据图卷积神经网络而构建的。
17.根据权利要求16所述的方法,其特征在于,所述图卷积神经网络为带有门控机制和/或注意力机制的深度图卷积神经网络;
所述基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,获得所述样本代码的特征信息,包括:
利用所述深度图卷积神经网络,基于所述图的各个所述节点的节点编码结果以及所述图的邻接矩阵,通过卷积运算对所述图的节点进行隐藏状态的更新;
在所述隐藏状态的更新过程中,利用所述门控机制和/或所述注意力机制计算所述图的节点之间的信息传递权重,以控制节点对指向节点的信息传递;
当所述图的所有节点的隐藏状态得到更新后,基于更新得到的最终隐藏状态,获取所述代码的特征信息。
18.一种代码特征提取装置,其特征在于,所述装置包括:
第一获取模块,用于获取代码的节点图,其中,所述节点图为所述代码的抽象语法树AST或者转换所述AST得到的图;
第二获取模块,用于获取所述节点图的各个节点的位置信息;
编码模块,用于针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
提取模块,用于基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,得到所述代码的特征信息,其中,所述特征信息,能够用于基于代码是否存在缺陷进行分类。
19.一种代码检测装置,其特征在于,所述装置包括:
特征提取模块,用于基于权利要求1至7任一所述的代码特征提取方法对被测代码进行特征提取,得到所述被测代码的特征信息,其中,所述深度神经网络模型为预先训练的用于提取代码特征信息的模型;
代码分类模块,用于基于所述被测代码的特征信息,使用分类器进行所述被测代码是否存在缺陷的分类,得到所述被测代码的分类结果。
20.一种深度神经网络模型训练装置,其特征在于,所述装置包括:
第一获取模块,用于获取训练样本集,其中,所述训练样本集中的每一样本均包括样本代码的节点图以及所述样本代码的分类标签,所述分类标签用于指示所述样本代码是否存在缺陷,所述节点图为所述样本代码的抽象语法树AST或者转换所述AST得到的图;
第二获取模块,用于获取所述节点图的各个节点的位置信息;
编码模块,用于针对所述节点图的每一个节点,对所述节点进行嵌入编码和位置信息的位置编码,并对所述节点的嵌入编码结果以及位置编码结果进行融合,生成所述节点的节点编码结果;
提取模块,用于基于所述节点图的各个所述节点的节点编码结果,使用深度神经网络模型进行特征提取,获得所述样本代码的特征信息;
分类模块,用于基于所述样本代码的特征信息,使用分类器进行分类得到所述样本代码的分类结果;
优化模块,用于基于所述样本代码的分类结果以及所述样本代码的分类标签,对所述深度神经网络模型进行参数优化。
21.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述代码特征提取方法的步骤;或者,所述处理器执行所述程序时实现权利要求8所述代码检测方法的步骤;或者,所述处理器执行所述程序时实现权利要求9至17任一项所述深度神经网络模型训练方法的步骤。
22.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述代码特征提取方法的步骤;或者,所述计算机程序被处理器执行时实现权利要求8所述代码检测方法的步骤;或者,所述计算机程序被处理器执行时实现权利要求9至17任一项所述深度神经网络模型训练方法的步骤。
CN202110937144.XA 2021-08-16 2021-08-16 代码特征提取方法、代码检测方法、模型训练方法和装置 Pending CN115904918A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110937144.XA CN115904918A (zh) 2021-08-16 2021-08-16 代码特征提取方法、代码检测方法、模型训练方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110937144.XA CN115904918A (zh) 2021-08-16 2021-08-16 代码特征提取方法、代码检测方法、模型训练方法和装置

Publications (1)

Publication Number Publication Date
CN115904918A true CN115904918A (zh) 2023-04-04

Family

ID=86476628

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110937144.XA Pending CN115904918A (zh) 2021-08-16 2021-08-16 代码特征提取方法、代码检测方法、模型训练方法和装置

Country Status (1)

Country Link
CN (1) CN115904918A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661805A (zh) * 2023-07-31 2023-08-29 腾讯科技(深圳)有限公司 代码表示的生成方法和装置、存储介质及电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661805A (zh) * 2023-07-31 2023-08-29 腾讯科技(深圳)有限公司 代码表示的生成方法和装置、存储介质及电子设备
CN116661805B (zh) * 2023-07-31 2023-11-14 腾讯科技(深圳)有限公司 代码表示的生成方法和装置、存储介质及电子设备

Similar Documents

Publication Publication Date Title
US11256487B2 (en) Vectorized representation method of software source code
CN110363049B (zh) 图形元素检测识别和类别确定的方法及装置
CN110659723B (zh) 基于人工智能的数据处理方法、装置、介质及电子设备
WO2023134084A1 (zh) 多标签识别方法、装置、电子设备及存储介质
CN111552969A (zh) 基于神经网络的嵌入式终端软件代码漏洞检测方法及装置
CN113704460B (zh) 一种文本分类方法、装置、电子设备和存储介质
CN113255714A (zh) 图像聚类方法、装置、电子设备及计算机可读存储介质
CN115438215A (zh) 图文双向搜索及匹配模型训练方法、装置、设备及介质
EP3769270A1 (en) A method, an apparatus and a computer program product for an interpretable neural network representation
CN116579618B (zh) 基于风险管理的数据处理方法、装置、设备及存储介质
CN112733701A (zh) 一种基于胶囊网络的鲁棒场景识别方法及系统
CN113628059A (zh) 一种基于多层图注意力网络的关联用户识别方法及装置
CN114331122A (zh) 重点人员风险等级评估方法及相关设备
CN113904844B (zh) 基于跨模态教师-学生网络的智能合约漏洞检测方法
CN115904918A (zh) 代码特征提取方法、代码检测方法、模型训练方法和装置
CN117009613A (zh) 一种图数据分类方法、系统、装置及介质
CN117009968A (zh) 恶意代码的同源分析方法、装置、终端设备及存储介质
CN116208399A (zh) 一种基于元图的网络恶意行为检测方法及设备
CN115204171A (zh) 基于超图神经网络的文档级事件抽取方法及系统
CN115455438A (zh) 一种程序切片漏洞检测方法、系统、计算机及存储介质
CN111562943B (zh) 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置
CN114091429A (zh) 基于异构图神经网络的文本摘要生成方法及系统
CN115618929A (zh) Ast处理方法、神经网络模型训练方法、装置和存储介质
CN113822143A (zh) 文本图像的处理方法、装置、设备以及存储介质
CN118093885B (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