CodeNet - база данных из 14 миллионов образцов компьютерного кода на 55 языках программирования появилась в открытом доступе. Создатели из компании IBM надеются, что с ее помощью получится разработать модели искусственного интеллекта, которые избавят программистов от рутинных задач и освободят их время для творчества.
Подразделение по исследованиям в области искусственного интеллекта (ИИ) IBM выложило в открытый доступ базу данных из 14 миллионов образов компьютерного кода на пяти десятках языков программирования. Проект CodeNet был назван в честь известной базы изображений ImageNet, которая дала толчок революции в области распознавания образов и глубокого обучения.
Модели ИИ, которые будут созданы на основе этой базы данных вряд ли заменят живых программистов. Но они могут повысить эффективность их труда. В начале 2010-х прорыв в области глубокого обучения спровоцировал рост опасений, что компьютерные системы смогут в ближайшее время вытеснить человеческий труд во многих областях. Но разработка программного обеспечения пока оставалась вне такой угрозы. Люди-программисты решают новые задачи, опираясь на творческий подход и детальные знания предметной области, в которой они работают. Зачастую процесс их мышления не поддается строгой алгоритмической логике. Большинство алгоритмов машинного обучения требуют для стабильной работы четко поставленных задач и критериев оценки успешности их решений. Было предпринято множество попыток создать модели ИИ, которые были бы способны решать задачи программистов, но все они были лишь отчасти успешными.
Самая последняя из них — решение от Microsoft, которое способно переводить текст на естественном языке, который описывает, что программа должна делать, в готовый код. Эта модель построена на основе нашумевшего алгоритма GPT-3. Ее задача снизить порог входа в разработку, дать людям без опыта программирования способ создавать собственные приложения.
Проект CodeNet состоит из 500 миллионов строк кода плюс описания задач, которые должен решать этот код. В проекте есть примеры как правильных, так и неправильных решений. Кроме кода в базу включено много сопутствующей информации: кроме текстовых описаний задач там содержится время, затраченное на выполнение кода, данные о потребляемой алгоритмом памяти, общий размер программы, время создания, типы ошибок, если они есть. Исследователи из IBM приложили много усилий, чтобы база данных была сбалансирована по количеству правильных и неправильных решений, языкам и типам ошибок.
CodeNet — далеко не единственная база данных кода для машинного обучения. От других ее отличает детальные описания каждого примера и широта задач, которые решают приведенные примеры. Она может помочь исследователям в области ИИ создать, в первую очередь, системы перевода кода с одного языка программирования на другой. Такие модели могут пригодиться многим организациям, в которых много старых компьютерных систем, написанных на языках, которые больше не популярны. Старый код можно будет перевести на новый язык и развивать его дальше, используя современные методы. Эта задача сейчас требует серьезных усилий со стороны программистов и компаний, которые их нанимают. Например, Банк Австралии потратил более пяти лет и 750 миллионов долларов, чтобы перевести код своей банковской инфраструктуры с языка COBOL, который широко использовался в 60-е и 70-е, на современный Java.
Ещё одна сфера применения CodeNet — разработка сервисов по рекомендации кода. Они могут быть разными: от простого автодополнения слов, подстановки параметров и так далее до более сложных систем, которые могут автоматически создавать готовые функции или фрагменты кода.
Следующая по сложности задача — оптимизация готового кода. CodeNet содержит детальные данные о времени выполнения программы и объемах потребляемой памяти. Следовательно, можно попробовать использовать их для поиска оптимальных решений тех или иных задач.
Исследователи из IBM уже провели несколько экспериментов над CodeNet и опубликовали результаты в научной статье. Они попытались решить три задачи: классификация кода, оценка схожести кода и автодополнение кода. Ученые перепробовали четыре основных класса моделей ИИ и пришли к довольно хорошим результатам: точность прогнозирования в большинстве случаев превышала 90%.
Ученые отмечают: создание такой огромной базы данных и инструментов работы с ней потребовало гигантских человеческих усилий. Вначале они собирали образцы кода на площадках с задачами для программистов AIZU и AtCoder. У одного из сайтов уже была форма для выгрузки присланных решений, для другого пришлось написать специальную программу — парсер, которая считывала веб-страницу и вычленяла из нее нужные куски кода и писала их в таблицу. Затем исследователям пришлось практически вручную объединять собранные примеры в единую базу данных по общей для всех схеме. Затем они написали программы для очистки собранных образцов: находили и удаляли продублированные примеры и код, который просто не запускался. После этого ученые создали инструменты для препроцессинга, то есть перевода собранных образов кода в форму, которую можно использовать в алгоритмах машинного обучения. Среди этих инструментов были программы, которые делили код на разных языках на отдельные слова и выражения, правила, которые используются понимания языков программирования, генератор структуры кода, который создавал описания написанных программ для алгоритмов машинного обучения.
Этот титанический труд наглядно показывает: системы машинного обучения не могут действовать самостоятельно. Для их создания нужны тысячи человеко-часов усилий высококвалифицированных специалистов. ИИ ещё долго не сможет заменить программистов, но может помочь в том, чтобы сделать их труд более творческим, взяв на себя рутинные задачи.
Например, согласно исследованию ученых из Кембриджского университета, программисты тратят больше около четверти своего рабочего времени на отладку кода и поиск типичных ошибок. Это обходится компаниям в 312 миллиардов долларов в год. Системы ИИ могут взять на себя такие задачи и оставить программистам самое интересное: проектирование и написание компьютерных алгоритмов.