代码补全漫谈(2) - Miltos Allamanis

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: # 代码补全漫谈(2) - Miltos Allamanis 上一回我们从火到爆表的TabNine说起,介绍了OoV问题引发的论战。 在进入细节之前,我们再八卦程序语言处理领域的一个重要研究者,微软研究院的Miltos Allamanis。

代码补全漫谈(2) - Miltos Allamanis

上一回我们从火到爆表的TabNine说起,介绍了OoV问题引发的论战。
在进入细节之前,我们再八卦程序语言处理领域的一个重要研究者,微软研究院的Miltos Allamanis。Allamanis的博士论文就是以《Learning Natural Coding Conventions》为题,是这个领域的专业研究人员。

上次我们介绍的重要survey文章《A Survey of Machine Learning for Big Code and Naturalness》的第一作者就是Allamanis.

从Allamanis第一作者文章看代码处理发展史

下面我们就顺着Allamanis的论文为线索,对于代码处理这一分支有个更有体感的概念。

Mining Source Code Repositories at Massive Scale Using Language Modeling(2013)

这一篇发表于2013年,那时Allamanis在爱丁堡大学师从C. Sutton教授做研究。
2012年,上文提到的加州大学戴维斯分校的Devanbu老师和其学生Hindle等人一起发表了《On the naturalness of software》,通过自然性的证明说明用NLP的方法研究代码是有效的。随后,Allamanis通过3.72亿行的github上的Java工程来构建概率语言模型。

Mining Source Code Repositories at Massive Scale Using Language Modeling

Mining Idioms from Source Code(2014)

2014年,Allamanis的兴趣点是挖掘代码片段,就像code snippets一样,采用的方法是非参数贝叶斯概率树。树的结构如下图所示:

Mining Idioms from Source Code

Learning Natural Coding Conventions(2014)

在code review中,命名规则不统一也是一个重要的审查项。Allamanis提出学习命名风格,然后给变量名等提供建议的方式来帮助程序员写的代码的命名风格的统一。

allamanis2014learning.png

Suggesting Accurate Method and Class Names(2015)

上一篇文章解决了变量命名推荐的问题,于是再接再厉,通过上下文信息给出方法名和类名的推荐。

Suggesting Accurate Method and Class Names

A Bimodal Modelling of Source Code and Natural Language(2015)

这篇文章开始将源代码和自然语言共同用来建模。

A Bimodal Modelling of Source Code and Natural Language

A Convolutional Attention Network for Extreme Summarization of Source Code(2016)

这篇文章开始结合了Attention技术与卷积网络去试图为源代码提取特征。
CNN加上Attention提取特征的示意图如下所示:

A Convolutional Attention Network for Extreme Summarization of Source Code

本文有基于theano框架写的代码:https://github.com/mast-group/convolutional-attention

SmartPaste: Learning to Adapt Source Code(2017)

SmartPaste是个很有创意的功能,在之前对于变量等推荐的基础上,现在智能粘贴功能可以自动识别所在的上下文了。我们看一个例子:

SmartPaste

Learning Continuous Semantic Representations of Symbolic Expressions(2017)

程序语言另人纠结的一点就是本来可以用精确的语法树等方向进行推理,但是无法和神经网络很好的结合。本文就是尝试用神经网络与程序语言结合的一种尝试,一种等价网络。如下图所示:

Learning Continuous Semantic Representations of Symbolic Expressions

Mining Semantic Loop Idioms from Big Code(2018)

在这篇中,Allamanis继续他的惯用法的研究,将API和数据结构等信息组合起来,识别出了大量的模式惯用法。

Mining Semantic Loop Idioms from Big Code

Learning to Represent Programs with Graphs(2018)

本文引入了图神经网络来处理源代码,以解决CNN, RNN等传统神经网络处理源代码的不足。此时,Allamanis已经到微软研究院工作了,这篇文章的代码已经发布在微软的github上了:https://github.com/Microsoft/gated-graph-neural-network-samples

The Adverse Effects of Code Duplication in Machine Learning Models of Code(2019)

