抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?
作者 | James Vincent等
编译 | 夕颜
出品 | AI科技大本营(ID:rgznai100)
导读:在过去的一年中,AI 生成书面文字的能力大大提高。通过扫描庞大的文本数据集,机器学习软件可以生成从短篇小说到歌词的各种令人信服的样本。现在,一个名为 Deep TabNine 的新程序,可以将相同的技术应用于编码世界。这个程序一经F推出便好评如潮,大有抢了程序员饭碗的架势。这个程序是否真有这么好用?我们来一探究竟。
什么是Deep TabNine?
据外媒 The Verge 报道,Deep TabNine 是由滑铁卢大学的计算机科学本科生 Jacob Jackson 创建的编码自动完成器,程序员可以将它作为附件安装在他们选择的编辑器中,程序员写代码时,这个程序会给出下一行代码建议,每次提供一小段代码。你可以将它理解为 Gmail 的智能撰写功能用到了代码上。
据悉,Jacob 于 2018 年 2 月开始研究该软件的原始版本,在 11 月发布之前它叫做 TabNine。本月早些时候,他发布了一个更新版本,该版本使用由研究实验室 OpenAI 设计的深度学习文本生成算法模型 GPT-2 来改善能力。该模型使用 Transformer 架构,旨在解决自然语言处理中的问题,Deep TabNine 用这个架构来理解代码中的英语。例如,模型可以使用 if / else 语句来进行否定。在训练时,模型的目标是根据前面给定的 token 来预测下一个 token。
Deep TabNine 使用 GitHub 的近 200 万个文件进行了训练,它具有预先存在的知识,而不是仅仅从用户当前的项目中学习。此外,这个模型还引用以自然语言编写的文档来推断函数名称、参数和返回类型。它还能利用传统工具难以发现的小线索。例如,它可以理解 app.get_user() 的返回类型被假定为具有设置器方法的对象,且 app.get_users()的返回类型被假定为列表。
机器学习极大提高智能编码能力
Jacob 表示,这种软件虽然并不新鲜事物,但机器学习已经大大地改善了它的功能。“这对我来说是解决了一个问题。”
Deep TabNine 的更新版本让程序员们留下了深刻印象,他们在 Twitter 上称这个软件“惊人”、“让人疯狂”和“绝对令人兴奋”。
用户 Franck Nijhof 是一位在闲暇时间从事开源家庭自动化软件工作的 IT 经理,他对 Deep TabNine 不仅感到惊讶 ,还觉得既兴奋又害怕。“我使用 Deep TabNine 的第一个小时内没有作用,因为我不停地被它惊讶到,脑子里一直不停地问它到底是怎么知道的?怎么做到的?” Nijhof 通过电子邮件告诉 The Verge。
这样的自动完成工具之前就有过,但 Nijhof 表示 Deep TabNine 的建议更准确。“我过去曾尝试过一些'通用'的智能编写程序,但它们很烦人而且没有帮助,”他说道,“TabNine 无疑是一个改变游戏规则的存在。”
特斯拉人工智能总监 Andrej Karpathy 也对这个程序赞不绝口:
深度学习自动编码 https://t.co/WenacHVj7z 非常酷!很久以前我在做 char-rnn(字符级循环神经网络)时尝试过相关的想法,但当时它并不是很有用。随着新工具(GPT-2)的出现和更多的关注,它将会发挥更大的作用。
- Andrej Karpathy(@karpathy),2019年7月18日
机器学习预测让代码建议更优,支持22种语言
Jackson 表示,该软件之所以可以提供更好的建议,是因为它可以进行预测。大多数自动填充程序必须解析用户已编写的内容来提出建议,就像人使用数学公式中的步骤一样理顺代码。相比之下,Deep TabNine 依赖于机器学习的能力来查找数据中的统计模式以进行预测。
与文本生成算法在大量书籍、文章和电影脚本数据集上进行训练的方式相同,Deep TabNine 对来自编码库 GitHub 的 200 万个文件进行了训练。它在这些数据中找到模式,并用其在任意给定代码行中可能出现的内容给出建议,无论是变量名还是函数。
Jackson 说,使用深度学习创建自动编码软件有几个优点。首先,它可以轻松添加对新语言的支持。只需要将更多的训练数据放入 Deep TabNine 中,它就会挖出模式。这意味着,Deep TabNine 支持大约 22 种不同的编码语言,而大多数同类型产品只支持一种。
Deep TabNine 支持的编码语言完整列表如下:
Python,JavaScript,Java,C ++,C,PHP,Go,C#,Ruby,Objective-C,Rust,Swift,TypeScript,Haskell,OCaml,Scala,Kotlin,Perl ,SQL,HTML,CSS,Bash
最重要的是,由于深度学习的分析能力,Deep TabNine 提出的建议整体上具有很高的质量。而且,因为软件不会查看用户自己写的代码来提出建议,所以它可以从编码的那一刻开始就起作用,而不用等着从用户编写的代码中寻找蛛丝马迹。
TABNINE并不完美:不擅长创造性代码
当然,这个软件也并非完美。它在提出建议时会出错,另外,它也不是对所有类型的编码都有用。Hacker News 和 r / program subreddit 的用户已经找到了它的各种优点和编程漏洞(但大多数倾向于正面评论)。
用户1:免费版本 200 KB 的限制对于实际代码库来说太低了,有考虑过提高限制吗?
Jacob Jackson 回复:可以试下付费版 30 天返款。所有版本的 TabNine 仍然适用于大于索引限制的项目。索引中将添加和删除文件,以确保索引文件与用户正在编辑的文件尽可能相关。
用户2:可以用,但不是很好用。对于你最喜欢的编辑器不支持或没有插件的语言来说,这是一个非常酷的技术,但是如果编辑器已经对语言有很好的支持(比如 VSCode for Typescript),它可能不会比连接自动完成的编辑器更好用。
用户3:添加 IntelliJ Idea 支持,我会买它:)
用户 4:支持 Emacs 后,我会买!
对于这个为程序员构建的编码工具的编辑器和工作流程精确度,大家也有很多看法。
Jackson 也坦承了 Deep TabNine 的一些缺点,如它更适合某些类型的编码。它在自动完成相对死记硬背的代码时效果最好,这种编程已经被做过数千次,只有很小的变化。但是,它并不擅长用户用于解决新问题的探索性代码。考虑到软件的智能来自数据中的模式,这并不奇怪。
那么,它对于普通程序员真的有用吗?这取决于很多因素,比如他们使用的编程语言,他们想要实现的目标等。但 Jackson 表示,与其说是一个人类编码助手,它更像是一种更快的输入法(一种常见的被称为结对编程的做法)。
“想象一下,现在所有的程序员都在使用相当于手机的键盘打字,而使用 Deep TabNine 有点像转而去使用常规键盘,”他说道。这款软件可以提高用户输入信息的速度,并且可以提高工作效率,“因为你可以花更多时间考虑内容而不是细节。”但它不会按照你的方式编写代码,而你也确实需要要密切关注它的动向。
如何使用 Deep TabNine?
虽然集成深度学习模型具有多种优势,但使用它需要大量的算力。Jackson 明确提到,在笔记本电脑上运行无法实现 TabNine 用户习惯的低延迟。对此,他们提供了一种解决方案——TabNine Cloud(Beta)服务,该服务将使用户能够使用 TabNine 的服务器进行 GPU 加速自动完成。访问 TabNine Cloud,可以在此处免费注册:https://tabnine.com/beta_signup
但是,有许多人更愿意将代码保存在他们的机器上。为了确保代码的隐私性和安全性,TabNine 团队正在研究以下用例:
他们承诺在未来推出尺寸减小的模型,个人开发者可以在笔记本电脑上运行,提供合理的延迟。
企业可以选择模型许可,在自己的硬件上运行。他们还提供训练自定义模型,以了解企业代码库特有的独特模式和样式。
商业化前途未定
目前,Jackson 正在考虑下一步该用这款软件做些什么,以及是否值得商业化。他说,他本人目前在一家大型科技公司有一份全职工作,他还不想放弃,但来自各领域的人都对这款软件表示“非常感兴趣”。“我还没有真正决定我想用它做什么。”
目前,TabNine 的个人许可用费用为 49 美元,商业用途费用为 99 美元,个人必须注册 Deep TabNine 测试版才能访问新的深度学习功能。购买许可之后, TabNine 能够索引更多文件,给出更多相关建议。
网站上写道:“TabNine 每分钟至少可以为你节省 1 秒钟。如果你认为你的时间价值超过 1.40 美元/小时,它将帮你在不到一年的时间内收回成本。“
他说,如果他能够使用开源软件创建这样的程序,那么 AI 辅助编码的未来就是一片光明。
“这是在这个领域工作的每个人的目标,告诉计算机你想要写什么样的代码,它就能帮你写,”他说道。“我们目前距离实现这个目前还很远,但我认为这种工具可以帮助你更方便地表达自己的想法。”
原文链接:
https://www.theverge.com/2019/7/24/20708542/coding-autocompleter-deep-tabnine-ai-deep-learning-smart-compose
https://hub.packtpub.com/introducing-deep-tabnine-a-language-agnostic-autocompleter-based-on-openais-gpt-2/
(*本文为 AI科技大本营编译文章,转载请联系微信 1092722531)
◆
精彩推荐
◆
“只讲技术,拒绝空谈!”2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。目前,大会早鸟票抢购中~扫码购票,领先一步!
推荐阅读
博士毕业最高201万!华为顶级薪酬招“天才少年”
单v100 GPU,4小时搜索到一个鲁棒的网络结构
别再说学不会:超棒的Numpy可视化学习教程来了!
再不要这样起变量名了!
17 岁成为 iOS 越狱之父,25 岁造出无人车,黑客传奇!
刚刚!为吊打谷歌,微软砸10亿美元布局AI,网友炸了!发帖上热门……
华为,百度豪投,这类程序员要再次上榜了!
百度入局, 一文读懂年交易过4亿「超级链」究竟是什么?
云计算将会让数据中心消失?

