本发明专利技术公开了一种代码语义克隆检测方法、装置及系统,所述代码语义克隆检测方法包括将源代码处理成向量表示;将所述代码表示输入至预先训练好的Siamese网络模型,由所述神经网络模型预测输入的向量表示是否构成克隆对;所述Siamese网络模型包括Transformer编码器、图卷积网络模型和分类器,使用一致的权重来处理两个不同的输入,使得生成的图嵌入对具有可比性;使用LIME解释器对所述神经网络模型的预测结果进行解释。本发明专利技术不仅能够准确识别代码的语义克隆,还可以为检测结果提供直观的解释。
【技术实现步骤摘要】
本专利技术属于软件程序处理领域,具体涉及一种代码语义克隆检测方法、装置及系统。
技术介绍
1、随着软件工程的蓬勃发展,为了提升开发效率,代码复用变得日益普及。然而,这带来了大量的代码冗余和相似性,被广泛称为“代码克隆”。“代码克隆”不仅加重了代码维护的负担,而且增加了错误和安全隐患的风险。因此,代码克隆检测逐渐上升为软件工程领域的研究焦点。
2、现有技术中的代码克隆检测方法主要存在以下问题:
3、(1)传统的代码克隆检测方法主要关注代码的结构或语法相似性,导致那些结构或语法上有差异但语义上高度相似的代码片段被忽略。这些方法的泛化能力受限,因此可能会遗漏实际存在的代码语义克隆,从而增加了代码维护的复杂性和bug的潜在风险。
4、(2)现有的语义克隆检测方法在深入挖掘代码的语义信息时相对粗糙,这些方法往往难以识别和处理代码的深层语义细节,尤其是代码片段间那些微妙而关键的联系。这不仅降低了代码语义克隆检测的准确性,也增加了误报和漏报的可能性。
5、(3)虽然机器学习模型在多个领域都展现出了卓越的性能,但这些模型的决策过程常常是黑盒的,缺乏透明性。用户和开发人员由于无法理解模型的预测逻辑,可能会对模型的检测结果存有疑虑。这种缺乏解释性的情况对模型在实际开发中的采纳率和可靠性构成了障碍。
技术实现思路
1、针对上述问题,本专利技术提出一种代码语义克隆检测方法、装置及系统,不仅能够准确识别代码的语义克隆,还可以为检测结果提供直观的解释。
<
p>2、为了实现上述技术目的,达到上述技术效果,本专利技术通过以下技术方案实现:3、第一方面,本专利技术提供了一种代码语义克隆检测方法,包括:
4、将源代码处理成向量表示;
5、将所述代码表示输入至预先训练好的siamese网络模型,由所述神经网络模型预测输入的向量表示是否构成克隆对;所述siamese网络模型包括transformer编码器、图卷积网络模型和分类器,使用一致的权重来处理两个不同的输入,使得生成的图嵌入对具有可比性;
6、使用lime解释器对所述神经网络模型的预测结果进行解释。
7、可选地,所述将源代码处理成向量表示,包括:
8、利用tinypdg工具解析源代码,获得控制流图;
9、采用word2vec模型进行源代码的预训练,生成语义信息;
10、基于所述控制流图表示和语义信息,生成对应的向量表示。
11、可选地,所述transformer编码器包括多个堆叠的结构相同的transformer层,各transformer层均包含多头自注意力子层和前馈神经网络。
12、可选地,所述transformer编码器对接收到的数据执行以下操作:
13、对向量表示x加入位置编码,生成xpos:
14、xpos=x+pe
15、其中,pe为位置编码,是可学习的参数;
16、对于每个transformer层,将xpos通过线性投影转换为多个头的查询、键和值:
17、
18、
19、
20、式中,qh、kh、vh分别表示注意力头h的查询、键和值,分别表示每个注意力头h相关联的权重矩阵;
21、每个注意力头的注意力得分通过计算qh和kh的点积并除以来进行尺度调整,之后应用softmax函数将其转换为概率分布,将所述概率分布和值vh相乘,得到每个元素的加权表示:
22、
23、式中,dk是键的维度;
24、将每个注意力头的输出整合,得到多头自注意力子层的输出ah;
25、将多头自注意力子层的输出ah输入至前馈神经网络,得到前馈神经网络的输出ffn(ah):
26、ffn(ah)=max(0,ahw1+b1)w2+b2
27、式中,w1、w2、b1,b2是前馈网络的权重和偏差;
28、每个transformer层的输出都通过残差连接加到该transformer层的输入上,并跟随一个归一化层,得到最终的输出output:
29、output=layernorm(x+sublayer(x))
30、其中,sublayer(x)是每个transformer层的输出。
31、可选地,所述图卷积网络模型包括顺次设置的多层图卷积网络、第一边池化层、museattention层、第二层边池化层、全局注意力层和跳跃连接模块;
32、所述多层图卷积网络包括多层图卷积,且集成了残差连接。
33、可选地,经transformer编码器处理后的特征矩阵被传递至所述多层图卷积网络,生成第一特征矩阵;
34、所述第一边池化层对所述第一特征矩阵进行下采样,生成第二特征矩阵;
35、所述museattention层包括多头注意力层和深度可分离卷积层,所述多头注意力层用于通过多头注意力机制并行地捕获不同子空间的信息,所述深度可分离卷积用于提取局部特征,生成第三特征矩阵;
36、所述第二层边池化对接收到的第三特征矩阵进行汇总和压缩,生成第四特征矩阵;
37、所述全局注意力层和跳跃连接模块基于所述第四特征矩阵,获得最终的图嵌入对。
38、可选地,所述分类器包括双向长短时记忆网络和全连接层;
39、所述双向长短时记忆网络对输入的图嵌入序列进行学习,同时考虑前向和后向的信息,确保从双向上下文中提取有意义的特征;
40、所述全连接层将双向长短时记忆网络的输出转化为预测值。
41、可选地,对于给定的图嵌入序列h,所述双向长短时记忆网络表示为:
42、
43、
44、其中,和分别表示在时刻t的前向和后向隐藏状态;
45、在双向长短时记忆网络的最后一个时间步,其隐藏状态被线性层接收,全连接层表示为:
46、out=w·hlast+b
47、式中,hlast是双向长短时记忆网络在最后一个时间步的隐藏状态,w和b分别是全连接层的权重矩阵和偏置向量;
48、经过全连接层的映射,所述siamese网络模型的输出是代码语义克隆检测的概率分布。
49、第二方面,本专利技术提供了一种代码语义克隆检测装置,包括:
50、向量处理模块,用于将源代码处理成向量表示;
51、克隆检测模块,用于将所述代码表示输入至预先训练好的siamese网络模型,由所述神经网络模型预测输入的向量表示是否构成克隆对;所述siamese网络模型包括transformer编码器、图卷积网络模型和分类器,使用一致的权重来处理两个不同的输入,使得生成的图嵌入对具有可比性;
52、解释模块,用于使用lime解释器对所述神经网络模型的预测结果进行解释。
53、本文档来自技高网
...
【技术保护点】
1.一种代码语义克隆检测方法,其特征在于,包括:
2.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于,所述将源代码处理成向量表示,包括:
3.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于:所述Transformer编码器包括多个堆叠的结构相同的Transformer层,各Transformer层均包含多头自注意力子层和前馈神经网络。
4.根据权利要求3所述的一种代码语义克隆检测方法,其特征在于:所述Transformer编码器对接收到的数据执行以下操作:
5.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于:所述图卷积网络模型包括顺次设置的多层图卷积网络、第一边池化层、MUSEAttention层、第二层边池化层、全局注意力层和跳跃连接模块;
6.根据权利要求5所述的一种代码语义克隆检测方法,其特征在于:经Transformer编码器处理后的特征矩阵被传递至所述多层图卷积网络,生成第一特征矩阵;
7.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于:所述分类器包括双向长短时记忆网络和全连接层;
8.根据权利要求7所述的一种代码语义克隆检测方法,其特征在于:对于给定的图嵌入序列h,所述双向长短时记忆网络表示为:
9.一种代码语义克隆检测装置,其特征在于,包括:
10.一种代码语义克隆检测系统,其特征在于,包括存储介质和处理器;
...
【技术特征摘要】
1.一种代码语义克隆检测方法,其特征在于,包括:
2.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于,所述将源代码处理成向量表示,包括:
3.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于:所述transformer编码器包括多个堆叠的结构相同的transformer层,各transformer层均包含多头自注意力子层和前馈神经网络。
4.根据权利要求3所述的一种代码语义克隆检测方法,其特征在于:所述transformer编码器对接收到的数据执行以下操作:
5.根据权利要求1所述的一种代码语义克隆检测方法,其特征在于:所述图卷积网络模型包括顺次设置的多层图卷积网络、第一...
【专利技术属性】
技术研发人员:王海叶,瞿治国,孙乐,
申请(专利权)人:南京信息工程大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。