当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于知识库和多步提示的预训练大模型代码生成方法技术

技术编号:38505156 阅读:15 留言:0更新日期:2023-08-19 16:52
本发明专利技术公开一种基于知识库和多步提示的预训练大模型代码生成方法。首先获得新的问题描述与其对应的测试用例集合,如果不存在算法生成模型,获取大量历史问题描述和测试用例集合,代入提示模板并输入预训练模型生成算法描述,由人类数据标记员对算法描述根据其与知识库的符合程度进行打分和排序,构造训练集合训练知识奖赏模型,作为后续训练过程中的奖赏。将问题描述输入算法生成模型,生成算法描述;将算法描述输入知识奖赏模型评估与知识库的符合程度和代码生成模型评估测试样例通过率,两者作为算法生成模型的优化目标,更新模型参数直至训练误差低于预设阈值。测试过程中生成算法描述与代码解决方案,重复该过程直至代码通过全部测试用例。通过全部测试用例。通过全部测试用例。

【技术实现步骤摘要】
一种基于知识库和多步提示的预训练大模型代码生成方法


[0001]本专利技术涉及一种基于知识库和多步提示的预训练大模型代码生成方法,属于软件自动化


技术介绍

[0002]随着软件开发的不断发展,自动生成程序代码的技术逐渐成为软件工程领域的研究热点。自动生成程序代码技术可以提高软件开发的效率,降低开发成本,减少开发周期,提高软件的质量和可维护性。目前,已有许多自动生成程序代码的技术被提出和应用,例如基于模板的代码生成、基于规则的代码生成、基于学习的代码生成等。但是,这些技术在实际应用中存在着一些局限性,例如模板和规则的编写需要耗费大量的人力和时间,深度学习方法需要海量训练数据的支持,且具有难以处理复杂的程序逻辑,可解释性较差等问题。因此,如何有效提高代码生成方法处理复杂程序逻辑的能力,提升生成代码的灵活性和可维护性,具有很高的研究价值。

技术实现思路

