一个成熟的人工智能应该编写自己的代码。IBM发布了一个包含5亿行代码的数据集,包括55种语言。在ImageNet频繁出现在计算机视觉研究领域的今天,IBM也将其独家数据集——CodeNet带到了AIforCode。1400万个编程项目,5亿行代码,超过55种不同的编码语言。研究人员希望这个数据集能够促进编码自动化领域,例如大型项目的代码调试、维护和迁移。△下载链接见文末独有数据库。CodeNet的数据库来源于两个OJ(OnlineJudge)平台AIZU和AtCoder提交的例子。△大声告诉我世界上最好的语言是什么?在这个在线编程平台上提交的解决方案,除了海量的代码数据,还有很多高质量的元数据(Metadata)和注解。比如OJ平台的问题,有问题描述、内存限制、问题难度等信息。用户提交的案例也是如此:在平台的自动审核机制下,提交方案的不同状态也可以作为重要的参考数据。CodeNet能做什么?基准测试当同一个MISIM模型在CodeNet-1K(C++1000基准测试)和最大的公开可用数据集之一GCJ-297上进行训练,并在第三个独立数据集POJ-104上进行测试时,这两个模型都经过训练:△模型在CodeNet-1K上训练时的POJ-104测试成绩比在GCJ-297上高出12%,说明CodeNet-1K具有更好的泛化能力。在使用MLP、CNN、C-BERT、GNN在CodeNet的多个benchmark上进行代码分类、代码相似度评估、代码补全实验后,大部分任务都达到了90%以上的准确率。实际应用根据不同编程语言之间的规则,AI将几段代码转换成其他语言并不困难。但是如果是几万行,甚至是一个大项目,它的代码语义就会涉及上下文,而上下文可能会涉及多个代码库。在如此复杂的语境中进行语言翻译是一项不小的挑战。过去,50%到60%的程序移植通常是先由机器完成,涉及复杂规则的部分再由人工处理,非常棘手且耗费人力。但不久前,IBM成功地将一家汽车大客户(多代Java技术开发的3500个Java文件,超过100万行代码)的持续代码迁移过程从一年缩短到4周。因为在CodeNet的数据库中,90%以上问题的描述,输入格式的描述,输出格式的描述,提交代码50%以上的输入输出样本都是判断不同语言的代码是否等价的关键。.这极大地促进了用于代码翻译的强化学习技术。并且内存限制、执行时间、错误类型等大量元数据也可以用来标记源代码中的潜在缺陷,进一步训练开发代码优化系统。CodeNet数据集提供了一组易于理解和使用的技术。在协助开发者和研究者开发算法、推动AI编码的同时,也为企业启动IT现代化带来持续的商业价值。技术上如何实现在收集统计数据时,研究人员将所有数据组织成一个严格的目录结构:最上层是ProjectCodeNet目录,下面的子目录是:*数据被细分为每个问题的源代码和脚本语言。*元数据存储所有问题的problem_list.csv文件和提交案例的csv文件。*问题描述一个包含问题的HTML文件,包含大量的文本描述。然后使用命令行工具或应用程序如ls和grep来提取,csv文件使用csvkit组件(如csvstat)。对于数据集,使用bash脚本进行访问选择:△给出脚本。最后通过tagger生成tagstream,生成AST并解析为抽象语法树,构建数据流图分析代码,最后将代码样本转化为可识别的表达形式以及AI算法使用的:△加工过程中使用的工具。编程自动化的未来IBM研究人员正在不断改进和开发CodeNet,期望它能够加速AI编程的算法进步。随着机器学习领域的不断发展,不仅是代码的“实现”,“设计”也开始向计算机侧倾斜(例如GAN通过对抗学习寻找最优解)。未来真的能像DNA的自我编辑一样实现完全自动编程吗?建议先封装几个人类程序员,帮助计算机完成算法第一步的“准确描述问题需求”。
