一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

代码的补全方法及其系统、电子设备及存储介质与流程

2022-09-14 22:42:56 来源:中国专利 TAG:


1.本发明涉及人工智能领域,具体而言,涉及一种代码的补全方法及其系统、电子设备及存储介质。


背景技术:

2.随着人工智能技术的快速发展,深度学习技术能够为各行各业提供智能化转型支撑,在智能化研发领域,智能辅助编程场景下人工智能技术带来的融合创新正成为加速软件落地和技术迭代的重要途径。在此场景下,深度学习模型为编码过程中的代码补全提示提供实时推演的结果,利用深度学习的高预测精度、长补全结果等优势,能够大幅提高开发人员编码效率、提升整体编码体验。
3.针对智能辅助编程场景,往往采用encoder-decoder模型(编码器-解码器模型)框架作为底层架构来构建代码补全模型。相关技术中,对于代码补全模型的具体结构一般有两种:(1)基于rnn(循环神经网络)神经网络(如,lstm(长短时记忆神经网络)、bilstm(双向长短时记忆神经网络)等长短时记忆神经网络)来构建补全模型;(2)基于transformer(一种神经网络结构)神经网络构建补全模型。
4.然而,虽然两种补全模型实现方式均可以使用预训练模型内的语义编码信息实现代码补全预测推演,但其预测补全代码都是仅根据语义环境与编码场景进行模型推演,缺少编程语言本身语法规则约束,容易出现提示的代码过长、补全提示内容不符合编程语言语法规范、提示重复代码(例如,代码内已经定义了变量int value1=1,依然提示定义语句int value=1)和提示代码长句句中定义元素缺失导致编译不通过(例如,for循环缺乏相应循环判断条件)等问题,从而使得模型提示的代码需要消耗更长时间去仔细甄别、挑选和修改提示内容,导致开发人员编码成本提高、编码补全准确率低以及编程效率低。
5.针对上述的问题,目前尚未提出有效的解决方案。


技术实现要素:

