CN116738963A - 基于多头注意力机制的深度学习代码抄袭检测方法 - Google Patents

基于多头注意力机制的深度学习代码抄袭检测方法 Download PDF

Info

Publication number
CN116738963A
CN116738963A CN202310257808.7A CN202310257808A CN116738963A CN 116738963 A CN116738963 A CN 116738963A CN 202310257808 A CN202310257808 A CN 202310257808A CN 116738963 A CN116738963 A CN 116738963A
Authority
CN
China
Prior art keywords
refers
vector
abstract syntax
code
ast
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
CN202310257808.7A
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.)
South China University of Technology SCUT
Original Assignee
South China University of Technology SCUT
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 South China University of Technology SCUT filed Critical South China University of Technology SCUT
Priority to CN202310257808.7A priority Critical patent/CN116738963A/zh
Publication of CN116738963A publication Critical patent/CN116738963A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files
    • 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/205Parsing
    • G06F40/211Syntactic parsing, e.g. based on context-free grammar [CFG] or unification grammars
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/253Grammatical analysis; Style critique
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种基于多头注意力机制的深度学习代码抄袭检测方法,包括:1)使用代码解析工具将源代码解析成抽象语法树;2)以语句节点作为分解粒度,将抽象语法树以深度优先遍历的方式分解成一组抽象语法子树;3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络将抽象语法子树的代码向量表示成一个固定长度的向量,通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭;4)使用注意力机制,将判定为抄袭的两份代码进行源代码相似性的标注。本发明实现了端到端的源代码抄袭检测算法,可实现更灵活和精确的下游应用。

Description

