北大教授解读深度学习智能编程,这场AI开发者盛会你不来吗?
「WAIC 开发者·临港人工智能开发者大会」将于 2019 年 12 月 6 日-7 日在上海临港举办,本次大会由世界人工智能大会组委会指导,上海市经济和信息化委员会、中国(上海)自由贸易试验区临港新片区管理委员会主办,临港集团、机器之心承办。
本次大会设有主题演讲、开发者工作坊及挑战赛、技术和产业闭门研讨会等环节,邀请全球人工智能开发者共聚临港,共话未来。
在主题演讲环节,我们请到了北京大学信息科学技术学院软件研究所副教授、教育部高可信软件技术重点实验室(北京大学)成员、北京大学元培学院导师李戈。李戈老师将会向与会开发者分享他在程序分析和代码生成领域的经验,以及深度学习如何影响了这一领域的研究。
如何在软件开发过程中使用人工智能,大幅减少开发人员的工作量,提升开发效率?这是李戈老师近来孜孜探索的问题。软件开发本身是一个遵循众多潜在规律进行的工作过程,在近来的人工智能研究中受到了广泛关注。许多相关研究者希望能够利用人工智能技术挖掘和学习这些软件开发过程的规律,并用以辅助人类的软件开发活动。
作为国际最早基于深度学习的程序分析与生成研究的团队之一,李戈老师推动了很多深度学习在这一领域中的研究和应用。这一过程中,团队经历了程序分析与生成技术与深度学习技术碰撞、融合,从中总结了丰富的研究和开发经验。最终,团队推出了产品化的解决方案——aiXcoder。
在本次大会上,李戈老师会分享基于深度学习智能编程的相关内容,其中包括以下内容:首先,李戈老师会对深度学习用于程序代码理解与生成的基本技术思路进行介绍,对利用深度学习进行程序处理的困难及原因进行分析,进而对其已开发为产品的智能编程工具 aiXcoder 的基本原理和应用情况进行介绍。通过这次演讲,开发者可以从 AI 研究、软件开发、工程应用等多个角度,了解这一方向的前沿进展,获得全新的经验。
李戈:国际领先的深度学习研究和开发者
李戈老师可以说是国内很早一批接触深度学习的研究者和开发者了。他于 2006 年于北京大学博士毕业,毕业后即留校研究和参与教学工作。
在深度学习成为主流的过程中,李戈老师发挥了传道受业的作用,让更多的人了解了人工智能。例如,他主讲「计算概论 A」等课程,是最早在 Coursera 平台开设的中文计算机 MOOC 课程。而在,2015 年,李戈老师开设了北京大学「深度学习」研究生课程,是国内第一批纯粹介绍深度学习理论基础与前沿研究的专项课程。
除了向年轻学子传授相关知识,李戈老师也一直致力于深度学习的研究和应用。他本人是国际上最早利用深度神经网络进行计算机程序分析与生成相关研究的研究者之一。当前研究领域包括软件工程、Web 知识提取、知件工程等。
在研究之外,李戈老师也重视 AI 的工程开发和实际的应用落地。他在程序功能分析、程序自动生成、程序缺陷检测等方面的研究成果受到了国内外同行的高度关注,更是带领北京大学团队开发出了国内最早的基于深度学习的代码补全工具——aiXcoder。
aiXcoder:产品级自动代码搜索补全工具
李戈老师在 AI 应用方面的一项突出工作是 aiXcoder,这是国内很早的一款融合了深度学习技术,在软件开发过程中帮助开发者进行代码补全的产品级应用。
在技术层面,aiXcoder 团队很早就试尝试了语言模型——将代码视为一种语言从而直接建模。但团队发现,只有语言模型是行不通的,它总会提出一些毫无意义、很不科学的补全建议。为此,aiXcoder 融合了语言模型、图神经网络和抽象语法树等方法,共同打造一个完整的系统。
在代码生成方面,李戈老师等发现,这是一个需要建立从开发者的意图(intent)到程序代码之间的映射关系的任务(意图可以是自然语言等语义信息)。如上图所示,这是从一个接近连续的、有着接近清晰边界的数据集,向一个近乎离散而没有清晰边界的数据集进行映射。
换句话说,尽管代码生成的意图非常清楚,但是实现意图的代码数据却非常少、而且根据意图的区别,实现的代码之间的差距很大,因此这样的任务是非常难实现的。
为此,在 aiXcoder 的实际实现中,李戈老师认为,不同语言都是有特定的模型,它们仅使用该语言的数据进行训练。甚至,例如 TensorFlow 或 PyTorch 等框架也有其特定的代码补全模型。这样做的主要目的就是加强程序分布的稠密性,在特定领域下,代码分布才能更加接近连续性。
单纯的语言建模无法成功,因此 aiXcoder 采用了多种技术,并将其集成于一个系统中,从而达到了很好的效果。
1. 抽象树结构:根据代码结构本身带有的语义特征,团队采用了抽象树结构表示这种特征。
如图所示:
对 Java 代码进行处理,转换为抽象的语法树。
随着代码被转换为结构化的数据后,就可以输入到模型中进行训练了。输入的模型可以是深度学习网络,如下如所示,基于树的卷积神经网络可以映射这样的树结构。
基于树的卷积神经网络,是建模树结构的一种深度学习方法。
2. 图神经网络:程序本身具有控制流,这种控制流可被建模,因此 aiXcoder 可对此进行建模,建模的方法是使用图神经网络。
3. 其他方面的建模:aiXcoder 同时也对其他方面的特征进行了建模,包括变量之间的引用关系,类和基于类的逻辑关系等。
李戈对 AI 的看法
在多年和 AI 打交道的过程中,李戈老师总结了很多经验,形成了对人工智能的发展的独特洞见。他认为,尽管现在 AI 研究火热,但仍有一些重要问题亟待解决。这些问题主要是:
1. 低效
现在的人工智能技术,包括深度学习,依然是十分低效的。如同瓦特改进蒸汽机之前的水平——最早的蒸汽机需要消耗大量的煤炭,才能产生一点动力。同样,机器学习和深度学习都需要大量的数据投喂,才能达到令人满意的性能水平。
2. 不够通用化
现在的人工智能不能够做到通用化。构造一个模型很难用在很多任务上。不同的任务或者看上去非常接近的任务,都需要构造不同的模型来完成。同样以自动代码补全为例,不同的编程语言,甚至包括某一编程语言下实现不同功能(如数据分析和 web 应用等),都需要训练不同的模型、使用不同的数据。
3. 不透明
通过给定标注数据让模型进行训练,很难获得模型推理结果的显式逻辑。这样一方面会导致对模型推理结果的不信任,因此存在安全性问题。另一方面,「黑箱」模型使得对推理结果的介入变得不可能,无法进一步和人类已有知识联系,从而改进推理效果。
这些洞见,让李戈老师在进行 AI 研究和开发的过程中融汇这些理念,让产品变得更加智能和高效。这些经验,也都会在 12 月 6 日的主题演讲上,由李戈老师分享给广大开发者。
大会具体日程如下:
「WAIC 开发者生态」邀你加入
「WAIC 开发者生态」邀请全球人工智能开发者与具有相关背景的人工智能人才加入,机器之心将联合人工智能领军企业共同为开发者持续提供服务,包括知识传播、技术分享、技术和产业对接、数据竞赛、开源项目合作和人才服务等内容。