周 鹏 武延军 赵 琛
1(中国科学院软件研究所 北京 100190) 2(中国科学院大学 北京 100049) 3(计算机科学国家重点实验室(中国科学院软件研究所) 北京 100190)
(zhoupengwork01@163.com)
教会机器理解代码、编写程序或构造可自学习的智能软件一直是人工智能的重要挑战问题之一[1].当前基于神经网络的深度学习在图像处理、语音识别、自然语言处理等领域从研究到应用取得了很大的成功,但是在程序生成上距离研究到实用仍有明显差距.许多学者在程序处理领域也使用神经网络深度学习方法进行了积极探索,提出了不少研究方法,取得了很好的效果,但是仍然未能有效解决泛化能力差、程序正确性、难以处理复杂程序结构的问题.当前基于神经网络的程序生成研究主要包括基于程序输入-输出数据样例的方法[2-6]、基于标注程序执行轨迹样例的方法[7-8]和基于标注源码的方法[9-13].
1) 基于程序输入-输出样例的方法.该方法以神经网络为待学习控制器,从输入-输出样例训练控制器学习预测对神经网络扩展外部存储的操作序列.该方法完全依赖输入输出数据对,存在从数据倒推操作序列的歧义性、泛化能力差、限定一个小的DSL(domain specific language)语言[14]空间、只能处理非常简单的程序结构等问题.比如著名的微软DeepCoder[2]只能处理自定义的一个小型DSL语言,主要预测5行以内、每行只有一个主标识符、顺序结构的平铺程序,不能处理分支、递归、跳转等复杂控制结构,因此习得的程序非常简单.
2) 基于标注程序执……