CN118227139A - 一种基于图注意力网络的跨语言代码相似性检测系统及方法 - Google Patents
一种基于图注意力网络的跨语言代码相似性检测系统及方法 Download PDFInfo
- Publication number
- CN118227139A CN118227139A CN202410374991.3A CN202410374991A CN118227139A CN 118227139 A CN118227139 A CN 118227139A CN 202410374991 A CN202410374991 A CN 202410374991A CN 118227139 A CN118227139 A CN 118227139A
- Authority
- CN
- China
- Prior art keywords
- ast
- graph
- code
- codes
- similarity
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Machine Translation (AREA)
Abstract
本发明涉及一种基于图注意力网络的跨语言代码相似性检测系统及方法,该系统包括:代码预处理模块的输入为源代码、输出为抽象语法树AST的特征矩阵以及AST对应图结构的邻接矩阵;图注意力网络模块利用代码预处理模块的输出数据进行训练,以得到代码的高级特征向量;相似性度量模块根据代码的高级特征向量,用于计算代码之间的相似度;应用层模块则用于提供集成接口以及实时展示检测过程和检测结果数据。与现有技术相比,本发明将不同编程语言的抽象语法树AST进行特征向量标准化,以及对AST的图结构化和向量化,利用图注意力网络来训练,能够深入理解和分析不同编程语言之间代码的结构和语义特征,有效提高跨语言代码相似性检测的准确性和效率。
Description
技术领域
本发明涉及代码相似性检测技术领域,尤其是涉及一种基于图注意力网络的跨语言代码相似性检测系统及方法。
背景技术
代码相似性检测在当今的计算机科学领域扮演着重要角色,尤其是在软件工程、版权保护、教育和安全等领域中。在软件工程中,通过比较代码片段可以帮助开发者发现重复代码,从而优化代码结构和提升效率;在版权保护方面,此技术能够检测和防止非法复制或模仿他人的代码;在教育领域中,能够用于识别学生作业中的抄袭行为,确保学术诚信;此外,代码相似性检测在安全领域也有着重要应用,比如通过分析和识别恶意软件的代码模式来提高网络安全。
当前在代码相似性检测领域的主流技术主要有以下几大类:
(1)文本匹配技术:包括字符串匹配算法如编辑距离和基于哈希的指纹技术。
(2)抽象语法树(AST)比较:通过将代码解析为AST进行结构化比较。这种方法比文本匹配更深入,但它通常局限于单一编程语言,并且对代码的重构和变异不够鲁棒。
(3)基于度量的技术:例如基于代码的复杂度、风格、模式等度量的比较。它们可能对某些类型的相似性不敏感,比如逻辑上的重构,且可能对于不同编程风格的代码误报率较高。
(4)基于机器学习的技术:使用特征提取和分类算法来识别代码片段。尽管它们在处理大量数据和捕捉复杂模式方面有效,但通常需要大量的标注数据进行训练,并且对于不同编程语言的泛化能力可能有限。
从上述现有的几类主流技术可以归纳出以下局限性:
1)单一语言限制:许多现有的代码相似性检测工具和方法被设计为仅适用于特定的编程语言。这意味着它们无法处理不同语言之间的代码相似性,限制了它们在多语言编程环境中的应用。
2)特定语法依赖:这些工具往往高度依赖于特定编程语言的语法结构。因此,即使是在同一语言内,代码风格的变化或语法更新也可能影响检测结果的准确性。
3)缺乏深层语义理解:传统方法通常关注于代码的表面特征,如关键字、操作符或语法结构。这种方法很难捕捉到代码的深层次语义和逻辑结构。功能相似性的漏检,当面对结构上有所不同但功能上相似的代码时,这些工具可能无法正确识别它们之间的相似性。例如,两段实现相同功能但采用不同算法或结构的代码片段。
综上所述,传统代码相似性检测方法的共同限制在于它们往往无法跨语言进行代码相似性的有效检测。多数方法只能在同一种编程语言内有效工作,对于跨语言的代码相似性检测,尤其是在语法结构和表达习惯存在显著差异的语言之间,它们的效果大打折扣。因此,开发一种能够有效处理跨语言代码相似性检测的方法,具有重要的实际应用价值和学术意义。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于图注意力网络的跨语言代码相似性检测系统及方法,能够适应多种编程语言,提高代码相似性检测的准确性和效率。
本发明的目的可以通过以下技术方案来实现:一种基于图注意力网络的跨语言代码相似性检测系统,包括代码预处理模块、图注意力网络模块、相似性度量模块和应用层模块,所述代码预处理模块的输入为源代码、输出为抽象语法树AST(abstract syntax tree)的特征矩阵以及AST对应图结构的邻接矩阵;
所述图注意力网络(Graph attention networks,GAT)模块利用代码预处理模块的输出数据进行训练,以得到代码的高级特征向量;
所述相似性度量模块根据代码的高级特征向量,用于计算代码之间的相似度;
所述应用层模块用于提供集成接口以及实时展示检测过程和检测结果数据。
一种基于图注意力网络的跨语言代码相似性检测方法,包括以下步骤:
S1、针对输入的两种语言源代码进行解析,再将源代码分解成一系列令牌,之后根据令牌构建出待比较的两种语言代码的AST;
S2、针对两种语言代码的AST进行节点编码以及节点特征向量标准化处理,得到AST的特征矩阵;
S3、针对两种语言代码的AST分别进行图结构转换处理,得到对应图结构的邻接矩阵;
S4、构建图注意力网络架构,利用AST的特征矩阵、图结构的邻接矩阵作为网络的输入,通过学习训练,输出得到代码的高级特征向量;
S5、根据两种语言代码对应的高级特征向量,计算两种语言代码之间的相似度,并结合预设阈值进行比较判断,输出得到相似性检测结果并进行展示。
进一步地,所述步骤S1的具体过程为:
利用编译技术,将输入的两种语言源代码转换为各自的中间表示形式,利用词法分析器将源代码分解成一系列令牌,使用语法分析器根据令牌构建出两种语言代码的AST,利用AST表示代码的层次和结构。
进一步地,所述步骤S2具体包括以下步骤:
S21、针对两种语言代码的AST,将节点类型、节点属性编制一个统一的词汇表,并对这个统一的词汇表进行索引编码;
S22、对两种语言代码的AST进行序列化得到节点序列;
S23、以统一的词汇表作为嵌入矩阵,对AST节点进行词嵌入训练,得到AST节点的词嵌入向量。
进一步地,所述步骤S21中统一的词汇表中包含两种语言共有的结构元素以及两种语言各自特有的元素,且每个元素均有对应的一个唯一的索引编号,编号范围扩展以容纳两种语言的所有元素。
进一步地,所述步骤S3具体包括以下步骤:
S31、分别解析两种语言代码的AST,从中提取对应的信息以构建图结构;
S32、针对构建的图结构进行向量化处理,得到节点特征向量和边特征向量,即得到图结构的特征向量矩阵;
S33、根据图结构中节点之间的连接关系,确定出图结构的邻接矩阵。
进一步地,所述S31中构建图结构的具体过程为:
将AST中的关键结构定义为图的节点;基于AST中的结构关系建立图的边;为节点和边分配属性;
解析AST,提取信息以构建图结构,利用图结构的节点和边反映AST的语法和逻辑结构。
进一步地,所述步骤S4中构建的图注意力网络架构包括:
输入层,用于接受AST节点的特征向量和对应图结构的邻接矩阵;
图注意力层,使用多头注意力机制来获取节点的邻域信息,每个注意力“头”学习不同的节点间关系;每个图注意力层都包含一个线性转换,用于将节点特征映射到新的特征空间,线性变换公式如下:
H(l+1)=W(l)H(l)
其中,H(l)是第l层的节点特征矩阵,W(l)是该层的可学习权重矩阵,W(l)是通过训练过程学习得到的,用于将每个节点的特征从原始特征空间映射到新的特征空间,H(l+1)是经过线性变换后的特征矩阵,将作为下一层的输入,线性变换后的特征矩阵H(l+1)再通过一个LeakyReLU激活函数以增强模型的表达能力;
使用LeakyReLU激活函数以及softmax函数来规范化节点间的注意力权重,设计注意力系数为:
其中,αij是节点j对节点i的注意力系数,它由节点i和其所有邻接系节点的特征向量经过权重矩阵W变换,再通过训练得到的参数向量aT计算得出,这个过程确保了每个节点都能考虑到其邻居节点的信息,而注意力系数决定了邻居节点对当前节点的影响程度;
输出层,将最后一层图注意力层的输出作为代码的高级特征表示,对所有特征进行最大池化操作后获得整个AST高级特征向量表示。
进一步地,所述图注意力网络结构的损失函数为对比损失函数(ContrastiveLoss),对比损失函数用于学习特征空间样本之间的距离,使得相似性的特征向量更接近,而不相似样本的特征向量更远离,对比损失函数的公式为:
其中,y是一个二元标签,表示两个样本是否相似,相似为1、不相似为0,d是两个样本特征向量之间的距离。
进一步地,所述步骤S5具体包括以下步骤:
S51、将两种语言代码对应的高级特征向量映射到一个向量空间中,得到两个代码片段向量;
S52、采用余弦相似度计算方式,计算两个代码片段向量之间的相似度;
S53、将计算得到的相似度与预设阈值进行比较判断,确定两种语言代码之间的相似度检测结果。
与现有技术相比,本发明具有以下优点:
本发明通过设置代码预处理模块、图注意力网络模块、相似性度量模块和应用层模块,利用代码预处理模块输出得到源代码对应抽象语法树AST的特征矩阵以及AST对应图结构的邻接矩阵;利用图注意力网络模块基于代码预处理模块的输出数据进行训练,以得到代码的高级特征向量;利用相似性度量模块根据代码的高级特征向量,计算得到代码之间的相似度;再利用应用层模块提供集成接口以及实时展示检测过程和检测结果数据。由此能够跨语言进行代码相似性的有效检测,能够深入理解和分析不同编程语言之间代码的结构和语义特征,从而实现更加精确和全面的代码相似性判定。
本发明将不同编程语言的抽象语法树AST进行特征向量标准化,以及对AST的图结构化和向量化,并利用图注意力网络来进行训练,不仅能获得AST的语法和结构信息,还得到了代码的横向调用间的关系特征以及数据流之间的关系特征。由此不仅能够理解代码的结构,还能理解更复杂的语义关系,如不同函数或变量间的相互作用,从而达到跨语言的相似性检测的目的,通过多语言AST编码的词嵌入训练,结合图注意力网络技术,提供了一种全新的跨语言代码相似性检测方法,相比现有技术,不仅突破了单语言代码相似性检测的限制,也提高了检测的精度和效率,扩展了应用的范围。
本发明设计了不同编程语言AST的编码方式,将不同编程语言的AST节点编码所形成的长短不一,高维稀疏的特征向量,经过词嵌入训练,得到长度固定的相对稠密的特征向量(即AST向量标准化),从而极大地简化了机器学习或者神经神经网络的输入层结构的设计,也为单语言代码相似度检测创造了条件,提高了模型的性能和效率。
本发明通过对不同编程语言代码的抽象语法树AST进行统一的图结构转换,融合了AST中所包含的代码语法结构特征与图结构所包含的横向调用关系和数据流特征,从而突破了编程语言的语言停留在语法结构上的理解,使得模型能理解代码更深层次的语义,同时也能更加灵活地处理和比较不同语言编写的代码,达到跨语言代码相似性检测的目标。
本发明应用了图注意力网络中动态注意力机制,利用其强大的特征提取和关注机制来处理代码的复杂结构和语义信息,提高了检测精度。具体来说,图注意力网络(GAT)进行高级特征提取的过程核心在于动态注意力机制。该机制允许网络在处理图结构数据时,自动识别并聚焦于最有信息量的部分。对于代码相似性检测而言,GAT能够根据每个节点(代码中的结构元素)和它们之间的关系(如语法和逻辑连接)学习出一个权重分布。这些权重随后决定了在生成节点的新特征表示时,哪些邻居节点的影响更为重要,能够构建出更为精细化的代码表示。这种基于学习到的注意力权重的特征表示,不仅反映了代码的局部结构特点,也能捕捉到跨不同语言的代码片段的深层语义联系。同时,对于功能性相似但表面实现差异较大的代码片段,GAT能够通过对比其结构和语义上的微妙联系,准确地揭示出它们之间的相似性。因此,图注意力网络的动态注意力层在本发明中的应用,大大提升了跨语言代码相似性检测的深度和准确性。
附图说明
图1为本发明的方法流程示意图;
图2a和2b为实施例中Python代码片段及其AST示意图;
图3a和3b为实施例中Java代码片段及其AST示意图;
图4为AST节点转换为嵌入向量的示意图;
图5为AST转换为图结构的示意图;
图6为从源代码经过图注意力网络到高级特征输出的过程示意图;
图7为不同语言源代码的高级特征向量进行相似度比较的示意图;
图8为实施例中Python代码解析后生成的AST示意图;
图9为实施例中Java代码解析后生成的AST示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例
一种基于图注意力网络的跨语言代码相似性检测系统,包括代码预处理模块、图注意力网络模块、相似性度量模块和应用层模块,其中,代码预处理模块的输入为源代码、输出为抽象语法树AST的特征矩阵以及AST对应图结构的邻接矩阵;
图注意力网络模块利用代码预处理模块的输出数据进行训练,以得到代码的高级特征向量;
相似性度量模块根据代码的高级特征向量,用于计算代码之间的相似度;
应用层模块则用于提供集成接口以及实时展示检测过程和检测结果数据。
基于上述系统,实现一种基于图注意力网络的跨语言代码相似性检测方法,如图1所示,包括以下步骤:
S1、针对输入的两种语言源代码进行解析,再将源代码分解成一系列令牌,之后根据令牌构建出待比较的两种语言代码的AST;
S2、针对两种语言代码的AST进行节点编码以及节点特征向量标准化处理,得到AST的特征矩阵;
S3、针对两种语言代码的AST分别进行图结构转换处理,得到对应图结构的邻接矩阵;
S4、构建图注意力网络架构,利用AST的特征矩阵、图结构的邻接矩阵作为网络的输入,通过学习训练,输出得到代码的高级特征向量;
S5、根据两种语言代码对应的高级特征向量,计算两种语言代码之间的相似度,并结合预设阈值进行比较判断,输出得到相似性检测结果并进行展示。
需要说明的是,图注意力网络(Graph Attention Network,GAT)是一种用于处理图结构数据的深度学习模型,它是图神经网络(Graph Neural Network,GNN)的一个变体,其核心特点是在节点的特征聚合过程中引入了注意力机制,这种机制允许模型在更新节点特征时动态地关注其邻居节点的重要性,从而更有效地捕捉图中的复杂关系和结构信息;
抽象语法树(Abstract Syntax Tree,AST)是源代码语法结构的一种树状表示形式,它用树状的方式表示编程语言的语法规则,使得代码的结构更加清晰,便于进行各种编程语言处理任务,如编译器设计、静态分析、代码优化等。
将上述方案应用于实际,通过融合最新的深度学习技术,基于图注意力网络GAT、并将抽象语法树AST转换为图结构后进行向量化处理的方式,旨在解决现有代码相似性检测工具在跨语言处理、深层语义理解以及大规模数据集处理方面的局限性,实现了一种基于GAT的跨语言代码相似性检测方法,不仅能够高效、准确地处理和分析不同编程语言中的代码,提供精确的代码相似性评估,还能够深入挖掘和理解代码间的复杂结构和语义关系。这种技术方案的实施,对于提升代码相似性检测的准确性和处理能力,尤其在跨语言的上下文中,具有显著的技术和实际意义。整个技术方案分为几个主要模块,包括代码预处理模块、图注意力网络模块、相似性度量模块,以及应用层模块。每个模块都承担着特定的功能,共同构成了一个完整的、高效的、准确的跨语言代码相似性检测系统,以下对每个模块分别做具体的阐述。
一、代码预处理模块
代码预处理模块是系统的基础,代码预处理模块的输入是源代码、输出是抽象语法树AST的特征矩阵、AST转化为对应图结构的邻接矩阵。具体步骤如下:
1.1、抽象语法树(AST)的生成
代码解析:利用编译原理中的技术,如词法分析和语法分析,将待比较的两种不同的源代码转换为各自的中间表示形式,本发明的技术方案以Java和Python编写的两段代码片段为例,根据不同的编程语言选择适当的解析器,例如使用ANTLR或者JavaParser对Java代码进行解析,使用Python的AST模块解析Python代码。
代码到令牌的转换:利用词法分析器将源代码分解成一系列令牌(tokens)。
AST生成:使用语法分析器根据令牌构建出待比较的两种语言的抽象语法树(AST)。AST是一种树状的数据结构,能够表示代码的层次和结构,是理解代码逻辑和功能的关键。每个节点代表源代码中的一个结构,如循环、条件语句、表达式等,AST可以用树形结构和Json字符串结构表示,为了更形象化,本发明的技术方案中,用ASCII字符“画”出树形结构AST表示。
比如有Python代码片段如图2a所示,使用Python的AST模块,输出其AST结构如图2b所示。
比如有Java代码片段如图3a所示,使用ANTLR或者JavaParser对Java代码进行解析,输出其AST结构如图3b所示。
1.2、AST节点编码以及特征向量的标准化过程
从上述Python和Java的相同功能的代码片段可以看出,不同编程语言的AST类型和属性编码长度可能不同,这对后续输入到图注意力网络来说,是一个挑战,本发明通过设计一个灵活的嵌入层来处理这种差异,使得不同语言的编码能够映射到一个统一长度的向量空间内。主要分三个步骤:对Java和Python的抽象语法树AST中常用的节点类型、节点属性编制一个统一的词汇表,并对这个统一的词汇表进行索引编码;对上一节中Java和Python的AST进行序列化得到节点序列;最后以统一词汇表为嵌入矩阵,对AST节点进行词嵌入训练,得到AST节点的词嵌入向量,这就是完整的不同语言的AST节点特征向量的标准化过程,也是本发明的创新点之一。以下是对每个步骤的详细叙述:
1)编制Python和Java的AST常用节点类型、属性的统一词汇表,以及索引编码。统一的词汇表中,要包含Python和Java共有的结构元素,以及各自特有的元素。每个元素仍然会有一个唯一的索引编号,但编号范围将扩展以容纳两种语言的所有元素。这样的融合既考虑到了编程语言的共性,也保留了它们的个性,对于实现跨语言代码相似性检测至关重要。以下是一个统一词汇表的示例,并不包含全部内容。
1.FunctionDef/MethodDeclaration:0
2.Return/ReturnStatement:1
3.Call/MethodInvocation:2
4.Name:3
5.Arg/Parameter:4
6.Assign/VariableDeclaration:5
7.BinOp/BinaryOperator:6
8.For/ForStatement:7
9.If/IfStatement:8
10.Import/ImportDeclaration:9
11.Expr:10
12.WhileStatement:11
13.TryStatement:12
14.CatchClause:13
...(其他特有或共有节点)
2)对Java和Python AST进行广度优先遍历,形成节点序列,Python的节点序列如下:
1.FunctionDef(函数定义)
2.Name:add(函数名)
3.Arguments(参数列表)
4.Return(返回语句)
5.BinOp(二元运算)
6.Name:a(变量a)
7.Name:b(变量b)
Java的节点序列如下:
1.MethodDeclaration
2.returnType:"int"
3.name:"add"
4.parameters
5.body
6.Parameter:"int a"
7.Parameter:"int b"
8.ReturnStatement
9.BinaryExpression
10.left:SimpleName"a"
11.operator:"+"
12.right:SimpleName"b"
3)对AST的节点进行词嵌入训练,获得固定长度的标准特征向量。
由于不同编程语言的AST节点类型的差异性,直接使用AST节点的编码作为特征向量,会造成同一功能的AST特征向量的长度不一,对后续的神经网络输入层的设计带来挑战。因此必须对AST节点编码后的原始特征向量进行标准化处理,具体来说,需要进行以下两步操作:
(1)字符串到索引的映射:由于第一步已经编程出了Java和Python的统一词汇表(或字典),现在可以把这两段分别由Java和Python的AST节点的类型和节点属性映射到一个唯一的整数索引。例如,{"Add":1,"Subtract":2,"Multiply":3,...}。
(2)嵌入层训练:这些索引被用作嵌入层的输入。嵌入层会为每个索引提供一个向量表示,它本质上是一个查找表,为词汇表中的每个索引(即每个唯一的字符串)存储一个向量。当传递一个索引到嵌入层时,它会返回与该索引对应的向量。这个向量是在模型训练过程中学习来捕捉字符串(AST节点)的语义特征的。
如图4所示,在嵌入层中,每个唯一的AST节点(通过其索引表示)实际上是与嵌入层中的“一整行”相连接的。每行是一个向量,这个向量是该特定AST节点的嵌入,一个节点索引经过嵌入层查找,最后对应到一个嵌入向量。
线性变换:嵌入层实际上是一种简化的线性变换。当一个节点索引输入到嵌入层时,嵌入层通过查找与该索引关联的嵌入向量来响应。这个过程采用以下公式来表达:
嵌入向量=嵌入矩阵×节点索引的独热编码
嵌入向量归一化:将整数编码转换为0到1之间的值,通常是通过除以最大编码值来实现。例如,如果有10种不同的节点类型(编码为1到10),那么节点类型的编码就可以通过除以10来归一化。最终形成的AST的词嵌入向量如下:
FunctionDef/MethodDeclaration:[0.55,0.68,0.39,0.42,0.57]
Return/ReturnStatement:[0.48,0.62,0.53,0.47,0.51]
Call/MethodInvocation:[0.64,0.59,0.44,0.38,0.50]
Name:[0.37,0.42,0.61,0.56,0.45]
Arg/Parameter:[0.49,0.58,0.39,0.41,0.52]
Assign/VariableDeclaration:[0.43,0.47,0.60,0.54,0.46]
BinOp/BinaryOperator:[0.50,0.63,0.55,0.59,0.48]
For/ForStatement:[0.52,0.57,0.41,0.45,0.53]
If/IfStatement:[0.46,0.61,0.50,0.48,0.49]
Import/ImportDeclaration:[0.58,0.56,0.43,0.39,0.51]
...(其他节点类型和属性的向量)
1.3、抽象语法树AST到图结构的转换
1)AST与图的转换:
节点定义——将AST中的关键结构(如函数、循环、条件语句等)定义为图的节点。
边的构建——基于AST中的结构关系(如函数调用关系、参数传递等)建立图的边。
节点和边的属性——为节点和边分配属性,如节点的类型、边的方向和类型等。
2)图的构建流程:
解析AST——解析AST,提取必要的信息以构建图。
构建图结构——利用提取的信息创建图结构,确保图的节点和边准确反映AST的语法和逻辑结构。
输出图结构——利用图处理库:如NetworkX(Python库)编写脚本,可以从AST构建图结构。也可以利用静态代码分析工具:如Soot(用于Java),提供了从代码到图结构的转换能力。以上述python的AST为例,通过编写自定义脚本,将广度遍历得到的AST节点序列输入脚本后,输出的图结构如图5所示。
3)图结构向量化
节点和边的特征向量化:
节点特征提取——提取每个节点的特征,包括节点的类型、代码范围和语法深度等,并将这些特征转化为向量形式。
边特征提取——为图中的每条边提取特征,如边的类型和方向,并将这些特征转化为向量形式。
4)图特征的编码过程
特征编码:利用独热编码,也可以利用上一节中对AST的词嵌入技术对图的节点和边编码。
示例:假设给定AST节点的编码如下:
FunctionDef:[1,0,0,0]
Name:[0,1,0,0]
Arguments:[0,0,1,0]
Return:[0,0,0,1]
在转换为图结构向量后,得到类似下面的特征向量矩阵:
FunctionDef:[1,0,0,0,...其他特征...]
Name(add):[0,1,0,0,...其他特征...]
Arguments:[0,0,1,0,...其他特征...]
Return:[0,0,0,1,...其他特征...]
BinOp:[特征向量,可能包括操作符的类型]
Name(a):[特征向量,可能包括变量a的特定信息]
Name(b):[特征向量,可能包括变量b的特定信息]
这里,每个特征向量的“其他特征”部分包含了节点特定的属性信息,如变量名称或值类型等。这样的特征向量能够为图注意力网络(GAT)提供每个节点的充分信息,以便学习节点之间的相互作用。
与此同时,图注意力网络(GAT)还需要一个邻接矩阵来表示图中节点之间的连接关系。对于上述的AST,假设FunctionDef为根节点,Arguments和Return为子节点,邻接矩阵如下表所示:
| FD | Nm | Args | Ret | BinOp | Na | Nb | |
| FunctionDef | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
| Name | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Arguments | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Return | 0 | 0 | 0 | 0 | 1 | 0 | O |
| BinOp | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| Name(a) | 0 | 0 | 0 | 0 | 0 | 0 | O |
| Name(b) | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
二、图注意力网络模块
图注意力网络模块是系统的核心模块,主要完成对图注意力网络的架构设计,如图6所示,将AST的特征向量矩阵以及AST转换为图结构的邻接矩阵,作为网络的输入,经过训练,最终得到代码的高级特征向量。具体步骤如下:
2.1、图注意力网络(GAT)架构设计以及特征训练过程
1)图注意力网络架构设计
输入层设计:接受AST节点的特征向量和对应的图结构的邻接矩阵。
图注意力层设计:
多头注意力设计:使用多头注意力机制来获取节点的邻域信息。每个注意力“头”学习不同的节点间关系。
特征转换设计:每个图注意力层都包含一个线性转换,用于将节点特征映射到新的特征空间。线性变换公式如下:
H(l+1)=W(l)H(l)
其中,H(l)是第l层的节点特征矩阵。W(l)是该层的可学习权重矩阵。H(l+1)是经过线性变换后的特征矩阵,将作为下一层的输入。这个公式的核心是权重矩阵W(l),它是通过训练过程学习得到的,用于将每个节点的特征从原始特征空间映射到新的特征空间。线性变换后的特征矩阵H(l+1)再通过一个LeakyReLU激活函数以增强本模型的表达能力。
注意力系数设计:
这个公式是GAT中定义节点间相互影响的核心,它使用了LeakyReLU激活函数以及softmax函数来规范化节点间的注意力权重。公式中αij是节点j对节点i的注意力系数,它由节点i和其所有邻接系节点的特征向量经过权重矩阵W变换,再通过训练得到的参数向量aT计算得出。这个过程确保了每个节点都能考虑到其邻居节点的信息,而注意力系数决定了邻居节点对当前节点的影响程度。这个机制允许GAT动态地学习图中节点之间的复杂和非均质关系,从而更深入地捕捉代码特征和跨语言间的语义相似性。
输出层设计:最后一层图注意力层的输出作为代码的高级特征表示,对所有特征进行汇总(最大池化)来获得整个AST高级特征向量表示。
损失函数设计:
由于本方案提出的图注意力网络的跨语言代码相似性检测方法,并不是直接在图注意力网络的输出层来判断代码相似性,模型的目的是训练出代码的高级特征向量,即输出层输出的是代码的高级语义特征。因此本方案设计的图注意力网络的损失函数设计为对比损失函数(Contrastive Loss),对比损失函数用于学习特征空间样本之间的距离,使得相似性的特征向量更接近,而不相似样本的特征向量更远离。损失函数的公式为:
其中,y是一个二元标签,表示两个样本是否相似(相似为1,不相似为0),d是两个样本特征向量之间的距离。
本方案的一个核心点是在注意力层的一个动态注意力机制,通过学习分配一个权重向量给图中的每个节点,这些权重决定了在节点特征聚合时各个邻居节点的重要性。具体到Python加法函数的例子中,假设有一个函数定义def add(a,b):return a+b,其AST包含了函数定义节点、参数节点以及返回节点。在实际操作中,这一过程通常通过反向传播算法自动完成,网络在训练过程中不断调整注意力权重,以便更准确地预测和识别代码间的功能性相似性。这种学习过程的结果是,即便是在语法结构可能差异显著的不同编程语言之间,GAT也能够识别出逻辑上的相似性,实现跨语言的代码相似性检测。
2)特征学习过程
当把AST的特征矩阵和图结构的特征向量矩阵和邻接矩阵向量输入到GAT的输入层后,GAT将为每个节点(如def,add,a,b,return等)学习一个权重。例如,如果return节点在确定函数的功能时更为关键,那么在动态注意力机制下,return节点及其子节点(即执行加法的表达式节点)将会被赋予更高的权重。这样,在聚合特征向量时,与return节点相关的特征将会被突出,有助于网络捕捉到函数的主要功能是执行加法操作。
三、相似性度量模块
如图7所示,此模块接收图注意力网络输出得到的代码的高级特征向量,以计算代码之间的相似度。它使用数学模型来量化两段代码的相似性,从而支持跨语言的相似性检测。
3.1、向量空间映射:将图注意力网络模块输出的代码的高级特征映射到一个向量空间中。每个代码片段由一个多维向量表示,该向量综合了代码的结构、语义和功能特性。
3.2、相似度计算方法:采用余弦相似度作为主要的相似性度量标准。给定两个代码片段向量表示V1和V2,它们之间的相似度S计算公式如下:
这里,点乘表示向量的内积,而‖V‖表示向量的范数。
3.3、阈值设置:根据实际应用需求,设定一个阈值来判断是否认定两段代码为“相似”。这个阈值可以根据具体的应用场景和要求进行调整。
四、应用层模块
应用层模块是将技术方案应用于实际场景的接口,能够提供用户友好的界面和灵活的集成能力。
4.1、集成接口设计:设计易于集成到现有开发环境和代码审查工具中的接口。这包括提供API接口、插件或其他形式的集成方式,以便开发者和审查者能够方便地使用该技术。
4.2、用户交互界面:开发直观的用户界面,用于展示代码相似性检测的结果。界面可以显示相似代码的对比、相似度分数,以及相关的代码推荐或警告信息。
4.3、实时反馈系统:建立一个实时反馈机制,能够在代码开发过程中及时提供相似性检测的结果。这有助于开发者在编写代码时就意识到潜在的相似性问题。
基于上述的检测系统,其整体工作流程包括:
(1)通过把不同编程语言的源代码解析成各自的抽象语法树AST;
(2)对不同编程语言的的抽象语法树AST进行特征编码形成原始特征;
(3)将不同编程语言的抽象语法树AST转换成各自的图结构;
(4)对不同编程语言的图结构向量化,得到AST图结构的邻接矩阵;
(5)将不同编程语言的AST特征向量矩阵和图结构邻接矩阵输入到图注意力网络进行训练,得到不同编程语言的高级特征向量;
(6)比较向量的相似性,得到不同编程语言的相似性;
(7)将模型集成到系统应用中。
为验证本方案的有效性,本实施例采用上述方案来分析和比较Python中的列表求和函数和Java中的数组求和方法,虽然这两个函数在实现细节上有所不同,但它们在功能上是相似的。
实施步骤详述:
一、源代码准备与解析:
Python函数:定义一个列表求和函数,例如def sum_list(lst):return sum(lst)。该函数接受一个列表作为输入,并返回其所有元素的总和。
Java方法:定义一个数组求和方法,例如public int sumArray(int[]arr){intsum=0;for(int num:arr){sum+=num;}return sum;},此方法遍历整数数组并计算总和。
以上两段代码虽然使用了不同的数据结构(Python列表和Java数组),但它们的核心逻辑是一致的,均是遍历一个集合并计算其元素的总和。
二、代码解析与AST生成
使用Python解析器(例如,内置的ast模块)对Python代码进行解析,生成AST(如图8所示)。AST中的节点反映了函数定义、参数列表和返回语句。
使用Java解析器(如JavaParser)对Java代码进行解析,生成AST(如图9所示)。该AST包含了方法定义、循环结构和累加操作。
使用训练好的词嵌入模型检索得到Python和Javad代码分别对应的AST的特征向量。
Python AST的词嵌入向量(模拟):
函数定义(Function Definition):[0.45,0.60,0.33,0.75,0.28]
参数(Parameter):[0.23,0.68,0.47,0.59,0.36]
返回语句(Return Statement):[0.54,0.39,0.71,0.46,0.29]
...(其他节点类型和属性的向量)
Java AST的词嵌入向量(模拟):
方法定义(Method Definition):[0.62,0.77,0.45,0.34,0.58]
循环(Loop):[0.49,0.53,0.69,0.42,0.31]
变量声明(Variable Declaration):[0.37,0.44,0.56,0.68,0.50]
...(其他节点类型和属性的向量)
在这一步骤中,提取了代码的结构信息,将程序代码转化为更抽象的树状表示形式,并通过词嵌入模型得到Python和Java代码所对应的AST的标准特征向量。由于使用了词嵌入模型,Python和Java虽然语法结构等不同,但是通过本方案,得到的嵌入向量是相同维度的。
三、AST到图结构的转换
转换过程包括遍历AST并创建图结构。在图结构中,每个AST节点成为图结构的一个节点,例如,函数定义、循环语句、变量声明等。
在图结构中,AST节点间的父子关系转化为图结构的边。这样,原始代码的结构信息得以保留,同时加入了函数间调用等横向联系的表示。
四、图结构的向量化
对图中的每个节点进行特征编码,例如,将节点类型、变量名等信息转化为数值向量。这可能涉及到词嵌入技术或独热编码。
对于循环和条件判断等结构,还需要编码其控制流信息。例如,循环体内的节点可能会获得与循环控制相关的特征标记。
向量化的过程中,保留了代码的语义信息,如数据流向和操作的逻辑关系。
五、图注意力网络的配置与训练
配置GAT的结构,设置适当的层数和注意力机制的参数,以适应代码结构的特点。
使用类似的代码片段(如其他求和函数)对GAT进行预训练,使网络能够学习如何识别和处理常见的编程模式和结构。
预训练的目的是使GAT能够在后续的特征提取过程中更有效地识别关键的代码结构和模式。
六、特征提取与相似性度量
将向量化的图结构输入GAT,提取Python列表求和函数和Java数组求和方法的高级特征。这一步骤涉及GAT内部的一系列复杂计算,包括但不限于注意力权重的计算、多头注意力的集成等。
提取的特征代表了代码的高级语义和结构信息,这些信息将用于后续的相似性度量。
使用相似性度量算法(如余弦相似度)来比较提取的特征向量。相似度的计算不仅基于向量之间的角度或距离,还考虑了编程逻辑和数据流的特点。
本实施例以Python和Java为例,将一段数组求和功能的代码解析成各自的AST后,对AST进行词嵌入训练,得到相同维度的词嵌入向量,然后将它们各自的AST转换为图结构,并在此基础上进行有效的向量化和特征提取。同时,利用了图注意力网络的动态注意力机制,学习到了代码的更深层次的语法和语义结构,以及如何将这些结构转化为适合GAT处理的形式,使用GAT来处理跨语言的代码相似性检测,GAT的应用不仅提高了相似性检测的精度,还使得方法能够适应多种编程语言,覆盖更广泛的应用场景。
本实施例展示了“基于图注意力网络的跨语言代码相似性检测方案”在实际应用中的步骤和效果。通过精确地分析不同编程语言中的代码片段,本方案能够有效地识别出在功能上相似的代码,从而为软件开发和维护提供强大的支持。此外,本方案的自动化流程和灵活的适应性使其成为处理复杂代码相似性问题的理想选择。
综上可知,本方案一方面设计跨编程语言的AST编码方式:由于不同编程语言生成的AST的节点类型数目不一,导致AST节点编码后形成的特征向量的长度不一,对机器学习或者神经网络的输入层的设计带来了困难,通过构建不同编程语言的抽象语法树AST节点的统一词汇表,利用词嵌入技术对多语言AST节点进行训练,将不同语言的AST编码从高维的稀疏的长短不一的特征向量映射到固定长度的稠密的向量空间,从而极大地简化了机器学习和神经网络模型的输入层设计,也更利于模型提取跨语言代码中相似的语义信息,从而实现对跨语言代码相似性的检测方法;
另一方面设计图结构的高级编码:传统技术往往忽视了代码间的复杂关系,本方案创新性地将代码的AST转换为图结构,通过构建邻接矩阵和特征矩阵,更全面地捕捉代码间的语义和结构关系。
通过对不同编程语言代码的抽象语法树(AST)的节点类型和节点属性进行编码后做词嵌入训练,从而将不同编程语言生成AST的不同长度的原始的稀疏的特征向量映射到稠密的固定长度的向量空间,解决了神经网络的输入层神经元节点数无法固定的难题,跨越了传统机器学习方法局限于单一语言相似性检测的限制,也突破了对特定语法的依赖的限制。
将抽象语法树AST转变成图结构,对图结构进行向量化,输入到图注意力网络模型,从而将代码的原始特征通过训练得到了代码的高级特征,实现对代码的深层次语义理解。
此外设计了图注意力网络动态注意力层,能够有效地学习和强调图结构数据中的重要节点和关系,从而解决了传统神经网络在处理复杂的图结构(如代码的语法和语义结构)时的局限性。
本方案突破只能单一语言相似性检测的限制,实现跨语言代码相似性检测,通过AST词嵌入训练、图结构转换、图注意力网络等技术,有效地识别和比较不同编程语言编写的代码,克服了传统方法在语法和语义层面的局限;能够显著提高检测精度,传统方法在处理代码的结构和语义层面存在不足,本方案通过AST的图结构向量化和注意力机制,能够更深入地理解代码的语义内容,提高检测的准确性和可靠性。
相比于现有技术,在以下几方面均有突破和创新:
跨语言分析能力:
现有技术——通常仅限于单一语言的分析,缺乏跨语言的通用性。
本方案——能够处理和分析多种编程语言,展现了高度的通用性和适应性。
深层语义理解:
现有技术——主要依赖于表面的代码结构匹配,难以深入理解代码逻辑。
本方案——通过图注意力网络,能够捕获代码间的深层逻辑关系和语义相似性。
动态注意力机制:
现有技术——很少有利用注意力机制深入分析代码结构的例子。
本方案——引入动态注意力机制,自动识别关键代码结构,提高分析的准确度。
本方案的有益效果显著,它不仅提高了代码相似性检测的准确性和效率,而且能够适应多种编程语言,扩展了代码分析的应用范围。特别是在软件工程领域,如代码重构、缺陷检测、以及自动化代码生成等方面,尤其是在安全领域,可以识别用不同编程语言、脚本编写的恶意软件,本方案提供了一种新的视角和工具。此外,本方案的自动化流程大大减少了手动代码分析的工作量,能够为大规模代码库的管理和维护提供强有力的支持。
Claims (10)
1.一种基于图注意力网络的跨语言代码相似性检测系统,其特征在于,包括代码预处理模块、图注意力网络模块、相似性度量模块和应用层模块,所述代码预处理模块的输入为源代码、输出为抽象语法树AST的特征矩阵以及AST对应图结构的邻接矩阵;
所述图注意力网络模块利用代码预处理模块的输出数据进行训练,以得到代码的高级特征向量;
所述相似性度量模块根据代码的高级特征向量,用于计算代码之间的相似度;
所述应用层模块用于提供集成接口以及实时展示检测过程和检测结果数据。
2.一种基于图注意力网络的跨语言代码相似性检测方法,应用于如权利要求1所述的基于图注意力网络的跨语言代码相似性检测系统,其特征在于,包括以下步骤:
S1、针对输入的两种语言源代码进行解析,再将源代码分解成一系列令牌,之后根据令牌构建出待比较的两种语言代码的AST;
S2、针对两种语言代码的AST进行节点编码以及节点特征向量标准化处理,得到AST的特征矩阵;
S3、针对两种语言代码的AST分别进行图结构转换处理,得到对应图结构的邻接矩阵;
S4、构建图注意力网络架构,利用AST的特征矩阵、图结构的邻接矩阵作为网络的输入,通过学习训练,输出得到代码的高级特征向量;
S5、根据两种语言代码对应的高级特征向量,计算两种语言代码之间的相似度,并结合预设阈值进行比较判断,输出得到相似性检测结果并进行展示。
3.根据权利要求2所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述步骤S1的具体过程为:
利用编译技术,将输入的两种语言源代码转换为各自的中间表示形式,利用词法分析器将源代码分解成一系列令牌,使用语法分析器根据令牌构建出两种语言代码的AST,利用AST表示代码的层次和结构。
4.根据权利要求2所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述步骤S2具体包括以下步骤:
S21、针对两种语言代码的AST,将节点类型、节点属性编制一个统一的词汇表,并对这个统一的词汇表进行索引编码;
S22、对两种语言代码的AST进行序列化得到节点序列;
S23、以统一的词汇表作为嵌入矩阵,对AST节点进行词嵌入训练,得到AST节点的词嵌入向量。
5.根据权利要求4所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述步骤S21中统一的词汇表中包含两种语言共有的结构元素以及两种语言各自特有的元素,且每个元素均有对应的一个唯一的索引编号,编号范围扩展以容纳两种语言的所有元素。
6.根据权利要求2所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述步骤S3具体包括以下步骤:
S31、分别解析两种语言代码的AST,从中提取对应的信息以构建图结构;
S32、针对构建的图结构进行向量化处理,得到节点特征向量和边特征向量,即得到图结构的特征向量矩阵;
S33、根据图结构中节点之间的连接关系,确定出图结构的邻接矩阵。
7.根据权利要求6所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述S31中构建图结构的具体过程为:
将AST中的关键结构定义为图的节点;基于AST中的结构关系建立图的边;为节点和边分配属性;
解析AST,提取信息以构建图结构,利用图结构的节点和边反映AST的语法和逻辑结构。
8.根据权利要求6所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述步骤S4中构建的图注意力网络架构包括:
输入层,用于接受AST节点的特征向量和对应图结构的邻接矩阵;
图注意力层,使用多头注意力机制来获取节点的邻域信息,每个注意力“头”学习不同的节点间关系;每个图注意力层都包含一个线性转换,用于将节点特征映射到新的特征空间,线性变换公式如下:
H(l+1)=W(l)H(l)
其中,H(l)是第l层的节点特征矩阵,W(l)是该层的可学习权重矩阵,W(l)是通过训练过程学习得到的,用于将每个节点的特征从原始特征空间映射到新的特征空间,H(l+1)是经过线性变换后的特征矩阵,将作为下一层的输入,线性变换后的特征矩阵H(l+1)再通过一个LeakyReLU激活函数以增强模型的表达能力;
使用LeakyReLU激活函数以及softmax函数来规范化节点间的注意力权重,设计注意力系数为:
其中,αij是节点j对节点i的注意力系数,它由节点i和其所有邻接系节点的特征向量经过权重矩阵W变换,再通过训练得到的参数向量aT计算得出,这个过程确保了每个节点都能考虑到其邻居节点的信息,而注意力系数决定了邻居节点对当前节点的影响程度;
输出层,将最后一层图注意力层的输出作为代码的高级特征表示,对所有特征进行最大池化操作后获得整个AST高级特征向量表示。
9.根据权利要求8所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述图注意力网络结构的损失函数为对比损失函数,对比损失函数用于学习特征空间样本之间的距离,使得相似性的特征向量更接近,而不相似样本的特征向量更远离,对比损失函数的公式为:
其中,y是一个二元标签,表示两个样本是否相似,相似为1、不相似为0,d是两个样本特征向量之间的距离。
10.根据权利要求2所述的一种基于图注意力网络的跨语言代码相似性检测方法,其特征在于,所述步骤S5具体包括以下步骤:
S51、将两种语言代码对应的高级特征向量映射到一个向量空间中,得到两个代码片段向量;
S52、采用余弦相似度计算方式,计算两个代码片段向量之间的相似度;
S53、将计算得到的相似度与预设阈值进行比较判断,确定两种语言代码之间的相似度检测结果。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202410374991.3A CN118227139A (zh) | 2024-03-29 | 2024-03-29 | 一种基于图注意力网络的跨语言代码相似性检测系统及方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202410374991.3A CN118227139A (zh) | 2024-03-29 | 2024-03-29 | 一种基于图注意力网络的跨语言代码相似性检测系统及方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN118227139A true CN118227139A (zh) | 2024-06-21 |
Family
ID=91498977
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202410374991.3A Pending CN118227139A (zh) | 2024-03-29 | 2024-03-29 | 一种基于图注意力网络的跨语言代码相似性检测系统及方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN118227139A (zh) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN118860356A (zh) * | 2024-09-25 | 2024-10-29 | 宁波鑫义信息科技有限公司 | 基于接口文档的动态代码生成方法及系统 |
| CN119168238A (zh) * | 2024-11-21 | 2024-12-20 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程教育领域的细粒度编程知识点认知诊断方法 |
| CN119357967A (zh) * | 2024-12-26 | 2025-01-24 | 中海油信息科技有限公司 | 一种组件匹配方法、装置、计算机设备和存储介质 |
| CN119376783A (zh) * | 2024-10-22 | 2025-01-28 | 国网冀北电力有限公司计量中心 | 能源互联网营销服务系统数据的同步迭代方法、装置及存储介质 |
| CN120144100A (zh) * | 2025-02-17 | 2025-06-13 | 北京理工大学 | 多视角对比学习跨语言源代码表示方法 |
-
2024
- 2024-03-29 CN CN202410374991.3A patent/CN118227139A/zh active Pending
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN118860356A (zh) * | 2024-09-25 | 2024-10-29 | 宁波鑫义信息科技有限公司 | 基于接口文档的动态代码生成方法及系统 |
| CN119376783A (zh) * | 2024-10-22 | 2025-01-28 | 国网冀北电力有限公司计量中心 | 能源互联网营销服务系统数据的同步迭代方法、装置及存储介质 |
| CN119376783B (zh) * | 2024-10-22 | 2025-05-06 | 国网冀北电力有限公司计量中心 | 能源互联网营销服务系统数据的同步迭代方法、装置及存储介质 |
| CN119168238A (zh) * | 2024-11-21 | 2024-12-20 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程教育领域的细粒度编程知识点认知诊断方法 |
| CN119357967A (zh) * | 2024-12-26 | 2025-01-24 | 中海油信息科技有限公司 | 一种组件匹配方法、装置、计算机设备和存储介质 |
| CN119357967B (zh) * | 2024-12-26 | 2025-05-02 | 中海油信息科技有限公司 | 一种组件匹配方法、装置、计算机设备和存储介质 |
| CN120144100A (zh) * | 2025-02-17 | 2025-06-13 | 北京理工大学 | 多视角对比学习跨语言源代码表示方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
| CN111460450B (zh) | 一种基于图卷积网络的源代码漏洞检测方法 | |
| CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
| Cheng et al. | Static detection of control-flow-related vulnerabilities using graph embedding | |
| CN118227139A (zh) | 一种基于图注意力网络的跨语言代码相似性检测系统及方法 | |
| Bui et al. | Bilateral dependency neural networks for cross-language algorithm classification | |
| CN114201406B (zh) | 基于开源组件的代码检测方法、系统、设备及存储介质 | |
| CN113127933B (zh) | 一种基于图匹配网络的智能合约庞氏骗局检测方法及系统 | |
| CN117454387A (zh) | 基于多维度的特征提取的漏洞代码检测方法 | |
| CN118332559A (zh) | 基于分层源代码表示学习方法的跨语言漏洞检测系统 | |
| CN119272275A (zh) | 基于自适应图神经网络的源代码漏洞检测方法及系统 | |
| CN116361816A (zh) | 一种智能合约漏洞检测方法、系统、存储介质及设备 | |
| CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
| Li et al. | On the code vulnerability detection based on deep learning: A comparative study | |
| CN115373737A (zh) | 一种基于特征融合的代码克隆检测方法 | |
| CN120763939A (zh) | 基于多特征融合学习的跨链智能合约漏洞检测方法及系统 | |
| CN120873206A (zh) | 基于大模型的数据平台元数据自动生成方法 | |
| Zhang et al. | A parallel deep learning-based code clone detection model | |
| CN119203149A (zh) | 一种基于Transformer与GAT的多模态源代码漏洞静态检测方法 | |
| CN117668838A (zh) | 一种多语言Webshell的检测方法 | |
| CN116136822A (zh) | 一种基于多元信息融合的软件缺陷检测方法 | |
| Mathai et al. | Codesam: Source code representation learning by infusing self-attention with multi-code-view graphs | |
| CN119025091B (zh) | 一种面向信创平台的智能代码改写及其验证方法 | |
| CN119760720B (zh) | 一种使用异构图注意力网络的源代码漏洞检测方法 | |
| CN117435246B (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 |