Программное обеспечение пожирает мир. Программное обеспечение теперь пронизывает каждую часть нашего существования; Сервисы Google вместе содержат более 2 миллиардов строк кода, а современный автомобиль содержит около 100 миллионов строк кода. Создание, отладка, обслуживание и обновление этих сложных программных систем — монументальная задача.

Быстро развивающаяся дисциплина, известная как AI for Code, призвана помочь разработчикам программного обеспечения повысить свою производительность за счет автоматизации процесса разработки программного обеспечения. Исследователи искусственного интеллекта для кода используют такие технологии, как NLP, и дополняют их анализом кода и методами компиляции для выполнения множества практических задач, таких как поиск кода, суммирование и завершение, а также преобразование кода в код. Дисциплина не ограничивается академическими исследованиями. Ручир Пури, главный научный сотрудник IBM Research, рассказал в недавнем подкасте, как технологии искусственного интеллекта для кода используются для модернизации устаревшего программного обеспечения, помогая перенести монолитные приложения в микросервисы для корпоративных клиентов IBM. Чтобы помочь продвинуть эту новую область, исследовательское подразделение IBM по искусственному интеллекту выпустило новый набор данных под названием Project CodeNet.

Что такое проект CodeNet?

Project CodeNet — это крупномасштабный набор данных, содержащий примерно 14 миллионов примеров кода на 55 различных языках программирования. Каждый образец кода содержит около 500 строк кода, который является предполагаемым решением одной из 4000 проблем с кодированием. CodeNet также предоставляет наборы входных и выходных тестов для более чем 7 миллионов образцов кода. Набор данных CodeNet содержит задачи, заявки и метаданные, полученные путем загрузки заявок с двух веб-сайтов онлайн-судейства: AIZU Online Judge и AtCoder.

Набор данных сопровождается репозиторием, где мы предоставляем набор инструментов для агрегирования образцов кода на основе пользовательских критериев и преобразования образцов кода в последовательности токенов, упрощенные деревья синтаксического анализа и другие полезные представления. Подробное обсуждение Project CodeNet доступно в этой бумаге.

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

Как Project CodeNet помогает в задачах машинного обучения?

Вот несколько примеров того, как модели машинного обучения, полученные из CodeNet, могут помочь улучшить задачи программирования:

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

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

Маскированные языковые модели (MLM) в исходном коде. Цель состоит в том, чтобы вывести правильный токен для замаскированного токена в произвольной позиции в тексте исходного кода. Исследователи IBM создали ноутбук для завершения этого эксперимента.

Что делает проект CodeNet выдающимся?

Есть две удивительные особенности Project CodeNet при сравнении его с родственными наборами данных.

Во-первых, не только огромный размер набора данных и всесторонние языки программирования, написанные в нем, образцы кода в Project CodeNet аннотированы богатым набором информации, такой как размер кода, объем памяти, время работы ЦП и состояние, который указывает типы принятия или ошибки. Более 90% задач сопровождаются соответствующим описанием проблемы, которое содержит краткую постановку задачи, спецификацию формата ввода и формата вывода. Если доступно, образцы входных и выходных данных также извлекаются из описания проблемы и предоставляются как часть набора данных. Пользователи могут выполнять принятые образцы кода для извлечения дополнительных метаданных и проверки правильности выходных данных генеративных моделей ИИ.

Во-вторых, Project CodeNet решает проблемы качества образцов данных. В большинстве случаев довольно большое количество часто используемых наборов данных AI for Code имеют повторяющиеся образцы кода, что может привести к завышению показателей производительности до 100%. Кроме того, наборы данных в стиле отправки задач из онлайн-систем судейства могут содержать кластеры идентичных задач, которые также искажают показатели производительности. Однако в Project CodeNet исследователи выявили такие проблемы, как почти дубликаты и идентичные кластеры проблем, в интересах пользователей.

Сравнение связанных наборов данных

Статистика набора данных

Давайте посмотрим на статистику набора данных. Набор данных включает 13 916 868 заявок, разделенных на 4053 задачи. Из представленных материалов 53,6% (7 460 588) принимаются, 29,5% помечены как неправильный ответ, а остальные имеют одну из возможных причин отклонения.

Процент заявок на статус

Данные содержат заявки на 55 различных языках, хотя 95% из них закодированы на шести наиболее распространенных языках (C++, Python, Java, C, Ruby, C#), C++ является наиболее распространенным языком с 8 008 527 заявками (57% всего) из которых 4 353 049 приняты. Вот 2 круговые диаграммы, отображающие отправления и распределение статуса Project CodeNet.

Процент заявок на язык программирования

Резюме

Богатые метаданные и языковое разнообразие позволяют Project CodeNet помогать в самых разных случаях использования. Отношение проблема-представление в CodeNet может использоваться для поиска кода и обнаружения клонов. Образцы кода в Project CodeNet помечены своим статусом принятия, и мы можем изучить методы ИИ, чтобы отличить правильные коды от проблемных. Метаданные Project CodeNet также позволяют отслеживать, как заявка превращается из проблемной в принятую, что можно использовать для изучения автоматического исправления кода. Каждый образец кода помечен временем выполнения ЦП и объемом памяти, которые можно использовать для регрессионных исследований и прогнозирования. Project CodeNet также может использоваться для перевода программ, учитывая его богатую коллекцию программ, написанных на разных языках. Одна из серьезных проблем нейронного машинного перевода заключается в том, что обучение модели зависит от больших параллельных корпусов. Project CodeNet охватывает очень богатый набор языков с достаточным количеством обучающих примеров.

Таким образом, «Project CodeNet» — это первый в своем роде очень крупномасштабный, разнообразный и высококачественный набор данных для ускорения алгоритмического прогресса в AI для кода. Этот набор данных уникален не только по своему масштабу, но и по разнообразию задач кодирования, которые он может помочь в тестировании: от сходства кода и классификации для достижений в алгоритмах рекомендаций по коду и перевода кода между большим разнообразием языков программирования до улучшения производительности кода. методы улучшения и качество кода.

Разнообразные аннотации Project CodeNet позволяют проводить исследования в области поиска кода, завершения кода, перевода кода в код и множества других вариантов использования. Мы также извлекли несколько наборов данных для конкретных языков для сравнительного анализа в Python, Java и C++, чтобы стимулировать инновации в моделях глубокого и машинного обучения для классификации кода и подобия кода. Чтобы ускорить ИИ для исследования кода с использованием графовых нейронных сетей, мы также сделали доступным упрощенное представление дерева синтаксического анализа (SPT) образцов кода в четырех наборах тестовых данных.

Ресурсы

  1. Проект CodeNet на DAX: https://developer.ibm.com/technologies/artificial-intelligence/data/project-codenet/
  2. Проект CodeNet Github: https://github.com/IBM/Project_CodeNet
  3. Пост VentureBeat в IBM Project CodeNet:
  1. Пост Forbes в IBM Project CodeNet: https://www.forbes.com/sites/moorinsights/2021/06/04/ibm-codenet-artificial-intelligence-that-can-program-computers-and-solve-a- Проблема со 100-миллиардным устаревшим кодом/?sh=7ee344c16cdc
  2. AI News Featured IBM Project CodeNet: https://artificialintelligence-news.com/2021/06/17/reintroduction-facial-recognition-legislation-mixed-responses/