本篇文章1725字,读完约4分钟
在过去的几十年中,计算机行业在硬件组织和软件架构方面都发生了翻天覆地的变化,各种软硬件产品的性能和用户体验都有了显著的提高。
然而,对于程序员来说,软件编码的本质似乎并没有根本改变:不管是哪种编程语言,程序员仍然需要根据算法逻辑和实现步骤一步一步地手工输入代码。近年来,随着编码工具的改进和编程语言的更新,这一过程对程序员来说相当方便,但学习如何编程仍然是许多计算机用户不得不面对的难题。
雷锋。(公开号码:雷锋。com)。最近,微软发布了一个新的代码合成系统:robustfill。基于深度学习技术,它可以根据用户指定的输入输出样本提取特征,然后自动合成能够实现相应功能的软件代码,大大降低了程序员的编码工作量。
例如,假设用户需要编码来实现以下功能:规范化和缩写输入的名称信息,然后输出它。如下图所示,当输入名称为“jacob daniel devlin”时,系统应该输出“declin,j”。基于robustfill,用户只需要提供一些简单的输入输出样本(图中前三行黑色字体),系统就可以自动合成软件代码来实现这个功能,并输出正确的结果(图中最后三行灰色字体)。如果用户需要处理成千上万的名字,可以节省大量的处理时间。
robustfill系统生成的代码基于dsl(领域特定语言)。雷锋得知用户不需要了解dsl的编程细节。事实上,用户根本看不到dsl代码,只需要注意具体的功能实现。对应上述名称缩写示例,robustfill生成的dsl代码如下:
concat(
tocase(
gettoken(
输入,
type=word,
索引=-1),
类型=正确),
常量(“,”),
tocase(
子字符串(
gettoken(
输入,
type=word,
索引=1),
start=0,
end=1),
类型=正确),
常量(“.”))
自动代码合成有两个主要困难:
首先,系统可以自动合成数万亿种不同的dsl代码组合,如何判断哪一种是正确的结果;
其次,用户提供的输入输出样本一般都是手工输入,不可避免地会出现一些笔误(例如,在上面的人名缩写示例中,在表格的第二行,用户将“useato”写成“uesato”)。系统如何避免这些文书错误的负面影响?
为了解决这两个问题,以前的解决方案是微软excel软件中的flashfill系统。在开发人员手动设置规则和启发式搜索的帮助下,系统为用户输出具有特定功能的代码。然而,flashfill系统严重削弱了dsl语言的扩展能力,需要开发人员大量的手工输入,并且对手工输入错误也非常敏感,因此不是最好的解决方案。
与flashfill不同,在深度学习技术的支持下,robustfill可以以数据驱动的方式合成代码,而不需要开发人员手动设置规则。此外,robustfill还使用了一种称为“注意序列到序列神经网络”的技术,这种技术以前曾用于自然语言翻译,因此它可以根据用户给出的输入和输出样本自动合成代码。下图显示了robustfill的总体结构流程。
微软用数百万随机生成的输入输出和相应的代码来训练这个系统。因为robustfill可以学习dsl语法,微软认为它在真实数据上会表现很好。雷锋得知,总的来说,微软robustfill在实际测试中达到了92%的准确率。最令人鼓舞的是,即使输入/输出样本包含大量噪声,robustfill也能保持高精度。
对规划的影响
在一种功能强大的语言中,比如flashfill dsl,成功地训练神经架构来学习编程是神经代码合成中的一个显著成就。微软表示,这也是迈向通用人工智能的一小步。Robustfill解决了增加可解释性的核心问题,并探索了将分布式表示与知识的符号表示联系起来的主题。
微软终于在官方博客中宣布:
“我们正在开发这些架构的扩展,使用变量和控制流来学习dsl中的代码,以便生成更丰富的代码类。我们相信,朝着这个方向发展需要我们研究和解决代码合成和归纳中的关键技术难题。”
microsoft
相关文章:
机器学习的出现会给程序员带来什么变化?
艾想抢程序员的工作?电脑可以在未来自行编程
雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。
来源:搜狐微门户
标题:还在费心学编程?微软用深度学习 AI 帮你写代码
地址:http://www.shwmhw.com/shxw/60038.html