CN112433756B - 基于加权递归自编码器的快速代码克隆检测方法及装置 - Google Patents

基于加权递归自编码器的快速代码克隆检测方法及装置 Download PDF

Info

Publication number
CN112433756B
CN112433756B CN202011329523.2A CN202011329523A CN112433756B CN 112433756 B CN112433756 B CN 112433756B CN 202011329523 A CN202011329523 A CN 202011329523A CN 112433756 B CN112433756 B CN 112433756B
Authority
CN
China
Prior art keywords
code
final
vector
detected
data set
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
CN202011329523.2A
Other languages
English (en)
Other versions
CN112433756A (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.)
Beijing Jinghang Computing Communication Research Institute
Original Assignee
Beijing Jinghang Computing Communication Research Institute
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 Beijing Jinghang Computing Communication Research Institute filed Critical Beijing Jinghang Computing Communication Research Institute
Priority to CN202011329523.2A priority Critical patent/CN112433756B/zh
Publication of CN112433756A publication Critical patent/CN112433756A/zh
Application granted granted Critical
Publication of CN112433756B publication Critical patent/CN112433756B/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/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Evolutionary Computation (AREA)
  • Evolutionary Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Navigation (AREA)

Abstract

本发明涉及一种基于加权递归自编码器的快速代码克隆检测方法及装置,属于代码克隆技术领域,解决了现有的代码克隆技术检测精度较差且效率较低的问题。方法包括:获取待检测代码数据集,对待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;基于二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于每一代码对应的最终向量得到最终向量集合;基于最终向量集合构建导航展开图,并根据导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。实现了代码克隆对的快速检测,提高了检测效率和精度。

Description

