CN117369796A - 代码构建方法、模型微调方法、设备及存储介质 - Google Patents
代码构建方法、模型微调方法、设备及存储介质 Download PDFInfo
- Publication number
- CN117369796A CN117369796A CN202311427814.9A CN202311427814A CN117369796A CN 117369796 A CN117369796 A CN 117369796A CN 202311427814 A CN202311427814 A CN 202311427814A CN 117369796 A CN117369796 A CN 117369796A
- Authority
- CN
- China
- Prior art keywords
- code text
- target
- text
- model
- code
- 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
- 238000000034 method Methods 0.000 title claims abstract description 118
- 238000010276 construction Methods 0.000 title claims abstract description 18
- 238000012549 training Methods 0.000 claims abstract description 125
- 238000012545 processing Methods 0.000 claims abstract description 25
- 238000012360 testing method Methods 0.000 claims description 112
- 238000012795 verification Methods 0.000 claims description 38
- 230000008569 process Effects 0.000 claims description 34
- 230000006870 function Effects 0.000 claims description 32
- 230000002452 interceptive effect Effects 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 7
- 230000000694 effects Effects 0.000 abstract description 15
- 238000010586 diagram Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 7
- 230000003993 interaction Effects 0.000 description 6
- 238000003058 natural language processing Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000001965 increasing effect Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000008451 emotion Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000013100 final test Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000009966 trimming Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
Abstract
本申请提供一种代码构建方法、模型微调方法、设备及存储介质,其中方法包括:获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本;根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现;根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。本申请能够有效扩充目标编程语言对应的代码文本,提高构建代码文本的效率和准确性,进而可以基于构建的代码文本对模型进行微调训练,提高模型针对目标编程语言的处理能力,提升模型的训练效果。
Description
技术领域
本申请涉及人工智能技术,尤其涉及一种代码构建方法、模型微调方法、设备及存储介质。
背景技术
随着计算机技术的不断发展,软件开发的需求也日益增加,为了辅助实现软件开发,可以利用大模型进行代码生成,从而提高开发的整体效率。
在通过大模型生成代码之前,可以先基于训练数据对大模型进行训练。现有技术中,存在多种编程语言,例如,C语言、C++、JAVA、Python等。在训练某种编程语言对应的大模型时,往往需要先获取该编程语言对应的代码示例,才能完成对大模型的训练。
但是,目前某些编程语言存在训练数据不足的问题,导致模型训练的效果较差。
发明内容
本申请提供一种代码构建方法、模型微调方法、设备及存储介质,用以提升构建代码的效率和准确性,进而提升模型训练的整体效果。
第一方面,本申请实施例提供一种代码构建方法,包括:
获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本;
根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现;
根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。
第二方面,本申请实施例提供一种模型微调方法,用于对目标模型进行至少一个轮次的微调,其中,任意一轮微调的过程包括:
获取需求信息和对应的目标代码文本,其中,所述目标代码文本是基于第一方面所述的方法得到的;
根据所述需求信息和对应的目标代码文本,对目标模型进行训练。
第三方面,本申请实施例提供一种代码生成方法,包括:
获取待处理的需求信息;
将所述需求信息输入到目标模型,得到所述需求信息对应的代码文本;
输出所述代码文本;
其中,所述目标模型为通过第二方面所述的方法训练得到的。
第四方面,本申请实施例提供一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述电子设备执行上述任一方面所述的方法。
第五方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上述任一方面所述的方法。
第六方面,本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上述任一方面所述的方法。
本申请实施例提供的代码构建方法、模型微调方法、设备及存储介质,可以获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本,根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现,并根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。本申请实施例能够利用生成模型自动生成候选代码文本,提高构建代码文本的效率,并且结合原始编程语言对目标编程语言进行校验,提高得到的代码文本的准确性,从而有效扩充目标编程语言对应的代码文本,进而可以基于构建的代码文本对生成模型或其他模型进行微调,提高模型针对目标编程语言的处理能力,提升模型的训练效果。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的一种应用场景示意图;
图2为本申请实施例提供的一种微调训练的示意图;
图3为本申请实施例提供的一种代码构建方法的流程示意图;
图4为本申请实施例提供的一种生成候选代码文本的示意图;
图5为本申请实施例提供的一种校验方法的示意图;
图6为本申请实施例提供的另一种校验方法的示意图;
图7为本申请实施例提供的一种模型微调方法的流程示意图;
图8为本申请实施例提供的一种按照文本长度进行训练的示意图;
图9为本申请实施例提供的一种代码生成方法的流程示意图;
图10为本申请实施例提供的一种电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户属性信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
本申请实施例可以通过大模型,例如,大语言模型来实现。其中,大语言模型是指具有大规模语言模型参数的深度学习语言模型,通常包含上亿、上百亿、上千亿、上万亿甚至十万亿以上的语言模型参数。大语言模型又可以称为基石语言模型/基础语言模型(Foundation Model),通过大规模无标注的语料进行大语言模型的预训练,产出亿级以上参数的预训练语言模型,这种语言模型能适应广泛的下游任务,语言模型具有较好的泛化能力,例如大规模语言模型(Large Language Model,LLM)、多模态预训练语言模型(multi-modal pre-training model)等。
大语言模型在实际应用时,仅需少量样本对预训练语言模型进行微调即可应用于不同的任务中,大语言模型可以广泛应用于自然语言处理(Natural LanguageProcessing,简称NLP)、计算机视觉等领域,具体可以应用于如视觉问答(Visual QuestionAnswering,简称VQA)、图像描述(Image Caption,简称IC)、图像生成等计算机视觉领域任务,以及基于文本的情感分类、文本摘要生成、机器翻译等自然语言处理领域任务,大语言模型主要的应用场景包括数字助理、智能机器人、搜索、在线教育、办公软件、电子商务、智能设计等。
首先对本申请所涉及的名词进行解释:
编程语言:是用来定义计算机程序的形式语言,它是一种被标准化的交流技巧,能够用于实现人与机器之间的交流和沟通。
zero/few-shot:零样本/少样本学习,通常可以理解为利用A数据集去训练模型,训练后的模型可以对B数据集进行处理(如进行分类),但是A数据集对应的标签(如类别)和B数据集完全不同,或者仅有较少比例相同。在本申请实施例中,具体是指即使模型在训练过程中没有遇到过某些需求信息,但是依然可以产生对应的代码文本。
下面先对本申请的应用场景进行说明。
在编程领域,大模型可以用于实现代码生成、代码修改等功能,例如,将需求信息输入到大模型,利用大模型的特性,结合程序代码的语法规则和约束条件,可以自动生成符合需求的代码片段或完整的代码。
为了使大模型具备相应的代码能力,可以基于训练数据对大模型进行训练。但是,目前编程领域涉及多种编程语言,在现有编程代码的训练数据集中,各种编程语言存在训练数据不均衡问题,常用编程语言的训练数据较多,而不常用编程语言的训练数据较少甚至没有,导致大模型针对不常用编程语言的处理效果较差。而人工开发训练数据又存在费时费力、效率低下的问题。
为了解决这一问题,本申请利用生成模型启发式地生成零资源/低资源的编程语言对应的代码,实现对零资源/低资源的编程语言的代码增强,并以此来迭代训练大模型,增强大模型的代码生成能力。
具体的,针对想要增强的低资源编程语言,可以利用生成模型生成该编程语言对应的多个候选代码,用训练数据集中已存在的、另一种编程语言的代码样本,对生成的候选代码进行校验,若校验通过,则认为候选代码是正确的,可以添加到训练数据集中,并用于对大模型进行训练,以增强大模型针对低资源编程语言的处理能力。
可选的,用于构建训练数据的生成模型和用于根据训练数据进行迭代训练的大模型,可以是同一模型,也可以是不同模型,下面以两者为同一模型为例进行说明,即,利用具有一定生成能力的大模型得到训练数据,并利用训练数据对大模型进行进一步地训练。
图1为本申请实施例提供的一种应用场景示意图。如图1所示,假设Python为低资源编程语言,C++为具有丰富训练数据的编程语言,可以利用C++的训练数据来辅助实现Python的训练数据的生成,并利用生成的Python训练数据对大模型进行训练。其中,训练数据可以包括需求信息和对应的代码。
在生成过程(generating)中,先从C++训练数据集中获取需求信息和对应的C++代码,例如需求信息可以为:“给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。”,利用大模型生成n个Python实现的候选代码。
使用C++代码对生成的n个候选代码分别进行校验,其中,Python解释器和C++编译器能够对Python代码和C++代码进行处理,从而辅助实现校验过程。校验通过则可以将候选代码添加到Python训练数据集中。例如,图1中ID为2的候选代码校验通过,同一批中的其他候选代码校验不通过,则可以将ID为2的候选代码添加到Python训练数据集中。
通过这种方式产生一定量的Python训练数据后,进入训练过程(training)。在训练过程中,可以利用Python训练数据对大模型进行微调,从而可以获得具有较高质量的Python代码生成能力的大模型。
图2为本申请实施例提供的一种微调训练的示意图。如图2所示,可以先利用大模型的初始能力生成一定量的目标代码文本(如Python代码),再利用生成的Python代码对大模型进行微调训练,进而利用微调训练后的大模型重新生成一定量的Python代码,并利用重新生成的Python代码继续对大模型进行微调训练,如此循环迭代,直至得到的大模型满足要求,从而基于大模型本身的能力自动生成训练数据并进行微调,实现零资源或者低资源下的训练。
本申请实施例针对现有编程代码的训练数据集中各编程语言的不均衡问题和部分编程语言的稀缺性问题,利用大模型的zero/few-shot生成能力和多样化文本生成能力,结合其他编程语言对目标编程语言进行校验,可以有效扩充目标编程语言的训练数据,进而可以基于目标编程语言的训练数据对大模型进行微调,提高大模型对目标编程语言的处理能力,提升模型的训练效果。本申请实施例在提高开发效率、减轻开发人员负担、降低代码错误率等方面具有较高的实际应用价值。
下面结合附图,对本申请的一些实施方式作详细说明。在各实施例之间不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
图3为本申请实施例提供的一种代码构建方法的流程示意图。本实施例中的方法可以在任意具有数据处理功能的设备上实施,例如,云上实施、本地部署、客户端实施、IOT(Internet of Things,物联网)设备实施等。如图3所示,所述方法可以包括:
步骤301、获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本。
其中,需求信息可以用于表示待处理的编程问题,所述需求信息的形式不作限制,可以是待处理的编程问题的文字描述,也可以为其它模态的信息,例如,图片、音频、视频中任意一种模态的信息,也可以为多种模态信息的组合,如图片和文字的组合。
所述原始代码文本是与所述需求信息相对应的代码文本,所述原始编程语言是所述原始代码文本所采用的编程语言,例如C++。
可选的,所述需求信息和原始代码文本可以是从已有的代码库中获取的,其中,已有的代码库可以用作训练数据集,在本申请实施例中,训练数据可以包括需求信息和对应的代码文本,用于对生成模型或其他模型进行训练,使得模型可以根据需求信息得到对应的代码文本。或者,所述需求信息和原始代码文本可以由用户输入,或者从其他设备获取。所述原始代码文本可以作为正确的代码文本,对后续生成的候选代码文本进行校验。
步骤302、根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现。
其中,所述生成模型可以为任意具有生成代码的能力的模型,例如,可以为大模型,或者,可以预先训练一个小模型作为所述生成模型,其中,小模型是参数量少于大模型的任意模型。
将所述需求信息输入到生成模型,可以得到生成模型对应的候选代码文本。候选代码文本是基于目标编程语言实现的,目标编程语言是待加强的编程语言。
示例性地,若Python的训练数据较少,而C++的训练数据较为丰富,则可以将C++作为原始编程语言、Python作为目标编程语言,利用C++的丰富资源提升Python的训练资源。当然,原始编程语言和目标编程语言的选择也不仅限于此,即使某编程语言对应的训练数据较少,依然可以作为原始编程语言,对其它编程语言进行训练数据的增强。
可选的,根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,可以包括:将所述需求信息和提示信息输入到生成模型,得到对应的至少一个候选代码文本;其中,所述提示信息用于提示所述生成模型基于所述目标编程语言实现候选代码文本。
示例性地,所述需求信息为:“给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。”,所述提示信息可以包括:“请用Python完成下述题目:”。输入到生成模型的信息可以包括:“请用Python完成下述题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。”
可选的,所述生成模型为经过预训练的模型,预训练使用的训练数据包括可以包括一种或多种编程语言对应的训练数据。
在一种可选的实现方式中,预训练使用的训练数据可以包括:原始编程语言对应的训练数据和目标编程语言对应的训练数据,在本步骤中,直接提示生成模型基于所述目标编程语言实现候选代码文本即可。
在另一种可选的实现方式中,预训练使用的训练数据不包括目标编程语言对应的训练数据;所述提示信息除了用于提示所述生成模型基于所述目标编程语言实现候选代码文本,还可以包括:所述目标编程语言对应的语法规则。
通过上述方案,可以在预训练时使用或者不使用目标编程语言,若使用了目标编程语言,则直接提示生成模型生成目标编程语言对应的候选代码文本,提高处理效率,若预训练时没有使用目标编程语言,可以在提示信息中增加目标编程语言的语法规则,从而提升生成模型在没有见过的编程语言上的生成能力。
在其它可选的实现方式中,即使预训练时使用了目标编程语言,在通过生成模型生成候选代码文本时,依然可以在提示信息中增加目标编程语言的语法规则,以保障生成质量。此外,也可以使用除目标编程语言和原始编程语言以外的其它编程语言对生成模型进行预训练,本申请实施例中不作限制。
可选的,所述目标编程语言对应的语法规则可以为:生成目标编程语言对应的代码时需要符合的规则。其中,不同的编程语言可以有不同的语法规则。
示例性地,语法规则可以包括:语句必须以某种符号结尾、变量的名称必须符合某些要求等。
或者,为了提升候选代码文本的生成效果,语法规则可以用于指示:某个或某些特定的功能在目标编程语言中如何实现。例如,print(打印输出)功能在目标编程语言中是如何实现的。
可选的,在将所述需求信息和提示信息输入到生成模型,得到对应的至少一个候选代码文本之前,所述方法还可以包括:
根据所述需求信息对应的至少一个功能和/或所述原始代码文本包含的至少一个原始语句,确定所述语法规则;
其中,所述语法规则用于指示:所述目标编程语言中,与所述至少一个功能对应的语句,和/或,与所述至少一个原始语句对应的语句。
在一示例中,可以根据需求信息对应的至少一个功能,确定要提示给生成模型的语法规则。其中,所述至少一个功能可以通过关键词匹配的方式直接从需求信息中提取,也可以将需求信息输入到生成模型中,确定所述需求信息对应的至少一个功能。在确定对应的至少一个功能后,可以根据目标编程语言的语法库,确定相关功能的实现方式,作为对应的语法规则。
另一示例中,可以根据所述原始代码文本包含的至少一个原始语句,确定所述语法规则,以原始编程语言为C++,目标编程语言为Python为例,假设根据C++的语法规则,确定原始代码文本中包含的某原始语句用于实现print功能,则对应的候选代码文本也应该要实现print功能,因此提示给生成模型的语法规则可以包括print功能在Python中的实现方式。
又一示例中,可以根据需求信息和原始代码文本共同确定候选代码文本中可能用到的功能,并将对应的语法规则提示给生成模型。当根据需求信息和原始代码文本分别确定的功能存在重复时,可以先进行去重操作,再提示去重后的功能对应的语法规则,从而实现更加全面和准确地提示。
由于目标编程语言可能具有较多的功能,对应的语法规则也较为丰富,若将所有功能对应的语法规则都作为提示信息输入到生成模型,会导致输入过大,且生成效果并不好,通过对需求信息和原始代码文本进行分析,并将相关功能的语法规则提示给生成模型,提升提示的准确性。
此外,提示信息也可以包括有助于生成模型生成正确代码的其它信息,例如约束条件:需要使用某些算法、策略等实现候选代码文本。
在本申请实施例中,提示信息可以通过多种方式获取。
在一种可选的实现方式中,可以预先设置有模板,根据模板可以确定提示信息,例如,模板中可以包含待填充的功能、语法规则等,根据需求信息和原始代码文本,可以对模板进行填充,得到提示信息。
在又一种可选的实现方式中,可以通过生成模型来得到提示信息。在提示信息不包含语法规则时,可以直接将提示指令输入到生成模型,提示指令用于指示生成模型生成一个或多个提示信息。
在提示信息包含语法规则时,根据所述需求信息对应的至少一个功能和/或所述原始代码文本包含的至少一个原始语句,确定所述语法规则,可以包括:
将所述需求信息、所述原始代码文本中的至少一项以及提示指令输入到生成模型,得到包含语法规则的提示信息;
其中,所述提示指令用于指示生成模型根据所述需求信息和/或原始代码文本确定对应的语法规则,并根据语法规则得到提示信息。
示例性地,所述提示指令可以包括:“请根据需求信息生成提示信息,提示信息用于提示模型根据需求信息生成Python代码,提示信息需要包含需求信息中相关功能对应的语法规则”。
图4为本申请实施例提供的一种生成候选代码文本的示意图。如图4所示,可以先将需求信息、原始代码文本(C++代码)中的至少一项,以及提示指令输入到生成模型中,得到提示信息,再将提示信息和需求信息输入到生成模型中,得到候选代码文本(Python代码)。
可选的,在生成Python代码时,也可以将需求信息、C++代码、提示信息一同输入到生成模型,提示信息可以用于提示生成模型根据需求信息得到Python代码,并且,给出对应的C++代码作为参考,从而使得生成模型可以参照C++代码和Python的语法规则生成Python代码。
通过上述方式,可以基于生成模型来生成提示信息,再将提示信息和需求信息输入到生成模型,得到对应的候选代码文本,提高提示信息的准确性和多样性,进而提升候选代码文本的生成效果。
在其他可选的实现方式中,提示信息也可以是预先设置好的,例如,可以预先设置一个或多个提示信息,在需要生成候选代码文本时,可以将其中一个提示信息与需求信息拼接,输入到生成模型,得到一个候选代码文本,利用多个提示信息可以得到多个候选代码文本。此外,由于生成模型在生成过程中具有的采样随机性,将同样的信息多次输入到生成模型,也可以得到多个不同的候选代码文本。
步骤303、根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。
通过上述步骤,可以基于生成模型的生成能力,启发式地生成至少一个候选代码文本,在本步骤中,可以利用原始代码文本对所述至少一个候选代码文本进行校验。
可选的,目标代码文本可以由校验通过的候选代码文本确定,即,根据校验通过的候选代码文本,可以确定目标代码文本。例如,对于任一候选代码文本,若该候选代码文本校验通过,则可以作为目标代码文本,将目标代码文本和对应的需求信息添加到目标代码库中,或者,若候选代码文本校验通过,可以将候选代码文本展示给用户,由用户对候选代码文本进行修改或确认后再添加到目标代码库。
目标代码库中的目标代码文本可以用于对生成模型或其他模型进行训练,也可以有其他用途,例如,可以将目标代码库向用户开放,允许用户根据需求信息搜索相应的代码,为用户提供便利。
在一种可选的实现方式中,根据所述原始代码文本对所述至少一个候选代码文本进行校验,可以包括:
获取测试用例,根据所述原始代码文本和所述至少一个候选代码文本分别对所述测试用例进行处理,得到对应的测试结果;
对于任一候选代码文本,根据所述候选代码文本对应的测试结果和原始代码文本对应的测试结果,确定所述候选代码文本是否校验通过。
其中,根据所述原始代码文本和所述至少一个候选代码文本分别对所述测试用例进行处理,可以认为是利用测试用例对原始代码文本和候选代码文本进行测试的过程。通过测试用例对代码进行测试,可以确定代码运行是否正常。
示例性地,所述需求信息为:“给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。”,则对应的测试用例可以包含字符串s,例如s=“abcc”,利用原始代码文本对测试用例进行处理,可以得到对应的测试结果,由于字符串“abcc”中不含有重复字符的最长子串的长度为3,所以原始代码文本对应的测试结果为3。
图5为本申请实施例提供的一种校验方法的示意图。如图5所示,对于至少一个候选代码文本中的任意一个候选代码文本,利用所述候选代码文本对所述测试用例进行处理,得到的测试结果与原始代码文本对应的测试结果进行比较,若相同,则认为所述候选代码文本对应的测试结果是正确的,反之则认为是错误的。
具体的,可以先利用编译器将原始代码文本或者候选代码文本转换为机器语言,再运行得到的机器语言对测试用例进行处理,得到最终的测试结果。
当测试用例的数量为一个时,对于任一候选代码文本,若对应的测试结果为正确的,则所述候选代码文本校验通过,反之则校验不通过。
当测试用例的数量为多个时,可以根据结果正确的测试用例的数量,确定所述候选代码文本是否校验通过。
可选的,根据所述候选代码文本对应的测试结果和原始代码文本对应的测试结果,确定所述候选代码文本是否校验通过,包括:
确定所述候选代码文本对应的通过率,其中,所述通过率通过多个测试用例中匹配成功的测试用例的数量与所述多个测试用例的数量确定;
若所述通过率满足要求,则确定所述候选代码文本校验通过;
其中,对于任一测试用例,若所述原始代码文本对该测试用例进行处理后得到的测试结果与所述候选代码文本对该测试用例进行处理后得到的测试结果相同,则所述测试用例为匹配成功的测试用例,即结果正确的测试用例。
对于任一测试用例,若原始代码文本对该测试用例进行处理后得到的测试结果与所述候选代码文本对该测试用例进行处理后得到的测试结果不相同,则所述测试用例被记为匹配不成功的测试用例,即结果不正确的测试用例。
假设有m个测试用例,针对任一候选代码文本,利用所述候选代码文本对m个测试用例中第i个测试用例进行处理,得到的测试结果与原始代码文本对第i个测试用例进行处理后得到的测试结果进行比较,若一致,则将第i个测试用例记为匹配成功的测试用例。对于其他测试用例也可以采用类似的方式进行处理。若m个测试用例中,匹配成功的测试用例的数量为k,则所述候选代码文本对应的通过率为k/m。
可选的,可以针对有至少一个成功的测试用例的候选代码文本,进行通过率的计算;对于没有任何成功的测试用例的候选代码文本,可以省略通过率的计算。
在得到通过率后,可以根据通过率确定所述候选代码文本是否校验通过。可选的,若所述通过率满足要求,则确定所述候选代码文本校验通过,包括:
若所述候选代码文本对应的通过率大于通过率阈值,则确定所述候选代码文本校验通过;
其中,校验通过后得到的目标代码文本用于对生成模型进行多轮迭代微调,在多轮迭代过程中,轮次与通过率阈值为正相关关系。
可选的,可以先利用本实施例中的代码构建方法,基于生成模型得到目标代码文本,进而可以利用得到的目标代码文本对生成模型进行微调,再利用微调后的生成模型继续得到目标代码文本,从而通过多轮迭代实现对生成模型的微调训练。
其中,在多轮迭代过程中,通过率阈值可以逐渐增加,即,轮次与通过率阈值为正相关的关系,轮次越大,通过率阈值越大,轮次越小,通过率阈值越小。
示例性地,当轮次为1时,通过率阈值可以为40%,也就是说,在生成第1轮微调对应的目标代码文本时,通过率阈值为40%。第2轮、第3轮对应的通过率阈值可以分别为50%、60%,以此类推,随着微调轮次的增加,通过率阈值也逐渐增加。
在实际应用中,预训练后的生成模型具有一定的代码生成能力,但是,初始的代码生成能力较弱,生成的候选代码文本对应的通过率较低,可以从中选择通过率较高的一部分作为目标代码文本,虽然这些目标代码文本的质量可能还不够好,但是已经优于生成模型目前的生成能力(优于生成模型目前可生成的代码的平均质量),因此,可以利用这些目标代码文本对生成模型进行微调。微调之后,生成模型的生成能力有所提升,此时,可以提高通过率阈值,以提高后续得到的目标代码文本的质量,从而通过多轮迭代逐渐提升生成模型的性能。
除了通过率阈值以外,也可以通过其他方式实现对候选代码文本的筛选,例如,若所述通过率满足要求,则确定所述候选代码文本校验通过,可以包括:若候选代码文本对应的通过率在至少一个候选代码文本对应的通过率中位于前X位或者前1/Y,则确定所述候选代码文本校验通过。其中,X和Y的取值可以根据实际需要设置。
通过上述方式,可以利用代码可运行的特性,通过测试用例对候选代码文本进行校验,提高校验的准确性。此外,当针对一个需求信息有多个测试用例时,可以根据多个测试用例对应测试结果综合确定是否校验通过,进一步提升校验的准确性。
在另一种可选的实现方式中,根据所述原始代码文本对所述至少一个候选代码文本进行校验,可以包括:
对所述原始代码文本和所述至少一个候选代码文本分别进行编译,得到所述原始代码文本对应的第一机器语言文本,以及各候选代码文本对应的第二机器语言文本;
对于任一候选代码文本,若所述候选代码文本对应的第二机器语言文本与所述第一机器语言文本一致,则确定所述候选代码文本校验通过。
图6为本申请实施例提供的另一种校验方法的示意图。如图6所示,可以通过编译器,对原始代码文本(如C++代码)和候选代码文本(如Python代码)分别进行编译,编译后可以得到原始代码文本对应的第一机器语言和候选代码文本对应的第二机器语言文本,如果第一机器语言文本和第二机器语言文本一致,说明原始代码文本和候选代码文本的处理逻辑和具体流程是相同的,在原始代码文本正确的基础上,候选代码文本也应该是正确的,此时可以直接判定候选代码文本校验通过。
某些情况下,可能存在虽然编译后的机器语言不一致,但是候选代码文本依然是正确的情况。若第一机器语言不一致和第二机器语言文本不一致,可以认为校验不通过,这样虽然损失了一部分正确的候选代码文本,但是可以保证添加到目标代码库的代码文本都是正确的。
可选的,为了提升生成的效果,也可以先比较第一机器语言文本和第二机器语言文本,若一致,则校验通过,直接将候选代码文本添加到目标代码库中。若不一致,则可以进一步使用测试用例,采用前述方式对候选代码文本进行校验,从而兼顾效率和准确性。
通过上述方式,可以利用代码可编译的特性对候选代码文本进行校验,有效提高校验效果,并且可以减少测试用例的使用,提高校验的效率,进而提升通过生成模型得到目标代码文本的整体效果。
本实施例提供的代码构建方法,可以获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本,根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现,并根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本,从而可以利用生成模型自动生成候选代码文本,提高构建代码文本的效率,并且结合原始编程语言对目标编程语言进行校验,提高得到的代码文本的准确性,从而有效扩充目标编程语言对应的代码文本,进而可以基于构建的代码文本对生成模型或其他模型进行微调,提高模型针对目标编程语言的处理能力,提升模型的训练效果。
在实际应用中,很多编程语言会自带一些模块,方便用户使用。本申请实施例中,还允许用户选择希望增强的模块,并根据用户希望增强的模块有针对性地构建目标代码文本。可选的,步骤301中的获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本,可以包括:
通过交互界面获取用户输入的针对所述目标编程语言的待增强的模块;
确定所述原始编程语言中与所述待增强的模块相匹配的模块;
获取使用到所述相匹配的模块的原始代码文本以及对应的需求信息;
其中,所述提示信息还用于提示所述生成模型在生成候选代码文本时使用所述待增强的模块。
其中,模块可以是指编程语言中用于实现特定功能或者提供特定服务的代码文件。可选的,用户可以直接输入模块的名称,也可以输入包或者库的名称,包或者库可以包含一个或多个模块,从而对所述包或者库进行增强。
针对待增强的模块,可以查找原始编程语言中与所述待增强的模块具有相同或相似功能的模块,作为相匹配的模块,其中,模块间的匹配关系可以预先设置,也可以由用户输入。在原始编程语言对应的原始代码库中,选择使用到所述相匹配的模块的原始代码文本以及对应的需求信息,用于后续构建目标编程语言对应的目标代码文本,从而得到更多使用所述待增强的模块的代码。
为了提高生成的准确性,可以在提示信息中指示所述待增强的模块,使得生成模型根据所述待增强的模块生成候选代码文本。
示例性地,Python语言是相对比较成熟的语言,但是目标代码库中依然可能存在使用Python某个包的代码文本较少的情况,为了增强生成模型对该包的处理能力,可以重点选择对该包进行增强,当用户选择该包作为待增强的模块后,可以查找C++中与这个包相匹配的模块,并使用相关的原始代码文本(C++代码文本)和需求信息构建Python的目标代码文本,其中,在通过生成模型生成Python的候选代码文本时,可以提示生成模型使用Python中的上述包。
这样,目标代码文本中会用到上述待增强的包,从而更加精准地生成针对具体模块的目标代码文本,便于实现生成模型对相关模块的处理能力的增强,满足用户的实际开发需求,提高用户体验。
其中,在提示信息中指示待增强的模块,以及根据待增强的模块确定原始代码文本和需求信息,可以同时使用,也可以择一使用。
在本申请的一个或多个实施例中,可选的是,还可以执行下述至少一项交互方式:
在一种可选的交互方式中,通过交互界面展示需求信息和目标代码文本,以使用户根据需求信息对目标代码文本进行修改或确认,并将修改或确认后的目标代码文本添加到目标代码库中。
可选的,可以将修改或确认后的目标代码文本和需求信息一同添加到目标代码库中,以便根据需求信息搜索目标代码文本,或者,从目标代码库中提取需求信息和目标代码文本作为训练数据对生成模型或其他模型进行训练。
可选的,还可以通过交互界面展示所述至少一个候选代码文本,以使用户对所述至少一个候选代码文本进行修改或筛选,以对修改或筛选后的候选代码文本进行校验。
可选的,还可以通过交互界面展示校验通过的候选代码文本,以使用户对校验通过的候选代码文本进行修改或确认,以将修改或确认后的候选代码文本作为目标代码文本。
在另一种可选的交互方式中,可以通过交互界面展示需求信息,以使用户根据所述需求信息输入对应的测试用例。
其中,用户可以输入一个或多个测试用例,从而使用所述一个或多个测试用例对候选代码文本进行校验。
在又一种可选的交互方式中,可以通过交互界面展示多个候选编程语言,以使用户根据所述多个候选编程语言选择至少一个原始编程语言和/或至少一个目标编程语言。
可选的,用户选择的原始编程语言可以为一个或多个,当有多个原始编程语言时,可以根据多个原始编程语言对应的原始代码文本共同构建目标代码文本,例如,所述原始编程语言可以包括C++和JAVA,C++有1000对原始代码文本和需求信息,Java有500对原始代码文本和需求信息,因此共有1500对原始代码文本和需求信息,可以用于构建Python的目标代码文本。
可选的,用户选择的目标编程语言也可以为一个或多个,当有多个目标编程语言时,可以分别生成对应的候选代码文本,并基于原始代码文本对候选代码文本进行验证,得到目标代码文本。
在本申请实施例中,目标编程语言和原始编程语言可以是不同的编程语言,也可以是相同的编程语言,例如,可以根据已有的Python高质量代码去生成新的Python代码。
除了上述交互方式,在构建目标代码文本过程中,各个步骤产出的输出均可以展示给用户,便于用户进行修改和确认,各个步骤的输入,也可以由用户进行选择。
通过上述方案,可以允许用户对代码构建过程中的目标代码文本、候选代码文本进行修改或确认,提升最终产出的目标代码文本的准确性。还允许用户根据需求信息输入测试用例,从而提升测试用例的准确性以及与候选代码文本的适配性,有助于提升目标代码文本的准确性。还允许用户选择目标编程语言或原始编程语言,满足不同场景下的实际使用需求,进一步提升用户体验。
基于上述实施例提供的代码构建方法,本申请实施例还提供一种模型微调方法。图7为本申请实施例提供的一种模型微调方法的流程示意图。如图7所示,模型微调方法可以用于对目标模型进行至少一个轮次的微调,任意一轮微调的过程包括:
步骤701、获取需求信息和对应的目标代码文本。
其中,所述目标代码文本是基于前述任一实施例所述的方法得到的。
可选的,本步骤中获取到的需求信息或目标代码文本的数量可以有多个。可以在通过前述实施例的方法得到一定数量的目标代码文本后,执行本实施例中的方法。
步骤702、根据所述需求信息和对应的目标代码文本,对目标模型进行训练。
其中,所述目标模型可以为上述的生成模型,也可以为其他模型。从模型的形式来说,所述目标模型具体可以为大语言模型,也可以为其他形式的模型。
可选的,获取到的需求信息和目标代码文本可以作为训练数据,其中,将需求信息作为目标模型的输入,将目标代码文本作为训练的标签,利用SFT(Supervised fine-tuning,有监督微调)等技术,对目标模型进行训练,使得训练后的目标模型可以根据需求信息输出对应的代码文本。
基于当前的需求信息和目标代码文本对模型完成训练后,进入下一个轮次的迭代,重新根据前述的代码构建方法得到多个目标代码文本,并基于重新得到的目标代码文本对目标模型进行微调。如此多轮迭代循环后,可以获得较好质量的、能够处理目标编程语言的目标模型。
可选的,可以在每个轮次的训练完成后,确定目标模型输出的代码文本的正确率,若正确率满足预设条件,则可以结束微调;或者,可以在预设轮次后,结束微调。
本实施例提供的模型微调方法,可以利用由原始代码文本辅助生成的目标代码文本对目标模型进行微调训练,直至目标模型的性能符合预期,从而提高目标模型对目标编程语言的处理能力,提升模型的训练效果,进而可以基于目标模型实现代码生成等任务,减轻发开人员的负担,提高开发效率,降低代码错误率。
可选的,若所述目标模型包括所述生成模型,在循环迭代过程中,可以根据当前的轮次,确定通过率阈值;其中,所述通过率阈值用于对所述生成模型得到的至少一个候选代码文本进行校验。
具体的,针对任一候选代码文本,若所述候选代码文本对测试用例的通过率大于通过率阈值,则认为校验通过,可以作为目标代码文本。通过率阈值可以随着迭代次数的增加而增加,从而通过多轮迭代逐渐提升目标模型的性能。
可选的,在获取到的目标代码文本有多个时,一个轮次的微调可以包括多个批次的训练过程,在多个批次的训练过程中,可以采用课程学习等技术提升训练性能。
可选的,根据所述需求信息和对应的目标代码文本,对目标模型进行训练,可以包括:
确定各个目标代码文本对应的文本长度;
在进行任意一个批次的训练时,根据当前批次确定对应的文本长度,并从多个目标代码文本中选择满足所述文本长度的目标代码文本进行当前批次的训练,其中,批次与目标代码文本的文本长度之间为正相关关系。
具体的,可以将多个目标代码文本按照文本长度来进行区分,文本长度可以通过目标代码的行数或者字数来表征。按照目标代码文本的文本长度,先采用较短的目标文本代码对目标模型进行训练,再采用较长的目标文本代码对目标模型进行训练。
图8为本申请实施例提供的一种按照文本长度进行训练的示意图。如图8所示,黑色长条可以用于表示目标代码文本,黑色长条的长度用于表示对应的文本长度,一个轮次可以包括多个批次,批次与目标代码文本的文本长度之间可以为正相关关系,即,批次越大,文本长度越大。从而通过由简单到困难的方式训练目标模型,提升训练的效果。
可选的,在本申请实施例中,可以允许用户通过交互界面对目标模型的训练策略进行调整,包括但不限于:模型输入、模型输出、模型结构、模型训练过程等。
示例性地,在模型输入方面,用户可以调整输入的格式、输入的模态,对目标代码库中的需求信息进行新增、修改、筛选等。在模型输出方面,用户可以调整输出的格式、模态,还可以对标签进行新增、修改、筛选等。在模型结构方面,用户可以对模型的具体结构、参数量等进行调整,新增、减少或者修改模型中的一个或多个模块。在模型训练过程方面,用户可以规划模型的训练阶段、选择每个阶段使用的训练数据、损失函数、训练的停止条件等。
可选的,还可以在交互界面上展示用于辅助用户做出选择的相关信息,例如,可供选择的各项信息,或者可供选择的各项信息的详细内容。此外,还可以向用户展示模型训练过程中的各种动态信息,例如,模型训练的中间结果,便于用户及时更新训练策略。
在本申请实施例中,通过向用户提供各种交互界面,允许用户对训练过程中使用到的相关功能进行配置,能够满足用户的各种实际需求,有利于提高具体场景下模型训练的整体效率和准确性,具有较强的灵活性和适用性。
基于上述实施例提供的模型微调方法,本申请实施例还提供一种代码生成方法。图9为本申请实施例提供的一种代码生成方法的流程示意图。如图9所示,所述代码生成方法包括:
步骤901、获取待处理的需求信息。
步骤902、将所述需求信息输入到目标模型,得到所述需求信息对应的代码文本。
步骤903、输出所述代码文本。
其中,所述目标模型为通过前述任一实施例所述的方法训练得到的。
本实施例提供的代码生成方法,可以利用由原始代码文本辅助生成的目标代码文本训练得到的目标模型进行代码生成,有效提高代码生成的准确性,减轻发开人员的负担,提高开发效率,降低代码错误率。
可选的,将所述需求信息输入到目标模型,得到所述需求信息对应的代码文本,可以包括:将目标用户编写的历史代码信息、语言结构信息和所述需求信息输入到所述目标模型,生成对应的多个代码文本;其中,所述目标用户为输入所述待处理的需求信息的目标用户。
具体的,当获取到目标用户输入的需求信息后,可以将所述需求信息直接输入到模型进行代码生成,也可以先获取目标用户编写的历史代码信息和语言结构信息,其中,历史代码信息可以为目标用户历史编写的代码,语言结构信息为目标用户历史编写的代码中的语言结构,或者目标用户偏好使用的语言结构,并将历史代码信息和语言结构信息与需求信息一同输入到模型,提示模型根据目标用户的历史代码信息和语言结构信息了解目标用户的偏好和风格,并根据目标用户的偏好和风格生成与需求信息对应的多个代码文本,所述多个代码文本形成代码候选列表。
在得到代码候选列表后,可以将代码候选列表直接展示给目标用户,或者,也可以给出代码侯选列表的检索框,方便目标用户查找选择。
相应的,输出所述代码文本,包括:通过交互界面展示检索框,获取目标用户通过所述检索框输入的检索信息;根据所述检索信息,在生成的多个代码文本中检索相匹配的代码文本并输出。
具体的,目标用户输入的检索信息可以为代码中的字段、语句等,根据目标用户输入的检索信息,可以查找与检索信息相匹配的代码文本,例如,包含所述检索信息的代码文本,或者,与所述检索信息的相似度较高的代码文本。将检索到的代码文本展示给目标用户,方便目标用户根据检索信息查找相关的代码文本。
可选的,还可以基于目标用户的选择,实时调整后续的代码生成能力。具体的,可以获取目标用户从相匹配的代码文本中选择的代码文本,根据目标用户选择的代码文本,对所述目标模型进行训练。
当目标用户从多个代码文本中选择了某个或某些代码文本时,说明目标用户选择的代码文本是比较符合用户期望的,可以将需求信息和目标用户选择的代码文本构成训练样本,对所述目标模型进行进一步的训练。
通过上述方案,在进行代码生成时,可以基于目标用户的历史代码信息和语言结构信息,生成对应的多个代码文本,并允许目标用户通过检索框进行检索和选择,方便目标用户利用模型的生成能力快速、便捷地得到更加符合用户需求代码文本,并且,目标用户选择的代码文本还可以用于对目标模型进行进一步的训练,提高目标模型后续的代码生成能力。
除了代码生成的任务,本申请实施例得到的目标代码文本还可以用于代码修改、代码填充等训练任务,例如,在得到目标代码文本后,可以对目标代码文本进行修改或者掩码,将修改或者掩码后的代码文本作为目标模型的输入,将目标代码文本作为训练的标签,对目标模型进行训练,使得目标模型可以用于执行对代码文本进行修改或填充的任务。
本申请实施例还提供另一种代码构建方法,包括:获取需求信息;根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现;对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。
可选的,可以预先获取测试用例和测试用例对应的正确测试结果,在通过生成模型生成至少一个候选代码文本后,针对任一候选代码文本,可以通过所述候选代码文本对所述测试用例进行处理,得到测试结果,并将测试结果与正确测试结果进行比较,若一致,则认为所述候选代码文本对所述测试用例的测试结果是正确的,反之则不正确。
根据测试用例对应的测试结果是否正确,可以确定所述候选代码文本是否校验通过。
当所述测试用例有多个时,可以根据通过率确定所述候选代码文本是否校验通过。具体的原理与前述实施例类似,只是候选代码文本的测试结果的比较对象由原始代码文本的测试结果替换为上述的正确测试结果。本实施例中其它步骤的实现原理也可以参照上述实施例,此处不再赘述。
这样,可以在不使用原始代码文本的情况下,对生成的候选代码文本进行校验,以得到符合要求的目标代码文本,提升目标模型在零资源或低资源情况下的表现能力。
对应于上述方法,一方面,本申请实施例还提供一种代码构建装置,包括:
获取模块,用于获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本;
生成模块,用于根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现;
校验模块,用于根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。
另一方面,本申请实施例还提供一种模型微调装置,用于对目标模型进行至少一个轮次的微调,任意一轮微调的过程包括:
获取模块,用于获取需求信息和对应的目标代码文本,其中,所述目标代码文本是基于前述任一实施例所述的方法得到的;
训练模块,用于根据所述需求信息和对应的目标代码文本,对目标模型进行训练。
又一方面,本申请实施例还提供一种代码生成装置,包括:
获取模块,用于获取待处理的需求信息;
输入模块,用于将所述需求信息输入到目标模型,得到所述需求信息对应的代码文本;
输出模块,用于输出所述代码文本;
其中,所述目标模型为通过前述任一实施例所述的方法训练得到的。
本申请实施例提供的各个装置的具体实现原理和效果可以参见前述方法实施例,此处不再赘述。
图10为本申请实施例提供的一种电子设备的结构示意图。如图10所示,本实施例的电子设备可以包括:
至少一个处理器1001;以及与所述至少一个处理器通信连接的存储器1002;其中,所述存储器1002存储有可被所述至少一个处理器1001执行的指令,所述指令被所述至少一个处理器1001执行,以使所述电子设备执行如上述任一实施例所述的方法。可选地,存储器1002既可以是独立的,也可以跟处理器1001集成在一起。
本实施例提供的电子设备的实现原理和技术效果可以参见前述各实施例,此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现前述任一实施例所述的方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现前述任一实施例所述的方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是处理单元(Central Processing Unit,简称CPU),还可以是其它通用处理器、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (19)
1.一种代码构建方法,其特征在于,包括:
获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本;
根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,所述至少一个候选代码文本基于目标编程语言实现;
根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本。
2.根据权利要求1所述的方法,其特征在于,所述生成模型为经过预训练的模型,预训练使用的训练数据包括原始编程语言对应的训练数据和目标编程语言对应的训练数据;
根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,包括:
将所述需求信息和提示信息输入到生成模型,得到对应的至少一个候选代码文本;
其中,所述提示信息用于提示所述生成模型基于所述目标编程语言实现候选代码文本。
3.根据权利要求1所述的方法,其特征在于,所述生成模型为经过预训练的模型,预训练使用的训练数据不包括目标编程语言对应的训练数据;
根据所述需求信息,通过生成模型得到对应的至少一个候选代码文本,包括:
将所述需求信息和提示信息输入到生成模型,得到对应的至少一个候选代码文本;
其中,所述提示信息用于提示所述生成模型基于所述目标编程语言实现候选代码文本,且所述提示信息还包括:所述目标编程语言对应的语法规则。
4.根据权利要求3所述的方法,其特征在于,在将所述需求信息和提示信息输入到生成模型,得到对应的至少一个候选代码文本之前,所述方法还包括:
根据所述需求信息对应的至少一个功能和/或所述原始代码文本包含的至少一个原始语句,确定所述语法规则;
其中,所述语法规则用于指示:所述目标编程语言中,与所述至少一个功能对应的语句,和/或,与所述至少一个原始语句对应的语句。
5.根据权利要求4所述的方法,其特征在于,根据所述需求信息对应的至少一个功能和/或所述原始代码文本包含的至少一个原始语句,确定所述语法规则,包括:
将所述需求信息、所述原始代码文本中的至少一项以及提示指令输入到生成模型,得到包含语法规则的提示信息;
其中,所述提示指令用于指示生成模型根据所述需求信息和/或原始代码文本得到对应的语法规则,并根据语法规则得到提示信息。
6.根据权利要求1-5任一项所述的方法,其特征在于,根据所述原始代码文本对所述至少一个候选代码文本进行校验,得到基于目标编程语言实现的、与所述需求信息对应的目标代码文本,包括:
获取测试用例,利用所述原始代码文本和所述至少一个候选代码文本分别对所述测试用例进行处理,得到对应的测试结果;
对于任一候选代码文本,根据所述候选代码文本对应的测试结果和原始代码文本对应的测试结果,确定所述候选代码文本是否校验通过;
根据校验通过的候选代码文本,确定目标代码文本。
7.根据权利要求6所述的方法,其特征在于,所述测试用例的数量为多个;根据所述候选代码文本对应的测试结果和原始代码文本对应的测试结果,确定所述候选代码文本是否校验通过,包括:
确定所述候选代码文本对应的通过率,其中,所述通过率通过多个测试用例中匹配成功的测试用例的数量与所述多个测试用例的数量确定;
若所述通过率满足要求,则确定所述候选代码文本校验通过;
其中,对于任一测试用例,若所述原始代码文本对该测试用例进行处理后得到的测试结果与所述候选代码文本对该测试用例进行处理后得到的测试结果相同,则所述测试用例为匹配成功的测试用例。
8.根据权利要求7所述的方法,其特征在于,若所述通过率满足要求,则确定所述候选代码文本校验通过,包括:
若所述候选代码文本对应的通过率大于通过率阈值,则确定所述候选代码文本校验通过;
其中,校验通过后得到的目标代码文本用于对生成模型进行多轮迭代微调,在多轮迭代过程中,轮次与通过率阈值为正相关关系。
9.根据权利要求1-5任一项所述的方法,其特征在于,根据所述原始代码文本对所述至少一个候选代码文本进行校验,包括:
对所述原始代码文本和所述至少一个候选代码文本分别进行编译,得到所述原始代码文本对应的第一机器语言文本,以及各候选代码文本对应的第二机器语言文本;
对于任一候选代码文本,若所述候选代码文本对应的第二机器语言文本与所述第一机器语言文本一致,则确定所述候选代码文本校验通过。
10.根据权利要求2-5任一项所述的方法,其特征在于,获取需求信息以及基于原始编程语言实现的、与所述需求信息对应的原始代码文本,包括:
通过交互界面获取用户输入的针对所述目标编程语言的待增强的模块;
确定所述原始编程语言中与所述待增强的模块相匹配的模块;
获取使用到所述相匹配的模块的原始代码文本以及对应的需求信息;
其中,所述提示信息还用于提示所述生成模型在生成候选代码文本时使用所述待增强的模块。
11.根据权利要求6所述的方法,其特征在于,还包括下述至少一项:
通过交互界面展示需求信息和目标代码文本,以使用户根据需求信息对目标代码文本进行修改或确认,并将修改或确认后的目标代码文本添加到目标代码库中;
通过交互界面展示需求信息,以使用户根据所述需求信息输入对应的测试用例;
通过交互界面展示多个候选编程语言,以使用户根据所述多个候选编程语言选择至少一个原始编程语言和/或至少一个目标编程语言。
12.一种模型微调方法,其特征在于,用于对目标模型进行至少一个轮次的微调,其中,任意一轮微调的过程包括:
获取需求信息和对应的目标代码文本,其中,所述目标代码文本是基于权利要求1-11任一项所述的方法得到的;
根据所述需求信息和对应的目标代码文本,对目标模型进行训练。
13.根据权利要求12所述的方法,其特征在于,所述目标模型包括所述生成模型;所述方法还包括:
根据当前的轮次,确定通过率阈值;
其中,所述通过率阈值用于对所述生成模型得到的至少一个候选代码文本进行校验。
14.根据权利要求12或13所述的方法,其特征在于,获取到的目标代码文本有多个,一个轮次的微调包括多个批次的训练过程;
根据所述需求信息和对应的目标代码文本,对目标模型进行训练,包括:
确定各个目标代码文本对应的文本长度;
在进行任意一个批次的训练时,根据当前批次确定对应的文本长度,并从多个目标代码文本中选择满足所述文本长度的目标代码文本进行当前批次的训练,其中,批次与目标代码文本的文本长度之间为正相关关系。
15.一种代码生成方法,其特征在于,包括:
获取待处理的需求信息;
将所述需求信息输入到目标模型,得到所述需求信息对应的代码文本;
输出所述代码文本;
其中,所述目标模型为通过权利要求12-14任一项所述的方法训练得到的。
16.根据权利要求15所述的方法,其特征在于,将所述需求信息输入到目标模型,得到所述需求信息对应的代码文本,包括:
将目标用户编写的历史代码信息、语言结构信息和所述需求信息输入到所述目标模型,生成对应的多个代码文本;其中,所述目标用户为输入所述待处理的需求信息的用户;
相应的,输出所述代码文本,包括:
通过交互界面展示检索框,获取目标用户通过所述检索框输入的检索信息;
根据所述检索信息,在生成的多个代码文本中检索相匹配的代码文本并输出;
所述方法还包括:获取用户从相匹配的代码文本中选择的代码文本;根据用户选择的代码文本,对所述目标模型进行训练。
17.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述电子设备执行权利要求1-16任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1-16任一项所述的方法。
19.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-16任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311427814.9A CN117369796A (zh) | 2023-10-30 | 2023-10-30 | 代码构建方法、模型微调方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311427814.9A CN117369796A (zh) | 2023-10-30 | 2023-10-30 | 代码构建方法、模型微调方法、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117369796A true CN117369796A (zh) | 2024-01-09 |
Family
ID=89407505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311427814.9A Pending CN117369796A (zh) | 2023-10-30 | 2023-10-30 | 代码构建方法、模型微调方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117369796A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118034659A (zh) * | 2024-04-10 | 2024-05-14 | 北京云庐科技有限公司 | 自动生成cae仿真程序的方法、系统和介质 |
-
2023
- 2023-10-30 CN CN202311427814.9A patent/CN117369796A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118034659A (zh) * | 2024-04-10 | 2024-05-14 | 北京云庐科技有限公司 | 自动生成cae仿真程序的方法、系统和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111859960B (zh) | 基于知识蒸馏的语义匹配方法、装置、计算机设备和介质 | |
US7685082B1 (en) | System and method for identifying, prioritizing and encapsulating errors in accounting data | |
CN115328756A (zh) | 一种测试用例生成方法、装置及设备 | |
KR20160122452A (ko) | 비주얼 콘텐츠기반 영상 인식을 위한 딥러닝 프레임워크 및 영상 인식 방법 | |
CN108345457A (zh) | 一种对程序源代码自动生成功能描述性注释的方法 | |
CN110968725B (zh) | 图像内容描述信息生成方法、电子设备及存储介质 | |
CN117194637A (zh) | 基于大语言模型的多层级可视化评估报告生成方法、装置 | |
CN117369796A (zh) | 代码构建方法、模型微调方法、设备及存储介质 | |
CN116881470A (zh) | 一种生成问答对的方法及装置 | |
CN116611449A (zh) | 异常日志解析方法、装置、设备及介质 | |
CN107967304A (zh) | 会话交互处理方法、装置及电子设备 | |
CN117633162A (zh) | 机器学习任务模板生成方法、训练方法、微调方法及设备 | |
CN111477212A (zh) | 内容识别、模型训练、数据处理方法、系统及设备 | |
CN117113080A (zh) | 数据处理和代码处理方法、装置、一体机和存储介质 | |
CN116932694A (zh) | 一种针对知识库的智能化检索方法、设备及存储介质 | |
JP7211011B2 (ja) | 学習方法、学習プログラム及び生成方法 | |
CN116861913A (zh) | 基于gpt大模型的立场检测方法及相关设备 | |
CN112463162B (zh) | 一种代码命名的推荐方法、系统、存储介质及设备 | |
CN114138929A (zh) | 问答方法及装置 | |
CN113204626A (zh) | 基于知识图谱的交互方法、装置、终端和存储介质 | |
CN114444470B (zh) | 专利文本中的领域命名实体识别方法、装置、介质及设备 | |
CN117708340B (zh) | 标签文本的确定方法、模型训练及调整方法、设备和介质 | |
CN114237573B (zh) | 一种编译器后端代码自动构建方法及系统 | |
CN113672215B (zh) | 深度学习分布式训练适配方法和装置 | |
KR102717117B1 (ko) | 사용자의 의도를 반영한 코드 생성 장치 및 방법 |
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 |