CN117453273A - 一种程序代码智能补全方法及装置 - Google Patents

一种程序代码智能补全方法及装置 Download PDF

Info

Publication number
CN117453273A
CN117453273A CN202311559278.8A CN202311559278A CN117453273A CN 117453273 A CN117453273 A CN 117453273A CN 202311559278 A CN202311559278 A CN 202311559278A CN 117453273 A CN117453273 A CN 117453273A
Authority
CN
China
Prior art keywords
code
program code
private
model
complemented
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
Application number
CN202311559278.8A
Other languages
English (en)
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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202311559278.8A priority Critical patent/CN117453273A/zh
Publication of CN117453273A publication Critical patent/CN117453273A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种程序代码智能补全方法及装置,涉及人工智能领域,也可用于金融领域,包括:根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。本申请能够根据待补全程序代码的内容识别出其属于的群组以及类型,并自动调用对应的子私有补全模型进行代码补全,提高代码补全的精准度。

Description

一种程序代码智能补全方法及装置
技术领域
本申请涉及人工智能领域,可以用于金融领域,具体是一种程序代码智能补全方法及装置。
背景技术
通常,程序员在编写程序时,常会用代码补全工具进行辅助编写。代码自动补全技术极大地减少了程序员的工作量,提升了开发效率、质量及体验。
然而,现有的人工智能编码助手类产品通常提供项目级补全模型训练引擎,支持根据现有代码库训练私有补全模型。然而,对于有些项目,同一应用可能分为不同群组,并且同一群组内代码也分为联机程序、批量程序、路由层程序和Web程序等不同类型。不同群组、不同类型之间的代码在存在着依赖包、引用方法及代码规约等各方面差异,导致对代码补全功能的推送内容或推送优先级存在需求上的差异。总之,现有的智能编码助手类产品是以项目为维度进行补全模型训练的,以至于面对不同群组或不同类型的代码时,推送精度有所欠缺。
发明内容
针对现有技术中的问题,本申请提供一种程序代码智能补全方法及装置,能够根据待补全程序代码的内容识别出其属于的群组以及类型,并自动调用对应的子私有补全模型进行代码补全,提高代码补全的精准度。
为解决上述技术问题,本申请提供以下技术方案:
第一方面,本申请提供一种程序代码智能补全方法,包括:
根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
进一步地,所述根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识,包括:
对所述待补全程序代码数字化后执行嵌入操作,得到对应的待分类向量;
将所述待分类向量输入预先训练的双向长短记忆网络模型,得到所述待补全程序代码中各词汇的上文信息、当前词信息及下文信息;
将所述上文信息、当前词信息及下文信息输入卷积神经网络,生成当前词向量;
对各当前词向量进行拼接后导入全连接层进行分类,得到所述待补全程序代码对应的群组类型标识;其中,所述群组类型标识用于表示所述待补全程序代码对应的代码群组与代码类型;每个代码群组包括多个代码类型。
进一步地,预先训练双向长短记忆网络模型的步骤,包括:
利用历史程序代码构建第一训练集文件;
根据所述第一训练集文件中的数据内容创建词表与类别表;其中,所述词表包括词汇编号与词汇频次,所述类别表包括类别编号;
将所述词表与类别表输入原始双向长短记忆网络模型进行训练,得到所述训练的双向长短记忆网络模型。
进一步地,在将所述词表与类别表输入原始双向长短记忆网络模型进行训练前,还包括:
对所述词表与类别表进行预处理操作;其中,所述预处理操作包括低频词过滤。
进一步地,预先构建私有补全模型集合的步骤,包括:
利用所述历史程序代码构建第二数据集文件;其中,所述历史程序代码涉及各代码群组与代码类型;
将所述第二数据集文件输入原始神经网络模型,并基于定制Transformer的多层神经网络训练所述原始神经网络模型,得到所述私有补全模型;其中,每一代码群组下的每一代码类型对应一种私有补全模型;
汇聚所述私有补全模型,得到所述私有补全模型集合。
进一步地,所述根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型,包括:
从所述群组类型标识提取群组标识,并根据所述群组标识确定所述待补全程序代码对应的代码群组;
从所述群组类型标识提取类型标识,并根据所述类型标识确定所述待补全程序代码对应的代码类型;
根据所述群组标识在所述私有补全模型集合中进行群组匹配,确定该代码群组对应的多个候选子私有补全模型;
根据所述类型标识从多个候选子私有补全模型中选取所述待补全程序代码适配的子私有补全模型。
第二方面,本申请提供一种程序代码智能补全装置,包括:
群组类型识别单元,用于根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
补全模型选取单元,用于根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
代码补全操作单元,用于利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
进一步地,所述群组类型识别单元,包括:
分类向量生成模块,用于对所述待补全程序代码数字化后执行嵌入操作,得到对应的待分类向量;
词汇信息生成模块,用于将所述待分类向量输入预先训练的双向长短记忆网络模型,得到所述待补全程序代码中各词汇的上文信息、当前词信息及下文信息;
向量组合模块,用于将所述上文信息、当前词信息及下文信息输入卷积神经网络,生成当前词向量;
群组类型标识确定模块,用于对各当前词向量进行拼接后导入全连接层进行分类,得到所述待补全程序代码对应的群组类型标识;其中,所述群组类型标识用于表示所述待补全程序代码对应的代码群组与代码类型;每个代码群组包括多个代码类型。
进一步地,补全模型选取单元,包括:
第一训练文件构建模块,用于利用历史程序代码构建第一训练集文件;
词表类表创建模块,用于根据所述第一训练集文件中的数据内容创建词表与类别表;其中,所述词表包括词汇编号与词汇频次,所述类别表包括类别编号;
网络模型训练模块,用于将所述词表与类别表输入原始双向长短记忆网络模型进行训练,得到所述训练的双向长短记忆网络模型。
进一步地,补全模型选取单元,用于:
对所述词表与类别表进行预处理操作;其中,所述预处理操作包括低频词过滤。
进一步地,补全模型选取单元,包括:
第二训练文件构建模块,用于利用所述历史程序代码构建第二数据集文件;其中,所述历史程序代码涉及各代码群组与代码类型;
补全模型构建模块,用于将所述第二数据集文件输入原始神经网络模型,并基于定制Transformer的多层神经网络训练所述原始神经网络模型,得到所述私有补全模型;其中,每一代码群组下的每一代码类型对应一种私有补全模型;
补全模型汇聚模块,用于汇聚所述私有补全模型,得到所述私有补全模型集合。
进一步地,所述补全模型选取单元,包括:
群组选取模块,用于从所述群组类型标识提取群组标识,并根据所述群组标识确定所述待补全程序代码对应的代码群组;
类型选取模块,用于从所述群组类型标识提取类型标识,并根据所述类型标识确定所述待补全程序代码对应的代码类型;
候选模型确定模块,用于根据所述群组标识在所述私有补全模型集合中进行群组匹配,确定该代码群组对应的多个候选子私有补全模型;
补全模型确定模块,用于根据所述类型标识从多个候选子私有补全模型中选取所述待补全程序代码适配的子私有补全模型。
第三方面,本申请提供一种电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述程序代码智能补全方法的步骤。
第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述程序代码智能补全方法的步骤。
第五方面,本申请提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现所述程序代码智能补全方法的步骤。
针对现有技术中的问题,本申请提供的程序代码智能补全方法及装置,能够将程序代码按照不同群组以及不同类型代码进行分类,然后通过补全模型训练引擎分别对不同群组以及不同类型的程序代码进行私有补全模型训练,生成不同群组下的不同类型的子私有补全模型,最后在进行程序代码研发时,根据待补全程序代码的内容,通过机器学习的方式识别出其属于的群组以及类型,并自动调用对应的子私有补全模型执行代码补全操作,从而提高代码补全的推送精准度,提升程序代码的编写效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中程序代码智能补全方法的流程图;
图2为本申请实施例中得到群组类型标识的流程图;
图3为本申请实施例中训练双向长短记忆网络模型的流程图;
图4为本申请实施例中构建私有补全模型集合的流程图;
图5为本申请实施例中选取适配的子私有补全模型的流程图;
图6为本申请实施例中程序代码智能补全装置的结构图;
图7为本申请实施例中群组类型识别单元的结构图;
图8为本申请实施例中补全模型选取单元的结构图之一;
图9为本申请实施例中补全模型选取单元的结构图之二
图10为本申请实施例中补全模型选取单元的结构图之三;
图11为本申请实施例中的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请提供的程序代码智能补全方法及装置,可用于金融领域,也可用于除金融领域之外的任意领域,本申请提供的程序代码智能补全方法及装置的应用领域不做限定。
本申请技术方案中对数据的获取、存储、使用及处理等均符合法律法规的相关规定。
一实施例中,参见图1,为了能够根据待补全程序代码的内容识别出其属于的群组以及类型,并自动调用对应的子私有补全模型进行代码补全,提高代码补全的精准度,本申请提供一种程序代码智能补全方法,包括:
S101:根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
S102:根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
S103:利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
可以理解的是,本申请提供的程序代码智能补全方法可以但不限于用于如下应用场景:当开发人员编写程序代码时,为了提高程序代码的编写效率,可以先尝试编写一部分代码,再对该部分代码应用本申请提供的方法,对该部分代码进行补全操作,从而提升代码编写效率。
具体实施时,一般先要根据代码群组与代码类型对待补全程序代码进行分类,确定待补全程序代码对应的群组类型标识。其中,群组类型标识主要用于在后续步骤中帮助确定待补全程序代码适配的补全模型,也就是子私有补全模型。接下来,根据群组类型标识从私有补全模型集合中选取待补全程序代码适配的子私有补全模型。其中,私有补全模型集合中包含有大量多种子私有补全模型。理想情况下,私有补全模型集合中的子私有补全模型能够覆盖到开发人员所需编写的各种程序代码,帮助开发人员提升代码编写效率。最后,利用适配的子私有补全模型对待补全程序代码进行程序代码智能补全操作。
需要说明的是,程序代码智能补全方法的执行有赖于构建各类代码适配的子私有补全模型。为了对各待补全代码进行分类,需要构建双向长短记忆网络模型。具体地,可以按照如下步骤执行本申请提供的程序代码智能补全方法。
第一,梳理历史项目(程序)中包含的所有代码分类,每种分类挑选足够多的程序样本,并将程序样本按照N:1:1的比例划分为训练集、验证集及测试集。其中,N一般可以取大于1的整数。不同的代码分类一般是指,不同代码群组中的不同代码类型,例如群组a1(代码群组)中的联机程序(代码类型)。
第二,对训练集与验证集中的程序样本进行预处理操作,具体的预处理操作详见下文阐述。对训练集进行多轮循环训练,每轮均可使用验证集中的程序样本进行验证。一般地,随着训练,验证正确率会稳步上升。
第三,使用测试集中的程序样本对训练完成的双向长短记忆网络模型进行测试。若测试的正确率小于阈值,可调整模型参数与超参数重新训练,直至正确率大于阈值为止。
其中,参数模型是深度学习模型中的可学习参数,它们通过训练数据进行自动调整,以最小化损失函数。在神经网络中,参数模型通常包括权重与偏置等参数,它们共同决定了模型的结构与性能。超参数是深度学习模型中的非可学习参数,它们决定了模型的架构与训练过程。超参数通常需要手动设置,并且需要根据具体的问题与数据类型进行调整。
第四,使用训练完成的双向长短记忆网络模型对代码库所有代码进行识别分类,并将分类完成的代码导入一个基于定制Transformer的多层神经网络训练神经网络模型进行训练,并得到不同代码群组、代码类型对应的子私有补全模型。
最后,在未来开发人员编写代码时,可通过其已编写的一部分程序内容自动识别该部分代码所属的代码群组与代码类型。其中,代码类型为代码群组之下的代码类型。然后,自动通过其适配的子私有补全模型进行代码的补全推送,提高推送的精准度。
从上述描述可知,本申请提供的程序代码智能补全方法,能够将程序代码按照不同群组以及不同类型代码进行分类,然后通过补全模型训练引擎分别对不同群组以及不同类型的程序代码进行私有补全模型训练,生成不同群组下的不同类型的子私有补全模型,最后在进行程序代码研发时,根据待补全程序代码的内容,通过机器学习的方式识别出其属于的群组以及类型,并自动调用对应的子私有补全模型执行代码补全操作,从而提高代码补全的推送精准度,提升程序代码的编写效率。
下面对步骤S101至步骤S103分别进行详细说明。
图2为本申请实施例实现程序代码智能补全方法的一具体实施例。
一实施例中,参见图2,所述根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识,包括:
S201:对所述待补全程序代码数字化后执行嵌入操作,得到对应的待分类向量;
S202:将所述待分类向量输入预先训练的双向长短记忆网络模型,得到所述待补全程序代码中各词汇的上文信息、当前词信息及下文信息;
S203:将所述上文信息、当前词信息及下文信息输入卷积神经网络,生成当前词向量;
S204:对各当前词向量进行拼接后导入全连接层进行分类,得到所述待补全程序代码对应的群组类型标识;其中,所述群组类型标识用于表示所述待补全程序代码对应的代码群组与代码类型;每个代码群组包括多个代码类型。
可以理解的是,在本申请实施例中,通过嵌入(Embedding)技术将预处理后的数据集中的各词汇ID转为一组可指定维度(比如256、300、768等)的每个元素都是0到1之间的小数组成的向量,例如:[0.77733829,0.10203975,0.23838274……0.87448324]。一般来说维度越大效果越好,但计算量也越大。接下来,将转换为向量集的数据集导入预先训练的双向长短记忆网络模型中进行计算,提取出数据集中每个程序样本中每一个词的上文信息(left-context)、当前词信息及下文信息(right-context)。例如:某样本程序共R个词汇,第N个词汇的上文信息为正向LSTM层第N-1词汇信息,下文信息为反向LSTM层第N+1词汇信息。分别将每个词汇的上文信息(left-context)、当前词信息及下文信息(right-context)一起导入卷积层,进行一次3通道的一维卷积,得到一个当前词汇的向量信息。最后,将每个样本程序的每个词汇的向量信息,通过max-pooling方式进行组合拼接,并将所得的结果导入全连接层(MLP)进行分类,得到待补全程序代码对应的群组类型标识。
其中,双向LSTM一种循环神经网络(RNN)的变体,它在处理序列数据时能够同时考虑上下文信息。与传统的单向LSTM只能从前向后处理序列数据不同,双向LSTM还引入了一个反向的LSTM层,从而能够从后向前处理序列数据。
卷积神经网络是一种特殊的神经网络,它主要用于图像与语音等数据的处理和识别。卷积神经网络通过卷积操作与池化操作来提取数据的特征,然后通过全连接层执行分类或回归等任务。
其中,卷积操作是卷积神经网络的核心操作,它通过滑动一个卷积核在输入数据上提取特征。卷积操作可以有效地减少数据的维度与参数量,从而提高模型的泛化能力与训练效率。
池化操作是卷积神经网络中另一个重要的操作,它通过对卷积结果进行降采样来减小数据的维度与复杂度。常见的池化操作包括最大池化与平均池化等。
从上述描述可知,本申请提供的程序代码智能补全方法,能够根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识。
图3为本申请实施例实现程序代码智能补全方法的一具体实施例。
一实施例中,参见图3,预先训练双向长短记忆网络模型的步骤,包括:
S301:利用历史程序代码构建第一训练集文件;
S302:根据所述第一训练集文件中的数据内容创建词表与类别表;其中,所述词表包括词汇编号与词汇频次,所述类别表包括类别编号;
S303:将所述词表与类别表输入原始双向长短记忆网络模型进行训练,得到所述训练的双向长短记忆网络模型。
可以理解的是,如前所述,训练双向长短记忆网络模型,首先需要构建数据集,按照前述方法将程序样本分为训练集、验证集及测试集。
例:项目中包含两个应用A、B。应用A分为群组a1、a2。群组a1代码库中包含联机程序(online)、批量程序(batch)。群组a2代码库中包含联机程序(online)、路由程序(router)。应用B中包含群组b1。群组b1代码库中包含批量程序(batch),数据库脚本(db)。
可将上述项目分为“a1-online”、“a1-batch”、“a2-online”、“a2-router”、“b1-batch”、“b1-db”6个类型每个类型随机选取60个程序样本。其中40个程序样本做为训练集(train)用于模型训练,另外10个样本做为验证集(val)用于训练过程中评估模型性能,10个样本为测试集(test)用于训练结束后评估模型性能。
将用程序类型标记样本程序并整合为train.txt、val.txt、test.txt数据集文件。
接下来,对数据集进行预处理操作:
首先,根据训练集文件(train.txt)内容创建词表。词表通过训练集文件词汇全集构建,词表属性除了词汇还包括词汇ID和词汇出现频次。词汇ID用于将数据集中词汇映射为数字索引,方便模型操作。词汇频率可以有助于模型提取关键信息。
其次,根据训练集文件(train.txt)内容创建类别表。类别表通过训练集文件类别全集构建,词表属性除了程序类别还包括类别ID。类别ID用于将数据集中程序类别映射为数字索引,方便模型操作。
具体实施时,可以将词表与类别表输入原始双向长短记忆网络模型进行训练,得到训练完成的双向长短记忆网络模型。训练过程可以参照现有的人工智能机器学习方法进行。
从上述描述可知,本申请提供的程序代码智能补全方法,能够预先训练双向长短记忆网络模型。
一实施例中,在将所述词表与类别表输入原始双向长短记忆网络模型进行训练前,还包括:
对所述词表与类别表进行预处理操作;其中,所述预处理操作包括:低频词过滤。
可以理解的是,将数据集映射变形为词汇id以及类别id表示,并且可以通过低频词过滤等一系列预处理操作以提升数据质量。其中,低频词过滤是指:将词表中出现词频低于阈值(可指定,例如小于5次)的词从训练集中剔除,以此减少数据噪声,节省计算资源,提升模型的训练效果。
从上述描述可知,本申请提供的程序代码智能补全方法,能够对所述词表与类别表进行预处理操作。
图4为本申请实施例实现程序代码智能补全方法的一具体实施例。
一实施例中,参见图4,预先构建私有补全模型集合的步骤,包括:
S401:利用所述历史程序代码构建第二数据集文件;其中,所述历史程序代码涉及各代码群组与代码类型;
S402:将所述第二数据集文件输入原始神经网络模型,并基于定制Transformer的多层神经网络训练所述原始神经网络模型,得到所述私有补全模型;其中,每一代码群组下的每一代码类型对应一种私有补全模型;
S403:汇聚所述私有补全模型,得到所述私有补全模型集合。
可以理解的是,首先,利用历史程序代码分别构建各种类程序对应的数据集文件。所谓各种类程序,是指各代码群组下的各代码类型。其中,数据集包括程序代码。程序代码可以是经过处理后使用双行平行序列表示的词素序列。其中,双行平行序列包括类型行Type line和令牌行Token line。一般地,Type line用于指示程序代码的结构化语法信息,Token line用于指示所述程序代码的语义信息。
接下来,将上述各类别的数据集文件输入原始神经网络模型(尚未经过训练的神经网络模型),并基于定制Transformer的多层神经网络训练该原始神经网络模型,得到各种类程序对应的私有补全模型。在本申请实施例中,每一代码群组下的每一代码类型对应一种私有补全模型。
其中,上述将数据集输入原始神经网络模型,还可以包括:构建词汇表,词汇表包括类型Type词汇表和令牌Token词汇表,Type词汇表通过Type词汇全集构建,Token词汇表中索引对应的键值不固定;根据词汇表将训练数据中的词素序列映射为整数序列,将整数序列输入神经网络模型。
最后,汇聚所有的私有补全模型,得到私有补全模型集合,并将训练好的私有补全模型打上对应的程序类别标签,即标注某私有补全模型对应于哪个代码群组下的哪个代码类型,以便后续开发人员编写程序代码时可以根据程序代码对应的群组类型标识进行调用。
从上述描述可知,本申请提供的程序代码智能补全方法,能够构建私有补全模型集合。
图5为本申请实施例实现程序代码智能补全方法的一具体实施例。
一实施例中,参见图5,所述根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型,包括:
S501:从所述群组类型标识提取群组标识,并根据所述群组标识确定所述待补全程序代码对应的代码群组;
S502:从所述群组类型标识提取类型标识,并根据所述类型标识确定所述待补全程序代码对应的代码类型;
S503:根据所述群组标识在所述私有补全模型集合中进行群组匹配,确定该代码群组对应的多个候选子私有补全模型;
S504:根据所述类型标识从多个候选子私有补全模型中选取所述待补全程序代码适配的子私有补全模型。
可以理解的是,一般地,群组类型标识既包括待补全程序代码对应的代码群组信息,有包括待补全程序代码对应的代码类型信息。例如,某待补全程序代码的群组标识为a1,类型标识为online,其群组类型标识为“a1-online”。根据其群组类型标识可以找到a1群组下,online类型对应的子私有补全模型。
从上述描述可知,本申请提供的程序代码智能补全方法,能够根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型。
基于同一发明构思,本申请实施例还提供了一种程序代码智能补全装置,可以用于实现上述实施例所描述的方法,如下面的实施例所述。由于程序代码智能补全装置解决问题的原理与程序代码智能补全方法相似,因此程序代码智能补全装置的实施可以参见基于软件性能基准确定方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
一实施例中,参见图6,为了能够根据待补全程序代码的内容识别出其属于的群组以及类型,并自动调用对应的子私有补全模型进行代码补全,提高代码补全的精准度,本申请提供一种程序代码智能补全装置,包括:群组类型识别单元601、补全模型选取单元602及代码补全操作单元603。
群组类型识别单元601,用于根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
补全模型选取单元602,用于根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
代码补全操作单元603,用于利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
一实施例中,参见图7,所述群组类型识别单元601,包括:分类向量生成模块701、词汇信息生成模块702、向量组合模块703及群组类型标识确定模块704。
分类向量生成模块701,用于对所述待补全程序代码数字化后执行嵌入操作,得到对应的待分类向量;
词汇信息生成模块702,用于将所述待分类向量输入预先训练的双向长短记忆网络模型,得到所述待补全程序代码中各词汇的上文信息、当前词信息及下文信息;
向量组合模块703,用于将所述上文信息、当前词信息及下文信息输入卷积神经网络,生成当前词向量;
群组类型标识确定模块704,用于对各当前词向量进行拼接后导入全连接层进行分类,得到所述待补全程序代码对应的群组类型标识。
一实施例中,参见图8,补全模型选取单元602,包括:
训练文件构建模块801,用于利用历史程序代码构建第一训练集文件;
词表类表创建模块802,用于根据所述第一训练集文件中的数据内容创建词表与类别表;其中,所述词表包括词汇编号与词汇频次,所述类别表包括类别编号;
网络模型训练模块803,用于将所述词表与类别表输入原始双向长短记忆网络模型进行训练,得到所述训练的双向长短记忆网络模型。
一实施例中,补全模型选取单元602,用于:
对所述词表与类别表进行预处理操作;其中,所述预处理操作包括低频词过滤。
一实施例中,参见图9,补全模型选取单元602,包括:
第二训练文件构建模块901,用于利用所述历史程序代码构建第二数据集文件;其中,所述历史程序代码涉及各代码群组与代码类型;
补全模型构建模块902,用于将所述第二数据集文件输入原始神经网络模型,并基于定制Transformer的多层神经网络训练所述原始神经网络模型,得到所述私有补全模型;其中,每一代码群组下的每一代码类型对应一种私有补全模型;
补全模型汇聚模块903,用于汇聚所述私有补全模型,得到所述私有补全模型集合。
一实施例中,参见图10,所述补全模型选取单元602,包括:群组选取模块1001、类型选取模块1002、候选模型确定模块1003及补全模型确定模块1004。
群组选取模块1001,用于从所述群组类型标识提取群组标识,并根据所述群组标识确定所述待补全程序代码对应的代码群组;
类型选取模块1002,用于从所述群组类型标识提取类型标识,并根据所述类型标识确定所述待补全程序代码对应的类型;
候选模型确定模块1003,用于根据所述群组标识在所述私有补全模型集合中进行群组匹配,确定该代码群组对应的多个候选子私有补全模型;
补全模型确定模块1004,用于根据所述类型标识从多个候选子私有补全模型中选取所述待补全程序代码适配的子私有补全模型。
从硬件层面来说,为了能够根据待补全程序代码的内容识别出其属于的群组以及类型,并自动调用对应的子私有补全模型进行代码补全,提高代码补全的精准度,本申请提供一种用于实现所述程序代码智能补全方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:
处理器(Processor)、存储器(Memory)、通讯接口(Communications Interface)和总线;其中,所述处理器、存储器、通讯接口通过所述总线完成相互间的通讯;所述通讯接口用于实现所述程序代码智能补全装置与核心业务系统、用户终端以及相关数据库等相关设备之间的信息传输;该逻辑控制器可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该逻辑控制器可以参照实施例中的程序代码智能补全方法的实施例,以及程序代码智能补全装置的实施例进行实施,其内容被合并于此,重复之处不再赘述。
可以理解的是,所述用户终端可以包括智能手机、平板电子设备、网络机顶盒、便携式计算机、台式电脑、个人数字助理(PDA)、车载设备、智能穿戴设备等。其中,所述智能穿戴设备可以包括智能眼镜、智能手表、智能手环等。
在实际应用中,程序代码智能补全方法的部分可以在如上述内容所述的电子设备侧执行,也可以所有的操作都在所述客户端设备中完成。具体可以根据所述客户端设备的处理能力,以及用户使用场景的限制等进行选择。本申请对此不作限定。若所有的操作都在所述客户端设备中完成,所述客户端设备还可以包括处理器。
上述的客户端设备可以具有通讯模块(即通讯单元),可以与远程的服务器进行通讯连接,实现与所述服务器的数据传输。所述服务器可以包括任务调度中心一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与任务调度中心服务器有通讯链接的第三方服务器平台的服务器。所述的服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。
图11为本申请实施例的电子设备9600的系统构成的示意框图。如图11所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图11是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
一实施例中,程序代码智能补全方法功能可以被集成到中央处理器9100中。其中,中央处理器9100可以被配置为进行如下控制:
S101:根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
S102:根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
S103:利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
从上述描述可知,本申请提供的程序代码智能补全方法及装置,能够将程序代码按照不同群组以及不同类型代码进行分类,然后通过补全模型训练引擎分别对不同群组以及不同类型的程序代码进行私有补全模型训练,生成不同群组下的不同类型的子私有补全模型,最后在进行程序代码研发时,根据待补全程序代码的内容,通过机器学习的方式识别出其属于的群组以及类型,并自动调用对应的子私有补全模型执行代码补全操作,从而提高代码补全的推送精准度,提升程序代码的编写效率。
在另一个实施方式中,程序代码智能补全装置可以与中央处理器9100分开配置,例如可以将数据复合传输装置程序代码智能补全装置配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现程序代码智能补全方法的功能。
如图11所示,该电子设备9600还可以包括:通讯模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图11中所示的所有部件;此外,电子设备9600还可以包括图11中没有示出的部件,可以参考现有技术。
如图11所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。
其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器9140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通讯功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通讯模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通讯模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通讯终端的情况相同。
基于不同的通讯技术,在同一电子设备中,可以设置有多个通讯模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通讯模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
本申请的实施例还提供能够实现上述实施例中的执行主体为服务器或客户端的程序代码智能补全方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的执行主体为服务器或客户端的程序代码智能补全方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
S101:根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
S102:根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
S103:利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
从上述描述可知,本申请提供的程序代码智能补全方法及装置,能够将程序代码按照不同群组以及不同类型代码进行分类,然后通过补全模型训练引擎分别对不同群组以及不同类型的程序代码进行私有补全模型训练,生成不同群组下的不同类型的子私有补全模型,最后在进行程序代码研发时,根据待补全程序代码的内容,通过机器学习的方式识别出其属于的群组以及类型,并自动调用对应的子私有补全模型执行代码补全操作,从而提高代码补全的推送精准度,提升程序代码的编写效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种程序代码智能补全方法,其特征在于,包括:
根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
2.根据权利要求1所述的程序代码智能补全方法,其特征在于,所述根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识,包括:
对所述待补全程序代码数字化后执行嵌入操作,得到对应的待分类向量;
将所述待分类向量输入预先训练的双向长短记忆网络模型,得到所述待补全程序代码中各词汇的上文信息、当前词信息及下文信息;
将所述上文信息、当前词信息及下文信息输入卷积神经网络,生成当前词向量;
对各当前词向量进行拼接后导入全连接层进行分类,得到所述待补全程序代码对应的群组类型标识;其中,所述群组类型标识用于表示所述待补全程序代码对应的代码群组与代码类型;每个代码群组包括多个代码类型。
3.根据权利要求2所述的程序代码智能补全方法,其特征在于,预先训练双向长短记忆网络模型的步骤,包括:
利用历史程序代码构建第一训练集文件;
根据所述第一训练集文件中的数据内容创建词表与类别表;其中,所述词表包括词汇编号与词汇频次,所述类别表包括类别编号;
将所述词表与类别表输入原始双向长短记忆网络模型进行训练,得到所述训练的双向长短记忆网络模型。
4.根据权利要求3所述的程序代码智能补全方法,其特征在于,在将所述词表与类别表输入原始双向长短记忆网络模型进行训练前,还包括:
对所述词表与类别表进行预处理操作;其中,所述预处理操作包括低频词过滤。
5.根据权利要求3所述的程序代码智能补全方法,其特征在于,预先构建私有补全模型集合的步骤,包括:
利用所述历史程序代码构建第二数据集文件;其中,所述历史程序代码涉及各代码群组与代码类型;
将所述第二数据集文件输入原始神经网络模型,并基于定制Transformer的多层神经网络训练所述原始神经网络模型,得到所述私有补全模型;其中,每一代码群组下的每一代码类型对应一种私有补全模型;
汇聚所述私有补全模型,得到所述私有补全模型集合。
6.根据权利要求1所述的程序代码智能补全方法,其特征在于,所述根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型,包括:
从所述群组类型标识提取群组标识,并根据所述群组标识确定所述待补全程序代码对应的代码群组;
从所述群组类型标识提取类型标识,并根据所述类型标识确定所述待补全程序代码对应的代码类型;
根据所述群组标识在所述私有补全模型集合中进行群组匹配,确定该代码群组对应的多个候选子私有补全模型;
根据所述类型标识从多个候选子私有补全模型中选取所述待补全程序代码适配的子私有补全模型。
7.一种程序代码智能补全装置,其特征在于,包括:
群组类型识别单元,用于根据预设的代码群组与代码类型对待补全程序代码进行分类,得到所述待补全程序代码对应的群组类型标识;
补全模型选取单元,用于根据所述群组类型标识从预先构建的私有补全模型集合中选取所述待补全程序代码适配的子私有补全模型;
代码补全操作单元,用于利用适配的子私有补全模型对所述待补全程序代码进行程序代码智能补全操作。
8.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至6任一项所述的程序代码智能补全方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6任一项所述的程序代码智能补全方法的步骤。
10.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1至6任一项所述的程序代码智能补全方法的步骤。
CN202311559278.8A 2023-11-21 2023-11-21 一种程序代码智能补全方法及装置 Pending CN117453273A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311559278.8A CN117453273A (zh) 2023-11-21 2023-11-21 一种程序代码智能补全方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311559278.8A CN117453273A (zh) 2023-11-21 2023-11-21 一种程序代码智能补全方法及装置

