代码生成方法及装置与流程

未命名 09-13 阅读:70 评论:0


1.本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种代码生成方法及装置。


背景技术:

2.代码生成是一种利用机器学习或人工智能技术自动生成代码的方法,其中,利用机器学习的代码生成主要是利用机器学习或深度学习技术来学习代码的结构和功能,并根据输入的指令或需求自动生成相应的代码,其中,这里的代码例如可以为受隐私保护的代码。上述方法可以大大减轻程序开发人员的工作负担,提高代码开发的效率和质量。
3.随着生成式大模型的兴起,利用生成式大模型生成程序代码,以提升研发效率也越来越受到重视。因此,需要提供一种更准确的代码生成方案。


技术实现要素:

4.本说明书一个或多个实施例描述了一种代码生成方法,可以提高所生成的代码的准确性。
5.第一方面,提供了一种代码生成方法,包括:获取用户的查询文本,其至少指示代码实现的功能;根据所述查询文本,查询目标代码库,得到与所述查询文本相匹配的若干段参考代码;所述目标代码库中记录有对应于不同代码功能的多段程序代码;基于所述查询文本和所述若干段参考代码构建第一提示文本,所述第一提示文本指示,基于所述若干段参考代码生成所述查询文本对应的程序代码;将所述第一提示文本输入预先训练的生成式大模型,得到针对所述查询文本生成的目标代码。
6.第二方面,提供了一种代码生成装置,包括:获取单元,用于获取用户的查询文本,其至少指示代码实现的功能;查询单元,用于根据所述查询文本,查询目标代码库,得到与所述查询文本相匹配的若干段参考代码;所述目标代码库中记录有对应于不同代码功能的多段程序代码;构建单元,用于基于所述查询文本和所述若干段参考代码构建第一提示文本,所述第一提示文本指示,基于所述若干段参考代码生成所述查询文本对应的程序代码;输入单元,用于将所述第一提示文本输入预先训练的生成式大模型,得到针对所述查询文本生成的目标代码。
7.第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
8.第四方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,该处理器执行所述可执行代码时,实现第一方面的方法。
9.本说明书一个或多个实施例提供的代码生成方法,先基于用户的描述代码功能的
查询文本,查询目标代码库,以获取与查询文本相匹配的若干段参考代码。之后,将查询文本和获取的若干段参考代码均输入生成式大模型,得到针对查询文本生成的目标代码。也就是说,本方案中,在利用生成式大模型基于查询文本生成程序代码时,可以为生成式大模型提供基于查询文本获取的参考信息,由此可以大大提升所生成的代码的准确性。
附图说明
10.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
11.图1为本说明书批露的一个实施例的实施场景示意图;图2示出在一个例子中生成式大模型的训练方法流程图;图3示出根据一个实施例的代码生成方法流程图;图4示出在一个例子中程序代码的表征向量的确定方法示意图;图5示出在一个例子中编码器的训练方法示意图;图6示出根据一个实施例的代码生成装置示意图。
具体实施方式
12.下面结合附图,对本说明书提供的方案进行描述。
13.如前所述,为提升研发效率,可以利用生成式大模型来生成程序代码,该生成方法可以通过学习大量的代码片段和语法结构来自动生成程序代码,可以自适应地处理各种业务场景和需求,并且可以生成更加个性化和高质量的代码。例如,在自动化软件开发中,可以利用生成式大模型来生成基础框架和模板代码,从而提高开发效率和代码质量。在数据分析中,可以利用生成式大模型来生成数据处理和可视化的代码,从而简化数据分析流程。在自动化测试中,可以利用生成式大模型来生成测试代码,从而提高测试效率和测试覆盖率。在机器人流程自动化中,可以利用生成式大模型来生成机器人流程代码,从而降低流程实现的难度和成本。
14.其中,基于生成式大模型生成程序代码的方法主要包括如下两种:第一种,将用户的描述代码功能的目标文本输入预先训练的生成式大模型,以得到对应的程序代码。在该种方法中,由于用于训练生成式大模型的数据均为历史数据,也就是说,模型无法学习到新的知识,从而使得所生成的程序代码的准确性较低。
15.第二种,预先编写代码模板,之后将用户的描述代码功能的目标文本匹配预先编写的代码模板,来生成对应的程序代码。然而该方法会受限于预先编写的代码模板,难以处理复杂的业务场景和变化多样的需求,同时也需要大量的人力投入和维护成本。
16.为此,本方案提出一种基于查询的代码生成方法,具体地,先基于用户的描述代码功能的查询文本,查询目标代码库,以获取与查询文本相匹配的若干段参考代码。之后,将查询文本和获取的若干段参考代码均输入生成式大模型,得到针对查询文本生成的目标代码。由于,本方案在利用生成式大模型基于查询文本生成程序代码时,可以为生成式大模型提供基于查询文本获取的参考信息,由此可以大大提升所生成的代码的准确性。
17.图1为本说明书批露的一个实施例的实施场景示意图,图1中,搜索系统可以先接收用户的描述代码功能的查询文本,并基于该查询文本,查询目标代码库,得到与查询文本相匹配的若干段参考代码。之后,搜索系统可以将查询文本和查询得到的若干段参考代码均输入预先训练的生成式大模型,得到针对查询文本生成的目标代码。
18.其中,上述的生成式大模型可以采用基于transformer解码器构成的预训练大语言模型(generative pre-training transformer,gpt)实现,其中包括chatglm、gpt-neox、llama等。
19.需要说明,本说明书实施例提供的代码生成方法可以应用于如下场景:1.自动化软件开发:如可以自动生成基础代码,提高软件开发的效率。例如,可以生成模板代码、基础框架、数据库操作代码等。
20.2.数据分析:如可以自动生成数据转换和处理的代码,简化数据分析的流程,提高分析效率和精度。例如,可以生成数据清洗、数据可视化、数据挖掘等代码。
21.3.自动化测试:如可以自动生成测试代码,简化测试流程,提高测试效率。例如,可以生成单元测试、集成测试等代码。
22.4.机器人流程自动化:如可以自动生成机器人流程的代码,简化流程设计和实现,提高效率。例如,可以生成自动化流程、工作流程等代码。
23.如前所述,本方案是基于预先训练的生成式大模型,来生成目标代码。因此,以下先对上述生成式大模型的训练过程进行说明。
24.图2示出在一个例子中生成式大模型的训练方法流程图。该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。如图2所示,该方法可以包括如下步骤:步骤s202,获取包括输入部分和输出部分的训练样本集。
25.该训练样本集包括第一训练样本,该第一训练样本的输入部分包括样本查询文本和若干段样本参考代码,输出部分为具有样本查询文本所指示功能的样本程序代码。
26.此外,上述训练样本集还可以包括第二训练样本,该第二训练样本的输入部分包括样本初始文本,输出部分为针对样本初始文本进行改写后的样本查询文本。其中,这里的改写可以包括但不限于初始文本改写、关键词提取、意图词选取以及按照预定格式输出等。
27.步骤s204,将训练样本集的输入部分输入预训练的生成式大模型,并根据生成式大模型的预测输出,针对训练样本集的输出部分计算第一预测损失。
28.需要说明,当上述训练样本集同时包括第一训练样本和第二训练样本时,那么可以是将第一训练样本的输入部分和第二训练样本的输入部分打乱混合输入到生成式大模型中。也即基于第一训练样本和第二训练样本混合训练生成式大模型。
29.在一个实施例中,上述生成式大模型的预测输出为,模型根据输入部分预测的下一个输出字符(token)的概率(以下称预测概率)。在一个更具体的实施例中,可以基于极大似然函数,计算该预测概率。
30.应理解,针对生成式大模型的训练过程通常包括多轮迭代,该多轮迭代以预测第一个输出字符开始。在该多轮迭代中的每一轮迭代中,在得到模型输出的预测概率后,通过查询预定义的词映射表,就可以确定出下一个输出字符,接着,在进入下一轮迭代时,将确定出的下一个输出字符也输入到模型中。
31.此外,在上述多轮迭代中任意的第t轮迭代中,通过累加在前t轮迭代中输出的各个预测概率,就可以得到第t轮迭代的预测损失。
32.最后,除了将训练样本集的输入部分输入生成式大模型外,还可以输入若干提示段,该提示段的提示内容后续说明。
33.步骤s206,根据第一预测损失,对生成式大模型进行微调。
34.至此,就完成了针对生成式大模型的训练过程。
35.应理解,当仅基于上述的第一训练样本,对预训练的生成式大模型进行微调时,那么该生成式大模型可以用于执行代码生成任务。
36.还需要说明,当同时基于第一训练样本和第二训练样本,对预训练的生成式大模型进行微调时,那么该生成式大模型还可以用于执行初始文本改写任务。
37.图3示出根据一个实施例的代码生成方法流程图。该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。如图3所示,该方法可以包括如下步骤:步骤s302,获取用户的查询文本,其至少指示代码实现的功能。
38.在一个实施例中,可以直接将用户的描述代码功能的初始文本作为用户的查询文本。
39.在另一个实施例中,在获取到用户的描述代码功能的初始文本后,可以基于该初始文本构建第二提示文本,并将该第二提示文本输入预先训练的生成式大模型,得到查询文本,该查询文本中包括关键词和意图词。
40.首先,这里的预先训练的生成式大模型可以是基于上文所述的第一训练样本和第二训练样本训练得到。
41.其次,这里的第二提示文本可以指示以下中的一项或多项:按照预定格式改写初始文本、从初始文本中提取关键词以及从意图词列表中选择意图词。此外,还可以指示,将初始文本翻译为英文文本以及从英文文本中提取关键词等等。
42.当然,在实际应用中,除了上述指示内容外,第二提示文本还可以指示,意图词列表以及文本输出格式等等。
43.在本说明书中,上述第二提示文本所指示的每一项内容可以对应于一个提示段。
44.在一个实施例中,上述第二提示文本主要包括如下两方面的内容:若干提示段和初始文本。其中,该若干提示段包括:第一,意图词列表,即以“intent list”开头的内容;第二 ,文本输出格式,即包含词语“rewrite”的内容。此外,上述初始文本是指以“query”开头的内容。
45.步骤s304,根据查询文本,查询目标代码库,得到与查询文本相匹配的若干段参考代码。
46.该目标代码库中记录有对应于不同代码功能的多段程序代码。该多段程序代码可以是从目标网站(如,github)或者代码托管网络(如,gitlab)收集的函数注释率高、收藏量高的程序代码。
47.此外,目标代码库中还可以记录有该多段程序代码各自的表征向量。这里的表征向量的确定方法后续说明。
48.当然,在实际应用中,目标代码库中还可以记录有程序代码的其它描述信息。该其它描述信息可以包括但不限于来源地址、来源网站类型、注释部分、代码部分对应的自然语
言文本、点赞量和收藏量等等。
49.在一个实施例中,上述查询目标代码库可以包括,获取查询文本对应的目标表征向量。计算目标表征向量与多段程序代码各自的表征向量的向量距离,例如,欧式距离,余弦距离等等。根据向量距离,从多段程序代码中选取出若干段参考代码。
50.在一个例子中,可以将查询文本输入预先训练的编码器,得到对应的目标表征向量。这里的编码器的训练过程后续说明。
51.在一个实施例中,可以按照向量距离从小到大,对多段程序代码进行排序,然后将排序靠前的n(即top n)段程序代码,确定为若干段参考代码。
52.在另一个实施例中,根据向量距离,从多段程序代码中,确定出距离目标表征向量最近的k段候选代码,k为正整数。根据k段候选代码各自的其它描述信息和预定义的打分规则,确定该k段候选代码各自的指示参考价值的目标打分,并根据该目标打分,选取出若干段参考代码。
53.对于k段候选代码中任意的第一候选代码,可以根据第一分值、第二分值、第三分值和第四分值中的至少一个,确定其目标打分。
54.关于上述第一分值,可以是根据查询文本和第一候选代码中的代码部分对应的自然语言文本(可以基于预先训练的大语言模型而确定)各自所包含核心词的数目和重复核心词的数目而确定。
55.在一个例子中,可以预先定义核心词库,其中该核心词库中的核心词可以基于自然语言处理(natural language processing,nlp)方法所统计的词频大于阈值的词语。然后针对查询文本,统计其中包含的核心词的数目,假设为m,以及针对第一候选代码中的代码部分对应的自然语言文本,统计其中包含的核心词数目,假设为n。此外,还假设查询文本和自然语言文本各自所包含的核心词中重复核心词的数目为p,那么第一分值的计算公式可以如下:p/max(m,n)。其中,max()为取最大值函数。
56.关于上述第二分值,可以是根据第一候选代码的目标网站类型,查询来源网站类型与分值的对应关系而确定。
57.在一个例子中,假设网站类型github 对应的分值为:0.9,网站类型geeks4geeks对应的分值为:0.7,那么在目标网站类型为: github时,上述第二分值为0.9。
58.关于上述第三分值,可以是根据第一候选代码的点赞量和收藏量的求和结果而确定。
59.在一个例子中,假设将点赞量表示为l,以及将收藏量表示为s,那么第三分值的计算公式可以如下:max(log(1+(l+s)/10)/2,2.0),其中,max()为取最大值函数,log为以10为底的对数。
60.关于上述第四分值,可以根据第一候选代码与查询文本的向量距离确定。
61.在一个例子中,可以选用计算查询文本的目标表征向量与第一候选代码的表征向量的余弦距离加上1.0作为第四分值,该第四分值的取值范围例如可以为[0.0,2.0]。
[0062]
需要说明,在根据上述第一分值、第二分值、第三分值和第四分值中的两个以上的分值,确定第一候选代码的目标打分时,可以对该两个以上的分值进行加权求和,并将加权求和结果作为目标打分。
[0063]
与第一候选代码的目标打分的确定方法类似地,可以确定其它候选代码各自的目
标打分,本说明书在此不复赘述。
[0064]
应理解,在确定出k段候选代码各自的目标打分之后,可以按照目标打分从高到低的顺序对该k段候选代码进行排序,然后将排序靠前的若干段候选代码确定为上述若干段参考代码。其中,这里的若干段例如可以为n段,n为正整数,且n≤k。
[0065]
步骤s306,基于查询文本和若干段参考代码构建第一提示文本。
[0066]
该第一提示文本指示,基于若干段参考代码生成查询文本对应的程序代码。
[0067]
此外,该第一提示文本还可以指示以下中的一项或多项:在指示有代码输出格式的情况下,按照该代码输出格式输出对应于查询文本的程序代码,以及在若干段参考代码均不符合要求的情况下,直接生成对应于查询文本的程序代码。
[0068]
在一个实施例中,上述的第一提示文本主要包括如下四方面的内容:第一,若干段参考代码,即以“code search result:”开始的内容,其中的每一段参考代码通过“source〔〕”进行标识。第二,若干提示段,即以“instructions:”开始的内容。第三,查询文本,即以“query:”开始的内容。第四,代码输出格式,即以“assert:”开始的内容。其中,这里的代码输出格式可以包括预先定义的函数输出样例。应理解,在第一提示文本中不指示该代码输出格式的情况下,模型按照原始代码格式输出目标代码。
[0069]
步骤s308, 将第一提示文本输入预先训练的生成式大模型,得到针对查询文本生成的目标代码。
[0070]
需要说明,在基于生成式大模型进行预测时,通常需要将输入的提示文本转换为token表示,其中的单个token可以代表一个字母、一个单词、开始符号和结束符号等等。
[0071]
通常而言,模型所支持的输入token和输出token的总数目是有限的,比如,不超过4096个。因此,本说明书实施例中,要求参考代码的数目一般不超过5个,且针对各参考代码所转换得到的token数目不超过1500个。具体地,可以按照目标打分,对各参考代码进行排序,然后,先对排序在前的第1个参考代码进行转换,如若转换得到的token数目超过了1500个,则做截断处理,否则,如果在针对第m(1《m《n)个参考代码进行转换时,所累加得到的token数目超过了1500个,则弃用从第m个开始的各参考代码。
[0072]
需要说明,本说明书实施例中,生成式大模型生成目标代码的过程可以包括:1.当上述若干段参考代码中存在符合用户查询要求(即查询文本所指示的功能)的参考代码时,生成式大模型可以从各段参考代码中寻找出最适合的参考代码,并按照用户要求进行改写。如,按照所指示的函数输出样例生成函数。
[0073]
2. 当上述若干段参考代码中不存在符合用户查询要求的参考代码时,生成式大模型可以自己根据查询文本所指示的功能生成程序代码。
[0074]
3.当从目标代码库中查询不到参考代码时,生成式大模型可以自己根据查询文本所指示的功能生成程序代码。
[0075]
总之,本说明书实施例所述的生成式大模型具有鉴别和筛选查询结果(即若干参考代码段)的能力。
[0076]
综上,本说明书实施例提供的代码生成方法,在针对查询文本生成目标代码的过程中,通过将从目标代码库中查询得到的若干段参考代码输入生成式大模型,可以实现为生成式大模型提供参考信息,由此可以提升所生成的目标代码的准确性。此外,本说明书实施例提供的生成式大模型不仅可以依据用户提供的参考信息来生成程序代码,还可以按照
指示格式输出所生成的程序代码,由此可以提升用户体验。如,可以按照所指示的函数输出样本生成函数。最后,由于目标代码库中的程序代码可以被实时更新,也即所查询到的参考代码通常是能够满足时效性要求的高质量代码,这有助于提升所生成的目标代码的准确性。
[0077]
以下对上文中提及的目标代码库中记录的多段程序代码各自的表征向量的确定方法进行说明。
[0078]
图4示出在一个例子中程序代码的表征向量的确定方法示意图。图4中,对于多段程序代码中任意的第一程序代码,可以从中抽取出注释部分,并基于该注释部分确定第一程序代码的第一描述文本。以及,将第一程序代码中除注释部分外的剩余代码部分,输入预先训练的大语言模型,得到第一程序代码的第二描述文本。将第一描述文本和第二描述文本,输入预先训练的编码器,根据编码结果得到第一程序代码的第一表征向量。
[0079]
首先,上述基于注释部分确定第一程序代码的第一描述文本可以包括,解析第一程序代码中除注释部分外的剩余代码部分,确定对应的目标编程语言,并将目标编程语言的信息添加到注释部分中,得到第一程序代码的第一描述文本。
[0080]
在一个例子中,可以将剩余代码部分输入预先训练的多分类模型,得到对应的目标编程语言。其中,对应于该多分类模型的多个分类可以为各类编程语言,比如,python语言、java语言等等。
[0081]
在另一个例子中,也可以通过提取包含剩余代码部分的编译文件(如,class文件)的后缀名,确定对应的目标编程语言。
[0082]
当然,在实际应用中,如果确定出注释部分中已包含编程语言的信息(如,名称),则直接将该注释部分确定为第一描述文本。
[0083]
其次,关于上述预先训练的大语言模型,其主要用于对程序代码和自然语言文本进行互相翻译,因此,也可以将其称为pl2nl大模型。
[0084]
在一个实施例中,该大预言模型的训练过程可以包括:获取包括输入部分和输出部分的第三和第四训练样本。其中,第三训练样本的输入部分为自然语言文本,输出部分为程序代码;第四训练样本的输入部分为程序代码,输出部分为自然语言文本。将第三训练样本和第四训练样本的输入部分交替输入预训练的大语言模型(例如,chatglm、gpt-neox、llama等),并根据该大语言模型的预测输出,针对第三和第四训练样本的输出部分计算第二预测损失。根据第二预测损失,对大语言模型进行微调。
[0085]
其中,这里的第二预测损失的计算方法可以参照上述第一预测损失的计算方法,本说明书在此不复赘述。
[0086]
最后,关于上述编码器,其可以基于simbert模型或者nezha(哪吒)实现。
[0087]
在一个实施例中,该编码器的训练过程可以如图5所示。图5中,对于预先收集的一批样本代码中的每个样本代码,可以基于其中的注释部分,确定第一样本描述文本,并将剩余代码部分输入预先训练的大语言模型,得到第二样本描述文本。接着,在一个训练批次中,基于各个样本代码各自的第一样本描述文本和第二样本描述文本形成各正样本对,以及通过对不同样本代码对应的第一样本描述文本和第二样本描述文本进行交叉配对,构建负样本对。最后,将各正样本对和各负样本对依次输入编码器和分类器,并根据分类器的预测输出,调整编码器和分类器的参数。其中,该分类器用于对正负样本对进行分类。
[0088]
其中,上述的编码器可以包括bert层、池化层和句向量层。具体而言,对于上述的第一样本描述文本/第二样本描述文本,在将其输入编码器后,首先在bert层,确定第一样本描述文本/第二样本描述文本中的各个词语的词向量,接着在池化层,可以对各个词语的词向量进行池化处理(例如,平均池化或者最大池化),得到各个词语的池化向量。最后在句向量层,基于各个词语的池化向量,得到第一样本描述文本/第二样本描述文本的特征向量。
[0089]
此外,在一个实施例中,上述构建负样本对可以包括:对不同样本代码对应的第一样本描述文本和第二样本描述文本进行交叉配对,得到多个配对结果。对于任意的第一配对结果,判断其中的两个样本描述文本是否包含相同的核心词。在包含相同的核心词的情况下,删除该第一配对结果。在不包含相同的核心词的情况下,将该第一配对结果作为所构建的一个负样本对。
[0090]
关于上述的交叉配对,可以理解为,是将对应于不同样本代码的第一样本描述文本或者第二样本描述文本进行交换。举例来说,假设存在两个样本代码:代码a和代码b,且代码a对应的第一样本描述文本和第二样本描述文本分别为:a1和a2,以及代码b对应的第一样本描述文本和第二样本描述文本分别为:b1和b2,那么可以得到如下的两个配对结果:【b1,a2】和【a1,b2】。
[0091]
之后,对于配对结果:【b1,a2】,可以判断b1和a2是否包含相同的核心词,如果是,则删除该配对结果,否则将该配对结果作为所构建的一个负样本对。
[0092]
类似地,可以对配置结果:【a1,b2】也进行上述是否包含核心词的判断。
[0093]
最后,关于上述分类器,其可以为二分类分类器。在一个实施例中,可以基于分类器的预测输出和正负样本对的样本标签,采用交叉熵损失函数,计算分类损失,并基于该分类损失,调整编码器和分类器的参数。
[0094]
应理解,通过图5示出的各方法步骤所训练的编码器,同时可以用于预测上述查询文本的目标表征向量,本说明书在此不复赘述。
[0095]
与上述代码生成方法对应地,本说明书一个实施例还提供的一种代码生成装置,如图6所示,该装置可以包括:获取单元602,用于获取用户的查询文本,其至少指示代码实现的功能。
[0096]
查询单元604,用于根据查询文本,查询目标代码库,得到与查询文本相匹配的若干段参考代码,该目标代码库中记录有对应于不同代码功能的多段程序代码。
[0097]
构建单元606,用于基于查询文本和若干段参考代码构建第一提示文本,该第一提示文本指示,基于若干段参考代码生成查询文本对应的程序代码。
[0098]
输入单元608,用于将第一提示文本输入预先训练的生成式大模型,得到针对查询文本生成的目标代码。
[0099]
在一个实施例中,该第一提示文本还指示以下中的一项或多项:在指示有代码输出格式的情况下,按照该代码输出格式输出对应于查询文本的程序代码;在若干段参考代码均不符合要求的情况下,直接生成对应于查询文本的程序代码。
[0100]
在一个实施例中,该装置还包括:第一训练单元610;
第一训练单元610具体用于:获取包括输入部分和输出部分的训练样本集,该训练样本集包括第一训练样本,该第一训练样本的输入部分包括样本查询文本和若干段样本参考代码,输出部分为具有样本查询文本所指示功能的样本程序代码;将训练样本集的输入部分输入预训练的生成式大模型,并根据生成式大模型的预测输出,针对训练样本集的输出部分计算第一预测损失;根据第一预测损失,对生成式大模型的进行微调。
[0101]
在一个实施例中,获取单元602具体用于:获取用户的描述代码功能的初始文本;基于初始文本构建第二提示文本;将第二提示文本输入生成式大模型,得到查询文本,该查询文本中包括关键词和意图词。
[0102]
在一个实施例中,该第二提示文本指示以下中的一项或多项:按照预定格式改写初始文本;从初始文本中提取关键词;从意图词列表中选择意图词。
[0103]
在一个实施例中,目标代码库中还记录有多段程序代码各自的表征向量;查询单元604包括:获取子模块6042,用于获取查询文本对应的目标表征向量;计算子模块6044,用于计算目标表征向量与多段程序代码各自的表征向量的向量距离;选取子模块6046,用于根据向量距离,从多段程序代码中选取出若干段参考代码。
[0104]
在一个实施例中,目标代码库中还记录有多段程序代码各自的其它描述信息;选取子模块6046具体用于:根据向量距离,从多段程序代码中,确定出距离目标表征向量最近的k段候选代码;根据k段候选代码各自的其它描述信息和预定义的打分规则,确定该k段候选代码各自的指示参考价值的目标打分,并根据目标打分,选取出若干段参考代码。
[0105]
在一个实施例中,上述其它描述信息包括以下中的至少一项:来源地址、来源网站类型、注释部分、代码部分对应的自然语言文本、点赞量和收藏量等。
[0106]
在一个实施例中,选取子模块6046还具体用于:对于任意的第一候选代码,根据第一分值、第二分值、第三分值和第四分值中的至少一个,确定其目标打分,其中,上述第一分值根据查询文本和第一候选代码中的代码部分对应的自然语言文本各自所包含核心词的数目和重复核心词的数目而确定;上述第二分值根据第一候选代码的目标网站类型,查询来源网站类型与分值的对应关系而确定;上述第三分值根据第一候选代码的点赞量和收藏量的求和结果而确定;
上述第四分值根据第一候选代码与查询文本的向量距离而确定。
[0107]
在一个实施例中,该装置还包括:抽取单元612,用于对于任意的第一程序代码,从中抽取出注释部分,并基于注释部分确定第一程序代码的第一描述文本;输入单元608,还用于将第一程序代码中除注释部分外的剩余代码部分,输入预先训练的大语言模型,得到第一程序代码的第二描述文本;输入单元608,还用于将第一和第二描述文本,输入预先训练的编码器,根据编码结果得到第一程序代码的第一表征向量。
[0108]
在一个实施例中,抽取单元612具体用于:解析剩余代码部分,确定对应的目标编程语言;将目标编程语言的信息添加到注释部分中,得到第一程序代码的第一描述文本。
[0109]
在一个实施例中,该装置还包括:第二训练单元614;第二训练单元614具体用于:获取包括输入部分和输出部分的第三和第四训练样本;其中,第三训练样本的输入部分为自然语言文本,输出部分为程序代码;第四训练样本的输入部分为程序代码,输出部分为自然语言文本;将第三和第四训练样本的输入部分输入预训练的大语言模型,并根据大语言模型的预测输出,针对第三和第四训练样本的输出部分计算第二预测损失;根据第二预测损失,对大语言模型进行微调。
[0110]
在一个实施例中,该装置还包括:第三训练单元616;第三训练单元616具体用于:对于一批样本代码中的每个样本代码,基于其中的注释部分,确定第一样本描述文本,并将剩余代码部分输入预先训练的大语言模型,得到第二样本描述文本;基于各个样本代码各自的第一和第二样本描述文本形成各正样本对,以及通过对不同样本代码对应的第一和第二样本描述文本进行交叉配对,构建各负样本对;将所述各正样本对和所述各负样本对输入编码器和分类器,并根据所述分类器的预测输出,调整所述编码器和分类器的参数。
[0111]
在一个实施例中,第三训练单元616还具体用于:对不同样本代码对应的第一和第二样本描述文本进行交叉配对,得到多个配对结果;对于任意的第一配对结果,判断其中的两个样本描述文本是否包含相同的核心词;在包含相同的核心词的情况下,删除该第一配对结果;在不包含相同的核心词的情况下,将该第一配对结果作为所构建的一个负样本对。
[0112]
本说明书上述实施例装置的各功能单元的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
[0113]
本说明书一个实施例提供的代码生成装置,可以大大提升所生成的代码的准确性。
[0114]
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2或图3所描述的方法。
[0115]
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2或图3所描述的方法。
[0116]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于介质或设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0117]
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0118]
以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。

