CN115438709A - 基于代码属性图的代码相似性检测方法 - Google Patents

基于代码属性图的代码相似性检测方法 Download PDF

Info

Publication number
CN115438709A
CN115438709A CN202210813094.9A CN202210813094A CN115438709A CN 115438709 A CN115438709 A CN 115438709A CN 202210813094 A CN202210813094 A CN 202210813094A CN 115438709 A CN115438709 A CN 115438709A
Authority
CN
China
Prior art keywords
graph
code
node
neural network
embedding
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.)
Pending
Application number
CN202210813094.9A
Other languages
English (en)
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.)
Yunnan Hengyu Technology Co ltd
Wuhan University WHU
Original Assignee
Yunnan Hengyu Technology Co ltd
Wuhan University WHU
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 Yunnan Hengyu Technology Co ltd, Wuhan University WHU filed Critical Yunnan Hengyu Technology Co ltd
Priority to CN202210813094.9A priority Critical patent/CN115438709A/zh
Publication of CN115438709A publication Critical patent/CN115438709A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及代码检测技术领域涉及一种基于代码属性图的代码相似性检测方法,包括:一、生成代码属性图;二、生成图嵌入;先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向量表示;使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机制的图神经网络,生成一个具有代码属性图整体信息的向量表示;三、程序相似性分析;用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结果作为相似性检测的最终得分。本发明能较佳地进行代码相似性检测。

Description

