IBM 为翻译和验证代码的机器学习系统开放 CodeNet

IBM 推出了 CodeNet 计划,旨在为研究人员提供一个数据集,使他们能够尝试使用机器学习技术来创建编程语言翻译器、代码生成器和分析器。 CodeNet 包含 14 万个代码示例,可解决 4053 个常见编程问题。 该集合总共包含约 500 亿行代码,涵盖 55 种编程语言,既有 C++、Java、Python 和 Go 等现代语言,也有 COBOL、Pascal 和 FORTRAN 等传统语言。 该项目的开发在Apache 2.0许可下分发,数据集计划以公共领域的形式分发。

这些示例带有注释,并以不同的编程语言实现相同的算法。 预计所提出的集合将有助于训练机器学习系统并在翻译和机器代码解析领域开发创新,类似于 ImageNet 带注释的图像数据库如何帮助模式识别和计算机视觉系统的开发。 各种编程竞赛被认为是收集形成的主要来源之一。

与基于转换规则实现的传统翻译器不同,机器学习系统可以捕获并考虑代码使用的上下文。 从一种编程语言转换为另一种编程语言时,上下文与从一种人类语言转换为另一种人类语言时一样重要。 缺乏上下文考虑导致代码无法从 COBOL 等遗留语言转换。

拥有不同语言的算法实现的大型数据库将有助于创建通用机器学习系统,该系统不是在特定语言之间直接翻译,而是操纵更抽象的代码表示,独立于特定的编程语言。 这样的系统可以用作翻译器,将任何支持的语言传输的代码翻译为其内部抽象表示,然后可以从中生成多种语言的代码。

该系统还能够执行双向转换。 例如,银行和政府机构继续使用过时的 COBOL 语言的项目。 基于机器学习的翻译器将能够将 COBOL 代码转换为 Java 表示,并在必要时将 Java 片段翻译回 COBOL 代码。

除了语言之间的翻译之外,还提到了CodeNet的应用领域,例如创建智能代码搜索系统和自动化克隆检测,以及开发优化器和自动代码校正系统。 特别是,CodeNet 中提供的示例配备了描述性能测试结果、生成的程序大小、内存消耗和状态的元数据,这使我们能够区分正确的代码和有错误的代码(为了区分正确的代码和错误的代码,集合中特别包含有错误的示例,其比例为 29.5%)。 机器学习系统可以考虑此元数据来生成最佳代码或识别分析代码中的回归(系统可以理解提交代码中的算法未最佳实现或包含错误)。

来源: opennet.ru

添加评论