System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种知识和数据双轮驱动的代码生成方法技术_技高网

一种知识和数据双轮驱动的代码生成方法技术

技术编号:43736176 阅读:2 留言:0更新日期:2024-12-20 12:59
本发明专利技术涉及一种知识和数据双轮驱动的代码生成方法,具体涉及一种基于知识和数据双轮驱动的用于自动生成编程语言的方法,属于自然语言处理技术领域。本发明专利技术代码生成方法包括下列步骤:S1,构建编程语言知识库;S2,设置分类器模型;S3,设置代码生成模型;以及S4,根据知识库、分类器模型和代码生成模型进行知识和数据双轮驱动的代码生成。与现有技术相比,本发明专利技术将知识和数据两方面信息结合进行代码生成,所涉及到的模型结构相对独立,使用者可以根据实际训练资源,自由选择合适尺寸的分类器模型和代码生成模型完成训练,在代码数据量较小、代码生成模型参数量较小的情形下依然具有不错的表现。

【技术实现步骤摘要】

本专利技术涉及一种代码生成方法,具体涉及一种基于知识和数据双轮驱动的用于自动生成编程语言的方法,属于自然语言处理。


技术介绍

1、随着人工智能技术的发展和大模型的普及,自然语言处理相关技术也得到了革新性的突破。拥有高达几亿到几千亿参数,在海量数据上预训练的各种大语言模型,在进行各类自然语言处理时展现出了前所未有的强大能力。

2、代码生成(code generation)是由自然语言文本生成程序代码片段的过程。代码生成的发展可以划分为三个主要阶段:最初是根据程序员或专家根据掌握的编程知识,手动编写代码生成规则和模板,实现一些简单初级的代码生成相关任务;之后是基于机器学习的方法,使用概率与统计方法实现代码生成;最后是通过深度神经网络模型实现代码语言特征的自动提取。在这一发展过程中,代码生成的准确率有了质的提升。

3、传统的基于模板和规则的方法以及机器学习方法可解释性好、资源要求低,但是需要领域内专家通过手工编写模板和规则的方式将知识注入,也就是依赖于“知识”驱动。此外,这种方法缺乏灵活性和适应性,代码生成的结果差强人意。基于深度神经网络模型的方法能够从大量文本数据或代码数据中学习相应编程语言的特点,在主流的编程语言生成上取得了不错的成绩,但需要巨量标注数据作为数据集才能得到较好的训练结果,也就是依赖于“数据”驱动。对于一些少见的、难以获得大量标注数据的编程语言,基线模型难以获得与其体量匹配的训练数据量,也就难以达到令人满意的代码生成能力。


技术实现思路

1、针对现有技术中代码生成方法存在的不足,即要么过度依赖于知识,要么过度依赖于数据的情况,专利技术人创造性地提出一种知识和数据双轮驱动的代码生成方法,从而更好地完成代码生成任务。

2、本专利技术的创新点在于:在进行代码生成任务时,充分利用专家规则和模板以及训练用标注数据,将知识与数据有机地结合起来,以较少的数据和硬件资源完成代码生成任务。

3、一种知识与数据双轮驱动的代码生成方法,包括以下步骤:

4、步骤1:构建编程语言知识库模块。

5、具体地,包括以下子步骤:

6、步骤1.1:学习获取目标编程语言相关知识。

7、通过阅读该编程语言相关著作,通过网络博客或视频学习该编程语言编写方法,阅读相关工程源代码等多种方式,学习目标编程语言相关知识以及如何编写该语言。

8、步骤1.2:设置代码类别及对应知识表示。

9、根据所学到的内容和对该内容的理解,将在该编程语言编写中出现的各主要数据类型或语句形式(如一般高级编程语言中的数据结构、类定义、函数定义、算法实现或目标待生成语言中类似的概念,之后统称为“类别”)的知识归纳总结,形成该类别人工总结提炼出的“知识”。具体来说,如果该类别形式较为固定且有统一的代码模板,则可以将该模板和一些指示大模型按照该模板生成对应代码的提示(prompt)组合,作为该类别的专家设置的“知识”;如果该类别没有模板,则可以从该语言官方文档中摘取一些该类别有用的信息(如类型定义、编写特点、关键词要求等),或根据学习的内容人为总结一些帮助代码模型生成正确代码的信息(如“注释”类别可提示注释符号和使用方法,“标识符”类别可提示命名风格和上下文语境等等),作为该类别的知识和规则。这些模板和提示信息还可以类比c/c++、python、java等主流编程语言特点来设置,这样可以更好的让模型调动预训练编程语言信息,有利于让代码生成模型更好的理解新的编程语言。

