1. Добро пожаловать в эпоху трансформеров

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

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

Недавно OpenAI выпустила самую большую модель своего Generative Pre-trained Transformer под названием GPT-3, обладающую огромной емкостью около 175 миллиардов параметров машинного обучения. Он обладает замечательной способностью использовать глубокое обучение и генерировать понятные человеку тексты, которые могут быть рассказами, стихами или исходным кодом.

Одно из основных преимуществ этой модели заключается в том, что ее можно использовать с Few Shot или Zero Shot Learning, что значительно сокращает и упрощает работу без более длительной подготовки данных и этапы обучения.

Эта статья в основном посвящена генерации исходного кода, а некоторые бонусные треки демонстрируют отличные возможности генерации текста. Он поставляется вместе со всем исходным кодом Python, используемым для создания этого веб-приложения для игровых площадок.

На сегодняшний день OpenAI GPT-3 DaVinci API все еще находится в бета-версии, поэтому в ближайшие месяцы возможности генерации кода могут быть усовершенствованы.

2. Обзор возможностей веб-приложения

С помощью этой статьи вы сможете создать и запустить простое веб-приложение, реализующее мощные возможности генерации кода на основе GPT-3, всего несколькими строками кода Python. По сути, приложение представляет собой игровую площадку, позволяющую пользователю ввести простой запрос на естественном языке, а затем просмотреть сгенерированный исходный код. Приложение интегрировано с API GPT-3, который управляет генерацией кода или завершением текста.

Это может быть мечтой каждого разработчика, если бы они могли задать следующее и получить сгенерированный код:

"Создайте код Python, который прогнозирует зарплату с такими критериями, как возраст, должность, опыт, используя алгоритм Random Forest"

или следующее: «Пожалуйста, создайте класс Java с именем VIPPerson, используемый для представления человека с атрибутами имени, возраста и пола».

В помощь пользователю был подготовлен заранее заданный список типичных запросов. Каждый из них может быть адаптирован, поэтому пользователь может нажать кнопку, чтобы сгенерировать код и увидеть результаты.

Используемый стек технологий следующий:

  • питон
  • Dash (для веб-приложения Python)
  • API GPT-3 (OpenAI)

Вот некоторые возможности приложения, которые вы сможете реализовать в следующих разделах.

Вариант использования очень прост: пользователь может выбрать предустановку типа запроса из раскрывающегося меню. Затем поле текстовой области заполняется стандартным Запросом, написанным на естественном языке. Запрос может быть адаптирован пользователем. После этого пользователь может нажать кнопку Создать, после чего будет сгенерирован и отображен соответствующий исходный код.

Генерация кода: создание SQL-запроса

Ниже простой запрос на естественном языке с описанием полей и таблиц, а также выборка данных. Результатом является SQL-запрос, соответствующий синтаксису PostgreSQL.

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

Генерация кода: создание аварийного сигнала AWS CloudWatch с определенным пороговым значением

Как вы, возможно, знаете, облако AWS можно полностью настроить с помощью кода. SDK под названием Boto используется здесь для создания аварийного сигнала CloudWatch, который срабатывает, когда загрузка ЦП превышает 70%.

Генерация кода: прогнозируйте зарплату по таким критериям, как возраст, должность, опыт, используя алгоритм Random Forest

Этот запрос позволяет сгенерировать полный код для прогнозирования зарплаты по нескольким критериям. В результате получается код Python, в котором для достижения этой цели используется RandomForestRegressor. График также строится с использованием библиотеки Pyplot.

Генерация кода: создание класса Java, представляющего человека с атрибутами имени, возраста и пола

Это очень простой класс Java, сгенерированный с несколькими атрибутами. Тот факт, что описание начинается с комментария Java и имени класса, помогает механизму GPT-3 завершать код с большей точностью.

Генерация кода: список задач разработчика

Запрос может иметь форму списка задач. Сгенерированный язык по умолчанию — Python, но его также можно указать для преобразования в любой другой распространенный язык.

Обработка текста: суммируйте текст

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

Обработка текста: перефразируйте текст для 10-летнего ребенка

Еще одна мощная функция генерации текста. Этот запрос просит движок GPT-3 перефразировать текст, чтобы его мог понять 10-летний ребенок.

3. Быстрый старт

Следующее позволит вам редактировать и запускать код, представленный в моем GitLab. Перед этим вам необходимо зарегистрироваться на OpenAI, чтобы получить ключ API.

  • Перейдите на веб-сайт OpenAI и зарегистрируйтесь, чтобы получить ключ API.
  • Перейти к моему проекту GitLab под названием GPT-3-Dash-Playground
  • Редактируйте блокнот Jupyter Python с помощью Google Colab
  • Замените значение openai.api_key в коде своим ключом API.
  • Выберите «Выполнить все» в меню «Выполнение».
  • Веб-приложение должно запуститься через несколько секунд. Нажмите на URL-адрес, сгенерированный в нижней части страницы, чтобы отобразить его.

Приложение должно выглядеть следующим образом:

4. Разберитесь в коде

4.1. Инициализация GPT-3

Первый раздел кода устанавливает зависимости OpenAI GPT-3. Ключ API необходимо заменить на тот, который вы получили при регистрации на их веб-сайте.

4.2. Пресеты