基于代码属性图的代码相似性检测方法
技术领域
本发明涉及代码检测技术领域,具体地说,涉及一种基于代码属性图的代 码相似性检测方法。
背景技术
程序相似性是一个基础的概念,也是软件工程任务的核心问题之一,在软 件剽窃、克隆识别、代码重构和代码搜索中都有广泛应用。现在的程序相似性 研究分析可以分为句法相似性和语义相似性,句法相似性是指代码段在文本或 结构上的相似性,语义相似性则关注代码段之间在功能上的相似性。其中语义 相似性是目前研究的热点和难点,现有的方法很少能有效地检测语义相似性并 达到工业界的使用标准。
近年来,为了检测程序相似性,研究人员尝试采用深度学习的方法进行代 码相似性检测,从数据中自动学习潜在的语义特征,并在各种编程语言中的代 码相似度测试方面取得了重大进展。为了利用语法信息,通常将代码转化为抽 象语法树(AST)作为输入,但是这些基于AST的方法仍然不能充分利用代码片 段的特征信息,特别是控制流和数据流等语义信息。
发明内容
本发明的内容是提供一种基于代码属性图的代码相似性检测方法,其能够 克服现有技术的某种或某些缺陷。
根据本发明的一种基于代码属性图的代码相似性检测方法,其包括以下步 骤:
一、生成代码属性图;
将源代码转化为具有丰富语义信息的代码属性图,然后基于得到的代码属 性图提取其中的语法、语义信息,将代码属性图中的信息以矩阵的形式保存;
二、生成图嵌入;
先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向 量表示;然后使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信 息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机 制的图神经网络,生成一个具有代码属性图整体信息的向量表示;
三、程序相似性分析;
用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结 果作为相似性检测的最终得分。
作为优选,代码属性图使用joern生成,具体如下:
(1)由于joern是基于数据库开发的工具,需要将源代码的C++文件变为 文件夹的形式;即源代码的.cpp后缀的文件单独放在以其为命名的文件夹中, 并将这些文件夹全部放在一个大的文件夹下;
(2)把每个.cpp后缀的文件所在的文件夹输入joern中,得到.dot后缀的代 码属性图表示;
(3)为了方便后续对代码属性图的处理,将其以图结构读取在内存中;然 后遍历这个代码属性图的所有信息,包括节点和边的属性和值;
(4)提取遍历到的所有信息,并重新编码为代码属性图的最终表示。
作为优选,使用预训练模型word2vec生成代码树形图中每个节点的初始向 量表示,通过将所有节点的特征信息code的token输入预训练模型,可得到每 个token经过加权平均后的向量表示。
作为优选,GraphSAGE通过聚合其整个邻域的采样子集的特征来定义节点 的邻域;这表示为:
Figure BDA0003740032010000021
Figure BDA0003740032010000022
其中Nv表示节点v的邻域集,AGGt表示聚合函数,W表示权值矩阵,|| 表示连接操作,σ表示非线性激活函数,ht v表示节点v在t时刻的状态嵌入;使 用平均聚合器作为聚合器函数AGGt;平均聚合器函数是跳过连接的一个变体函 数;因此,公式改写为:
Figure BDA0003740032010000031
将GraphSAGE层数设置为3,因为GNN在深度学习架构中存在过平滑的 问题,使用relu作为激活函数。
作为优选,带有注意力机制的图神经网络分三步进行:
a、首先计算一个上下文向量嵌入C,通过平均所有的节点嵌入U,并通过 一个非线性的relu激活函数来得到上下文向量嵌入;图的上下文向量C表示为:
Figure BDA0003740032010000032
其中,|V|为图中的节点数,W为维数为W∈R(D×D)的权重矩阵;通过学习权值矩 阵W,上下文向量C提供了对整个图的结构属性的总结;
b、将每个节点的嵌入Uv的与上下文向量C的内积作为节点的权重矩阵衡 量节点的重要性;
在加和平均方法计算出的上下文向量中,代表数学运算的节点嵌入对上下 文向量c的影响更大,而与上下文向量c最相似的节点嵌入将获得更高的注意权 重;通过这种方法,注意力神经网络将赋予数学运算的节点信息更多的权重;
Figure BDA0003740032010000033
c、经过以上两个步骤,神经网络为每个节点v赋予了权重av,当计算每个 节点的注意权重av后,计算整体图嵌入h∈RD
Figure BDA0003740032010000034
作为优选,用张量神经网络预测两个图嵌入向量之间的相关程度,并用预 测得到的结果作为相似性检测的最终得分,具体为:
一对代码片段的图嵌入向量作为模型的输入,经过一个双线性张量层,将 两个向量编码为一个张量g;如公式所示:
Figure BDA0003740032010000035
通过计算出一个交互张量g{g∈1×K)},并将g输入全连接的神经网络中, 即可得到代码对之间程序相似度的预测值;其中W1 [1×K]∈RD×D×K,是一个权重 张量,W2∈RK×2D是一个权重向量,b1∈RK,f3是一个激活函数,K是一个超 参数,控制最后输出的图交互向量的维度;
全连接神经网络部分可以看作是一个有监督学习神经网络的二分类任务; 最终的得到模型输出的图相似度分数为
Figure BDA0003740032010000041
Figure BDA0003740032010000042
Figure BDA0003740032010000043
其中W0,b0是全连接神经网络的参数;选用二元交叉熵作模型的loss函数; 同时使用作adaMax为最后的全连接神经网络模型的优化器;
Figure BDA0003740032010000044
最后,为了能够预测代码片段之间的程序相似性,为模型最后设置一个预 测阈值σ,当预测值大于超参数σ时,判断输入为代码克隆;即:
Figure BDA0003740032010000045
本发明的有益效果如下:
(1)通过使用代码属性图作为源代码的中间表示结构,代替现有模型常用 的AST图、控制流图为图结构赋予了更加丰富的语义信息。
(2)使用GraphSAGE模型学习聚合函数的训练方法代替常用图卷积神经 网络学习节点表示的训练方法,不仅能够在图中加入新节点使节省计算量,还 能获得能好得性能表现。
(3)使用预训练的模型编码方法代替简单one-hot模型的编码方法,能够 在代码属性图中节点信息较为复杂的情况,生成更加低维稠密的初始向量。
(4)使用带有注意力机制的神经网络加权模块代替简单的加和求平均的图 向量生成方法,考虑了源代码中不同部分代码的重要性不同的特性。
(5)使用张量神经网络模型来代替图卷积神经网络中常使用的求向量之间 空间距离的方法,有利于模型取得更好的效果。
附图说明
图1为实施例中一种基于代码属性图的代码相似性检测方法的流程图;
图2为实施例中代码属性图的示例图;
图3为实施例中代码属性图的生成过程示意图;
图4为实施例中生成代码的初始节点表示的linear层示意图;
图5为实施例中图卷积网络的领域聚合方式示意图;
图6为实施例中生成图嵌入的注意力神经网络示意图;
图7为实施例中张量神经网络的结构示意图;
图8(a)为实施例中CPGNN模型的Precision指标结果示意图;
图8(b)为实施例中CPGNN模型的Recall指标结果示意图;
图8(c)为实施例中CPGNN模型的Accuracy指标结果示意图;
图8(d)为实施例中CPGNN模型的F1指标结果示意图。
具体实施方式
为进一步了解本发明的内容,结合附图和实施例对本发明作详细描述。应 当理解的是,实施例仅仅是对本发明进行解释而并非限定。
实施例
如图1所示,本实施例提供了一种基于代码属性图的代码相似性检测方法, 其包括以下步骤:
一、生成代码属性图;
将源代码转化为具有丰富语义信息的代码属性图,然后基于得到的代码属 性图提取其中的语法、语义信息,将代码属性图中的信息以矩阵的形式保存;
二、生成图嵌入;
先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向 量表示;然后使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信 息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机 制的图神经网络,生成一个具有代码属性图整体信息的向量表示;
三、程序相似性分析;
用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结 果作为相似性检测的最终得分。
源代码的图表示方法
本实施例使用的代码属性图包含了丰富的语义信息,在内容上主要包含了 源代码的语法结构信息、控制依赖关系、数据依赖关系。在结构上可以看作是 在抽象语法树图的节点和边基础上,加入了控制流图(CFG)和数据流图(DFG) 的边来表达语义特征。接下来对代码属性图中包含的这些源代码子图表示方法 分别进行介绍。
抽象语法树(Abstract Syntax Tree,AST)
虽然本实施例使用的是AST图的形式,但是在结构和节点信息上和AST树 是一样的。抽象语法树正如它的名字一样,是表示源代码的抽象语法结构的树 形结构。
AST是源代码的一种有序的树形表示结构。通常它是代码解析器用于理解 程序的基本结构和检查语法错误的首选表示。因此它构成了生成许多其他代码 表示的基础,并且AST的节点集包含了本文中使用的其余三个代码表示的所有 节点。从根节点开始,代码被分解为代码块、语句、声明、表达式等,最后形 成叶节点的主令牌。通常它是代码解析器用于理解程序的基本结构和检查语法 错误的首选表示方法。从根节点开始,代码被分解为代码块、语句、声明、表 达式等,最后形成叶节点的token。抽象语法树中的语法信息之是抽象的,是因 为抽目前广泛使用的抽象语法树方法是由语法树简化而来,这个简化的过程具体来说是将一些语法中的细节删去隐含在树结构中,比如代码之间的嵌套关系 通过使用树节点之间的父子关系来表示,这样就隐去了代码中的括号。
除了能够表达代码的结构语法信息之外,抽象语法树由于其能兼容大部分 编程语言,如:C、C++、JAVA等并且完整的保留了代码的语法内容的特点, 它构成了生成许多其他代码表示的基础。现有的很多综合多种表示模型的方法 FA-AST,FuncGNN。等也常常基于AST结构生成他们需要的表示方法。在本 文中AST的节点集包含了本实施例中使用的其余三个代码表示的所有节点,所 以AST图的节点集就是代码属性图的节点集。
控制流程图(Control Flow Graph,CFG)
控制流图又被称作是控制流程图,所谓控制流程指的是代码在运行时,遍 历源代码中不同部位之间的先后顺序。将这种先后顺序信息用图来表示就是代 码的控制流图。
在控制流图中,图的节点表示代码的一个基本块,每个基本块之间用有向 边连接,所谓控制流图一把都是有向图。控制流图一般从入口节点开始,依次 指向源代码运行过程中遍历先后经过的基本块。在控制流图表示中,一个节点 的边表示了这段代码在程序运行过程中所有可能被执行的情况,而不同节点之 间边的连接顺序则表示了实际程序中代码运行的过程。下图展示的是一段代码 和从这段代码上的得到的控制流图
CFG描述了在程序执行期间可能遍历的所有路径。路径选项由条件语句决 定,例如,if、for和开关语句。在CFG中,节点表示语句和条件,并通过有向边 连接,表示控制的传递。控制流图可以用有向图
Figure BDA0003740032010000071
表示,其中V 表示节点集,E表示连接它们的边集。每个节点vi∈V,都由一个原子程序语句 标记。若一对节点vi,vj由一条边(vi,vj)∈E连接,这反映了直接顺序执行时: vi紧接vj。因此,通过这种方式CFG可以提供带有程序语法和语义的图表示。
数据流图(Data Flow Graph,DFG)
数据流图在思路上和控制流图很像,而与控制流相比,数据流表示的的代 码中变量的执行情况。DFG跟踪整个CFG中变量的使用情况。数据流是面向变 量的,任何数据流都涉及到对某些变量的访问或修改。一个DFG边表示对相同 变量的后续访问或修改。在数据流图中,所有的有向边都由一个数据被定义的 节点为起点,若一对节点由数据流边连接,则反映了被指向节点调用这个数据。
变量作为程序相似度分析的重要指标由来已久,在早期的传统方法中,统 计源代码对变量的执行的类型和方法就是十分重要的研究程序克隆的方法,因 为变量不仅在程序运行上任务数据流都要对变量进行访问或修改,在语义信息 上也有重要意义,因为处于相同目的的代码虽然在语法表达上可以改变,但是 往往在对变量的访问操作上相差不大。在数据流图中,边表示这两个节点对相 同的变量进行了访问或修改,而边的方向可以反映变量被访问的顺序,这种顺 序也包含程序执行过程的语义信息。
代码属性图
对于一个程序来说,将代码当作纯文本并不是一个好的选择,因为它不同 于自然语言有更多的语义结构。与之相反,图结构(例如,AST、CFG和PDG) 是更适合程序表示的一种形式,在图结构中语义信息可以直接被提取和抽象。 每个图形结构都描述了程序的一个特定方面的信息。例如,AST描述了语法结 构,而CFG描述了程序的执行路径和控制流的传递路径,DFG描述了程序中变 量的调用情况。而由于这些表示方法都不能完整全面的表达代码的丰富的语义 特征,本文尝试使用代码属性图作为代码片段的表示方法。这个代码属性图集 成了CFG、AST和DFG三种图结构,所以它包含更加完整的语义特征。
从生成的角度来说,代码属性图看作是从代码的抽象语法树图上得到的, 在AST图的基础上尽可能加入其他表示方法的边,不考虑其他表示方法的节点, 可以避免节点的冲突。
代码属性图中的属性指的是在代码属性图中每一个节点和边除了有自己的 值之外,还有一项属性作为标签。这种图结构的特点在于,以往的AST等方法 只有节点信息分为类型和值,边只有值。但在代码属性图中,边也有自己属性 类型。具体在我们的方法中,边的属性是指边代表的语义信息类型,或者说边 属于AST图、CFG图、DFG图中的哪一种。下面是一个代码属性图的例子。我 们用一个多边联合图G(V,E)来表示代码属性图,其中V是代码属性图的节 点集,每个节点信息包含节点属性和节点的值。在内容上节点集V和AST图的节点集基本是一样的,但是加入了控制流图的入口和出口节点。E是代码属性图 的边集,每个边也有类型和值两个属性。
接下来,通过一个例子,介绍具体生成的代码属性图的结构。
复合表示表示的代码属性图中一个函数可以用一个联合图G表示,其中不 同子图共享相同的节点集V=Vast。如图2所示,是一个简化的代码属性图,每 个节点v∈V都有两个属性,代码和类型。代码包含由v表示的源代码,v的类 型表示类型属性。初始节点表示向量Xv就由源代码的这两个属性编码而成。我 们通过用不同的颜色的节点和边构成的代码属性图来介绍其具体的结构形式。
如图2所示,所有的框都是AST节点,在节点中带有特定的代码,并且还 有一个标签表示节点类型。
另外,为了表示控制流的控制流从入口开始,到出口结束,在图中加入了 一个表示控制流图的输入和输出位置的节点。当遇到控制流可能在某段代码处 根据条件判断有不同的走向时,在代码树形图中表示为节点有不同的控制流边 指向不同的节点,所有的控制路图边的类型是一样的。
数据流图DFG用图2中的双箭头表示,并在边缘上标注了所涉及的变量。
代码属性图的生成方法
通过基于joern工具的方法将代码转化为代码属性图。
这里设计了自动化形成复合语义表示代码属性图的过程,以AST为骨干, 加入显示控制流和数据流编码成的异构边,形成一个联合多边图,以使用图神 经网络来检测代码克隆。
具体来说,生成一个源代码的代码属性图首先通过语法分析器提取出一个 代码片段的抽象语法树。在得到抽象语法树后,再基于函数块对抽象语法树进 行代码执行顺序分析。通过分析代码的控制流程,并将得到的控制流信息加入 抽象语法树图中。通过类似的方法,可以分析代码的数据流信息。数据流信息 在代码属性图中指代码对数据变量进行定义和访问的操作。以上流程已经被 Fabian及他所在的公司推出的工具joern中,这是一个较为稳定的用于分析代码 的开源工具。它可以有效地生成一个代码属性图CPG,并将其表示为能够输入 图神经网络的格式。通过使用joern可以方便的得到源代码的代码属性图。
如图3所示,使用joern生成代码属性图的流程为:
(1)由于joern是基于数据库开发的工具,需要将源代码的C++文件变为 文件夹的形式。即源代码的.cpp后缀的文件单独放在以其为命名的文件夹中, 并将这些文件夹全部放在一个大的文件夹下。
(2)把每个.cpp后缀的文件所在的文件夹输入joern中,得到.dot后缀的代 码属性图表示。如下图所示。
(3)为了方便后续对代码属性图的处理,将其以图结构读取在内存中。然 后遍历这个代码属性图的所有信息,包括节点和边的属性和值。
(4)提取中遍历到的所有信息,并重新编码为代码属性图的最终表示。
表1代码属性图中节点的属性和含义
Figure BDA0003740032010000101
表2代码属性图中边的类型和含义
Figure BDA0003740032010000102
这里提取出的代码属性图中,每个节点信息由节点属性和属性的值构成, 其中节点属性的类型如表1所示。而代码属性图中的每条边的信息也由属性和 属性的值构成,边的属性的类型,如表2所示。
生成节点的初始向量的方法与改进
由于代码属性图具有节点信息较为复杂的特点,常规的图卷积神经网络不 能很好的提取出代码属性图的特征信息。所以我们针对代码属性图的特征在模 型中增加用来帮助生成代码属性图中初始节点向量的预训练模块。
我们使用预先训练的word2vec模型编码代码,代码语料库建立在项目中的 整个源代码文件的代码语料上,并通过节点信息进行编码。我们将节点两个属 性的两个编码向量连接在一起作为初始节点表示v。
有了图节点嵌入的迭代方法,通过图神经网络进行图的节点嵌入还需要为 图中的节点获得一个初始向量表示。之前的GCN方法中,一般是通过将节点信 息编码为一个one-hot向量的方式来获取节点的初始向量。这种方法较为方便, 对于简单的图结构确实足够区分不用的节点。但是在代码属性图这种复杂的图 结构中,只是用one-hot编码不能充分体现节点的信息。因为代码属性图中的节 点包含类型和值两个标签,而在语义克隆检测中,这两种标签具有重要的语义 信息。因为可能在相似的图结构中,由于节点信息的不同,导致语义的完全不 同。因为在本文的模型中,我们使用节点的类型和节点类型的值一起作为初始 特征向量的信息,将其共同编码为节点向量,所以one-hot编码方法不适合我们 使用的代码属性图。
为了适应这种特征,我们使用了预训练模型word2vec。通过将所有节点的 特征信息code的token输入预训练模型,可以得到每个token经过加权平均后的 向量表示,目前共有32种类型的节点。而对于节点的另一个属性标签--类型type, 因为类型标签的形势比较简单,可以通过一个线性层映射降维。现在我们就分 别得到了图结构节点的两种属性标签的初始向量表示,为了把不同特征空间的 这两个向量生成一个完整的代码属性图节点初始向量,我们把节点的两个降维 后的属性标签信息通过一个线性层生成一个特征向量。这样我们就可以得到节 点的处时表示,图4中x表示预训练模型生成的初始代码文本特征向量,nl表 示节点类型标签信息降维后的初始向量。他们经过一个linear映射为代码属性图节点的初始向量。图中线性层的参数将在图神经网络的表示学习中同步进行。
生成代码表示图的节点向量
这里通过介绍现有的图卷积神经网络的特点,并分析传统的使用图卷积神 经网络GCN执行代码克隆检测任务的不足之处。之后介绍我们使用的改进的GraphSAGE模型。
在我们得到源代的码代码属性图后,我们还需要通过图神经网络提取出代 码属性图中的语义和语法信息。现有的模型中,常使用RNN和CNN。这些模 型在之前把源代码看作是文本或者序列的任务中有较好的表现,这些模型在处 理欧氏空间的数据中能够较好的提取出代码表示中的信息,但是在图结构这种 非欧式空间数据下,他们的表现差强人意。这是因为图结构一方面不是顺序的 序列,每个节点之间的关系是不规则的,这种结构给RNN或CNN模型的遍历 和聚合带来了巨大的麻烦。因为节点的很多特征隐藏于节点与节点之间的联系 上,传统的神经网络难以提取这些信息。所以研究者们提出了图神经网络来进 行节点表示学习。
图神经网络的基本思想是基于聚合邻域信息的方式来遍历图中的节点。在 众多的图神经网络模型中,主要的是图卷积神经网络、GraphSAGE、门控图递 归网络及其变体。而在我们的克隆检测任务中,使用图神经需要考虑有以下几 个方面的性能:
(1)可学习性:神经网络模型最大的特点就是可以通过调整数据集和参数 提高模型的效果。
(2)表示不变性:源代码作为模型的输入,作为一种结构化的语言,存在 书写顺序,变量命名,代码风格等变化的情况下,代码的功能不变的情况。而 随着源代码不同,提取出来的代码属性图也会变化。基于这种情况,图神经网 络应该能在图只有形式变化时提取出相同的语义。
(3)泛化能力:作为证明神经网络确实能够识别源代码语义的一个论据就 是,面对训练集中没有的数据,训练好的图神经网络也应该能够正确的预测相 似性。
虽然之前的研究者使用的GCN模型具有表示不变性和可学习性,但是GCN 模型的泛化能力很差,为了弥补这点,我们的在模型中采用GraphSAGE的聚合 方式,能够很好的推广到训练集中没有的源代码。
GraphSAGE模型和GCN模型的共同特点都是采用邻域聚合的方式来迭代 的进行节点向量的更新。如图5所示,简单的表示图卷积神经网络的迭代方式, 在图神经网络的每次迭代中,都通过聚合节点的邻域节点上一次的迭代完毕后 的特征向量来更新节点本身的向量。在图5中,第k层的迭代中就是遍历节点 的邻域节点在k-1层迭代后的节点特征,通过聚合得到k层迭代中自己的节点特 征。
但是图卷积神经网络在代码的克隆检测中有一个缺点就是,图卷积神经网 络是采用直推式学习(transductive learning)的方式来学习节点特征,在节点的 迭代过程中,所有的节点信息都参与到节点的训练中。如果在图中加入一个新 的节点,那么所有节点都需要重新训练一次,这样的效率很低。造成这种情况 的原因是在图神经网络中,每个节点的特征都是由其邻域节点确定的,这种情 况下,增加一个新的节点,那么每一个节点都会随着在图结构上距离新节点的 远近,收到不同程度的影响。因此,在图结构中添加一个节点,图中所有节点 严格来说都会受到影响,改变特征,这在计算上就会带来很大的负担。
为了优化这一点,我们采用改进的GraphSAGE神经网络。GraphSAGE最 大的特点是它采用归纳式学习Inductive Learning的方法,学习节点的邻域节点 是如何影响节点的。我们称在迭代过程中节点受到其他节点影响的程度为聚合 函数。这个聚合函数的输入和输出可以看作是节点和其邻域节点的特征及关系 输出一个节点新的特征向量。在这种方式中,如果在图中加入一个新的节点, 只需要根据聚合函数更新图中的每个节点,就可以得到新的图嵌入,而不需要 再次从新开始学习。
GraphSAGE通过聚合其整个邻域的采样子集的特征来定义节点的邻域。这 可以表示为:
Figure BDA0003740032010000131
Figure BDA0003740032010000132
其中Nv表示节点v的邻域集,AGGt表示聚合函数,W表示权值矩阵,|| 表示连接操作,σ表示非线性激活函数,ht v表示节点v在t时刻的状态嵌入。我 们使用平均聚合器作为聚合器函数AGGt,它是在[19]中提出的GCN框架中卷积 操作的近似值。平均聚合器函数是跳过连接的一个变体函数,不像公式12那样 执行连接操作。因此,上文的公式可以改写为:
Figure BDA0003740032010000141
我们将GraphSAGE层数设置为3,因为GNN在深度学习架构中存在过平 滑的问题,使用relu作为我们的激活函数。
基于节点特征向量生成图嵌入方法与改进
这里介绍了在获得节点的特征向量后,如何将每个节点的特征向量融合起 来生成图结构整体的特征向量。并且我们考虑到一般代码中每个部分对语义的 重要性应该是不一样的,每个程序中都有核心代码和不重要的代码,程序员日 常中使用的伪代码也反映了这种特点。我们为了使模型更关注那些重要的代码, 更好的提取语义信息,我们在模型中加入一个改进的注意力机制模块。
经过GraphSAGE模型的处理后,模型在代码属性图的每个节点上都生成了 一个包含图整体全部信息的向量表示。每一个节点的特征向量除了包含本身节 点的特征信息,其中有节点的文本特征信息和节点类型特征信息,由于图神经 网络领域聚合的迭代特点,这些节点向量还包含节点周围邻域节点的特征信息。 由于我们的模型GraphSAGE设置采样距离为3,所谓每个节点向量包含其周围 三层邻域的特征信息,如图所示,输出的特征矩阵为X∈R(n×d)其中d是 GraphSAGE最后一层迭代输出的维度。为了比较代码的程序相似性,我们需要 提取出代码的整体图嵌入。之前的研究者通常使用对所有节点向量相加,然后 取平均值的方法。这种方法的思路是认为图中的每个节点都具有相同的重要性。 但在代码属性图中并不是这样,因为任何代码中,一般都有较为核心的代码和 不重要的代码。而在程序分析的角度上,代表数学操作的代码往往是代码中比 较重要的代码,包含更多的语义信息。
另外图神经网络中每个节点的特征向量都来自他周围的节点,虽然通过在GraphSAGE模型中使用优化的聚合函数和遍历方式有些减缓这种特征,但是相 对于全图来说,每个节点的特征向量只能看作是局部的特征信息,代码程序中 的长期依赖关系可能被忽略了。
为了避免上面提到的两点问题,我们使用一种基于注意力机制的学习整体 图嵌入的方法。如图6所示:我们不是简单地平均了图中所有节点的嵌入,而 是使用一种注意机制来为基于相似性度量的某些节点提供更多的意义。该方法 确保了具有更大结构意义的节点比其他节点对整体图嵌入的影响更大。从程序 分析的角度来看,这个想法是为代表数学操作的节点提供比代表变量初始化或 分配的节点提供更多的权重。
为了实现这一目的,这个注意力网络模型分三步进行:
(1)第一步,借鉴传统的加和平均的方式来求一个包含图的全局语义信息表示——上下文向量嵌入c。
我们首先计算一个上下文向量嵌入C(global_contex),通过平均所有的节 点嵌入U,并通过一个非线性的relu激活函数来得到上下文向量嵌入。这个图 的上下文向量C可以表示为:
Figure BDA0003740032010000151
其中,|V|为图中的节点数,W为维数为W∈R(D×D)的权重矩阵。通过学习权值矩 阵W,上下文向量C提供了对整个图的结构属性的简单总结。按照GCN模型 的提出者的证明,这个上下文向量C具有整个图的特征信息,虽然由于代码属 性图的复杂性,着我们的模型中C不能作为整体图的嵌入,但是我们仍然认为 向量C在向量空间上能够反映代表程序整体的特征。
(2)为了衡量不同节点的重要性,我们认为越是节点特征信息与图整体特征 相符的节点,应该具有更大的重要性。因此我们将每个节点的嵌入Uv的与上下 文向量C的内积作为节点的权重矩阵衡量节点的重要性。
另一方面来说,从程序分析的角度,程序中的大多数关键操作往往具有数 学操作,那些赋值,定义的代码在语义的衡量上往往并不重要。而有研究证明, 在加和平均方法计算出的上下文向量中,代表数学运算的节点嵌入对上下文向 量c的影响更大,而与上下文向量c最相似的节点嵌入将获得更高的注意权重。
通过这种方法,我们的注意力神经网络将赋予数学运算的节点信息更多的权重。
Figure BDA0003740032010000161
经过以上两个步骤,神经网络为每个节点v赋予了权重av当我们我们计算 每个节点的注意权重av后,我们计算整体图嵌入h∈RD:
Figure BDA0003740032010000162
相似性度量
要检测两个向量之间的相似性,通过计算两个向量之间的距离是主流使用 的一种简单的方法,其中余弦相似距离是应用最广泛的一种。
一般来说,如果两个向量平行或重合,我们认为这两个向量相似度为 1(100%),如果这两个向量垂直,或者说正交,我们认为这两个向量的相似度为 零。在得到两个程序的向量表示后,我们利用这两个向量的余弦相似度来度量 它们的相似度,并设定一个相似性度量的阈值σ。如果相似度得分大于阈值σ, 我们将这两个代码片段视为一个克隆对。
但是这些方法都是处于求取两个向量之间的某种空间距离的思想,这些简 单的方法,计算方便,但是在结果上会导致丢失图结构中某些重要的特征信息, 因为不论使用哪种计算方法,两个图嵌入向量之间交互终归是不充分的。出于 充分考虑两个图嵌入向量之间的关系的目的,本文设计并采用张量神经网络 (NTN)。
通过神经网络学习的方式来进行程序相似性分析。研究者开发张量神经网 络的目的就是为了检测在数据库中两个向量之间是否存在某种关系。而在我们 的模型中,我们可以用张量神经网络预测两个图嵌入向量之间的相关程度,并 用预测得到的结果作为我们相似性检测的最终得分。
张量神经网络的具体结构如图7所示。
一对代码片段的图嵌入向量作为模型的输入,经过一个双线性张量层,将 两个向量编码为一个张量g。如公式所示:
Figure BDA0003740032010000171
通过计算出一个交互张量g{g∈1×K)},并将g输入全连接的神经网络中, 即可得到代码对之间程序相似度的预测值。其中W1 [1×K]∈RD×D×K,是一个权重 张量,W2∈RK×2D是一个权重向量,b1∈RK
f3是一个激活函数,K是一个超参数,控制最后输出的图交互向量的维度。
全连接神经网络部分可以看作是一个有监督学习神经网络的二分类任务。 最终的得到模型输出的图相似度分数为
Figure BDA0003740032010000172
Figure BDA0003740032010000173
Figure BDA0003740032010000174
其中W0,b0是全连接神经网络的参数。我们选用二元交叉熵作模型的loss 函数。同时使用作adaMax为最后的全连接神经网络模型的优化器。
Figure BDA0003740032010000175
最后,为了能够预测代码片段之间的程序相似性,我们为模型最后设置一 个预测阈值σ,当预测值大于超参数σ时,判断输入为代码克隆。即:
Figure BDA0003740032010000176
实验设计与分析
实验数据集
本文采用的数据集是公开数据集OJ clone benchmark,OJ clone数据集由C 程序组成,数据集中按照程序不同的功能或要解决的问题不同分类。数据集一 共收集了104个常见的编程题目,每一个题目都包含很多解决这个问题的不同C 程序,他们在功能上都是一样的。OJ clone已经被很多研究者使用在程序相似性 和克隆检测任务中,比如SOCHER,FA-AST等方法。
本研究从OJ benchmark数据集中选择一部分用来研究:从OJ CLone的前 15个题目中抽取500个程序,再从这些程序中产生的近3000万个代码对中抽取50000个样本作为本研究使用的数据集。
实验安排
为了检验我们的方法和模型的效果,并且比较我们的方法和现有方法,我 们收集了目前最先进的模型,并且在相同的数据集上进行同样的程序相似性检 测任务进行对比实验,从而评估我们模型的效果,同时回答研究问题RQ1。
本节将通过对比我们的模型CPGNN和其他现有的几个研究成果,来检测我 们的模型是否具有更好的表现结果,以下是用来对比的模型:
Deckard:Deckard模型是基于AST树的较为传统的一种代码克隆检测方法, 他通过将源代码转化为抽象语法树AST,然后使用LSH局部敏感哈希算法检测 代码克隆。这种方法的特点是在提取出抽象语法树后,通过类似于预训练的方 法将抽象语法树分为各种度量元,然后将度量元的嵌入与计数作为特征提取的 结果。最后通过计算欧氏距离检测代码克隆。
CDLH:该模型也是基于树的卷积神经网络模型,该模型首先将代码片段 解析为抽象语法树AST,在将AST编码为完全二叉树,这样便于使用LSTM来 处理树结构。该模型提出了一种Tree-LSTM方法,用LSTM的方法来递归的聚 合树结构中的特征信息,并进行树节点状态更新。
DeepSim:该模型创新性的使用了二进制向量的形式作为模型的中间表示, 是基于二进制表示的一种深度学习模型。通过解析器分析代码片段的控制流和 数据流信息,将源代码编码为一个带有控制依赖关系和数据依赖关系的二进制 于语义矩阵。通过这种方法,将检测代码克隆转化为比较矩阵之间的相似度识 别。
FCCD模型:该模型是一种基于函数之间调用关系的代码表示方法。首先从 源代码中提取出源代码的一种联合图图表示方法,与本文的思路有相似性。不 过该模型是从函数的调用关系出发,按照调用图、抽象语法树控制流图的形式 生成的。该模型自称是第一篇使用调用图来分析代码表示方法的论文,通过在 调用图基础上提取语义和语法信息。
FA-AST模型:该模型是目前表现较好的方法,FA-AST在模型结构上与传 统图神经网络的方法区别不大,但是作者提出了一种在抽象语法树的基础上, 进行加边的方法,并建立了加边的规则。通过对源代码进行语义分析,通过检 测代码片段中循环语句、条件语句、嵌套语句这些控制依赖关系,以控制流边 的形式在抽象语法树AST上加边。这种方法可以看作是控制流图与抽象语法树 的结合。更进一步,该模型通过对比门控图神经网络GGNN(Gated Graph Neural Network)和图匹配网络GMN(Graph Mathch Network)的不同表现,研究了不 同的图神经网络在相同的代码表示方法上特征提取能力的不同特点及原因。
对比试验结果及分析
本研究在相同数据集上运行了我们提出的基于代码属性图的综合语义克隆 检测模型,训练得到的指标曲线如图8(a)、图8(b)、图8(c)和图8(d)所 示。
通过训练曲线图可以看出,虽然某些指标在训练过程中有波动,但是整体 上各个指标都在第40个epoch附近收敛。这说明模型在训练效果显著,经过训 练的模型能够更好的进行代码克隆检测。具体的各项指标数值见表。表3是基 于代码属性图的综合语义代码表示方法模型的研究结果以及与其他模型的对比 结果。
表3不同模型执行代码克隆检测任务的效果对比
Figure BDA0003740032010000191
通过表格可以看出:我们基于代码属性图的克隆检测模型的F1指标明显高 于Deckard和CDLH这些基于树结构的克隆检测方法,比Deckard指标高52%, 比CDLH指标高39%。实验结果证明了我们的理论,基于树的方法虽然也包含 了代码的语义信息,但是只是局限于代码片段的结构语音信息,忽略了其他方 面丰富的语义信息。而使用代码属性图能够弥补这些缺陷,补全控制流信息和 数据流信息。
通过与DeepSim模型对比,我们的方法在F1指标上高出20%。Deepsim模 型相比于树结构只关注代码片段的结构信息,采用二进制语义矩阵的表示形式, 开始关注控制流和数据流信息。但是Deepsim模型使用的语义矩阵虽然实验证 明了包含有代码的综合语义特征,但是语义矩阵这种形式本事不利于特征提取, 无法使用距离度量的方式进行向量之间的比较,也难以直接检测出矩阵中哪些 元素是相似的。该模型的作者使用了名为深度神经网络的DNN模型来检测语音 矩阵的相似度。但是实验证明这种方法与基于卷积神经网络的方法,在表现上 有明显差异,这证明了卷积神经网络和图表示是更好的模型。
FCCD是另一种具有综合语义表示的模型,这个模型基于一种名为调用图的 表示方法,通过分析代码片段的函数调用关系与控制流和数据流的关系,先提 取出调用图,然后调用图上加入代表语法信息的抽象语法树和代表语义信息的 控制流图。这种方法再思路上和后文的FA-AST方法和我们的方法有相似之处. 本文的模型再F1指标上和该方法相近,表现都很好。这证明了使用图结构来充 分表达代码片段种的语义和语法信息是有效的。
FA-AST模型是目前的克隆检测邻域的SOTA模型,在论文中,作者提出了 两种模型分别是FAAST(GGNN)和FAAST(GMN)模型。我们的模型在F1 分数上高于FA-AST(GGNN)模型,这说明在我们的模型预测值样本时,正确 识别的能力更加均衡,我们的模型总体来说识别代码克隆的效果更好。FA-AST 模型作为目前效果最好的模型与我们模型相比,再图表示方法上,只使用了抽 象语法树的结构信息和控制流图的控制流信息,但是在精确度指标上反而效果 更好,这可能是因为了该模型中使用的GMN图匹配神经网络有更好的表现。但 是这种基于代码对之间匹配的神经网络训练方式,随着图结构的复杂度上升, 孪生的神经网络之间的信息交换相比于分开运行的神经网络模型,计算量会迅 速增长,训练效率会随之下降。
通过我们的模型与现有的不同类型的克隆检测方法我们可以发现,基于 综合语义信息的图卷积神经网络模型明显比传统的基于语法结构的树结构表示 方法或者只使用语法结构信息的图结构表示方法效果明显提升。但是相比于最 新的FA-AST模型我们的方法在召回率上更高,在精确度上较低。
以上示意性的对本发明及其实施方式进行了描述,该描述没有限制性,附 图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。所以, 如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不 经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的 保护范围。