[0003]专利技术目的:针对现有技术中存在的问题与不足,本专利技术提供一种基于知识库和多步提示的预训练大模型代码生成方法,首先利用已有的领域知识构建知识库,由人类数据标记员对模型生成的算法描述根据和知识库的符合程度进行打分,并构造数据集训练知识奖赏模型。然后利用从人类反馈中强化学习技术框架,以知识奖赏模型对算法描述的评分和中间模型生成代码的测试通过率作为奖赏,训练算法生成模型。然后利用算法生成模型针对输入的问题描述生成算法描述,进而生成代码解决方案。该代码生成系统旨在提升面对复杂程序逻辑时借助领域知识的能力,并通过先生成自然语言形式的算法描述,降低直接生成具有语法约束的程序语言的难度,在提高软件开发效率和代码质量上具有十分重要的意义。
[0004]技术方案:一种基于知识库和多步提示的预训练大模型代码生成方法,通过以下步骤,针对给定问题描述和测试样例集合生成目标代码:
[0005]步骤(1)获取待生成目标代码的问题描述和测试用例集合;其中问题描述为用户需要编写的代码解决方案的功能的自然语言描述,即描述了需要解决的技术问题或任务。测试用例集合为用于验证生成的代码解决方案是否正确的输入与预期输出的组合。
[0006]步骤(2)判断是否存在训练完成的知识奖赏模型,如果不存在,转入步骤(3),利用从用户反馈中强化学习技术构建知识奖赏模型;如果存在,转入步骤(9);
[0007]步骤(3)获取大量已生成代码的历史问题描述和测试用例集合,构造训练集合
[0008]步骤(4)获取面向学习环境的领域知识,构造知识库
[0009]步骤(5)判断是否存在训练完成的算法生成模型G,如果不存在,初始化算法生成模型,转入步骤(6);否则,转入步骤(6);
[0010]步骤(6)将训练集合中的问题描述输入到当前算法生成模型G,模型对输入的数
据进行编码,迭代预测下一个单词直至生成预设的结束标志,得到算法描述;
[0011]步骤(7)对于训练集合中特定的问题描述,采样得到多个不同算法描述并要求数据标记员按算法描述与知识库的符合程度进行打分,构造训练集合
[0012]步骤(8)初始化知识奖赏模型R,并在训练集合上迭代训练至收敛;
[0013]步骤(9)初始化代码生成模型C;
[0014]步骤(10)判断是否存在训练完成的算法生成模型,如果不存在,初始化算法生成模型,转入步骤(11);否则转入步骤(14);
[0015]步骤(11)从训练集合中进行有放回采样输入算法生成模型G,生成算法描述的集合
[0016]步骤(12)将算法描述输入知识奖赏模型R,得到算法描述的评分;将算法描述输入代码生成模型C,输出代码,通过测试用例集合计算代码对应的测试用例通过率,评分和测试用例通过率相加作为算法描述的奖赏;
[0017]步骤(13)将算法描述的奖赏代入强化学习算法中训练算法生成模型G;
[0018]步骤(14)将待生成代码解决方案的问题描述输入算法生成模型G中,生成算法描述;
[0019]步骤(15)将算法描述输入代码生成模型C中,生成代码解决方案;
[0020]步骤(16)如果代码解决方案未通过测试用例,则返回步骤(14);否则代码生成过程结束。测试用例是一组输入和预期输出的组合,代码读入之后输出预期输出则通过测试用例。
[0021]一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如上所述的基于知识库和多步提示的预训练大模型代码生成方法。
[0022]一种计算机可读存储介质,该计算机可读存储介质存储有执行如上所述的基于知识库和多步提示的预训练大模型代码生成方法的计算机程序。
[0023]有益效果:与现有技术相比,本专利技术提供的基于知识库和多步提示的预训练大模型代码生成方法,能够有效对其知识库所提供的信息,降低生成逻辑错误的代码的概率同时,通过生成由自然语言形式的算法描述,降低了模型直接输出符合语法约束的程序语言的难度,有效提升输出代码的质量与可维护性。
附图说明
[0024]图1为本专利技术实施例的针对问题描述进行代码生成的流程图;
[0025]图2为本专利技术实施例的训练知识奖赏模型的流程图;
[0026]图3为本专利技术实施例的训练算法生成模型的流程图;
[0027]图4为本专利技术实施例的预测过程中目标代码生成的流程图。
具体实施方式
[0028]下面结合具体实施例,进一步阐明本专利技术,应理解这些实施例仅用于说明本专利技术而不用于限制本专利技术的范围,在阅读了本专利技术之后,本领域技术人员对本专利技术的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
[0029]基于知识库和多步提示的预训练大模型代码生成方法如图1所示。首先从应用环境中获取待生成目标代码的问题描述和测试用例集合,其中问题描述为用户需要编写的代码解决方案的功能的自然语言描述,即描述了需要解决的技术问题或任务。测试用例集合为用于验证生成的代码解决方案是否为正确的输入与预期输出的组合;若不存在训练完成的知识奖赏模型,则构建对算法描述进行评分的知识奖赏模型,即图2所示的子流程。获取面向环境的领域知识,构造知识库;获取大量历史问题描述和测试用例集合,构造训练集合。用大规模预训练语言模型权重初始化知识奖赏模型,并由算法生成模型生成大量针对历史问题描述的算法描述,由数据标记员根据算法描述与知识库符合程度进行打分,构造标签并交由知识奖赏模型训练;如果不存在训练完成的算法生成模型,则训练算法生成模型,即图3所示子流程。用大规模预训练语言模型权重初始化代码生成模型;采样训练集合中的问题描述,生成算法描述并由知识奖赏模型输出评分,将算法描述输入到代码生成模型输出代码并计算测试用例通过率;将评分与测试用例通过率作为奖赏,以强化学习算法训练算法生成模型。测过过程,即图4所示子流程。将问题描述输入算法生成模型中采样生成算法描述,由代码生成模型输出目标代码,直至目标代码通过所有测试用例。具体实施步骤如下:
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,针对给定问题描述生成目标代码,包括如下步骤:步骤(1)获取待生成目标代码的问题描述和测试用例集合;步骤(2)判断是否存在训练完成的知识奖赏模型,如果不存在,转入步骤(3),利用从用户反馈中强化学习技术构建知识奖赏模型;如果存在,转入步骤(9);步骤(3)获取大量已生成代码的历史问题描述和测试用例集合,构造训练集合步骤(4)获取面向学习环境的领域知识,构造知识库步骤(5)判断是否存在训练完成的算法生成模型G,如果不存在,初始化算法生成模型,转入步骤(6);否则,转入步骤(6);步骤(6)将训练集合中的问题描述输入到当前算法生成模型G,模型对输入的数据进行编码,迭代预测下一个单词直至生成预设的结束标志,得到算法描述;步骤(7)对于训练集合中特定的问题描述,采样得到多个不同算法描述并要求数据标记员按算法描述与知识库的符合程度进行打分,构造训练集合步骤(8)初始化知识奖赏模型R,并在训练集合上迭代训练至收敛;步骤(9)初始化代码生成模型C;步骤(10)判断是否存在训练完成的算法生成模型,如果不存在,初始化算法生成模型,转入步骤(11);否则转入步骤(14);步骤(11)从训练集合中有放回采样输入算法生成模型G,生成算法描述的集合步骤(12)将算法描述输入知识奖赏模型R,得到算法描述的评分;将算法描述输入代码生成模型C,输出代码,通过测试用例集合计算代码对应的测试用例通过率,评分和测试用例通过率相加作为算法描述的奖赏;步骤(13)将算法描述的奖赏代入强化学习算法中训练算法生成模型G;步骤(14)将待生成目标代码的问题描述输入算法生成模型G中,生成算法描述;步骤(15)将算法描述输入代码生成模型C中,生成代码解决方案;步骤(16)如果代码解决方案未通过测试用例,则返回步骤(14);否则代码生成过程结束。2.根据权利要求1所述的基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,设:问题描述所在空间为测试用例集合所在空间为则训练数据的输入空间为算法描述所在空间为目标代码所在空间为知识奖赏模型为其中为实数空间;算法生成模型为代码生成模型为给定代码和测试用例集合到结果的映射为R,G,C的模型参数分别为θ
R
,θ
G
,θ
C

【专利技术属性】
技术研发人员:黎铭李鑫烨周志华
申请(专利权)人:南京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1