相关文章:
JS 总结之事件循环
众所周知,JavaScript 为了避免复杂,被设计成了单线程。 ⛅️ 任务 单线程意味着所有任务都需要按顺序执行,如果某个任务执行非常耗时,线程就会被阻断,后面的任务需要等上一个任务执行完毕才会进行。而大多数非常耗时的…
设计模式之工厂方法模式(Factory Method)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式);…

SpanBERT:提出基于分词的预训练模型,多项任务性能超越现有模型!
作者 | Mandar Joshi, Danqi Chen, Yinhan Liu, Daniel S. Weld, Luke Zettlemoyer, Omer Levy译者 | Rachel责编 | Jane出品 | AI科技大本营(ID: rgznai100)【导读】本文提出了一个新的模型预训练方法 SpanBERT ,该方法能够更好地表示和预测…

XP与Windows 7(Win7)等操作系统Ghost备份
XP与Windows 7(Win7)等操作系统Ghost备份 2013年5月5日 前提:备份还原win7的话,此种Ghost备份方法只针对没有100MB保留分区的win7安装方式。去掉100MB的方法可以参考《Windows7(win7)系统重装与破解》&…

SSE4.1和SSE4.2 Intrinsics各函数介绍
SIMD相关头文件包括: //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #…

Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
Nacos近期发布了0.7.0版本,该版本支持对接第三方CMDB获取CMDB数据、使用Selector机制来配置服务的路由类型、支持单机模式使用MySQL数据库、上线Node.js客户端,并修复了一些bug。对接CMDB实现就近访问在服务进行多机房或者多地域部署时,跨地域…

