技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种基于残差学习的个性化代码生成系统及方法  >  正文

一种基于残差学习的个性化代码生成系统及方法

  • 国知局
  • 2024-10-15 10:02:25

本发明属于自然语言处理,具体是指一种基于残差学习的个性化代码生成系统及方法。

背景技术:

1、随着软件开发的复杂性增加,自动代码生成技术成为提高开发效率和代码质量的关键手段之一。传统的代码生成方法,如基于规则的方法和简单的机器学习模型,往往难以捕捉编码的细微差别和个性化需求。

2、近年来,深度学习技术,尤其是大型预训练语言模型(如gpt-3、codex等),在代码生成领域显示出了巨大的潜力。这些模型能够基于海量的代码库学习编程语言的语法和结构,实现自动代码补全、bug修复、代码重构等功能。然而,尽管这些模型在理解代码和生成代码方面表现出色,但它们通常缺乏对开发者个性化编码风格和偏好的理解和适应能力。未经过个性化的代码常常需要开发者进行审查和修改,并且十分容易遗漏,大大增加了代码开发和维护的成本。

3、虽然大语言模型在代码生成领域具有强大的语言理解和生成能力,但如何生成个性化的代码仍然是一个挑战。传统的个性化方法无法充分理解开发者的代码风格习惯和满足个性化生成的需求,因此需要能够捕捉开发者代码语法风格的学习方法,以满足不同开发者的代码个性化需求。

4、鉴于深度预训练模型优异的代码生成效果与性能,我们将其引入到个性化生成任务中。为了能够更好地实现个性化的代码生成,我们需要找到一种契合大语言模型特点的个性化输入和输出方式,有效地捕捉和模仿开发者的代码风格和偏好,并有效地建立起对于不同开发者的细粒度的代码风格特征。

技术实现思路

1、为了解决背景技术中的问题,本发明提出了一种新颖的残差学习框架,基于此,提供了一种基于残差学习的个性化代码生成方法。本发明的目的在于设计了一种表示开发者代码风格的方法,将用户的代码风格分解为不同的代码特征,通过残差学习学习到的代码特征进行组合形成开发者的代码风格,并通过代码风格特征指导大语言模型生成对应的个性化代码。

2、本发明采用的技术方案如下,具体包括以下步骤:

3、一、一种基于残差学习的个性化代码生成系统,包括:

4、前处理模块,对用户的历史代码进行风格检测,得到对应代码片段的风格序列;

5、信息提取模块,基于用户的历史代码和风格序列构建基于大语言模型llm的残差学习框架,通过残差学习框架提取用户的风格信息;所述风格信息为训练学习的每个代码风格规范的向量表示;

6、代码生成模块,将输入的自然语言和风格信息进行融合,借助大语言模型llm完成代码生成任务。

7、二、一种基于残差学习的个性化代码生成方法

8、应用于上述个性化代码生成系统,所述个性化代码生成方法具体包括如下步骤:

9、1)从命名、格式、结构三个角度定义若干个代码风格规范,获取编程语言的代码片段数据集,使用代码检测工具收集代表对应代码片段的风格序列;

10、2)基于步骤1)的代码与其对应的风格序列设置残差项,生成可用于残差学习的训练数据;

11、3)对每个代码风格规范设置一个可学习的向量表示;

12、4)基于步骤3)的可学习的向量表示,通过大语言模型llm构建残差学习框架;

13、5)基于步骤2)的训练数据,通过步骤4)的残差学习框架进行残差学习,训练学习得到每个代码风格规范的向量表示;

14、6)对于一个开发者的历史代码,通过代码检测工具得到其风格序列,使用步骤5)训练好的代码风格规范的向量表示,生成与开发者历史代码风格一致的个性化代码。

15、所述步骤1)具体为:

16、将收集到的编程语言的代码片段数据集中的每个代码片段c,通过代码检测工具从命名、格式、结构三个角度收集得到对应代码片段的风格序列s={s1,s2,…,sn};

17、其中,风格序列为由代码风格规范作为序列元素构成的序列;n为收集的代码风格规范的个数,风格序列中的元素sn取值为0或1,代表是否遵循当前位置的代码风格规范,1代表遵循,0代表不遵循。

