CN112416358B - 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 - Google Patents

一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 Download PDF

Info

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
Application number
CN202011310395.7A
Other languages
English (en)
Other versions
CN112416358A (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.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
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 Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN202011310395.7A priority Critical patent/CN112416358B/zh
Publication of CN112416358A publication Critical patent/CN112416358A/zh
Application granted granted Critical
Publication of CN112416358B publication Critical patent/CN112416358B/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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • 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)
  • 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;
步骤4.3,输入层通过第一权重矩阵
Figure BDA0002789641780000041
将独热编码转化成N维向量
Figure BDA0002789641780000042
输出至隐藏层;其中第一权重矩阵
Figure BDA0002789641780000043
的尺寸为V×N,N为词嵌入维度;
输入的独热编码经过矩阵
Figure BDA0002789641780000044
如下第一公式所示,
Figure BDA0002789641780000045
得到
Figure BDA0002789641780000046
为N×1隐藏层向量,是输入单词的词向量表示;
由于独热编码中只存在一个1,则上述计算过程得到的向量为权重矩阵
Figure BDA0002789641780000047
中的第k行向量。其中k表示,在对应独热编码中,xk=1;
步骤4.4,隐藏层通过第二权重矩阵,将步骤4.3中的向量
Figure BDA0002789641780000048
转化成2*m个概率向量Yc,c∈[1,2*m],输出至输出层;
其中第二权重矩阵
Figure BDA0002789641780000049
的个数为2*m,矩阵的尺寸均为N×V,且权重参数共享,其中,2*m表示由中间值需要去预测的上下文词的个数目标单词前面m个,目标单词后面m个;
N×1的隐藏层向量
Figure BDA0002789641780000051
与单个
Figure BDA0002789641780000052
进行计算后,可以得到词汇表中每个单词的分数uj,计算方式如下第二公式所示:
Figure BDA0002789641780000053
Figure BDA0002789641780000054
是权重矩阵
Figure BDA0002789641780000055
的第j列;
与2*m个特征矩阵
Figure BDA0002789641780000056
计算后,最终得到2*m个V×1的向量Uc,c∈[1,2*m],由于
Figure BDA0002789641780000057
是参数共享的,因此所有2*m个输出向量均相等,每个向量中的值即上述词汇表中每个单词wj的分数uj
对于每一个向量Uc,c∈[1,2*m],再做Softmax运算得到概率输出结果Yc,c∈[1,2*m],其是一个V×1向量,其中每个单词分数的概率,计算方式如下第三公式所示:
Figure BDA0002789641780000058
yj是概率向量Yc中第j个值,将第一公式、第二公式式代入第三公式,可得训练目标模型:
Figure BDA0002789641780000059
隐藏层得到2*m个相同的概率向量Yc,输出到输出层;
步骤4.5,在步骤4.4中,输出层得到了2*m个相同的Softmax概率向量Yc,每一个向量有一个对应的单词的独热编码;
Skip-Gram模型的训练目标是最大化公式训练目标模型,给定输入wI下,2*m个真实输出值wO,C的条件概率乘积;
其中,c∈[1,2*m],对于每个预测单词tokenc,均有
Figure BDA00027896417800000510
其中,j*为正确输出单词的索引值;
对于2*m中的每一个单词的预测都是独立的事件,则总损失函数E可以定义如下,
Figure BDA0002789641780000061
其中,j*为是词汇表中第c个真实输出单词的索引,c∈[1,2*m];
步骤4.6,基于上述损失函数及梯度下降算法,对Skip-Gram进行参数优化,训练完成后,步骤4.3中的第一权重矩阵即
Figure BDA0002789641780000062
即可作为词嵌入矩阵;
作为优选,步骤5所述GRU网络由:输入层、词嵌入层、GRU层、全连接层、Softmax层、输出层依次串联级联构建;
所述输入层:通过M个单词序列构建训练样本,具体定义如下,
Figure BDA0002789641780000063
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的张量,输出到词嵌入层;
所述词嵌入层,引入步骤5所述的第一权重矩阵构建特征矩阵即
Figure BDA0002789641780000064
具体定义如下:
Figure BDA0002789641780000071
其中,
Figure BDA0002789641780000072
的大小为V×N,V为词汇表数量,N为词嵌入维度;
输入的批次训练样本中每个单词序列向量经过所述词嵌入层之后,将每个单词序列的独热编码转换为词嵌入表示,输出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层中的相邻两个时序隐藏层的更新表达式如下:
Figure BDA0002789641780000073
其中,*是矩阵中对应坐标的元素相乘,q为GRU层中的时序序号数,时序总数为一个固定值Q。若一份单词序列的长度大于Q,则截取Q长度,若一份单词序列的长度小于Q,则在后续补零填充。hp,q-1代表从第q-1时序隐藏层中传递下来的隐状态,hp,q代表传递给第q+1时序隐藏层的隐状态,zp,q是更新门,表达式如下:
Figure BDA0002789641780000074
其中,
Figure BDA0002789641780000075
Figure BDA0002789641780000076
为待训练的参数矩阵,σ(.)为sigmoid函数,xp,q为第p个子GRU层中的第q个时序隐藏层的输入;
Figure BDA0002789641780000077
为当前时刻的隐藏层信息,其表达式如下:
Figure BDA0002789641780000081
Figure BDA0002789641780000082
其中,rp,q是重置门,
Figure BDA0002789641780000083
均为参数矩阵。
对于第p个子GRU层的第q个时序隐藏层而言,输出结果表达式如下:
Figure BDA0002789641780000084
其中,
Figure BDA0002789641780000085
是参数矩阵。
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的公式如下,
Figure BDA0002789641780000091
其中,j表示分类下标,j∈[1,2];
经过Softmax激活函数后,得到1×2的概率向量S,取其中较大值对应的标签:0或者1。
所述输出层,在训练中和实际使用中有所不同;
训练中的输出层,得到来自Softmax层的概率向量Sj,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,该概率向量中表示有缺陷即预测为正的概率值作为最终的输出与标签label进行损失值计算,并进行反向传播参数优化;
步骤5所述交叉熵损失模型为:
GRU网络的标签为步骤4中的判别结果。labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
交叉熵损失的定义如下,
Figure BDA0002789641780000092
其中,M为训练集中单词序列的数量,labeli标识单词序列i的标签,有缺陷的labeli=1,无缺陷的labeli=0;pi为第i个单词序列被预测为正(有缺陷)的概率;
步骤5通过步骤3中所述训练队数据集进行优化训练为:
通过Adam进行优化训练,优化参数为GRU层中
Figure BDA0002789641780000093
Figure BDA0002789641780000094
以及全连接层中参数矩阵,用于构建优化后GRU网络模型;
作为优选,步骤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.3,输入层通过第一权重矩阵
Figure BDA0002789641780000121
(附图5中
Figure BDA0002789641780000122
),将独热编码转化成N维向量
Figure BDA0002789641780000123
(附图5中h),输出至隐藏层;其中第一权重矩阵
Figure BDA0002789641780000124
的尺寸为V×N,V=100,000为词汇表的大小,N=150为词嵌入维度;
输入的独热编码经过矩阵
Figure BDA0002789641780000125
如下第一公式所示,
Figure BDA0002789641780000126
得到
Figure BDA0002789641780000127
为N×1隐藏层向量,是输入单词的词向量表示,N=150为词嵌入维度;
由于独热编码中只存在一个1,则上述计算过程得到的向量为权重矩阵
Figure BDA0002789641780000128
中的第k行向量。其中k表示,在对应独热编码中,xk=1,k∈[1,V];
步骤4.4,隐藏层(附图5中Hidden Layer)通过第二权重矩阵(附图5中
Figure BDA0002789641780000129
),将步骤4.3中的向量
Figure BDA00027896417800001210
转化成2*m个概率向量Yc,c∈[1,2*m],输出至输出层(附图5中OutputLayer);
其中第二权重矩阵
Figure BDA00027896417800001211
的个数为2*m,矩阵的尺寸均为N×V,且权重参数共享,其中,2*m=6表示由中间值需要去预测的上下文词的个数,目标单词前面m(=3)个,目标单词后面m(=3)个;
N×1的隐藏层向量
Figure BDA00027896417800001212
与单个
Figure BDA00027896417800001213
进行计算后,可以得到词汇表中每个单词的分数uj,计算方式如下第二公式所示:
Figure BDA0002789641780000131
Figure BDA0002789641780000132
是权重矩阵
Figure BDA0002789641780000133
的第j列。
与2*m个特征矩阵
Figure BDA0002789641780000134
计算后,最终得2*m个V×1的向量Uc,c∈[1,2*m],由于
Figure BDA0002789641780000135
是参数共享的,因此所有2*m个输出向量均相等,每个向量中的值即上述词汇表中每个单词wj的分数uj,其中2*m为特征矩阵
Figure BDA0002789641780000136
个数;
对于每一个向量Uc,c∈[1,2*m],再做Softmax运算得到概率输出结果Yc(附图5中Yc),c∈[1,2*m],其是一个V×1向量,其中每个单词分数的概率,计算方式如下第三公式所示:
Figure BDA0002789641780000137
yj是概率向量Yc中第j个值,将第一公式、第二公式式代入第三公式,可得训练目标模型:
Figure BDA0002789641780000138
隐藏层得到2*m个相同的概率向量Yc,输出到输出层;
步骤4.5,在步骤4.4中,输出层得到了2*m个相同的Softmax概率向量Yc,每一个向量有一个对应的单词的独热编码;
Skip-Gram模型的训练目标是最大化公式训练目标模型,给定输入wI下,2*m个真实输出值wO,C的条件概率乘积;
其中,c∈[1,2*m],对于每个预测单词tokenc,均有
Figure BDA0002789641780000139
其中,j*为正确输出单词的索引值;
对于2*m个单词的每个预测都是独立的事件,则总损失函数E可以定义如下,
Figure BDA0002789641780000141
其中,j*为是词汇表中第c个真实输出单词的索引,c∈[1,2*m],m=3;
步骤4.6,基于上述损失函数及梯度下降算法,对Skip-Gram进行参数优化,训练完成后,步骤4.3中的第一权重矩阵即
Figure BDA0002789641780000143
即可作为词嵌入矩阵;
步骤5:引入步骤4中所述词嵌入矩阵构建GRU网络模型,构建交叉熵损失模型,通过步骤3中所述训练队数据集进行优化训练,得到优化后GRU网络模型,GRU网络模型如附图6所示;
步骤5所述GRU网络由:输入层、词嵌入层、GRU层、全连接层、Softmax层、输出层依次串联级联构建,模型结构如附图6所示;
所述输入层(附图6中Input):通过22,000个单词序列构建训练样本,具体定义如下,
Figure BDA0002789641780000142
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的张量,输出到词嵌入层;
所述词嵌入层(附图6中Embedding),引入步骤5所述的第一权重矩阵构建特征矩阵即
Figure BDA0002789641780000151
具体定义如下:
Figure BDA0002789641780000152
其中,
Figure BDA0002789641780000153
的大小为V×N,V=100,000为词汇表数量,N=150为词嵌入维度;
输入的批次训练样本中每个单词序列向量经过所述词嵌入层之后,将每个单词序列的独热编码转换为词嵌入表示,输出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层中的相邻两个时序隐藏层的更新表达式如下:
Figure BDA0002789641780000154
其中,*是矩阵中对应坐标的元素相乘,q为GRU层中的时序序号数,时序总数为一个固定值Q=600。若一份单词序列的长度大于Q,则截取Q长度,若一份单词序列的长度小于Q,则在后续补零填充。hp,q-1代表从第q-1时序隐藏层中传递下来的隐状态,hp,q代表传递给第q+1时序隐藏层的隐状态,zp,q是更新门,表达式如下:
Figure BDA0002789641780000161
其中,
Figure BDA0002789641780000162
Figure BDA0002789641780000163
为待训练的参数矩阵,σ(.)为sigmoid函数,xp,q为第p个子GRU层中的第q个时序隐藏层的输入;
Figure BDA0002789641780000164
为当前时刻的隐藏层信息,其表达式如下:
Figure BDA0002789641780000165
Figure BDA0002789641780000166
其中,rp,q是重置门,
Figure BDA0002789641780000167
均为参数矩阵。
对于第p个子GRU层的第q个时序隐藏层而言,输出结果表达式如下:
Figure BDA0002789641780000168
其中,
Figure BDA0002789641780000169
是参数矩阵。
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的公式如下,
Figure BDA0002789641780000171
其中,j表示分类下标,j∈[1,2];
经过Softmax激活函数后,得到1×2的概率向量S,取其中较大值对应的标签:0或者1。
所述输出层,在训练中和实际使用中有所不同;
训练中的输出层,得到来自Softmax层的概率向量Sj,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,该概率向量中表示有缺陷即预测为正的概率值作为最终的输出与标签label进行损失值计算,并进行反向传播参数优化;
步骤5所述交叉熵损失模型为:
GRU网络的标签为步骤4中的判别结果。labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
交叉熵损失的定义如下,
Figure BDA0002789641780000172
其中,M=22,000为训练集中单词序列的数量,labeli标识单词序列i的标签,有缺陷的labeli=1,无缺陷的labeli=0;pi为第i个单词序列被预测为正(有缺陷)的概率;
步骤5通过步骤3中所述训练队数据集进行优化训练为:
通过Adam进行优化训练,优化参数为GRU层中
Figure BDA0002789641780000173
Figure BDA0002789641780000181
以及全连接层中参数矩阵,用于构建优化后GRU网络模型;
步骤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;
步骤4.3,输入层通过第一权重矩阵
Figure FDA0003555376820000021
将独热编码转化成N维向量
Figure FDA0003555376820000022
输出至隐藏层;其中第一权重矩阵
Figure FDA0003555376820000023
的尺寸为V×N,N为词嵌入维度;
输入的独热编码经过矩阵
Figure FDA0003555376820000024
如下第一公式所示,
Figure FDA0003555376820000025
得到
Figure FDA0003555376820000026
为N×1隐藏层向量,是输入单词的词向量表示;
由于独热编码中只存在一个1,则上述计算过程得到的向量h为权重矩阵
Figure FDA0003555376820000027
中的第k行向量;其中k表示,在对应独热编码中,xk=1;
步骤4.4,隐藏层通过第二权重矩阵,将步骤4.3中的向量
Figure FDA0003555376820000028
转化成2*m个概率向量Yc,c∈[1,2*m],输出至输出层;
其中第二权重矩阵
Figure FDA0003555376820000029
的个数为2*m,矩阵的尺寸均为N×V,且权重参数共享,其中,2*m表示由中间值需要去预测的上下文词的个数目标单词前面m个,目标单词后面m个;
N×1的隐藏层向量
Figure FDA00035553768200000210
与单个
Figure FDA00035553768200000211
进行计算后,可以得到词汇表中每个单词的分数uj,计算方式如下第二公式所示:
Figure FDA0003555376820000031
Figure FDA0003555376820000032
是权重矩阵
Figure FDA0003555376820000033
的第j列;
与2*m个特征矩阵
Figure FDA0003555376820000034
计算后,最终得到2*m个V×1的向量Uc,c∈[1,2*m],由于
Figure FDA0003555376820000035
是参数共享的,因此所有2*m个输出向量均相等,每个向量中的值即上述词汇表中每个单词wj的分数uj
对于每一个向量Uc,c∈[1,2*m],再做Softmax运算得到概率输出结果Yc,c∈[1,2*m],其是一个V×1向量,其中每个单词分数的概率,计算方式如下第三公式所示:
Figure FDA0003555376820000036
yj是概率向量Yc中第j个值,将第一公式、第二公式代入第三公式,可得训练目标模型:
Figure FDA0003555376820000037
隐藏层得到2*m个相同的概率向量Yc,输出到输出层;
步骤4.5,在步骤4.4中,输出层得到了2*m个相同的Softmax概率向量Yc,每一个向量有一个对应的单词的独热编码;
Skip-Gram模型的训练目标是最大化公式训练目标模型,给定输入wI下,2*m个真实输出值wO,C的条件概率乘积;
其中,c∈[1,2*m],对于每个预测单词tokenc,均有
Figure FDA0003555376820000038
其中,j*为正确输出单词的索引值;
对于2*m中的每一个单词的预测都是独立的事件,则总损失函数E可以定义如下,
Figure FDA0003555376820000041
其中,
Figure FDA0003555376820000042
为是词汇表中第c个真实输出单词的索引,c∈[1,2*m];
步骤4.6,基于上述损失函数及梯度下降算法,对Skip-Gram进行参数优化,训练完成后,步骤4.3中的第一权重矩阵即
Figure FDA0003555376820000043
即可作为词嵌入矩阵。
3.根据权利要求1所述的基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于:
步骤5所述GRU网络由:输入层、词嵌入层、GRU层、全连接层、Softmax层、输出层依次串联级联构建;
所述输入层:通过M个单词序列构建训练样本,具体定义如下,
Figure FDA0003555376820000044
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的张量,输出到词嵌入层;
所述词嵌入层,引入步骤5第一权重矩阵构建特征矩阵即
Figure FDA0003555376820000045
具体定义如下:
Figure FDA0003555376820000051
其中,
Figure FDA0003555376820000052
的大小为V×N,V为词汇表数量,N为词嵌入维度;
输入的批次训练样本中每个单词序列向量经过所述词嵌入层之后,将每个单词序列的独热编码转换为词嵌入表示,输出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层中的相邻两个时序隐藏层的更新表达式如下:
Figure FDA0003555376820000053
其中,*是矩阵中对应坐标的元素相乘,q为GRU层中的时序序号数,时序总数为一个固定值Q;若一份单词序列的长度大于Q,则截取Q长度,若一份单词序列的长度小于Q,则在后续补零填充;hp,q-1代表从第q-1时序隐藏层中传递下来的隐状态,hp,q代表传递给第q+1时序隐藏层的隐状态,zp,q是更新门,表达式如下:
Figure FDA0003555376820000054
其中,
Figure FDA0003555376820000055
Figure FDA0003555376820000056
为待训练的参数矩阵,σ(.)为sigmoid函数,xp,q为第p个子GRU层中的第q个时序隐藏层的输入;
Figure FDA0003555376820000057
为当前时刻的隐藏层信息,其表达式如下:
Figure FDA0003555376820000061
Figure FDA0003555376820000062
其中,rp,q是重置门,
Figure FDA0003555376820000063
均为参数矩阵;
对于第p个子GRU层的第q个时序隐藏层而言,输出结果表达式如下:
Figure FDA0003555376820000064
其中,
Figure FDA0003555376820000065
是参数矩阵;
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的公式如下,
Figure FDA0003555376820000071
其中,j表示分类下标,j∈[1,2];
经过Softmax激活函数后,得到1×2的概率向量S,取其中较大值对应的标签:0或者1;
所述输出层,在训练中和实际使用中有所不同;
训练中的输出层,得到来自Softmax层的概率向量Sj,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,该概率向量中表示有缺陷即预测为正的概率值作为最终的输出与标签label进行损失值计算,并进行反向传播参数优化;
步骤5所述交叉熵损失模型为:
GRU网络的标签为步骤4中的判别结果;labeli=0表示缺陷不存在,labeli=1表示缺陷存在;
交叉熵损失的定义如下,
Figure FDA0003555376820000072
其中,M为训练集中单词序列的数量,labeli标识单词序列i的标签,有缺陷的labeli=1,无缺陷的labeli=0;pi为第i个单词序列被预测为有缺陷的概率;
步骤5通过步骤3中所述训练队数据集进行优化训练为:
通过Adam进行优化训练,优化参数为GRU层中
Figure FDA0003555376820000073
Figure FDA0003555376820000074
以及全连接层中参数矩阵,用于构建优化后GRU网络模型。
4.根据权利要求1所述的基于结构化词嵌入网络的智能合约代码缺陷检测方法,其特征在于:
步骤7所述将优化后GRU网络模型的输出层进行调整为:
优化后GRU网络模型的输出层得到来自Softmax层的概率向量,其尺寸为1×2,向量中的两个概率值分别代表缺陷存在和缺陷不存在的概率值,若有缺陷的概率值大于H,H∈(0,1),则输出1,表示对应的源代码存在缺陷;若无缺陷的概率值大于H,则输出0,表示对应的源代码不存在缺陷。
CN202011310395.7A 2020-11-20 2020-11-20 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 Active CN112416358B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (7)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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