数十篇推荐系统论文被批无法复现:源码、数据集均缺失,性能难达预期
作者 | Maurizio Ferrari Dacrema译者 | 凯隐责编 | Jane出品 | AI科技大本营(ID: rgznai100)【导读】来自意大利米兰理工大学的 Maurizio 团队近日发表了一篇极具批判性的文章,剑指推荐系统领域的其他数十篇论文,指出这些论文中基…

crontab 总结
2019独角兽企业重金招聘Python工程师标准>>> 1.写法 每三天执行一次:0 0 */3 * * root command,注意:* * */3 * * root command 这样写是不对的。其它每N小时执行一次也类似 (后续补充) 转载于:https://…

ubuntu安装thrift
ubuntu环境下安装thrift-0.10.0 1.解压 2.编译安装 ./configure -with-cpp -with-boost -without-python -without-csharp -with-java -without-erlang -without-perl -with-php -without-php_extension -without-ruby -without-haskell -without-go make sudo make install3.是…

AES(Advanced Encryption Standard) Intrinsics各函数介绍
AES为高级加密标准,是较流行的一种密码算法。 SIMD相关头文件包括: //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #…

轻松应对Java试题,这是一份大数据分析工程师面试指南
作者 | HappyMint转载自大数据与人工智能(ai-big-data)导语:经过这一段时间与读者的互动与沟通,本文作者发现很多小伙伴会咨询面试相关的问题,特别是即将毕业的小伙伴,所以决定输出一系列面试相关的文章。本…

【Elasticsearch 5.6.12 源码】——【3】启动过程分析(下)...
版权声明:本文为博主原创,转载请注明出处!简介 本文主要解决以下问题: 1、ES启动过程中的Node对象都初始化了那些服务?构造流程 Step 1、创建一个List暂存初始化失败时需要释放的资源,并使用临时的Logger对…

C++中的封装、继承、多态
封装(encapsulation):就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程&…

