CN116594601A - 一种基于知识库和多步提示的预训练大模型代码生成方法 - Google Patents
一种基于知识库和多步提示的预训练大模型代码生成方法 Download PDFInfo
- Publication number
- CN116594601A CN116594601A CN202310575020.0A CN202310575020A CN116594601A CN 116594601 A CN116594601 A CN 116594601A CN 202310575020 A CN202310575020 A CN 202310575020A CN 116594601 A CN116594601 A CN 116594601A
- Authority
- CN
- China
- Prior art keywords
- algorithm
- model
- training
- code
- description
- 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
- 238000012549 training Methods 0.000 title claims abstract description 67
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000012360 testing method Methods 0.000 claims abstract description 39
- 239000003550 marker Substances 0.000 claims abstract description 7
- 238000005457 optimization Methods 0.000 claims abstract description 4
- 230000002787 reinforcement Effects 0.000 claims description 9
- 238000005070 sampling Methods 0.000 claims description 9
- 230000006870 function Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 6
- 238000005516 engineering process Methods 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 2
- 238000011156 evaluation Methods 0.000 abstract 2
- 238000011161 development Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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/33—Intelligent editors
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
- G06N5/022—Knowledge engineering; Knowledge acquisition
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Machine Translation (AREA)
Abstract
本发明公开一种基于知识库和多步提示的预训练大模型代码生成方法。首先获得新的问题描述与其对应的测试用例集合,如果不存在算法生成模型,获取大量历史问题描述和测试用例集合,代入提示模板并输入预训练模型生成算法描述,由人类数据标记员对算法描述根据其与知识库的符合程度进行打分和排序,构造训练集合训练知识奖赏模型,作为后续训练过程中的奖赏。将问题描述输入算法生成模型,生成算法描述;将算法描述输入知识奖赏模型评估与知识库的符合程度和代码生成模型评估测试样例通过率,两者作为算法生成模型的优化目标,更新模型参数直至训练误差低于预设阈值。测试过程中生成算法描述与代码解决方案,重复该过程直至代码通过全部测试用例。
Description
技术领域
本发明涉及一种基于知识库和多步提示的预训练大模型代码生成方法,属于软件自动化技术领域。
背景技术
随着软件开发的不断发展,自动生成程序代码的技术逐渐成为软件工程领域的研究热点。自动生成程序代码技术可以提高软件开发的效率,降低开发成本,减少开发周期,提高软件的质量和可维护性。目前,已有许多自动生成程序代码的技术被提出和应用,例如基于模板的代码生成、基于规则的代码生成、基于学习的代码生成等。但是,这些技术在实际应用中存在着一些局限性,例如模板和规则的编写需要耗费大量的人力和时间,深度学习方法需要海量训练数据的支持,且具有难以处理复杂的程序逻辑,可解释性较差等问题。因此,如何有效提高代码生成方法处理复杂程序逻辑的能力,提升生成代码的灵活性和可维护性,具有很高的研究价值。
发明内容
发明目的:针对现有技术中存在的问题与不足,本发明提供一种基于知识库和多步提示的预训练大模型代码生成方法,首先利用已有的领域知识构建知识库,由人类数据标记员对模型生成的算法描述根据和知识库的符合程度进行打分,并构造数据集训练知识奖赏模型。然后利用从人类反馈中强化学习技术框架,以知识奖赏模型对算法描述的评分和中间模型生成代码的测试通过率作为奖赏,训练算法生成模型。然后利用算法生成模型针对输入的问题描述生成算法描述,进而生成代码解决方案。该代码生成系统旨在提升面对复杂程序逻辑时借助领域知识的能力,并通过先生成自然语言形式的算法描述,降低直接生成具有语法约束的程序语言的难度,在提高软件开发效率和代码质量上具有十分重要的意义。
技术方案:一种基于知识库和多步提示的预训练大模型代码生成方法,通过以下步骤,针对给定问题描述和测试样例集合生成目标代码:
步骤(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);否则代码生成过程结束。测试用例是一组输入和预期输出的组合,代码读入之后输出预期输出则通过测试用例。
一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如上所述的基于知识库和多步提示的预训练大模型代码生成方法。
一种计算机可读存储介质,该计算机可读存储介质存储有执行如上所述的基于知识库和多步提示的预训练大模型代码生成方法的计算机程序。
有益效果:与现有技术相比,本发明提供的基于知识库和多步提示的预训练大模型代码生成方法,能够有效对其知识库所提供的信息,降低生成逻辑错误的代码的概率同时,通过生成由自然语言形式的算法描述,降低了模型直接输出符合语法约束的程序语言的难度,有效提升输出代码的质量与可维护性。
附图说明
图1为本发明实施例的针对问题描述进行代码生成的流程图;
图2为本发明实施例的训练知识奖赏模型的流程图;
图3为本发明实施例的训练算法生成模型的流程图;
图4为本发明实施例的预测过程中目标代码生成的流程图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
基于知识库和多步提示的预训练大模型代码生成方法如图1所示。首先从应用环境中获取待生成目标代码的问题描述和测试用例集合,其中问题描述为用户需要编写的代码解决方案的功能的自然语言描述,即描述了需要解决的技术问题或任务。测试用例集合为用于验证生成的代码解决方案是否为正确的输入与预期输出的组合;若不存在训练完成的知识奖赏模型,则构建对算法描述进行评分的知识奖赏模型,即图2所示的子流程。获取面向环境的领域知识,构造知识库;获取大量历史问题描述和测试用例集合,构造训练集合。用大规模预训练语言模型权重初始化知识奖赏模型,并由算法生成模型生成大量针对历史问题描述的算法描述,由数据标记员根据算法描述与知识库符合程度进行打分,构造标签并交由知识奖赏模型训练;如果不存在训练完成的算法生成模型,则训练算法生成模型,即图3所示子流程。用大规模预训练语言模型权重初始化代码生成模型;采样训练集合中的问题描述,生成算法描述并由知识奖赏模型输出评分,将算法描述输入到代码生成模型输出代码并计算测试用例通过率;将评分与测试用例通过率作为奖赏,以强化学习算法训练算法生成模型。测过过程,即图4所示子流程。将问题描述输入算法生成模型中采样生成算法描述,由代码生成模型输出目标代码,直至目标代码通过所有测试用例。具体实施步骤如下:
步骤(0)是起始动作;
步骤(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);否则代码生成过程结束;
为了更好的解释本发明的具体实施方式,设:问题描述所在空间为测试用例集合所在空间为/>则训练数据的输入空间为/>算法描述所在空间为/>目标代码所在空间为/>知识奖赏模型写作R:/>其中/>为实数空间;将算法生成模型写作G:代码生成模型写作C:/>给定代码和测试用例集合到运行结果的映射为f:/> 设R,G,C的模型参数分别为θR,θG,θC。
从学习环境中收集训练集合其中pi为第i个问题的自然语言描述,ti为第i个问题的测试用例集合。从训练集合/>中放回采样得到m个问题描述/>通过算法生成模型G生成算法描述hi,并由数据标记员根据算法描述hi与知识库的符合程度进行打分,得到训练集合/>
训练知识奖赏模型过程中,模型R的损失函数为
训练算法生成模型的过程中,生成算法描述的奖赏为:
其中λ为预先设定的超参,p,t分别为ht所对应的问题描述和测试用例集合。
训练算法生成模型的优化目标定义如下:
其中V(·)表示算法生成模型G的评分函数,πθ(·)表示算法生成模型G在参数为θ时对输出动作的预测概率分布。At为优势估计函数,γ,λ为预先设定的超参数。为重要性采样中πθ相对于/>的采样系数,/>表示用强化学习算法的奖励函数,是优化的目标。
显然,本领域的技术人员应该明白,上述的本发明实施例的基于知识库和多步提示的预训练大模型代码生成方法各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
Claims (9)
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。
3.根据权利要求1所述的基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,步骤(3)中,从学习环境中收集训练集合其中pi为第i个问题的自然语言描述,ti为第i个问题的测试用例集合。
4.根据权利要求1所述的基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,步骤(7)中,从训练集合中放回采样得到m个问题描述/>通过算法生成模型G生成算法描述hi,并由数据标记员根据算法描述hi与知识库的符合程度进行打分,得到训练集合/>
5.根据权利要求1所述的基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,步骤(8)中,训练知识奖赏模型过程中,模型R的损失函数为:
6.根据权利要求1所述的基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,步骤(12)中,训练算法生成模型的过程中,生成算法描述的奖赏为:
其中λ为预先设定的超参,p,t分别为ht所对应的问题描述和测试用例集合。
7.根据权利要求1所述的基于知识库和多步提示的预训练大模型代码生成方法,其特征在于,训练算法生成模型的优化目标定义如下:
其中V(·)表示算法生成模型G的评分函数,πθ(·)表示算法生成模型G在参数为θ时对输出动作的预测概率分布;At为优势估计函数,γ,λ为预先设定的超参数;为重要性采样中πθ相对于/>的采样系数。
8.一种计算机设备,其特征在于:该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如权利要求1-7中任一项所述的基于知识库和多步提示的预训练大模型代码生成方法。
9.一种计算机可读存储介质,其特征在于:该计算机可读存储介质存储有执行如权利要求1-7中任一项所述的基于知识库和多步提示的预训练大模型代码生成方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310575020.0A CN116594601A (zh) | 2023-05-22 | 2023-05-22 | 一种基于知识库和多步提示的预训练大模型代码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310575020.0A CN116594601A (zh) | 2023-05-22 | 2023-05-22 | 一种基于知识库和多步提示的预训练大模型代码生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116594601A true CN116594601A (zh) | 2023-08-15 |
Family
ID=87604196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310575020.0A Pending CN116594601A (zh) | 2023-05-22 | 2023-05-22 | 一种基于知识库和多步提示的预训练大模型代码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116594601A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117008923A (zh) * | 2023-09-28 | 2023-11-07 | 北京智源人工智能研究院 | 基于ai大模型的代码生成和编译部署方法、平台和设备 |
CN117193733A (zh) * | 2023-09-12 | 2023-12-08 | 上海澜码科技有限公司 | 示例库的构建、使用方法及生成的示例代码的评估方法 |
-
2023
- 2023-05-22 CN CN202310575020.0A patent/CN116594601A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117193733A (zh) * | 2023-09-12 | 2023-12-08 | 上海澜码科技有限公司 | 示例库的构建、使用方法及生成的示例代码的评估方法 |
CN117193733B (zh) * | 2023-09-12 | 2024-03-19 | 上海澜码科技有限公司 | 示例库的构建、使用方法及生成的示例代码的评估方法 |
CN117008923A (zh) * | 2023-09-28 | 2023-11-07 | 北京智源人工智能研究院 | 基于ai大模型的代码生成和编译部署方法、平台和设备 |
CN117008923B (zh) * | 2023-09-28 | 2023-12-29 | 北京智源人工智能研究院 | 基于ai大模型的代码生成和编译部署方法、平台和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116594601A (zh) | 一种基于知识库和多步提示的预训练大模型代码生成方法 | |
US10635978B2 (en) | Ensembling of neural network models | |
WO2020143130A1 (zh) | 基于物理环境博弈的自主进化智能对话方法、系统、装置 | |
CN116909532B (zh) | 一种代码生成与缺陷修复方法和装置 | |
CN111340221B (zh) | 神经网络结构的采样方法和装置 | |
CN113487028B (zh) | 知识蒸馏方法、装置、终端设备及介质 | |
CN110807335A (zh) | 基于机器学习的翻译方法、装置、设备及存储介质 | |
CN114298050A (zh) | 模型的训练方法、实体关系抽取方法、装置、介质、设备 | |
Yin et al. | LEADS: Learning dynamical systems that generalize across environments | |
CN116628510A (zh) | 一种自训练可迭代的人工智能模型训练方法 | |
CN116186250A (zh) | 小样本条件下的多模态学习水平挖掘方法、系统及介质 | |
CN112084301A (zh) | 文本修正模型的训练方法及装置、文本修正方法及装置 | |
CN116340726A (zh) | 一种能源经济大数据清洗方法、系统、设备及存储介质 | |
CN116976424A (zh) | 适用于大语言模型的模型训练方法、装置、设备及介质 | |
CN111737417B (zh) | 修正自然语言生成结果的方法和装置 | |
CN111612152B (zh) | 一种量子计算机的模拟控制方法、系统及相关组件 | |
CN114298299A (zh) | 基于课程学习的模型训练方法、装置、设备及存储介质 | |
CN116578336A (zh) | 一种基于抄袭者-检测器对抗的软件克隆检测方法 | |
CN113656669B (zh) | 标签更新方法及装置 | |
CN112348175B (zh) | 一种基于强化学习来进行特征工程的方法 | |
CN112487811B (zh) | 基于强化学习的级联信息提取系统及方法 | |
CN115062769A (zh) | 基于知识蒸馏的模型训练方法、装置、设备及存储介质 | |
CN114091657A (zh) | 基于多任务框架的智能学习状态追踪方法、系统及应用 | |
CN112580885A (zh) | 一种配件合格率的预测方法、装置、设备及存储介质 | |
CN113971183A (zh) | 实体打标模型训练的方法、装置及电子设备 |
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 |