【转载】观点报告|代码自动生成与推荐的几种技术思路



  • 本文转载自:https://mp.weixin.qq.com/s/piDxOIZQcjW2aPq8B2Ehxw

    代码自动生成与推荐技术的几种方法

    本次分享的观点报告《代码自动生成与推荐的几种技术思路》来自于彭鑫老师在11月17日在北京化工大学举行的第七届中国基于搜索的软件工程研讨会上的邀请报告。

    智能化软件开发的一个现实目标是实现程序员与AI助手之间的人机协同开发。代码自动生成与推荐是智能化软件开发的一种主要形式。针对这一问题,软件工程、程序设计语言、人工智能等领域的研究者开展了一系列研究工作,其技术思路可以从两个维度来进行概括和分类:从所利用的输入信息源上看可以分为基于功能描述、基于代码上下文、基于输入/输出样例;从所使用的智能化技术上看可以分为信息检索、模式挖掘、优化搜索、统计模型、深度学习。其中,深度学习技术得到了广泛应用,也展现了良好的效果,因此被寄予厚望。然而,由于需求的模糊性以及开发者意图的开放性、软件项目业务和技术领域的多样性、软件代码数据的质量问题等根本性困难,仅仅依靠深度学习技术还很难期望代码自动生成与推荐实现质的飞跃。

    能够有效支持日常软件开发的代码自动生成与推荐技术要求能在规模上实现语句及代码段级的生成与推荐,在内容上能够覆盖通用API使用代码、算法实现、应用逻辑实现等不同代码逻辑,在交互上能够支持意图理解、问题解释、反馈调整等。为此,我们需要思考一系列问题,例如:如何让程序员理解每一个推荐选项并做出选择?如何让他们相信推荐结果?如何了解程序员的意图?程序员总是顺序性地思考吗?

    通过观察有经验的程序员的代码编写过程,首先我们可以发现除了根据经验,他们还会经常通过代码搜索寻找可用的代码片段甚至模块,进行大粒度的代码复用。这时,AI小助手采用“拿来主义”,推荐相似的代码片段甚至模块并指导开发人员进行修改可能是一种更有效的方法。与之相比,基于深度学习的方法往往会将完整的代码拆分成较小的代码元素(如token、语句)进行模型训练,然后再针对新的编程任务逐一预测每个代码元素,形成较完整的程序。这种对比犹如在一个大体满足需要的花瓶上修改一下图案然后为自己所用,还是将已有的花瓶摔碎后再逐渐拼接出满足需要的新花瓶。其次,程序员即时在缺少可参照的代码样例的情况下,也能根据API手册等知识规划并编写代码。例如,根据开发任务要求首先确定实现意图的核心API,然后围绕核心API补充所需代码。此外,通过观察结对编程的程序员之间的协作过程,我们还可以发现基于业务和技术背景知识的交互式澄清与解释也经常是不可或缺的。

    为此,我们对智能化代码生成与推荐有如下展望。首先,有效的代码生成与推荐应当是以一种人机协同的交互式智能的方式体现,其中伴随着迭代化的澄清、解释、试探与反馈等交互过程。其次,包含领域业务知识、通用API知识、算法知识等不同知识在内的知识基础将会成为支撑人机协同代码生成与推荐的重要条件。最后,有效的代码生成与推荐应当是一种多形态、多层次的智能化推荐的方式展开的,具体包括:重新思考代码大数据背景下构件组装与定制化开发的意义;将代码检索匹配、基于代码深度理解的辅助修改、API等开发知识提示与代码自动生成等手段相结合,实现多形态的智能化推荐;由粗到细的多层次智能化推荐,例如首先通过概率模型探索候选解的大致分布,接着通过知识推理精化候选空间,然后通过交互澄清意图产生基本实现,最后在自动化测试的支持下通过基于优化搜索的方法实现最终实现代码的完善和校准。

    报告如下

    0_1543756213467_16029eec-a3bb-47bb-ad2b-c083582431a5-image.png

    0_1543756238368_aa1da94c-a586-4eea-b19e-7b916d313088-image.png

    0_1543756257734_2f5fc85a-60be-4d5c-bb8e-5f73a94073db-image.png

    0_1543756264684_019e9bae-fc22-4887-ace3-2ffb098d1822-image.png

    0_1543756273886_2dc00a11-28b9-493a-bddc-c47d041454a8-image.png

    0_1543756283000_ee567985-1fe9-4fc5-b076-d335203a1c43-image.png

    0_1543756295126_dc035c66-0ef1-43a1-a9e0-8a97b8157d1f-image.png

    0_1543756303980_b8fe49aa-a998-4f80-bfe7-ea9ac3e35588-image.png

    0_1543756312379_b2184773-d6b3-41e9-9e98-ded49ee6217a-image.png

    0_1543756319499_00dc085f-3fd9-4870-8002-48e6a424541f-image.png

    0_1543756326659_27215523-c740-43dc-9e3a-7df772e062cf-image.png

    0_1543756333168_e21386d4-6374-4d1e-b2b3-436920925a6f-image.png

    0_1543756340438_6cbc153a-fb09-4dc0-97dc-41d0d855b318-image.png

    0_1543756347913_44618775-4755-459f-bcee-9db016abac0d-image.png

    0_1543756356287_0583c8a0-f29d-4fe2-b9cf-8fc9e8589246-image.png

    0_1543756366022_73cf623a-21ad-4f47-9328-1e4e5ad5575b-image.png

    0_1543756386447_05739886-ca5e-4d28-a9f4-abb2df07c1f5-image.png

    0_1543756394272_5225ab6f-5347-4c23-90ae-7a8249a93b77-image.png

    0_1543756425805_e13c04cd-702d-41d9-9e36-41c03cdbf906-image.png

    0_1543756436561_f320c2b5-a0e1-46ee-9996-5ec176abfbbd-image.png

    0_1543756447227_e0bd8e55-9058-4bc2-8c21-7c7cda1bbc66-image.png

    0_1543756456490_13fa4ed6-dfde-4bc6-b28b-62a2c80db299-image.png

    0_1543756470522_7aa81c48-89a3-42f7-a380-67a4d6db9511-image.png

    0_1543756477754_719553a7-d419-49c3-b63d-7cf2c6c09aa1-image.png

    0_1543756483664_0be88bbf-0728-4bea-8b5d-a93fff5d5673-image.png

    0_1543756491210_b07542ac-42b6-4cc1-8474-391f1b75acd2-image.png


Log in to reply
 

Popular Topics

|

Looks like your connection to SCC was lost, please wait while we try to reconnect.