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

一种基于LSTM自动补全代码的装置制造方法及图纸

技术编号:19008937 阅读:45 留言:0更新日期:2018-09-22 08:50
本发明专利技术提供了一种基于LSTM自动补全代码的装置,包括:源代码处理单元,使用抽象语法树解析源代码;线下训练单元,使用LSTM模型训练语言模型;线上代码补全单元,根据训练过的语言模型补全代码。所述LSTM模型包括约束字符级LSTM和使用前上下文标识符编码器的标识符级LSTM。本发明专利技术实现了在编程过程中,任意地方输入任意字符都可以实现代码的自动补全,以及任意代码的推荐,并保证推荐过程的准确性。本发明专利技术的技术方案具有简单、快速的特点,能够较好地提高代码推荐的准确率和推荐效率。大量的代码可以自动生成或者仅需要少量的标识符提示即可生成,极大的提高了程序员的代码编写效率。

A device for automatically completing code based on LSTM

The invention provides a device for automatically completing code based on LSTM, including: source code processing unit, using abstract syntax tree to parse source code; offline training unit, using LSTM model to train language model; online code completing unit, 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. A large number of code can be generated automatically or only a small number of identifier prompts can be generated, greatly improving the programmer's code writing efficiency.

【技术实现步骤摘要】
一种基于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进行方法调用补全的示意图;图5为本专利技术基于LSTM自动补全代码的装置获得的代码自动补全结果示例图。具体实施方式下面将参照附图更详细地描述本专利技术的示例性实施方式。虽然附图中显示了本专利技术的示例性实施方式,然而应当理解,可以以各种形式实现本专利技术而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本专利技术,并且能够将本专利技术的范围完整的传达给本领域的技术人员。本专利技术公开了一种深度自动代码生成方法,基于长短期记忆网络(LSTM)的引入标识符而实现。深度学习的途径可以很好地捕捉有用特征并自动建立从输入到输出的映射。本专利技术的深度自动代码生成采用基于LSTM的引入标识符实现代码自动补全的任务。将训练语言模型用于从大规模代码集合中提取出的程序,预测代码元素。图2为本专利技术基于LSTM自动补全代码的装置结构图;图3为本专利技术基于LSTM自动补全代码的装置工作原理图。如图2所示,所述基于LSTM自动补全代码的装置10包括依次连接的:源代码处理单元11、线下训练单元12、线上代码补全单元13。其中:源代码处理单元11,使用抽象语法树解析源代码。在这个步骤中,源代码被解析为不同形式,以用于各种途径。具体的,采用抽象语法树(AbstractSyntaxTree)来解析源代码,来获得代码的类、方法列表、代码标识符等等。抽象语法树(abstractsyntaxtree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。和抽象语法树相对本文档来自技高网
...
一种基于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所述的基于LSTM自动补全代码的装置,其特征在于:所述方法调用预测的过程为:加入约束,提取意图援引方法的对象和类;通过遍历所述抽象语法树获得所有的类声明的方法;预测方法名...

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

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

1