Claims (6)

1.基于代码属性图的代码相似性检测方法,其特征在于:包括以下步骤:
一、生成代码属性图;
将源代码转化为具有丰富语义信息的代码属性图,然后基于得到的代码属性图提取其中的语法、语义信息,将代码属性图中的信息以矩阵的形式保存;
二、生成图嵌入;
先使用经过预训练的的节点嵌入模型生成代码树形图中每个节点的初始向量表示;然后使用GraphSAGE图神经网络通过聚合邻域特征的方式更新节点信息,在每个节点上生成包含整个图的信息的节点嵌入;最后通过带有注意力机制的图神经网络,生成一个具有代码属性图整体信息的向量表示;
三、程序相似性分析;
用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结果作为相似性检测的最终得分。
2.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:代码属性图使用joern生成,具体如下:
(1)由于joern是基于数据库开发的工具,需要将源代码的C++文件变为文件夹的形式;即源代码的.cpp后缀的文件单独放在以其为命名的文件夹中,并将这些文件夹全部放在一个大的文件夹下;
(2)把每个.cpp后缀的文件所在的文件夹输入joern中,得到.dot后缀的代码属性图表示;
(3)为了方便后续对代码属性图的处理,将其以图结构读取在内存中;然后遍历这个代码属性图的所有信息,包括节点和边的属性和值;
(4)提取遍历到的所有信息,并重新编码为代码属性图的最终表示。
3.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:使用预训练模型word2vec生成代码树形图中每个节点的初始向量表示,通过将所有节点的特征信息code的token输入预训练模型,可得到每个token经过加权平均后的向量表示。
4.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:GraphSAGE通过聚合其整个邻域的采样子集的特征来定义节点的邻域;这表示为:
Figure FDA0003740031000000021
Figure FDA0003740031000000022
其中Nv表示节点v的邻域集,AGGt表示聚合函数,W表示权值矩阵,||表示连接操作,σ表示非线性激活函数,ht v表示节点v在t时刻的状态嵌入;使用平均聚合器作为聚合器函数AGGt;平均聚合器函数是跳过连接的一个变体函数;因此,公式改写为:
Figure FDA0003740031000000023
将GraphSAGE层数设置为3,因为GNN在深度学习架构中存在过平滑的问题,使用relu作为激活函数。
5.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:带有注意力机制的图神经网络分三步进行:
a、首先计算一个上下文向量嵌入C,通过平均所有的节点嵌入U,并通过一个非线性的relu激活函数来得到上下文向量嵌入;图的上下文向量C表示为:
Figure FDA0003740031000000024
其中,|V|为图中的节点数,W为维数为W∈R(D×D)的权重矩阵;通过学习权值矩阵W,上下文向量C提供了对整个图的结构属性的总结;
b、将每个节点的嵌入Uv的与上下文向量C的内积作为节点的权重矩阵衡量节点的重要性;
在加和平均方法计算出的上下文向量中,代表数学运算的节点嵌入对上下文向量c的影响更大,而与上下文向量c最相似的节点嵌入将获得更高的注意权重;通过这种方法,注意力神经网络将赋予数学运算的节点信息更多的权重;
Figure FDA0003740031000000025
c、经过以上两个步骤,神经网络为每个节点v赋予了权重av,当计算每个节点的注意权重av后,计算整体图嵌入h∈RD
Figure FDA0003740031000000031
6.根据权利要求1中所述的基于代码属性图的代码相似性检测方法,其特征在于:用张量神经网络预测两个图嵌入向量之间的相关程度,并用预测得到的结果作为相似性检测的最终得分,具体为:
一对代码片段的图嵌入向量作为模型的输入,经过一个双线性张量层,将两个向量编码为一个张量g;如公式所示:
Figure FDA0003740031000000032
通过计算出一个交互张量g{g∈1×K)},并将g输入全连接的神经网络中,即可得到代码对之间程序相似度的预测值;其中W1 [1×K]∈RD×D×K,是一个权重张量,W2∈RK×2D是一个权重向量,b1∈RK,f3是一个激活函数,K是一个超参数,控制最后输出的图交互向量的维度;
全连接神经网络部分可以看作是一个有监督学习神经网络的二分类任务;最终的得到模型输出的图相似度分数为
Figure FDA0003740031000000033
Figure FDA0003740031000000034
Figure FDA0003740031000000035
其中W0,b0是全连接神经网络的参数;选用二元交叉熵作模型的loss函数;同时使用作adaMax为最后的全连接神经网络模型的优化器;
Figure FDA0003740031000000036
最后,为了能够预测代码片段之间的程序相似性,为模型最后设置一个预测阈值σ,当预测值大于超参数σ时,判断输入为代码克隆;即:
Figure FDA0003740031000000037
CN202210813094.9A 2022-07-11 2022-07-11 基于代码属性图的代码相似性检测方法 Pending CN115438709A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210813094.9A CN115438709A (zh) 2022-07-11 2022-07-11 基于代码属性图的代码相似性检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210813094.9A CN115438709A (zh) 2022-07-11 2022-07-11 基于代码属性图的代码相似性检测方法

