欢迎来到知嘟嘟! 联系电话:13336804447 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13336804447
知嘟嘟经纪人
收藏
专利号: 2025103939683
申请人: 广东工业大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2025-11-06
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种基于深度学习的代码相似度检测方法,其特征在于,包括具体步骤如下:S1:收集代码,对代码进行预处理,其操作包括删除相应的注释内容、对变量名和函数名进行规范化处理、代码格式统一,将处理以后的代码进行任意的两两组合以及代码相似度评级得到一个三元组<代码A,代码B,相似度y>,所有三元组的集合构成一个代码数据集,其代码A或代码B设为代码C;

S2:利用代码提取工具对代码C进行解析并生成语法树,遍历语法树得到代码C的邻接矩阵和深度权重矩阵d'C,再通过Word2Vec将代码C转化为指定维度的特征向量,得到特征矩阵ZC;

S3:将和ZC输入AST-GCN模型,AST-GCN对代码C的语法树进行语法特征聚合,得到语法特征矩阵最后通过多头自注意力层对进行特征增强,得到代码C的语法特征向量VgC;

S4:对代码C进行分词处理,利用分词处理工具将代码C拆分为若干个词法单元,得到一个词法单元序列XC;

S5:构建一个多尺度语义特征自适应融合模型MSF,用于对代码语义特征进行多尺度融合及提取,将XC输入到MSF模型后,得到表征代码语义的特征向量VsC;

S6:利用门控机制自适应融合代码C语法特征向量VgC和语义特征向量VsC,得到融合向量VfusC;

S7:将VfusA和VfusB进行拼接,得到待测向量Vt,将Vt输入至三层感知机进行相似度的比较,输出相似度得分计算与真实值之间的损失值loss,并反向更新可学习语法矩阵WgC与可学习语义矩阵WsC;

S8:将训练好的代码相似度检测模型应用于代码相似度检测任务中,对实际输入的任意代码对<代码X,代码Y>进行相似度计算,得到所述代码对的相似度得分;

所述S3的具体步骤如下:

S31:构建AST-GCN模型,用于提取代码C的语法特征矩阵其AST-GCN模型由输入层、特征更新层以及输出层构成;AST-GCN模型将语法树中每一个节点自身的特征与其邻居节点、兄弟节点的特征进行融合,得到包含代码局部语法特征的特征序列最后经过线性变换得到语法特征矩阵S32:利用多头自注意力机制对进行注意力权重计算,将各个注意力头输出的语法特征序列进行concat拼接,再经过一个线性变换得到语法特征向量VgC。

2.根据权利要求1所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S31的具体步骤如下:S311:按层次遍历代码C的语法树,得到兄弟矩阵和深度权重矩阵d'C;

S312:将d′C、以及ZC输入特征更新层,特征更新层由L层卷积层构成,设语法树在特征更新层中的第l+1层(l∈(0,1,…,L-1))进行特征更新,则在其层输出的特征矩阵由三部分特征相加组成,分别是兄弟特征矩阵层次邻居特征矩阵以及特征更新层上一层输出的特征矩阵S313:将以及相加,得到在特征更新层第l+1层更新后的特征矩阵其中ReLU是激活函数;

S314:在经过特征更新层最终层计算后,输出特征矩阵其中i∈(1,2,…,n)为ZC中各个节点特征序列在特征更新层最终层输出的更新特征序列,对做一个线性变换得到语法特征矩阵

3.根据权利要求2所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S311的具体步骤如下:S3111:按层次遍历语法树,对遍历过程中遇到的任意节点r,根据节点之间的邻接关系确定r的兄弟节点,由此得到兄弟矩阵在中存储语法树节点之间的所有兄弟关系,即如果节点p和节点q为兄弟关系,则有xp,q、xp,q=xq,p=1;否则xp,q=xq,p=0;

S3112:在遍历语法树时,将每个节点在语法树中的深度记录在深度矩阵dC中,dC是一个对角矩阵,其对角线上的值为各个节点的深度;根据预先设定的最大临界深度m调整特征聚合时的权重系数,对dC中任意深度大于m的节点i,i的值被替换为其中α为缩放系数,di表示节点i的深度;而对于任意深度小于等于m的节点j,j的值被替换为1,完成上述权重系数的调整后,最终得到深度权重矩阵d'C;

所述S312的具体步骤如下:

S3121:计算兄弟特征矩阵利用和进行特征聚合操作,得到其中是度矩阵的逆矩阵,Ws是权重矩阵;

S3122:对于在语法树中较深的节点,为了减小这些节点的特征对代码整体相似度的影响,将左乘深度权重矩阵d'C再进行特征聚合,得到层次邻居特征矩阵其中Wn是权重矩阵。

