Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

小舟、陈萍报道

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

谷歌服务包含 20 亿行代码,一辆汽车的系统包含 1 亿行代码——写代码、debug 这么大的工作量不交给 AI 来做能行?

让 AI 自动生成代码,是很多开发者的梦想,近些年来,有关这一方面的研究屡见不鲜。但要想训练一个好用的 AI,最重要的工作或许就是找到优质数据。

近日,IBM 研究院发布了一个名为 CodeNet 的数据集,该数据集包含 1400 万个代码样本,用于训练面向编程任务的机器学习模型。该数据集的主要特点包括:
  • 迄今为止最大的编码数据集,其中包含 4000 个问题,1400 万个代码样本,50 + 种编程语言;

  • 该数据集添加了注释,包括问题描述、内存 / 时间限制、语言、代码通过 / error 等。

IBM 希望 CodeNet 仿效大型图像数据集 ImageNet,并成为教软件理解软件开发蓝图的领先数据集。IBM 希望 CodeNet 可以用于训练具有如下功能的开发工具:
  • 从一种编程语言转换到另一种编程语言;

  • 代码推荐与补全;

  • 代码优化;

  • 搜索应用程序和库来源以查找所需例程;

  • 将一种语言转换成另一种语言;

  • 识别错误 / 正确的实现机制。

利用深度学习进行自动化编程

近年来,机器学习领域取得了令人瞩目的进步,AI 让多种工作任务实现了自动化,包括编程。但是 AI 在软件开发中的渗透却遇到了极大的困难。

人们在编程时通常会使用大量的有意识和潜意识思维机制发现新的问题并探索不同的解决方案。相比之下,大多数机器学习算法都需要定义明确的问题和大量带有注释的数据才能够开发出解决相同编程问题的模型。

为了解决这一难题,研究者与开发者们已经做出了很多努力,包括创建数据集和基准,以开发和评估「用于编程的 AI」系统。但是,鉴于软件开发的创造性和开放性,很难为编程创建完美的数据集。

IBM 的研究人员试图创建一个多用途的数据集,可用于训练各种任务的机器学习模型。CodeNet 的创建者将其描述为「非常大规模,多样且高质量的数据集,能够加快使用 AI 编程的步伐」。该数据集包含 1400 万个代码样本,共有用 55 种编程语言编写的 5 亿行代码,其中 C++ 是样本中使用最多的语言,Python 位居第二。这些代码样本是从提交给在线编程平台 AIZU 和 AtCoder 上的近 4,000 项挑战的提交中获得的,代码样本包括这些挑战的正确答案和错误答案。

CodeNet 项目地址:https://github.com/IBM/Project_CodeNet

CodeNet 的主要特点之一是代码样本中添加了注释。数据集中包含的每个编程挑战都有一个文本说明以及 CPU 时间和内存限制。每个代码提交都包含十几条信息,包括语言,提交日期,内存占用大小,执行时间,接受和 error 类型。为了确保该数据集在编程语言,接受和 error 类型等多个维度上保持平衡,IBM 的研究人员付出了巨大的努力。

机器学习编程任务

CodeNet 并不是训练机器学习模型来执行编程任务的唯一数据集。相比于其他数据集,CodeNet 具有以下特点:首先是数据集的规模,包括样本数量和语言的多样性;但更重要的是编码样本附带的元数据。CodeNet 中添加的丰富注释使其能够适用于多种任务,不再只是用于特定编程任务。

使用 CodeNet 开发用于编程任务的机器学习模型包括以下方式:
  • CodeNet 可以用来进行语言翻译任务。由于数据集中包含的每个编程挑战都包含不同编程语言的提交,因此数据科学家们可以用它来创建机器学习模型,将代码从一种语言转换成另一种语言。对于希望将旧代码移植成新语言、使新一代程序员能够访问并使用新型开发工具进行维护的人们而言,这可能很方便;

  • CodeNet 还可以用来开发完成代码推荐任务的机器学习模型开发。推荐工具既可以像完成当前代码行的自动完成样式模型一样简单,也可以是编写完整函数或代码块的更复杂系统。

由于 CodeNet 拥有大量关于内存和执行时间指标的元数据,数据科学家也可以使用它来开发代码优化系统。或者,可以使用 error 类型的元数据来训练机器学习系统,以标记源代码中的潜在缺陷。

CodeNet 更高级的用例是代码生成。CodeNet 是一个丰富的问题文本描述库,并包含对应的源代码。已经有开发人员使用高级语言模型(如 GPT-3)从自然语言描述生成代码,CodeNet 或许能够帮助微调这些语言模型,使其在代码生成中更加一致。

IBM 的研究人员已经对 CodeNet 进行了一些实验,这些实验包括代码分类、代码相似性评估和代码补全。使用的深度学习体系架构包括简单的多层感知器、卷积神经网络图神经网络、Transformer。

IBM 和 MIT-IBM Watson AI 实验室团队联合开发了该数据集,研究中的实验结果显示大多数任务都能获得90%以上的准确率

论文地址:https://github.com/IBM/Project_CodeNet/blob/main/ProjectCodeNet.pdf

建立高效的机器学习系统,需付出巨大努力

IBM 的工程师们进行了大量的工作来管理 CodeNet 数据集并开发其辅助工具。

首先,研究团队需要从 AIZU 和 AtCoder 收集代码样本。二者中只有一个平台有应用程序接口(API),可以很容易地获取代码,而另一个平台没有易于访问的接口,研究团队需要开发新工具,从平台的网页上抓取数据,并将其分解成表格格式。然后研究者们需要手动将两个数据集合并到一个统一的模式中。

接下来,研究团队需要开发用于识别和删除重复代码和样本(包含大量无效代码,运行时未执行的源代码)的工具,以清除无用数据。

此外,该研究团队还开发了预处理工具,使得在 CodeNet 语料库上训练机器学习模型变得更容易,包括用于不同编程语言的 tokenizer、分析树(parse tree)和用于图神经网络的图表征生成器。

所有这些都提醒我们,要创建高效的机器学习系统,需要付出巨大的努力。人工智能要取代程序员还有很长的路要走。

参考链接:
https://bdtechtalks.com/2021/05/17/ibms-codenet-machine-learning-programming/
https://news.51cto.com/art/202105/662376.htm
工程Python数据集5亿行代码IBM
相关数据
IBM机构

是美国一家跨国科技公司及咨询公司,总部位于纽约州阿蒙克市。IBM主要客户是政府和企业。IBM生产并销售计算机硬件及软件,并且为系统架构和网络托管提供咨询服务。截止2013年,IBM已在全球拥有12个研究实验室和大量的软件开发基地。IBM虽然是一家商业公司,但在材料、化学、物理等科学领域却也有很高的成就,利用这些学术研究为基础,发明很多产品。比较有名的IBM发明的产品包括硬盘、自动柜员机、通用产品代码、SQL、关系数据库管理系统、DRAM及沃森。

https://www.ibm.com/us-en/
相关技术
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

语料库技术

语料库一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记;事实上,语料库英文 "text corpus" 的涵意即为"body of text"。

图神经网络技术

图网络即可以在社交网络或其它基于图形数据上运行的一般深度学习架构,它是一种基于图结构的广义神经网络。图网络一般是将底层图形作为计算图,并通过在整张图上传递、转换和聚合节点特征信息,从而学习神经网络基元以生成单节点嵌入向量。生成的节点嵌入向量可作为任何可微预测层的输入,并用于节点分类或预测节点之间的连接,完整的模型可以通过端到端的方式训练。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

暂无评论
暂无评论~