基于加权递归自编码器的快速代码克隆检测方法及装置
技术领域
本发明涉及代码克隆技术领域,尤其涉及一种基于加权递归自编码器的快速代码克隆检测方法及装置。
背景技术
代码克隆是指相似或相同的代码(可以是代码片段、方法、文件、模块等不同粒度),即重复代码。代码克隆可以极大促进软件开发,但其缺陷也会得到快速传播。因此代码克隆检测技术应运而生。
根据代码克隆的相似性,将代码克隆分为4种类型,类型1:两段代码之间除却空白、布局和注释等不同以外,其余完全一致;类型2:两段代码除却空白、布局、注释、变量命名、类型、标识符等不同以外,其余完全一致;类型3:两段代码除却空白、布局、注释、变量命名、类型、标识符等不同以外,部分语句增删或顺序发生变化;类型4:两段代码功能相似,但是语法上差异巨大。
传统代码克隆检测方法对于检测前三种类型的代码克隆都是有效的,但是对于语法相似度很低的第四类代码克隆的检测精度较差,且检测过程时长较长造成的检测效率较低。
发明内容
鉴于上述的分析,本发明实施例旨在提供一种基于加权递归自编码器的快速代码克隆检测方法及装置,用以解决现有的代码克隆技术检测精度较差且效率较低的问题。
一方面,本发明实施例提供了一种基于加权递归自编码器的快速代码克隆检测方法,包括下述步骤:
获取待检测代码数据集,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;
基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于所述每一代码对应的最终向量得到最终向量集合;
基于所述最终向量集合构建导航展开图,并根据所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。
进一步,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树,包括下述步骤:
基于所述待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树;
对所述每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,所述二叉树包括叶子节点和非叶子节点。
进一步,基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,包括下述步骤:
遍历所述二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句;
获取所述函数语句中每个单词的词向量;
基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值;
将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。
进一步,基于所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对,包括下述步骤:
基于所述导航展开图计算最终向量集合中任意两个最终向量的欧氏距离;
判断所述欧氏距离是否小于阈值门槛,若是,则两个最终向量对应的代码为代码克隆对;若否,则两个最终向量对应的代码不是代码克隆对。
进一步,所述任意两个最终向量的欧氏距离计算公式为:
Figure BDA0002795381010000031
式中,dist(r,v)表示任意两个最终向量的欧氏距离,r和v表示向量集合中的任意两个最终向量,r=(x1,x2,...,xn),v=(y1,y2,...,yn),n表示维度。
另一方面,本发明实施例提供了一种基于加权递归自编码器的快速代码克隆检测装置,包括:
数据集获取模块,获取待检测代码数据集,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;
最终向量获得模块,用于根据所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于所述每一代码对应的最终向量得到最终向量集合;
检测模块,用于根据所述最终向量集合构建导航展开图,并根据所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。
进一步,所述数据集获取模块用于:
基于所述待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树;
对所述每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,所述二叉树包括叶子节点和非叶子节点。
进一步,所述最终向量获得模块用于:
遍历所述二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句;
获取所述函数语句中每个单词的词向量;
基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值;
将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。
进一步,所述检测模块用于:
基于所述导航展开图计算最终向量集合中任意两个最终向量的欧氏距离;
判断所述欧氏距离是否小于阈值门槛,若是,则两个最终向量对应的代码为代码克隆对;若否,则两个最终向量对应的代码不是代码克隆对。
进一步,所述任意两个最终向量的欧氏距离计算公式为:
Figure BDA0002795381010000041
式中,dist(r,v)表示任意两个最终向量的欧氏距离,r和v表示向量集合中的任意两个最终向量,r=(x1,x2,...,xn),v=(y1,y2,...,yn),n表示维度。
与现有技术相比,本发明至少可实现如下有益效果之一:
1、一种基于加权递归自编码器的快速代码克隆检测方法及装置,首先从程序语料库中获取待检测代码数据集,然后将待检测代码数据集中的每一段代码转换为其对应的函数语句,并依据该函数语句生成词向量,同时,将生成的词向量输入训练好的加权递归自编码器,得到每一段程序代码对应的最终向量,最后,依据导航展开图将每一段程序代码对应的最终向量分布在空间中,并通过两段代码对应的最终向量之间的距离判断两段代码是否为克隆代码对,简单易行,易于实施,提高了克隆代码检测的效率和精度。
2、通过采用加权递归自编码器的方式,对每一级语义向量进行加权求和以得到最终向量,使得最终向量拥有的信息更加精确,放大了更重要节点对最终向量的贡献,提高了最终向量的精度,也提高了克隆对的检测精度。
3、通过导航展开图算法进行最近邻搜索,通过计算任意两个最终向量之间的欧氏距离,并将欧式距离与阈值门槛比较,以判断两段代码是否为代码克隆对,提高了代码克隆对的检测速率。
本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。
附图说明
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。
图1为一个实施例中代码克隆检测整体框架示意图;
图2为一个实施例中基于加权递归自编码器的快速代码克隆检测方法流程图;
图3为一个实施例中采用加权递归自编码器得到最终向量的过程;
图4为另一个实施例中基于加权递归自编码器的快速代码克隆检测装置结构图;
附图标记:
100-数据集获取模块,200-最终向量获得模块,300-检测模块。
具体实施方式
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
传统代码克隆检测方法对于语法相似度很低的第四类代码克隆的检测精度较差,且检测过程时长较长造成的检测效率较低。为此,本申请提出来一种基于加权递归自编码器的快速代码克隆检测方法及装置,如图1所示,首先从程序语料库中获取待检测代码数据集,然后将待检测代码数据集中的每一段代码转换为其对应的函数语句,并依据该函数语句生成词向量,同时,将生成的词向量输入训练好的加权递归自编码器,得到每一段程序代码对应的最终向量,最后,依据导航展开图将每一段程序代码对应的最终向量分布在空间中,并通过两段代码对应的最终向量之间的距离判断两段代码是否为克隆代码对,简单易行,易于实施,提高了克隆代码检测的效率和精度。
本发明的一个具体实施例,公开了基于加权递归自编码器的快速代码克隆检测方法,如图2所示,包括下述步骤S1~步骤S3。
步骤S1、获取待检测代码数据集,对待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树。具体来说,本申请主要是采用爬虫技术从目标软件系统的程序语料库中爬取多段程序代码,多段程序代码组合即可得到待检测代码数据集,其中,对待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树,包括下述步骤:
步骤S101、基于待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树。具体来说,本申请中主要是采用JavaParser工具解析待检测代码数据集中每一段代码,对应得到每一段代码对应的抽象语法树。
步骤S102、对每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,二叉树包括叶子节点和非叶子节点。具体来说,对每一代码对应的抽象语法树进行优化的过程包括:先对有多于2个子节点的非叶子节点进行Case II类型转换,然后对于只有一个子节点的非叶子结点,将它和它的子节点进行合并,以实现CaseI类型转换,得到一个完整的二叉树,即完满二叉树。
步骤S2、基于二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于每一代码对应的最终向量得到最终向量集合。具体来说,加权递归自编码器是在递归自编码器模型中引入抽象语法树的节点权重信息,加大重要节点在程序最终向量表示中贡献的信息量,以提升克隆检测的精确性。其中,递归自编码器对于任意非叶子节点的两个子节点,采取先压缩编码之后再展开重建的方式计算重构损失,并在训练样本上优化重构损失至局部最优,而后再用编码层去编码出非叶子节点的向量表示。本申请中在使用加权递归自编码器得到每一代码对应的最终向量之前,需要先从程序语料库中爬取多段程序代码组成训练数据集,利用训练数据集对加权递归自编码器进行参数训练,以降低自重构误差为优化目标,当加权递归自编码器拟合时,得到训练好的加权递归自编码器。
步骤S201、遍历二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句。在得到完满二叉树之后,每一个叶子节点对应一个单词,遍历二叉树中的所有叶子节点,把所有叶子节点表示的单词排成一个函数语句,就可以得到该段代码对应的函数语句。
步骤S202、采用word2vec模型获取函数语句中每个单词的词向量。
步骤S203、基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值。具体来说,如图3所示,先对叶子节点3和叶子节点4进行压缩编码,得到一级语义向量O(1),接着对一级语义向量与叶子节点2编码得到二级语义向量O(2),依次类推,生成p-1级语义向量O(p-1)。接着,计算每一级语义向量对应的权值,公式如下:
Figure BDA0002795381010000081
式中,TF-IDF为每一级语义向量对应的权重,nk,j为某非叶子节点(某级语义向量)序列出现次数,∑knk,j为全部非叶子节点序列的总和,|D|为程序语料库中的文件总数。|{j:ti∈dj}|表示包含词语ti的文件数目(即nk,j≠0的文件数目)。
步骤S204、将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。步骤S203得到多级语义向量及每一级语义向量对应的权值后,将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量,示例性地,设第i级语义向量对应的权值为f(i),则最终的向量表示为:
O(1)·f(1)+O(2)·f(2)+...+O(i)·f(i)+...+O(n)·f(n)
通过采用加权递归自编码器的方式,对每一级语义向量进行加权求和以得到最终向量,使得最终向量拥有的信息更加精确,放大了更重要节点对最终向量的贡献,提高了最终向量的精度,也提高了克隆对的检测精度。
步骤S3、基于最终向量集合构建导航展开图,并根据导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。具体来说,导航展开图算法基于K近邻图算法演变而来,目标是完成近似最近邻搜索,具体是将向量集合中的每个向量看作空间中的一个点,然后构建K近邻图,并在图中搜索查询向量的近邻向量。首先给定一个最终向量,在图中随机选取另外一个最终向量,然后计算两者之间的欧式距离,将该欧式距离与阈值门槛比较,若欧式距离小于阈值门槛,则两个最终向量对应的代码为代码克隆对,若欧式距离不小于阈值门槛,则两个最终向量对应的代码不是代码克隆对。直至比较完导航展开图中所有的两个任意最终向量之间的距离,得到待检测代码数据集中的所有代码克隆对。其中,代码克隆对指的是一段代码由另一端代码克隆得到。
优选地,基于导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对,包括下述步骤:
基于导航展开图计算最终向量集合中任意两个最终向量的欧氏距离,其中,任意两个最终向量的欧氏距离计算公式为:
Figure BDA0002795381010000101
式中,dist(r,v)表示任意两个最终向量的欧氏距离,r和v表示向量集合中的任意两个最终向量,r=(x1,x2,...,xn),v=(y1,y2,...,yn),n表示维度。
判断欧氏距离是否小于阈值门槛,若是,则两个最终向量对应的代码为代码克隆对;若否,则两个最终向量对应的代码不是代码克隆对。
通过导航展开图算法进行最近邻搜索,计算任意两个最终向量之间的欧氏距离,并将欧式距离与阈值门槛比较,以判断两段代码是否为代码克隆对,提高了代码克隆对的检测速率。
与现有技术相比,本实施例提供的基于加权递归自编码器的快速代码克隆检测方法,首先从程序语料库中获取待检测代码数据集,然后将待检测代码数据集中的每一段代码转换为其对应的函数语句,并依据该函数语句生成词向量,同时,将生成的词向量输入训练好的加权递归自编码器,得到每一段程序代码对应的最终向量,最后,依据导航展开图将每一段程序代码对应的最终向量分布在空间中,并通过两段代码对应的最终向量之间的距离判断两段代码是否为克隆代码对,简单易行,易于实施,提高了克隆代码检测的效率和精度。
本发明的另一个具体实施例,公开了基于加权递归自编码器的快速代码克隆检测装置,如图4所示。代码克隆检测装置包括:数据集获取模块100,获取待检测代码数据集,对待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;最终向量获得模块200,用于根据二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于每一代码对应的最终向量得到最终向量集合;检测模块300,用于根据最终向量集合构建导航展开图,并根据导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对。
由于基于加权递归自编码器的快速代码克隆检测装置的实现原理与基于加权递归自编码器的快速代码克隆检测方法的实现原理相同,故这里不再赘述。
本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

