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

简介:

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

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

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

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

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

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

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 的大体结构流程如下图所示。

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


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

意义

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

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

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

via microsoft





本文作者:恒亮
本文转自雷锋网禁止二次转载, 原文链接
目录
相关文章
|
1月前
|
人工智能 自然语言处理 算法
国产新型AI编程助手—DevChat AI插件在VSCode中的应用
国产新型AI编程助手—DevChat AI插件在VSCode中的应用
|
1月前
|
人工智能 自然语言处理 IDE
被 AI 写的游戏代码砸中是什么感觉 | 10 分钟打造你的超级 AI 编码助手
被 AI 写的游戏代码砸中是什么感觉 | 10 分钟打造你的超级 AI 编码助手
|
1天前
|
人工智能 运维 自然语言处理
对话蚂蚁李建国:当前AI写代码相当于L2.5,实现L3后替代50%人类编程
超70%代码问题,单纯靠基座大模型是解决不了的;未来3-5年,人类50%编程工作可以被替代,有些环节甚至完全自动化。蚂蚁集团代码大模型CodeFuse负责人李建国说道。当下,AI代码生成领域正在野蛮式生长,巨头涌入,AI员工频频上线企业;首个AI程序员Devin被曝造假…… 面对风起云涌的代码生成变革,李建国给出了这样一个明确论断。
14 0
|
1天前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
5 0
|
9天前
|
机器学习/深度学习 算法 PyTorch
fast.ai 深度学习笔记(三)(3)
fast.ai 深度学习笔记(三)(3)
24 0
|
9天前
|
机器学习/深度学习 PyTorch 算法框架/工具
fast.ai 深度学习笔记(三)(1)
fast.ai 深度学习笔记(三)(1)
30 0
|
9天前
|
机器学习/深度学习 固态存储 Python
fast.ai 深度学习笔记(四)(2)
fast.ai 深度学习笔记(四)
44 3
fast.ai 深度学习笔记(四)(2)
|
9天前
|
机器学习/深度学习 算法框架/工具 PyTorch
fast.ai 深度学习笔记(五)(4)
fast.ai 深度学习笔记(五)
65 3
fast.ai 深度学习笔记(五)(4)
|
机器学习/深度学习 自然语言处理 Web App开发
fast.ai 深度学习笔记(五)(3)
fast.ai 深度学习笔记(五)
110 2
fast.ai 深度学习笔记(五)(3)
|
9天前
|
机器学习/深度学习 API 调度
fast.ai 深度学习笔记(六)(3)
fast.ai 深度学习笔记(六)
77 6
fast.ai 深度学习笔记(六)(3)