[发明专利]基于代码属性图的代码相似性检测方法在审
申请号: | 202210813094.9 | 申请日: | 2022-07-11 |
公开(公告)号: | CN115438709A | 公开(公告)日: | 2022-12-06 |
发明(设计)人: | 蔡波;于耀翔;范伦君 | 申请(专利权)人: | 云南恒于科技有限公司;武汉大学 |
主分类号: | G06K9/62 | 分类号: | G06K9/62;G06F11/36;G06N3/04;G06N3/08 |
代理公司: | 成都东恒知盛知识产权代理事务所(特殊普通合伙) 51304 | 代理人: | 何健雄 |
地址: | 650000 云南省昆明市昆明片区*** | 国省代码: | 云南;53 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 代码 属性 相似性 检测 方法 | ||
1.基于代码属性图的代码相似性检测方法,其特征在于:包括以下步骤:
一、生成代码属性图;
将源代码转化为具有丰富语义信息的代码属性图,然后基于得到的代码属性图提取其中的语法、语义信息,将代码属性图中的信息以矩阵的形式保存;
二、生成图嵌入;
先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向量表示;然后使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机制的图神经网络,生成一个具有代码属性图整体信息的向量表示;
三、程序相似性分析;
用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结果作为相似性检测的最终得分。
2.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:代码属性图使用joern生成,具体如下:
(1)由于joern是基于数据库开发的工具,需要将源代码的C++文件变为文件夹的形式;即源代码的.cpp后缀的文件单独放在以其为命名的文件夹中,并将这些文件夹全部放在一个大的文件夹下;
(2)把每个.cpp后缀的文件所在的文件夹输入joern中,得到.dot后缀的代码属性图表示;
(3)为了方便后续对代码属性图的处理,将其以图结构读取在内存中;然后遍历这个代码属性图的所有信息,包括节点和边的属性和值;
(4)提取遍历到的所有信息,并重新编码为代码属性图的最终表示。
3.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:使用预训练模型word2vec生成代码树形图中每个节点的初始向量表示,通过将所有节点的特征信息code的token输入预训练模型,可得到每个token经过加权平均后的向量表示。
4.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:GraphSAGE通过聚合其整个邻域的采样子集的特征来定义节点的邻域;这表示为:
其中Nv表示节点v的邻域集,AGGt表示聚合函数,W表示权值矩阵,||表示连接操作,σ表示非线性激活函数,htv表示节点v在t时刻的状态嵌入;使用平均聚合器作为聚合器函数AGGt;平均聚合器函数是跳过连接的一个变体函数;因此,公式改写为:
将GraphSAGE层数设置为3,因为GNN在深度学习架构中存在过平滑的问题,使用relu作为激活函数。
5.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:带有注意力机制的图神经网络分三步进行:
a、首先计算一个上下文向量嵌入C,通过平均所有的节点嵌入U,并通过一个非线性的relu激活函数来得到上下文向量嵌入;图的上下文向量C表示为:
其中,|V|为图中的节点数,W为维数为W∈R(D×D)的权重矩阵;通过学习权值矩阵W,上下文向量C提供了对整个图的结构属性的总结;
b、将每个节点的嵌入Uv的与上下文向量C的内积作为节点的权重矩阵衡量节点的重要性;
在加和平均方法计算出的上下文向量中,代表数学运算的节点嵌入对上下文向量c的影响更大,而与上下文向量c最相似的节点嵌入将获得更高的注意权重;通过这种方法,注意力神经网络将赋予数学运算的节点信息更多的权重;
c、经过以上两个步骤,神经网络为每个节点v赋予了权重av,当计算每个节点的注意权重av后,计算整体图嵌入h∈RD:
6.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结果作为相似性检测的最终得分,具体为:
一对代码片段的图嵌入向量作为模型的输入,经过一个双线性张量层,将两个向量编码为一个张量g;如公式所示:
通过计算出一个交互张量g{g∈1×K)},并将g输入全连接的神经网络中,即可得到代码对之间程序相似度的预测值;其中W1[1×K]∈RD×D×K,是一个权重张量,W2∈RK×2D是一个权重向量,b1∈RK,f3是一个激活函数,K是一个超参数,控制最后输出的图交互向量的维度;
全连接神经网络部分可以看作是一个有监督学习神经网络的二分类任务;最终的得到模型输出的图相似度分数为
其中W0,b0是全连接神经网络的参数;选用二元交叉熵作模型的loss函数;同时使用作adaMax为最后的全连接神经网络模型的优化器;
最后,为了能够预测代码片段之间的程序相似性,为模型最后设置一个预测阈值σ,当预测值大于超参数σ时,判断输入为代码克隆;即:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于云南恒于科技有限公司;武汉大学,未经云南恒于科技有限公司;武汉大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210813094.9/1.html,转载请声明来源钻瓜专利网。