在当今计算机视觉研究中,imageNet频繁出现,而IBM也为智能编码(AI for code)推出了其独特的数据集——codeNet。
这个数据集包含了1400万个编程项目,涵盖5亿行代码,支持超过55种不同的编程语言。研究人员期望这一资源能够为编码自动化领域带来便利,尤其是在大型项目的调试、维护和迁移方面。
独特的数据基础
codeNet的数据基础主要来源于两个在线评测平台——AIZU和Atcoder,上面提交的实例提供了大规模的代码数据,以及大量高质量的元数据和注释。
例如,针对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编程算法的进步。
随着机器学习领域的不断发展,不仅是代码的实现,连设计的部分也逐渐向计算机倾斜(例如通过GAN对抗学习寻找最优解)。
未来是否能实现像DNA自我编辑那样的完全自动编程?也许可以先通过封装几位人类程序员来帮助计算机完成算法第一步的“精确描述问题需求”。
