AI向程序员老司机学习:从眼神变化中寻找bug

NAIST的研究人员把眼球追踪的研究用在软件开发领域,让智能体从程序员的眼部活动中学习找bug、打补丁、写注释。

用AI找bug这件事,有人尝试过,结果翻车了。美国网站Yelp的程序员们试图让AI帮自己找bug,岂料AI却删库跑路,最后只能用回滚的办法挽回损失。

AI向程序员老司机学习:从眼神变化中寻找bug

当然,这只是程序员开的一个玩笑。但是让AI找bug一直是程序员们美好的愿望。

育碧和Mozilla曾开发过一个AI,能从过去代码库的错误中学习找bug,并在今后提交新代码时标出可能的bug。

然而这些在程序员老司机面前都是渣渣,大神们往往一个眼神,就能直接定位到bug所在的位置。如果让AI直接向大神学习,岂不更快?

日本奈良先端科学技术大学院大学(名字有些长,下面简称NAIST)的研究人员真的做到了,他们把眼球追踪的研究用在软件开发领域,构建了一个基于模仿学习(IL)的框架,让智能体从程序员的眼部活动中学习找bug、打补丁、写注释。

以往的AI找bug方法是从文本特征中学习。而程序员独有的注意力策略可以节省程序理解和维护的时间。大神们会将注意力集中在程序的重要信息上,仅浏览源代码中的关键字。

AI向程序员老司机学习:从眼神变化中寻找bug

NAIST的AI就是在软件开发中模仿程序员的视觉注意力。结合程序员眼睛注视的数据,智能体可以获得到过去难以学习到的注意力策略。

由于程序代码是文本序列,研究人员用自然语言处理的方法来设计智能体。这个智能体包括两个深度神经网络:

第一部分是一个RNN,用来对代码片段的全局上下文进行编码。第二部分是指定任务解码器,用上一步的编码数据来预测下一步的token。

代码片段和编程环境被当做一系列token或关键字,智能体被限制专注于模仿程序员视觉注意力的特定子标记,作为输入当前状态并输出所需的操作。

AI向程序员老司机学习:从眼神变化中寻找bug

这种方法还需要大量的演示数据。研究人员建议使用生成对抗网络,让AI学习编程大神们的示范操作,而不仅仅是模仿。

总的来说,这种方法利用了模仿学习,让智能体从人类示范中收集相关复杂任务的知识。智能体由行为克隆(behavioral cloning)训练的模型表示。代码片段和编程环境被认为是一系列token或关键字,智能体被限制去关注模仿程序员注意到的特定代码,作为当前状态的输入,并输出所需的操作。

仅仅依靠眼部数据还不够,NAIST团队还建议用脑电图(EEG)读数视觉注意力的补充数据。如果这个模型在生产环境中使用,可以提高AI智能体在软件开发任务中的性能。

在论文的最后,研究人员说,即使没有语言描述,婴儿也能从父母的演示中学到了很多东西。他们或许是从婴儿行为获得的启发。看来AI也逃脱不了“复读机”的命运。

论文链接:https://arxiv.org/abs/1903.06320

版权所有,未经授权不得以任何形式转载及使用,违者必究。