大数据文摘出品
编译:曹培信
程序员的意见是最难统一的,他们使用不同的语言和不同的IDE,还分成了各种派别。
但是任何一个程序员都不会拒绝一个兼容各种语言、会自动补代码的神器,一位学计算机的本科生就开发出这样一款神器——Deep TabNine。
如今,这款神器在VS Code的扩展商店里,已经有将近20万的下载量,并且全部五星好评,被称为程序员的“黑魔法”。
由于Deep TabNine需要较大的计算力,因此在笔记本电脑上运行Deep TabNine可能会存在一定的延迟,因此开发人员提供了一项服务,允许用户使用TabNine的服务器进行GPU加速,该服务名为TabNine Cloud,目前还处于测试阶段。
8月19日,开发人员又发布了TabNine Local,可以让用户在自己的计算机上运行Deep TabNine。
8月26日,IEEE Spectrum也对Deep TabNine的作者进行了采访,采访提及了开发Deep TabNine的初衷和过程中遇到的困难,也说到了Deep TabNine下一步的努力方向。
Deep TabNine的作者是一名叫Jacob Jackson的计算机科学本科生,就读于加拿大滑铁卢大学,同时也是OpenAI的一名实习生,Deep TabNine就是基于OpenAI的GPT-2自然语言处理模型,使用Transformer。
Deep TabNine的训练数据是来自GitHub的大约200万个代码文件,在训练期间,它的目标是根据程序员之前敲的代码内容和过去的习惯自动补全代码,并在后面给出几种选项的概率。
GPT-2主要用于自然语言处理,尽管补全代码和自然语言处理可能看起来毫无关系,但是Jacob认为,补全代码需要以一些意想不到的方式理解语言,比如,可以让模型在if/else语句下尝试否定单词:
或者使用以自然语言编写的文档来推断函数名称、参数和返回类型:
甚至可以完成看似不可能的任务——记住C++的可变参数转发语法:
Deep TabNine目前支持22种语言,几乎涵盖了所有的主流编程语言。
例如Python:
C++:
Java:
其他支持的语言还包括:JavaScript,c,PHP,Go,c # ,Ruby,Objective-C,Rust,Swift,TypeScript,Haskell,OCaml,Scala,Kotlin,Perl,SQL,HTML,CSS 和Bash。
并且Jacob Jackson表示,由于Deep TabNine是基于深度学习,它可以从示例代码中学习如何补全代码,只要对相应的数据集进行训练,就可以很方便地扩展到其他语言。
TabNine支持Sublime Text、VS Code、Sublime Text、Atom、Emacs、Vim五种代码编辑器,而且安装也都十分方便。
比如文摘菌平时用的Sublime Text,Sublime用户安装分为两步:
1.按下Ctrl+Shift+P(Mac系统:⌘+Shift+P),选择Install Package Control;
2.按下Ctrl+Shift+P(Mac系统:⌘+Shift+P),选择Package Control:Install Package,然后选择TabNine来安装。
成功安装之后,在工具栏Preferences的Package setting下,会出现TabNine。安装完之后,文摘菌表示:嗯,真香!
TabNine在Twitter上收到了各地程序员打来的“电话”:
参考译文:惊人!!基于深度学习的NLP技术将彻底改变我们编程的方式。Deep TabNine,一个基于GPT-2的模型,通过GitHub大约200万个文件的训练。
参考译文:GPT-2不仅在语言方面,而且在编程方面都提供了新的可能性。TabNine为所有语言提供源代码分析和自动补全功能。
8月26日,Jacob Jackson接受了IEEE Spectrum的采访,他向IEEE Spectrum介绍了Deep TabNine的开发初衷,也给出了Deep TabNine未来的发展方向。
IEEE Spectrum: 是什么给了你开发Deep TabNine的想法?
Jacob Jackson: 我以前在一家软件公司工作,当时有两种自动补全代码工具可用: 一种能很好地理解语言但速度很慢,另一种速度很快但效果不好。 我想要能兼顾的东西,它需要既快又聪明。这逐渐演变为我的开发特性,比如使用深度学习模型对补全代码进行排序,并试图找出(代码中的)通用模式。那是我们的创始目标,然后GPT-2发布了,我看到深度学习这种朝着非常好的方向发展的技术。 考虑到 TabNine 是一款自动补代码产品,我认为这是一个自然而然的事。
IEEE Spectrum: 关于 Deep TabNine 的工作原理?
Jacob Jackson: 它是基于 GPT-2的,GPT-2的工作方式就是向它提供一系列代码选择。你可以把一个代码想象成一个单词,如果你有一系列的单词,那么它会给你一个你将要看到的单词的分布。 因此,为了获得完成建议,您需要多次运行这个模型,并询问它认为接下来会出现什么代码,然后(在实际代码上) 再次运行它,这时就会得到(建议的)代码列表。 虽然它确实对文档和语法有一些了解,但是所有这些都是通过给它编码和使用它来预测下一步的输入来自然地学习到的。
IEEE Spectrum: 开发 Deep TabNine你遇到了什么困难?
Jacob Jackson: 应用深度学习的最大挑战是这些模型都需要大量密集的计算,因为我们需要一个高性能、高响应的系统。,所以我们开始提供Deep TabNine云服务,所以即使你的电脑没有那么强大,你仍然可以使用它。 我们最近还发布了 TabNine Local,它可以让你在自己的电脑上运行 Deep TabNine。
IEEE Spectrum: 深度学习是否实现了将Deep TabNine移植到不同的语言变得更容易?
Jacob Jackson: 是的,这种与语言无关的方法的优点就是,它的所有知识都是从(特定编程)语言的代码示例中获得的,因此很容易添加对新语言的支持。
IEEE Spectrum: Deep TabNine与其他自动完成工具,或者是IDE和代码编辑器具有的类似功能有何不同?
Jacob Jackson: 很多工具只能用于一种或几种语言。 而且,据我所知,这是唯一一个使用深度学习的补代码程序,我认为这提高了补代码的质量。
IEEE Spectrum: 开发人员对Deep TabNine还有什么期望?
Jacob Jackson: 我们的目标是让编程变得更简单。 假设你有一个想法,你想把它转换成代码,但是为了写代码,你必须把它输入键盘,查看编辑器,并且确保你不会出错。 我认为减少重复劳动的工具其价值在于,它能让你更专注于高层次的东西。 你将花费更少的时间敲代码,它可以为你完成简单的事情,让你不必浪费时间去想这些。
IEEE Spectrum: Deep TabNine 的下一步是什么?
Jacob Jackson: 在机器学习中,你可以不断改进模型,改进数据,(提供)更好的建议。文档是我们正在考虑的一个领域——拥有本地的、易于访问的文档。
对于 Deep TabNine,我有时使用的比喻是,我们希望它像使用电脑键盘一样,而不是使用(智能手机)键盘。 这并不是说键盘在为你写代码,(但)它让你写代码变得更加容易,你不得不少考虑一下。 使用电脑键盘会比使用(智能手机)键盘更有效率,而这正是我们想要的。
Deep TabNine:
https://tabnine.com/blog/deep/
相关报道:
https://spectrum.ieee.org/tech-talk/computing/software/qa-this-autocompletion-tool-aims-to-supercharge-your-coding