开发 | 还在费心学编程?微软用深度学习 AI 帮你写代码

在过去的几十年中,无论在硬件组织还是软件架构上,计算机行业已经发生了翻天覆地的变化,各种软硬件产品的性能和用户体验均得到了显著提升。

但对程序员而言,软件编码的本质似乎并没有什么本质的改变:无论哪种编程语言,仍然需要程序员根据算法逻辑和实现步骤一步一步地手动敲入代码。虽然近几年随着编码工具的改进和编程语言的版本更新,对于程序员而言,这一过程已经相当方便了,但学习如何编程仍然是诸多计算机用户不得不面对的一道难题。

AI科技评论消息,近日,微软在论文中公布了一项最新的代码合成系统:RobustFill。它基于深度学习技术,可以根据用户指定的输入输出样例进行特征提取,然后自动合成能够实现相应功能的软件代码,大大缩减了程序员的编码工作量。

举例来说,假设用户需要编码实现如下功能:将输入的人名信息进行规范化缩写后输出。具体如下图所示,当输入人名为 “jacob daniel devlin” 时,系统应该输出 “Declin,J” 。基于 RobustFill,用户只需要提供一些简单的输入输出样例(图中前三行黑色字体),系统就能自动合成实现这一功能的软件代码,并输出正确结果(图中后三行灰色字体)。如果用户需要处理的人名有成千上万个,这就能节约大量的处理时间。

RobustFill 系统生成的代码基于 DSL(Domain Specific Language),即领域特定语言。用户并不需要理解 DSL 的编程细节,实际上,用户根本看不到 DSL 代码,而只需要关注具体的功能实现就行了。对应上述人名缩写样例,RobustFill 生成的 DSL 代码如下所示:

Concat( ToCase( GetToken( input, Type=Word, Index=-1), Type=Proper), Const(", "), ToCase( SubString( GetToken( input, Type=Word, Index=1), Start=0, End=1), Type=Proper), Const("."))

自动代码合成的难点主要有两个:

  • 一是系统可以自动合成万亿级的不同的 DSL 代码组合,如何判断哪一种是正确结果;
  • 二是用户提供的输入输出样例一般都是人工输入,难免会出现一些笔误(例如上面人名缩写的例子中,表格第二行,用户把“Useato”写成了“uesato”),系统如何避免这些笔误的不良影响。

针对这两个问题,此前的解决方案是微软 Excel 软件中的 FlashFill 系统。该系统凭借开发人员手动设置规则和启发式搜索(Heuristic Search)的方式,为用户输出特定功能的代码。但 FlashFill 系统严重弱化了 DSL 语言的扩展能力,并且需要开发者大量的人工输入,同时对人工输入的笔误也非常敏感,因此并不是最优的解决方案。

与 FlashFill 不同,在深度学习技术的支持下,RobustFill 可以利用数据驱动的方式进行代码合成,而无需开发者手动设置规则。此外,RobustFill 还使用了此前用于自然语言翻译的一种名为“attentional sequence-to-sequence neural network”(注意力序列到序列神经网络)的技术,因此才能基于用户给定的输入输出样例,自动合成代码。RobustFill 的大体结构流程如下图所示。

微软用数百万随机生成输入/输出和对应的编码来训练该系统。由于 RobustFill 能学会 DSL 的语法,微软认为它在真实数据上会有良好表现。总的来说,微软 RobustFill 在真实测试中达到了 92% 的精确度。最让人感到鼓舞的是,即便输入/输出样例包含大量噪音,RobustFill 仍能够保持高水准的精确度。

意义

在 FlashFill DSL 这样的强大函数语言上,成功地训练神经架构学习编程,是神经代码合成的一项了不起的成就。微软表示,这同时也是迈向通用 AI 的一小步。RobustFill 解决了加入可编译性( interpretability)的核心难题,并探索了用知识的符号表示连接分布式表达( connecting distributed representations with symbolic representations of knowledge)这一课题。

微软最后在官方博客宣布:

“我们正在开发这些架构的扩展,用变量和控制流来学习 DSL 中的代码,以生成更丰富的代码类。我们相信,照这个方向走下去需要我们研究、解决代码合成和归纳问题中的关键技术难关。”

via microsoft

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2017-04-24

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据科学与人工智能

【Python环境】玩转数据分析,必知必会的7款Python工具!

如果你有志于做一个数据专家,你就应该保持一颗好奇心,总是不断探索,学习,问各种问题。在线入门教程和视频教程能帮你走出第一步,但是最好的方式就是通过熟悉各种已经在...

21850
来自专栏java一日一条

如何用Python写一个贪吃蛇AI

这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过。但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了。 问题的关键在...

32120
来自专栏机器之心

业界 | 微软推出深度学习加速平台「Project Brainwave」:FPGA驱动实时人工智能

选自微软博客 机器之心编译 参与:路雪、黄小天、蒋思源 近日在 Hot Chips 2017 上,微软团队推出了一个新的深度学习加速平台,其代号为脑波计划(Pr...

37370
来自专栏瓜大三哥

matlab基础1

matlab简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要...

247100
来自专栏数据科学与人工智能

【Python环境】玩转数据分析,必知必会的7款Python工具!

如果你有志于做一个数据专家,你就应该保持一颗好奇心,总是不断探索,学习,问各种问题。在线入门教程和视频教程能帮你走出第一步,但是最好的方式就是通过熟悉各种已经在...

24880
来自专栏腾讯技术工程官方号的专栏

今天的【 科技文 】有点污

作者:张大威,TEG 安全平台部。2013年加入安全平台部,从事多媒体信息安全、智能安全领域,目前在色情语音识别和藏维语识别领域,利用深度学习技术构建恶意音视频...

23870
来自专栏华章科技

数据专家必知必会的7款Python工具

我咨询了我们真正的数据专家,收集整理了他们认为所有数据专家都应该会的七款 Python 工具。The Galvanize Data Science 和 Galv...

11830
来自专栏AI研习社

还在费心学编程?微软用深度学习 AI 帮你写代码

在过去的几十年中,无论在硬件组织还是软件架构上,计算机行业已经发生了翻天覆地的变化,各种软硬件产品的性能和用户体验均得到了显著提升。 但对程序员而言,软件编码的...

33360
来自专栏图形学与OpenGL

CG实验1 三角形绘制

请参考教材博客网页文章:《WebGL画点程序v1-3》,《 WebGL绘制三角形》,具体见:http://blog.csdn.net/wpxu08

12930
来自专栏鸿的学习笔记

Upvote Dynamics on the Quora Network(上)

当一个答案被添加到Quora时,存在着将它分发给跟随作者的人的各种机制。其中最突出的是主页Feed和摘要电子邮件,但也有其他途径,如较新的“您关注的人”电子邮件...

7310

扫码关注云+社区

领取腾讯云代金券