Publications (1)

Publication Number Publication Date
CN115438709A true CN115438709A (zh) 2022-12-06

Family

ID=84241177

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210813094.9A Pending CN115438709A (zh) 2022-07-11 2022-07-11 基于代码属性图的代码相似性检测方法

Country Status (1)

Country Link
CN (1) CN115438709A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116561299A (zh) * 2023-07-10 2023-08-08 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 代码摘要生成方法、装置、设备及存储介质
CN117252904A (zh) * 2023-11-15 2023-12-19 南昌工程学院 基于长程空间感知与通道增强的目标跟踪方法与系统
CN117609005A (zh) * 2023-10-19 2024-02-27 广东工业大学 一种代码相似度检测方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN111783100A (zh) * 2020-06-22 2020-10-16 哈尔滨工业大学 基于图卷积网络对代码图表示学习的源代码漏洞检测方法
CN114327483A (zh) * 2021-12-31 2022-04-12 华中科技大学 图张量神经网络模型建立方法及源代码语义识别方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN111783100A (zh) * 2020-06-22 2020-10-16 哈尔滨工业大学 基于图卷积网络对代码图表示学习的源代码漏洞检测方法
CN114327483A (zh) * 2021-12-31 2022-04-12 华中科技大学 图张量神经网络模型建立方法及源代码语义识别方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
WILLIANM L. HAMILTON ET AL.: "Inductive Representation Learning on Large Graphs", 《ARXIV:1706.02216V4》 *
YUELONG WU ET AL.: "Vulnerability Detection in C/C++ Source Code With Graph Representation Learning", 《2021 IEEE 11TH ANNUAL COMPUTING AND COMMUNICATION WORKSHOP AND CONFERENCE》 *
YUNSHENG BAI ET AL.: "SimGNN: A Neural Network Approach to Fast Graph Similarity Computation", 《ARXIV:1808.05689V4》 *
用之有弗盈: "在Python脚本中调用Joern批量生成C/C++代码属性图", 《HTTPS://BLOG.CSDN.NET/QQ_36281420/ARTICLE/DETAILS/115247255》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116561299A (zh) * 2023-07-10 2023-08-08 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 代码摘要生成方法、装置、设备及存储介质
CN116561299B (zh) * 2023-07-10 2023-10-20 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 代码摘要生成方法、装置、设备及存储介质
CN117609005A (zh) * 2023-10-19 2024-02-27 广东工业大学 一种代码相似度检测方法
CN117252904A (zh) * 2023-11-15 2023-12-19 南昌工程学院 基于长程空间感知与通道增强的目标跟踪方法与系统
CN117252904B (zh) * 2023-11-15 2024-02-09 南昌工程学院 基于长程空间感知与通道增强的目标跟踪方法与系统