Claims (4)

1.一种基于加权递归自编码器的快速代码克隆检测方法,其特征在于,包括下述步骤:
获取待检测代码数据集,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;
基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于所述每一代码对应的最终向量得到最终向量集合;
基于所述最终向量集合构建导航展开图,并根据所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对;包括下述步骤:
基于所述导航展开图计算最终向量集合中任意两个最终向量的欧氏距离;
判断所述欧氏距离是否小于阈值门槛,若是,则两个最终向量对应的代码为代码克隆对;若否,则两个最终向量对应的代码不是代码克隆对;所述任意两个最终向量的欧氏距离计算公式为:
Figure FDA0003188598820000011
式中,dist(r,v)表示任意两个最终向量的欧氏距离,r和v表示向量集合中的任意两个最终向量,r=(x1,x2,...,xn),v=(y1,y2,...,yn),n表示维度;
基于所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,包括下述步骤:
遍历所述二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句;
获取所述函数语句中每个单词的词向量;
基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值;计算每一级语义向量对应的权值,公式如下:
Figure FDA0003188598820000021
式中,TF-IDF为每一级语义向量对应的权重,nk,j为非叶子节点序列出现次数,∑knk,j为全部非叶子节点序列的总和,|D|为程序语料库中的文件总数;|{j:ti∈dj}|表示包含词语ti的文件数目;
将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。
2.根据权利要求1所述的基于加权递归自编码器的快速代码克隆检测方法,其特征在于,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树,包括下述步骤:
基于所述待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树;
对所述每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,所述二叉树包括叶子节点和非叶子节点。
3.一种基于加权递归自编码器的快速代码克隆检测装置,其特征在于,包括:
数据集获取模块,获取待检测代码数据集,对所述待检测代码数据集进行预处理,得到待检测代码数据集中每一代码对应的二叉树;
最终向量获得模块,用于根据所述二叉树和加权递归自编码器获得待检测代码数据集中每一代码对应的最终向量,并基于所述每一代码对应的最终向量得到最终向量集合;
检测模块,用于根据所述最终向量集合构建导航展开图,并根据所述导航展开图对最终向量集合中的任意两个最终向量进行检测,得到代码克隆对;所述检测模块用于:基于所述导航展开图计算最终向量集合中任意两个最终向量的欧氏距离;判断所述欧氏距离是否小于阈值门槛,若是,则两个最终向量对应的代码为代码克隆对;若否,则两个最终向量对应的代码不是代码克隆对;
所述任意两个最终向量的欧氏距离计算公式为:
Figure FDA0003188598820000031
式中,dist(r,v)表示任意两个最终向量的欧氏距离,r和v表示向量集合中的任意两个最终向量,r=(x1,x2,...,xn),v=(y1,y2,...,yn),n表示维度;
所述最终向量获得模块用于:遍历所述二叉树中的所有叶子节点,得到待检测代码数据集中每一代码对应的函数语句;
获取所述函数语句中每个单词的词向量;
基于加权递归自编码器对每个单词的词向量进行编码,得到多级语义向量,并计算每一级语义向量对应的权值;计算每一级语义向量对应的权值,公式如下:
Figure FDA0003188598820000032
式中,TF-IDF为每一级语义向量对应的权重,nk,j为非叶子节点序列出现次数,∑knk,j为全部非叶子节点序列的总和,|D|为程序语料库中的文件总数;|{j:ti∈dj}|表示包含词语ti的文件数目;
将每一级语义向量与其对应的权值相乘的结果进行叠加,得到待检测代码数据集中每一代码对应的最终向量。
4.根据权利要求3所述的基于加权递归自编码器的快速代码克隆检测装置,其特征在于,所述数据集获取模块用于:
基于所述待检测代码数据集获得待检测代码数据集中每一代码对应的抽象语法树;
对所述每一代码对应的抽象语法树进行优化,得到待检测代码数据集中每一代码对应的二叉树,其中,所述二叉树包括叶子节点和非叶子节点。
CN202011329523.2A 2020-11-24 2020-11-24 基于加权递归自编码器的快速代码克隆检测方法及装置 Active CN112433756B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011329523.2A CN112433756B (zh) 2020-11-24 2020-11-24 基于加权递归自编码器的快速代码克隆检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011329523.2A CN112433756B (zh) 2020-11-24 2020-11-24 基于加权递归自编码器的快速代码克隆检测方法及装置

