CN114896368A - 大规模候选集中的语义代码搜索模型构建方法及相关装置 - Google Patents

大规模候选集中的语义代码搜索模型构建方法及相关装置 Download PDF

Info

Publication number
CN114896368A
CN114896368A CN202210564651.8A CN202210564651A CN114896368A CN 114896368 A CN114896368 A CN 114896368A CN 202210564651 A CN202210564651 A CN 202210564651A CN 114896368 A CN114896368 A CN 114896368A
Authority
CN
China
Prior art keywords
model
sample
code
target
training
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
CN202210564651.8A
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.)
Zhengzhou University Industrial Research Institute Co ltd
Hangzhou Innovation Research Institute of Beihang University
Original Assignee
Zhengzhou University Industrial Research Institute Co ltd
Hangzhou Innovation Research Institute of Beihang University
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 Zhengzhou University Industrial Research Institute Co ltd, Hangzhou Innovation Research Institute of Beihang University filed Critical Zhengzhou University Industrial Research Institute Co ltd
Priority to CN202210564651.8A priority Critical patent/CN114896368A/zh
Publication of CN114896368A publication Critical patent/CN114896368A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3344Query execution using natural language analysis
    • 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/042Knowledge-based neural networks; Logical representations of neural 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/045Combinations of 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/047Probabilistic or stochastic networks
    • 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
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Databases & Information Systems (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Machine Translation (AREA)

Abstract

本实施例提供的大规模候选集中的语义代码搜索模型构建方法及相关装置中,模型训练设备通过将样本查询语句以及样本代码片段一同输入到目标模型中,用于训练该目标模型学习样本插叙语句与样本代码片段之间的语义信息,待目标模型满足预设收敛条件时,获得能够同时对目标查询语句以及候选代码片段同时进行编码处理的语义代码搜索模型。如此,使得训练出的语义代码搜索模型能够在对目标查询语句以及候选代码片段进行处理时,能够发掘出两者之间可能存在的关联性。

Description

大规模候选集中的语义代码搜索模型构建方法及相关装置
技术领域
本申请涉及语义搜索领域,具体而言,涉及一种大规模候选集中的语义代码搜索模型构建方法及相关装置。
背景技术
虽然近些年来对于自然语言甚至是图像的搜索已经取得了非常大的进步,但是对于代码的搜索,目前的技术仍然不能满足大多数使用者的需求。这是因为在传统的信息检索中,搜索的关键词往往和搜索的结果会有很多相同的词语,因此,通过关键词匹配的方式可以很容易找到相关的搜索结果。
但是,在代码搜索中,自然语言和代码各自使用的词汇很多时候存在着巨大差异,而目前大多数的代码搜索引擎仍然局限于关键字搜索,这种搜索策略需要用户了解相关编程语言的语法;或者需要用户可以预测目标代码片段周围的注释中可能包含的关键字。
因此,提出了基于语义代码搜索的相关技术,即通过在同一向量空间中表示查询语句和代码片段,然后,将余弦距离最近的代码片段作为查询语句对应的代码片段。然而,目前的相关技术在将查询语句和代码片段表示在同一向量空间时,忽略了二者可能共有的一些信息。
发明内容
为了克服现有技术中的至少一个不足,本申请提供一种大规模候选集中的语义代码搜索模型构建方法及相关装置,包括:
第一方面,本申请提供一种大规模候选集中的语义代码搜索模型构建方法,应用于模型训练设备,所述方法包括:
获取样本查询语以及样本代码片段;
训练目标模型学习所述样本查询语句与所述样本代码片段之间的语义信息,直到所述目标模型满足预设收敛条件时,获得语义代码搜索模型。
第二方面,本申请提供一种大规模候选集中的语义代码搜索模型构建装置,应用于模型训练设备,所述装置包括:
样本模块,用于获取样本查询语以及样本代码片段;
训练模块,用于训练目标模型学习所述样本查询语句与所述样本代码片段之间的语义信息,直到所述目标模型满足预设收敛条件时,获得语义代码搜索模型。
第三方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现所述的大规模候选集中的语义代码搜索模型构建方法。
第四方面,本申请提供一种模型训练设备,所述模型训练设备包括处理器以及存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现所述的大规模候选集中的语义代码搜索模型构建方法。
相对于现有技术而言,本申请具有以下有益效果:
本实施例提供的大规模候选集中的语义代码搜索模型构建方法中,模型训练设备通过将样本查询语句以及样本代码片段一同输入到目标模型中,用于训练该目标模型学习样本插叙语句与样本代码片段之间的语义信息,待目标模型满足预设收敛条件时,获得能够同时对目标查询语句以及候选代码片段同时进行编码处理的语义代码搜索模型。如此,使得训练出的语义代码搜索模型能够在对目标查询语句以及候选代码片段进行处理时,能够发掘出两者之间可能存在的关联性。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的现有语义代码搜索原理示意图;
图2为本申请实施例提供的模型训练设备的结构示意图;
图3为本申请实施例提供的大规模候选集中的语义代码搜索模型构建方法的流程示意图;
图4为本申请实施例提供的大规模候选集中的语义代码搜索模型构建装置的结构示意图。
图标:120-存储器;130-处理器;140-通信单元;150-系统总线;201-样本模块;202-训练模块。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本申请的描述中,需要说明的是,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。此外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
随着开发项目的增加,以及各项目随时间的不断迭代,代码库的规模越来越大。例如,随着互联网时代的到来,开源代码的数量也在急剧增长:根据GitHub官方数据,在2021年内,全球就创建了超过6千万个新仓库,合并了超过1亿个Pull Request。因此,在信息化时代中,面对浩如烟海的代码,如何进行高效的代码搜索成为了一个十分有意义的任务。
另外,在敏捷开发为主流的互联网时代背景下,为了迅速对不断变化的需求做出响应,需要开发人员通过自然语言形式的查询语句,高效地从海量代码中定位到相关代码片段。因此,提出了基于语义代码搜索的相关技术。
所谓基于语义代码搜索的相关技术,表示要求从一系列候选代码集中查找出与查询语句的语义作为接近的若干个代码片段,这就要求不仅需要充分阅读并理解自然语言,还需要理解候选代码集中各代码片段的含义,并根据匹配程度的得分返回最终的查询结果。换句话说,假定自然语言问题由一系列的单词组成
Figure BDA0003657389860000041
候选代码集中的代码片段可以描述为
Figure BDA0003657389860000042
其中n表示查询语句中的单词数,m表示候选代码片段的长度。语义代码检索的目标函可以表示为f(q,c)=argmaxc∈CP(c∣q),其中C表示全部代码片段候选集。
然而,目前基于语义代码搜索的相关技术中,分别针对查询语句提供相应的文本编码模型,为代码片段提供相应的代码编码模型,分别用于将查询语句以及代码片段转换到同一相应空间,然后,通过计算向量之间的余弦相似度,用于衡量查询语句与代码片段之间的匹配程度。发明人研究之后发现,该方式中用于对查询语句进行转换的向量转换模型与用于对代码片段进行转换的向量转换模型之间彼此相互独立,忽略了查询语句与代码片段之间的可能存在的相关性,因而在查询与查询语句向匹配的代码片段时,有时存在精度欠佳的问题。
示例性的,如图1所示,假定有两条查询语句Text1“Start web server”,Text2“Read a text file into memory”;将这两条查询语句分别通过文本编码模型转换为相应的向量,即Text1“[0.43,0.12,0.05]”,Text2“[0.14,0.34,0.61]”。
进一步地,继续参见图1,假定有基于Python语言编写的代码片段Code:
Figure BDA0003657389860000051
将该代码片段通过代码编码模型转换为相应的向量Code“[0.13,0.44,0.59]”。
因此,当通过预先相似度的方式计算Text1、Text2与Code之间的匹配程度时,Text2与Code之间的匹配程度明显高于Text1与Code之间的匹配程度。然而,以上方式在将查询语句与代码片段进行向量转换时,彼此之间相对独立,忽略了两者之间可能存在的关联信息。例如,当查询语句中出现“遍历、索引、查找”这一类的关键词时,往往意味着对应的代码具有循环的特性,因此,代码编码模型在将代码片段转换为向量时,需要重点关注Python语言中关于循环的保留字“for、while、in”;然而,目前的文本编码模型与代码编码模型彼此相互对立,难以发现查询语句与代码片段之间的关联性。
基于上述技术问题的发现,发明人经过创造性劳动提出下述技术方案以解决或者改善上述问题。需要注意的是,以上现有技术中的方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请实施例针对上述问题所提出的解决方案,都应该是发明人在发明创造过程中对本申请做出的贡献,而不应当理解为本领域技术人员所公知的技术内容。
鉴于以上问题,本实施例提供一种应用于模型训练设备的大规模候选集中的语义代码搜索模型构建方法。该方法中,模型训练设备通过将样本查询语句以及样本代码片段一同输入到目标模型中,用于训练该目标模型学习样本插叙语句与样本代码片段之间的语义信息,待目标模型满足预设收敛条件时,获得能够同时对目标查询语句以及候选代码片段同时进行编码处理的语义代码搜索模型。如此,使得训练出的语义代码搜索模型能够在对目标查询语句以及候选代码片段进行处理时,能够发掘出两者之间可能存在的关联性。
其中,该模型训练设备可以是服务器或者算力满足要求的个人电脑。该服务器可以是单个服务器,也可以是服务器组。服务器组可以是集中式的,也可以是分布式的(例如,服务器可以是分布式系统)。在一些实施例中,服务器相对于用户终端,可以是本地的、也可以是远程的。在一些实施例中,服务器可以在云平台上实现;仅作为示例,云平台可以包括私有云、公有云、混合云、社区云(Community Cloud)、分布式云、跨云(Inter-Cloud)、多云(Multi-Cloud)等,或者它们的任意组合。在一些实施例中,服务器可以在具有一个或多个组件的电子设备上实现。
为使本申请实施例的目的、技术方案和优点更加清楚,本实施例还提供该模型训练设备的一结构示意图。如图2所示,该模型训练设备包括存储器120、处理器130、通信单元140。该存储器120、处理器130以及通信单元140各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
其中,该存储器120可以是基于任何电子、磁性、光学或其它物理原理的信息记录装置,用于记录执行指令、数据等。在一些实施方式中,该存储器120可以是,但不限于,易失存储器、非易失性存储器、存储驱动器等。
在一些实施方式中,该易失存储器可以是随机存取存储器(Random AccessMemory,RAM);在一些实施方式中,该非易失性存储器可以是只读存储器(Read OnlyMemory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)、闪存等;在一些实施方式中,该存储驱动器可以是磁盘驱动器、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合等。
该通信单元140用于通过网络收发数据。在一些实施方式中,该网络可以包括有线网络、无线网络、光纤网络、远程通信网络、内联网、因特网、局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)、无线局域网(Wireless Local Area Networks,WLAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、公共电话交换网(Public Switched Telephone Network,PSTN)、蓝牙网络、ZigBee网络、或近场通信(Near Field Communication,NFC)网络等,或其任意组合。在一些实施例中,网络可以包括一个或多个网络接入点。例如,网络可以包括有线或无线网络接入点,例如基站和/或网络交换节点,服务请求处理系统的一个或多个组件可以通过该接入点连接到网络以交换数据和/或信息。
该处理器130可能是一种集成电路芯片,具有信号的处理能力,并且,该处理器可以包括一个或多个处理核(例如,单核处理器或多核处理器)。仅作为举例,上述处理器可以包括中央处理单元(Central Processing Unit,CPU)、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、专用指令集处理器(Application SpecificInstruction-set Processor,ASIP)、图形处理单元(Graphics Processing Unit,GPU)、物理处理单元(Physics Processing Unit,PPU)、数字信号处理器(Digital SignalProcessor,DSP)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、可编程逻辑器件(Programmable Logic Device,PLD)、控制器、微控制器单元、简化指令集计算机(Reduced Instruction Set Computing,RISC)、或微处理器等,或其任意组合。
基于以上相关介绍,下面结合图3所示的流程图对本实施例中的大规模候选集中的语义代码搜索模型构建方法进行详细阐述。如图3所示,该方法包括:
S101,获取样本查询语句以及样本代码片段。
其中,样本查询语句的数量本实施例不做具体的限制,针对每条样本查询语句均提供有对应的样本代码片段。例如,继续假定该样本查询语句是Text1“Start webserver”,则提供一些具有开启web服务功能的样本代码片段;同理,对于样本查询语句Text2“Read a text file into memory”,同样提供具有将文件读入内存功能的样本代码片段。
另外,本实施对样本代码片段所属的编程语言同样不做具体限定。例如,对样本查询语句Text1“Start web server”,对应的样本代码片段可以由编程语言C/C++、Python、Java等编写而成。
S102,训练目标模型学习样本查询语句与样本代码片段之间的语义信息,直到目标模型满足预设收敛条件时,获得语义代码搜索模型。
其中,该目标模型可以选取常见的自然语言处理模型;本实施例中,该目标模型可以基于RoBerta模型进行构建;而应理解的是,RoBerta模型是Bert(BidirectionalEncoder Representation from Transformers)的衍生版本,而Bert模型包括多个Tranformer模型的编码层,是由谷歌公司开发的一个自然语言处理框架。
如此,通过将样本查询语句与样本代码片段一同输入到目标模型,训练该目标模型在对样本查询语句以及样本代码片段进行处理时,结合两者之间在语义信息上的关联信息,从而使得训练出的语义代码搜索模型在进行语义查询时,具有较高的查询精度。
进一步地,本实施例在使用样本查询语句与样本代码片段对目标模型进行训练时,为了使得该模型能够从样本中学习出更多的特征信息,采用了预训练编码模型以及预训练模型微调对目标模型进行两个阶段的训练。其中,在预训练编码模型阶段以及预训练模型微调阶段均采用了多任务学习(Multi-Task Learning)的方式,下面对这两个阶段进行详细介绍:
预训练编码模型:
对于该阶段,重点寻来该目标模型对样本查询语句以及样本代码片段中的关键信息进行预测,因此,以上步骤S102可以包括以下实施方式对目标模型进行预训练:
S102-1,训练目标模型对样本查询语句与样本代码片段中的关键信息进行预测,直到目标模型满足第一条件时,获得预训练模型。
其中,关键信息包括被随机遮蔽的文本片段以及预设的关键词。具体实施方式中,该模型训练设备执行至少一次目标模型的迭代步骤,直到目标模型满足第一条件时,获得预训练模型;其中,目标模型的迭代步骤包括:
S1A,按照预设概率从样本查询语句与样本代码片段中确定出文本片段。
S2A,将遮蔽了文本片段的样本查询语句与样本代码片段,输入到目标模型。
S3A,根据目标模型对文本片段的预测结果,获得目标模型的第一模型损失。
示例性的,继续以基于RoBerta模型的目标模型为例,将样本查询语句以及样本代码片段作为双模态数据集
Figure BDA0003657389860000091
其中ui表示自然语言形式的样本查询语句,vi表示样本代码片段,N表示两者一起组成N条双模态的数据。按照RoBerta模型对输入数据的要求将样本查询语句以及样本代码片段拼接为双模态数据,使用[SEP]作为双模态数据中样本查询语句与样本代码片段之间的间隔符;并在双模态数据的开头位置插入符号[CLS]以及在结尾位置插入符号[SEP];最后,将双模态数据转换为目标模型能够处理的符号编码、位置编码以及片段编码作为预训练时的最终输入。
其中,符号编码表示双模态数据中单个词汇对应的编码;位置编码表示双模态数据中单个词汇对应位置的编码;片段编码用于指示双模态数据中单个词汇属于样本查询语句或者属于代码片段。
在预训练过程中,在预训练阶段以15%的概率将输入中的一个不定长的双模态的数据进行遮蔽,并使用符号[MASK]对遮蔽位置原来的文本片段进行替换。然后,训练该目标模型将遮蔽位置进行还原。
例如,对于双模态的数据:
“[CLS]Read a text file into memory[SEP]def read(fname)[SEP]with open(fname,'r')as f:[SEP]contents=f.readlines()[SEP]return contents[SEP]”
假定将其中的“text file”、“def”进行了随机遮蔽,则遮蔽后的双模态的数据为:
“[CLS]Read a[MASK]into memory[SEP][MASK]read(fname)[SEP]with open(fname,'r')as f:[SEP]contents=f.readlines()[SEP]return contents[SEP]”。
对此,针对这一训练过程,本实施例定义用于计算第一模型损失的损失函数为:
Figure BDA0003657389860000101
θ表示目标模型的模型参数,
Figure BDA0003657389860000102
第t个被遮蔽了的文本片段,y\mask表示遮蔽了文本片段的样本查询语句与样本代码片段,
Figure BDA0003657389860000111
表示前t-1个文本片段的预测结果,k表示文本片段的长度。因此,
Figure BDA0003657389860000112
表示在已知遮蔽了文本片段的样本查询语句与样本代码片段,以及前t-1个文本片段的预测结果的条件下,对t个被遮蔽的文本片段进行预测。
S4A,根据目标模型对关键词的识别结果,获得目标模型的第二模型损失。
应理解的时,由于样本代码片段中的关键词隐含了非常丰富的代码语义信息,因此,本实施例采用交叉熵损失函数去预测样本代码片段中属于关键词的部分。
示例性的,假定一样本代码片段为图1所示的代码片段,则图1所示代码片段中的关键词包括“def、open、as、contents、return”。应理解的是,以上关键字在代码编辑工具中会以高亮的方式进行显示,对于理解代码的结构以及功能具有重要的参考意义。
因此,本实施例定义用于计算第二模型损失的损失函数为:
Figure BDA0003657389860000113
式中,m表示样本代码片段中文本词汇的数量;yi表示第i个词汇的实际类型,pi表示第i个词汇的预测结果。
S5A,将遮蔽了关键词的样本查询语句与样本代码片段,输入到目标模型。
S6A,根据目标模型对关键词的预测结果,获得目标模型的第三模型损失。
正如以上实施方式中所介绍的,样本代码片段中的关键词隐含了非常丰富的代码语义信息,因此,本实施例不仅要求目标模型能够对关键词进行识别,还能够对根据关键词的上下文对其进行预测。对此,本实施例还将样本代码片中的一些关键词用符号[MASK]进行了遮蔽,然后,训练该目标模型将遮蔽位置进行还原。
并且,为了达到这一目的,本实施例定义用于计算第三模型损失的损失函数为:
Figure BDA0003657389860000121
式中,θ表示所述目标模型的模型参数,Sj第j个被遮蔽的关键词,x\s表示遮蔽了关键词的所述样本查询语句与所述样本代码片段,S<j表示前j-1个关键词的预测结果,|S|表示所述关键词的数量。因此,(Sj|x\s,S<j)表示在已知遮蔽了关键词的样本查询语句与样本代码片段,以及前t-1个关键词的预测结果的条件下,对t个关键词的文本片段进行预测。
示例性的,继续以基于Python语言编写的代码片段Code为例:
Figure BDA0003657389860000122
假定其中的“def、open、as、contents、return”为关键词,因此,通过第二损失函训练目标模型区分出该代码片段中的每个词汇是否为关键词。
S7A,根据第一模型损失、第二模型损失以及第三模型损失,更新目标模型。
一些实施方式中,可以将以上第一模型损失、第二模型损失以及第三模型损失进行等概率求和;然后,根据求和结果以反向梯度传播算法更新目标模型的模型参数。
另外一些实施方式中,还可以分别为第一模型损失、第二模型损失以及第三模型损失预先设置有不同的权重,然后,以加权求和的方式获得以上三个模型损失之间的加权求和结果;然后,根据加权求和结果以反向梯度传播算法更新目标模型的模型参数。
另外值得说明的是,本实施例采用多任务学习的方式对同一目标模型进行训练,而不同的学习任务对于模型的输入以及输出的要求具有一定的差异;因此,本实施例中将同一份样本查询语句以及样本代码片段复制成三分,然后,根据每一份样本的学习任务,对该份样本进行预处理,并在输入目标模型时附加上特定的区分标识,用于指示该目标模型按照对应的学习任务输出计算结果。
S102-2,训练预训练模型学习样本查询语句与样本代码片段语义之间的相似信息,直到预训练模型满足第二条件时,获得语义代码搜索模型。
可选地实施方式中,该模型训练设备可以执行至少一次预训练模型的迭代步骤,执行至少一次预训练模型的迭代步骤,直到预训练模型满足第二条件时,获得语义代码搜索模型;其中,预训练模型的迭代步骤,包括:
S1B,将样本查询语句与样本代码片段输入到预训练模型。
S2B,根据预训练模型的输出结果,通过噪声对比损失函数获得预训练模型的第四模型损失。
其中,第四模型损失的表达式为:
Figure BDA0003657389860000131
式中,fθ(ui)表示第i个查询语句ui的低维嵌入表示,fθ(vi)表示第i个样本代码片段vi的低维嵌入表示,N表示样本代码片段的数量,σ表示预设超参数,B表示预设批次大小。
S3B,根据预训练模型输出的样本查询语句与样本代码片段之间的匹配概率,获得预训练模型的第五模型损失。
其中,第五模型损失的表达式为:
Figure BDA0003657389860000141
式中,pθ(ui,vi)表示第i个查询语句ui与第i个样本代码片段vi之间的相匹配的概率,N表示样本代码片段的数量。
S4B,根据第四模型损失与第五模型损失,更新预训练模型。
与预训练编码模型类似,在一些实施方式中,可以将以上第四模型损失以及第五模型损失进行等概率求和;然后,根据求和结果以反向梯度传播算法更新预训练模型的模型参数。
另外一些实施方式中,还可以分别为第四模型损失以及第五模型损失预先设置有不同的权重,然后,以加权求和的方式获得以上两个模型损失之间的加权求和结果;然后,根据加权求和结果以反向梯度传播算法更新预训练模型的模型参数。
如此,在以上实施方式中,对目标模型先进行预训练,后进行微调使得最终获得的语义代码搜索模型能够对目标查询语句以及候选代码集进行多角度理解,从而提升代码的查询精度。
在研究过程中,进一步发现目前的自然语言查询方式,需要依次比较目标查询语句与各候选代码片段之间的距离(余弦距离或欧几里得距离等),该方式虽然查询时的效率较为突出,但是该方式因为未考虑目标查询语句与候选代码片段之间的联系,因此,存在查询精度欠佳的问题。而将目标查询语句与候选代码片段拼接到一起输入到模型进行推理的方式,虽然查询时的准确率较高,但查询过程需要进行大量运算,因此,存在查询效率欠佳的问题,尤其是当候选代码片段集中代码片段量非常庞大时,模型的查询速度将大大降低,继而影响实际的用户体验。
鉴于此,本实施例在使用语义代码搜索模型进行代码查询时,使用了粗筛与精排的方式相结合,其中,粗筛用于大规模的候选代码片段集中选出与目标查询语句匹配程度在topK(K为正整数)或topα(α为百分比)的初筛代码片段。由于候选集的量级可能非常大,所以在本阶段,致力于在保证召回率的条件下,尽可能地降低本阶段的耗时以提高模型的推理性能。
然后,对于筛选出的初筛代码片段进行精排,得到最终的若干目标代码片段并返回给用户;由于数据量级大大减小,所以在本阶段,本发明致力于提高模型的匹配准确度。
因此,在具体实施方式中,该方法还包括:
S103,将目标查询语句输入语义代码搜索模型。
S104,根据语义代码搜索模型对目标查询语句的第一输出结果,从候选代码中确定出语义距离满足第一筛选条件的初筛代码片段。
示例性的,继续以基于RoBerta模型目标模型为例,由于该语义代码搜索模型由目标模型训练获得,因此,语义代码搜索模型的输入数据同样需要满足RoBerta模型的要求;因此,假定将目标查询语句表示为X,将其转换为符号编码、位置编码以及片段编码,输入到语义代码搜索模型。
语义代码搜索模型包括预设数量n个transformer层,输入向量将经由transformer层转换为上下文相关的表示Hn=transformern(Hn-1);而每一层的transformer都具有多头注意力机制MultiAttn:
Gn=LN(MultiAttn(Hn-1)+Hn-1)
Hn=LN(FFN(Gn)+Gn)
其中,FFN表示双层前馈神经网络,LN为层归一化操作;而对于第n层的transformer,多头自注意的输出
Figure BDA0003657389860000151
将通过如下方式进行计算:
Qi=Hn-1Wi Q,Ki=Hn-1Wi K,Vi=Hn-1Wi V
Figure BDA0003657389860000161
Figure BDA0003657389860000162
式中,前一层的输出为
Figure BDA0003657389860000163
该输出将和Wi Q,Wi K,
Figure BDA0003657389860000164
进行组合计算,其中,u为多头注意力机制的数量,dk为单头注意力机制的维度,
Figure BDA0003657389860000165
为控制上下文表示之间交互的遮蔽矩阵,
Figure BDA0003657389860000166
为模型的参数。
本实施例中,该语义距离可以是目标查询语句的嵌入表示计算与各候选代码之间的余弦距离,即获取语义代码搜索模型一预设隐藏层的输出结果作为最终目标查询语句的嵌入表示(又名向量表示),并根据该目标查询语句的嵌入表示计算与各候选代码之间的余弦距离,计算和自然语言最近邻的K个候选代码片段,作为满足第一筛选条件的初筛代码片段。
S105,将目标查询语句与初筛代码片段输入语义代码搜索模型。
S106,根据代码搜索模型对目标查询语句与初筛代码片段的第二输出结果,从初筛代码片段中确定出满足第二筛选条件的目标代码片段。
示例性的,继续以基于RoBerta模型目标模型为例,由于该语义代码搜索模型由目标模型训练获得,因此,语义代码搜索模型的输入数据同样需要满足RoBerta模型的要求。另外,由于精排阶段的数据量大大减小,因此,将自然语言形式的查询语句和各初筛代码片段分别进行拼接,并使用[SEP]作为间隔符。其中,假定各初筛代码码为C={c1,c2,...,cn},目标查询语句为Q={q1,q2,...,qn},因此,在开头位置插入[CLS],在结尾位置插入[SEP],作为最终输入X={[CLS],Q,[SEP],C}。
X经过编码后将得到输入向量H0,向量H0同样由符号编码、位置编码以及片段编码相加而成。语义代码搜索模型包括预设数量n个transformer层,输入向量将经由transformer层转换为上下文相关的表示Hn=transformern(Hn-1);而每一层的transformer都具有多头注意力机制MultiAttn:
Gn=LN(MultiAttn(Hn-1)+Hn-1)
Hn=LN(FFN(Gn)+Gn)
其中,FFN表示双层前馈神经网络,LN为层归一化操作;而对于第n层的transformer,多头自注意的输出
Figure BDA0003657389860000171
将通过如下方式进行计算:
Qi=Hn-1Wi Q,Ki=Hn-1Wi K,Vi=Hn-1Wi V
Figure BDA0003657389860000172
Figure BDA0003657389860000173
同样的,使用前一层的输出为
Figure BDA0003657389860000174
该输出将和Wi Q,Wi K,
Figure BDA0003657389860000175
进行组合计算,其中,u为多头注意力机制的数量,dk为单头注意力机制的维度,
Figure BDA0003657389860000176
为控制上下文表示之间交互的遮蔽矩阵,
Figure BDA0003657389860000177
为模型的参数。
本实施例中,获取最后一层隐层上下文表示中的[CLS]作为最终输出,并通过softmax层进行预测,最终得到各初筛代码片段与目标查询语句之间的匹配概率。另外,值得说明的是,在使用语义代码搜索模型时,同样可以使用特定的区分标识用于指示该语义代码搜索模型输出不同形式的推理结果。
基于与本实施例所提供大规模候选集中的语义代码搜索模型构建方法相同的发明构思,本实施例还提供一种大规模候选集中的语义代码搜索模型构建装置。该装置包括至少一个可以软件形式存储于存储器120或固化在模型训练设备的操作系统(OperatingSystem,简称OS)中的软件功能模块。其中,该模型训练设别中的处理器130用于执行存储器120中存储的可执行模块,例如,大规模候选集中的语义代码搜索模型构建装置所包括的软件功能模块及计算机程序等。请参照图4,从功能上划分,大规模候选集中的语义代码搜索模型构建装置可以包括:
样本模块201,用于获取样本查询语以及样本代码片段。
在本实施例中,该样本模块201用于实现图3中的步骤S101,关于该样本模块201的详细描述可以参见步骤S101的详细描述。
训练模块202,用于训练目标模型学习样本查询语句与样本代码片段之间的语义信息,直到目标模型满足预设收敛条件时,获得语义代码搜索模型。
本实施例中,该训练模块202用于实现图3中的步骤S102,关于该训练模块202的详细描述可以参见步骤S102的详细描述。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
还应理解的是,以上实施方式如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
因此,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时,实现本实施例提供的大规模候选集中的语义代码搜索模型构建方法。其中,该计算机可读存储介质可以是U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例提供的一种模型训练设备,该模型训练设备可包括处理器130及存储器120。处理器130与存储器120可经由系统总线150通信。并且,存储器120存储有计算机程序,处理器通过读取并执行存储器120中与以上实施方式对应的计算机程序,实现本实施例所提供的大规模候选集中的语义代码搜索模型构建方法。
应该理解到的是,在上述实施方式中所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上所述,仅为本申请的各种实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种大规模候选集中的语义代码搜索模型构建方法,其特征在于,应用于模型训练设备,所述方法包括:
获取样本查询语句以及样本代码片段;
训练目标模型学习所述样本查询语句与所述样本代码片段之间的语义信息,直到所述目标模型满足预设收敛条件时,获得语义代码搜索模型。
2.根据权利要求1所述的大规模候选集中的语义代码搜索模型构建方法,其特征在于,预设收敛条件包括第一条件以及第二条件,所述训练目标模型学习所述样本查询语句与所述样本代码片段之间的语义信息,直到所述目标模型满足预设收敛条件时,获得语义代码搜索模型,包括:
训练所述目标模型对所述样本查询语句与所述样本代码片段中的关键信息进行预测,直到所述目标模型满足第一条件时,获得预训练模型;其中,所述关键信息包括被随机遮蔽的文本片段以及预设的关键词;
训练所述预训练模型学习所述样本查询语句与所述样本代码片段语义之间的相似信息,直到所述预训练模型满足所述第二条件时,获得所述语义代码搜索模型。
3.根据权利要求2所述的大规模候选集中的语义代码搜索模型构建方法,其特征在于,所述训练所述目标模型对所述样本查询语句与所述样本代码片段中的关键信息进行预测,直到所述目标模型满足第一条件时,获得预训练模型,包括:
执行至少一次所述目标模型的迭代步骤,直到所述目标模型满足所述第一条件时,获得所述预训练模型;其中,所述目标模型的迭代步骤包括:
按照预设概率从所述样本查询语句与所述样本代码片段中确定出所述文本片段;
将遮蔽了所述文本片段的所述样本查询语句与所述样本代码片段,输入到所述目标模型;
根据所述目标模型对所述文本片段的预测结果,获得所述目标模型的第一模型损失;
根据所述目标模型对所述关键词的识别结果,获得所述目标模型的第二模型损失;
将遮蔽了关键词的所述样本查询语句与所述样本代码片段,输入到所述目标模型;
根据所述目标模型对所述关键词的预测结果,获得所述目标模型的第三模型损失;
根据所述第一模型损失、所述第二模型损失以及所述第三模型损失,更新所述目标模型。
4.根据权利要求3所述的大规模候选集中的语义代码搜索模型构建方法,其特征在于,所述第一模型损失的表达式为:
Figure FDA0003657389850000021
式中,θ表示所述目标模型的模型参数,
Figure FDA0003657389850000022
第t个被遮蔽的文本片段,y\mask表示遮蔽了所述文本片段的所述样本查询语句与所述样本代码片段,
Figure FDA0003657389850000023
表示前t-1个文本片段的预测结果,k表示所述文本片段的数量;
所述第二模型损失的表达式为:
Figure FDA0003657389850000024
式中,m表示所述样本代码片段中文本词汇的数量;yi表示第i个词汇的实际类型,pi表示第i个词汇的预测结果;
所述第三模型损失的表达式为:
Figure FDA0003657389850000031
式中,θ表示所述目标模型的模型参数,Sj第j个被遮蔽的关键词,x\s表示遮蔽了关键词的所述样本查询语句与所述样本代码片段,S<j表示前j-1个关键词的预测结果,|S|表示所述关键词的数量。
5.根据权利要求2所述的大规模候选集中的语义代码搜索模型构建方法,其特征在于,所述训练所述预训练模型学习所述样本查询语句与所述样本代码片段语义之间的相似信息,直到所述预训练模型满足所述第二条件时,获得所述语义代码搜索模型,包括:
执行至少一次所述预训练模型的迭代步骤,直到所述预训练模型满足所述第二条件时,获得所述语义代码搜索模型;其中,所述预训练模型的迭代步骤,包括:
将所述样本查询语句与所述样本代码片段输入到所述预训练模型;
根据所述预训练模型的输出结果,通过噪声对比损失函数获得所述预训练模型的第四模型损失;
根据所述预训练模型输出的所述样本查询语句与所述样本代码片段之间的匹配概率,获得所述预训练模型的第五模型损失;
根据所述第四模型损失与所述第五模型损失,更新所述预训练模型。
6.根据权利要求5所述的大规模候选集中的语义代码搜索模型构建方法,其特征在于,所述第四模型损失的表达式为:
Figure FDA0003657389850000032
式中,fθ(ui)表示第i个查询语句ui的低维嵌入表示,fθ(vi)表示第i个样本代码片段vi的低维嵌入表示,N表示所述样本代码片段的数量,σ表示预设超参数,B表示预设批次大小;
所述第五模型损失的表达式为:
Figure FDA0003657389850000041
式中,pθ(ui,vi)表示第i个查询语句ui与第i个样本代码片段vi之间的相匹配的概率,N表示所述样本代码片段的数量。
7.根据权利要求1-6任意一项所述的大规模候选集中的语义代码搜索模型构建方法,其特征在于,所述方法还包括:
将目标查询语句输入所述语义代码搜索模型;
根据所述语义代码搜索模型对所述目标查询语句的第一输出结果,从候选代码中确定出语义距离满足第一筛选条件的初筛代码片段;
将所述目标查询语句与所述初筛代码片段输入所述语义代码搜索模型;
根据所述代码搜索模型对所述目标查询语句与所述初筛代码片段的第二输出结果,从所述初筛代码片段中确定出满足第二筛选条件的目标代码片段。
8.一种大规模候选集中的语义代码搜索模型构建装置,其特征在于,应用于模型训练设备,所述装置包括:
样本模块,用于获取样本查询语句以及样本代码片段;
训练模块,用于训练目标模型学习所述样本查询语句与所述样本代码片段之间的语义信息,直到所述目标模型满足预设收敛条件时,获得语义代码搜索模型。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1-7任意一项所述的大规模候选集中的语义代码搜索模型构建方法。
10.一种模型训练设备,其特征在于,所述模型训练设备包括处理器以及存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1-7任意一项所述的大规模候选集中的语义代码搜索模型构建方法。
CN202210564651.8A 2022-05-23 2022-05-23 大规模候选集中的语义代码搜索模型构建方法及相关装置 Pending CN114896368A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210564651.8A CN114896368A (zh) 2022-05-23 2022-05-23 大规模候选集中的语义代码搜索模型构建方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210564651.8A CN114896368A (zh) 2022-05-23 2022-05-23 大规模候选集中的语义代码搜索模型构建方法及相关装置

Publications (1)

Publication Number Publication Date
CN114896368A true CN114896368A (zh) 2022-08-12

Family

ID=82724949

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210564651.8A Pending CN114896368A (zh) 2022-05-23 2022-05-23 大规模候选集中的语义代码搜索模型构建方法及相关装置

Country Status (1)

Country Link
CN (1) CN114896368A (zh)

Similar Documents

Publication Publication Date Title
CN112528672B (zh) 一种基于图卷积神经网络的方面级情感分析方法及装置
CN108959246B (zh) 基于改进的注意力机制的答案选择方法、装置和电子设备
CN111191002B (zh) 一种基于分层嵌入的神经代码搜索方法及装置
CN116775847B (zh) 一种基于知识图谱和大语言模型的问答方法和系统
CN111401077A (zh) 语言模型的处理方法、装置和计算机设备
US20220121823A1 (en) System and method for artificial intelligence driven document analysis, including searching, indexing, comparing or associating datasets based on learned representations
CN115516447A (zh) 热点新闻意图识别方法、装置、设备及可读存储介质
CN116304745B (zh) 基于深层次语义信息的文本话题匹配方法及系统
CN116861269A (zh) 工程领域的多源异构数据融合及分析方法
CN117648429B (zh) 基于多模态自适应检索式增强大模型的问答方法及系统
CN113779190B (zh) 事件因果关系识别方法、装置、电子设备与存储介质
CN115033733A (zh) 音频文本对生成方法、电子设备和存储介质
CN117574898A (zh) 基于电网设备的领域知识图谱更新方法及系统
CN110888944A (zh) 基于多卷积窗尺寸注意力卷积神经网络实体关系抽取方法
CN114896368A (zh) 大规模候选集中的语义代码搜索模型构建方法及相关装置
CN113051886B (zh) 一种试题查重方法、装置、存储介质及设备
CN113035175B (zh) 一种语音文本重写模型构建方法、语音识别方法
CN114490946A (zh) 基于Xlnet模型的类案检索方法、系统及设备
CN115203236A (zh) 基于模板检索的文本到sql生成方法
CN114723073B (zh) 语言模型预训练、产品搜索方法、装置以及计算机设备
CN116453702B (zh) 孤独症行为特征集的数据处理方法、设备、系统及介质
CN117473170B (zh) 基于代码表征的智能合约模版推荐方法、装置及电子设备
CN117573096B (zh) 一种融合抽象语法树结构信息的智能代码补全方法
US20240184570A1 (en) Code review comment generation via retrieval-augmented transformer with chunk cross- attention
CN115934163A (zh) 一种基于LSTM模型的Python API推荐方法

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