Publications (1)

Publication Number Publication Date
CN117453273A true CN117453273A (zh) 2024-01-26

Family

ID=89594818

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311559278.8A Pending CN117453273A (zh) 2023-11-21 2023-11-21 一种程序代码智能补全方法及装置

Country Status (1)

Country Link
CN (1) CN117453273A (zh)

Similar Documents

Publication Publication Date Title
US11669744B2 (en) Regularized neural network architecture search
US9892414B1 (en) Method, medium, and system for responding to customer requests with state tracking
CN110795552B (zh) 一种训练样本生成方法、装置、电子设备及存储介质
CN109514586B (zh) 实现智能客服机器人的方法及系统
US9672467B2 (en) Systems and methods for creating and implementing an artificially intelligent agent or system
CN111081280B (zh) 与文本无关的语音情感识别方法及装置、用于识别情感的算法模型的生成方法
CN110956956A (zh) 基于策略规则的语音识别方法及装置
CN111428010A (zh) 人机智能问答的方法和装置
CN111182162A (zh) 基于人工智能的电话质检方法、装置、设备和存储介质
CN111339309B (zh) 一种用户意图的语料扩展方法和系统
CN111666416A (zh) 用于生成语义匹配模型的方法和装置
CN111159358A (zh) 多意图识别训练和使用方法及装置
CN111950295A (zh) 一种训练自然语言处理模型的方法和系统
CN113505198A (zh) 关键词驱动的生成式对话回复方法、装置及电子设备
CN114706945A (zh) 意图识别方法、装置、电子设备及存储介质
CN115510194A (zh) 问答语句检索方法、装置、电子设备及存储介质
CN113627194B (zh) 信息抽取方法及装置、通信消息分类方法及装置
CN111143529A (zh) 一种与对话机器人进行对话的方法与设备
CN117453273A (zh) 一种程序代码智能补全方法及装置
CN114595318A (zh) 一种客服回复质量评价方法及系统
CN112948251A (zh) 软件自动测试方法及装置
CN117972222B (zh) 基于人工智能的企业信息检索方法及装置
CN113782022B (zh) 基于意图识别模型的通信方法、装置、设备及存储介质
CN117743698B (zh) 基于ai大模型的网络恶意写手识别方法及系统
CN116933800B (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