开发者的坏消息?这个AI越来越会写代码!
决定学习哪种编程语言对于当今的开发者来说都是一个大问题,因为这都需要大量的时间投入。但在未来使用人工智能 (AI) ,通过它理解需求描述并编码来完成所有工作时,这个问题可能会变得无所谓了。
这不,2月3日Alphabet 旗下的 AI 公司 DeepMind 又搞出了新进展。DeepMind 表示,该公司设计的 AlphaCode AI系统具备能撰写程序的能力,且在竞赛中证明已经具备人类中级程序员的水平!
DeepMind开发的 AlphaCode 属于机器学习范畴,可自主学习并具体解决问题的能力。
DeepMind 利用大量现存代码及数据集训练后,AlphaCode 的转换器(transformer)语言模型随后产出大规模的程序代码,从中产出指定的程序。
AlphaCode 经过编程平台Codeforces的比赛,被认为具各中等开发人员的水准,这也是AI编写代码系统首次达到具有竞争力的成绩。而这些比赛是需要人类理解自然语言描述的问题,然后才能有效地编写算法。
以下示例是 Codeforces 上的 1553D 问题:(链接:https://codeforces.com/problemset/problem /1553/D)。
有两个字符串 s 和 t,都是由小写字母组成。对于字符串 s,我们从前向后扫描整个字符串。
如果按下 Backspace 键,就删除该光标前到上一个未删除字符之间的所有字符。例如字符串 s 是”abcbd”,你分别在第一个位置和第四个位置按下 Backspace,那么将得到字符串”bd”。
因为在第一个光标位置前没有字符,所以第一次没有动作。第四个光标位置前的字符是 c,上一个未删除字符是 a,所以按下 Backspace 将删除前三个字符”bd”。
好了,现在问题来了:我们能否从前向后扫描一次 s 字符串, 让 s 变为 t。如果可以输出 YES,否则输出 NO。
AlphaCode 给出的代码是这样的:
向以上程序输入 4 组字符串:
得到的输出结果是:
AlphaCode 不再是黑箱,它不仅成功解决了问题,还能将代码和注意力用高亮的对应位置显示出来。
如果把这个分数放到过去六个月总体来看,AlphaCode的成绩更为优秀,因为它只刷了10周的题目,就已经达到了前28%用户的水平。
DeepMind指出,程序算法竞赛本质上是程序员解决问题的过程。参赛者接到多个问题描述,并被要求在几小时内编写程序并解决问题。赢得编程竞赛需要的问题解决能力超出现有AI系统能力,而这集结了分析思维、逻辑、演算法、程序编写及自然语言理解。为此,DeepMind结合了大规模转换器(transformer)模型大量程序取样(sampling)及筛选(filtering)试图开发出能解决未知问题的AI系统。
在执行层面,AlphaCode 的预训练数据集包含了 715 GB 的代码,这些代码取自 GitHub ,分别用 C++、C#、Go、Java、JavaScript/TypeScript、Lua、Python、PHP、Ruby、Rust 和 Scala 编写。该团队使用从 Codeforces 和类似数据集中抓取的竞争性编程问题数据集对模型进行了微调。
在评估阶段,他们为编程比赛主办方给定的问题各建立了该公司历来最大量C++和Phyton代码,然后开始针对这些程序进行筛选、集合及重新排名,最后完成10支最有希望的程序,然后提交给比赛方。
模型原理
DeepMind指出,这套自动化模型系统运作不同于一般比赛者使用的尝试错误(trial and error)过程,即除错、编译、测试及提交。
图片来源/DeepMind
最后,他们在主办方同意下,模拟参赛近年10次竞赛,每一次AlphaCode都必须编写出新的解决方案。总结而言,AlphaCode能力在所有参赛者中,大约名列前54%的水准,居中等能力。虽然无法完全赢得大赛,但DeepMind认为AlphaCode已显示深度学习模型解决分析思维任务的能力进展。
Codeforces由俄罗斯程序员Mikhail Mirzayanov创办,大约每周举行一次名为“Codeforces Rounds”的编程比赛。通过Codeforces的Elo评分可以衡量一位程序员的编程水平。
当看到AlphaCode的成绩后,连创始人Mirzayanov都惊讶不已。他原本对AI持怀疑态度,因为编程比赛考验的是发明算法的能力,这是最困难的,没想到AlphaCode的结果完全超出了他的预期。
DeepMind相信这有助于推进问题解决型AI的研究。DeepMind也将AlphaCode使用的资料集公布在GitHub上,包括每一次测试的资料供外界开发者参考。
DeepMind发布这条消息仅半天,在Twitter上已经有2000多次转发、5000多点赞。
还值得注意的是,微软 GitHub 也正在开发一个名为 Copilot 的类似项目,该项目充当人类开发者的编码助手,使用公开可用的代码来训练 AI 系统。
英国曼彻斯特大学的Riza Theresa Batista-Navarro这样评价道,鉴于DeepMind 在其预印本论文中提供的示例,它似乎确实可以解决问题,同时从训练数据中复制的代码比人类已经做的要多一些。
她说,AlphaCode 似乎经过精心调整,可以解决复杂的算法挑战,而以前的 AI 编码工具在更简单的任务上仍然可以胜过它。
“虽然 AlphaCode 在竞争挑战上比 GPT 等最先进的 AI 做得好,但在入门挑战上的表现却相对较差,”Batista-Navarro 说。“假设他们想做竞赛级别的编程问题,以解决更具挑战性的编程问题,而不是介绍性的一般问题。这似乎表明该模型在更复杂的问题上得到了很好的调整,在某种程度上,它有点忘记入门级问题了。”
DeepMind 的 Oriol Vinyals 在一份声明中表示:“我从未期望 ML (机器学习) 在竞争对手中达到人类平均水平。但是,这表明要达到最高绩效水平,并提高我们人工智能系统解决问题的能力,还有很多工作要做。”
如此看来,这些写代码的AI,是来帮助我们开发者的,未来几代开发者的生活可能会轻松一些了。
作者:万能的大雄
相关阅读:
编程语言Python 团队提供了三个“被诅咒”的更新,希望速度赶超C语言