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

IBM开源了5亿行代码的数据集,但里面编程语言最多的不是Python

时间:2023-03-12 06:54:47 科技观察

谷歌服务有20亿行代码,一个汽车系统有1亿行代码——这么大写代码和调试的工作量可以不交给AI做吗?让AI自动生成代码是很多开发者的梦想。近年来,这方面的研究比较普遍。但要训练出有用的人工智能,或许最重要的工作就是找到高质量的数据。最近,IBMResearch发布了一个名为CodeNet的数据集,其中包含1400万个代码样本,用于训练编程任务的机器学习模型。该数据集的主要特征包括:迄今为止最大的编码数据集,包含4000个问题、1400万个代码样本和50多种编程语言;该数据集标注有问题描述、内存/时间限制、语言、代码通过/错误等。IBM希望CodeNet能够效仿ImageNet这一大型图像数据集,成为教授软件理??解软件开发蓝图的领先数据集。IBM希望CodeNet将用于训练开发工具:从一种编程语言转换为另一种编程语言;代码推荐和补全;代码优化;搜索所需例程的应用程序和库资源;从一种语言到另一种语言的转换;识别错误/正确的实施机制。通过深度学习实现自动化编程近年来,机器学习领域取得了令人瞩目的进展,AI已经实现了包括编程在内的许多任务的自动化。但人工智能在软件开发中的渗透遇到了很大的困难。人们在编程时,通常会使用多种有意识和潜意识的思维机制来发现新问题并探索不同的解决方案。相比之下,大多数机器学习算法需要明确定义的问题和大量带注释的数据,才能开发出解决相同编程问题的模型。为了应对这一挑战,研究人员和开发人员做出了许多努力,包括创建数据集和基准来开发和评估“用于编程的AI”系统。然而,鉴于软件开发的创造性和开放性,很难为编程创建完美的数据集。IBM的研究人员试图创建一个多功能数据集,可用于为各种任务训练机器学习模型。CodeNet的创建者将其描述为“一个非常大、多样化和高质量的数据集,可以加快人工智能编程的速度。”该数据集包含1400万个代码样本,总共5亿行代码,使用55种编程语言编写,其中C++是样本中使用最多的语言,其次是Python。这些代码示例来自在线编程平台AIZU和AtCoder上提交的近4,000个挑战,代码示例包括这些挑战的正确和错误答案。CodeNet项目地址:https://github.com/IBM/Project_CodeNetCodeNet的主要特点之一是在代码示例中添加了注释。数据集中包含的每个编程挑战都有文本描述以及CPU时间和内存限制。每个代码提交包含十几个信息,包括语言、提交日期、内存占用、执行时间、接受和错误类型。为了确保这个数据集在编程语言、接受度和错误类型等多个维度上保持平衡,IBM的研究人员付出了巨大的努力。机器学习编程任务CodeNet并不是唯一用于训练机器学习模型以执行编程任务的数据集。与其他数据集相比,CodeNet具有以下特点:一是数据集的规模,包括样本数量和语言的多样性;但更重要的是,编码样本附带的元数据。添加到CodeNet的丰富注释使其适用于各种各样的任务,而不仅仅是特定的编程任务。使用CodeNet开发用于编程任务的机器学习模型包括以下几种方式:CodeNet可用于语言翻译任务。由于数据集中包含的每个编程挑战都包含不同编程语言的提交,数据科学家可以使用它来创建机器学习模型,将代码从一种语言翻译成另一种语言。这对于希望将遗留代码移植到新语言的人来说非常方便,使新一代程序员能够使用新的开发工具访问和维护它;CodeNet还可用于开发用于代码推荐任务的机器学习模型。推荐工具可以像完成当前代码行的自动完成式模型一样简单,也可以像编写完整函数或代码块的更复杂的系统一样简单。由于CodeNet拥有大量关于内存和执行时间指标的元数据,数据科学家也可以使用它来开发代码优化系统。或者,错误类型元数据可用于训练机器学习系统以标记源代码中的潜在缺陷。CodeNet的一个更高级的用例是代码生成。CodeNet是一个对问题进行丰富文本描述的库,并包含相应的源代码。已经有开发人员使用GPT-3等高级语言模型从自然语言描述生成代码,而CodeNet或许能够帮助微调这些语言模型,使代码生成更加一致。IBM研究人员在CodeNet上进行了一些实验,包括代码分类、代码相似性评估和代码补全。使用的深度学习架构包括简单的多层感知器、卷积神经网络、图神经网络和变形金刚。该数据集由IBM和MIT-IBMWatsonAILab团队共同开发,研究中的实验结果表明,大多数任务都可以达到90%以上的准确率。论文地址:https://github.com/IBM/Project_CodeNet/blob/main/ProjectCodeNet.pdf构建一个高效的机器学习系统需要付出很大的努力。IBM工程师在管理CodeNet数据集和开发其辅助工具方面做了大量工作。首先,研究团队需要从AIZU和AtCoder收集代码样本。两个平台中只有一个具有可以轻松获取代码的应用程序编程接口(API),而另一个平台则没有易于访问的接口,研究团队需要开发新的工具来从平台的数据中抓取数据网页并将其转换为Breakdownintotabular格式。然后,研究人员需要手动将这两个数据集合并到一个统一的模式中。接下来,研究团队需要开发用于识别和去除重复代码和样本(包含大量在运行时未执行的死代码的源代码)的工具,以清理无用数据。此外,研究团队还开发了预处理工具,以便更轻松地在CodeNet语料库上训练机器学习模型,包括针对不同编程语言的分词器、解析树和图神经网络的图表示生成器。所有这一切都让我们想起了创建高效机器学习系统所需付出的巨大努力。人工智能距离取代程序员还有很长的路要走。【责任编辑:张艳妮电话:(010)68476606】