Целью данной статьи является исследование возможности и перспектив использования больших языковых моделей в разработке программного обеспечения. Нами рассмотрены три существующие большие языковые модели — Codex, ChatGPT и AlphaCode, в том числе проведено сравнение Codex и ChatGPT посредством решения олимпиадных задач с сайта Codeforces с их использованием. Исследование показало, что на текущий момент эти языковые модели не в состоянии качественно и предсказуемо разрабатывать алгоритмы, необходимые для решения олимпиадных задач Codeforces среднего уровня и выше. Однако траектория развития подобных систем и результаты похожего исследования, опубликованные авторами модели AlphaCode, позволяют ожидать, что в ближайшее время способность таких систем к разработке алгоритмов сильно улучшится и в течении периода от нескольких месяцев до нескольких лет мы начнём применять такие системы для разработки несложных программ от начала и до конца.

Большие языковые модели

Языковая модель — это вероятностное распределение по последовательностям слов. В контексте последовательности слов длинной m, языковая модель присваивает вероятность P(w1, ..., wm) всей последовательности. Языковые модели генерируют вероятности, обучаясь на массиве текстовых данных (например, статьи из Википедии, книги, являющиеся общественным достоянием, статьи из Интернета, онлайн-блоги, форумы, комментарии и другие публично доступные тексты). Принимая во внимание тот факт, что языки могут быть использованы для выражения бесконечного множества корректных предложений (см. свойство цифровой бесконечности), языковым моделям необходимо решить проблему присвоения ненулевых вероятностей лингвистически корректным последовательностям, которые могут не встречаться в обучающих данных. Для решения этой проблемы были спроектированы несколько подходов к моделированию, основанные на предположениях Маркова и на нейросетевых архитектурах, таких как рекуретные нейросети или трансформеры.

Ниже рассмотрены три наиболее совершенные на сегодняшний день модели, основанные на нейросетевой архитектуре: Codex, ChatGPT и AlphaCode.

Codex

Codex — это наиболее зрелая языковая модель. Она, как и ChatGPT, основана на архитектуре GPT (вариант трансформер-архитектуры), а именно, GPT-3. Codex — модель, специально обученная быть при написании кода ассистентом, вторым пилотом программиста. Она давно и успешно коммерциализирована в виде продукта под названием GitHub Copilot. Этот продукт был впервые анонсирован 29 июня 2021 года и вначале был доступен ограниченному кругу разработчиков. 21 июня 2022 года доступ к Copilot был открыт для всех разработчиков, стоимость подписки составляет от 10 долл. в месяц для индивидуальных разработчиков. Студенты, преподаватели и разработчики приложений с открытым исходным кодом могут использовать Copilot бесплатно.

Архитектура сети, используемая в Codex, содержит 12 млрд. параметров. Модель разработана и обучена компанией OpenAI.

ChatGPT

ChatGPT — самая популярная языковая модель из выбранных нами трёх. Основана на архитектуре GPT, в частности, GPT-3.5. ChatGPT — модель, специально обученная поддерживать диалог, максимально соответствующий тому, который мог бы поддерживать живой человек. Необходимо отметить, что корректность информации, предоставляемой ChatGPT, не является приоритетом для ее разработчиков. Публичный доступ к предрелизной версии ChatGPT был открыт 30 ноября 2022 года; стабильный публичный релиз был выпущен 30 января 2023 года. ChatGPT стала одним из самых быстрорастущих ИТ-продуктов в истории, набрав 1 млн. пользователей за 5 дней после выпуска предрелизной версии и 100 млн. пользователей в январе 2023-го.

Архитектура ChatGPT подобна архитектуре сети Codex, однако имеет намного большую ёмкость и содержит 175 млрд. параметров. Модель разработана и обучена компанией OpenAI.

AlphaCode

Модель AlphaCode, как и Codex, была специально обучена разрабатывать программы. Она обладает уникальной, специально разработанной для неё архитектурой, также типа трансформер. AlphaCode была анонсирована 2 февраля 2022 года, а публикация, раскрывающая детали архитектуры, датирована 8 декабря 2022 года. На настоящий момент публично доступной версии модели не существует. Согласно информации из анонса 2 февраля 2022 года, AlphaCode превосходит 46% программистов в олимпиадном программировании.

Отличия архитектуры AlphaCode не позволяют однозначно сравнить её ёмкость с Codex и ChatGPT, однако эта модель имеет 41 млрд. параметров. AlphaCode разработана и обучена компанией DeepMind.

