论文部分内容阅读
大型项目,如内核,驱动程序和第三方库都遵循一个代码风格,并且有反复出现的模式。在本文中,我们探索基于NNLM的代码推荐,使用源文件上下文作为输入预测下一个token,并探索可能潜在的一些模式。使用词向量来表示代码令牌和基于自然语言处理的机器学习技术,我们能够捕捉有趣的模式,并且能够预测像传统的IDE那样通过简单的基于语法和语义的方法不能进行预测的代码,我们的方法尝试去自动学习这些语法或模式。针对以往的方法主要是针对特定的一种语言,如研究较多的强类型语言Java和近来研究的弱类型动态性语言Javascript,我们尝试构建了不基于任何特定语言的模型,实现了基于C语言的Linux内核的预测,准确率为56.1%,基于Python语言的网络库Twisted,43.6%的准确率。然后基于Python语言的弱类型及动态特性,我们提出先使用AST做预处理,然后使用word2vec做预训练,再进行实验达到了56.3%的准确率。首先,我们是构建不基于任何特定语言的语法及语义的模型,然后基于Python的弱类型、动态性,我们进一步使用AST规则,训练更大的权威的开源数据集,提取出更具代表性的tokens,接着使用wrod2vec预训练,然后再进行实验,并与之前的实验进行对比,准确率得到了进一步提高,python的准确率达到了56.3%。具体工作如下:1.使用自然语言处理提取tokens的方法,将代码中的注释等去掉,然后直接token化,构建词向量作为神经网络输入,并进行实验,利用几个重要的评价准确性的指标对实验结果进行评估,最后分析了一些潜在的模式。2.基于python语言的特点,选取更大的开源数据集,对代码库中的代码建立抽象语法树进行语法分析,提取出代表使用模式的tokens,接着使用word2vec预训练,最后进一步实验。3.对比两个实验,发现使用AST预处理,word2vec预训练后,准确率得到了提升,最后,对上下文中的令牌对预测下一个令牌的贡献值进行了统计。