Publications (2)

Publication Number Publication Date
CN112433756A CN112433756A (zh) 2021-03-02
CN112433756B true CN112433756B (zh) 2021-09-07

Family

ID=74693939

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011329523.2A Active CN112433756B (zh) 2020-11-24 2020-11-24 基于加权递归自编码器的快速代码克隆检测方法及装置

Country Status (1)

Country Link
CN (1) CN112433756B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107273294A (zh) * 2017-06-19 2017-10-20 电子科技大学 一种基于神经网络语言模型的重复代码检测方法
CN108038384A (zh) * 2017-11-29 2018-05-15 北京京航计算通讯研究所 一种高安全的集群共享存储虚拟化方法
CN109101235A (zh) * 2018-06-05 2018-12-28 北京航空航天大学 一种软件程序的智能解析方法
CN110990273A (zh) * 2019-11-29 2020-04-10 中国银行股份有限公司 克隆代码检测方法及装置
CN111124487A (zh) * 2018-11-01 2020-05-08 浙江大学 代码克隆检测方法、装置以及电子设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9965633B2 (en) * 2015-12-29 2018-05-08 Sap Se Using code similarities for improving auditing and fixing of SAST-discovered code vulnerabilities
US9792114B1 (en) * 2016-10-10 2017-10-17 Semmle Limited Source code element signatures
US10114624B1 (en) * 2017-10-12 2018-10-30 Devfactory Fz-Llc Blackbox matching engine
CN110543331B (zh) * 2018-05-29 2021-07-06 南京大学 一种基于测试代码片段相似性的测试程序抄袭检测方法
CN109918127B (zh) * 2019-03-07 2022-02-11 扬州大学 一种基于代码修改模式差异的缺陷纠错方法
CN110704103B (zh) * 2019-09-04 2020-09-29 中国人民解放军战略支援部队信息工程大学 基于软件基因的二进制文件语义相似性比较方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107273294A (zh) * 2017-06-19 2017-10-20 电子科技大学 一种基于神经网络语言模型的重复代码检测方法
CN108038384A (zh) * 2017-11-29 2018-05-15 北京京航计算通讯研究所 一种高安全的集群共享存储虚拟化方法
CN109101235A (zh) * 2018-06-05 2018-12-28 北京航空航天大学 一种软件程序的智能解析方法
CN111124487A (zh) * 2018-11-01 2020-05-08 浙江大学 代码克隆检测方法、装置以及电子设备
CN110990273A (zh) * 2019-11-29 2020-04-10 中国银行股份有限公司 克隆代码检测方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于程序向量树的代码克隆检测;曾杰 等;《计算机科学与探索》;20200113;第14卷(第10期);第1656-1669页 *