Это приложение предлагает 10 пресетов запросов на естественном языке. 8 для генерации исходного кода и 2 для завершения текста.

Теперь давайте опишем первый пресет, который генерирует SQL-запрос. По сути, приведенная ниже функция получает запрос на естественном языке, вызывает API GPT-3 с определенными параметрами, а затем возвращает результат, который будет отображаться на экране. (здесь SQL-запрос) Остальные пресеты аналогичны.

Этот пресет использует следующие параметры:

  • двигатель: механизм или модель GPT-3, которая будет генерировать завершение. Одни движки подходят для задач на естественном языке, другие специализируются на коде. code-davinci-001 означает, что будет использоваться самый передовой механизм генерации кода. Дополнительную информацию вы можете найти здесь.
  • приглашение: запрос должен быть выполнен на естественном языке. т. е. ### сгенерируйте SQL-запрос, в котором перечислены сотрудники компании в возрасте от 20 до 30 лет. (Это очень просто, но сама предустановка намного сложнее)
  • температура: температура определяет случайность ответа. 0.0 — наиболее детерминированное и повторяющееся значение, которое остается лучшим выбором для генерации кода.
  • max_tokens: максимальное количество создаваемых токенов.
  • top_p: управляет разнообразием посредством выборки ядра. 0,5 означает, что учитываются все возможные варианты, взвешенные по древесине. Установка его на 1.0 может дать лучшие результаты для генерации кода.
  • частота_пеналити: число от -2,0 до 2,0. Положительные значения штрафуют новые токены в зависимости от их существующей частоты в тексте на данный момент, уменьшая вероятность того, что модель дословно повторит одну и ту же строку. Этот параметр установлен на 0.0 для наших нужд.
  • presence_penality: число от -2,0 до 2,0. Положительные значения штрафуют новые токены в зависимости от того, появляются ли они в тексте до сих пор, что увеличивает вероятность того, что модель будет говорить о новых темах. Этот параметр установлен на 0.0 для наших нужд.
  • stop: до 4 последовательностей, в которых API прекращает генерировать дополнительные токены. Возвращаемый текст не будет содержать стоп-последовательности. В этом пресете стоп-последовательности установлены на «#», «;».

Ответ (сгенерированный код или завершенный текст) возвращается вызывающей стороне.

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

4.3. Веб-приложение Playground

Это веб-приложение основано на платформе Dash, которая позволяет создавать и запускать веб-приложения на Python. В частности, преимуществом библиотеки Jupyter-dash является выполнение веб-приложений непосредственно из блокнота Jupyter Colab.

Документацию по Dash можно найти здесь.

4.3.1. Импорт зависимостей

В этом разделе импортируются все зависимости Dash. Обратите внимание, что версия 2.0.0 dash импортирована из-за ошибки в последней версии. Возможно, с тех пор это было решено, поэтому не стесняйтесь удалять ссылку на версию 2.0.0 в будущем.

Dash предоставляет 2 типа компонентов:

  • Основные (встроенные) компоненты
  • HTML-компоненты

Зависимости Input, Output и State позволят нам управлять обратным вызовом, инициируемым событиями в отображаемых полях.

4.3.2. Веб-страница игровой площадки

В этом разделе строится простой макет веб-страницы, содержащий в основном заголовок и 4 элемента:

  • dropdown-preset: раскрывающееся поле со списком из 10 предустановок.
  • textarea-query: поле текстовой области, которое будет установлено по умолчанию с выбранным предустановленным запросом. После выбора предустановки пользователь сможет изменить предложенный запрос.
  • button-generate: HTML-кнопка, которая инициирует вызов GPT-3 API и получает ответ.
  • div-output-result2: предварительно отформатированное поле вывода HTML для отображения результата, который может быть сгенерированным кодом или завершенным текстом.

4.3.3. Предустановленный обратный вызов раскрывающегося списка

Эта часть кода вызывается, когда пользователь выбирает предустановку из раскрывающегося списка. По сути, функция получает Preset ID из поля dropdown-preset в качестве входных данных и возвращает предварительно отформатированный запрос в textarea-query. поле в качестве вывода.

Вторая функция возвращает поле, называемое запросом, которое представляет собой предварительно отформатированный запрос в зависимости от выбранного предустановленного идентификатора.

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

4.3.4. Обратный вызов кнопки «Создать»

Эта часть кода вызывается, когда пользователь нажимает кнопку «Создать». По сути, вызываемая функция предустановки строится динамически с помощью идентификатора предустановки или номера предустановки. Затем вызывается API GPT-3 с запросом, поступающим из поля текстовой области, и конкретными параметрами, установленными для этого пресета. Наконец, сгенерированный код или завершенный текст отображаются с определенным полем вывода. (div-output-results2)

Обратите внимание, что в этом обратном вызове также есть 2 дополнительных состояния. Это означает, что этот обратный вызов не будет запущен, если значение textarea-query или dropdown-preset изменено. Но их значение будет передано в этот обратный вызов.

5. Заключительное слово

Спасибо, что дочитали мою статью до конца, надеюсь, вам понравилось!

Как видите, GPT очень перспективен и может быть легко реализован с помощью нескольких строк кода Python. Dash может помочь достичь 10-минутной цели.

Вы можете найти весь исходный код на моем GitLab: GPT-3-Dash-Playground