IBM открыл CodeNet для систем машинного обучения, транслирующих и проверяющих код
11 мая 2021 года
Компания 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% примеров с ошибками). Система машинного обучения может учитывать эти метаданные для генерации наиболее оптимального кода или для выявления регрессий в анализируемом коде (система может понять, что в переданном коде алгоритм реализован не оптимально).
Источники
править
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.