今年的这篇文章,作者开始关注代码库中的大量重复给神经网络训练带来的挑战。源代码不同于自然语言,在开源代码库中有大量的复制的代码,而这在自然语言中是非常少见的。

The Adverse Effects of Code Duplication in Machine Learning Models of Code

其它研究

下面我们再看一下非第一作者的一些研究。

Deep Learning Type Inference(2018)

这篇文是后面章节的主角之一,是通过训练ts转js对js类型进行训练的方法。类型信息对于代码补全意义重大,相关研究我们在后面会详细介绍。
最终生成的结果如下图所示,

类型提示

CODIT: Code Editing with Tree-Based Neural Machine Translation(2019)

这篇文章的主要目的是对于日常提交如bug fix进行推荐。代码本来就是树型结构的,通过树型机器翻译模型,可能更贴近于源代码的结构表示。

CODIT

Learning to Represent Edits(2019)

这个可以认为是smart paste功能的升级版,类似于office软件中的格式刷,将新写的代码刷成学习到的模式。我们看个例子:
Learning to Represent Edits

A Neural Approach to Decompiled Identifier Renaming

这篇文章试图通过学习代码库来进行反编译时的名字信息的推测。原理和例子如下图所示:

A Neural Approach to Decompiled Identifier Renaming

Program Synthesis and Semantic Parsing with Learned Code Idioms(2019)

这一篇是将程序代码与自然语言协同的新尝试。

Program Synthesis and Semantic Parsing with Learned Code Idioms

RefiNym: Using Names to Refine Types(2018)

这一篇可以说是OOP的辅助工具吧,用于识别类的设计是否合理,是不是设计了过多的类,或者将不相关的域放到同一个类中了。
RefiNym

总结

从Allamanis的经历来看,还是非常扎实的,稳扎稳打,从建立数据集和概率语言模型开始,一点点向自然语言和程序语言相结合的方向不断前进。其中像smart paste等功能让人眼前一亮,可以成为IDE的爽点功能。

目录
相关文章
|
机器学习/深度学习 自然语言处理
代码补全漫谈(1) - 从TabNine说起
# 代码补全漫谈(1) - 从TabNine说起 前不久,基于GPT-2模型的TabNine横空出世,在程序员界再次引起轰动。此前,国产的aixcoder,还有获得github ceo天使投资的Python编程利器kite等,已经收获了一轮又一轮的眼球。人工智能代替人编写代码的忧虑不时在知乎等网站上出现。 从程序语言处理的近亲 - 自然语言处理NLP的发展来看,这样的乐观不是没有道理的。从
3389 0
|
机器学习/深度学习 人工智能 自然语言处理
近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
From:http://www.tuicool.com/articles/rqIRJb2 本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等。
3244 0
|
机器学习/深度学习 人工智能 自然语言处理
总结 | ACL2022主会论文分类整理(一)
总结 | ACL2022主会论文分类整理(一)
2912 0
|
机器学习/深度学习 分布式计算 搜索推荐
信息检索资源参考
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本文汇总信息检索开放资源列表,有需要的拿走吧。
245 0
|
Windows
|
机器学习/深度学习 人工智能 算法
AI:人工智能之十一类机器学习算法(英文表示)详细分类之详细攻略(持续更新)
AI:人工智能之十一类机器学习算法(英文表示)详细分类之详细攻略(持续更新)
|
机器学习/深度学习 Python
1、python机器学习基础教程——简述
机器学习(machine learning):从数据中提取知识。分为:监督学习(supervised learning)和无监督学习(unsupervised learning)。
1962 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
《Scikit-Learn与TensorFlow机器学习实用指南》
看了《Scikit-Learn与TensorFlow机器学习实用指南》(Hands-On Machine Learning with Scikit-Learn and TensorFlow)一书的序言和第1章的一部分。
3420 0
《Kinect应用开发实战:用最自然的方式与机器对话》一2.4 本章小结
本节书摘来自华章出版社《Kinect应用开发实战:用最自然的方式与机器对话》一书中的第2章,第2.4节,作者 余涛,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1389 0

热门文章

最新文章