自动写代码指日可待!Facebook迁移学习新突破,代码补全准确率超50%!(一)

简介: 程序员的工作就是取代重复、算法可替代的工作,而他们自己也在研究如何取代自己。Facebook新发表的代码补全模型准确率超50%,动动手指就能写几百行代码!

代码补全(code AutoCompletion)就是在写代码的时候,IDE能够预测出下一段要写的代码,也是写代码时候选择使用IDE的重要原因。


最近的相关研究表明,自动补全可以通过深度学习来实现,使软件语言模型能够通过对从程序员的 IDE 活动中收集的真实世界数据集进行训练,来实现显著的准确性提高。


不过,对于那些没多少人用的编程语言来说,一个常见问题是,可用的 IDE 数据集可能不足以进行训练。


对于这个问题,Facebook的研究人员最近在arxiv上公开了自己在代码补全上的工作。

50.jpg

他们在文中展示了迁移学习是如何能够在微调之前完成自动补全任务的,这种训练不局限于 ide和特定语言,能够针对各种各样的示例代码序列进行预训练。


该方法在非常小的微调数据集上提高了50% 以上的模型精度,在50k 个带标签样例的数据集上提高了10% 以上的精度。


在软件社区中,所有主要编程语言的大量开源代码提交都可以在 GitHub 上找到。


毫无疑问,这些代码的提交和开发人员在 IDE 上的活动有着直接的联系,例如vscode, intellij等会有不同的补全方式,也会直接体现在代码中。

51.jpg

因此,如果能够在建模代码编写行为时使用这些commit中的知识,那对于自动补全任务来说是有益的。


由于在所有编程语言中都存在一些共享概念和结构,例如数据类型、面向对象等思想设计,所以研究人员建议将这些语言知识从使用人数更多的编程语言(如Python, Java)转移到标记数据不足的其他小众语言中。



52.jpg

这项研究中的数据集来自 Facebook 的一些开发者活动,主要关注流行的编程语言 Python 和不太流行的语言 Hack。


该团队首先训练了来自 Hack 或 Python 的各种单语模型,以及来自两种语言的多语模型。为了从开放词汇表中有效地识别和预测很少被使用的关键词和两种语言之间不同的关键词,他们采用了两种标记方法: 字节对编码(Byte-pair encoding,BPE)和 Bigram 编码。


为了测试迁移学习的效果,他们使用了两个文本生成模型GPT-2和 PLBART-并评估了两个在线和离线模型的性能。


53.jpg


最后论文中总结了他们的贡献和实验结果:


1、对从git提交获得的源代码文件预先训练两个 transformer语言模型 GPT-2和 BART,结果显示它们在自动补全预测方面的性能,比直接使用实际 IDE 代码序列的微调提高了2.18%。也就是说迁移模型取得了更好的效果。


2、GPT-2模型是在两个真实世界的数据集上训练的: 在 IDE 上写的和代码补全选择期间记录的代码序列。预训练和特定任务的微调相结合能够产生一个更好的模型,比基本模型的性能高出3.29%。


3、文中展示了使用不同的编程语言进行预训练,在比较使用 Hack 示例进行预训练和使用10k Python 示例进行微调的模型与只使用 Python 示例进行训练的模型时,可以提高13.1% 的准确性


4、通过在线 a/b 测试比较,证明在任务、领域和语言这三个迁移学习维度上的改进分别使自动完成工具的使用率提高了3.86% 、6.63% 和4.64%54.jpg总体而言,研究表明,在不使用 ide数据和不同语言示例代码序列上的预训练代码补全模型,使用迁移学习可以显著提高模型的准确性,表明迁移学习有可能推进较不流行的编程语言的代码自动补全,并改善使用它们的开发人员的编码经验。



相关文章
|
机器学习/深度学习 人工智能 搜索推荐
【推荐系统】Facebook经典模型GBDT+LR代码实践
【推荐系统】Facebook经典模型GBDT+LR代码实践
136 0
|
机器学习/深度学习 算法 搜索推荐
【推荐系统】Facebook经典模型GBDT+LR代码实践
在CRT预估中,工业界一般是会采用逻辑回归进行处理,对用户特征画像进行建模,然后计算点击概率,评估用户是否会有点击的行为。
181 0
|
机器学习/深度学习 人工智能 JavaScript
自动写代码指日可待!Facebook迁移学习新突破,代码补全准确率超50%!(二)
程序员的工作就是取代重复、算法可替代的工作,而他们自己也在研究如何取代自己。Facebook新发表的代码补全模型准确率超50%,动动手指就能写几百行代码!
148 0
自动写代码指日可待!Facebook迁移学习新突破,代码补全准确率超50%!(二)
|
机器学习/深度学习 人工智能 自然语言处理
7.5亿美元做代码转换?一个Facebook TransCoder AI就够了!
代码的迁移和语言转换是一件很困难且昂贵的事情,澳大利亚联邦银行就曾花费5年时间,耗费7.5亿美元将其平台从COBOL转换为Java。而Facebook最近宣称,他们开发的一种神经转换编译器(neural transcompiler),可以将一种高级编程语言(如C ++,Java和Python)转换为另一种,效率飞起!
590 0
7.5亿美元做代码转换?一个Facebook TransCoder AI就够了!
|
Web App开发 测试技术
Facebook 是如何进行大规模代码部署的
Facebook 高速发展的 2007 年到 2016 年,他们一天部署 3 次代码,cherry-pick 集齐成千上万个 commit;现在使用类似持续交付的方法,每个 commit 能自动部署到 production。
1371 0
|
机器学习/深度学习 人工智能 调度
【AI大红包】Facebook发布张量理解库,几分钟自动生成ML代码
Facebook今天宣布发布Tensor Comprehensions,能够自动将数学符号快速转换成高性能机器学习代码,将原本几天乃至几周的过程缩短为几分钟,大幅提高生产力。
2060 0
|
8月前
|
机器学习/深度学习 算法 决策智能
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具