当前位置: 首页 > 科技观察

不再重新发明轮子,AI为你推荐更好的代码,大部分没有bug的程序员的代码

时间:2023-03-20 00:21:06 科技观察

不是像写毛笔字那样一口气写出来的,而是需要反复挖bug,挖疑惑人生。剑桥大学贾奇商学院发表的一项研究表明,程序员将50.1%的工作时间用于编程,一半的时间用于调试。估计调试总成本为每年3120亿美元。现代软件系统越来越复杂,很多时候一个小错误就可能导致系统崩溃,造成巨大的损失。所以不仅是程序员,公司也在为调试付出巨大的代价。但现在,人工智能带来了福音。来自英特尔、麻省理工学院和佐治亚理工学院的研究人员联合开发了一种自动代码相似性检测系统MISIM,它可以判断两段代码的相似性,即使两段代码使用不同的结构和算法。可以根据他们执行的任务是否相似,是否具有相似的代码特征来判断。代码相似度检测可以应用于代码推荐和自动修复错误。代码推荐的应用过程有点像输入法的单词推荐。由于MISIM可以评估不完整的代码片段,当它检测到不完整和错误的代码时,它会从其他地方选择相同的功能,无bug代码,替换原代码。而且,MISIM还会将代码转换成统一的形式,确定代码功能,比较代码片段,不受书写方式的影响。由于MISIM不受编程语言的限制,也可用于代码语言转换。在对45,780个程序的实验评估中,MISIM确定了学生编写的C和C++程序代码,以解决104个编码问题。如果一对程序都解决了相同的问题,则它们在数据集中被标记为相似。MISIM始终以高达40.6的系数优于三个当前最先进的系统。自动代码生成一直是研究热点,工业界和学术界都在朝着这个方向努力。OpenAI的GPT-3语言模型甚至可以根据自然语言描述生成网页布局代码。代码相似度检测可以复用已有代码,从而更有效地利用优质代码。输入“创建一个看起来像西瓜的按钮”,GPT-3生成了上图中绿色皮肤和红色勺子的原型按钮。或者输入“welcometomynewsletterinlargefont”,GPT-3会生成上图中的大红色字体。当然,代码相似度检测也可以用于代码重复检查。所以,计算机系的同学们,要注意自己的功课了!虽然现在有了非人工智能的代码检查系统,但谁知道人工智能什么时候能赶上来呢?1.MISIM体系结构MISIM体系结构概述MISIM由两个核心组件组成。首先,MISIM具有新颖的上下文感知语义结构(CASS),它使用机器学习算法通过捕获描述源代码的信息来确定给定源代码的目的(例如,代码是函数调用、操作等)代码的上下文。其次,MISIM还有一个基于神经网络的代码相似度评估算法,可以用各种神经网络架构来实现。一旦构建了CASS,它就会被矢量化并用作神经网络的输入,神经网络会生成特征向量。一旦生成了特征向量,就可以执行代码相似性评估(例如,向量点积、余弦相似性等)。对于MISIM的相似性评估算法,研究人员研究了三种神经网络方法:GNN、RNN和BoF神经网络。其中,使用GNN的MISM整体表现最好,能够以超过75%的准确率识别两个程序之间的相似性。一旦代码的结构与CASS集成,该算法就会根据代码尝试执行的工作计算相似度分数。即使两段代码表面上不同,如果它们执行相同的功能,模型也会将它们评估为相似。CASS可以配置特定的上下文,从而能够捕获描述代码的更高级别的信息。而且CASS可以在不使用编译器(编译器将人类可读的源代码转换为计算机可执行的机器代码)的情况下对代码进行评级,甚至可以评估不完整的代码片段。MISIM-GNN的架构如下图所示。对于这种方法,输入代码的CASS表示被转换为图形。然后,图中的每个节点都嵌入了一个可训练向量作为节点的初始状态。接下来,GNN用于迭代更新每个节点的状态。最后,应用全局读取函数从节点的最终状态中提取整个图的向量表示。MISIM-GNN架构2.不再重新发明轮子研究人员仍在扩展MISIM的功能集,目标是创建一个代码推荐引擎,该引擎可以识别算法背后的意图,并提供语义相似但性能改进的候选代码。系统可以指导程序员使用库函数,而不是重新发明轮子。AI支持的代码建议和审查工具(如MISIM)有望削减开发成本,同时让编码人员能够专注于更具创造性、重复性更低的任务。“如果这个系统成功,我们的最终目标之一就是让所有人都能编程,”英特尔实验室首席科学家兼机器编程研究主管JustinGottschlich说。》也许有一天,代码相似度检测可以扩展到自然语言,实现通用编程不再是难事。3.相关论文不再重复造轮子,AI会为你推荐更好的代码。Bug论文地址:https://arxiv.org/pdf/2006.05265.pdf不用再重新发明轮子,AI会给你推荐更好的代码,没有对比bug代码相似度检测系统的准确率,结果是运行3次的平均值以及相对于平均值的最小值/最大值。不再重新发明轮子,AI为您推荐更好的代码,在POJ-104测试集上没有bugcode2vec、NCC、Aroma、MISIM的准确率结果。条形图的高度代表一次运行的3次测量的平均值,误差线由测量的最小值和最大值确定。