Методология сравнения

Как уже упоминалось выше, публичной версии AlphaCode не существует, и возможность воспроизвести тестовые условия, описанные в статье, применительно к AlphaCode отсутствует. Поэтому мы, чтобы сравнить ее с ChatGPT и Codex, воспользовались опубликованными компанией DeepMind олимпиадными задачами, которые авторы AlphaCode использовали для теста модели. Мы сгенерировали решения этих задач с помощью ChatGPT и Codex, а затем загрузили решения задач на Codeforces для сравнения их работоспособности и производительности.

Взаимодействие с ChatGPT производилось через публичный интерфейс, для каждой задачи был создан новый контекст взаимодействия и для каждой задачи в модель был загружен следующий запрос: «Write a correct solution for the following problem in Python 3» («Напиши корректное решение следующей проблемы на Python 3») и затем текст задачи в том виде, в котором он был загружен в AlphaCode.

Взаимодействие с Codex производилось через Visual Studio Code с установленным GitHub Copilot. Текст задачи, в том виде, в котором он был загружен в AlphaCode, был предоставлен Copilot, затем первая предложенная генерация Copilot была принята как верная.

У каждой модели была одна попытка решить задачу.

Модели решали следующие задачи:

  1. 1549C — Web of Lies (Паутина лжи)
  2. 1548C — The Three Little Pigs (Три поросенка)
  3. 1548E — Gregor and the Two Painters (Грегор и два маляра)
  4. 1551A — Polycarp and Coins (Поликарп и монеты)
  5. 1551B1 — Wonderful Coloring — 1 (Чудесная раскраска — 1)
  6. 1552A — Subsequence Permutation (Перестановка подпоследовательности)
  7. 1552B — Running for Gold (Забег за золотом)
  8. 1553A — Digits Sum (Сумма цифр)
  9. 1553E — Permutation Shift (Сдвиг перестановки)
  10. 1553H — XOR and Distance (XOR и расстояния)

Тексты задач доступны на сайте AlphaCode на английском языке и загружены в нейросети на английском языке, потому что все из рассматриваемых нейросетей лучше всего понимают текст на английском.

Результат сравнения

Все нейросети сгенерировали синтаксически корректный код на Python. Однако ни одно решение, сгенерированное ChatGPT, не прошло автотесты Codeforces: одно решение вызвало исключение, пять решений выдали неверный ответ и четыре решения превысили допустимое время выполнения. Codex, в свою очередь, сгенерировал одно верное решение, одно решение, вызывающее исключение, пять решений, которые выдают неверный ответ и три решения, превышающие допустимое время выполнения. Подробные результаты по каждой задаче представлены ниже.

Результаты генерации задач ChatGPT и Codex


ChatGPT

Codex

Паутина лжи

Вызывает исключение на первом тесте

Неверный ответ на первом тесте

Три поросенка

Неверный ответ на первом тесте

Неверный ответ на первом тесте

Грегор и два маляра

Превышено потребление памяти на тесте 10

Превышено потребление памяти на тесте 10

Поликарп и монеты

Неверный ответ на первом тесте

Верное решение

Чудесная раскраска — 1

Неверный ответ на втором тесте

Неверный ответ на первом тесте

Перестановка подпоследовательности

Неверный ответ на первом тесте

Неверный ответ на первом тесте

Забег за золотом

Превышено время выполнение на тесте 2

Превышено время выполнение на тесте 2

Сумма цифр

Превышено время выполнения на тесте 1

Превышено время выполнения на тесте 1

Сдвиг перестановки

Неверный ответ на первом тесте

Вызывает исключение на первом тесте

XOR и расстояния

Превышено время выполнения на тесте 10

Неверный ответ на первом тесте

Исходный код сгенерированных обеими моделями задач опубликован на GitHub.

Специализация Codex дает модели преимущество в решении данных задач несмотря на существенно меньшую ёмкость по сравнению с ChatGPT.

Недоступность AlphaCode делает корректное сравнение с ней невозможным. Однако, исходя из публикации разработчиков AlphaCode и известных результатов, можно сделать вывод о превосходстве этой модели над ChatGPT и Codex в решении подобных задач.

Заключение

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

Также стоит отметить, что Codex очень хорошо справляется с генерацией автотестов к существующему коду и с автодополнением рутинного/повторяющегося кода, что существенно ускоряет работу разработчика. Дальнейшее рассмотрение этих возможностей выходит за рамки данной статьи.

Юрий Михалевич, старший инженер-программист компании Lightning AI