Введение

Если вы не живете под скалой, вы, скорее всего, слышали о ChatGPT, поскольку в последнее время это главная тема в Интернете. Это чат-бот с искусственным интеллектом, разработанный OpenAI, в котором вы можете поговорить на любую тему, и вам будут отвечать связные ответы, подобные человеческим. Он построен на основе самой большой языковой модели, обученной до сих пор, и основан на огромных объемах текстовых данных со всего Интернета и за его пределами. Он был запущен 30 ноября 2022 года и привлек внимание последовательными, правильными и четкими ответами во многих областях знаний.

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

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

Тонкая настройка Fake-GPT

Соберите и очистите свой набор данных

Прежде всего, я искал открытый набор данных, который подходил бы для тонкой настройки. Я искал набор данных, который мог бы соответствовать формату, который использует GPT-3: вопрос и ответ или подсказка и завершение. После нескольких часов поиска набора данных я наконец нашел многообещающий набор данных Fake News. Набор данных состоит из тысяч примеров реальных новостей и фейковых новостей. Он разделен на два файла CSV, один с фейковыми новостями, а другой с реальными новостями. Каждый файл имеет следующие свойства для каждой новостной статьи: заголовок, основной текст, тема и дата. Вы можете увидеть пример набора данных ниже fake_news_dataset.csv:

title,text,subject,date
News Title 2,News body 2,politicsNews,31/12/22
News Title 2,News body 2,politicsNews,09/10/22
News Title 3,News body 3,worldNews,17/11/22
. . .

Идея состоит в том, чтобы определить, является ли новостная статья поддельной или настоящей, на основе заголовка новости и основного текста. Имея на руках необработанный набор данных, пришло время отформатировать данные таким образом, чтобы они соответствовали процессу тонкой настройки. Формат файла должен быть CSV и должен содержать два свойства: «запрос» и «завершение». Подсказка будет иметь заголовок новости и основной текст, добавленные вместе. Завершение — это просто одно слово, fake или true. Результирующий файл должен иметь структуру, аналогичную приведенному ниже примеру (formated_dataset.csv):

prompt,completion
"News Title: News body … end","fake"
"News Title: News body … end","true"
"News Title: News body … end","fake"
. . .

Чтобы преобразовать необработанные данные CSV в формат для точной настройки, я использовал инструмент командной строки csvkit для простоты. Вы можете использовать другие инструменты, такие как panda для Python или даже Spark для больших объемов данных. Когда у вас есть данные, очищенные и отформатированные, вы готовы начать процесс тонкой настройки.

Предпосылки для тонкой настройки

Прежде всего я установил библиотеку Python OpenAI с помощью pip (pypi.org/project/OpenAI):

pip install - upgrade openai

Затем мне пришлось установить ключ OpenAI API, чтобы вы могли отправлять команды в OpenAI от имени вашей учетной записи. Я использовал ключ API для вашего аккаунта на странице api-keys. Затем я устанавливаю переменную среды для авторизации команд в OpenAI с помощью следующей команды:

export OPENAI_API_KEY=<your_key>

Формат набора данных

Процесс тонкой настройки OpenAI принимает только файлы в формате JSONL, но не беспокойтесь, он предоставляет инструмент для преобразования любого упомянутого выше формата в JSONL. Поэтому я запускаю следующую команду для этого:

openai tools fine_tunes.prepare_data -f formated_dataset.csv

Команда завершается ошибкой, потому что в ней отсутствует какая-то зависимость, поэтому я выполнил следующую команду, чтобы исправить ее, и повторил попытку (нажмите здесь, чтобы узнать больше). Команда для установки необходимой зависимости для запуска пакета openai:

pip install OpenAI[dependency]

Команда openai prepare_data проанализировала мой набор данных и показала мне список предложений с важной информацией о моем наборе данных и некоторыми вариантами тонкой настройки. Затем, на основе анализа, было предложено выполнить некоторые действия, такие как удаление дубликатов, добавление суффиксного разделителя, добавление пробела в начале завершения и т. д. Я применил все рекомендуемые действия, поскольку все они подходят для моего случая с набором данных.

Одним из важных действий является «разделение данных на наборы для обучения и проверки», что позволит получить некоторые результаты оценки после процесса обучения. Он создаст два файла с примерами, состоящими из обучающего набора, который будет использоваться для точной настройки (около ~ 95 % примеров), и проверочного набора, который будет использоваться для оценки производительности обученной модели (около ~ 5 % примеров). ). Это действие позволяет OpenAI генерировать подробные результаты о производительности модели позже.

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

openai api fine_tunes.create -t "dataset_train.jsonl" -v "dataset_valid.jsonl" \
-m "ada" -compute_classification_metrics -classification_positive_class " true"

Эта команда будет использоваться для создания обученной модели и будет объяснена в следующем разделе.

Выполнить тонкую настройку

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