Similar Documents

Publication Publication Date Title
CN111310438B (zh) 基于多粒度融合模型的中文句子语义智能匹配方法及装置
Zheng et al. Characterization inference based on joint-optimization of multi-layer semantics and deep fusion matching network
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
RU2628431C1 (ru) Подбор параметров текстового классификатора на основе семантических признаков
US20220050967A1 (en) Extracting definitions from documents utilizing definition-labeling-dependent machine learning background
Chang et al. Structured learning with constrained conditional models
CN115438709A (zh) 基于代码属性图的代码相似性检测方法
RU2679988C1 (ru) Извлечение информационных объектов с помощью комбинации классификаторов
CN109857457B (zh) 一种在双曲空间中学习源代码中的函数层次嵌入表示方法
CN114218389A (zh) 一种基于图神经网络的化工制备领域长文本分类方法
CN112818698B (zh) 一种基于双通道模型的细粒度的用户评论情感分析方法
US11693630B2 (en) Multi-lingual code generation with zero-shot inference
JP2022508737A (ja) 自然言語文書を検索するシステム
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN116383399A (zh) 一种事件舆情风险预测方法及系统
Hedges et al. The prediction of merged attributes with multiple viewpoint systems
CN117149974A (zh) 一种子图检索优化的知识图谱问答方法
CN116108191A (zh) 一种基于知识图谱的深度学习模型推荐方法
CN108733359B (zh) 一种软件程序的自动生成方法
CN114742069A (zh) 一种代码相似度检测方法及装置
CN117574898A (zh) 基于电网设备的领域知识图谱更新方法及系统
Jin et al. WordTransABSA: Enhancing Aspect-based Sentiment Analysis with masked language modeling for affective token prediction
CN115204143B (zh) 一种基于prompt的文本相似度计算方法及系统
CN116662991A (zh) 基于人工智能的智能合约意图检测方法
CN116910190A (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