10、步骤1.3:形成知识库模块。

11、将上述得到的各个代码类别和对应的知识表示以键值对(k,v)的形式组织起来,并将这些键值对汇总成为一个字典,作为该编程语言的知识库k,也就是:

12、k={(k1,v1),(k2,v2),…,(kn,vn)}             (1)

13、其中,(ki,vi)表示第i个类别和对应的知识。

14、步骤2:设置分类器模型模块。

15、对于用户输入的生成目标编程语言代码的自然语言指令,需要一个经过训练的分类器模型解析出该指令要生成的具体类别,才能确定知识库中与该类别对应的专家知识,之后才能通过拼接等方式将提示、规则和模板并入到输入中,进而引导代码生成模型更好地生成对应代码段。

16、步骤2.1:获取文本分类数据集。

17、根据目标编程语言特点和数据获取的难易程度,从网络搜索已有数据集,或是自行构建分类数据集。文本分类数据集的格式应为:

18、dt={(x1,y1),(x2,y2),…,(xn,yn)}              (2)

19、其中,dt表示文本分类数据集,xi表示第i个自然语言描述文本,yi表示该自然语言描述文本对应的生成代码的类别。

20、步骤2.2:训练分类器模型。

21、使用编程语言指令文本分类数据集训练分类器模型,使后者学会根据目标编程语言的自然语言代码生成指令,判断用户想要生成的目标代码的所属类别。该方法对基线模型(baseline model)没有要求,用户可以根据自己的硬件资源情况和偏好,自行选择合适的文本分类模型。常用的模型有基于机器学习的支持向量机(support vector machine,svm)、决策树、基于深度学习的循环神经网络(recurrent neural network,rnn)、bert等。

22、步骤3:设置代码生成模型模块。

23、对代码生成基线模型,在进行新编程语言代码生成任务前,使其在目标编程语言数据上进行二次预训练或微调,使模型能够在预测前学习该语言的特征,进一步提升生成代码的准确度,尤其是对于那些没有模板的类别。

24、步骤3.1:获取代码生成数据集。

25、与文本分类数据集的获取方法相同,根据目标编程语言代码生成数据获取的难易程度,以直接选取已有数据集或自行构建数据集的方式,得到训练用数据集。根据选择的代码生成模型所要求的数据集格式的不同,每个样本的格式也不同;常见的格式可分为只有输入和输出的序列到序列任务数据集格式({input,output}),以及额外包含“指令”字段的指令微调数据集格式({input,instruction,output})。将每个样本表示为sample,训练数据集可表示为:

26、dc={sample1,sample2,…,samplen}             (3)

27、其中,dc表示代码生成数据集,samplei表示数据集中第i个样本。

28、步骤3.2:训练/微调代码生成模型。

29、使用获取的目标编程语言的代码生成数据集dc,对基线代码生成模型按硬件资源水平和实际使用需求进行训练或微调。训练和微调的区别在于:训练一般指对模型的全部参数进行更新,对硬件资源和训练数据量的要求非常高,但是能让模型更好地学习到目标编程语言的编写特本文档来自技高网...

【技术保护点】

1.一种知识和数据双轮驱动的代码生成方法,其特征在于,所述代码生成方法包括下列步骤:S1,构建编程语言知识库;S2,设置分类器模型;S3,设置代码生成模型;以及S4,知识和数据双轮驱动的代码生成。

2.根据权利要求1所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述所述步骤S1包括下列子步骤:S1.1,学习获取目标编程语言相关知识;S1.2,设置代码类别及对应知识表示;S1.3,形成知识库。