Я запустил предложенную ранее команду fine_tunes.create. Эта команда имеет несколько параметров, которые можно установить или изменить в зависимости от ваших потребностей (ознакомьтесь с тонкой настройкой команды здесь). Например, параметр -m, который вы можете установить как ada, babbage, curie или davinci, будучи одной из моделей на основе OpenAI, предоставляет различные преимущества, такие как производительность, точность, цена и т. д. ( узнайте больше о моделях, которые предоставляет OpenAI).

openai api fine_tunes.create
-m "ada" 
-t "prepared_dataset_train.jsonl" 
-v "prepared_dataset_valid.jsonl" 
 - compute_classification_metrics 
 - classification_positive_class " true"

Обратите внимание, что команда может меняться в зависимости от значений вашего набора данных. Например, для задач классификатора, где каждый ввод в подсказке должен быть отнесен к одному из предопределенных классов, мне пришлось установить параметр «— calculate_classification_metrics». Так как было только два класса, мне пришлось установить «—classification_positive_class «true»». Если классов больше, необходимо установить «—classification_n_classes 5». См. эти примеры ниже.

Объяснение вариантов:

  • -m: модель, используемая для точной настройки.
  • -t: имя файла для набора обучающих данных.
  • -v: имя файла для набора данных проверки
  • — calculate_classification_metrics: для генерации метрик.
  • —classification_positive_class: точная настройка для классификации с положительным классом true

Когда вы выполните команду, она загрузит файл(ы) набора данных на серверы OpenAI, и команда предложит вам идентификатор точной настройки, такой как «ft-Hdkci53FidOabcF». Я сохранил этот идентификатор для справки позже. В этот момент серверы OpenAI получают запрос, и точная настройка ставится в очередь для выполнения. Выполнение тонкой настройки заняло несколько часов из-за размера набора данных и установленной модели. Мне не нужно было ждать завершения процесса, поэтому вы без колебаний завершали процесс (ctrl-c) и возвращались позже, чтобы проверить ход выполнения задания. Я проверил состояние вашего процесса, выполнив следующую команду с идентификатором, который вы получили ранее:

openai api fine_tunes.get -i ft-Hdkci53FidOabcF

Когда тонкая настройка завершена, я проверил статус вашего процесса тонкой настройки как «обработанный», что означает, что обучение вашей пользовательской модели завершено и она готова к использованию. Чтобы использовать мою обученную модель, мне нужно было получить ее имя, которое я нашел в свойстве «fine_tuned_model» (пример: «fine_tuned_model»: «ada:ft-personal-2023–01– 18–19–50–00»).

Чтобы использовать обученную модель при отправке подсказок в OpenAI, мне пришлось установить параметр «-m» с идентификатором вашей модели, как показано ниже:

openai api completions.create -m ada:ft-personal-2023–01–18–19–50–00 -p "your prompt here!"

Я также смог использовать обученную модель в адресе ссылка на игровую площадку моей учетной записи. Теперь я могу играть, проверять, тестировать и оценивать свою специально обученную модель, чтобы убедиться, что она отвечает ожидаемым ответом для моего сценария. В этом случае я мог бы отправить новостную статью, и она вернется, если статья поддельная или нет! См. результаты ниже.

Результаты оценки производительности (бонус)

Помните, мы создали два файла для набора данных, один для обучения, а другой для проверки. OpenAI использовал первый для обучения модели, а второй для запуска некоторых процедур оценки для измерения некоторых статистических данных, таких как, например, точность и потери. Я мог видеть статистику, используя следующую команду:

openai api fine_tunes.results -i ft-Hdkci53FidOabcF results.csv

Выходные данные по умолчанию находятся в файле CSV и могут быть сохранены в файле для лучшей визуализации. Структура файла основана на шагах, выполненных в процессе обучения, которые представлены каждой строкой CSV-файла. Каждая строка показывает ценную информацию о шаге, например: количество обработанных примеров, количество обработанных токенов, точность обучения, потери при обучении, точность проверки, потери проверки и многое другое. В этом случае результаты, где:

Подробнее о результатах смотрите по этой ссылке.

Заключение

OpenAI приносит один из самых революционных технологических прорывов за последнее время с созданием GPT-3, GPT-4 и ChatGPT. Самое приятное то, что любой может иметь доступ к использованию этого невероятного инструмента. Кроме того, OpenAI предоставляет всем необходимые инструменты для создания персонализированных моделей для участия в любом конкретном сценарии. Этот процесс тонкой настройки легко доступен для всех благодаря OpenAI. Тонкая настройка обеспечивает доступ к передовой технологии машинного обучения, которую OpenAI использует в GPT. Это предоставляет бесконечные возможности для улучшения взаимодействия с компьютером для компаний, их сотрудников и клиентов.

Тонкая настройка позволяет любому создавать индивидуальные модели для любого сценария. В случае со статьей был создан классификатор Fake News. Представьте, насколько полезным для пользователя может быть что-то, что предупредит вас, если статья, которую вы читаете, вероятно, фальшивая!

Другими примерами могут быть:

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

Сценариев с большим объемом текста, с помощью которых он может помочь, бесчисленное множество.

Если у вас есть какие-либо вопросы, комментарии или предложения, не стесняйтесь обращаться ко мне: https://www.linkedin.com/in/marceloax/