4.根据权利要求1所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S5的具体步骤如下:S51:首先将XC输入CodeBERT中,对CodeBERT每一个自注意力头输出的语义序列进行concat操作,得到初步表征代码语义的特征向量,再经线性变换得到代码C的语义向量vC;

S52:对vC进行下采样操作,得到语义粗粒度序列再将vC和输入至引入了自适应遗忘因子的双向简单循环单元F-BiRSU,得到代码C的语义特征序列HC;

S53:利用自注意力层对HC进行进一步语义增强,使HC能够融入整个序列来自其他位置的信息,更好的捕捉代码全局的语义信息,最终得到代码C的语义特征向量VsC。

5.根据权利要求4所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S52的具体步骤如下:S521:采用最大池化对vC进行下采样操作,得到一个语义粗粒度序对于任意1≤i≤m,其计算公式如下:其中,是代码C的语义向量,k为最大池化窗口的大小,n为k的整数倍;

S522:构建F-BiSRU模块,用于从vC和中提取语义特征序列HC,其F-BiSRU模块由正向FSRU网络和反向FSRU网络构成,每一个网络都包含若干个FSRU单元;

S523:将和进行拼接操作concat得到并通过一个线性变换后得到语义特征序列HC,即:其中

所述S522的具体步骤如下:

S5221:首先定义门控向量IC,用于控制和vC在每一时刻输入的时序序列的融合比例,IC的计算公式如下:其中Sigmoid是激活函数,Wt是权重矩阵,是偏置向量,表示将vC和在t时刻的时序序列和进行拼接,然后将和按照IC进行多尺度信息融合,得到其中⊙是元素级乘法操作;

S5222:在计算正向FSRU网络t时刻遗忘门的输出时,引入上一时刻隐藏状态将与进行拼接作为更新的参数,具体计算公式如下:其中Wf是权重矩阵,bf是偏置向量,为正向FSRU网络上一时刻的隐藏状态,是基于的方差的统计特性函数,θ为系数,用于缩放值的大小;

正向FSRU网络t时刻的重置门rt、记忆细胞ct以及在t时刻输出的正向隐藏状态计算过程如下:反向FSRU网络在t时刻输出的反向隐藏状态计算步骤与正向FSRU网络在t时刻输出的正向隐藏状态计算步骤相同,但在计算遗忘门时引入的是反向FSRU网络的上一刻隐藏状态

6.根据权利要求1所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S6的具体步骤如下:S61:设计一个由可学习语法矩阵WgC和偏置值bgC构成的线性层,生成代码C的语法门控向量ggC:ggC=ReLU(WgCVgC+bgC)

同样设计一个由可学习语义矩阵WsC和偏置值bsC构成的线性层,生成代码C的语义门控向量gsC:gsC=ReLU(WsCVsC+bsC)

计算代码C的语法特征向量的融合权重αC和语义特征向量的融合权重βC:βC=1-αC

S62:利用αC、βC对VgC、VsC加权求和得到代码C最终的融合向量VfusC:VfusC=αCVgC+βCVsC;

其中,由于在S1中代码A或代码B设为代码C,因此VfusC实际上同时代表代码A的融合向量VfusA、代码B的融合向量VfusB,即经过S62后,已得到VfusA和VfusB。

7.根据权利要求6所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S7的具体步骤如下:S71:将融合向量VfusA、VfusB进行拼接,得到待测向量Vt:其中表示拼接操作;

S72:将Vt输入三层感知机训练,输出0到1之间的值作为代码A与代码B的相似度得分Z1=ReLU(W1Vt+b1)

Z2=ReLU(W2Z1+b2)

Z3=ReLU(W3Z2+b3)

其中W1、W2和W3是权重矩阵,b1、b2和b3是偏置向量,Z1、Z2和Z3分别是三层感知机中第一层、第二层和第三层输出的特征表示;

S73:计算与真实相似值之间的损失值loss,计算公式如下:其中yi是本次训练的代码A和代码B之间的真实相似值,其值越接近1代表代码A与代码B越相似;

S74:利用损失值loss对可学习语法矩阵WgC和可学习语义矩阵WsC进行反向更新。

8.根据权利要求7所述的一种基于深度学习的代码相似度检测方法,其特征在于,所述S74的具体步骤如下:S741:对WgC的更新过程如下:

S742:对WsC的更新过程如下:

其中表示偏导数,η1、η2为学习率;

S743:通过更新WgC以及WsC,使得门控机制能够自适应融合代码的语法与语义特征向量,提高计算相似度得分的准确率。