技术特征:
1.一种代码生成方法,包括:获取用户的查询文本,其至少指示代码实现的功能;根据所述查询文本,查询目标代码库,得到与所述查询文本相匹配的若干段参考代码;所述目标代码库中记录有对应于不同代码功能的多段程序代码;基于所述查询文本和所述若干段参考代码构建第一提示文本,所述第一提示文本指示,基于所述若干段参考代码生成所述查询文本对应的程序代码;将所述第一提示文本输入预先训练的生成式大模型,得到针对所述查询文本生成的目标代码。2.根据权利要求1所述的方法,其中,所述第一提示文本还指示以下中的一项或多项:在指示有代码输出格式的情况下,按照该代码输出格式输出对应于查询文本的程序代码;在若干段参考代码均不符合要求的情况下,直接生成对应于查询文本的程序代码。3.根据权利要求1所述的方法,其中,所述生成式大模型通过以下步骤训练得到:获取包括输入部分和输出部分的训练样本集;所述训练样本集包括第一训练样本,该第一训练样本的输入部分包括样本查询文本和若干段样本参考代码,输出部分为具有所述样本查询文本所指示功能的样本程序代码;将所述训练样本集的输入部分输入预训练的生成式大模型,并根据所述生成式大模型的预测输出,针对所述训练样本集的输出部分计算第一预测损失;根据所述第一预测损失,对所述生成式大模型的进行微调。4.根据权利要求1所述的方法,其中,所述获取用户的查询文本,包括:获取用户的描述代码功能的初始文本;基于所述初始文本构建第二提示文本;将所述第二提示文本输入所述生成式大模型,得到所述查询文本,所述查询文本中包括关键词和意图词。5.根据权利要求4所述的方法,其中,所述第二提示文本指示以下中的一项或多项:按照预定格式改写初始文本;从初始文本中提取关键词;从意图词列表中选择意图词。6.根据权利要求1所述的方法,其中,所述目标代码库中还记录有所述多段程序代码各自的表征向量;所述查询目标代码库,包括:获取所述查询文本对应的目标表征向量;计算所述目标表征向量与所述多段程序代码各自的表征向量的向量距离;根据所述向量距离,从所述多段程序代码中选取出所述若干段参考代码。7.根据权利要求6所述的方法,其中,所述目标代码库中还记录有所述多段程序代码各自的其它描述信息;所述从所述多段程序代码中选取出所述若干段参考代码,包括:根据所述向量距离,从所述多段程序代码中,确定出距离所述目标表征向量最近的k段候选代码;
根据所述k段候选代码各自的其它描述信息和预定义的打分规则,确定该k段候选代码各自的指示参考价值的目标打分,并根据所述目标打分,选取出所述若干段参考代码。8.根据权利要求7所述的方法,其中,所述其它描述信息包括以下中的至少一项:来源地址、来源网站类型、注释部分、代码部分对应的自然语言文本、点赞量和收藏量。9.根据权利要求7所述的方法,其中,所述确定该k段候选代码各自的指示参考价值的目标打分,包括:对于任意的第一候选代码,根据第一分值、第二分值、第三分值和第四分值中的至少一个,确定其目标打分,其中,所述第一分值根据查询文本和所述第一候选代码中的代码部分对应的自然语言文本各自所包含核心词的数目和重复核心词的数目而确定;所述第二分值根据所述第一候选代码的目标网站类型,查询来源网站类型与分值的对应关系而确定;所述第三分值根据所述第一候选代码的点赞量和收藏量的求和结果而确定;所述第四分值根据所述第一候选代码与所述查询文本的向量距离而确定。10.根据权利要求6所述的方法,其中,所述表征向量通过以下步骤获得:对于任意的第一程序代码,从中抽取出注释部分,并基于所述注释部分确定所述第一程序代码的第一描述文本;将所述第一程序代码中除所述注释部分外的剩余代码部分,输入预先训练的大语言模型,得到所述第一程序代码的第二描述文本;将所述第一和第二描述文本,输入预先训练的编码器,根据编码结果得到所述第一程序代码的第一表征向量。11.根据权利要求10所述的方法,其中,所述大语言模型通过以下步骤训练得到:获取包括输入部分和输出部分的第三和第四训练样本;其中,所述第三训练样本的输入部分为自然语言文本,输出部分为程序代码;所述第四训练样本的输入部分为程序代码,输出部分为自然语言文本;将所述第三和第四训练样本的输入部分输入预训练的大语言模型,并根据所述大语言模型的预测输出,针对所述第三和第四训练样本的输出部分计算第二预测损失;根据所述第二预测损失,对所述大语言模型进行微调。12.根据权利要求10所述的方法,其中,所述编码器通过以下步骤训练得到:对于一批样本代码中的每个样本代码,基于其中的注释部分,确定第一样本描述文本,并将剩余代码部分输入所述预先训练的大语言模型,得到第二样本描述文本;基于各个样本代码各自的第一和第二样本描述文本形成各正样本对,以及通过对不同样本代码对应的第一和第二样本描述文本进行交叉配对,构建各负样本对;将所述各正样本对和所述各负样本对输入编码器和分类器,并根据所述分类器的预测输出,调整所述编码器和分类器的参数。13.根据权利要求12所述的方法,其中,所述构建各负样本对,包括:对不同样本代码对应的第一和第二样本描述文本进行交叉配对,得到多个配对结果;对于任意的第一配对结果,判断其中的两个样本描述文本是否包含相同的核心词;在包含相同的核心词的情况下,删除该第一配对结果;
在不包含相同的核心词的情况下,将该第一配对结果作为所构建的一个负样本对。14.根据权利要求10所述的方法,其中,所述基于所述注释部分确定所述第一程序代码的第一描述文本,包括:解析所述剩余代码部分,确定对应的目标编程语言;将所述目标编程语言的信息添加到所述注释部分中,得到所述第一程序代码的第一描述文本。15.一种代码生成装置,包括:获取单元,用于获取用户的查询文本,其至少指示代码实现的功能;查询单元,用于根据所述查询文本,查询目标代码库,得到与所述查询文本相匹配的若干段参考代码;所述目标代码库中记录有对应于不同代码功能的多段程序代码;构建单元,用于基于所述查询文本和所述若干段参考代码构建第一提示文本,所述第一提示文本指示,基于所述若干段参考代码生成所述查询文本对应的程序代码;输入单元,用于将所述第一提示文本输入预先训练的生成式大模型,得到针对所述查询文本生成的目标代码。16.根据权利要求15所述的装置,还包括:第一训练单元;所述第一训练单元具体用于:获取包括输入部分和输出部分的训练样本集;所述训练样本集包括第一训练样本,该第一训练样本的输入部分包括样本查询文本和若干段样本参考代码,输出部分为具有所述样本查询文本所指示功能的样本程序代码;将所述训练样本集的输入部分输入预训练的生成式大模型,并根据所述生成式大模型的预测输出,针对所述训练样本集的输出部分计算第一预测损失;根据所述第一预测损失,对所述生成式大模型的进行微调。17.根据权利要求15所述的装置,其中,所述获取单元具体用于:获取用户的描述代码功能的初始文本;基于所述初始文本构建第二提示文本;将所述第二提示文本输入所述生成式大模型,得到所述查询文本,所述查询文本中包括关键词和意图词。18.根据权利要求15所述的装置,其中,所述目标代码库中还记录有所述多段程序代码各自的表征向量;所述查询单元包括:获取子模块,用于获取所述查询文本对应的目标表征向量;计算子模块,用于计算所述目标表征向量与所述多段程序代码各自的表征向量的向量距离;选取子模块,用于根据所述向量距离,从所述多段程序代码中选取出所述若干段参考代码。19.根据权利要求18所述的装置,其中,所述目标代码库中还记录有所述多段程序代码各自的其它描述信息;所述选取子模块具体用于:根据所述向量距离,从所述多段程序代码中,确定出距离所述目标表征向量最近的k段
候选代码;根据所述k段候选代码各自的其它描述信息和预定义的打分规则,确定该k段候选代码各自的指示参考价值的目标打分,并根据所述目标打分,选取出所述若干段参考代码。20.根据权利要求19所述的装置,其中,所述选取子模块还具体用于:对于任意的第一候选代码,根据第一分值、第二分值、第三分值和第四分值中的至少一个,确定其目标打分,其中,所述第一分值根据查询文本和所述第一候选代码中的代码部分对应的自然语言文本各自所包含核心词的数目和重复核心词的数目而确定;所述第二分值根据所述第一候选代码的目标网站类型,查询来源网站类型与分值的对应关系而确定;所述第三分值根据所述第一候选代码的点赞量和收藏量的求和结果而确定;所述第四分值根据所述第一候选代码与所述查询文本的向量距离而确定。21.根据权利要求18所述的装置,还包括:抽取单元,用于对于任意的第一程序代码,从中抽取出注释部分,并基于所述注释部分确定所述第一程序代码的第一描述文本;所述输入单元,还用于将所述第一程序代码中除所述注释部分外的剩余代码部分,输入预先训练的大语言模型,得到所述第一程序代码的第二描述文本;所述输入单元,还用于将所述第一和第二描述文本,输入预先训练的编码器,根据编码结果得到所述第一程序代码的第一表征向量。22.根据权利要求21所述的装置,还包括:第二训练单元;所述第二训练单元具体用于:获取包括输入部分和输出部分的第三和第四训练样本;其中,所述第三训练样本的输入部分为自然语言文本,输出部分为程序代码;所述第四训练样本的输入部分为程序代码,输出部分为自然语言文本;将所述第三和第四训练样本的输入部分输入预训练的大语言模型,并根据所述大语言模型的预测输出,针对所述第三和第四训练样本的输出部分计算第二预测损失;根据所述第二预测损失,对所述大语言模型进行微调。23.根据权利要求21所述的装置,还包括:第三训练单元;所述第三训练单元具体用于:对于一批样本代码中的每个样本代码,基于其中的注释部分,确定第一样本描述文本,并将剩余代码部分输入所述预先训练的大语言模型,得到第二样本描述文本;基于各个样本代码各自的第一和第二样本描述文本形成各正样本对,以及通过对不同样本代码对应的第一和第二样本描述文本进行交叉配对,构建各负样本对;将所述各正样本对和所述各负样本对输入编码器和分类器,并根据所述分类器的预测输出,调整所述编码器和分类器的参数。24.一种计算机可读存储介质,其上存储有计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-14中任一项所述的方法。25.一种计算设备,包括存储器和处理器,其中,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-14中任一项所述的方法。

技术总结
本说明书实施例提供一种代码生成方法及装置,在代码生成方法中,获取用户的查询文本,其至少指示代码实现的功能。根据查询文本,查询目标代码库,得到与查询文本相匹配的若干段参考代码。其中,该目标代码库中记录有对应于不同代码功能的多段程序代码。基于查询文本和若干段参考代码构建第一提示文本,该第一提示文本指示,基于若干段参考代码生成所述查询文本对应的程序代码。将第一提示文本输入预先训练的生成式大模型,得到针对查询文本生成的目标代码。标代码。标代码。


技术研发人员:任陶瑞 沈悦 张亚军 刘志伟 姜伟
受保护的技术使用者:支付宝(杭州)信息技术有限公司
技术研发日:2023.08.07
技术公布日:2023/9/9
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