资源描述:
《NEURAL CODE COMPLETION 基于深度学习的代码 …》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、NEURALCODECOMPLETION基于深度学习的代码补全(UCBerkeley,ICLR2017)SA16225220欧小铉1.传统方法的缺陷代码补全是现代软件开发的重要组成部分,智能代码补全工具可以大大加速软件开发,但对动态类型的编程语言来说具有挑战性。现有的智能代码完成方法依赖于强类型(例如,VisualStudioforC++),这限制了它们对广泛使用的动态类型语言(例如JavaScript和Python)的适用性基于简单的启发式和keyword频率统计容易出错Raychev等提出了最先进的代码概率模型(probabilis
2、ticmodel),其使用了简单的n-gram模型和概率语法方法(probabilisticgrammarapproach)在补全代码时,这种方法只会检查源代码中有限数量的元素。因此,这种方法不适用于大型开发计划。VeselinRaychev,PavolBielik,andMartinVechev.Probabilisticmodelforcodewithdecisiontrees.InProceedingsofthe2016ACMSIGPLANInternationalConferenceonObject-OrientedProgra
3、mming,Systems,Languages,andApplications,pp.731–747.ACM,2016a.2.代码补全简介代码补全示例(左下),使用了IntelliJIDEA本模型使用的代码补全原理(右下),可见预测p的概率最大,和IDEA自带的预测相比更为智能3.项目原理:模型基于LSTM(Hochreiter&Schmidhuber(1997))的简单而富有表现力的模型,利用通过解析程序结构:抽象语法树(ABSTRACTSYNTAXTREE)获得的附加信息进行预测。与广泛使用的启发式技术相比:基于深度学习的代码补全提
4、供了学习丰富的语境模型的机会,可以捕获特定语言甚至库的代码模式,而不需要复杂的规则或专家干预。性能:当对短程序进行评估时,与现有技术相比,我们的基于RNN的模型可以在下一个节点预测任务上实现比传统决策树更好的性能长程序的评估效果优于短程序3.项目原理:AST抽象语法树(AbstractSyntaxTree,AST)3.项目原理:AST问题定义:给定一个AST子树,预测下一个节点如其名称所示,是预测下一个节点(或AST子树)。基于节点的类型,即它的非终端节点还是终端节点,我们可以将问题分类两类:下一个叶节点预测问题下一个非叶节点预测问题尽
5、管下一个叶节点预测问题看上去更重要,但下一个非叶节点预测问题也很重要,因为它预测了该程序的结构。3.项目原理:AST例如,当下一个非叶节点为for循环时,源程序中的下一个token是关键字for,它在原始数据集中没有相应的叶节点。在这种情况下,代码补全引擎可以使用能够预测下一个非叶节点的模型来列出这个关键词for。事实上,预测下一个非叶节点允许完成代码块而不是单个(关键字)的结构。例如,当下一个token是关键字for时,相应的下一个非叶节点是For循环,对应于以下代码块:3.项目原理:LSTM(a)传统RNN不能学习长期关系(b)
6、LSTM单元可以通过遗忘门限层,输入门限层,输出的sigmoid门限值实现长序记忆4.NT2NNT2N:usingthesequenceofNon-terminalandTerminalpairsTOpredictthenextNon-terminal5.NTN2T同时预测叶节点NTN2T:usingthesequenceofNon-terminalandTerminalpairsTOpredictthenextNon-terminalandTerminalpair6.训练每次输入一个minibatch,进行训练,一个minibatch
7、包含每个程序的一部分,形成一个程序队列,bucketb代表了队列头部的信息,unroll成一列数据加入训练集7.使用NeuralCompletehttps://github.com/kootenpv/neural_completeFrontEnd:AngularJSBackEnd:Keras训练的神经网络Ironically,itistrainedonfilescontainingkerasimports.Theresultisaneuralnetworktrainedtohelpwritingneuralnetworkcode.7.演
8、示SampleCode8.演示