System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据库领域,具体而言,涉及一种基于模型的代码生成方法及装置、存储介质、电子设备。
技术介绍
1、相关技术中,大语言模型(large language model,缩写llm),也称大型语言模型,是一种基于机器学习和自然语言处理技术的模型,它通过对大量的文本数据进行训练,来学习服务人类语言理解和生成的能力。微软就在visual studio中为visual basic引入了自动完成或代码生成功能。随着人工智能的快速发展,以及大模型的普及和商业化,越来越多的领域尝试将大模型技术运用于程序开发过程,来达到辅助开发人员提升效率、优化代码质量,并实现智能编程。llm的能力来生成句子的下一个标记,llm估计下一个单元(文本、句子、标记、符号)的概率,系统按照所选策略获取一个标记。不仅将这种功能用于文本,而且还用于代码生成。
2、相关技术中,利用大语言模型生成代码,大多基于开源代码库的预训练,让大模型具备利用主流编程语言能力,但存在代码准确率不高、质量参差不齐、代码较为简短、逻辑简单等问题,同时依赖于code-review、开发者的叙述及调优,以及存在代码泄密和版权归属等问题,目前利用大模型编程更多出于起步阶段,为开发员的助手使用,无法真正用于基于应用场景的自动代码生成。
3、针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
技术实现思路
1、本专利技术实施例提供了一种基于模型的代码生成方法及装置、存储介质、电子设备。
2、根据本申请实
3、进一步,将所述自然语言转化为任务指令包括:调用双向变换器编码器bert模型识别所述自然语言中的实体对象;基于所述实体对象识别所述自然语言包含的若干个子任务,其中,每个子任务对应程序代码的一个功能模块;基于所述若干个子任务生成任务指令。
4、进一步,根据所述任务指令调用预训练的代码生成模型,采用所述代码生成模型和所述任务指令生成所述自然语言的程序代码包括:针对所述任务指令中的每个子任务指令,分别调用所述代码生成模型;通过所述代码生成模型生成与所述子任务指令对应的代码包、以及各个代码包之间的逻辑规则;基于所述逻辑规则组装所有子任务的代码包,融合得到所述自然语言的程序代码。
5、进一步,通过所述代码生成模型生成与所述子任务指令对应的代码包包括:以所述子任务指令的任务标识为代码包标签在代码库中查找匹配的目标代码包,其中,所述代码库包括多个标准代码包,每个标准代码包对应一个代码包标签,每个标准代码包映射程序代码的一个功能模块;将所述目标代码包输出为所述子任务指令对应的代码包。
6、进一步,在根据所述任务指令调用预训练的代码生成模型之前,所述方法包括:获取训练数据集,以及选择预训练的基础语言模型;采用所述训练数据集对所述基础语言模型进行模型微调fine-tuning,得到所述代码生成模型。
7、进一步,采用所述训练数据集对所述基础语言模型进行fine-tuning,得到所述代码生成模型包括:读取所述基础语言模型中已训练的模型参数w,并配置所述基础语言模型在fine-tuning中的微调参数,其中,所述微调参数包括第一矩阵a和第二矩阵b;采用以下公式配置所述基础语言模型的表达式:h=w*x+b*a*x,其中,d、k分别为所述基础语言模型的第一类参数和第二类参数,r为第一矩阵和所述第二矩阵的秩,x为输入数据,h为输出数据,w与b*a的数据维度相同;在冻结所述表达式中w的值,并初始化所述表达式的第一矩阵和第二矩阵之后,将所述训练数据集输入所述表达式,采用损失函数训练所述表达式的第一矩阵和第二矩阵;采用更新后的第一矩阵和第二矩阵配置所述基础语言模型,得到所述代码生成模型。
8、进一步,获取训练数据集包括:从内部服务器采集封装后的标准功能代码包,得到代码包集合,并配置每个标准功能代码包的标签信息;计算所述代码包集合中每两个标准功能代码包之间的海明距离和余弦距离;基于所述海明距离和所述余弦距离从所述代码包集合过滤相似度大于预设值的重复代码包,得到中间训练数据;清洗所述中间训练数据中每个标准功能代码包的注释信息,得到训练数据集。
9、根据本申请实施例的另一个方面,还提供了一种基于模型的代码生成装置,包括:获取模块,用于获取用户输入的自然语言,其中,所述自然语言用于描述待生成代码的业务场景和功能需求;转化模块,用于将所述自然语言转化为任务指令,其中,所述任务指令包括若干个子任务指令;生成模块,用于根据所述任务指令调用预训练的代码生成模型,采用所述代码生成模型和所述任务指令生成所述自然语言的程序代码。
10、进一步,所述转化模块包括:第一识别单元,用于调用双向变换器编码器bert模型识别所述自然语言中的实体对象;第二识别单元,用于基于所述实体对象识别所述自然语言包含的若干个子任务,其中,每个子任务对应程序代码的一个功能模块;生成单元,用于基于所述若干个子任务生成任务指令。
11、进一步,所述生成模块包括:调用单元,用于针对所述任务指令中的每个子任务指令,分别调用所述代码生成模型;生成单元,用于通过所述代码生成模型生成与所述子任务指令对应的代码包、以及各个代码包之间的逻辑规则;组装单元,用于基于所述逻辑规则组装所有子任务的代码包,融合得到所述自然语言的程序代码。
12、进一步,所述生成单元包括:查找子单元,用于以所述子任务指令的任务标识为代码包标签在代码库中查找匹配的目标代码包,其中,所述代码库包括多个标准代码包,每个标准代码包对应一个代码包标签,每个标准代码包映射程序代码的一个功能模块;输出子单元,用于将所述目标代码包输出为所述子任务指令对应的代码包。
13、进一步,所述装置包括:处理模块,用于在所述生成模块根据所述任务指令调用预训练的代码生成模型之前,获取训练数据集,以及选择预训练的基础语言模型;微调模块,用于采用所述训练数据集对所述基础语言模型进行模型微调fi ne-tuni ng,得到所述代码生成模型。
14、进一步,所述微调模块包括:读取单元,用于读取所述基础语言模型中已训练的模型参数w,并配置所述基础语言模型在fi ne-tuni ng中的微调参数,其中,所述微调参数包括第一矩阵a和第二矩阵b;配置单元,用于采用以下公式配置所述基础语言模型的表达式:h=w*x+b*a*x,其中,d、k分别为所述基础语言模型的第一类参数和第二类参数,r为第一矩阵和所述第二矩阵的秩,x为输入数据,h为输出数据,w与b*a的数据维度相同;训练单元,用于在冻结所述表达式中w的值、并初始化所述表达式的第一矩阵和第二矩阵之后,将所述训本文档来自技高网...
【技术保护点】
1.一种基于模型的代码生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,将所述自然语言转化为任务指令包括:
3.根据权利要求1所述的方法,其特征在于,根据所述任务指令调用预训练的代码生成模型,采用所述代码生成模型和所述任务指令生成所述自然语言的程序代码包括:
4.根据权利要求3所述的方法,其特征在于,通过所述代码生成模型生成与所述子任务指令对应的代码包包括:
5.根据权利要求1所述的方法,其特征在于,在根据所述任务指令调用预训练的代码生成模型之前,所述方法还包括:
6.根据权利要求5所述的方法,其特征在于,采用所述训练数据集对所述基础语言模型进行Fine-tuning,得到所述代码生成模型包括:
7.根据权利要求5所述的方法,其特征在于,获取训练数据集包括:
8.一种基于模型的代码生成装置,其特征在于,包括:
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至7中任一项所述的方法步骤。
10.一种电子设备
...【技术特征摘要】
1.一种基于模型的代码生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,将所述自然语言转化为任务指令包括:
3.根据权利要求1所述的方法,其特征在于,根据所述任务指令调用预训练的代码生成模型,采用所述代码生成模型和所述任务指令生成所述自然语言的程序代码包括:
4.根据权利要求3所述的方法,其特征在于,通过所述代码生成模型生成与所述子任务指令对应的代码包包括:
5.根据权利要求1所述的方法,其特征在于,在根据所述任务指令调用预训练的代码生成模型之前,所述方法还包括:
...
【专利技术属性】
技术研发人员:贾益旗,王新民,邱杰,
申请(专利权)人:北京大学长沙计算与数字经济研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。