Отдел исследований искусственного интеллекта IBM выпустил 14-миллионный набор данных для разработки моделей машинного обучения, которые могут помочь в задачах программирования. Названный Project CodeNet, набор данных получил свое имя в честь ImageNet, знаменитого хранилища помеченных фотографий, которое вызвало революцию в компьютерном зрении и глубоком обучении.

Хотя есть небольшой шанс, что модели машинного обучения, построенные на наборе данных CodeNet, оставят людей-программистов не у дел, есть основания надеяться, что они сделают разработчиков более продуктивными.

Автоматизация программирования с глубоким обучением

В начале 2010-х впечатляющие достижения в области машинного обучения вызвали волнение (и страх) по поводу искусственного интеллекта, который вскоре автоматизировал многие задачи, включая программирование. Но проникновение ИИ в разработку программного обеспечения было крайне ограничено.

Программисты-люди открывают новые проблемы и исследуют различные решения, используя множество сознательных и подсознательных механизмов мышления. Напротив, большинство алгоритмов машинного обучения требуют четко определенных задач и большого количества аннотированных данных для разработки моделей, которые могут решить те же проблемы.

Было предпринято много усилий по созданию наборов данных и контрольных показателей для разработки и оценки систем “ИИ для кода”. Но, учитывая творческий и открытый характер разработки программного обеспечения, очень трудно создать идеальный набор данных для программирования.

Набор данных CodeNet

Дни прошли для ПК теперь доступны.

Project CodeNet — это огромный набор данных из ~14 миллионов образцов кода, разбросанных по десяткам языков программирования. Иллюстрация: Sony

С помощью Project CodeNet исследователи из IBM попытались создать многоцелевой набор данных, который можно использовать для обучения моделей машинного обучения для различных задач. Создатели CodeNet описывают его как “очень крупномасштабный, разнообразный и высококачественный набор данных для ускорения алгоритмических достижений в области искусственного интеллекта для кода”.

Набор данных содержит 14 миллионов образцов кода с 500 миллионами строк кода, написанных на 55 различных языках программирования. Образцы кода были получены из материалов почти 4000 задач, размещенных на онлайн-платформах кодирования AIZU и AtCoder. Примеры кода включают как правильные, так и неправильные ответы на поставленные задачи.

Одной из ключевых особенностей CodeNet является количество аннотаций, которые были добавлены к примерам. Каждая из задач кодирования, включенных в набор данных, имеет текстовое описание, а также ограничения по времени процессора и памяти. Каждое представление кода содержит дюжину частей информации, включая язык, дату представления, размер, время выполнения, принятие и типы ошибок.

Исследователи из IBM также приложили большие усилия, чтобы убедиться, что набор данных сбалансирован по различным измерениям, включая язык программирования, принятие и типы ошибок.

Задачи программирования для машинного обучения

CodeNet — это не единственный набор данных для обучения моделей машинного обучения задачам программирования. Но есть несколько особенностей, которые выделяют его. Во-первых, это сам размер набора данных, включая количество выборок и разнообразие языков.

Но, возможно, более важными являются метаданные, которые идут вместе с образцами кодирования. Богатые аннотации, добавленные в CodeNet, делают его подходящим для широкого набора задач, в отличие от других наборов данных кодирования, которые специализируются на конкретных задачах программирования.

Существует несколько способов использования CodeNet для разработки моделей машинного обучения для задач программирования. Один из них — языковой перевод. Поскольку каждая задача кодирования в наборе данных содержит представления различных языков программирования, специалисты по обработке данных могут использовать ее для создания моделей машинного обучения, которые переводят код с одного языка на другой. Это может быть удобно для организаций, которые хотят перенести старый код на новые языки и сделать его доступным для новых поколений программистов и поддерживаемым с помощью новых средств разработки.

CodeNet также может помочь в разработке моделей машинного обучения для рекомендаций кода. Инструменты рекомендаций могут быть такими же простыми, как модели типа автозаполнения, которые завершают текущую строку кода для более сложных систем, которые пишут полные функции или блоки кода.

Поскольку CodeNet имеет множество метаданных о метриках памяти и времени выполнения, специалисты по обработке данных также могут использовать его для разработки систем оптимизации кода. Или они могут использовать метаданные типа ошибок для обучения систем машинного обучения, которые помечают потенциальные недостатки в исходном коде.

Более продвинутый вариант использования, который было бы интересно увидеть, — это генерация кода. У CodeNet богатая библиотека текстовых описаний проблем и соответствующего им исходного кода. Уже было несколько примеров использования разработчиками продвинутых языковых моделей, таких как GPT-3, для генерации кода из описаний на естественном языке. Будет интересно посмотреть, может ли CodeNet помочь точно настроить эти языковые модели, чтобы они стали более последовательными при генерации кода.

Исследователи из IBM уже провели несколько экспериментов с CodeNet, включая классификацию кода, оценку сходства кода и завершение кода. Используемые ими архитектуры глубокого обучения включают простые многослойные персептроны, сверточные нейронные сети, графовые нейронные сети и трансформаторы. Результаты, сообщенные в статье эти детали проекта CodeNet показывают, что они смогли получить точность выше 90 процентов в большинстве задач. (Хотя стоит отметить, что оценка точности в программировании немного отличается от классификации изображений и генерации текста, где незначительные ошибки могут привести к неудобным, но приемлемым результатам.)

Невероятные инженерные усилия

Инженеры IBM провели сложную работу по разработке программного обеспечения и данных, чтобы курировать набор данных CodeNet и разрабатывать дополнительные инструменты.

Во-первых, они должны были собрать образцы кода из AIZU и AtCoder. В то время как у одного из них был интерфейс прикладного программирования, который позволял легко получить код, у другого не было простого интерфейса доступа, и исследователям пришлось разработать инструменты, которые удаляли данные с веб-страниц платформы и раскладывали их в табличный формат. Затем им пришлось вручную объединить два набора данных в единую схему.

Затем они должны были разработать инструменты для очистки данных путем выявления и удаления дубликатов и образцов, которые имели много мертвого кода (исходный код, который не выполняется во время выполнения).

Они также разработали инструменты предварительной обработки, которые облегчат обучение моделей машинного обучения на корпусе CodeNet. Эти инструменты включают токенизаторы для различных языков программирования, деревья синтаксического анализа и генератор графовых представлений для использования в графовых нейронных сетях.

Все эти усилия являются напоминанием об огромных человеческих усилиях, необходимых для создания эффективных систем машинного обучения. Искусственный интеллект не готов заменить программистов (по крайней мере, пока). Но это может изменить вид задач, которые требуют усилий и изобретательности человеческих программистов.

Автор статьи: Бен Диксон (Ben Dickson) — инженер-программист и основатель TechTalks. Он пишет о технологиях, бизнесе и политике.

Источник: https://venturebeat.com/2021/05/23/ibms-project-codenet-will-test-how-far-you-can-push-ai-to-write-software/

от AI_NEWS

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *