CN116909532B - 一种代码生成与缺陷修复方法和装置 - Google Patents

一种代码生成与缺陷修复方法和装置 Download PDF

Info

Publication number
CN116909532B
CN116909532B CN202311168557.1A CN202311168557A CN116909532B CN 116909532 B CN116909532 B CN 116909532B CN 202311168557 A CN202311168557 A CN 202311168557A CN 116909532 B CN116909532 B CN 116909532B
Authority
CN
China
Prior art keywords
code
language model
large language
defect repair
model
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.)
Active
Application number
CN202311168557.1A
Other languages
English (en)
Other versions
CN116909532A (zh
Inventor
徐琳
王芳
暴宇健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Xumi Yuntu Space Technology Co Ltd
Original Assignee
Shenzhen Xumi Yuntu Space Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Xumi Yuntu Space Technology Co Ltd filed Critical Shenzhen Xumi Yuntu Space Technology Co Ltd
Priority to CN202311168557.1A priority Critical patent/CN116909532B/zh
Publication of CN116909532A publication Critical patent/CN116909532A/zh
Application granted granted Critical
Publication of CN116909532B publication Critical patent/CN116909532B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/092Reinforcement learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及人工智能应用技术领域,提供了一种代码生成与缺陷修复方法和装置。该方法包括:构建有监督的代码生成语料库,以及基于代码生成语料库,对大语言模型进行预训练;输入代码生成需求和/或缺陷描述至经过预训练的大语言模型,以便对大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;依据代码编译器对生成代码的编译测试结果,采用强化学习类算法,对生成代码和/或代码缺陷修复建议进行评估,以便更新大语言模型的参数,直至模型收敛。本申请实施例的在对生成代码或者需要进行缺陷修复的代码进行修改或者修复时,能够有效检测评估代码缺陷以及代码缺陷修复准确性。

Description

一种代码生成与缺陷修复方法和装置
技术领域
本申请涉及人工智能应用技术领域,尤其涉及一种代码生成与缺陷修复方法和装置。
背景技术
近年来,随着人工智能技术的发展,特别是大语言模型的运用颠覆了传统的由程序员进行软件开发软件的模式,形成了代码生成技术。由于软件代码缺陷在软件开发过程中本身是不可避免的,加之软件规模在不断增加软件代码缺陷的数量也在随之增加,再叠加代码自动生成的新模式,更是给开发过程中出现的软件代码缺陷修复工作,带来了新的挑战。软件代码缺陷自动修复技术的发展,吸引了来自软件工程、程序语言、人工智能、形式化验证等多领域的交叉研究。
然而,基于大语言模型的代码生成技术也存在一些问题和挑战。由于大语言模型通常是基于海量文本数据进行训练而得到的,并不一定能够完全符合编程规范和逻辑。在使用大语言模型生成代码时,可能会出现一些错误或者不合理之处,导致代码不能正常运行或者达不到预期效果。
因此,在对生成代码或者需要进行缺陷修复的代码进行修改或者修复时,如何有效检测评估代码中是否存在缺陷以及缺陷修复的准确性,是亟待解决的技术问题。
发明内容
有鉴于此,本申请实施例提供了一种代码生成与缺陷修复方法、装置、电子设备及计算机可读存储介质,以解决现有技术在有效检测评估代码中是否存在缺陷以及缺陷修复准确性的问题。
本申请实施例的第一方面,提供了一种代码生成与缺陷修复方法,大语言模型与代码编译器相连,所述方法包括:
构建有监督的代码生成语料库,以及基于所述代码生成语料库,对所述大语言模型进行预训练;
输入代码生成需求和/或缺陷描述至经过预训练的所述大语言模型,以便对所述大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;
依据所述代码编译器对所述生成代码的编译测试结果,采用强化学习类算法,对所述生成代码和/或所述代码缺陷修复建议进行评估,以便更新所述大语言模型的参数,直至模型收敛。
本申请实施例的第二方面,提供了一种代码生成与缺陷修复装置,适用于上述的代码生成与缺陷修复方法,大语言模型与代码编译器相连,所述装置包括:
模型训练模块,能够构建有监督的代码生成语料库,以及基于所述代码生成语料库,对所述大语言模型进行预训练;
代码与缺陷修复建议生成模块,能够输入代码生成需求和/或缺陷描述至经过预训练的所述大语言模型,以便对所述大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;
模型参数更新模块,能够依据所述代码编译器对所述生成代码的编译测试结果,采用强化学习类算法,对所述生成代码和/或所述代码缺陷修复建议进行评估,以便更新所述大语言模型的参数,直至模型收敛。
本申请实施例的第三方面,提供了一种电子设备,包括存储器、处理器以及存储在存储器中并且可在处理器上运行的计算机程序,该处理器执行计算机程序时实现第一方面所述方法的步骤。
本申请实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现第一方面所述方法的步骤。
本申请实施例与现有技术相比存在的有益效果至少包括:本申请实施例中大语言模型与代码编译器相连,通过构建有监督的代码生成语料库并对大语言模型进行预训练,然后输入代码生成需求或者缺陷描述至经过预训练的大语言模型,微调大语言模型后,获得生成代码和/或代码缺陷修复建议;接着依据代码编译器对生成代码的编译测试结果,采用强化学习类算法对所述生成代码和/或所述代码缺陷修复建议进行评估,以便更新所述大语言模型的参数,直至模型收敛。本申请实施例结合了大语言模型,基于海量的文本数据上进行训练的优势以及强化学习方法,利用测试用例作为奖励函数,优化语言模型的输出结果,节省人工标注成本,可以使大语言模型自行校验代码结果是否符合用户需求和规范,提升生成代码的准确性和可用性,从而有效减少人工编程的成本和错误。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本申请实施例提供的一种代码生成与缺陷修复方法的流程示意图之一;
图2是本申请实施例提供的seq2seq模型工作原理示意图;
图3是本申请实施例提供的一种代码生成与缺陷修复方法的流程示意图之二;
图4是本申请实施例提供的一种代码生成与缺陷修复装置的结构示意图;
图5是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
下面将结合附图详细说明根据本申请实施例的一种代码生成与缺陷修复方法、装置、电子设备和存储介质。
如背景技术,在计算机领域,编程是一种将人类思维转化为机器可执行指令的过程。随着人工智能技术的发展,大语言模型Large Language Model作为一种能够理解自然语言并生成文本内容的技术,受到了广泛关注和应用。在代码领域,既可以基于人类自然语言命令来生成计算机程序代码的技术,也可以通过自然语言命令来调优有问题的代码,从而提高编程效率和质量,降低编程门槛和成本。目前已经有很多基于大语言模型的代码生成工具出现在市场上,并受到了很多代码开发工程师的欢迎和使用。
大语言模型代码生成是一个涉及软件工程和人工智能领域的研究话题,其核心在于针对给定的程序需求说明,生成符合需求的程序代码。大语言模型是指具有大量参数和数据的深度神经网络模型,如GPT-3、CodeGeeX等。它们通常使用自回归或自编码的架构,利用Transformer或LSTM等结构来学习代码或自然语言的表示。给定一个自然语言或伪代码的需求描述,作为输入序列;使用预训练好的大语言模型来生成输出序列,以满足用户需求。
常见的大语言模型包括GPT(Generative Pre-trained Transformer)、BERT(Bidirectional Encoder Representations from Transformers)、XLNet等,它们在自然语言处理任务中表现优秀,得到了广泛的应用。
以GPT为例,这是一种基于Transformer架构的大规模神经语言模型,由OpenAI提出。其基本思想是在海量文本数据上进行预训练,然后在特定任务上进行微调,以实现更好的性能。其基本原理是基于Transformer架构,将输入序列映射到一个向量空间中,并将这个向量空间中的点表示为具有上下文相关性的词向量。在预训练过程中,GPT使用了一个基于自回归模型的语言模型,通过最大化下一个单词的条件概率,来学习模型参数。
GPT模型的主要过程如下:
预处理阶段:GPT首先对原始文本进行分词,并将文本转化为一系列词向量的序列。在预训练阶段,GPT采用了类似于语言模型的任务,即预测给定上下文中的下一个单词。
Transformer编码器:GPT使用了多层Transformer编码器来学习上下文相关的词向量表示。在每一层中,Transformer编码器使用自注意力机制和前向神经网络,对上一层的输出进行进一步的处理。
预测下一个单词:在每一次预测时,GPT将前面的文本作为输入,通过多层Transformer编码器得到当前文本的表示,并通过softmax层计算下一个单词的条件概率。
微调阶段:在特定任务上进行微调时,GPT会在预训练阶段的基础上,根据具体任务的特点,修改一些神经网络结构或者增加一些任务特定的输入,再对整个模型进行微调。
然而,基于大语言模型的代码生成技术也存在一些问题和挑战。首先,由于大语言模型通常是基于海量文本数据进行训练而得到的,并不一定能够完全符合编程规范和逻辑。因此,在使用大语言模型生成代码时,可能会出现一些错误或者不合理之处,导致代码不能正常运行或者达不到预期效果。其次,在对生成的代码或者需要进行缺陷修复的代码进行修改或者修复时,当前没有一个有效且方便地方法来检测和评估代码中是否存在缺陷以及缺陷修复的准确性。
基于以上问题,本专利提出了一种基于强化学习来来微调预训练模型,以实现大语言模型可以对生成代码及代码缺陷修复是否准确的自查能力。
如图1所示,为本申请的一种基于大语言模型和强化学习的代码生成与缺陷修复方法流程图。首先,为了能够实现代码生成与缺陷修复的自动完成,应当使得大语言模型与代码编译器相连,将编译系统与训练好的大型语言模型集成,使得生成的代码片段可以直接被编译器编译和测试。通过编译和测试结果反馈给模型,实现对生成代码实时评估。方法包括:
S101:构建有监督的代码生成语料库,以及基于代码生成语料库,对大语言模型进行预训练。
S102:输入代码生成需求和/或缺陷描述至经过预训练的大语言模型,以便对大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议。
S103:依据代码编译器对生成代码的编译测试结果,采用强化学习类算法,对生成代码和/或代码缺陷修复建议进行评估,以便更新大语言模型的参数,直至模型收敛。
在一些实施例中,有监督的代码生成语料库的数据包括代码片段、对应功能描述和预期输出。
具体地,为了训练模型,首先需要构建一个包含大量有监督的代码生成语料库。该语料库中的数据包括代码片段、对应的功能描述和预期输出。语料库的构建可以通过从现有的开源项目、编程教程和在线编程社区中抓取代码和描述进行,同时可以邀请开发者参与贡献。
在一些实施例中,对大语言模型进行微调包括采用编码解码结构的seq2seq序列到序列模型训练方法。
具体地,基于构建的有监督的代码生成语料库,采用类似GPT2、GPT3、BLOOM,OPT等大型语言预训练模型进行训练。通过进一步微调的方式,使得模型能够根据给定的代码需求或问题描述生成相应的代码片段或修复建议。该微调任务形式同seq2seq序列到序列模型,采用既有的seq2seq序列到序列模型训练方法即可。
具体地,seq2seq 是一个Encoder-Decoder 结构的网络,即编码-解码结果。它的输入是一个序列,输出也是一个序列。Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。很多自然语言处理任务,比如聊天机器人,机器翻译,自动文摘,智能问答等,传统的解决方案都是检索式(从候选集中选出答案),这对素材的完善程度要求很高。seq2seq模型突破了传统的固定大小输入问题框架。采用序列到序列的模型,在自然语言处理中是文本到文本的映射。在自然语言处理任务中,其实输入的是文本序列,输出的很多时候也是文本序列,如图2所示的是一个典型的机器对话任务中,输入的文本序列即问话表述,到输出的文本序列即回答表述之间的变换。例如,问话“你好吗?”输入至编码网络,由解码网路输出“我很好”。
在一些实施例中,强化学习类算法包括策略梯度算法、Q-Leaning、DQN、PPO和/或A3C。
具体地,强化学习又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。强化学习的常见模型是标准的马尔可夫决策过程。按给定条件,强化学习可分为基于模式的强化学习和无模式强化学习,以及主动强化学习和被动强化学习。强化学习的变体包括逆向强化学习、阶层强化学习和部分可观测系统的强化学习。求解强化学习问题所使用的算法可分为策略搜索算法和值函数算法两类。深度学习模型可以在强化学习中得到使用,形成深度强化学习。强化学习不同于监督学习和非监督学习,不要求预先给定任何数据,而是通过接收环境对动作的奖励获得学习信息并更新模型参数。
具体地,策略梯度算法是机器学习中一种有效的强化学习类算法,可以帮助人工智能代理学习一种策略和动作空间,以解决更多复杂的任务。它能够从无法监测复杂强化学习环境中学习最优策略。策略梯度是另一种基于梯度下降法的强化学习算法,可以让代理学习解决一般最优控制问题或强化学习问题。通常,策略梯度的学习机制是构建一个折扣期望奖励函数,然后最大化它的参数。同时,策略梯度实际上是一种梯度上升法,它可以用来优化当前预测值的损失函数,其中期望奖励为预测值的最大值,以确保有效的策略优选。策略梯度算法可以用来优化非凸优化问题,而有了策略梯度,训练可以更自动化,并且在不使用针对特定环境的特定领域知识的情况下实现。策略梯度算法的一个重要应用是计算机游戏,它可以帮助代理学习正确的策略,从而获得最大的收益。策略梯度算法还可以应用于空间搜索,用于搜索下一步最佳动作,以指导代理学习最有效的行动策略。它还被用于查找更具潜力的动作和战略,从而最大程度地提高机器学习代理系统的能力。
在一些实施例中,当采用策略梯度算法时,如图3所示,包括:
S311:采用策略梯度对大语言模型的梯度进行更新,计算策略梯度为,其中/>为评分函数,/>表示大语言模型及其参数,/>表示输出,/>表示输入,/>表示依据代码编译器对生成代码的编译测试结果评价;
S312:基于策略梯度,对大语言模型的参数进行更新,更新参数为,其中,/>为权重因子,/>为大语言模型的参数。
在一些实施例中,基于编译器对生成代码进行编译测试的测试用例通过率确定分数,以便构建策略梯度算法的奖励函数。
具体地,利用代码编译系统提供的反馈信号进行强化学习。由于提供的代码缺陷问题都必须配置测试样例,在一些实施例中可以将测试样例的通过率设计为强化学习算法的得分。例如,一个代码缺陷的测试问题有4个测试样例,如果模型对于经过修复的代码在编译运行后只通过了3个测试样例,那么通过率即为75%,得分计为0.75。
在一些实施例中,大语言模型的结构包括采用文本生成模型结构;以及,依据生成代码和/或缺陷修复建议的预期准确程度,确定大语言模型的参数量。
具体地,大语言模型如BART、GPT、OPT或PALM等模型,其结构要求为语言生成模型即可,均可用来执行本实施例的代码生成与缺陷修复方法。同时,在选择使用参数规模时,为了确保代码缺陷评估的准确性,所选模型应具有足够大的参数规模,例如,模型总参数量至少60亿以上。
需要说明的是,对于代码缺陷的修复,需要持续收集成功与失败样本作为在线训练数据集,需要持续对大语言模型进行训练后通过强化学习的方式对参数训练。
本申请实施例与现有技术相比存在的有益效果至少包括:本申请实施例中大语言模型与代码编译器相连,通过构建有监督的代码生成语料库并对大语言模型进行预训练,然后输入代码生成需求或者缺陷描述至经过预训练的大语言模型,微调大语言模型后,获得生成代码和/或代码缺陷修复建议;接着依据代码编译器对生成代码的编译测试结果,采用强化学习类算法对生成代码和/或代码缺陷修复建议进行评估,以便更新大语言模型的参数,直至模型收敛。本申请实施例结合了大语言模型,基于海量的文本数据上进行训练的优势以及强化学习方法,利用测试用例作为奖励函数,优化语言模型的输出结果,节省人工标注成本,可以使大语言模型自行校验代码结果是否符合用户需求和规范,提升生成代码的准确性和可用性,从而有效减少人工编程的成本和错误。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图4是本申请实施例提供的一种基于大语言模型和强化学习的代码生成与缺陷修复装置的示意图。如图4所示,该代码生成与缺陷修复装置,适用于上述代码生成与缺陷修复方法,大语言模型与代码编译器相连,装置包括:
模型训练模块401,能够构建有监督的代码生成语料库,以及基于代码生成语料库,对大语言模型进行预训练。
代码与缺陷修复建议生成模块402,能够输入代码生成需求和/或缺陷描述至经过预训练的大语言模型,以便对大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议。
模型参数更新模块403,能够依据代码编译器对生成代码的编译测试结果,采用强化学习类算法,对生成代码和/或代码缺陷修复建议进行评估,以便更新大语言模型的参数,直至模型收敛。
应理解,本说明书实施例的一种基于大语言模型和强化学习的代码生成与缺陷修复装置还可执行图1至图3中基于大语言模型和强化学习的代码生成与缺陷修复装置执行的方法,并实现基于大语言模型和强化学习的代码生成与缺陷修复装置在图1至图3所示实例的功能,在此不再赘述。同时,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图5是本申请实施例提供的电子设备5的示意图。如图5所示,该实施例的电子设备5包括:处理器501、存储器502以及存储在该存储器502中并且可在处理器501上运行的计算机程序503。处理器501执行计算机程序503时实现上述各个方法实施例中的步骤。或者,处理器501执行计算机程序503时实现上述各装置实施例中各模块/单元的功能。
电子设备5可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备5可以包括但不仅限于处理器501和存储器502。本领域技术人员可以理解,图5仅仅是电子设备5的示例,并不构成对电子设备5的限定,可以包括比图示更多或更少的部件,或者不同的部件。
存储器502可以是电子设备5的内部存储单元,例如,电子设备5的硬盘或内存。存储器502也可以是电子设备5的外部存储设备,例如,电子设备5上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。存储器502还可以既包括电子设备5的内部存储单元也包括外部存储设备。存储器502用于存储计算机程序以及电子设备所需的其它程序和数据。
处理器501可以是中央处理单元(Central Processing Unit,CPU),也可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器501从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成共享资源访问控制装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
大语言模型与代码编译器相连,方法包括:
构建有监督的代码生成语料库,以及基于代码生成语料库,对大语言模型进行预训练;
输入代码生成需求和/或缺陷描述至经过预训练的大语言模型,以便对大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;
依据代码编译器对生成代码的编译测试结果,采用强化学习类算法,对生成代码和/或代码缺陷修复建议进行评估,以便更新大语言模型的参数,直至模型收敛。
上述如本说明书图1至图3所示实施例揭示的基于大语言模型和强化学习的代码生成与缺陷修复方法可以应用于处理器501中,或者由处理器501实现。处理器501可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以实现或者执行本说明书实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
当然,除了软件实现方式之外,本说明书实施例的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1至图3所示实施例的基于大语言模型和强化学习的代码生成与缺陷修复方法,并具体用于执行以下方法:
大语言模型与代码编译器相连,方法包括:
构建有监督的代码生成语料库,以及基于代码生成语料库,对大语言模型进行预训练;
输入代码生成需求和/或缺陷描述至经过预训练的大语言模型,以便对大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;
依据代码编译器对生成代码的编译测试结果,采用强化学习类算法,对生成代码和/或代码缺陷修复建议进行评估,以便更新大语言模型的参数,直至模型收敛。
总之,以上该仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (4)

1.一种代码生成与缺陷修复方法,其特征在于,大语言模型与代码编译器相连,所述方法包括:
构建有监督的代码生成语料库,以及基于所述代码生成语料库,对所述大语言模型进行预训练;所述有监督的代码生成语料库的数据包括代码片段、对应功能描述和预期输出;通过从现有的开源项目、编程教程和在线编程社区中抓取代码和描述构建所述代码生成语料库;所述大语言模型的结构包括采用文本生成模型结构;以及,依据生成代码和/或缺陷修复建议的预期准确程度,确定所述大语言模型的参数量;
输入代码生成需求和/或缺陷描述至经过预训练的所述大语言模型,以便采用编码解码结构的序列到序列seq2seq模型训练方法对所述大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;
依据所述代码编译器对所述生成代码的编译测试结果,采用强化学习的策略梯度算法,对所述生成代码和/或所述代码缺陷修复建议进行评估,以便更新所述大语言模型的参数,直至模型收敛,其中包括:
采用策略梯度对所述大语言模型的梯度进行更新,计算所述策略梯度为,其中/>为评分函数,/>表示大语言模型及其参数,/>表示输出,/>表示输入,/>表示依据所述代码编译器对所述生成代码的编译测试结果评价;
基于所述策略梯度,对所述大语言模型的所述参数进行更新,更新所述参数为,其中,/>为权重因子,/>为所述大语言模型的所述参数;
基于所述代码编译器对所述生成代码进行编译测试的测试用例通过率确定分数,以便构建所述策略梯度算法的奖励函数。
2.一种代码生成与缺陷修复装置,其特征在于,适用于权利要求1所述的代码生成与缺陷修复方法,大语言模型与代码编译器相连,所述装置包括:
模型训练模块,能够构建有监督的代码生成语料库,以及基于所述代码生成语料库,对所述大语言模型进行预训练;
代码与缺陷修复建议生成模块,能够输入代码生成需求和/或缺陷描述至经过预训练的所述大语言模型,以便对所述大语言模型进行微调后,获得生成代码和/或代码缺陷修复建议;
模型参数更新模块,能够依据所述代码编译器对所述生成代码的编译测试结果,采用强化学习类算法,对所述生成代码和/或所述代码缺陷修复建议进行评估,以便更新所述大语言模型的参数,直至模型收敛。
3.一种电子设备,包括存储器、处理器以及存储在所述存储器中并且可在所述处理器上运行的计算机程序,其特征在于,所述处理器在执行所述计算机程序时,实现如权利要求1所述方法的步骤。
4.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1所述方法的步骤。
CN202311168557.1A 2023-09-12 2023-09-12 一种代码生成与缺陷修复方法和装置 Active CN116909532B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311168557.1A CN116909532B (zh) 2023-09-12 2023-09-12 一种代码生成与缺陷修复方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311168557.1A CN116909532B (zh) 2023-09-12 2023-09-12 一种代码生成与缺陷修复方法和装置

Publications (2)

Publication Number Publication Date
CN116909532A CN116909532A (zh) 2023-10-20
CN116909532B true CN116909532B (zh) 2024-01-05

Family

ID=88367141

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311168557.1A Active CN116909532B (zh) 2023-09-12 2023-09-12 一种代码生成与缺陷修复方法和装置

Country Status (1)

Country Link
CN (1) CN116909532B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117492760B (zh) * 2023-10-27 2024-05-17 浪潮智慧科技有限公司 一种基于人工智能的代码优化方法、设备及存储介质
CN117407793B (zh) * 2023-11-03 2024-05-28 上海无问芯穹智能科技有限公司 一种用于大语言模型的并行化策略优化方法、系统、设备及介质
CN117421414B (zh) * 2023-12-18 2024-03-26 珠海金智维信息科技有限公司 基于aigc的rpa智能交互式系统的设计方法
CN117555720B (zh) * 2024-01-11 2024-04-26 腾讯科技(深圳)有限公司 代码修复方法、装置、设备及介质
CN117724695B (zh) * 2024-02-18 2024-04-30 浙江同花顺智能科技有限公司 大型语言模型的代码生成优化方法、装置、设备及介质
CN118034659B (zh) * 2024-04-10 2024-07-05 北京云庐科技有限公司 自动生成cae仿真程序的方法、系统和介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114791A (zh) * 2020-09-08 2020-12-22 南京航空航天大学 一种基于元学习的代码自适应生成方法
CN112158045A (zh) * 2020-09-14 2021-01-01 东南大学 一种基于深度确定性策略梯度的主动悬架控制方法
CN112732264A (zh) * 2020-12-30 2021-04-30 中国船舶重工集团公司第七0九研究所 一种高级编程语言间代码自动转换方法
CN116523031A (zh) * 2023-07-05 2023-08-01 深圳须弥云图空间科技有限公司 语言生成模型的训练方法、语言生成方法及电子设备
CN116661853A (zh) * 2023-07-04 2023-08-29 康键信息技术(深圳)有限公司 代码缺陷修复方法、装置、计算机设备及可读存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3979121A1 (en) * 2020-10-01 2022-04-06 Naver Corporation Method and system for controlling distributions of attributes in language models for text generation
US11941373B2 (en) * 2021-12-17 2024-03-26 Microsoft Technology Licensing, Llc. Code generation through reinforcement learning using code-quality rewards

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114791A (zh) * 2020-09-08 2020-12-22 南京航空航天大学 一种基于元学习的代码自适应生成方法
CN112158045A (zh) * 2020-09-14 2021-01-01 东南大学 一种基于深度确定性策略梯度的主动悬架控制方法
CN112732264A (zh) * 2020-12-30 2021-04-30 中国船舶重工集团公司第七0九研究所 一种高级编程语言间代码自动转换方法
CN116661853A (zh) * 2023-07-04 2023-08-29 康键信息技术(深圳)有限公司 代码缺陷修复方法、装置、计算机设备及可读存储介质
CN116523031A (zh) * 2023-07-05 2023-08-01 深圳须弥云图空间科技有限公司 语言生成模型的训练方法、语言生成方法及电子设备

Also Published As

Publication number Publication date
CN116909532A (zh) 2023-10-20

Similar Documents

Publication Publication Date Title
CN116909532B (zh) 一种代码生成与缺陷修复方法和装置
US11836451B2 (en) Dialogue state tracking using a global-local encoder
CN111738016B (zh) 多意图识别方法及相关设备
WO2023197613A1 (zh) 一种小样本微调方法、系统及相关装置
US20220092416A1 (en) Neural architecture search through a graph search space
Haller et al. Survey on automated short answer grading with deep learning: from word embeddings to transformers
CN111598253B (zh) 使用教师退火来训练机器学习模型
CN110991195B (zh) 机器翻译模型训练方法、装置及存储介质
CN113826125A (zh) 使用无监督数据增强来训练机器学习模型
Xie et al. Osworld: Benchmarking multimodal agents for open-ended tasks in real computer environments
US20190318249A1 (en) Interpretable general reasoning system using key value memory networks
EP3832485A1 (en) Question answering systems
CN114254127A (zh) 学生能力画像方法、学习资源推荐方法及装置
CN116186250A (zh) 小样本条件下的多模态学习水平挖掘方法、系统及介质
Tiwari et al. A dynamic goal adapted task oriented dialogue agent
El Alaoui et al. Building Intelligent Chatbots: Tools, Technologies, and Approaches
Surden ChatGPT, Artificial Intelligence (AI) Large Language Models, and Law
Algherairy et al. A review of dialogue systems: current trends and future directions
CN116861913A (zh) 基于gpt大模型的立场检测方法及相关设备
CN110955755A (zh) 一种确定目标标准信息的方法和系统
CN115510205A (zh) 一种问句生成的方法、系统及存储介质
Peng et al. Misleading inference generation via proximal policy optimization
Dakhel et al. An Overview on Large Language Models
CN117290856B (zh) 基于软件自动化测试技术的智能测试管理系统
CN115269844B (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
GR01 Patent grant
GR01 Patent grant