比尔盖茨护犊子 称iPad让大批用户沮丧
为什么80%的码农都做不了架构师?>>> 在5月6日接受美国CNBC电视台访问时,微软前任掌门人比尔盖茨维护了自家反响不那么好的Surface系列平板电脑,同时他还不忘吐槽了一把iPad。 当 谈到日渐颓败的PC市场时,盖茨称平板电…

小心陷阱:二维动态内存的不连续性
void new_test() {int** pp;pp new int*[10];for(int i0; i<10; i){pp[i] new int[10];}//pp[0], pp[1], ... , pp[9]在内存中连续;//a1 pp[0][0], pp[0][1], ... , pp[0][9]在内存中也是连续的;//a2 pp[1][0], pp[1][1], ... , pp[1][9]在内存中也是连续的;//...//a9 …

超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图
作者 | Saikat Basu等译者 | 陆离责编 | 夕颜出品 | AI科技大本营(ID: rgznai100)导读:现如今,即使可以借助卫星图像和绘制软件,创建精确的道路图也依然是一个费时费力的人力加工过程。许多地区,特别是在发…
npm包发布记录
下雪了,在家闲着,不如写一个npm 包发布。简单的 npm 包的发布网上有很多教程,我就不记录了。这里记录下,一个复杂的 npm 包发布,复杂指的构建环境复杂。 整个工程使用 rollup 来构建,其中会引进 babel 来转…
设计模式之单例模式(Singleton)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式)࿱…

关于知识蒸馏,这三篇论文详解不可错过
作者 | 孟让转载自知乎导语:继《从Hinton开山之作开始,谈知识蒸馏的最新进展》之后,作者对知识蒸馏相关重要进行了更加全面的总结。在上一篇文章中主要介绍了attention transfer,FSP matrix和DarkRank,关注点在于寻找不…
设计模式之建造者模式(生成器模式、Builder)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式、生成器模式…

[置顶] webservice系列2---javabeanhandler
摘要:本节主要介绍以下两点,1.带javabean的webservice的开发和调用 2.handler的简单介绍及使用1.引言在之前的一篇博客webservice系列1---基于web工程上写一个基本数据类型的webservice中介绍了如何采用axis1.4来完成一个简单的webservice的开发流程(入参…

AI教育公司物灵科技完成战略融资,商汤科技投资
1月2日消息,从相关媒体报道,AI教育公司物灵科技近日完成了商汤的战略融资,本轮融资将用于产品迭代和扩大市场。 此前投资界曾报道,物灵科技已经获得1.5亿元Pre-A轮融资,当时具体资方未透露。 公开资料显示࿰…

Python之父发文,将重构现有核心解析器
原题 | PEG Parsers作者 | Guido van Rossum译者 | 豌豆花下猫转载自 Python猫(ID: python_cat) 导语:Guido van Rossum 是 Python 的创造者,虽然他现在放弃了“终身仁慈独裁者”的职位,但却成为了指导委员会的五位成员…

全面支持三大主流环境 |百度PaddlePaddle新增Windows环境支持
2019独角兽企业重金招聘Python工程师标准>>> PaddlePaddle作为国内首个深度学习框架,最近发布了更加强大的Fluid1.2版本, 增加了对windows环境的支持,全面支持了Linux、Mac、 windows三大环境。 PaddlePaddle在功能完备的基础上,也…
设计模式之原型模式(Prototype)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式、生成器模式…

NFS共享服务挂载时出现“access denied by server while mounting”的解决方法
笔者用的Linuxf发行版本为Centos6.4,以下方法理论上讲对于Fedora, Red Hat均有效: 搭建好NFS服务后,如果用以下的命令进行挂载: # mount -t nfs 172.16.12.140:/home/liangwode/test /mnt 出现如下错误提示: mount.nf…
设计模式之桥接模式(Bridge)摘录
23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。 创建型模式包括:1、FactoryMethod(工厂方法模式);2、Abstract Factory(抽象工厂模式);3、Singleton(单例模式);4、Builder(建造者模式、生成器模式…

原360首席科学家颜水成正式加入依图科技,任首席技术官
7 月 29 日,依图科技宣布原 360 首席科学家颜水成正式加入,担任依图科技首席技术官(CTO)一职。依图方面称,颜水成加入后将带领团队进一步夯实依图在人工智能基础理论和原创算法方面的技术优势,为依图在商业…

分布式存储fastdfs安装使用
1.下载地址https://github.com/happyfish100/fastdfshttps://github.com/happyfish100/fastdfs/wiki安装辅助说明文档2.安装编译环境yum install git gcc gcc-c make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y三台主机:…

Hibernate学习(九)———— 二级缓存和事务级别详讲
序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例。之后就会在去讲SSM,在之后我自己的个人博客应该也差不多可以做出来了。基本上先这样…