当前位置: 首页 > 专利查询>北京大学专利>正文

一种基于LSTM自动补全代码的方法技术

技术编号:18657752 阅读:677 留言:0更新日期:2018-08-11 14:20
本发明专利技术提供了一种基于LSTM自动补全代码的方法,包括:源代码处理步骤,使用抽象语法树解析源代码;线下训练步骤,使用LSTM模型训练语言模型;线上代码补全步骤,根据训练过的语言模型补全代码。所述LSTM模型包括约束字符级LSTM和使用前上下文标识符编码器的标识符级LSTM。本发明专利技术实现了在编程过程中,任意地方输入任意字符都可以实现代码的自动补全,以及任意代码的推荐,并保证推荐过程的准确性。本发明专利技术的技术方案具有简单、快速的特点,能够较好地提高代码推荐的准确率和推荐效率。

A method of automatic completion code based on LSTM

The invention provides a method for automatically completing code based on LSTM, including: source code processing step, using abstract syntax tree to parse source code; offline training step, using LSTM model to train language model; online code completion step, completing code according to the trained language model. The LSTM model includes a constraint character level LSTM and an identifier level LSTM using a pre-context identifier encoder. The invention realizes the automatic completion of codes and the recommendation of arbitrary codes by inputting arbitrary characters at any place in the programming process, and ensures the accuracy of the recommendation process. The technical scheme of the invention is simple and fast, and can improve the accuracy and efficiency of code recommendation.

