自动写代码指日可待!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数据和不同语言示例代码序列上的预训练代码补全模型,使用迁移学习可以显著提高模型的准确性,表明迁移学习有可能推进较不流行的编程语言的代码自动补全,并改善使用它们的开发人员的编码经验。



相关文章
|
5月前
|
存储 Rust 安全
一篇文章讲明白Facebook币Libra学习
一篇文章讲明白Facebook币Libra学习
43 0
|
5月前
|
存储 Rust 安全
一篇文章讲明白Facebook币Libra学习
一篇文章讲明白Facebook币Libra学习
31 0
|
机器学习/深度学习 人工智能 搜索推荐
【推荐系统】Facebook经典模型GBDT+LR代码实践
【推荐系统】Facebook经典模型GBDT+LR代码实践
197 0
|
机器学习/深度学习 算法 搜索推荐
【推荐系统】Facebook经典模型GBDT+LR代码实践
在CRT预估中,工业界一般是会采用逻辑回归进行处理,对用户特征画像进行建模,然后计算点击概率,评估用户是否会有点击的行为。
212 0
|
机器学习/深度学习 人工智能 JavaScript
自动写代码指日可待!Facebook迁移学习新突破,代码补全准确率超50%!(二)
程序员的工作就是取代重复、算法可替代的工作,而他们自己也在研究如何取代自己。Facebook新发表的代码补全模型准确率超50%,动动手指就能写几百行代码!
181 0
自动写代码指日可待!Facebook迁移学习新突破,代码补全准确率超50%!(二)
|
机器学习/深度学习 人工智能 自然语言处理
7.5亿美元做代码转换?一个Facebook TransCoder AI就够了!
代码的迁移和语言转换是一件很困难且昂贵的事情,澳大利亚联邦银行就曾花费5年时间,耗费7.5亿美元将其平台从COBOL转换为Java。而Facebook最近宣称,他们开发的一种神经转换编译器(neural transcompiler),可以将一种高级编程语言(如C ++,Java和Python)转换为另一种,效率飞起!
665 0
7.5亿美元做代码转换?一个Facebook TransCoder AI就够了!
|
机器学习/深度学习 人工智能 安全
如何高效验证深度神经网络的学习行为?看看 Facebook 是怎么做的
能够比当前 state-of-the-art 程序更快识别应用安全水平的最新技术。
476 0
|
机器学习/深度学习 算法 决策智能
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
203 0
|
缓存 数据可视化 测试技术
开源多年后,Facebook这个调试工具,再登Github热门榜
让许多工程师合作开发大型应用大多会面临一个挑战,通常没有一个人知道每个模块是如何工作的,这种技能会让开发新功能、调查Bug或优化性能变得困难,为了解决这个问题,Facebook创建并开源了Flipper,一个可扩展的跨平台的调试工具,用来调试 iOS 和 Android 应用。近日又双叒登上了Github热榜。
|
前端开发 JavaScript 测试技术
Facebook 开源可扩展文本编辑器 Lexical
Meta(原 Facebook)近日开源可扩展文本编辑器 Lexical,源代码托管在 GitHub 上采用 MIT 许可证。
546 0
Facebook 开源可扩展文本编辑器 Lexical