CN112416358B - 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 - Google Patents
一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 Download PDFInfo
- Publication number
- CN112416358B CN112416358B CN202011310395.7A CN202011310395A CN112416358B CN 112416358 B CN112416358 B CN 112416358B CN 202011310395 A CN202011310395 A CN 202011310395A CN 112416358 B CN112416358 B CN 112416358B
- Authority
- CN
- China
- Prior art keywords
- layer
- word
- gru
- vector
- output
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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
-
- 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/048—Activation functions
-
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Machine Translation (AREA)
Abstract
本发明涉及一种基于结构化词嵌入网络的智能合约代码缺陷检测方法,具体是构建合约代码抽象语法树以及单词序列化模块,将收集到的合约代码转化为单词序列作为训练集。然后利用合约语法分析工具判定代码是否存在缺陷以及缺陷的数量,作为训练集的标签数据。再由单词序列训练得到词嵌入矩阵,将词嵌入矩阵作为循环神经网络的词嵌入层,构建GRU网络。使用训练集以及标签对网络进行训练。最后将新的智能合约代码经过单词序列化后输入到训练好的GRU网络中,输出缺陷判别的结果,是一种合约代码检测的方法。本发明使结构化的合约代码高效的序列化,提高代码缺陷检测的准确度以及自适应能力。
Description
技术领域
本发明属于代码缺陷检测技术领域,尤其涉及一种基于结构化词嵌入网络的智能合约代码缺陷检测方法。
背景技术
众所周知,代码缺陷是软件开发过程中无法避免的问题。从机器语言到高级语言的发展过程中,代码缺陷一直存在。这也成为了软件工程领域中研究的热点之一。因为代码缺陷的存在,软件应用在运行的过程中将会出现或大或小的问题。轻则导致程序出现异常,发出警告;重则直接导致程序崩溃,进而引发更为严重的实际问题。
软件缺陷预测是指,根据已存在的软件库、领域内容、代码的特征并结合相关的算法,来预测软件项目中是否存在潜在的代码缺陷。这里的算法可以是统计学算法、机器学习算法,或者是深度学习等算法。按照缺陷预测的粒度来分,可以将软件缺陷预测分为粗粒度缺陷预测和细粒度学缺陷预测,其中粗粒度的缺陷预测方法主要是预测文件(合约)、函数级别代码缺陷,细粒度缺陷预测则细分到代码语句级别的缺陷。本专利是关于粗粒度缺陷预测的研究。
从缺陷预测的方法上进行分类,可以分为规则型缺陷预测与算法型缺陷预测。规范型缺陷预测指的是借助传统的统计学,发掘软件代码结构特性,人为地定义代码规范或缺陷的模式,通过遍历源代码或者由源代码编译后的字节码、机器码文件,查找代码中潜在的缺陷。这种方式的缺陷预测对于规则设计人员有着很高的要求,不同的规则对于最终的预测结果有着极大的影响。同时,不同类型的代码可能需要设计出不同的规则来进行匹配,因此规则型缺陷预测的鲁棒性和泛化性都较差;算法型缺陷预测是指,人工定义软件相应的度量或者模型来自主学习相关的特征,利用度量、特征数据构建缺陷预测模型。算法型缺陷预测依赖于构建的模型的能力以及对数据的预处理效果。目前常用的算法为机器学习算法以及深度学习算法。算法型模型不需要人为地定义缺陷匹配规则,只需要让模型利用大量的数据集,从数据集中去学习到数据内部的特征,最终导出需要判定的结果。这种模型的泛化性能更好,能够适应于各种不同的数据类型和数据量,不再需要专家为单独的一类数据集设计一个专有的规则,模型的通用性明显提升。
从软件缺陷预测的各个研究阶段来看,最早的研究假定代码行数于缺陷发生的可能性和个数存在正相关。软件代码的规模越大、复杂度越高,则其中包含缺陷的可能性也越大。该度量方式比较简单,在实际使用过程中,很难精确地度量软件系统的复杂性。之后有学者提出圈复杂度(cyclomatic complexity)度量,代码的控制流的复杂度越高,那么含有缺陷的可能性也越大。再者又有学者提出了如软件科学度量法等其他更为复杂的度量方式。
随着机器学习算法的发展,基于常见的机器学习算法,如逻辑回归、决策树、支持向量机等,学者从源代码文件中提取出若干个特征,并根据该代码是否存在缺陷给定0\1的标签。接着根据数据集特征和标签,结合各种分类器进行训练。得到一个用于判别的机器学习分类器,对于一个新的代码,就能使用训练好的分类器来进行判定缺陷存在与否。
时至今日,除了早期传统的基于度量与机器学习的缺陷预测方法之外,各种深度学习算法也开始大放异彩。由于结构化的源代码不方便直接作为输入加载到深度学习模型中,通常的做法是将源文件转化为抽象语法树,从语法树中抽取变量声明、函数调用、语句返回等节点,得到单词序列。再根据单词序列进行词嵌入操作,得到训练完毕的词嵌入矩阵。基于该词嵌入矩阵,每一个源代码文件都可以转化为对应的词嵌入向量。与已知缺陷是否存在的源代码的词嵌入向量进行相似度比较,我们就可以判断新的代码是否存在缺陷。或者基于该词嵌入矩阵,构建一个卷积神经网络或者循环神经网络,添加若干个卷积层或者循环层、全连接层,最后经过一个逻辑回归分类器。通过数据集的训练,便可得到一个效果良好的分类器。
发明内容
本发明的目的在于针对目前各种方式的软件代码缺陷预测中,较少涉及到智能合约代码的缺陷预测这一现象,提供一种基于结构化词嵌入网络的缺陷预测方法。该方法首先构建合约解析模块,解析到代码的单词序列后,构建并训练词嵌入矩阵,使用语法分析工具判断代码是否存在缺陷,作为标签,结合词嵌入矩阵,构建并训练GRU网络,将新的合约代码序列化后输入网络中,实现缺陷的检测。
为了达到上述的目的,本发明的构思如下:收集特定的区块链或者以太坊的智能合约代码作为原始的数据集;将代码转化为抽象语法树,再遍历抽象语法树,获得单词序列,作为训练集;使用代码语法分析工具判断代码是否存在缺陷,作为标签;基于单词序列,构建并训练词嵌入矩阵;结合词嵌入矩阵,构建GRU网络并使用训练集和标签训练;最终将新的合约序列化后输入训练好的模型中,判定是否缺陷是否存在。
根据上述的发明思想,本发明采用下述技术方案:一种基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于,包括如下步骤:
步骤1:收集与以太坊、区块链相关的多个原始的智能合约代码;
步骤2:将原始的智能合约代码首先转化为XML抽象语法树,将XML抽象语法树以中序遍历的方式生成单词序列;
步骤3:通过人工标注的方式分析原始的智能合约代码中是否存在缺陷,并将标记结果作为GRU网络的标签,结合每个单词序列构建训练对数据集;
步骤4:将单词序列使用Word2Vec算法中的Skip-Gram模型构建智能合约代码的词嵌入矩阵;
步骤5:引入步骤4中所述词嵌入矩阵构建GRU网络模型,构建交叉熵损失模型,通过步骤3中所述训练队数据集进行优化训练,得到优化后GRU网络模型;
步骤6,对待预测的智能合约代码进行提取抽象语法树以及单词序列化操作,得到对应的单词序列;
步骤7,将优化后GRU网络模型的输出层进行调整,单词序列输入优化调整后GRU网络模型预测输出待预测的智能合约代码中是否存在缺陷;
作为优选,步骤2所述单词序列的定义如下,
datai={tokeni,1,tokeni,2,tokeni,3,...,tokeni,L},i∈[1,M]
其中,M表示原始的智能合约代码的数量,datai表示第i个原始的智能合约代码对应的单词序列,tokeni,j为第i个原始的智能合约代码对应的单词序列中的第j个单词,j∈[1,L],L表示该单词序列中单词的数量;每一个单词为从源代码中提取出来的最小单位;
作为优选,步骤3所述通过人工标注的方式分析原始的智能合约代码中是否存在缺陷为:
若人工分析原始的智能合约代码中存在缺陷,则标签为1,否则标签为0;
所述GRU网络的标签,具体定义如下,
labeli∈}0,1}i∈[1,M]
其中,M表示原始的智能合约代码的数量,labeli表示第i个原始的智能合约代码的缺陷状态,labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
将第i个原始的智能合约代码的缺陷状态转化成独热编码,即labeli=[0,1]表示无缺陷,labeli=[1,0]表示有缺陷;
步骤3所述结合单词序列构建训练对数据集为:
(datai,labeli)
i∈[1,M]
作为优选,步骤4所述将单词序列使用Word2Vec算法中的Skip-Gram模型构建智能合约代码的词嵌入矩阵为:
步骤4.1,通过输入层、隐藏层、输出层构建三层神经网络;
步骤4.2,输入层接收的输入数据是单个目标单词labeli,i∈[1,M]
根据该单词在词汇表中的索引位置,将其转化为独热编码x;该编码向量x的尺寸是V×1,V表示代码词汇表的大小,并固定每个词的顺序;
每个词的独热编码向量是一个稀疏向量,只有该词所在位置的元素是1,其他位置的元素都为0;
对于每一个向量Uc,c∈[1,2*m],再做Softmax运算得到概率输出结果Yc,c∈[1,2*m],其是一个V×1向量,其中每个单词分数的概率,计算方式如下第三公式所示:
yj是概率向量Yc中第j个值,将第一公式、第二公式式代入第三公式,可得训练目标模型:
隐藏层得到2*m个相同的概率向量Yc,输出到输出层;
步骤4.5,在步骤4.4中,输出层得到了2*m个相同的Softmax概率向量Yc,每一个向量有一个对应的单词的独热编码;
Skip-Gram模型的训练目标是最大化公式训练目标模型,给定输入wI下,2*m个真实输出值wO,C的条件概率乘积;
其中,c∈[1,2*m],对于每个预测单词tokenc,均有
其中,j*为正确输出单词的索引值;
对于2*m中的每一个单词的预测都是独立的事件,则总损失函数E可以定义如下,
其中,j*为是词汇表中第c个真实输出单词的索引,c∈[1,2*m];
作为优选,步骤5所述GRU网络由:输入层、词嵌入层、GRU层、全连接层、Softmax层、输出层依次串联级联构建;
所述输入层:通过M个单词序列构建训练样本,具体定义如下,
datai={tokeni,1,tokeni,2,tokeni,3,...,tokeni,L},i∈[1,M]
inputi={veci,1,veci,2,veci,3,...,veci,L},i∈[1,M]
trans(x)=[0,0,0,...,1,0.0],index(1)=x
其中,datai是第i个单词序列,inputi是第i个单词序列对应的独热编码矩阵,大小为L×V,tokeni,j为第i个原始的智能合约代码对应的单词序列中的第j个单词,veci,j为对应单词(token)的独热编码,通过trans(.)完成由单词到对应独热编码形式的转化,
L=600是每个单词序列的长度,若单词序列的长度小于L=600,则以零填充使得inputi的单词序列的长度达到L,M为训练集中原始的智能合约代码的数量,单个独热编码向量的长度为V,为词汇表数量;
经过输入层后,得到的大小为M×L×V的张量,输出到词嵌入层;
输入的批次训练样本中每个单词序列向量经过所述词嵌入层之后,将每个单词序列的独热编码转换为词嵌入表示,输出M×L×N的张量;
M为训练集中单词序列的数量,L为每个单词序列的长度,N为词嵌入维度;
所述的GRU层接收来自所述词嵌入层的输出;
GRU层由多个子GRU层串联而成,每个子GRU层的结构完全一致,第p子GRU层的定义如下,
第p子GRU层中存在多个时序隐藏层,并且时序数量与单词序列的固定长度一致,为L;
每个时序隐藏层的输入是单个单词的词嵌入表示,其大小为1×N;
第p子GRU层中个第q个时序隐藏层接收该输入以及第q-1个时序隐藏层的状态hp,q-1后,经过运算将得到传递到第q+1时序隐藏层的状态hp,q。同时,每个时序都对应一个输出结果op,q,p∈[1,P],q∈[1,Q];
第p个子GRU层中的相邻两个时序隐藏层的更新表达式如下:
其中,*是矩阵中对应坐标的元素相乘,q为GRU层中的时序序号数,时序总数为一个固定值Q。若一份单词序列的长度大于Q,则截取Q长度,若一份单词序列的长度小于Q,则在后续补零填充。hp,q-1代表从第q-1时序隐藏层中传递下来的隐状态,hp,q代表传递给第q+1时序隐藏层的隐状态,zp,q是更新门,表达式如下:
对于第p个子GRU层的第q个时序隐藏层而言,输出结果表达式如下:
GRU层接收的的输入张量尺寸为M×L×N,每一个时序的输入尺寸为1×N,单个子GRU层共L个时序隐藏层;
输入数据所有经过GRU层之后,输出最后一个时序的结果op,Q,传递给全连接层;
对于第p个子GRU中的第q个时序隐藏层,其输入为xp,q,输出为一个中间输出结果op,q和中间隐状态hp,q,隐状态只用于GRU循环层中的信息传递,最终输出的是最后一个时序的oP,Q;
GRU中的每个时序对应子网络的神经元数量为G;经过所有GRU层后,输出的张量大小为M×G;
所述全连接层,接收来自GRU层的输出数据;
所述全连接层包括由连接层、Dropout层、激活层依次串联级联构成;
所述连接层的神经元数量为X;
所述Dropout层是按照一定比例,随机地使全连接层中的节点失活,失去传播和计算能力;
所述激活层的激活函数为ReLU函数;
ReLU函数的表达式如下:
ReLU(x)=max(x,0)x∈[-∞,+∞]
其中,x为任意实数;
经过全连接层后,输出得到尺寸为M×X的张量;
所述Softmax层,接收来自全连接层的输出,Softmax层的神经元数量为B,即进行有无缺陷的二分类预测判别;
输入数据是尺寸为M×X的张量,经过Softmax层后,输出1×2的概率向量S,再经过激活函数之前,得到1×2向量V;
向量V经过激活函数得到概率向量S的公式如下,
其中,j表示分类下标,j∈[1,2];
经过Softmax激活函数后,得到1×2的概率向量S,取其中较大值对应的标签:0或者1。
所述输出层,在训练中和实际使用中有所不同;
训练中的输出层,得到来自Softmax层的概率向量Sj,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,该概率向量中表示有缺陷即预测为正的概率值作为最终的输出与标签label进行损失值计算,并进行反向传播参数优化;
步骤5所述交叉熵损失模型为:
GRU网络的标签为步骤4中的判别结果。labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
交叉熵损失的定义如下,
其中,M为训练集中单词序列的数量,labeli标识单词序列i的标签,有缺陷的labeli=1,无缺陷的labeli=0;pi为第i个单词序列被预测为正(有缺陷)的概率;
步骤5通过步骤3中所述训练队数据集进行优化训练为:
作为优选,步骤7所述将优化后GRU网络模型的输出层进行调整为:
优化后GRU网络模型的输出层得到来自Softmax层的概率向量,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,若有缺陷的概率值大于H,H∈(0,1),则输出1,表示对应的源代码存在缺陷;若无缺陷的概率值大于H,则输出0,表示对应的源代码不存在缺陷。
本发明的一种基于结构化词嵌入网络的智能合约代码的缺陷检测的方法,与现有的技术相比较,具有如下突出特点和优点:
引入代码解析模块,将智能合约代码通过中间抽象语法树形式转化为单词序列,使结构化的合约代码高效的序列化;
对于原始的智能合约代码做了缺陷检测,涵盖了多种不同的可能缺陷,提高代码缺陷的检测准确度;
基于词嵌入矩阵,连接GRU网络,可以让网络模型自动地去学习单词序列中的文本特征,省去了人为的文本序列判别规则的设计,增强了自适应能力。
附图说明
图1:是本发明方法流程图。
图2:是智能合约代码示例。
图3:是智能合约代码转化为的单词序列。
图4:是智能合约代码缺陷判别结果。
图5:是词嵌入矩阵构建的Skip-Gram模型示意图。
图6:是基于循环神经网络的GRU网络。
具体实施方式
以下结合附图对本发明的实施例作进一步的说明。
下面结合图1至图6介绍本发明的具体实施方式为:
一种基于结构化词嵌入网络的智能合约代码的缺陷检测的方法和系统,其特征在于,包括如下步骤:
步骤1:在EtherScan(一款以太坊区块搜索和分析的分布式智能合约平台)上收集智能合约代码,总计22,000份合约,将其作为原始数据集。附图2为一段智能合约代码示例;
步骤2:将数据集中所有的原始智能合约代码首先转化为XML抽象语法树,将XML抽象语法树以中序遍历的方式生成单词序列;
对于每一个智能合约代码,根据ANTLR语法规则,将其转化为抽象语法树;
对于每一个抽象语法树,以中序的方式遍历,转化成对应的单词序列;
所述单词序列的定义如下,
datai={tokeni,1,tokeni,2,tokeni,3,...,tokeni,L},i∈[1,M]
其中,M=22,000表示原始的智能合约代码的数量,datai表示第i个原始的智能合约代码对应的单词序列,tokeni,j为第i个原始的智能合约代码对应的单词序列中的第j个单词,j∈[1,L],L=600表示该单词序列中单词的数量,若单词序列数量不足L,则补零;若单词序列长度大于L,则截取。每一个单词为从源代码中提取出来的最小单位;
通过上述源代码转化到抽象语法树、抽象语法树转化到单词序列等两个步骤,将所有的合约代码转化成单词序列集,作为步骤6中GRU网络的训练集输入;
步骤3:通过人工标注的方式分析原始的智能合约代码中是否存在缺陷,并将标记结果作为GRU网络的标签,结合每个单词序列构建训练对数据集;
步骤3所述通过人工标注的方式分析原始的智能合约代码中是否存在缺陷为:
若人工分析原始的智能合约代码中存在缺陷,则标签为1,否则标签为0;
所述GRU网络的标签,具体定义如下,
labeli∈}0,1}i∈[1,M]
其中,M=22,000表示原始的智能合约代码的数量,labeli表示第i个原始的智能合约代码的缺陷状态,labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
将第i个原始的智能合约代码的缺陷状态转化成独热编码,即labeli=[0,1]表示无缺陷,labeli=[1,0]表示有缺陷;
步骤1中源代码由人工分析的结果如附图4所示:共包含7种缺陷类型,本合约中无任何缺陷。被分析的代码行占合约总代码行(包括空行、注释)的62%;
步骤3所述结合单词序列构建训练对数据集为:
(datai,labeli)
i∈[1,M]
其中,M=22,000表示训练集对的数量;
步骤4:将单词序列使用Word2Vec算法中的Skip-Gram模型构建智能合约代码的词嵌入矩阵,Skip-Gram模型如附图5所示;
步骤4所述将单词序列使用Word2Vec算法中的Skip-Gram模型构建智能合约代码的词嵌入矩阵为:
步骤4.1,通过输入层、隐藏层、输出层构建三层神经网络;
步骤4.2,输入层(附图5中Input Layer)接收的输入数据是单个目标单词labeli,i∈[1,M],M=22,000;
根据该单词在词汇表中的索引位置,将其转化为独热编码x(附图5中x);该编码向量x的尺寸是V×1,V=100,000表示代码词汇表的大小,并固定每个词的顺序;
每个词的独热编码向量是一个稀疏向量,只有该词所在位置的元素是1,其他位置的元素都为0;
步骤4.4,隐藏层(附图5中Hidden Layer)通过第二权重矩阵(附图5中),将步骤4.3中的向量转化成2*m个概率向量Yc,c∈[1,2*m],输出至输出层(附图5中OutputLayer);
与2*m个特征矩阵计算后,最终得2*m个V×1的向量Uc,c∈[1,2*m],由于是参数共享的,因此所有2*m个输出向量均相等,每个向量中的值即上述词汇表中每个单词wj的分数uj,其中2*m为特征矩阵个数;
对于每一个向量Uc,c∈[1,2*m],再做Softmax运算得到概率输出结果Yc(附图5中Yc),c∈[1,2*m],其是一个V×1向量,其中每个单词分数的概率,计算方式如下第三公式所示:
yj是概率向量Yc中第j个值,将第一公式、第二公式式代入第三公式,可得训练目标模型:
隐藏层得到2*m个相同的概率向量Yc,输出到输出层;
步骤4.5,在步骤4.4中,输出层得到了2*m个相同的Softmax概率向量Yc,每一个向量有一个对应的单词的独热编码;
Skip-Gram模型的训练目标是最大化公式训练目标模型,给定输入wI下,2*m个真实输出值wO,C的条件概率乘积;
其中,c∈[1,2*m],对于每个预测单词tokenc,均有
其中,j*为正确输出单词的索引值;
对于2*m个单词的每个预测都是独立的事件,则总损失函数E可以定义如下,
其中,j*为是词汇表中第c个真实输出单词的索引,c∈[1,2*m],m=3;
步骤5:引入步骤4中所述词嵌入矩阵构建GRU网络模型,构建交叉熵损失模型,通过步骤3中所述训练队数据集进行优化训练,得到优化后GRU网络模型,GRU网络模型如附图6所示;
步骤5所述GRU网络由:输入层、词嵌入层、GRU层、全连接层、Softmax层、输出层依次串联级联构建,模型结构如附图6所示;
所述输入层(附图6中Input):通过22,000个单词序列构建训练样本,具体定义如下,
datai={tokeni,1,tokeni,2,tokeni,3,...,tokeni,L},i∈[1,M]
inputi={veci,1,veci,2,veci,3,...,veci,L},i∈[1,M]
trans(x)=[0,0,0,...,1,0.0],index(1)=x
其中,datai是第i个单词序列,inputi是第i个单词序列对应的独热编码矩阵,大小为L×V,tokeni,j为第i个原始的智能合约代码对应的单词序列中的第j个单词,veci,j为对应单词(token)的独热编码,通过trans(.)完成由单词到对应独热编码形式的转化,
L=600是每个单词序列的长度,若单词序列的长度小于L,则以零填充使得inputi的单词序列的长度达到L,M=22,000为训练集中原始的智能合约代码的数量,V=100,000为单个独热编码向量的长度,也为词汇表数量;
经过输入层后,得到的大小为M×L×V的张量,输出到词嵌入层;
输入的批次训练样本中每个单词序列向量经过所述词嵌入层之后,将每个单词序列的独热编码转换为词嵌入表示,输出M×L×N的张量;
M=22,000为训练集中单词序列的数量,L=600为每个单词序列的长度,N=150为词嵌入维度;
所述的GRU层接收来自所述词嵌入层的输出;
GRU层(附图6中GRU)由多个子GRU层串联而成,每个子GRU层的结构完全一致,第p子GRU层的定义如下,
第p子GRU层中存在多个时序隐藏层,并且时序数量与单词序列的固定长度一致,为L=600;
每个时序隐藏层的输入是单个单词的词嵌入表示,其大小为1×N;
第p子GRU层中个第q个时序隐藏层接收该输入以及第q-1个时序隐藏层的状态hp,q-1后,经过运算将得到传递到第q+1时序隐藏层的状态hp,q。同时,每个时序都对应一个输出结果op,q,p∈[1,P],q∈[1,Q],P=2为子GRU层的数量,Q=600为单个子GRU层的时序隐藏层数量;
第p个子GRU层中的相邻两个时序隐藏层的更新表达式如下:
其中,*是矩阵中对应坐标的元素相乘,q为GRU层中的时序序号数,时序总数为一个固定值Q=600。若一份单词序列的长度大于Q,则截取Q长度,若一份单词序列的长度小于Q,则在后续补零填充。hp,q-1代表从第q-1时序隐藏层中传递下来的隐状态,hp,q代表传递给第q+1时序隐藏层的隐状态,zp,q是更新门,表达式如下:
对于第p个子GRU层的第q个时序隐藏层而言,输出结果表达式如下:
GRU层接收的的输入张量尺寸为M×Q×N,每一个时序的输入尺寸为1×N,单个子GRU层共Q个时序隐藏层;
输入数据所有经过GRU层之后,输出最后一个时序的结果op,Q,传递给全连接层;
对于第p个子GRU中的第q个时序隐藏层,其输入为xp,q,输出为一个中间输出结果op,q和中间隐状态hp,q,隐状态只用于GRU循环层中的信息传递,最终输出的是最后一个时序的oP,Q;
GRU中的每个时序对应子网络的神经元数量为G=128;经过所有GRU层后,输出的张量大小为M×G;
所述全连接层(附图6中Fully Connected),接收来自GRU层的输出数据;
所述全连接层包括由连接层、Dropout层、激活层依次串联级联构成;
所述连接层的神经元数量为X=64;
所述Dropout层是按照一定比例,随机地使全连接层中的节点失活,失去传播和计算能力;
所述激活层的激活函数为ReLU函数;
ReLU函数的表达式如下:
ReLU(x)=max(x,0)x∈[-∞,+∞]
其中,x为任意实数;
经过全连接层后,输出得到尺寸为M×X的张量;
所述Softmax层(附图6中Softmax),接收来自全连接层的输出,Softmax层的神经元数量为2,即进行有无缺陷的二分类预测判别;
输入数据是尺寸为M×X的张量,经过Softmax层后,输出1×2的概率向量S,再经过激活函数之前,得到1×2向量V;
向量V经过激活函数得到概率向量S的公式如下,
其中,j表示分类下标,j∈[1,2];
经过Softmax激活函数后,得到1×2的概率向量S,取其中较大值对应的标签:0或者1。
所述输出层,在训练中和实际使用中有所不同;
训练中的输出层,得到来自Softmax层的概率向量Sj,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,该概率向量中表示有缺陷即预测为正的概率值作为最终的输出与标签label进行损失值计算,并进行反向传播参数优化;
步骤5所述交叉熵损失模型为:
GRU网络的标签为步骤4中的判别结果。labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
交叉熵损失的定义如下,
其中,M=22,000为训练集中单词序列的数量,labeli标识单词序列i的标签,有缺陷的labeli=1,无缺陷的labeli=0;pi为第i个单词序列被预测为正(有缺陷)的概率;
步骤5通过步骤3中所述训练队数据集进行优化训练为:
步骤6,对待预测的智能合约代码进行提取抽象语法树以及单词序列化操作,得到对应的单词序列;
步骤7,将优化后GRU网络模型的输出层进行调整,单词序列输入优化调整后GRU网络模型预测输出待预测的智能合约代码中是否存在缺陷;
步骤7所述将优化后GRU网络模型的输出层进行调整为:
优化后GRU网络模型的输出层得到来自Softmax层的概率向量,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,若有缺陷的概率值大于H=0.5,则输出1,表示对应的源代码存在缺陷;若无缺陷的概率值大于H,则输出0,表示对应的源代码不存在缺陷。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求所定义的范围。
Claims (4)
1.一种基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于,包括以下步骤:
步骤1:收集与以太坊、区块链相关的多个原始的智能合约代码;
步骤2:将原始的智能合约代码首先转化为XML抽象语法树,将XML抽象语法树以中序遍历的方式生成单词序列;
步骤3:通过人工标注的方式分析原始的智能合约代码中是否存在缺陷,并将标记结果作为GRU网络的标签,结合每个单词序列构建训练对数据集;
步骤4:将单词序列使用Word2Vec算法中的Skip-Gram模型构建智能合约代码的词嵌入矩阵;
步骤5:引入步骤4中所述词嵌入矩阵构建GRU网络模型,构建交叉熵损失模型,通过步骤3中所述训练对数据集进行优化训练,得到优化后GRU网络模型;
步骤6,对待预测的智能合约代码进行提取抽象语法树以及单词序列化操作,得到对应的单词序列;
步骤7,将优化后GRU网络模型的输出层进行调整,单词序列输入优化调整后GRU网络模型预测输出待预测的智能合约代码中是否存在缺陷;
步骤2所述单词序列的定义如下,
datai={tokeni,1,tokeni,2,tokeni,3,...,tokeni,L},i∈[1,M]
其中,M表示原始的智能合约代码的数量,datai表示第i个原始的智能合约代码对应的单词序列,tokeni,j为第i个原始的智能合约代码对应的单词序列中的第j个单词,j∈[1,L],L表示该单词序列中单词的数量;每一个单词为从源代码中提取出来的最小单位;
步骤3所述通过人工标注的方式分析原始的智能合约代码中是否存在缺陷为:
若人工分析原始的智能合约代码中存在缺陷,则标签为1,否则标签为0;
所述GRU网络的标签,具体定义如下,
labeli∈{0,1}i∈[1,M]
其中,M表示原始的智能合约代码的数量,labeli表示第i个原始的智能合约代码的缺陷状态,labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
将第i个原始的智能合约代码的缺陷状态转化成独热编码,即labeli=[0,1]表示无缺陷,labeli=[1,0]表示有缺陷;
步骤3所述结合每个单词序列构建训练对数据集为:
(datai,labeli)
i∈[1,M]。
2.根据权利要求1所述的基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于:
步骤4所述将单词序列使用Word2Vec算法中的Skip-Gram模型构建智能合约代码的词嵌入矩阵为:
步骤4.1,通过输入层、隐藏层、输出层构建三层神经网络;
步骤4.2,输入层接收的输入数据是单个目标单词labeli,i∈[1,M]
根据该单词在词汇表中的索引位置,将其转化为独热编码x;独热编码x的尺寸是V×1,V表示代码词汇表的大小,并固定每个词的顺序;
每个词的独热编码向量是一个稀疏向量,只有该词所在位置的元素是1,其他位置的元素都为0;
对于每一个向量Uc,c∈[1,2*m],再做Softmax运算得到概率输出结果Yc,c∈[1,2*m],其是一个V×1向量,其中每个单词分数的概率,计算方式如下第三公式所示:
yj是概率向量Yc中第j个值,将第一公式、第二公式代入第三公式,可得训练目标模型:
隐藏层得到2*m个相同的概率向量Yc,输出到输出层;
步骤4.5,在步骤4.4中,输出层得到了2*m个相同的Softmax概率向量Yc,每一个向量有一个对应的单词的独热编码;
Skip-Gram模型的训练目标是最大化公式训练目标模型,给定输入wI下,2*m个真实输出值wO,C的条件概率乘积;
其中,c∈[1,2*m],对于每个预测单词tokenc,均有
其中,j*为正确输出单词的索引值;
对于2*m中的每一个单词的预测都是独立的事件,则总损失函数E可以定义如下,
3.根据权利要求1所述的基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于:
步骤5所述GRU网络由:输入层、词嵌入层、GRU层、全连接层、Softmax层、输出层依次串联级联构建;
所述输入层:通过M个单词序列构建训练样本,具体定义如下,
datai={tokeni,1,tokeni,2,tokeni,3,...,tokeni,L},i∈[1,M]
inputi={veci,1,veci,2,veci,3,...,veci,L},i∈[1,M]
trans(x)=[0,0,0,...,1,0.0],index(1)=x
其中,datai是第i个单词序列,inputi是第i个单词序列对应的独热编码矩阵,大小为L×V,tokeni,j为第i个原始的智能合约代码对应的单词序列中的第j个单词,veci,j为对应单词token的独热编码,通过trans(.)完成由单词到对应独热编码形式的转化,
L=600是每个单词序列的长度,若单词序列的长度小于L=600,则以零填充使得inputi的单词序列的长度达到L,M为训练集中原始的智能合约代码的数量,单个独热编码向量的长度为V,为词汇表数量;
经过输入层后,得到的大小为M×L×V的张量,输出到词嵌入层;
输入的批次训练样本中每个单词序列向量经过所述词嵌入层之后,将每个单词序列的独热编码转换为词嵌入表示,输出M×L×N的张量;
M为训练集中单词序列的数量,L为每个单词序列的长度,N为词嵌入维度;
所述的GRU层接收来自所述词嵌入层的输出;
GRU层由多个子GRU层串联而成,每个子GRU层的结构完全一致,第p子GRU层的定义如下,
第p子GRU层中存在多个时序隐藏层,并且时序数量与单词序列的固定长度一致,为L;
每个时序隐藏层的输入是单个单词的词嵌入表示,其大小为1×N;
第p子GRU层中个第q个时序隐藏层接收该输入以及第q-1个时序隐藏层的状态hp,q-1后,经过运算将得到传递到第q+1时序隐藏层的状态hp,q;同时,每个时序都对应一个输出结果op,q,p∈[1,P],q∈[1,Q];
第p个子GRU层中的相邻两个时序隐藏层的更新表达式如下:
其中,*是矩阵中对应坐标的元素相乘,q为GRU层中的时序序号数,时序总数为一个固定值Q;若一份单词序列的长度大于Q,则截取Q长度,若一份单词序列的长度小于Q,则在后续补零填充;hp,q-1代表从第q-1时序隐藏层中传递下来的隐状态,hp,q代表传递给第q+1时序隐藏层的隐状态,zp,q是更新门,表达式如下:
对于第p个子GRU层的第q个时序隐藏层而言,输出结果表达式如下:
GRU层接收的输入张量尺寸为M×L×N,每一个时序的输入尺寸为1×N,单个子GRU层共L个时序隐藏层;
输入数据所有经过GRU层之后,输出最后一个时序的结果oP,Q,传递给全连接层;
对于第p个子GRU中的第q个时序隐藏层,其输入为xp,q,输出为一个中间输出结果op,q和中间隐状态hp,q,隐状态只用于GRU循环层中的信息传递,最终输出的是最后一个时序的oP,Q;
GRU中的每个时序对应子网络的神经元数量为G;经过所有GRU层后,输出的张量大小为M×G;
所述全连接层,接收来自GRU层的输出数据;
所述全连接层包括由连接层、Dropout层、激活层依次串联级联构成;
所述连接层的神经元数量为X;
所述Dropout层是按照一定比例,随机地使全连接层中的节点失活,失去传播和计算能力;
所述激活层的激活函数为ReLU函数;
ReLU函数的表达式如下:
ReLU(x)=max(x,0)x∈[-∞,+∞]
其中,x为任意实数;
经过全连接层后,输出得到尺寸为M×X的张量;
所述Softmax层,接收来自全连接层的输出,Softmax层的神经元数量为B,即进行有无缺陷的二分类预测判别;
输入数据是尺寸为M×X的张量,经过Softmax层后,输出1×2的概率向量S,再经过激活函数之前,得到1×2向量V;
向量V经过激活函数得到概率向量S的公式如下,
其中,j表示分类下标,j∈[1,2];
经过Softmax激活函数后,得到1×2的概率向量S,取其中较大值对应的标签:0或者1;
所述输出层,在训练中和实际使用中有所不同;
训练中的输出层,得到来自Softmax层的概率向量Sj,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,该概率向量中表示有缺陷即预测为正的概率值作为最终的输出与标签label进行损失值计算,并进行反向传播参数优化;
步骤5所述交叉熵损失模型为:
GRU网络的标签为步骤4中的判别结果;labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
交叉熵损失的定义如下,
其中,M为训练集中单词序列的数量,labeli标识单词序列i的标签,有缺陷的labeli=1,无缺陷的labeli=0;pi为第i个单词序列被预测为有缺陷的概率;
步骤5通过步骤3中所述训练队数据集进行优化训练为:
4.根据权利要求1所述的基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于:
步骤7所述将优化后GRU网络模型的输出层进行调整为:
优化后GRU网络模型的输出层得到来自Softmax层的概率向量,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,若有缺陷的概率值大于H,H∈(0,1),则输出1,表示对应的源代码存在缺陷;若无缺陷的概率值大于H,则输出0,表示对应的源代码不存在缺陷。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011310395.7A CN112416358B (zh) | 2020-11-20 | 2020-11-20 | 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011310395.7A CN112416358B (zh) | 2020-11-20 | 2020-11-20 | 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112416358A CN112416358A (zh) | 2021-02-26 |
CN112416358B true CN112416358B (zh) | 2022-04-29 |
Family
ID=74776947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011310395.7A Active CN112416358B (zh) | 2020-11-20 | 2020-11-20 | 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112416358B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741886B (zh) * | 2021-08-02 | 2023-09-26 | 扬州大学 | 一种基于图的语句级程序修复方法及系统 |
CN114065221B (zh) * | 2021-11-25 | 2024-05-03 | 广东伊莱特电器有限公司 | 一种智能合约漏洞检测方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3477569A1 (en) * | 2017-10-30 | 2019-05-01 | NEC Laboratories Europe GmbH | Method and system for securing smart contracts in blockchains |
CN109933991A (zh) * | 2019-03-20 | 2019-06-25 | 杭州拜思科技有限公司 | 一种智能合约漏洞检测的方法、装置 |
CN109977682A (zh) * | 2019-04-01 | 2019-07-05 | 中山大学 | 一种基于深度学习的区块链智能合约漏洞检测方法及装置 |
CN110427179A (zh) * | 2019-06-26 | 2019-11-08 | 西安电子科技大学 | 面向智能合约语言的msvl程序自动生成方法及系统 |
CN110543419A (zh) * | 2019-08-28 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于深度学习技术的智能合约代码漏洞检测方法 |
CN110659494A (zh) * | 2019-09-27 | 2020-01-07 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
CN110737899A (zh) * | 2019-09-24 | 2020-01-31 | 暨南大学 | 一种基于机器学习的智能合约安全漏洞检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11405182B2 (en) * | 2018-12-03 | 2022-08-02 | Ebay Inc. | Adaptive security for smart contracts using high granularity metrics |
-
2020
- 2020-11-20 CN CN202011310395.7A patent/CN112416358B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3477569A1 (en) * | 2017-10-30 | 2019-05-01 | NEC Laboratories Europe GmbH | Method and system for securing smart contracts in blockchains |
CN109933991A (zh) * | 2019-03-20 | 2019-06-25 | 杭州拜思科技有限公司 | 一种智能合约漏洞检测的方法、装置 |
CN109977682A (zh) * | 2019-04-01 | 2019-07-05 | 中山大学 | 一种基于深度学习的区块链智能合约漏洞检测方法及装置 |
CN110427179A (zh) * | 2019-06-26 | 2019-11-08 | 西安电子科技大学 | 面向智能合约语言的msvl程序自动生成方法及系统 |
CN110543419A (zh) * | 2019-08-28 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于深度学习技术的智能合约代码漏洞检测方法 |
CN110737899A (zh) * | 2019-09-24 | 2020-01-31 | 暨南大学 | 一种基于机器学习的智能合约安全漏洞检测方法 |
CN110659494A (zh) * | 2019-09-27 | 2020-01-07 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
Non-Patent Citations (2)
Title |
---|
IoT-Blockchain Enabled Optimized Provenance System for Food Industry 4.0 Using Advanced Deep Learning;Khan, PW等;《SENSORS》;20200623;第20卷(第10期);全文 * |
智能合约漏洞检测技术研究综述;孙家泽等;《西安邮电大学学报》;20200910;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112416358A (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111312329B (zh) | 基于深度卷积自动编码器的转录因子结合位点预测的方法 | |
CN110826638A (zh) | 基于重复注意力网络的零样本图像分类模型及其方法 | |
CN110490320B (zh) | 基于预测机制和遗传算法融合的深度神经网络结构优化方法 | |
CN113806494B (zh) | 一种基于预训练语言模型的命名实体识别方法 | |
CN112416358B (zh) | 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 | |
CN111597340A (zh) | 一种文本分类方法及装置、可读存储介质 | |
CN111046961B (zh) | 基于双向长短时记忆单元和胶囊网络的故障分类方法 | |
CN112668809B (zh) | 建立自闭症儿童康复效果预测模型的方法 | |
CN112732921B (zh) | 一种虚假用户评论检测方法及系统 | |
CN109933682B (zh) | 一种基于语义与内容信息结合的图像哈希检索方法及系统 | |
CN114821340A (zh) | 一种土地利用分类方法及系统 | |
CN115032602A (zh) | 一种基于多尺度卷积胶囊网络的雷达目标识别方法 | |
CN111708865B (zh) | 一种基于改进XGBoost算法的技术预见及专利预警分析方法 | |
CN113591971A (zh) | 基于dpi时间序列词嵌入向量的用户个性行为预测方法 | |
CN112785479A (zh) | 一种基于少样本学习的图像隐形水印通用检测方法 | |
CN112559741A (zh) | 核电设备缺陷记录文本分类方法、系统、介质及电子设备 | |
CN116975776A (zh) | 一种基于张量和互信息的多模态数据融合方法和设备 | |
CN116579347A (zh) | 一种基于动态语义特征融合的评论文本情感分析方法、系统、设备及介质 | |
CN111709442A (zh) | 一种面向图像分类任务的多层字典学习方法 | |
Jing et al. | NASABN: A neural architecture search framework for attention-based networks | |
CN115422945A (zh) | 一种融合情感挖掘的谣言检测方法及系统 | |
CN110796195B (zh) | 一种包含在线小样本激励的图像分类方法 | |
CN114398076A (zh) | 一种基于深度学习的面向对象程序方法命名异味检测方法 | |
CN111858682A (zh) | 一种基于深度学习的裁判文书逻辑评估方法及系统 | |
Ma et al. | Data model of key indicators of urban architectural design based on long-and short-term convolutional memory network |
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 |