Компания 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% примеров с ошибками). Система машинного обучения может учитывать эти метаданные для генерации наиболее оптимального кода или для выявления регрессий в анализируемом коде (система может понять, что в переданном коде алгоритм реализован не оптимально).