基于多头注意力机制的深度学习代码抄袭检测方法
技术领域
本发明涉及代码相似性和代码抄袭检测的技术领域,尤其是指一种基于多头注意力机制的深度学习代码抄袭检测方法。
背景技术
代码抄袭检测是指检测出存在于代码库中两个及两个以上相同或者相似的源代码片段,并进行代码相似性标注的过程,在使用在线判别系统(Online Judge System)的大学编程课程中起着重要作用。
在典型的大学编程课程中,代码抄袭检测工具一般使用非机器学习的方法来完成。这些方法虽然能够很好的检测代码混淆程度低的抄袭代码对,但是对于高程度的混淆,如代码结构的重构和语句的等价替换,却依旧敏感。随着代码抄袭检测领域的不断发展,有三类源代码信息抽取的方法得到了发展,它们分别是:1、基于抽象语法树的抄袭检测方法,这类方法使用源代码上的句法信息,如for语句的句法结构,if语句的句法结构等;2、基于图的代码抄袭检测方法,这类方法使用源代码上的语义信息,如语句块的跳转;3、基于程序行为的代码抄袭检测方法,这类方法使用程序的运行行为信息。非机器学习的方法,通过使用以上三类方法将源代码表示成中间形式,然后采用贪心字符串平铺(Greedy StringTiling)等方法计算代码对的相似性,这类方法不需要训练模型,但易受代码结构的影响,同时难以识别语句的等价替换,其检测精度仍然需要完善。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提出了一种基于多头注意力机制的深度学习代码抄袭检测方法,能够使用源代码的句法信息进行代码抄袭检测,缓解对代码结构敏感和语句的等价替换的问题,同时为检测语义抄袭提供了一个探索方向,进一步可以实现更灵活和精确的下游应用。
为实现上述目的,本发明所提供的技术方案为,基于多头注意力机制的深度学习代码抄袭检测方法,包括以下步骤:
1)使用代码解析工具将源代码解析成抽象语法树;
2)以语句节点作为分解粒度,将抽象语法树以深度优先遍历的方式分解成一组抽象语法子树;
3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络的方式将抽象语法子树的代码向量表示成一个固定长度的向量,最后通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭;
4)使用注意力机制,将判定为抄袭的两份代码进行源代码相似性的标注。
进一步,在步骤1)中,抽象语法树指的是编译原理中语法分析的结果,语法分析以词法分析的结果为输入,语法检查的同时并输出一棵语法树;给定一段代码text,生成抽象语法树ast的过程由公式定义为:
tokens=lexer(text)
ast=parser(tokens)
式中,lexer是指词法分析器,tokens是指词法分析的结果即单词序列,parser是指语法分析器,ast即抽象语法树。
进一步,在步骤2)中,根据步骤1)所得抽象语法树ast,将抽象语法树ast分解成一组抽象语法子树sub_asts,具体分解的过程如下:
A)初始化语句节点集S={},令节点node指向抽象语法树ast的根节点;
B)访问节点node,如果当前节点node∈Logics,那么S=node∪S;
C)访问当前节点node的子节点;
D)重复B)和C),直至遍历完抽象语法树;
Logics={MethodDeclaration,LocalVariable,ForStatement,TryStatement,WhileStatement,ReturnStatement}
式中,Logics指的是语句节点集合,MethodDeclaration指的是方法声明语句、LocalVariable指的是变量声明语句、ForStatement指的是for语句、TryStatement指的是try语句、WhileStatement指的是while语句、ReturnStatement指的是return语句;
一棵抽象语法树ast的分解结果为一组抽象语法子树sub_asts:
sub_asts=[sub_ast1,sub_ast2,sub_ast3,...,sub_asti]
式中,sub_asti指的是第i棵抽象语法子树。
进一步,所述步骤3)包括以下步骤:
3.1)使用bigclonebench和googlejam4数据集,生成抽象语法树的语料库,然后使用无监督的word2vec算法模型对抽象语法树的节点生成对应的向量:
asts=parser(codes)
sequences=dfs(asts)
we=word2vec(sequences)
式中,codes是指bigclonebench和googlejam4数据集中的所有代码片段,dfs是指以深度优先遍历的方式生成抽象语法树的节点序列,sequences是dfs生成的所有的序列,word2vec是指使用词嵌入的算法模型生成抽象语法树节点的向量表示,we∈Rv×d是指词向量矩阵,其中v是指词汇量的大小,d是向量维度,R是指向量空间;
3.2)使用递归神经网络生成抽象语法子树sub_ast的向量,具体为:
给定一棵抽象语法子树sub_ast,用n表示非叶子节点,用m表示节点n的子节点数量,那么节点n的向量表示为:
式中,xn是指节点n的独热编码,νecn是指节点n对应的向量,we T是指向量矩阵we的转置;
式中,wn∈Rd×k是指可学习的权重矩阵,k是输出维度,bn是节点n的偏置项,hi是节点n第i个子节点的隐藏状态,h是更新之后的隐藏状态,σ是激活函数;通过上式,就能够自底向上递归地计算抽象语法子树中所有节点的向量,从而提取所有节点的词法和语法信息,生成抽象语法子树sub_ast的向量h,那么步骤3.1)中的一组抽象语法子树sub_asts就转换成了向量ht
ht=[h1,h2,h3,...,hi]
式中,hi表示第i棵抽象语法子树的向量;
3.3)使用位置编码生成时序信息,具体为:
式中,pos是指抽象语法子树在一组抽象语法子树中从左到右的位置,u是指节点向量的第u个维度,sin和cos分别指正弦函数和余弦函数,PEcos和PEsin分别指以正弦函数和余弦函数的方式生成时序信息,正弦函数和余弦函数能够将位置外推到比训练期间遇到的序列长度更长的序列,从而使得位置编码拥有更好的泛化性,那么步骤3.2)所得向量ht就转换成了hp
hpi=PEsin(hi)+PEcos(hi)
hp=[hp1,hp2,hp3,...,hpi]
式中,hpi指的是hi经过转换后所得的向量;
3.4)使用注意力机制进一步提取特征,可缩放注意力机制的数学定义:
Qi'=QWi' Q
Ki'=KWi' K
Vi'=VWi' V
式中,Q是指查询query,指的是抽象语法子树的向量;K是指键key,V是指值value,K和V相同,且在可缩放注意力机制它们的值与Q相同,Qi'、Ki'、Vi'分别对应Q、K、V经过转化后的向量;分别对应Q、K、V的中第i'个可学习的权重矩阵,do是指向量的输出维度,dmodel是指矩阵中的第一个维度,dmodel由dmodel/h=do确定;headi'是指第i'个注意力头;
多头注意力机制是可缩放注意力机制的扩展,能够不同向量空间学习向量的特征,具体为:
multihead(Q,K,V)=Concat(head1,head2,head3,...,headi')
式中,是一个可学习的权重矩阵,Concat是向量连接运算;multihead是指多头注意力计算;多头注意力机制即使用多个可缩放注意力对抽象语法子树的向量进行特征深化,最后将多个可缩放注意力的计算结果连接在一起;
经过多头注意力机制后,步骤3.3)所得向量hp转成了向量ha,具体如下:
hai=multihead(hpi,hpi,hpi)
ha=[ha1,ha2,ha3,...,hai]
式中,hai是指hpi经过多头注意力机制转换后所得的向量;
3.5)使用残差网络,连接步骤3.2)中的向量ht和经过注意力机制的向量ha,具体如下:
res=ha+ht
式中,ha和ht两个向量相加即得到残差网络的输出res;
3.6)使用线性网络层将步骤3.5)的输出投影到一维向量,所得的一维向量即为代码对的相似值,即:
s=add(resx,-resy)Wl
式中,resx和resy是指代码x和代码y经过残差网络所得的两个特征向量,add是指线性相加,s是代码x和代码y的相似值,Wl∈Rd是指线性网络层可学习的权重矩阵。
进一步,在步骤4)中,使用注意力机制将判定为相似的两个代码进行标注,相似性标注阶段使用的是递归神经网络所得输出ht;相似性标注以抽象语法子树为单位,计算代码对的子树之间的相似度超过阈值的代码片段,即:
scoresij=htxihtyj
pairs=mark(scoresij)
式中,htxi是指代码x的向量ht的第i个向量分量,htyj是指代码y的向量ht的第j个向量分量,scoresij是指htxi和htyj相似性得分,mark是指将超过阈值ε的抽象语法子树标记出来,pairs是指被标记的两个代码中的片段。
本发明与现有技术相比,具有如下优点与有益效果:
1、本发明首次采用多头注意力机制进行代码抄袭检测,缓解对代码结构敏感的问题,同时为检测语义抄袭提供了一个方案。
2、本发明可以学习代码的词法和语法信息,为代码的向量表示提供了更完善的信息。
3、本发明与代码抄袭检测的相似性标定方法相比,提高了语义解释。
4、本发明可通过数据集扩充识别新的代码抄袭手段。
5、本发明方法在代码抄袭检测任务中具有广泛的使用空间,操作简单、适应性强,具有广阔的应用前景。
附图说明
图1为本发明逻辑流程示意图。
图2为本发明的架构示意图。图中parse指的是词法分析和语法分析,splits指的是抽象语法树的划分,RvNN指的是递归神经网络,PE指的是位置编码,MultiHead指的是多头注意力,residual指的是残差连接,add指的是线性相加。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
如图1和图2所示,本实施例提供了一种基于多头注意力机制的深度学习代码抄袭检测方法,使用了抽象语法树的语法信息及多头注意力机制,其包括以下步骤:
1)使用代码解析工具将源代码解析成抽象语法树;
抽象语法树指的是编译原理中语法分析的结果,语法分析以词法分析的结果为输入,语法检查的同时并输出一棵语法树;给定一段代码text,生成抽象语法树ast的过程由公式可定义为:
tokens=lexer(text)
ast=parser(tokens)
式中,lexer是指词法分析器,tokens是指词法分析的结果即单词序列,parser是指语法分析器,ast即抽象语法树。
2)根据步骤1)所得抽象语法树ast,进一步将抽象语法树ast分解成一组抽象语法子树sub_asts,具体分解的过程如下:
A)初始化语句节点集S={},令节点node指向抽象语法树ast的根节点。
B)访问节点node,如果当前节点node∈Logics,那么S=node∪S。
C)访问当前节点node的子节点。
D)重复B)和C),直至遍历完抽象语法树。
Logics={MethodDeclaration,LocalVariable,ForStatement,TryStatement,WhileStatement,ReturnStatement}
式中,Logics指的是语句节点集合,MethodDeclaration指的是方法声明语句、LocalVariable指的是变量声明语句、ForStatement指的是for语句、TryStatement指的是try语句、WhileStatement指的是while语句、ReturnStatement指的是return语句。
一颗抽象语法树ast的分解结果为一组抽象语法子树sub_asts:
sub_asts=[sub_ast1,sub_ast2,sub_ast3,...,sub_asti]
式中,sub_asti指的是第i棵抽象语法子树。
3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络的方式将抽象语法子树的代码向量表示成一个固定长度的向量,最后通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭,包括以下步骤:
3.1)使用bigclonebench和googlejam4数据集,生成抽象语法树的语料库,然后使用无监督的word2vec算法模型对抽象语法树的节点生成对应的向量:
asts=parser(codes)
sequences=dfs(asts)
we=word2vec(sequences)
式中,codes是指bigclonebench和googlejam4数据集中的所有代码片段,dfs是指以深度优先遍历的方式生成抽象语法树的节点序列,sequences是dfs生成的所有的序列,word2vec是指使用词嵌入的算法模型生成抽象语法树节点的向量表示,we∈Rv×d是指词向量矩阵,其中v是指词汇量的大小,d是向量维度,R是指向量空间;
3.2)使用递归神经网络生成抽象语法子树sub_ast的向量,具体为:
给定一棵抽象语法子树sub_ast,用n表示非叶子节点,用m表示节点n的子节点数量,那么节点n的向量可表示为:
式中,xn是指节点n的独热编码,νecn是指节点n对应的向量,we T是指向量矩阵we的转置。
式中,wn∈Rd×k是指可学习的权重矩阵,其中d是向量维度、k是输出维度,bn是节点n的偏置项,hi是节点n第i个子节点的隐藏状态,h是更新之后的隐藏状态,σ是激活函数。通过上式,就可以自底向上递归地计算抽象语法子树中所有节点的向量,从而提取所有节点的词法和语法信息,生成抽象语法子树sub_ast的向量h,那么步骤3.1)中的一组抽象语法子树sub_asts就转换成了向量ht
ht=[h1,h2,h3,...,hi]
式中,hi表示第i棵抽象语法子树的向量;
3.3)使用位置编码生成时序信息,具体为:
式中,pos是指抽象语法子树在一组抽象语法子树中从左到右的位置,u是指节点向量的第u个维度,sin和cos分别指正弦函数和余弦函数,PEcos和PEsin分别指以正弦函数和余弦函数的方式生成时序信息,正弦函数和余弦函数能够将位置外推到比训练期间遇到的序列长度更长的序列,从而使得位置编码拥有更好的泛化性,那么步骤3.2)所得向量ht就转换成了hp
hpi=PEsin(hi)+PEcos(hi)
hp=[hp1,hp2,hp3,...,hpi]
式中,hpi指的是hi经过转换后所得的向量。
3.4)使用注意力机制进一步提取特征,具体而言,可缩放注意力机制的数学定义:
Qi'=QWi' Q
Ki'=KWi' K
Vi'=VWi' V
式中,Q是指查询query,指的是抽象语法子树的向量;K是指键key,V是指值value,K和V相同,且在可缩放注意力机制它们的值与Q相同,Qi'、Ki'、Vi'分别对应Q、K、V经过转化后的向量;分别对应Q、K、V的中第i'个可学习的权重矩阵,do是指向量的输出维度,dmodel是指矩阵中的第一个维度,dmodel由dmodel/h=do确定;headi'是指第i'个注意力头;
多头注意力机制是可缩放注意力机制的扩展,可以不同向量空间学习向量的特征,具体而言:
multihead(Q,K,V)=Concat(head1,head2,head3,...,headi')
式中,是一个可学习的权重矩阵,Concat是向量连接运算;multihead是指多头注意力计算;多头注意力机制即使用多个可缩放注意力对抽象语法子树的向量进行特征深化,最后将多个可缩放注意力的计算结果连接在一起;
经过多头注意力机制后,步骤3.3)所得hp转成了ha,具体如下:
hai=multihead(hpi,hpi,hpi)
ha=[ha1,ha2,ha3,...,hai]
式中,hai是指hpi经过多头注意力机制转换后所得的向量。
3.5)使用残差网络,连接步骤3.2)中的向量ht和经过注意力机制的向量ha,具体如下:
res=ha+ht
ha和ht两个向量相加即得到残差网络的输出res。
3.6)使用线性网络层步骤3.5)的输出投影到一维向量,所得的一维向量即为该代码对的相似值,即:
s=add(resx,-resy)Wl
式中,resx和resy是指代码x和代码y经过残差网络所得的两个特征向量,add是指线性相加,s是代码x和代码y的相似值,Wl∈Rd是指线性网络层可学习的权重矩阵。
4)使用注意力机制将判定为相似的两个代码进行标注,相似性标注阶段主要使用的是步骤3.2)递归神经网络所得输出ht。相似性标注以抽象语法子树为单位,计算代码对的子树之间的相似度超过阈值的代码片段,即
scoresij=htxihtyj
pairs=mark(scoresij)
式中,htxi是指代码x的向量ht的第i个向量分量,htyj是指代码y的向量ht的第j个向量分量,scoresij是指htxi和htyj相似性得分,mark是指将超过阈值ε的抽象语法子树标记出来,ε的取值为35.0,pairs是指被标记的两个代码中的片段。
由以上公式可知,本方法的代码相似性标注是以子树为粒度的。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (5)

