专栏首页新智元自动写代码指日可待!Facebook迁移学习新突破,代码补全准确率超50%!

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


新智元报道

来源:Facebook AI

编辑:LRS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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%

总体而言,研究表明,在不使用 ide数据和不同语言示例代码序列上的预训练代码补全模型,使用迁移学习可以显著提高模型的准确性,表明迁移学习有可能推进较不流行的编程语言的代码自动补全,并改善使用它们的开发人员的编码经验。

代码预测工具

Kite是一个著名的代码补全工具。

Kite 基于 AI 的代码补全功能现在支持Python, JavaScript, TypeScript、 Java、 HTML、 CSS、 Go、 C、 C # 、C + + 、 Objective C、 Kotlin 和 Scala。

Kite 于2016年4月首次亮相,在17年3月又公开发布了一个基于云计算的版本。该公司在19年1月筹集了1700万美元,放弃了云计算,转而在本地运行免费服务。

在编写过程中Kite可以极大减少敲键盘的次数。在Kite的帮助下,活跃开发者甚至每天只需编写由大约 175 个单词组成的代码。

各种开发人员也是对Kite十分赞赏,甚至还包括了Python之父 Guido van Rossum

Kite的 Python 机器学习模型是在2500万个开源代码文件上训练的,它的 JavaScript 机器模型是在3000万个文件上训练的。

除了越来越多的编程语言,Kite也可在更多的开发环境中工作,目前已支持在16个编辑器上使用,包括 Android Studio、 Atom、 JupyterLab、 Spyder、 Sublime Text、 VS Code 和 Vim等。

此外Kite还与 IntelliJ 家族合作:,支持 IntelliJ、 PyCharm、 WebStorm、 Goland、 CLion、 PHPStorm、 Rider、 RubyMine 和 AppCode。

由此可见,公司的愿景是允许尽可能多的开发人员利用 Kite,而不管他们的语言或 IDE 是什么,最终实现各个场景下代码补全的「大一统」。

Kite 公司的首席执行官史密斯之前还创立了 Xobni,这是一个于07年9月推出的电子邮件服务,雅虎在13年7月将其收购。

史密斯在接受访问时说到,当我们构建对 JavaScript 的支持时,我们致力于创建一种可伸缩的方式来添加更多的编程语言,从那时起,我们一直在迭代我们的 JavaScript 模型和排序算法。这种学习使我们能够相对容易地发布每一种新语言,具有与 JavaScript 相同的准确性和智能性。

19年,正值GPT-2火热时,一名滑铁卢大学大四学生Jacob Jackson也开发了一款自动补全工具tabnine,支持23种编程语言和5种代码编辑器,几乎不需要配置安装即可使用。

Deep TabNine会根据你以前的编码习惯自动补全,还会在后面给出几个选项的概率。如果之前项目出现过类似代码,还能在补全候选框中直接给出地址,方便用户点击进去查阅!

VSCode下,直接打开插件市场搜索TabNine,点击安装即可。Sublime Text下调出Install Package Control安装即可。Atom也可以直接安装。EMACS和Vim稍微复杂一些。

Deep TabNine通过对GitHub大约200万个文件进行训练。训练期间,模型学习了例如动态类型语言中的类型推断等复杂行为,用这样的训练方式预测token。

TabNine可以使用传统工具难以获取的琐碎的线索。当线索不够的时候TabNine可能会胡言乱语,然而一旦拥有足够的线索,就能准确预测出代码,甚至还可以给出匹配的概率。

如今深度学习浪潮来了,程序员连自己也不放过,也要取缔自己的工作,生于忧患!

参考资料:

https://www.reddit.com/r/deeplearning/comments/nfdtgk/r_facebook_transfer_learning_method_boosts_code/

本文分享自微信公众号 - 新智元(AI_era),作者:新智元

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 准确率可提升50%以上,Facebook用迁移学习改进代码自动补全

    代码自动补全功能(应用程序预测文本输入中的下一项)已成为消息传递等任务中便捷且广泛使用的工具,也是用于计算机编程所需的集成开发环境(IDE)最重要功能之一。

    机器之心
  • 一文看尽2019全年AI技术突破

    最近,Analytics Vidhya发布了2019年AI技术回顾报告,总结了过去一年中,AI在不同技术领域取得的进展,并展望了2020年的新趋势。

    量子位
  • 一文看尽2018全年AI技术大突破

    这一年成为NLP研究的分水岭,各种突破接连不断;CV领域同样精彩纷呈,与四年前相比GAN生成的假脸逼真到让人不敢相信;新工具、新框架的出现,也让这个领域的明天特...

    量子位
  • 一文看尽2018全年AI技术大突破

    这一年成为NLP研究的分水岭,各种突破接连不断;CV领域同样精彩纷呈,与四年前相比GAN生成的假脸逼真到让人不敢相信;新工具、新框架的出现,也让这个领域的明天特...

    刘盼
  • 一文读完GitHub30+篇顶级机器学习论文(附摘要和论文下载地址)

    作者:常佩琦 弗格森 【新智元导读】 今天介绍Github上的开源项目,专门用于更新最新的研究突破,具体说来,就是什么算法在哪一个数据集上取得了state-of...

    新智元
  • 从GPT-3到DETR,一起来盘点2020有哪些突破?

    2020年是巨大飞跃的一年。从OpenAI的GPT-3,再到AlphaFold,都是令人振奋的成就。与此同时,数据科学在机器学习、自然语言处理(NLP)、计算机...

    深度学习技术前沿公众号博主
  • 业界 | Facebook联合微软推出神经网络交换格式ONNX:实现不同框架间模型迁移

    选自Facebook 作者:Joaquin Quinonero Candela 机器之心编译 近日,Facebook 与微软联合推出了开放式神经网络交换(ONN...

    机器之心
  • 最高50万QPS,腾讯云新发布Redis 4.0标准版突破性能极限

    Redis在缓存应用场景中拥有不可取代的地位,被广泛应用于数据缓存、游戏存储、分布式会话存储、实时分析和机器学习等场景。腾讯云在Redis数据库领域的不断突破,...

    腾讯云数据库 TencentDB
  • 最高50万QPS,腾讯云新发布Redis 4.0标准版突破性能极限

    Redis在缓存应用场景中拥有不可取代的地位,被广泛应用于数据缓存、游戏存储、分布式会话存储、实时分析和机器学习等场景。腾讯云在Redis数据库领域的不断突破,...

    勤劳的小蜜蜂

扫码关注云+社区

领取腾讯云代金券