Also Published As

Publication number Publication date
CN112433756A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
CN111310438B (zh) 基于多粒度融合模型的中文句子语义智能匹配方法及装置
Slaney et al. Optimal parameters for locality-sensitive hashing
CN111124487B (zh) 代码克隆检测方法、装置以及电子设备
KR102405578B1 (ko) 지식 그래프를 이용한 상황 인지형 다중 문장 관계 추출 방법 및 장치
CN115617956A (zh) 一种基于多模态注意力图谱的专利检索方法及系统
Kan et al. Zero-shot learning to index on semantic trees for scalable image retrieval
CN112256727A (zh) 基于人工智能技术的数据库查询处理及优化方法
CN107798215B (zh) 基于ppi网络层次结构预测功能模块及作用的方法
CN113792594A (zh) 一种基于对比学习的视频中语言片段定位方法及装置
CN112433756B (zh) 基于加权递归自编码器的快速代码克隆检测方法及装置
CN117408336A (zh) 一种结构与属性注意力机制的实体对齐方法
CN116304213B (zh) 基于图神经网络的rdf图数据库子图匹配查询优化方法
CN115688779B (zh) 一种基于自监督深度学习的地址识别方法
CN117010373A (zh) 一种电力设备资产管理数据所属类别和组的推荐方法
KR102158049B1 (ko) Cf 트리를 활용한 범위 질의 기반의 데이터 클러스터링 장치 및 방법
Yang et al. Multi-Label Learning Based on Transfer Learning and Label Correlation.
CN114168782B (zh) 一种基于三元组网络的深度哈希图像检索方法
US11763136B2 (en) Neural hashing for similarity search
CN115544070A (zh) 一种基于轨迹表示学习的相似度查询优化方法
CN112286807B (zh) 一种基于源代码文件依赖关系的软件缺陷定位系统
Folini et al. Cluster Analysis: a Comprehensive and Versatile Qgis Plugin for Pattern Recognition in Geospatial Data
JP6261669B2 (ja) クエリ校正システムおよび方法
CN114443783A (zh) 一种供应链数据分析和增强处理方法及装置
CN113076089A (zh) 一种基于对象类型的api补全方法
CN115292962B (zh) 基于轨迹抽稀的路径相似度匹配方法、设备及存储介质

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