互联网资讯 / 人工智能 · 2023年12月10日

AI发展成熟应自编代码,IBM发布包含55种语言的5亿行代码数据集|开源

在imageNet频频出现在计算机视觉研究的今天,IBM也为智能编码(AI foR code)带来了它的专属数据集&Mdash;&Mdash;codeNet。

1400万个编程项目,5亿行代码,超过55种的不同编码语言。研究人员希望这一数据集能为编码自动化领域(比如大型项目代码的调试、维护和迁移)带来便利。

独一无二的数据基础

codeNet的数据基础来自两个OJ(Online Judge)平台AIZU和AtcodeR所提交的实例。

在这种在线编程平台上提交的解决方案,除了大规模的代码数据之外,还有许多高质量的元数据(Metadata)和注释。

比如对于OJ平台的问题,就有如问题描述、内存限制、问题难度等信息。

用户提交的案例也一样:

而在平台自动审查机制下,提交的解决方案的不同状态同样也可以作为重要参考数据。

codeNet能做什么?

基准测试

当在codeNet-1K(C++ 1000基准)与最大的公开数据集之一GCJ-297上训练相同的MISIM模型,并在第三个独立的数据集POJ-104上测试这两个训练好的模型时:

这表明了codeNet-1K拥有更好的泛化能力。

而分别使用MLP、CNN、C-BERT、GNN在codeNet的几个基准上进行了代码分类、代码相似性评估和代码完成等实验后,大多数任务都获得了90%以上的准确率。

实际应用

基于不同编程语言间的规则,将几段代码转换成其他语言,对AI来说并非难事。

但如果是上千上万行,甚至是一个大型项目,其代码语义就会涉及到上下文,而上下文又可能牵扯到多个代码库。在这样的复杂语境下的语言翻译可是个不小的挑战。

在以前,通常先由机器完成程序50%~60%的迁移,涉及复杂规则的部分再由人力负责,非常棘手且费事费力。

可就在不久前,IBM通过基于codeNet的AI foR code成功将一位大型汽车客户的持续代码迁移过程(多代Java技术开发的3500个Java文件,超一百万行代码),从一年缩短到了四星期。

因为在codeNet的数据基础中,90%以上的问题的描述、输入格式说明、输出格式说明,以及50%以上的提交代码的输入和输出样本,就是确定不同语言间的代码等价与否的关键。

这就极大地推动了代码翻译的强化学习技术。

而大量于内存限制、执行时间、错误类型的元数据,也可以用来标记源代码中的潜在缺陷,并进一步训练开发代码优化系统。

codeNet数据集提供了一套利于理解和使用的技术,在协助广大开发者和研究者开发算法,推进AI编码的同时,也为企业开启IT现代化带来了持续不断的商业价值。

技术上如何实现

在统计数据时,研究者们组织所有数据成为一个严格的目录结构:最上层是project codeNet目录,下方的子目录分别为:

*数据

细分为每个问题中源码、脚本语言。

*元数据

存放所有问题的ProbleM_list.csv文件和提交案例的csv文件。

*问题描述

存放问题的HTML文件,包含文本的广泛描述。

然后使用命令行工具或像ls和gRep这样的应用程序来提取,对csv文件可使用csvkIT组件(如csvstat)。

对于数据集则采用bash脚本进行访问选择:

最后通过标记器产生标记流、AST生成解析到抽象语法树、构建数据流图以分析代码,最终将代码样本转换为可被AI算法识别和使用的表现形式:

编程自动化的未来

IBM的研究者们还在不断地改进和开发codeNet,期望它能够加速AI编程的算法进步。

而随着机器学习领域的不断发展,不仅是代码的“实现&Rdquo;,连“设计&Rdquo;也开始向计算机一侧倾靠(比如GAN通过对抗学习寻找最优解)。

未来真的可以像DNA的自我编辑那样,实现完全的自动编程吗?

建议先封装几个人类程序员,来帮计算机完成算法第一步的“精确描述问题需求&Rdquo;。

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册