18、代码风格规范包括:命名规范如变量命名采用驼峰命名;格式规范如限制行长度不超过50个字符,运算符两侧使用空格等;结构规范如类中方法的顺序遵循先公共方法后私有方法等。

19、所述步骤2)具体为:

20、遍历步骤1)的代码片段与其对应的风格序列,构造满足如下条件的残差学习数据集d:

21、残差学习数据集d中每条残差学习数据d={ca,sa,cb,sb,r,t,t};

22、其中,sa,sb为代码片段ca与代码片段cb对应的两个序列;提取sb中值为1的元素,并组成序列sb′;提取sa中值为1的元素,并组成序列sa′;代码片段ca与代码片段cb需满足对应的两个序列sa′,sb′中不相同的元素个数为1;

23、其中,r代表两个序列sa′,sb′中不相同的元素的代码风格规范名;t为r的代码风格规范的文本详细解释。

24、对于每条残差学习数据d,训练文本t表示为:“已知两段代码以及它们对应的风格序列;请识别并解释在第二段代码中出现,但未在第一段代码中出现的代码风格规范名;第一段代码:ca,第一段代码的风格序列:sa;第二段代码:cb,第二段代码的风格序列:sb;答:r在第二段代码中存在,而在第一段代码中不存在;其文本解释为t。”

25、所述步骤3)具体包括以下步骤:

26、基于设定的n个代码风格规范,为每个代码风格规范设置一个可学习向量表示,最终得到一组可学习向量表示a={a1,a2,…,an}。

27、所述步骤4)中构建残差学习框架模型具体包括以下步骤:

28、4.1)对于每条残差学习数据对应的训练文本t:在风格序列值为1的位置插入对应的可学习向量表示,将值为0的位置从文本中删除,将r替换为对应的可学习向量表示(找到r在风格序列中对应的元素位置,根据元素位置将r替换为对应的可学习向量表示),其余位置通过llm的tokenizer转变为文本嵌入,最终得到训练嵌入q;

29、4.2)将llm的参数权重全部冻结,将训练嵌入q输入llm,保留对可学习向量表示的权重学习。

30、所述步骤5)具体包括以下步骤:

31、通过步骤4)的残差学习框架对步骤2)的训练数据进行训练,训练学习每个代码风格规范的向量表示;选取负log-likehood函数作为最终损失函数:

32、

33、采用误差反向传播对可学习向量表示的参数进行调整;根据训练过程中模型的损失函数选取可学习向量表示的参数,将损失函数最小时对应的一组参数作为可学习向量表示的参数。

34、所述步骤6)具体包括以下步骤:

35、6.1)对于一个开发者的历史代码,使用代码检测工具从命名、格式、结构三个角度收集得到代表对应代码片段的风格序列s={s1,s2,…,sn};

36、6.2)将风格序列中值为1的风格规范对应的向量表示,组成代表开发者代码风格特征的向量组a={a1,a2,…,am};其中m为风格序列中值为1的元素个数;

37、6.3)问题文本通过llm的tokenizer后得到嵌入序列e={e1,e2,…,en},其中n为token化的向量表示个数;所述问题文本为由自然语言描述的用户编程问题或需求;

38、将风格特征的向量组a与嵌入序列e进行连接,得到用户的输入嵌入q:

39、q={a1,a2,…,am,e1,e2,…,en};

40、6.4)将嵌入q输入llm通过自回归解码得到与开发者历史风格一致的个性化代码。

41、三、一种终端

42、所述终端包括存储器、处理器及存储在所述存储器中并可在所述处理器上运行的个性化代码生成程序,所述处理器执行个性化代码生成程序时,实现上述的基于残差学习的个性化代码生成方法。

43、四、一种计算机可读存储介质

44、所述计算机可读存储介质上存储有个性化代码生成程序,所述个性化代码生成程序被处理器执行时,实现上述的基于残差学习的个性化代码生成方法。

45、本发明的有益效果:

46、本发明提供了一种基于残差学习的个性化代码生成系统及方法,通过从数据中提取风格规范,并设计残差学习来训练不同的风格规范表示。借助风格规范表示可以配置灵活且多样的代码风格,帮助开发者生成与风格需求一致的个性化代码,提升了代码自动化生成的定制化程度,提高了开发的效率,减少了代码维护的成本。

本文地址:https://www.jishuxx.com/zhuanli/20241015/316213.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。