1.基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,包括以下步骤:
1)使用代码解析工具将源代码解析成抽象语法树;
2)以语句节点作为分解粒度,将抽象语法树以深度优先遍历的方式分解成一组抽象语法子树;
3)使用递归神经网络生成抽象语法子树的代码向量,使用多头自注意力机制、残差网络获取抽象语法子树的代码向量的特征,采用全连接网络的方式将抽象语法子树的代码向量表示成一个固定长度的向量,最后通过余弦相似性计算两份代码的相似性,相似性超过阈值的代码判定为抄袭,未超过阈值的判定为未抄袭;
4)使用注意力机制,将判定为抄袭的两份代码进行源代码相似性的标注。
2.根据权利要求1所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,在步骤1)中,抽象语法树指的是编译原理中语法分析的结果,语法分析以词法分析的结果为输入,语法检查的同时并输出一棵语法树;给定一段代码text,生成抽象语法树ast的过程由公式定义为:
tokens=lexer(text)
ast=parser(tokens)
式中,lexer是指词法分析器,tokens是指词法分析的结果即单词序列,parser是指语法分析器,ast即抽象语法树。
3.根据权利要求2所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,在步骤2)中,根据步骤1)所得抽象语法树ast,将抽象语法树ast分解成一组抽象语法子树sub_asts,具体分解的过程如下:
A)初始化语句节点集S={},令节点node指向抽象语法树ast的根节点;
B)访问节点node,如果当前节点node∈Logics,那么S=node∪S;
C)访问当前节点node的子节点;
D)重复B)和C),直至遍历完抽象语法树;
Logics={MethodDeclaration,LocalVariable,ForStatement,TryStatement,WhileStatement,ReturnStatement}
式中,Logics指的是语句节点集合,MethodDeclaration指的是方法声明语句、LocalVariable指的是变量声明语句、ForStatement指的是for语句、TryStatement指的是try语句、WhileStatement指的是while语句、ReturnStatement指的是return语句;
一棵抽象语法树ast的分解结果为一组抽象语法子树sub_asts:
sub_asts=[sub_ast1,sub_ast2,sub_ast3,...,sub_asti]
式中,sub_asti指的是第i棵抽象语法子树。
4.根据权利要求3所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,所述步骤3)包括以下步骤:
3.1)使用bigclonebench和googlejam4数据集,生成抽象语法树的语料库,然后使用无监督的word2vec算法模型对抽象语法树的节点生成对应的向量:
asts=parser(codes)
sequences=dfs(asts)
we=word2vec(sequences)
式中,codes是指bigclonebench和googlejam4数据集中的所有代码片段,dfs是指以深度优先遍历的方式生成抽象语法树的节点序列,sequences是dfs生成的所有的序列,word2vec是指使用词嵌入的算法模型生成抽象语法树节点的向量表示,we∈Rv×d是指词向量矩阵,其中v是指词汇量的大小,d是向量维度,R是指向量空间;
3.2)使用递归神经网络生成抽象语法子树sub_ast的向量,具体为:
给定一棵抽象语法子树sub_ast,用n表示非叶子节点,用m表示节点n的子节点数量,那么节点n的向量表示为:
式中,xn是指节点n的独热编码,νecn是指节点n对应的向量,we T是指向量矩阵we的转置;
式中,wn∈Rd×k是指可学习的权重矩阵,k是输出维度,bn是节点n的偏置项,hi是节点n第i个子节点的隐藏状态,h是更新之后的隐藏状态,σ是激活函数;通过上式,就能够自底向上递归地计算抽象语法子树中所有节点的向量,从而提取所有节点的词法和语法信息,生成抽象语法子树sub_ast的向量h,那么步骤3.1)中的一组抽象语法子树sub_asts就转换成了向量ht
ht=[h1,h2,h3,...,hi]
式中,hi表示第i棵抽象语法子树的向量;
3.3)使用位置编码生成时序信息,具体为:
式中,pos是指抽象语法子树在一组抽象语法子树中从左到右的位置,u是指节点向量的第u个维度,sin和cos分别指正弦函数和余弦函数,PEcos和PEsin分别指以正弦函数和余弦函数的方式生成时序信息,正弦函数和余弦函数能够将位置外推到比训练期间遇到的序列长度更长的序列,从而使得位置编码拥有更好的泛化性,那么步骤3.2)所得向量ht就转换成了hp
hpi=PEsin(hi)+PEcos(hi)
hp=[hp1,hp2,hp3,...,hpi]
式中,hpi指的是hi经过转换后所得的向量;
3.4)使用注意力机制进一步提取特征,可缩放注意力机制的数学定义:
Qi'=QWi' Q
Ki'=KWi' K
Vi'=VWi' V
式中,Q是指查询query,指的是抽象语法子树的向量;K是指键key,V是指值value,K和V相同,且在可缩放注意力机制它们的值与Q相同,Qi'、Ki'、Vi'分别对应Q、K、V经过转化后的向量;分别对应Q、K、V的中第i'个可学习的权重矩阵,do是指向量的输出维度,dmodel是指矩阵中的第一个维度,dmodel由dmodel/h=do确定;headi'是指第i'个注意力头;
多头注意力机制是可缩放注意力机制的扩展,能够不同向量空间学习向量的特征,具体为:
multihead(Q,K,V)=Concat(head1,head2,head3,...,headi')
式中,是一个可学习的权重矩阵,Concat是向量连接运算;multihead是指多头注意力计算;多头注意力机制即使用多个可缩放注意力对抽象语法子树的向量进行特征深化,最后将多个可缩放注意力的计算结果连接在一起;
经过多头注意力机制后,步骤3.3)所得向量hp转成了向量ha,具体如下:
hai=multihead(hpi,hpi,hpi)
ha=[ha1,ha2,ha3,...,hai]
式中,hai是指hpi经过多头注意力机制转换后所得的向量;
3.5)使用残差网络,连接步骤3.2)中的向量ht和经过注意力机制的向量ha,具体如下:
res=ha+ht
式中,ha和ht两个向量相加即得到残差网络的输出res;
3.6)使用线性网络层将步骤3.5)的输出投影到一维向量,所得的一维向量即为代码对的相似值,即:
s=add(resx,-resy)Wl
式中,resx和resy是指代码x和代码y经过残差网络所得的两个特征向量,add是指线性相加,s是代码x和代码y的相似值,Wl∈Rd是指线性网络层可学习的权重矩阵。
5.根据权利要求4所述的基于多头注意力机制的深度学习代码抄袭检测方法,其特征在于,在步骤4)中,使用注意力机制将判定为相似的两个代码进行标注,相似性标注阶段使用的是递归神经网络所得输出ht;相似性标注以抽象语法子树为单位,计算代码对的子树之间的相似度超过阈值的代码片段,即:
scoresij=htxihtyj
pairs=mark(scoresij)
式中,htxi是指代码x的向量ht的第i个向量分量,htyj是指代码y的向量ht的第j个向量分量,scoresij是指htxi和htyj相似性得分,mark是指将超过阈值ε的抽象语法子树标记出来,pairs是指被标记的两个代码中的片段。
CN202310257808.7A 2023-03-16 2023-03-16 基于多头注意力机制的深度学习代码抄袭检测方法 Pending CN116738963A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310257808.7A CN116738963A (zh) 2023-03-16 2023-03-16 基于多头注意力机制的深度学习代码抄袭检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310257808.7A CN116738963A (zh) 2023-03-16 2023-03-16 基于多头注意力机制的深度学习代码抄袭检测方法