6.本发明实施例提供了一种代码的补全方法及其系统、电子设备及存储介质,以至少解决相关技术中得到的代码补全结果不符合语法规则约束,导致补充准确率较低的技术问题。
7.根据本发明实施例的一个方面,提供了一种代码的补全方法,包括:接收代码补全请求,其中,所述代码补全请求携带有当前编码环境;对所述当前编码环境进行分析,得到综合编码信息,并将所述综合编码信息输入至预设补全模型中进行代码补全,得到补全结果;基于预设校验模型,对所述补全结果进行校验,得到校验后的多个代码补全结果以及每个所述代码补全结果的权重值;基于每个所述代码补全结果的权重值,对所述多个代码补全结果进行排序,并按照排序结果,将所述代码补全结果渲染至预设代码补全候选框中。
8.可选地,在接收代码补全请求之前,还包括:获取代码数据集,并对所述代码数据集进行清理,得到目标代码数据集;提取所述目标代码数据集中的语义信息摘要;基于所述
语义信息摘要,对所述目标代码数据集进行拆分,得到训练数据集和验证数据集;采用预设神经网络,对所述训练数据集进行训练,得到初始补全模型;基于所述验证数据集,对所述初始补全模型进行校验,得到校验结果,其中,所述校验结果携带有准确率;在所述准确率大于预设阈值的情况下,确定所述初始补全模型训练完成,得到所述预设补全模型。
9.可选地,对所述当前编码环境进行分析,得到综合编码信息的步骤,包括:对所述当前编码环境进行分析,得到当前编码环境信息,其中,所述当前编码环境信息包括下述至少之一:编程语言、编码场景、编程架构;提取所述当前编码环境的上下文编码信息,其中,所述上下文编码信息至少包括:当前编码行的代码信息、当前编码文件的代码信息;基于所述当前编码环境信息和所述上下文编码信息,得到所述综合编码信息。
10.可选地,在基于预设校验模型,对所述补全结果进行校验之前,还包括:对预设代码进行语法预编译,得到编程语言规则摘要;基于所述编程语言规则摘要,采用预设隔离策略,建立所述预设校验模型,其中,所述预设校验模型包括:语法规则向量。
11.可选地,基于预设校验模型,对所述补全结果进行校验的步骤,包括:在代码补全过程中形成的向量空间中添加所述语法规则向量,得到校验向量空间;采用预设降维策略,对所述校验向量空间进行降维操作,得到降维向量空间;计算所述语法规则向量与所述降维向量空间中的补全代码向量之间的相关度;将小于预设相关度阈值的相关度指示的补全代码向量从所述降维向量空间中删除,得到目标降维向量空间;将所述目标降维向量空间升维到降维之前的维度,得到目标向量空间;基于所述目标向量空间,得到所述校验后的多个代码补全结果。
12.可选地,在得到校验后的多个代码补全结果以及每个所述代码补全结果的权重值之后,还包括:获取预设编译策略,其中,所述预设编译策略至少包括:编译时类型检查策略、运行时类型检查策略;基于所述预设编译策略,对所述多个代码补全结果进行编译校验,其中,所述编译校验的类型包括:函数参数检验、参数名重复检验、类名重复检验、参数类型校验。
13.根据本发明实施例的另一方面,还提供了一种代码的补全系统,包括:编码场景分析模块,用于接收代码补全请求,并对所述代码补全请求中携带的当前编码环境进行分析,得到综合编码信息,将所述综合编码信息传送至代码补全模型推演模块;代码补全模型推演模块,与所述编码场景分析模块连接,用于接收所述综合编码信息,将所述综合编码信息输入至预设补全模型中进行代码补全,得到补全结果,并基于预设校验模型,对所述补全结果进行校验,得到校验后的多个代码补全结果以及每个所述代码补全结果的权重值;语法信息校验模块,与所述代码补全模型推演模块以及补全结果输出模块连接,用于向所述代码补全模型推演模块下发所述预设校验模型,并向所述补全结果输出模块下发预设编译策略;补全结果输出模块,与所述代码补全模型推演模块连接,用于接收所述预设编译策略,并基于所述预设编译策略,对所述多个代码补全结果进行编译校验,将编译校验后的代码补全结果以及每个所述代码补全结果的权重值传送至渲染模块;渲染模块,与所述补全结果输出模块连接,用于基于每个所述代码补全结果的权重值,对所述多个代码补全结果进行排序,并按照排序结果,将所述代码补全结果渲染至预设代码补全候选框中。
14.可选地,所述补全系统还包括:代码补全模型训练模块,与所述代码补全模型推演模块连接,用于基于代码数据集,训练出所述预设补全模型,并将所述预设补全模型下发至
所述代码补全模型推演模块。
15.根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述所述的代码的补全方法。
16.根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述所述的代码的补全方法。
17.在本公开中,接收代码补全请求,对当前编码环境进行分析,得到综合编码信息,并将综合编码信息输入至预设补全模型中进行代码补全,得到补全结果,基于预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值,基于每个代码补全结果的权重值,对多个代码补全结果进行排序,并按照排序结果,将代码补全结果渲染至预设代码补全候选框中。在本技术中,可通过将对当前编码环境分析得到的综合编码信息输入至预设补全模型中进行代码补全推演,得到补全结果,之后通过预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值,然后按照权重值对代码补全结果进行排序,将排序后的代码补全结果渲染至预设代码补全候选框中,能够使得代码补全结果符合语法规则约束,从而可以有效提升补全代码的质量、可执行率以及准确率,进而解决了相关技术中得到的代码补全结果不符合语法规则约束,导致补充准确率较低的技术问题。
附图说明
18.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
19.图1是根据本发明实施例的一种可选的代码的补全方法的流程图;
20.图2是根据本发明实施例的一种可选的代码的补全系统的示意图;
21.图3是根据本发明实施例的一种可选的代码补全模型训练模块1结构的示意图;
22.图4是根据本发明实施例的一种可选的编码场景分析模块2结构的示意图;
23.图5是根据本发明实施例的一种可选的代码补全模型推演模块3结构的示意图;
24.图6是根据本发明实施例的一种可选的语法信息校验模块4结构的示意图;
25.图7是根据本发明实施例的一种可选的补全结果输出模块5结构的示意图;
26.图8是根据本发明实施例的一种可选的渲染模块6结构的示意图;
27.图9是根据本发明实施例的一种可选的代码补全请求处理的流程图;
28.图10是根据本发明实施例的一种用于代码的补全方法的电子设备(或移动设备)的硬件结构框图。
具体实施方式
29.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范
围。
30.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
31.为便于本领域技术人员理解本发明,下面对本发明各实施例中涉及的部分术语或名词做出解释:
32.循环神经网络(recurrent neural network,简称rnn),是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接为递归神经网络(recursive neural network)。
33.长短时记忆神经网络(long short-term memory,简称lstm),是一种时间循环神经网络,用于解决一般的rnn存在的问题,一般的rnn都具有一种重复神经网络模块并以链式形式相连。
34.双向长短时记忆神经网络(bidirectional long short-term memory,简称bilstm),该网络由前向lstm与后向lstm组合而成,用于深层次编码信息提取。
35.注意力机制(attention机制),即一种能让模型对重要信息重点关注并充分学习、提取其中信息的技术,注意力机制适用于任何序列模型中。
36.编码器-解码器(encoder-decoder)网络模型,是深度学习中常见的一种模型框架,编码器和解码器部分可以是任意的文字、语音、图像和视频等,模型则可以采用cnn、rnn、brnn(双向循环神经网络)和gru(循环神经网络)等多种结构,为多种网络模型提供end-to-end(端对端)学习框架。
37.transformer网络模型,是一种新的神经网络结构,其仅基于注意力机制,抛弃了传统的循环或卷积神经网络结构,能够使用全attention结构代替lstm模型。
38.高维数据可视化,当对高维数据进行数据分析的时候,因数据无法在高维空间被清晰分类而使用数据降维算法,以此让数据在低维空间的特征分布清晰可见。
39.代码补全模型:指使用深度学习网络训练的包含代码信息与当前编码场景语义信息的人工智能模型,其主要作用是在编码时提供实时代码提示补全服务。
40.集成开发环境(integrated development environment,简称ide),是用于提供程序开发环境的应用程序,包括代码编辑器、编译器、调试器和图形用户界面等工具。
41.需要说明的是,本公开中的代码的补全方法及其系统可用于人工智能领域在对代码进行补全的情况下,也可用于除人工智能领域之外的任意领域在对代码进行补全的情况下,本公开中对代码的补全方法及其系统的应用领域不做限定。
42.需要说明的是,本公开所涉及的相关信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。例如,本系统和相关用户或机构间设置有接口,在获取相关信息之前,需要通过接口向前述的用户或机构发送获取请求,并在接收到前述的用户或机构
反馈的同意信息后,获取相关信息。
43.本发明下述各实施例可应用于各种对代码进行补全的系统/应用/设备中。本发明提供了一种带有语法检查、能够有效提升补全代码质量、可执行率和准确率的代码补全方法,可以有效为解决相关技术中的代码补全因缺少语义语法检查,代码补全结果存在语法问题无法通过编译,从而需要反复修订检查的问题。
44.本发明通过代码语法规则预训练模型(即预设校验模型),能够解决补全代码仅符合自然语义信息,不符合编程语言语法的问题(例如,for循环语法错误、类作用域定义混乱(类似于编码时ide自动提示的语法错误红线)等),然后,通过预设语法规则(即预设编译策略),能够解决变量定义合法但变量名重复、函数参数类型缺失或数量不对、缺少返回值等代码语法规则预训练模型无法排除的编译问题(类似于编译时提示报错,但编写时发现不了的问题)。
45.本发明下述各实施例通过使用上述代码语法规则预训练模型以及预设语法规则,可以有效解决代码补全预测提供的结果缺乏编程语言自身语法约束检查,需要反复修改、认真甄别,导致开发人员编码成本提高、编码补全准确率低和编程效率低的问题。
46.下面结合各个实施例来详细说明本发明。
47.实施例一
48.根据本发明实施例,提供了一种代码的补全方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
49.图1是根据本发明实施例的一种可选的代码的补全方法的流程图,如图1所示,该方法包括如下步骤:
50.步骤s101,接收代码补全请求,其中,代码补全请求携带有当前编码环境。
51.步骤s102,对当前编码环境进行分析,得到综合编码信息,并将综合编码信息输入至预设补全模型中进行代码补全,得到补全结果。
52.步骤s103,基于预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值。
53.步骤s104,基于每个代码补全结果的权重值,对多个代码补全结果进行排序,并按照排序结果,将代码补全结果渲染至预设代码补全候选框中。
54.通过上述步骤,可以接收代码补全请求,对当前编码环境进行分析,得到综合编码信息,并将综合编码信息输入至预设补全模型中进行代码补全,得到补全结果,基于预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值,基于每个代码补全结果的权重值,对多个代码补全结果进行排序,并按照排序结果,将代码补全结果渲染至预设代码补全候选框中。在本发明实施例中,可通过将对当前编码环境分析得到的综合编码信息输入至预设补全模型中进行代码补全推演,得到补全结果,之后通过预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值,然后按照权重值对代码补全结果进行排序,将排序后的代码补全结果渲染至预设代码补全候选框中,能够使得代码补全结果符合语法规则约束,从而可以有效提升补全代码的质量、可执行率以及准确率,进而解决了相关技术中得到的代码补
全结果不符合语法规则约束,导致补充准确率较低的技术问题。
55.下面结合上述各步骤对本发明实施例进行详细说明。
56.在本发明实施例中,一种可选地,在接收代码补全请求之前,还包括:获取代码数据集,并对代码数据集进行清理,得到目标代码数据集;提取目标代码数据集中的语义信息摘要;基于语义信息摘要,对目标代码数据集进行拆分,得到训练数据集和验证数据集;采用预设神经网络,对训练数据集进行训练,得到初始补全模型;基于验证数据集,对初始补全模型进行校验,得到校验结果,其中,校验结果携带有准确率;在准确率大于预设阈值的情况下,确定初始补全模型训练完成,得到预设补全模型。
57.在本发明实施例中,可以通过代码补全模型训练模块对标准代码数据集进行数据清理,然后提取语义信息摘要,之后依据语义信息摘要,拆分训练数据集和验证数据集(即可以先获取代码数据集,并对代码数据集进行清理,得到目标代码数据集,提取目标代码数据集中的语义信息摘要,基于语义信息摘要,对目标代码数据集进行拆分,得到训练数据集和验证数据集),之后,可以采用预设神经网络对训练数据集进行训练,得到初始补全模型(例如,可以使用encoder-decoder网络框架以及使用bilstm神经网络训练初始补全模型),可以基于验证数据集,对训练出的初始补全模型进行参数调优与准确率校验,确保补全模型在验证数据集中准确率表现大于预设阈值(如,预设阈值可设为90%)(即在准确率大于预设阈值的情况下,确定初始补全模型训练完成,得到预设补全模型),然后,将符合检验标准的补全模型保存并输出至代码补全模型推演模块。
58.步骤s101,接收代码补全请求,其中,代码补全请求携带有当前编码环境。
59.在本发明实施例中,可以通过编码场景分析模块接收代码补全请求,该代码补全请求中携带有当前编码环境,之后,编码场景分析模块可以对当前编码环境进行分析。
60.步骤s102,对当前编码环境进行分析,得到综合编码信息,并将综合编码信息输入至预设补全模型中进行代码补全,得到补全结果。
61.可选地,对当前编码环境进行分析,得到综合编码信息的步骤,包括:对当前编码环境进行分析,得到当前编码环境信息,其中,当前编码环境信息包括下述至少之一:编程语言、编码场景、编程架构;提取当前编码环境的上下文编码信息,其中,上下文编码信息至少包括:当前编码行的代码信息、当前编码文件的代码信息;基于当前编码环境信息和上下文编码信息,得到综合编码信息。
62.在本发明实施例中,编码场景分析模块可以对当前编码环境进行分析,提取当前编码环境信息(当前编码环境信息可以包括:当前编码为何种编程语言(例如,java、python等)、何种编码场景(例如,单元测试等)、何种编程架构(例如,springboot(一种编码框架)等)),然后可以提取当前编码环境的上下文编码信息,包括:对当前在编辑的行的编码文本信息进行语义信息提取(即提取当前编码行的代码信息),对当前在编辑的整个代码文件进行语义信息提取(即提取当前编码文件的代码信息),之后可以依据当前编码环境信息和上下文编码信息,得到综合编码信息。
63.可选地,在基于预设校验模型,对补全结果进行校验之前,还包括:对预设代码进行语法预编译,得到编程语言规则摘要;基于编程语言规则摘要,采用预设隔离策略,建立预设校验模型,其中,预设校验模型包括:语法规则向量。
64.在本发明实施例中,可以通过语法信息校验模块根据标准代码(即预设代码)进行
语法预编译,得到编程语言规则摘要,之后可以基于编程语言规则摘要,采用预设隔离策略(例如,语法规则向量隔离策略),建立预设校验模型,该预设校验模型包括语法规则向量,然后将该预设校验模型下发至代码补全模型推演模块。
65.步骤s103,基于预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值。
66.可选地,基于预设校验模型,对补全结果进行校验的步骤,包括:在代码补全过程中形成的向量空间中添加语法规则向量,得到校验向量空间;采用预设降维策略,对校验向量空间进行降维操作,得到降维向量空间;计算语法规则向量与降维向量空间中的补全代码向量之间的相关度;将小于预设相关度阈值的相关度指示的补全代码向量从降维向量空间中删除,得到目标降维向量空间;将目标降维向量空间升维到降维之前的维度,得到目标向量空间;基于目标向量空间,得到校验后的多个代码补全结果。
67.在本发明实施例中,代码补全模型推演模块可以基于预设校验模型,对补全结果进行校验,校验过程作用在代码补全模型推演模块的代码补全推演过程中,当补全模型经过encoder编码器编码后,在形成的向量空间中加入编码后的语法规则向量,并针对混合后的校验向量空间,采用预设降维策略(如pca(principal component analysis)降维),进行降维操作(即在代码补全过程中形成的向量空间中添加语法规则向量,得到校验向量空间,采用预设降维策略,对校验向量空间进行降维操作,得到降维向量空间),之后寻找分类相近于语法规则向量的补全代码向量,淘汰其他远离语法规则向量的代码补全向量(即可以通过计算语法规则向量与降维向量空间中的补全代码向量之间的相关度,将小于预设相关度阈值的相关度指示的补全代码向量从降维向量空间中删除,得到目标降维向量空间),然后可以将目标降维向量空间升维到降维之前的维度,得到目标向量空间,并基于目标向量空间,得到校验后的多个代码补全结果,从而可以隔离向量空间内不符合语法规则的补全结果。
68.本实施例通过不同关键字段中的高维数据中的向量在低维可视化的方法,来区别、隔离不符合语法规则的补全代码向量,从而达到使得校验的代码补全结果都符合编程语言语法约束的效果。
69.在本发明实施例中,通过预设校验模型对补全结果进行校验,可以得到校验后的多个代码补全结果以及每个代码补全结果的权重值。
70.可选地,在得到校验后的多个代码补全结果以及每个代码补全结果的权重值之后,还包括:获取预设编译策略,其中,预设编译策略至少包括:编译时类型检查策略、运行时类型检查策略;基于预设编译策略,对多个代码补全结果进行编译校验,其中,编译校验的类型包括:函数参数检验、参数名重复检验、类名重复检验、参数类型校验。
71.在本发明实施例中,在得到校验后的多个代码补全结果以及每个代码补全结果的权重值之后,还可以采用预设编译策略,对已经通过预设校验模型检验过的多个代码补全结果进行编译校验,能够针对预设校验模型中无法检查出的语法错误(例如,和上文有重复变量名定义、符合程序语法逻辑但不符合编译规则的结果)进行再次校验,并将最终校验结果输出于补全结果输出模块。
72.本实施例中,预设编译策略可以是基于xml文件编写的策略,包括但不限于:编译时类型检查策略、运行时类型检查策略等策略,通过该策略可以对代码补全结果进行编译
规则校验,以检测是否存在函数缺少参数、参数名和类名定义重复、参数类型不符合等编译问题(即编译校验的类型包括:函数参数检验、参数名重复检验、类名重复检验、参数类型校验等)。
73.步骤s104,基于每个代码补全结果的权重值,对多个代码补全结果进行排序,并按照排序结果,将代码补全结果渲染至预设代码补全候选框中。
74.在本发明实施例中,可以通过渲染模块接收综合校验后的代码补全结果和每个代码补全结果对应的权重值,之后,可以将代码补全结果按照权重值进行排序(即基于每个代码补全结果的权重值,对多个代码补全结果进行排序),并按照排序结果,将排序后的代码补全结果一个一个渲染至预设代码补全候选框(例如,ide代码补全候选框)中(即解析每个代码补全结果,将解析后的代码补全结果输入至预设候选框模板中),形成从上到下的候选框排列供开发人员选择。
75.本发明实施例中,通过使用预设校验模型以及预设编译策略两种校验方式,可以有效解决代码补全结果缺乏编程语言自身语法约束检查,需要反复修改、认真甄别,从而导致开发人员编码成本提高、编码补全准确率低和编程效率低的问题。相较于现有的代码补全方法,本实施例的代码补全方法具备更高的精确度与更长的补全结果长度,能够提升开发人员开发效率,此外,本实施例的代码补全方法还可以提供更加精确、合乎当前编码场景的代码补全提示,减少错误代码提示,提供更流畅的编码体验。
76.实施例二
77.图2是根据本发明实施例的一种可选的代码的补全系统的示意图,如图2所示,该补全系统可以包括:代码补全模型训练模块1、编码场景分析模块2、代码补全模型推演模块3、语法信息校验模块4、补全结果输出模块5、渲染模块6,其中,
78.代码补全模型训练模块1,与代码补全模型推演模块3连接,用于基于代码数据集,训练出预设补全模型,并将预设补全模型下发至代码补全模型推演模块。
79.编码场景分析模块2,用于接收代码补全请求,并对代码补全请求中携带的当前编码环境进行分析,得到综合编码信息,将综合编码信息传送至代码补全模型推演模块;
80.代码补全模型推演模块3,与编码场景分析模块2连接,用于接收综合编码信息,将综合编码信息输入至预设补全模型中进行代码补全,得到补全结果,并基于预设校验模型,对补全结果进行校验,得到校验后的多个代码补全结果以及每个代码补全结果的权重值;
81.语法信息校验模块4,与代码补全模型推演模块3以及补全结果输出模块5连接,用于向代码补全模型推演模块下发预设校验模型,并向补全结果输出模块下发预设编译策略;
82.补全结果输出模块5,与代码补全模型推演模块3连接,用于接收预设编译策略,并基于预设编译策略,对多个代码补全结果进行编译校验,将编译校验后的代码补全结果以及每个代码补全结果的权重值传送至渲染模块;
83.渲染模块6,与补全结果输出模块5连接,用于基于每个代码补全结果的权重值,对多个代码补全结果进行排序,并按照排序结果,将代码补全结果渲染至预设代码补全候选框中。
84.在本发明实施例中,代码补全模型训练模块1与代码补全模型推演模块3相连,编码场景分析模块2与代码补全模型推演模块3相连,代码补全模型推演模块3与补全结果输
出模块5相连,语法信息校验模块4与代码补全模型推演模块3、补全结果输出模块5相连,补全结果输出模块5与渲染模块6相连,各模块的具体功能如下:
85.代码补全模型训练模块1,可以基于encoder-decoder网络框架的rnn神经网络或者bilstm网络,根据标准代码数据集训练出包含语义信息摘要的代码补全模型,并将代码补全模型输出给代码补全模型推演模块3。
86.编码场景分析模块2,可以内嵌于ide插件中,用于根据当前编码环境与当前编码上下文语义信息等要素,形成综合编码信息。
87.代码补全模型推演模块3,可以内嵌于ide插件中,用于提供代码补全结果,该模块通过接收编码场景分析模块2提供的综合编码信息,并将综合编码信息输入代码补全模型训练模块1训练的代码补全模型中进行代码补全预测,之后输出代码补全结果。
88.本实施例中的综合编码信息包括两部分:(1)当前编码环境信息:包括当前编程语言类型(如,java、python等)、软件架构(如,springboot框架编程等)和编码场景(如编写单元测试等)等信息;(2)编码语义上下文信息:包括当前输入行的代码文本、当前打开代码文件完整代码文本信息。
89.语法信息校验模块4,可以内嵌于ide插件中,用于将语法规则与代码语法预训练模型中的语法约束信息注入代码补全模型推演模块3中,并对代码补全模块生成的代码补全结果提供语法校验,对不符合编程语言语法、语法元素缺失和重复定义等技术性语法错误进行校验,并隔离、淘汰不符合规范的代码补全结果,其中,语法信息校验模块4提供两种校验方式:
90.(1)代码语法预训练模型:该模型可以根据标准代码进行语法预编译,采用语法规则向量隔离的形式,作用在代码补全模型推演模块3的补全模型训练期间,当模型经过encoder编码器编码后,在形成的向量空间中加入编码后的语法规则信息向量,并针对混合后的校验向量空间进行降维操作(如pca操作),寻找分类相近于语法规则信息向量的代码补全向量,淘汰其他远离语法规则信息向量的代码补全向量,通过不同关键字段中的高维数据中的向量在低维可视化的方法来区别、隔离不符合语法规则的代码补全向量,从而达到校验代码补全结果是否符合编程语言语法的效果。
91.(2)语法规则模块:该模块通过预设语法检查规则对已经生成为代码片段或整句的代码补全结果进行校验,针对代码语法预训练模型中无法检查出的语法错误(例如,和上文有重复变量名定义、符合程序语法逻辑但不符合编译规则的结果)进行再校验,并将最终校验结果输出于补全结果输出模块5。
92.补全结果输出模块5,可以内嵌于ide插件中,可以将代码补全模型推演模块3中模型推演的代码补全结果与语法信息校验模块4中的语法规则相校验,筛选掉不符合语法的结果,之后整合输出校验后的一组代码补全结果以及每条补全结果的权重值。
93.渲染模块6,可以内嵌于ide插件中,可以将代码补全结果按照权重值从高到低排序,并通过插件的形式,将排序、校验后的代码补全结果渲染到ide代码补全提示候选框中。
94.图3是根据本发明实施例的一种可选的代码补全模型训练模块1结构的示意图,如图3所示,代码补全模型训练模块1包括:数据集编码单元11、补全模型训练单元12、补全模型校验单元13和补全模型输出单元14,其中,
95.数据集编码单元11,用于对标准代码数据集进行数据清理、语义信息摘要提取和
拆分训练数据集、验证数据集。
96.补全模型训练单元12,用于对训练数据集进行训练,可以使用encoder-decoder网络框架,并使用bilstm神经网络训练代码补全模型。
97.补全模型校验单元13,用于对训练出的代码补全模型进行参数调优与准确率校验,确保代码补全模型在验证数据集中准确率大于预设阈值(例如,设预设阈值为90%)。
98.补全模型输出单元14,用于将符合检验标准的代码补全模型保存并输出至代码补全模型推演模块3。
99.图4是根据本发明实施例的一种可选的编码场景分析模块2结构的示意图,如图4所示,编码场景分析模块2包括:编码场景分析单元21、当前行编码信息提取单元22和当前编码所在文件信息提取单元23,其中,
100.编码场景分析单元21,用于对当前编码环境进行分析,提取当前编码的编程语言(例如java、python)、编码场景(例如springboot、单元测试等)等信息。
101.当前行编码信息提取单元22,用于对当前在编辑的行的编码文本信息进行语义信息提取。
102.当前编码所在文件信息提取单元23,用于对当前在编辑的整个代码文件进行语义信息提取。
103.图5是根据本发明实施例的一种可选的代码补全模型推演模块3结构的示意图,如图5所示,代码补全模型推演模块3包括:代码补全模型部署单元31、编码场景信息处理单元32、语法规则校验单元33和补全代码推演模块34,其中,
104.代码补全模型部署模块31,用于接收代码补全模型训练模块1中训练出的代码补全模型,并将其部署在智能代码补全系统中。
105.编码场景信息处理模块32,用于接收编码场景分析模块2中的各项编码信息,并将编码信息进行预处理以便代码补全模型进行推演。
106.语法规则校验单元33,用于将预训练的代码语法规则模型嵌入代码补全模型中,具体为,在encoder生成语义向量空间时,将语义向量空间与语法规则向量空间合并,形成混合校验向量空间,并对高维混合校验向量空间进行降维可视化,对降维后向量空间进行分类处理,排除掉与语法规则向量相关性低的补全代码向量,然后升维到原维度,以此隔离向量空间内不符合语法规则的代码补全结果。
107.补全代码推演单元34,用于结合语法规则校验单元33的校验规则与编码场景信息处理模块32的编码信息进行推演,得到语法校验后的一组代码补全结果及各代码补全结果的权重值。
108.图6是根据本发明实施例的一种可选的语法信息校验模块4结构的示意图,如图6所示,语法信息校验模块4包括:语法规则模型训练单元41、语法规则导入单元42和语法规则信息下发单元43,其中,
109.语法规则模型训练单元41,用于将编程语言语法规范摘要形成包含语义向量的校验模型,并将校验模型下发至代码补全模型推演模块3。
110.语法规则导入单元42,用于将编程语言编译规则导入,包括编程语言编译时类型检查、运行时类型检查等规则。
111.语法规则信息下发单元43,用于将校验模型下发至代码补全模型推演模块3,将编
程语言编译规则下发至补全结果输出模块5。
112.图7是根据本发明实施例的一种可选的补全结果输出模块5结构的示意图,如图7所示,补全结果输出模块5包括:语法规则接收单元51、补全推演结果语法规则校验单元52和补全结果输出单元53,其中,
113.语法规则接收单元51,用于接收语法信息校验模块4下发的编程语言编译规则,编程语言编译规则可以基于xml文件编写。
114.补全推演结果语法规则校验单元52,用于对代码补全推演结果进行编译规则校验,以检测是否存在函数缺少参数、参数名和类名定义重复、参数类型不符合等编译问题。
115.补全结果输出单元53,用于将综合校验后的代码补全结果和其权重值输出。
116.图8是根据本发明实施例的一种可选的渲染模块6结构的示意图,如图8所示,渲染模块6包括:补全结果接收单元61、补全结果排序单元62和补全结果渲染单元63,其中,
117.补全结果接收单元61,用于接收综合校验后的代码补全结果和其权重值。
118.补全结果排序单元62,用于将代码补全结果按照权重值进行排序。
119.补全结果渲染单元63,用于将排序后的代码补全结果渲染至ide代码补全候选框中。
120.图9是根据本发明实施例的一种可选的代码补全请求处理的流程图,如图9所示,包括如下步骤:
121.步骤s901:通过标准代码数据集训练代码补全模型。
122.步骤s902:制定编译校验规则与代码语法规则模型。
123.步骤s903:将训练并验证好的代码补全模型输出至代码补全模型推演模块。
124.步骤s904:下发代码语法规则模型到代码补全推演模块。
125.步骤s905:下发编译校验规则到补全结果输出模块。
126.步骤s906:发起代码补全处理请求。
127.步骤s907:输出当前编码场景综合信息。
128.步骤s908:输出经代码补全模型推演并通过代码语法规则模型校验后的代码补全结果。
129.步骤s909:对代码补全结果进行编译校验规则校验,输出再次校验后的代码补全结果。
130.步骤s910:将排序后的代码补全结果渲染至ide代码补全候选框中。
131.根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述的代码的补全方法。
132.根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述的代码的补全方法。
133.图10是根据本发明实施例的一种用于代码的补全方法的电子设备(或移动设备)的硬件结构框图。如图10所示,电子设备可以包括一个或多个(图中采用1002a、1002b,
……
,1002n来示出)处理器1002(处理器1002可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器1004。除此以外,还可以包括:显示
器、输入/输出接口(i/o接口)、通用串行总线(usb)端口(可以作为i/o接口的端口中的一个端口被包括)、网络接口、键盘、电源和/或相机。本领域普通技术人员可以理解,图10所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,电子设备还可包括比图10中所示更多或者更少的组件,或者具有与图10所示不同的配置。
134.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
135.在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
136.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
137.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
138.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
139.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
140.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献