[发明专利]基于加权递归自编码器的快速代码克隆检测方法及装置有效
申请号: | 202011329523.2 | 申请日: | 2020-11-24 |
公开(公告)号: | CN112433756B | 公开(公告)日: | 2021-09-07 |
发明(设计)人: | 刘伟;王嬴超;李晓伟;曾杰;杨洋;李春静;刘金松;吕方雷 | 申请(专利权)人: | 北京京航计算通讯研究所 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/901;G06F40/284;G06F40/30;G06K9/62 |
代理公司: | 北京天达知识产权代理事务所(普通合伙) 11386 | 代理人: | 胡时冶 |
地址: | 100074 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 加权 递归 编码器 快速 代码 克隆 检测 方法 装置 | ||
1.一种基于加权递归自编码器的快速代码克隆检测方法,其特征在于,包括下述步骤:
获取待检测代码数据集,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;
基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于所述每一代码对应的最终向量得到最终向量集合;
基于所述最终向量集合构建导航展开图,并根据所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对;包括下述步骤:
基于所述导航展开图计算最终向量集合中任意两个最终向量的欧氏距离;
判断所述欧氏距离是否小于阈值门槛,若是,则两个最终向量对应的代码为代码克隆对;若否,则两个最终向量对应的代码不是代码克隆对;所述任意两个最终向量的欧氏距离计算公式为:
式中,dist(r,v)表示任意两个最终向量的欧氏距离,r和v表示向量集合中的任意两个最终向量,r=(x1,x2,...,xn),v=(y1,y2,...,yn),n表示维度;
基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,包括下述步骤:
遍历所述二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句;
获取所述函数语句中每个单词的词向量;
基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值;计算每一级语义向量对应的权值,公式如下:
式中,TF-IDF为每一级语义向量对应的权重,nk,j为非叶子节点序列出现次数,∑knk,j为全部非叶子节点序列的总和,|D|为程序语料库中的文件总数;|{j:ti∈dj}|表示包含词语ti的文件数目;
将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。
2.根据权利要求1所述的基于加权递归自编码器的快速代码克隆检测方法,其特征在于,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树,包括下述步骤:
基于所述待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树;
对所述每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,所述二叉树包括叶子节点和非叶子节点。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京航计算通讯研究所,未经北京京航计算通讯研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011329523.2/1.html,转载请声明来源钻瓜专利网。