Publications (1)

Publication Number Publication Date
CN116738963A true CN116738963A (zh) 2023-09-12

Family

ID=87912146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310257808.7A Pending CN116738963A (zh) 2023-03-16 2023-03-16 基于多头注意力机制的深度学习代码抄袭检测方法

Country Status (1)

Country Link
CN (1) CN116738963A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117875434A (zh) * 2024-03-13 2024-04-12 中国科学技术大学 一种用于扩展输入上下文长度的金融大模型长度外推方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117875434A (zh) * 2024-03-13 2024-04-12 中国科学技术大学 一种用于扩展输入上下文长度的金融大模型长度外推方法
CN117875434B (zh) * 2024-03-13 2024-06-04 中国科学技术大学 一种用于扩展输入上下文长度的金融大模型长度外推方法

Similar Documents

Publication Publication Date Title
Hu et al. Deep code comment generation
Hu et al. Deep code comment generation with hybrid lexical and syntactical information
Yu et al. Syntaxsqlnet: Syntax tree networks for complex and cross-domaintext-to-sql task
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
Perez et al. Cross-language clone detection by learning over abstract syntax trees
Vidal et al. Probabilistic finite-state machines-part II
Lin et al. Grammar-based neural text-to-sql generation
Harer et al. Tree-transformer: A transformer-based method for correction of tree-structured data
CN112215013B (zh) 一种基于深度学习的克隆代码语义检测方法
CN109977205B (zh) 一种计算机自主学习源代码的方法
CN112306494A (zh) 一种基于卷积和循环神经网络的代码分类及聚类方法
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN112784576B (zh) 一种文本依存句法分析方法
CN110442880A (zh) 一种机器翻译译文的翻译方法、装置及存储介质
CN113190219A (zh) 一种基于递归神经网络模型的代码注释生成方法
CN113657123A (zh) 基于目标模板指导和关系头编码的蒙语方面级情感分析方法
CN114742069A (zh) 一种代码相似度检测方法及装置
CN116738963A (zh) 基于多头注意力机制的深度学习代码抄袭检测方法
CN114064117A (zh) 一种基于字节码和神经网络的代码克隆检测方法及系统
CN115658846A (zh) 一种适用于开源软件供应链的智能搜索方法及装置
CN117573096A (zh) 一种融合抽象语法树结构信息的智能代码补全方法
Kowsher et al. Lemmatization algorithm development for bangla natural language processing
CN115408506B (zh) 联合语义解析和语义成分匹配的nl2sql的方法
Xiang et al. G3R: A Graph-Guided Generate-and-Rerank Framework for Complex and Cross-domain Text-to-SQL Generation
Ganascia Extraction of recurrent patterns from stratified ordered trees

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