【技术实现步骤摘要】
一种基于LSTM自动补全代码的方法
本专利技术涉及计算机软件工程
,尤其是涉及一种基于LSTM自动补全代码的方法。
技术介绍
计算机自动生成代码是近年来软件工程的研究热点之一。代码自动生成极大的减少了程序员的工作量,提高了开发效率。随着开源社区的发展,我们可以通过分析大量的代码从而进行代码生成。代码自动生成的一大困难在于源代码本身具有诸多的约束和限制。近年来,在原有的基于组合优化方法进行程序综合研究的基础上,产生了一些新的基于机器学习技术进行程序生成的方法。按照所采取的技术及应用场景的不同,可将当前的程序生成方法分成两类:一类为基于程序输入输出结果的程序生成,一类为基于程序代码语言特性的代码生成。基于输入输出结果的程序综合主要基于机器学习模型,利用程序输入输出结果之间的对应关系构造训练数据集,并利用该数据集对机器学习模型进行训练,以达到在输入输出效果上模拟程序行为的目的。该类方法尤以基于深度神经网络的方法为代表。基于程序设计语言模型的程序生成主要利用程序设计语言自身所具有的的统计特性,通过对已有大量程序代码的学习建立相应程序设计语言的机器学习模型,并基于该模型在已有程序代码的基础上通过自动补全的方式生成新的代码。LSTM(LongShort-TermMemory)是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。LSTM已经在科技领域有了多种应用。基于LSTM的系统可以学习翻译语言、控制机器人、图像分析、文档摘要、语音识别图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等等任务。中国专利技术专利申请号201710687197.4,涉及一种基于长短期记忆网络(LSTM)的代码推荐方法,针对现有代码推荐技术普遍存在推荐准确率低、推荐效率低等问题,该专利技术先将源代码提取成API序列,利用长短期记忆网络构建一个代码推荐模型,学习API调用之间的关系,然后进行代码推荐。并使用了dropout技术防止模型过拟合。同时提出运用ReLu函数代替传统饱和函数,解决梯度消失问题加快模型收敛速度,提高模型性能,充分发挥神经网络的优势。然而,上述专利实际上进行的是API推荐,与代码级推荐或者自动补全的目标仍有较大差距。不能实现在任意地点对任意代码的推荐。如图1所示,为现有技术中常见的代码自动补全方式。当在“accuracy=tf”之后输入“.”时,会自动出现一个下拉菜单,编程人员可以选择例如“framework_lib”、“client_lib”等类名进行代码自动补全。然而,这种方式的缺陷在于:只有当用户输入“.”等特殊字符后才能够出现下拉菜单进行代码补全,无法实现在任意地点(例如输入任意一个字母时)进行代码补全或推荐;下拉菜单里推荐的仅仅是类名而非一段代码,仍然无法直接使用。
技术实现思路
为解决以上问题,本专利技术提出深度自动代码生成,采用基于LSTM的引入标识符实现代码自动补全的任务,将训练语言模型用于从大规模代码集合中提取出的程序,预测代码元素。具体的,本专利技术提供了一种基于LSTM自动补全代码的方法,包括:源代码处理步骤,使用抽象语法树解析源代码;线下训练步骤,使用LSTM模型训练语言模型。线上代码补全步骤,根据训练过的语言模型补全代码。优选的,在源代码处理步骤中,所述源代码被解析为不同形式,以获得代码的类、方法列表、代码标识符。优选的,所述LSTM模型包括约束字符级LSTM和使用前上下文标识符编码器的标识符级LSTM。优选的,使用LSTM模型引入解析源代码得到的标识符,并在不同场景中分别训练语言模型。优选的,所述LSTM模型为串联的两层LSTM模型,所述两侧LSTM模型位于隐藏层。优选的,所述约束字符级LSTM用于引入标识符以完成方法调用预测。优选的,所述方法调用预测的过程为:加入约束,提取意图援引方法的对象和类;通过遍历所述抽象语法树获得所有的类声明的方法;预测方法名的第一个字符,并依次预测该方法的后续字符。优选的,所述使用前上下文标识符编码器的标识符级LSTM通过以下四种途径中的一种或多种编码标识符:(1)索引,一个程序中不同位置的相同标识符代表相同的索引;(2)类型加索引,将标识符的类型和索引结合使用;(3)前标识符,通过评价一个、两个或三个前标识符来分别编码标识符;(4)标识符ID,使用标识符ID替换所有标识符。优选的,引入所述标识符后,将所述源代码的序列输入到所述LSTM模型中,所述语言模型根据给定的部分程序的可能性分布来生成后续标识符。优选的,在线上代码补全步骤中,将部分代码片段输入已经训练过的语言模型,从而根据编程环境输出推荐的代码元素。本专利技术实现了在编程过程中,任意地方输入任意字符都可以实现代码的自动补全,以及任意代码的推荐,并保证推荐过程的准确性。本专利技术的技术方案具有简单、快速的特点,能够较好地提高代码推荐的准确率和推荐效率。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1为现有技术中自动补全代码的方法示例图;图2为本专利技术基于LSTM自动补全代码的方法流程图;图3为本专利技术使用约束字符级LSTM进行方法调用补全的示意图;图4为本专利技术基于LSTM自动补全代码的方法获得的代码自动补全结果示例图。具体实施方式下面将参照附图更详细地描述本专利技术的示例性实施方式。虽然附图中显示了本专利技术的示例性实施方式,然而应当理解,可以以各种形式实现本专利技术而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本专利技术,并且能够将本专利技术的范围完整的传达给本领域的技术人员。本专利技术公开了一种深度自动代码生成方法,基于长短期记忆网络(LSTM)的引入标识符而实现。深度学习的途径可以很好地捕捉有用特征并自动建立从输入到输出的映射。本专利技术的深度自动代码生成采用基于LSTM的引入标识符实现代码自动补全的任务。将训练语言模型用于从大规模代码集合中提取出的程序,预测代码元素。图2为本专利技术基于LSTM自动补全代码的方法流程图,包括如下步骤:S1、源代码处理步骤,使用抽象语法树解析源代码。在这个步骤中,源代码被解析为不同形式,以用于各种途径。具体的,采用抽象语法树(AbstractSyntaxTree)来解析源代码,来获得代码的类、方法列表、代码标识符等等。抽象语法树(abstractsyntaxtree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。和抽象语法树相对的是具体语法树(concretesyntaxtree),通常称作分析树(parsetree)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。S2、线下训练步骤,使用LSTM模型训练语言模型。使用不同途径引入解析得到的标识符,例如约束字符级LSTM和使用前上下文标识符编码器的标识符级LSTM,在接下来的子部分的在不同场景中分别训练。通过使用深度学习模型训练集合中本文档来自技高网
...

【技术保护点】
1.一种基于LSTM自动补全代码的方法,其特征在于,包括:源代码处理步骤,使用抽象语法树解析源代码;线下训练步骤,使用LSTM模型训练语言模型。线上代码补全步骤,根据训练过的语言模型补全代码。

【技术特征摘要】
1.一种基于LSTM自动补全代码的方法,其特征在于,包括:源代码处理步骤,使用抽象语法树解析源代码;线下训练步骤,使用LSTM模型训练语言模型。线上代码补全步骤,根据训练过的语言模型补全代码。2.根据权利要求1所述的基于LSTM自动补全代码的方法,其特征在于:在源代码处理步骤中,所述源代码被解析为不同形式,以获得代码的类、方法列表、代码标识符。3.根据权利要求1或2所述的基于LSTM自动补全代码的方法,其特征在于:所述LSTM模型包括约束字符级LSTM和使用前上下文标识符编码器的标识符级LSTM。4.根据权利要求3所述的基于LSTM自动补全代码的方法,其特征在于:使用LSTM模型引入解析源代码得到的标识符,并在不同场景中分别训练语言模型。5.根据权利要求2所述的基于LSTM自动补全代码的方法,其特征在于:所述LSTM模型为串联的两层LSTM模型,所述两侧LSTM模型位于隐藏层。6.根据权利要求3所述的基于LSTM自动补全代码的方法,其特征在于:所述约束字符级LSTM用于引入标识符以完成方法调用预测。7.根据权利要求6所述的基...

【专利技术属性】
技术研发人员:李戈金芝
申请(专利权)人:北京大学
类型:发明
国别省市:北京,11

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

1