CN116991412A - 代码处理方法、装置、电子设备及存储介质 - Google Patents

代码处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116991412A
CN116991412A CN202211347035.3A CN202211347035A CN116991412A CN 116991412 A CN116991412 A CN 116991412A CN 202211347035 A CN202211347035 A CN 202211347035A CN 116991412 A CN116991412 A CN 116991412A
Authority
CN
China
Prior art keywords
code
description information
sample
graph
vector
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
CN202211347035.3A
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211347035.3A priority Critical patent/CN116991412A/zh
Publication of CN116991412A publication Critical patent/CN116991412A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Machine Translation (AREA)

Abstract

本申请提供一种代码处理方法、装置、电子设备及存储介质,涉及人工智能领域。该方法包括:获取待处理的多个代码片段以及各代码片段对应的代码描述信息,代码描述信息包括参数描述信息和返回值描述信息;基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图;分别对参数描述信息和返回值描述信息中的文本依存关系进行分析,得到参数描述信息和返回值描述信息各自对应的句法分析图;对程序依赖图和句法分析图进行融合处理,得到各代码片段对应的代码语义图;对代码语义图和代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量。本申请可以提升代码语义表征的精准性。

Description

代码处理方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码处理方法、装置、电子设备及存储介质。
背景技术
随着互联网应用的丰富,实现互联网应用的代码也更加复杂多样,对大量代码进行有效操作也备受关注。例如对代码的搜索操作,目前基于代码检索工具的代码搜索引擎一般支持关键字检索、全文检索、正则表达式检索等的搜索能力。在代码仓库容量越来越大、业务场景也越来越复杂、功能模块越发多样化的趋势下,已有的代码搜索引擎能力已不足以提供灵活且精准的搜索服务。
发明内容
有鉴于上述存在的技术问题,本申请提出了代码处理方法、装置、电子设备及存储介质。
根据本申请的一方面,提供了一种代码处理方法,所述方法包括:
获取待处理的多个代码片段以及各代码片段对应的代码描述信息,所述代码描述信息包括参数描述信息和返回值描述信息;
基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图;
分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一句法分析图,以及所述返回值描述信息对应的第二句法分析图;
对所述程序依赖图、所述第一句法分析图以及所述第二句法分析图进行融合处理,得到各代码片段对应的代码语义图;
对所述代码语义图和所述代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量所述目标代码嵌入向量用于基于自然语言对代码执行预设操作。
根据本申请的另一方面,提供了一种代码处理装置,包括:
获取模块,用于获取待处理的多个代码片段以及各代码片段对应的代码描述信息,所述代码描述信息为参数描述信息和返回值描述信息;
分词处理模块,用于基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图;
句法分析模块,用于分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一句法分析图,以及所述返回值描述信息对应的第二句法分析图;
代码语义图获取模块,用于对所述程序依赖图、所述第一句法分析图以及所述第二句法分析图进行融合处理,得到各代码片段对应的代码语义图;
代码嵌入处理模块,用于对所述代码语义图和所述代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量;所述目标代码嵌入向量用于基于自然语言对代码执行预设操作。
根据本申请的另一方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述方法。
根据本申请的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。
根据本申请的另一方面,提供了一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行时,使得计算机执行上述方法。
通过对程序依赖图、第一句法分析图以及第二句法分析图进行融合处理,得到各代码片段对应的代码语义图,能够有效地提取代码片段中的结构信息,以及使用句法分析的依存分析技术,可以有效地提取自然语言描述中的结构信息;这样将参数描述信息和返回值描述信息对应的句法分析图融合到程序依赖图中,可以克服代码语言与自然语言之间的语义差距,并且参数描述信息和返回值描述信息能够有效表征代码的输入和输出信息,使得代码语义图能够精准表达代码片段的语义信息;
并且,对代码语义图和代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量,使得目标代码嵌入向量能够较佳地平衡代码片段的结构信息和序列信息,提升代码片段的嵌入表征准确性;
另外,基于代码片段的嵌入向量的精准表征,在面临代码仓库容量越来越大、功能与业务场景越来越复杂下的代码搜索查询情况下,可以提升搜索效率、进而提升研发效率、并且可以提升代码搜索的精准性。
根据下面参考附图对示例性实施例的详细说明,本申请的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本申请的示例性实施例、特征和方面,并且用于解释本申请的原理。
图1示出根据本申请一实施例提供的一种应用系统的示意图。
图2示出根据本申请一实施例提供的一种目标代码编码模型和目标查询编码模型的训练架构示意图。
图3示出根据本申请一实施例提供的一种目标代码编码模型和目标查询编码模型的训练流程图。
图4示出根据本申请一实施例提供的一种的程序依赖图的示意图。
图5示出根据本申请一实施例提供的一种句法分析图的示意图一。
图6示出根据本申请一实施例提供的一种句法分析图的示意图二。
图7示出根据本申请一实施例提供的一种句法分析图的示意图三。
图8示出根据本申请一实施例提供的一种代码处理方法的流程图。
图9示出根据本申请一实施例提供的一种代码处理装置的框图。
图10示出根据本申请一实施例提供的一种用于代码处理的电子设备的框图。
具体实施方式
以下将参考附图详细说明本申请的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本申请,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本申请同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本申请的主旨。
人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
近年来,随着人工智能技术研究和进步,人工智能技术在多个领域得到广泛应用,本申请实施例提供的方案涉及机器学习/深度学习等技术,具体通过如下实施例进行说明。
请参阅图1,图1示出根据本申请一实施例提供的一种应用系统的示意图。所述应用系统可以用于本申请的代码处理方法。如图1所示,该应用系统至少可以包括服务器01和终端02。
本申请实施例中,所述服务器01可以用于代码处理,该服务器01可以包括独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
本申请实施例中,所述终端02可以用于触发代码处理或者用于通过自然语言进行代码查询。该终端02可以包括智能手机、台式计算机、平板电脑、笔记本电脑、智能音箱、数字助理、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、智能可穿戴设备等类型的实体设备。实体设备,也可以包括运行于实体设备中的软体,例如应用程序等。本申请实施例中终端02上运行的操作系统可以包括但不限于安卓系统、IOS系统、linux、windows等。
本说明书实施例中,上述终端02以及服务器01可以通过有线或无线通信方式进行直接或间接地连接,本申请对此不作限定。
在一个具体的实施例中,服务器02为分布式系统时,该分布式系统可以为区块链系统,分布式系统为区块链系统时,可以由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)形成,节点之间形成组成的点对点(P2P,PeerTo Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。具体的,区块链系统中各节点的功能,涉及的功能可以包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
需要说明的是,在本申请的具体实施方式中,涉及到用户相关的数据,当本申请以下实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
图2示出根据本申请一实施例提供的一种目标代码编码模型和目标查询编码模型的训练架构示意图;图3示出根据本申请一实施例提供的一种目标代码编码模型和目标查询编码模型的训练流程图。需要说明的是,以下一般以代码搜索来描述,不对本申请的应用场景进行限定。在一种可能的实现方式中,如图3所示,该训练可以包括以下步骤:
S301,获取多个样本代码片段以及对应的样本代码描述信息,样本代码描述信息可以包括样本参数描述信息、样本返回值描述信息、以及功能描述信息。
本说明书实施例中,为了提供自然语言对代码的搜索功能,选择将代码片段进行向量化,即转换为对应的代码嵌入向量,以便在用自然语言搜索时,也选择将自然语言向量化,从而基于向量之间的相似度来确定自然语言匹配的代码片段,实现基于自然语言的代码搜索功能。本申请中选择神经网络模型来实现上述的向量化,基于此,可以获取训练样本(或称训练数据)对神经网络进行训练以生成用于对代码片段进行向量化的目标代码编码模型以及用于对自然语言进行向量化的目标查询编码模型。
其中,样本代码片段可以是指用于作为训练样本的代码片段。例如,可以从代码平台(比如代码搜索平台,代码共享平台等)中存储的大量代码中获取样本代码。作为一个示例,可以基于代码功能对样本代码进行划分,得到多个样本代码片段,每个样本代码片段可以对应一个功能。从函数维度来说,样本代码片段可以是函数代码片段;从类及文件维度来说,样本代码片段可以为文件代码片段;从项目维度来说,样本代码片段可以为项目所有代码,这里一个项目可以看作一个功能。
进一步地,可以获取各代码片段对应的样本代码描述信息,样本代码描述信息可以包括样本参数描述信息、样本返回值描述信息、以及功能描述信息。其中,样本代码描述信息可以是文本描述信息,例如文字说明、注释等,用于对代码进行文本描述的信息。其中,样本参数描述信息可以是指对代码中参数进行介绍的信息;样本返回值描述信息可以是指对代码中返回值进行介绍的信息;功能描述信息可以是指对代码实现的功能进行描述的信息。
如上述介绍,训练数据设计上可以采用(data,label)的形式,data可以为样本代码片段,label可以为标注信息。函数维度上,data可以为函数代码片段,label可以为注释;类及文件维度上,data可以为文件代码片段,label可以为doc文档(例如java中为javadoc);项目维度上,data可以为项目所有代码,label可以为项目设计文档。整个训练数据设计上,label可以为自然语言,data可以为代码片段。
在获取训练样本后,可以基于训练数据进行神经网络模型训练。本申请主要是拟合data-label之间的映射关系。整体训练过程可以如图2所示,针对代码片段data,提取抽象语法树和数据流边结合的样本程序依赖图(对应图2中的代码分析图);针对label部分,采用NLP(Natural Language Processing,自然语言处理)提取样本句法分析图。再融合样本程序依赖图和样本句法分析图形成样本代码语义图,进而可以基于图卷积神经网络进行编码提取样本结构向量,以及利用序列编码器分别获得data、label的样本序列向量,再计算相似度以获取损失来训练模型,具体可以参见下面介绍。
S303,基于各样本代码片段的分词处理结果,生成各样本代码片段对应的样本代码分词序列以及各代码片段对应的样本程序依赖图。
本说明书实施例中,可以对各样本代码片段进行分词处理,得到各样本代码片段的分词处理结果,这里的分词处理可以使用分词工具来执行,本申请对分词工具不作限定,即本申请对具体分词方式不作限定。从而可以遍历分词处理结果中的各分词,得到样本代码分词序列,该样本代码分词序列中的分词可以按照遍历的顺序排列,本申请对遍历方式不作限定。例如,样本代码分词序列可以表示为即包括n个分词,n可以为大于1的整数。
作为一种可能的实现方式,可以基于各样本代码片段的分词处理结果,结合预设语法,生成各代码片段的样本抽象语法树,本申请对样本抽象语法树的生成方式不作限定。可选地,可以遍历样本抽象语法树中的结点,得到样本代码分词序列,这里的结点可以是指分词。其中,遍历方式可以是深度遍历或层级遍历,本申请对此不作限定。
进一步地,在一种可选地实施方式中,为了在样本抽象语法树中补偿参数和返回值这些表征定义、输入和输出的代码描述信息,可以在各样本代码片段的样本抽象语法树中的样本结点对之间添加边,生成各样本代码片段对应的样本程序依赖图。其中,样本结点对可以包括以下中的至少一种:样本抽象语法树中的叶子结点对,叶子结点对在对应的样本代码片段中相邻;样本代码片段中赋值语句中的两个变量对应的结点对;写变量对应的结点对。
以样本结点对包括上述三种结点对为例,即可以在样本抽象语法树上继续扩展三种边(或称数据流边)以形成样本程序依赖图(也可以称为代码分析图)。这三种边分别可以是NextToken(下一结点):将样本抽象语法树的每一个叶子结点连接到它的后续结点,即样本抽象语法树中的叶子结点对,叶子结点对在对应的样本代码片段中相邻;Computedfrom:连接所有出现在赋值语句中的左边变量和右边变量,即代码片段中赋值语句中的两个变量对应的结点对;LastWrite:连接每一个变量与上一次该变量发生写变量操作的结点,写变量对应的结点对。举例来说,以C语言函数代码片段:“int func(intx,inty)x=x+y;returnx”为例,则该代码片段对应的基于抽象语法树和数据流边的程序依赖图可以如图4所示。其中,AST Edge可以是指样本抽象语法树中的边。ExtDef为外部定义,可以作为样本抽象语法树的根节点;Specifier为声明符;int为整型;FuncDec为函数声明;func为具体函数;Varlist是指变量列表;VarDec是指变量声明;ParamDec为参数声明;CompSt为语句体;Stmt为语句;Return为返回变量。
S305,分别对样本参数描述信息、样本返回值描述信息以及功能描述信息中的文本依存关系进行分析,得到样本参数描述信息对应的第一样本句法分析图、样本返回值描述信息对应的第二样本句法分析图、以及功能描述信息对应的第三样本句法分析图。
在一种可能的实现方式中,可以分别对样本参数描述信息、样本返回值描述信息以及功能描述信息中的文本依存关系进行分析,得到样本参数描述信息、样本返回值描述信息以及功能描述信息中词语文本的依存关系。从而可以按照词语文本的依存关系构建对应的样本句法分析图(包括第一样本句法分析图、第二样本句法分析图、以及第三样本句法分析图),这里的样本句法分析图可以是指依存结构树。
在另一种可能的实现方式中,该步骤S305可以包括以下步骤:分别对样本参数描述信息、样本返回值描述信息以及功能描述信息中的文本依存关系进行分析,得到样本参数描述信息对应的第三初始句法分析图、样本返回值描述信息对应的第四初始句法分析图、以及功能描述信息对应的第五初始句法分析图;
进一步地,可以在第三初始句法分析图中的第三结点对之间添加边,得到第一样本句法分析图;该第三结点对对应的文本可以在样本参数描述信息中相邻;并可以在第四初始句法分析图中的第四结点对之间添加边,得到第二样本句法分析图;该第四结点对对应的文本可以在样本返回值描述信息中相邻;以及,可以在第五初始句法分析图中的第五结点对之间添加边,得到第三样本句法分析图;该第五结点对对应的文本可以在功能描述信息中相邻。
以代码描述信息是代码注释为例,可以提取代码注释的句法分析图。对于代码注释,可以分为三部分信息:参数描述,返回值描述,函数功能描述(即分别对应样本参数描述信息、样本返回值描述信息以及功能描述信息)。然后对这三种描述分别构建它们的依存分析图,即句法分析图,并可以在依存分析图中添加NextToken边。假设上述举例函数的注释信息如下“param x:A number that acts as an augend param y:A number that actsas an addend return:The sum oftwo numbers function:Calculate the sum oftwonumbers”,则参数,返回值和函数功能描述对应的依存分析图可以分别如图5,图6,图7所示。其中,NextToken可以是指句法分析图中的下一结点,即可以是指将样本句法分析图的每一个叶子结点连接到它的后续结点。Dependency Edge可以是指句法分析图中依存结点间的边。
参见图5~图7,其中的det、acl、nsubj、obl、case、nmod、nummod以及obj可以为句法分析中的词性,det:determiner,限定词,如冠词等;acl:clausal modifier ofnoun,名词修饰语;nsubj:nominal subject,名词主语;obl:oblique nominal,间接名词;case:case marking,格位标记;nmod:nominal modifier,名词修饰语;nummod:numericmodifier,数字修饰语;obj:object,宾语。
S307,对样本程序依赖图、第一样本句法分析图以及第二样本句法分析图进行融合处理,得到各样本代码片段对应的样本代码语义图。
本说明书实施例中,可以利用预设图融合方式,对样本程序依赖图、第一样本句法分析图以及第二样本句法分析图进行融合处理,得到各样本代码片段对应的样本代码语义图。其中,预设图融合方式可以为concat、kernel等图融合方式,本申请对此不作限定。
S309,基于预设代码编码模型,对样本代码语义图和样本代码分词序列进行编码处理,得到各样本代码片段对应的样本代码嵌入向量。
如图2所示,作为一个示例,预设代码编码模型可以包括第一初始图神经网络和第一初始序列编码模块。基于此,可以将样本代码语义图输入第一初始图神经网络,进行结构编码处理,得到各样本代码片段对应的样本代码结构向量。并且可以将样本代码分词序列输入第一初始序列编码模块,进行序列编码处理,得到各样本代码片段对应的样本代码序列向量。
进一步地,可以对样本代码结构向量和样本代码序列向量进行拼接处理,得到各样本代码片段对应的样本代码嵌入向量。
可选地,预设代码编码模型还可以包括第一初始池化模块和第二初始池化模块。基于此,可以基于第一初始池化模块对样本代码结构向量进行最大池化处理,得到第一样本结构向量;并可以基于第二初始池化模块对样本代码序列向量进行平均池化处理,得到第一样本序列向量;进而可以对第一样本结构向量和第一样本序列信息进行拼接处理,得到样本代码嵌入向量。这里的拼接处理可以是预设代码编码模型包括的向量拼接模块处理的。
S311,基于预设查询编码模型,对第三样本句法分析图和功能描述信息对应的样本文本分词序列进行编码处理,得到代码标签向量。
本说明书实施例中,可以将第三样本句法分析图和功能描述信息对应的样本文本分词序列输入预设查询编码模型进行编码处理,得到代码标签向量。其中,样本文本分词序列可以是对功能描述信息进行分词处理得到的,例如图2所示的即包括m个文本分词,m可以为大于1的整数。
如图2所示,作为一个示例,预设查询编码模型可以包括第二初始图神经网络和第二初始序列编码模块;该步骤S311可以包括:基于第二初始图神经网络对第三样本句法分析图进行编码处理,得到标签结构向量;并可以对功能描述信息进行分词处理,得到功能描述信息对应的样本文本分词序列;基于第二初始序列编码模块对样本文本分词序列进行编码处理,得到标签序列向量;对标签结构向量和标签序列向量进行拼接处理,得到代码标签向量。作为一个示例,第一初始序列编码模块和第二初始序列编码模块可以是神经词袋模型,本申请对此不作限定。
可选地,预设查询编码模型还可以包括第三初始池化模块和第四初始池化模块。基于此,可以基于第三初始池化模块对标签结构向量进行最大池化处理,得到第二样本结构向量;并可以基于第四初始池化模块对标签序列向量进行平均池化处理,得到第二样本序列向量;进而可以对第二样本结构向量和第二样本序列信息进行拼接处理,得到代码标签向量。这里的拼接处理可以是预设查询编码模型包括的向量拼接模块处理的。
上述图神经网络(包括上述的第一初始图神经网络、第二初始图神经网络)可以为图卷积神经网络。图神经网络的输入和输出可以如公式(1)所示。给定一个图G(V,E),图的邻接矩阵为A,且图中的每个结点可以被特征矩阵X初始化,则多层的图卷积表达式最终可写成如下的矩阵形式:
其中,则/>是归一化后的邻接矩阵,HI为经过第I层后的输出结果,且H0是特征矩阵X,特征矩阵X的元素为随机生成的;WI为第I层的训练参数矩阵。经过k层卷积后可以得到图的最终向量表示矩阵Hk,该矩阵的每一行/>代表一个结点v的向量表示;IN为单位矩阵。
进一步地,可以对所有结点对应的向量进行最大池化处理以获得样本代码语义图或第三样本句法分析图的结构向量hg可以如下面公式(2):
其中,FC代表全连接层,V为Hk中对应的全部结点。通过最大池化处理可以减小卷积层参数误差造成估计均值的偏移,更多的保留纹理信息。
例如,第一初始序列编码模块和第二初始序列编码模块可以为神经词袋模型,最后可以利用对应的神经词袋模型获得代码片段和功能描述信息的序列向量。例如,可以利用字节对代码片段和功能描述信息的编码建立字典,然后利用神经词袋模型获得代码片段和功能描述信息中的每一个token对应的向量hi,然后对m个token进行平均池化处理获得代码片段或功能描述信息的序列向量,如下面公式(3):
hn=meanpool({hi,i∈[0,m)}) (3)
通过平均池化处理可以减小邻域大小受限造成的估计值方差增大,更多的保留整体数据的特征。
进而,可以对hg和hn进行拼接处理,得到样本代码嵌入向量和代码标签向量,即样本代码嵌入向量和代码标签向量可以表示为f=[hg;hn],均是由结构向量和序列向量两部分拼接而成。
S313,根据样本代码嵌入向量与代码标签向量,确定损失信息。
本说明书实施例中,可以将样本代码嵌入向量与代码标签向量之间的距离差,作为损失信息。作为一个示例,损失信息可以是基于最小化距离确定的。例如,可以通过以下公式(4)计算得到:
假设对样本代码嵌入向量与代码标签向量进行最小化损失训练。在训练期间,可以通过最小化损失来训练:
其中,(ci,di)可以是指第i个训练样本,ci可以是指第i个代码片段,di可以是指第i个功能描述信息;这里的N可以是指(ci,di)对的数量,即训练样本的数量;Ec可以是指预设代码编码模型,Ec(ci)是指第i个代码片段经过Ec的输出;Eq可以是指预设查询编码模型,Eq(di)是指第i个功能描述信息经过Eq的输出。
S315,基于损失信息对预设代码编码模型和预设查询编码模型进行训练,得到目标代码编码模型和目标查询编码模型。
本说明书实施例中,可以基于损失信息确定梯度下降信息,从而可以基于梯度下降信息调整预设代码编码模型和预设查询编码模型的模型参数,即调整第一初始序列编码模块、第一初始图神经网络、第二初始序列编码模块、第二初始图神经网络、第一初始池化模块、第二初始池化模块、第三初始池化模块、第四初始池化模块的模型参数,直至满足预设条件,从而可以将满足预设条件时的预设代码编码模型作为目标代码编码模型,可以将满足预设条件时的预设查询编码模型作为目标查询编码模型。相应地,第一初始序列编码模块、第一初始图神经网络、第二初始序列编码模块、第二初始图神经网络、第一初始池化模块、第二初始池化模块、第三初始池化模块、第四初始池化模块,在训练好后依次对应:第一序列编码模块、第一图神经网络、第二序列编码模块、第二图神经网络、第一池化模块、第二池化模块、第三池化模块、第四池化模块。
实际应用中,例如代码搜索的应用中,离线模式下可以利用训练好的目标代码编码模型对代码搜索平台中的所有的代码片段进行编码,以获得各代码片段对应的目标代码嵌入向量。从而还可以将各代码片段对应的目标代码嵌入向量以索引的形式存储起来。然后在线代码搜索时,可以利用训练好的目标查询编码模型对输入的自然语言描述信息进行编码获得查询嵌入向量,并在索引中寻找与查询嵌入向量最相似的一个或多个向量以返回,作为自然语言描述信息对应的代码查询结果,例如代码搜索结果。具体可以参见下面介绍。
图8示出根据本申请一实施例提供的一种代码处理方法的流程图。如图8所示,该代码处理方法可以包括:
S801,获取待处理的多个代码片段以及各代码片段对应的代码描述信息,该代码描述信息包括参数描述信息和返回值描述信息。
本说明书实施例中,为了提供自然语言对代码的搜索,可以为各代码片段生成对应的代码嵌入向量。这样在用自然语言搜索时,可以将自然搜索语言向量化,从而可以基于向量相似度来进行自然搜索语言对代码的搜索。基于此,可以获取待处理的多个代码片段,每个代码片段可以对应一个功能,例如可以将代码平台中用于被搜索的代码进行功能划分,得到多个代码片段。例如,从函数维度来说,代码片段可以是函数代码片段;从类及文件维度来说,代码片段可以为文件代码片段;从项目维度来说,代码片段可以为项目所有代码。
进一步地,可以获取各代码片段对应的参数描述信息和返回值描述信息,作为各代码片段对应的代码描述信息。
S803,基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图。
本说明书实施例中,可以对各代码片段进行分词处理,得到分词处理结果,这里的分词处理可以使用分词工具来执行,本申请对分词工具不作限定,即本申请对具体分词方式不作限定。从而可以遍历分词处理结果中的各分词,得到代码分词序列,该代码分词序列中的分词可以按照遍历的顺序排列。例如,代码分词序列可以表示为tok1~tokN,即包括N个分词,N可以为大于1的整数。
本说明书实施例中,可以基于各代码片段的分词处理结果,生成各代码片段对应的程序依赖图。作为一种可能的实现方式,可以基于各代码片段的分词处理结果,生成各代码片段的抽象语法树;
进一步地,可以在各代码片段的抽象语法树中的目标结点对之间添加边,生成各代码片段对应的程序依赖图。其中,目标结点对可以包括以下中的至少一种:抽象语法树中的叶子结点对,叶子结点对在对应的代码片段中相邻;代码片段中赋值语句中的两个变量对应的结点对;写变量对应的结点对。
以目标结点对包括上述三种结点对为例,即可以在该抽象语法树上继续扩展三种边(或称数据流边)以形成程序依赖图(也可以称为代码分析图)。这三种边分别可以是NextToken(下一节点):将抽象语法树的每一个叶子结点连接到它的后续结点,抽象语法树中的叶子结点对,叶子结点对在对应的代码片段中相邻;Computed from:连接所有出现在赋值语句中的左边变量和右边变量,即代码片段中赋值语句中的两个变量对应的结点对;LastWrite:连接每一个变量与上一次该变量发生写变量操作的结点,写变量对应的结点对。
S805,分别对参数描述信息和返回值描述信息中的文本依存关系进行分析,得到参数描述信息对应的第一句法分析图,以及返回值描述信息对应的第二句法分析图。
在一种可能的实现方式中,可以分别对参数描述信息和返回值描述信息中的文本依存关系进行分析,得到参数描述信息、返回值描述信息中词语文本的依存关系。从而可以按照词语文本的依存关系构建对应的句法分析图(包括第一句法分析图、第二句法分析图),这里的句法分析图可以是指依存结构树。
在另一种可能的实现方式中,还可以对构建的句法分析图进行边扩展。
例如,该步骤S805可以通过以下步骤实现:
分别对参数描述信息和返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一初始句法分析图,以及所述返回值描述信息对应的第二初始句法分析图;
在第一初始句法分析图中的第一结点对之间添加边,得到第一句法分析图;该第一结点对对应的文本在所述参数描述信息中相邻;
在第二初始句法分析图中的第二结点对之间添加边,得到第二句法分析图;该第二结点对对应的文本在所述返回值描述信息中相邻。
上述步骤S805的具体实现方式可以参见上述S305,在此不再赘述。
S807,对程序依赖图、第一句法分析图以及第二句法分析图进行融合处理,得到各代码片段对应的代码语义图。
其中,代码语义图可以表征代码片段的文本依存关系以及程序依赖关系。
本说明书实施例中,可以利用预设图融合方式,对程序依赖图、第一句法分析图以及第二句法分析图进行融合处理,得到各代码片段对应的代码语义图。其中,预设图融合方式可以为concat、kernel等图融合方式,本申请对此不作限定,只要能将第一句法分析图以及第二句法分析图中的信息添加至程序依赖图中即可。
S809,对代码语义图和代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量。
其中,目标代码嵌入向量可以用于基于自然语言对代码执行预设操作,例如,预设操作可以包括搜索操作、推荐操作、查重操作等,本公开对此不作限定。
在一种可能的实现方式中,可以基于目标代码编码模型,对代码语义图和代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量。目标代码编码模型可以包括第一图神经网络和第一序列编码模块;相应地,该步骤S809可以包括:基于目标代码编码模型的第一图神经网络对所述代码语义图进行编码处理,得到各代码片段对应的代码结构向量;并可以基于目标代码编码模型的第一序列编码模块对所述代码分词序列进行编码处理,得到各代码片段对应的代码序列向量;进一步地,可以对代码结构向量和代码序列向量进行拼接处理,得到各代码片段对应的目标代码嵌入向量。
可选地,目标代码编码模型还可以包括第一池化模块和第二池化模块,相应地,对代码结构向量和所述代码序列向量进行拼接处理,得到各代码片段对应的目标代码嵌入向量,可以包括:基于第一池化模块对代码结构向量进行最大池化处理,得到目标结构向量;并可以基于第二池化模块对代码序列向量进行平均池化处理,得到目标序列向量;以及可以对目标结构向量和所述目标序列信息进行拼接处理,得到目标代码嵌入向量。
该步骤S809的具体实现方式可以参见上述S309,在此不再赘述。并且,步骤S801~S809的具体实现方式均可以参见上述S301~S309,在此不再赘述。
通过对程序依赖图、第一句法分析图以及第二句法分析图进行融合处理,得到各代码片段对应的代码语义图,能够有效地提取代码片段中的结构信息,以及使用句法分析的依存分析技术,可以有效地提取自然语言描述中的结构信息;这样将参数描述信息和返回值描述信息对应的句法分析图融合到程序依赖图中,可以克服代码语言与自然语言之间的语义差距,并且参数描述信息和返回值描述信息能够有效表征代码的输入和输出信息,使得代码语义图能够精准表达代码片段的语义信息;
并且,对代码语义图和代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量,使得目标代码嵌入向量能够较佳地平衡代码片段的结构信息和序列信息,提升代码片段的嵌入表征准确性;
另外,基于代码片段的嵌入向量的精准表征,在面临代码仓库容量越来越大、功能与业务场景越来越复杂下的代码搜索查询情况下,可以提升搜索效率、进而提升研发效率、并且可以提升代码搜索的精准性。
实际应用中,可以基于上述训练好的目标查询编码模型进行代码的预设操作,例如代码查重、代码推荐、代码搜索等。相应地,该方法还可以包括:获取自然语言描述信息;并可以基于目标查询编码模型,对自然语言描述信息进行编码处理,得到查询嵌入向量;获取待查询代码片段各自对应的目标代码嵌入向量;从而可以将与查询嵌入向量匹配的目标代码嵌入向量,对应的待查询代码片段,作为自然语言描述信息对应的代码查询结果。
其中,目标查询编码模型可以为上述训练得到的目标查询编码模型;待查询代码片段各自对应的目标代码嵌入向量可以是基于上述训练好的目标代码编码模型得到的。对应代码搜索来说,待查询代码片段各自对应的目标代码嵌入向量可以是离线模式下利用训练好的目标代码编码模型对代码搜索平台中的所有的代码片段进行编码获得的。也就是说,离线模式下可以利用训练好的目标代码编码模型对代码搜索引擎关联的代码片段均进行编码处理,得到各代码片段对应的目标代码嵌入向量,并进行保存。从而在后续代码搜索时,对自然语言描述信息进行编码处理,得到查询嵌入向量,这样通过查找匹配查询嵌入向量与目标代码嵌入向量,则可以便捷找到匹配的、想要搜索的代码片段。其中,自然语言描述信息可以是指通过自然语言对代码搜索的描述信息。
如图2所示,训练好的目标查询编码模型可以包括第二图神经网络和第二序列编码模块,基于此,可以基于自然语言描述信息获取文本分词序列和句法分析图,从而可以将句法分析图依次输入第二图神经网络、第三池化模块(最大池化处理),得到查询结构向量;并且可以将自然语言描述信息的文本分词序列依次输入第二序列编码模块、第四池化模块(平均池化处理),得到查询序列向量;从而可以对查询结构向量和查询序列向量进行拼接处理,得到查询嵌入向量。
举例来说,可以根据功能来检索代码,比如:“本地缓存加锁读写”“,或者可以根据业务场景来检索代码,比如:“XXX场景下的交互处理”,或者可以提问的方式来检索代码,比如:“XX系统如何渲染一张图片?”等。对于这些场景,本申请的代码搜索方法均可以高效且精准地支持。
可选地,本申请的代码搜索方式可以作为搜索算法引擎,置入代码检索工具中,以提供高效的代码检索能力。作为一个可选方式,还可以与云开发结合,可以实现代码云搜索,从而提升海量代码的开发使用体验。
上述代码搜索方式可以作为搜索引擎置入代码检索工具、代码查阅工具中,为代码搜索入口提供更高效灵活的代码查询能力;使得开发者可以根据功能模块描述、业务场景描述以及要解决的问题等,高效精准地检索到目标代码,提升开发效率。
在代码查重中,自然语言描述信息可以是指通过自然语言对去重代码的描述信息。在得到代码查询结果后,进一步还可以包括对代码查询结果中的代码片段进行去重处理,从而可以节约存储资源。
可选地,在执行代码推荐中,可以获取目标账号的历史代码搜索的描述信息作为自然语言描述信息,从而可以将代码查询结果推荐给目标账号,以方便目标账号的代码使用。
图9示出根据本申请一实施例提供的一种代码处理装置的框图。如图9所示,该装置可以包括:
获取模块901,用于获取待处理的多个代码片段以及各代码片段对应的代码描述信息,所述代码描述信息为参数描述信息和返回值描述信息;
分词处理模块903,用于基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图;
句法分析模块905,用于分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一句法分析图,以及所述返回值描述信息对应的第二句法分析图;
代码语义图获取模块907,用于对所述程序依赖图、所述第一句法分析图以及所述第二句法分析图进行融合处理,得到各代码片段对应的代码语义图;
代码嵌入处理模块909,用于对所述代码语义图和所述代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量;所述目标代码嵌入向量用于基于自然语言对代码执行预设操作。
通过对程序依赖图、第一句法分析图以及第二句法分析图进行融合处理,得到各代码片段对应的代码语义图,能够有效地提取代码片段中的结构信息,以及使用句法分析的依存分析技术,可以有效地提取自然语言描述中的结构信息;这样将参数描述信息和返回值描述信息对应的句法分析图融合到程序依赖图中,可以克服代码语言与自然语言之间的语义差距,并且参数描述信息和返回值描述信息能够有效表征代码的输入和输出信息,使得代码语义图能够精准表达代码片段的语义信息;
并且,对代码语义图和代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量,使得目标代码嵌入向量能够较佳地平衡代码片段的结构信息和序列信息,提升代码片段的嵌入表征准确性;
另外,基于代码片段的嵌入向量的精准表征,在面临代码仓库容量越来越大、功能与业务场景越来越复杂下的代码搜索查询情况下,可以提升搜索效率、进而提升研发效率、并且可以提升代码搜索的精准性。
在一种可能的实现方式中,上述代码嵌入处理模块909可以包括:
代码结构向量获取单元,用于基于目标代码编码模型的第一图神经网络对所述代码语义图进行编码处理,得到各代码片段对应的代码结构向量;
代码序列向量获取单元,用于基于目标代码编码模型的第一序列编码模块对所述代码分词序列进行编码处理,得到各代码片段对应的代码序列向量;
向量拼接单元,用于对所述代码结构向量和所述代码序列向量进行拼接处理,得到各代码片段对应的目标代码嵌入向量。
在一种可能的实现方式中,上述分词处理模块903可以包括:
抽象语法树生成单元,用于基于各代码片段的分词处理结果,生成各代码片段的抽象语法树;
程序依赖图构建单元,用于在各代码片段的抽象语法树中的目标结点对之间添加边,生成各代码片段对应的程序依赖图;
其中,所述目标结点对包括以下中的至少一种:所述抽象语法树中的叶子结点对,所述叶子结点对在对应的代码片段中相邻;代码片段中赋值语句中的两个变量对应的结点对;写变量对应的结点对。
在一种可能的实现方式中,上述句法分析模块905可以包括:
文本依存分析单元,用于分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一初始句法分析图,以及所述返回值描述信息对应的第二初始句法分析图;
第一边扩展单元,用于在所述第一初始句法分析图中的第一结点对之间添加边,得到所述第一句法分析图;所述第一结点对对应的文本在所述参数描述信息中相邻;
第二边扩展单元,用于在所述第二初始句法分析图中的第二结点对之间添加边,得到所述第二句法分析图;所述第二结点对对应的文本在所述返回值描述信息中相邻。
在一种可能的实现方式中,所述目标代码编码模型还可以包括第一池化模块和第二池化模块,所述向量拼接单元可以包括:
第一池化处理子单元,用于基于所述第一池化模块对所述代码结构向量进行最大池化处理,得到目标结构向量;
第二池化处理子单元,用于基于所述第二池化模块对所述代码序列向量进行平均池化处理,得到目标序列向量;
向量拼接子单元对所述目标结构向量和所述目标序列信息进行拼接处理,得到所述目标代码嵌入向量。
在一种可能的实现方式中,所述分词处理模块903还可以包括:
代码分词序列获取单元,用于遍历所述分词处理结果中的各分词,得到所述代码分词序列,所述代码分词序列中的分词按照所述遍历的顺序排列。
在一种可能的实现方式中,所述装置还可以包括:
训练样本获取模块,用于获取多个样本代码片段以及对应的样本代码描述信息,所述样本代码描述信息包括样本参数描述信息、样本返回值描述信息、以及功能描述信息;
样本程序依赖图构建模块,用于基于各样本代码片段的分词处理结果,生成各样本代码片段对应的样本代码分词序列以及各代码片段对应的样本程序依赖图;
句法分析图获取模块,用于分别对所述样本参数描述信息、所述样本返回值描述信息以及所述功能描述信息中的文本依存关系进行分析,得到所述样本参数描述信息对应的第一样本句法分析图、所述样本返回值描述信息对应的第二样本句法分析图、以及所述功能描述信息对应的第三样本句法分析图;
样本代码语义图获取模块,用于对所述样本程序依赖图、所述第一样本句法分析图以及所述第二样本句法分析图进行融合处理,得到各样本代码片段对应的样本代码语义图;
样本代码嵌入向量表征模块,用于基于预设代码编码模型,对所述样本代码语义图和所述样本代码分词序列进行编码处理,得到各样本代码片段对应的样本代码嵌入向量;
代码标签向量获取模块,用于基于预设查询编码模型,对所述第三样本句法分析图和所述功能描述信息对应的样本文本分词序列进行编码处理,得到代码标签向量;
失信息确定模块,用于根据所述样本代码嵌入向量与所述代码标签向量,确定损失信息;
训练学习模块,用于基于所述损失信息对所述预设代码编码模型和所述预设查询编码模型进行训练,得到所述目标代码编码模型和目标查询编码模型。
在一种可能的实现方式中,所述预设查询编码模型可以包括第二初始图神经网络和第二初始序列编码模块;上述代码标签向量获取模块可以包括:
标签结构向量获取单元,用于基于所述第二初始图神经网络对所述第三样本句法分析图进行编码处理,得到标签结构向量;
标签序列向量获取单元,用于基于所述第二初始序列编码模块对所述样本文本分词序列进行编码处理,得到标签序列向量;
代码标签向量获取单元,用于对所述标签结构向量和所述标签序列向量进行拼接处理,得到所述代码标签向量。
在一种可能的实现方式中,上述句法分析图获取模块可以包括:
文本依存分析单元,用于分别对所述样本参数描述信息、所述样本返回值描述信息以及所述功能描述信息中的文本依存关系进行分析,得到所述样本参数描述信息对应的第三初始句法分析图、所述样本返回值描述信息对应的第四初始句法分析图、以及所述功能描述信息对应的第五初始句法分析图;
第三边扩展单元,用于在所述第三初始句法分析图中的第三结点对之间添加边,得到所述第一样本句法分析图;所述第三结点对对应的文本在所述样本参数描述信息中相邻;
第四边扩展单元,用于在所述第四初始句法分析图中的第四结点对之间添加边,得到所述第二样本句法分析图;所述第四结点对对应的文本在所述样本返回值描述信息中相邻;
第五边扩展单元,用于在所述第五初始句法分析图中的第五结点对之间添加边,得到所述第三样本句法分析图;所述第五结点对对应的文本在所述功能描述信息中相邻。
在一种可能的实现方式中,该装置还可以包括:
描述信息获取模块,用于获取自然语言描述信息;
查询嵌入向量获取模块,用于基于所述目标查询编码模型,对所述自然语言描述信息进行编码处理,得到查询嵌入向量;
目标代码嵌入向量获取模块,用于获取待查询代码片段各自对应的目标代码嵌入向量;
代码查询结果确定模块,用于将与查询嵌入向量匹配的目标代码嵌入向量,对应的待查询代码片段,作为所述自然语言描述信息对应的代码查询结果。
关于上述实施例中的装置,其中各个模块和单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图10示出根据本申请一实施例提供的一种用于代码处理的电子设备的框图。该电子设备可以是服务器,其内部结构图可以如图10所示。该电子设备包括通过系统总线802连接的处理器801、存储器和网络接口。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器803。该非易失性存储介质存储有操作系统805和计算机程序806。该内存储器803为非易失性存储介质中的操作系统805和计算机程序806的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据异步快照的方法。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在示例性实施例中,还提供了一种电子设备,包括:处理器;用于存储该处理器可执行指令的存储器;其中,该处理器被配置为执行该指令,以实现如本申请实施例中的代码处理方法。
在示例性实施例中,还提供了一种存储介质,当该存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行本申请实施例中的代码处理方法。
在示例性实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行本申请实施例中的代码处理方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

Claims (13)

1.一种代码处理方法,其特征在于,所述方法包括:
获取待处理的多个代码片段以及各代码片段对应的代码描述信息,所述代码描述信息包括参数描述信息和返回值描述信息;
基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图;
分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一句法分析图,以及所述返回值描述信息对应的第二句法分析图;
对所述程序依赖图、所述第一句法分析图以及所述第二句法分析图进行融合处理,得到各代码片段对应的代码语义图;
对所述代码语义图和所述代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量所述目标代码嵌入向量用于基于自然语言对代码执行预设操作。
2.根据权利要求1所述的方法,其特征在于,所述对所述代码语义图和所述代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量,包括:
基于目标代码编码模型的第一图神经网络对所述代码语义图进行编码处理,得到各代码片段对应的代码结构向量;
基于所述目标代码编码模型的第一序列编码模块对所述代码分词序列进行编码处理,得到各代码片段对应的代码序列向量;
对所述代码结构向量和所述代码序列向量进行拼接处理,得到各代码片段对应的目标代码嵌入向量。
3.根据权利要求1或2所述的方法,其特征在于,所述基于各代码片段的分词处理结果,生成各代码片段对应的程序依赖图,包括:
基于各代码片段的分词处理结果,生成各代码片段的抽象语法树;
在各代码片段的抽象语法树中的目标结点对之间添加边,生成各代码片段对应的程序依赖图;
其中,所述目标结点对包括以下中的至少一种:所述抽象语法树中的叶子结点对,所述叶子结点对在对应的代码片段中相邻;代码片段中赋值语句中的两个变量对应的结点对;写变量对应的结点对。
4.根据权利要求3所述的方法,其特征在于,所述分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一句法分析图,以及所述返回值描述信息对应的第二句法分析图,包括:
分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一初始句法分析图,以及所述返回值描述信息对应的第二初始句法分析图;
在所述第一初始句法分析图中的第一结点对之间添加边,得到所述第一句法分析图;所述第一结点对对应的文本在所述参数描述信息中相邻;
在所述第二初始句法分析图中的第二结点对之间添加边,得到所述第二句法分析图;所述第二结点对对应的文本在所述返回值描述信息中相邻。
5.根据权利要求2所述的方法,其特征在于,所述目标代码编码模型还包括第一池化模块和第二池化模块,所述对所述代码结构向量和所述代码序列向量进行拼接处理,得到各代码片段对应的目标代码嵌入向量,包括:
基于所述第一池化模块对所述代码结构向量进行最大池化处理,得到目标结构向量;
基于所述第二池化模块对所述代码序列向量进行平均池化处理,得到目标序列向量;
对所述目标结构向量和所述目标序列信息进行拼接处理,得到所述目标代码嵌入向量。
6.根据权利要求1所述的方法,其特征在于,所述基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列,包括:
遍历所述分词处理结果中的各分词,得到所述代码分词序列,所述代码分词序列中的分词按照所述遍历的顺序排列。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取多个样本代码片段以及对应的样本代码描述信息,所述样本代码描述信息包括样本参数描述信息、样本返回值描述信息、以及功能描述信息;
基于各样本代码片段的分词处理结果,生成各样本代码片段对应的样本代码分词序列以及各代码片段对应的样本程序依赖图;
分别对所述样本参数描述信息、所述样本返回值描述信息以及所述功能描述信息中的文本依存关系进行分析,得到所述样本参数描述信息对应的第一样本句法分析图、所述样本返回值描述信息对应的第二样本句法分析图、以及所述功能描述信息对应的第三样本句法分析图;
对所述样本程序依赖图、所述第一样本句法分析图以及所述第二样本句法分析图进行融合处理,得到各样本代码片段对应的样本代码语义图;
基于预设代码编码模型,对所述样本代码语义图和所述样本代码分词序列进行编码处理,得到各样本代码片段对应的样本代码嵌入向量;
基于预设查询编码模型,对所述第三样本句法分析图和所述功能描述信息对应的样本文本分词序列进行编码处理,得到代码标签向量;
根据所述样本代码嵌入向量与所述代码标签向量,确定损失信息;
基于所述损失信息对所述预设代码编码模型和所述预设查询编码模型进行训练,得到所述目标代码编码模型和目标查询编码模型。
8.根据权利要求7所述的方法,其特征在于,所述预设查询编码模型包括第二初始图神经网络和第二初始序列编码模块;所述基于预设查询编码模型,对所述第三样本句法分析图和所述功能描述信息对应的样本文本分词序列进行编码处理,得到代码标签向量,包括:
基于所述第二初始图神经网络对所述第三样本句法分析图进行编码处理,得到标签结构向量;
基于所述第二初始序列编码模块对所述样本文本分词序列进行编码处理,得到标签序列向量;
对所述标签结构向量和所述标签序列向量进行拼接处理,得到所述代码标签向量。
9.根据权利要求7或8所述的方法,其特征在于,所述分别对所述样本参数描述信息、所述样本返回值描述信息以及所述功能描述信息中的文本依存关系进行分析,得到所述样本参数描述信息对应的第一样本句法分析图、所述样本返回值描述信息对应的第二样本句法分析图、以及所述功能描述信息对应的第三样本句法分析图,包括:
分别对所述样本参数描述信息、所述样本返回值描述信息以及所述功能描述信息中的文本依存关系进行分析,得到所述样本参数描述信息对应的第三初始句法分析图、所述样本返回值描述信息对应的第四初始句法分析图、以及所述功能描述信息对应的第五初始句法分析图;
在所述第三初始句法分析图中的第三结点对之间添加边,得到所述第一样本句法分析图;所述第三结点对对应的文本在所述样本参数描述信息中相邻;
在所述第四初始句法分析图中的第四结点对之间添加边,得到所述第二样本句法分析图;所述第四结点对对应的文本在所述样本返回值描述信息中相邻;
在所述第五初始句法分析图中的第五结点对之间添加边,得到所述第三样本句法分析图;所述第五结点对对应的文本在所述功能描述信息中相邻。
10.根据权利要求7-9任一项所述的方法,其特征在于,所述方法还包括:
获取自然语言描述信息;
基于所述目标查询编码模型,对所述自然语言描述信息进行编码处理,得到查询嵌入向量;
获取待查询代码片段各自对应的目标代码嵌入向量;
将与所述查询嵌入向量匹配的目标代码嵌入向量,对应的待查询代码片段,作为所述自然语言描述信息对应的代码查询结果。
11.一种代码处理装置,其特征在于,包括:
获取模块,用于获取待处理的多个代码片段以及各代码片段对应的代码描述信息,所述代码描述信息为参数描述信息和返回值描述信息;
分词处理模块,用于基于各代码片段的分词处理结果,生成各代码片段对应的代码分词序列以及各代码片段对应的程序依赖图;
句法分析模块,用于分别对所述参数描述信息和所述返回值描述信息中的文本依存关系进行分析,得到所述参数描述信息对应的第一句法分析图,以及所述返回值描述信息对应的第二句法分析图;
代码语义图获取模块,用于对所述程序依赖图、所述第一句法分析图以及所述第二句法分析图进行融合处理,得到各代码片段对应的代码语义图;
代码嵌入处理模块,用于对所述代码语义图和所述代码分词序列进行编码处理,得到各代码片段对应的目标代码嵌入向量;所述目标代码嵌入向量用于基于自然语言对代码执行预设操作。
12.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令以实现权利要求1至10中任意一项所述的方法。
13.一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至10中任意一项所述的方法。
CN202211347035.3A 2022-10-31 2022-10-31 代码处理方法、装置、电子设备及存储介质 Pending CN116991412A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211347035.3A CN116991412A (zh) 2022-10-31 2022-10-31 代码处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211347035.3A CN116991412A (zh) 2022-10-31 2022-10-31 代码处理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN116991412A true CN116991412A (zh) 2023-11-03

Family

ID=88532748

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211347035.3A Pending CN116991412A (zh) 2022-10-31 2022-10-31 代码处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116991412A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117421392A (zh) * 2023-12-15 2024-01-19 武汉大学 一种基于词级对齐的代码搜索方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117421392A (zh) * 2023-12-15 2024-01-19 武汉大学 一种基于词级对齐的代码搜索方法及装置
CN117421392B (zh) * 2023-12-15 2024-03-08 武汉大学 一种基于词级对齐的代码搜索方法及装置

Similar Documents

Publication Publication Date Title
CN107273503B (zh) 用于生成同语言平行文本的方法和装置
CN111428044A (zh) 多模态获取监管识别结果的方法、装置、设备及存储介质
CN116194912A (zh) 使用图扩散变换器进行方面级情感分类的方法和系统
CN112084331A (zh) 文本处理、模型训练方法、装置、计算机设备和存储介质
CN110929038A (zh) 基于知识图谱的实体链接方法、装置、设备和存储介质
CN110968684A (zh) 一种信息处理方法、装置、设备及存储介质
CN112131881B (zh) 信息抽取方法及装置、电子设备、存储介质
JP2023022845A (ja) ビデオ処理方法、ビデオサーチ方法及びモデルトレーニング方法、装置、電子機器、記憶媒体及びコンピュータプログラム
CN108536735B (zh) 基于多通道自编码器的多模态词汇表示方法与系统
CN111488742B (zh) 用于翻译的方法和装置
CN112989055A (zh) 文本识别方法、装置、计算机设备和存储介质
CN112085091B (zh) 基于人工智能的短文本匹配方法、装置、设备及存储介质
CN116991412A (zh) 代码处理方法、装置、电子设备及存储介质
CN115455169A (zh) 一种基于词汇知识和语义依存的知识图谱问答方法和系统
CN113239184B (zh) 知识库获取方法、装置、计算机设备及存储介质
CN113342927B (zh) 敏感词识别方法、装置、设备及存储介质
CN111158692A (zh) 智能合约函数相似性的排序方法、系统和存储介质
CN114358020A (zh) 疾病部位识别方法、装置、电子设备及存储介质
CN116775497B (zh) 数据库测试用例生成需求描述编码方法
CN113343692A (zh) 搜索意图的识别方法、模型训练方法、装置、介质及设备
CN117574915A (zh) 基于多方数据源的公共数据平台及其数据分析方法
CN113761124A (zh) 文本编码模型的训练方法、信息检索方法及设备
CN117033609A (zh) 文本视觉问答方法、装置、计算机设备和存储介质
CN112307738A (zh) 用于处理文本的方法和装置
CN116796288A (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