3.根据权利要求2所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述子步骤S1.2的具体内容为:将在所述编程语言编写中出现的各主要数据类别形式的知识归纳总结,形成所述类别人工总结提炼出的“知识”;所述子步骤S1.3的具体内容为:将得到的各个代码类别和对应的知识表示以键值对(k,v)的形式组织起来,并将这些键值对汇总成为一个字典,作为该编程语言的知识库K,也就是:K={(k1,v1),(k2,v2),…,(kn,vn)},其中,(ki,vi)表示第i个类别和对应的知识。

4.根据权利要求3所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述子步骤S2.1的具体内容为:根据目标编程语言特点和数据获取的难易程度,从网络搜索已有数据集,或是自行编写脚本从已有工程源代码中自动抽取生成分类数据集,所述分类数据集的格式应为:Dt={(X1,y1),(X2,y2),…,(Xn,yn)},其中,Dt表示文本分类数据集,Xi表示第i个自然语言描述文本,yi表示该自然语言描述文本对应的生成代码的类别;所述子步骤S2.2的具体内容为:使用编程语言指令文本分类数据集训练分类器模型,使所述分类器模型学会根据目标编程语言的自然语言代码生成指令,判断用户想要生成的目标代码的所属类别。

5.根据权利要求4所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述子步骤S3.1的具体内容为:根据目标编程语言代码生成数据获取的难易程度,以直接选取已有数据集或自行构建数据集的方式,得到训练用数据集;所述子步骤S3.2的具体内容为:使用所述训练数据集,对基线代码生成模型按硬件资源水平和实际使用需求进行训练或微调。

6.根据权利要求5所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述子步骤S4具体包括下列内容:S4.1,将所述知识库模块、分类器模块和代码生成模块进行组合;S4.2,输入需要生成对应代码的自然语言描述文本,记为description,所述自然语言描述文本首先经过分类器模型进行意图解析,得到该描述想要生成的目标代码类别,记为categoryd,即:categoryd=classifier(description),classifier()表示通过分类器网络进行推断,在编程语言知识库K中搜索键categoryd,若搜到,取出其映射的值knowledged,也就是“知识”,与用户输入的自然语言描述文本拼接,形成代码生成模型的输入,记为inputd;若是没有搜到,则直接将输入作为代码生成模型的输入inputd;最后,将得到的输入馈送给代码生成模型进行文本到代码的生成任务,即:outputd=generator(inputd),其中,outputd即为最终生成的目标编程语言代码段,generator()表示使用代码生成模型进行推断。

...

【技术特征摘要】

1.一种知识和数据双轮驱动的代码生成方法,其特征在于,所述代码生成方法包括下列步骤:s1,构建编程语言知识库;s2,设置分类器模型;s3,设置代码生成模型;以及s4,知识和数据双轮驱动的代码生成。

2.根据权利要求1所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述所述步骤s1包括下列子步骤:s1.1,学习获取目标编程语言相关知识;s1.2,设置代码类别及对应知识表示;s1.3,形成知识库。

3.根据权利要求2所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述子步骤s1.2的具体内容为:将在所述编程语言编写中出现的各主要数据类别形式的知识归纳总结,形成所述类别人工总结提炼出的“知识”;所述子步骤s1.3的具体内容为:将得到的各个代码类别和对应的知识表示以键值对(k,v)的形式组织起来,并将这些键值对汇总成为一个字典,作为该编程语言的知识库k,也就是:k={(k1,v1),(k2,v2),…,(kn,vn)},其中,(ki,vi)表示第i个类别和对应的知识。

4.根据权利要求3所述的一种知识和数据双轮驱动的代码生成方法,其特征在于,所述子步骤s2.1的具体内容为:根据目标编程语言特点和数据获取的难易程度,从网络搜索已有数据集,或是自行编写脚本从已有工程源代码中自动抽取生成分类数据集,所述分类数据集的格式应为:dt={(x1,y1),(x2,y2),…,(xn,yn)},其中,dt表示文本分类数据集,xi表示第i个自然语言描述文本,yi表示该自然语言描述文本对应的生成代码的类别;所述子步骤s2.2的具体内容为:使用编程语言指令文本分类数据集训...

【专利技术属性】
技术研发人员:常君旸张华平
申请(专利权)人:北京理工大学
类型:发明
国别省市:

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

1