Доучение GPT-ассистентов с помощью OpenAI: более подробная инструкция от опытного Solution Architect, специализирующаяся на трансформационном потенциале моделей AI
В последнее время тема GPT вызывает ажиотаж. Решения на основе GPT могут выглядеть простыми в реализации — в конце концов, чтобы получить качественные результаты, нужно просто предоставить модели инструкции. Этого достаточно, чтобы произвести впечатление на тех, кто принимает решение. Но на самом деле эти качественные результаты это тщательно отобранные примеры, а для запуска системы часто необходимо что-то более надежное.
Александр Книга, Solution Architect в компании Weblab Technology, специализирующийся на AI и трансформационном потенциале моделей AI вроде GPT, создал для dev.ua подробную инструкцию с примерами о том, как правильно обучать ИИ-ассистентов с помощью OpenAI.
Современные компании используют GPT разными способами, некоторые из которых возлагаются на открытое общение между GPT и пользователем. Вот несколько примеров:
ChatSpot. Запрос на естественном языке (natural language prompt) поступает в API ChatSpot, превращается в операции для API HubSpot CRM, API Google Docs и т. д., а затем с помощью генеративной текстовой модели сообщает, когда действие было выполнено (или не выполнено). На базе GPT-4.
Khanmigo. Учебный бот на основе ИИ, разработанный Khan Academy. Запросы пользователей преобразуются в запросы с внедренным контекстом. Система полагается на способность GPT обрабатывать в восемь раз больше внедренного контекста, чем в предыдущей версии. На базе GPT-4.
Мы знаем, что компании и пользователи готовы переходить из привычного интерфейса на запросы на естественном языке. Однако, чтобы гарантировать надежность и эффективность ШИ-моделей на основе GPT на практике, мы должны доучить их. Это позволит подстроить их к конкретным предметным областям и случаям использования.
Важно, что GPT-4 предлагает больше возможностей предоставления контекста для запросов, а также демонстрирует гораздо меньше галлюцинационных ошибок.
Галлюцинации ИИ
Галлюцинации ИИ — это важная проблема, которую приходится решать специалистам во время работы с большими языковыми моделями, такими как GPT-4. Галлюцинации генерируют ложную или обманчивую информацию. Это может привести к чрезвычайно серьезным последствиям в программах, где точность фактов критически важна. В этой главе мы подробнее изучим технические аспекты галлюцинаций ИИ, а также обсудим, как минимизировать их влияние.
Для примера рассмотрим этот эгоцентрический тест на фактическую точность, проведенный Ноблом Акерсоном (Noble Ackerson). Среди фактов, предоставленных ИИ, есть много ложной информации:
Галлюцинации ИИ возникают прежде всего из-за ограничений, присущих архитектуре трансформера, а также учебные данные, используемые для больших языковых моделей. Отсутствие когнитивной архитектуры, которая позволяет дедуктивное соображение, делает эти модели склонными к генерированию информации, которая может казаться правдоподобной, но на самом деле неправильной.
Трансформерная архитектура больших языковых моделей возлагается на механизмы внимания и внимательности к собственной информации, чтобы охватывать различные зависимости входных данных. Это позволяет модели генерировать связной и релевантный контексту текст, однако не гарантирует фактической точности. Кроме того, обучающие данные могут содержать предупреждение или дезинформацию, которые модель может получить непреднамеренно. Это также способствует галлюцинациям ИИ.
Вероятностная природа
Одну из причин такой недостаточной надежности можно увидеть в вероятностной природе GPT. Для контекста давайте рассмотрим возможные структуры данных, такие как фильтры Блума. Фильтр Блума — это вероятностная структура данных, которая используется для проверки того, входит ли элемент в определенный набор. Она состоит из массива битов и нескольких хэш-функций, любая из которых отображает элемент на один либо несколько индексов массива. Когда элемент вставляется в фильтр, он хешируется с помощью хеш-функций, а для соответствующих бит массива устанавливается значение true. Если нужно узнать, есть ли элемент в фильтре, этот элемент аналогично хешируется с помощью хеш-функций — и если все соответствующие биты в массиве имеют значение true, элемент, вероятно, присутствует в фильтре. Однако если любой из битов не имеет значения true, элемент точно не входит в фильтр. Ложные срабатывания встроены в вероятностные структуры данных по умолчанию.
Как и фильтр Блума, модель GPT вероятно. Но вместо того чтобы проверять принадлежность к набору, она предусматривает текст на основе введенных запросов. GPT состоит из нескольких уровней трансформеров, выполняющих сложные вычисления для прогнозирования начальной последовательности токенов на основе входящего запроса. Результат, созданный GPT, не детерминирован и может сильно отличаться в зависимости от используемого метода выборки, а также дополнительных гиперпараметров, выбранных во время обучения. Подобно фильтрам Блума, GPT также может «галюцинировать» и давать результаты, которые выглядят правдоподобными, но фактически неверными. Однако эту вероятность генерирования ненадежных результатов можно снизить, донастраивая модель и предоставляя ей высококачественные обучающие данные.
GPT-4 и риски
Скрытые фактические неточности могут навредить пользователям. Поэтому очень важно, чтобы разработчики принимали меры по уменьшению вероятности их возникновения.
GPT-4 медленнее предыдущих моделей. Однако GPT-4 гораздо безопаснее благодаря разнообразным мероприятиям, применяемым во время обучения, включая привлечение экспертов, улучшение безопасности модели, а также дополнительный мониторинг и контроль. Эти факторы значительно повысили безопасность GPT-4 по сравнению с GPT-3.5: тенденция модели отвечать на запросы по запрещенному содержимому уменьшилась на 82%, а тенденция модели отвечать на вопросы относительно чувствительного контента в соответствии с внутренними политиками выросла на 29% .
Устранение галлюцинаций
Даже с имеющимися рисками полностью игнорировать GPT сложно. Для людей и API модель GPT стала новым коммуникационным инструментом, уменьшающим потребность в пользовательском интерфейсе. Наша работа как инженеров состоит в том, чтобы решать проблемы, возникающие в результате его использования, с помощью имеющихся у нас ресурсов. И есть несколько способов сделать это.
Усовершенствование запросов
Предпочтительные запросы могут повысить эффективность модели. Они приводят к удовлетворительным результатам примерно в 50–65% случаев, но вряд ли больше.
Согласно исследованию Large Language Models являются Zero-Shot Reasoners (в котором описываются только возможности моделей завершения текста (text completion models), а не моделей чата или инструкций), улучшение запросов значительно улучшает эффективность GPT в задачах на размышление. Исследование продемонстрировало, что добавление простой фразы типа Let’s think step by step («Давай подумаем пошагово») перед каждым ответом повышает способность GPT решать даже те задачи, с которыми она сталкивается впервые (zero-shot learning). Следовательно, инженерам не нужно создавать такие задачи вручную на этапе обучения.
Обучение на нескольких примерах (few-shot learning) — еще одна мощная техника оперативного проектирования, которая может значительно улучшить производительность языковых моделей (например GPT-4) в новых задачах, даже с ограниченными учебными данными. В обычных вариантах это отменная альтернатива fine-tuning. В этом подходе пользователь использует структурированные примеры, чтобы показать, какой результат ожидает, а затем оставляет модели свободное пространство для заполнения.
В этой статье рассказывается о том, какие задачи ChatGPT еще не умеют решать.
Инъекция контекста
Инъекция контекста — это техника, устраняющая галлюцинации искусственного интеллекта и повышающая точность сгенерированного текста в определенных предметных областях. В этом подходе пользователь вводит контекст в свой запрос, благодаря чему модель получает более точную информацию. Это дает ей возможность генерировать более точные и релевантные ответы.
Этот метод быстрее и дешевле других, но также требует знаний и опыта со стороны пользователя. Учитывая это, он может быть особенно полезен в областях, где точность и релевантность созданного текста имеют решающее значение. Этот подход уже применяется в таких корпоративных областях, как обслуживание клиентов и медицинская диагностика.
Возьмем чат-бот для обслуживания клиентов. В этом случае инъекция контекста может предусматривать предоставление модели соответствующих деталей относительно учетной записи клиента, предварительных взаимодействий и любых известных проблем. Добавленный контекст позволяет модели генерировать более персонализированные и точные ответы, улучшая общее качество взаимодействия.
Этот метод используется, например, в GitHub Copilot и GitHub Copilot X. Анализируя контекст написанного кода вместе с любыми комментариями или документацией, эти ассистенты могут понять запланированную функциональность и ограничение кода.
Инъекция контекста является самым надежным способом уменьшения галлюцинаций, доступным на сегодняшний день, однако в этом подходе существует ключевое ограничение размеров запросов.
Fine-tuning
Fine-tuning — еще один метод, который может значительно повысить точность и надежность GPT. Это процесс предоставления дополнительных обучающих данных, чтобы модель адаптировалась к конкретной задаче или предметной области и улучшала точность и релевантность сгенерированного текста. Приблизительно то же требуется от любой другой нейронной сети глубокого обучения.
Процесс требует, чтобы данные, связанные с предметной областью, непрерывно поступали в обученную модель, пока она не научится генерировать более актуальный и точный текст для целевого задания.
Обучение с подкреплением на основе обратной связи от человека (RLHF)
Метод RLHF — это одна из причин, почему ChatGPT работает так хорошо, особенно с чувствительными запросами. Посмотрите, как Леандро фон Верра просит ChatGPT объяснить принцип RLHF (и это действительно замечательное объяснение)!
Как упоминалось выше, уловка состоит в том, чтобы добавить в запрос «like I am five» или подобную фразу. Это отличный способ упростить объяснение.
RLHF — это мощный подход, который можно применить для повышения эффективности и безопасности моделей на основе GPT. Модель сконфигурирована с помощью обратной связи, созданной людьми, что помогает ей учиться на реальных примерах и взаимодействиях с пользователями. Этот процесс включает сбор данных ответов, сгенерированных моделью, вместе с рейтинговыми оценками качества или сравнениями, которые используются для оптимизации параметров модели.
RLHF успешно используется в ряде реальных программ, включая чат-ботов и ШИ-ассистентов, чтобы улучшить качество ответов, а также уменьшить количество галлюцинаций. Включая человеческую обратную связь в процесс обучения, RLHF учит модель генерировать более точные, контекстуально релевантные и безопасные ответы, что в конечном итоге приводит к гораздо лучшему опыту пользователя и повышению надежности. Важно, что этот подход позволяет разработчикам использовать мощность моделей на основе GPT, а также устраняет проблемы, связанные с генерированием ложной или обманчивой информации.
Зная предметную область применения мы можем научить модель реагировать так, как нам нужно. Мы можем научить его отвечать «Я не знаю» или игнорировать определенные темы. OpenAI использует RLGH в ранних версиях своих моделей, чтобы подготовить их к выпуску. Вот несколько примеров:
Разработка модели
Давайте рассмотрим практический пример, выстроив процесс fine-tuning. Мы будем использовать определенный набор данных, таким образом, обучая модель отвечать на запросы, касающиеся конкретной предметной области. Рассмотрите эту схему:
Процесс включает следующие компоненты:
Начальный набор данных: коллекция обучающих файлов, относящихся к соответствующей предметной области.
Генератор вопросов и ответов: решение на основе GPT-4, использующее инъекцию контекста для генерации вопросов и ответов из исходного набора данных.
Образцы вопросов и ответов: обучающие данные, используемые для fine-tuning.
Fine-tuning: модель завершения текста GPT-3 настраивается на основе набора данных.
Вопросы и ответы для сравнения: набор вопросов и ответов, используемых для оценки эффективности модели.
Сравнительный анализ: этап fine-tuning, вводящий вопросы по набору контрольных вопросов и ответов и оценивающий достоверность сгенерированных ответов.
Мы продолжаем использовать модель завершения текста GPT-3, поскольку GPT-4 не поддерживает процесс fine-tuning.
Начальный набор данных
Для гарантии того, что модель GPT не знакома с используемым набором данных, желательно опираться на данные, касающиеся событий после сентября 2021 г. (конечной даты получения данных моделью). К примеру, я часто использую Next.js для создания веб-приложений, а Vercel выпустили Next.js версии 13 в 2022 году. Давайте спросим ChatGPT о дате выпуска Next.js 13 и посмотрим, что будет:
Прекрасно. Моя цель состоит в том, чтобы новая модель знала больше о Next.js 13 и о том, как с ним работать, чем текущая. Как я подготовил набор данных на основе Next.js 13, вы можете прочитать здесь.
Генератор образцов
В своих ответах мы хотим моделировать ответы на вопросы (запросы) в открытом формате. Только модели завершения текста поддерживают процесс fine-tuning. Следовательно, нам придется научить модели завершения текста отвечать на наши вопросы. Чтобы обеспечить надлежащие результаты, мы должны сначала превратить набор данных в набор вопросов и ответов. Мы можем сделать это с помощью модели ChatGPT. Вот пример кода:
Наша цель — создать по крайней мере 100 пар ответных вопросов для каждого обучающего файла.
Исходные данные следует сохранить в документе JSONL. Важно завершать каждый запрос все равно. Мы будем использовать последовательность \n\n###\n\n в качестве разделителя. В результате мы получили набор данных, содержащийся в данном файле: fine_tuning_dataset.jsonl .
Введение ошибочных вопросов
Мы хотим, чтобы модель честно отвечала «Я не знаю» на любые вопросы, не связанные с разработкой программного обеспечения и Next.js. Для этого мы можем интегрировать классификатор вопросов Next.js. Он будет проверить, связан вопрос с Next.js или нет. Чтобы получить более простую архитектуру, можно добавить дополнительные обучающие данные в процесс fine-tuning.
Мы также не хотим, чтобы наша система отвечала на бессмысленные вопросы, даже если они касаются Next.js. Итак, на вопрос типа «Когда фреймворк Next.js достигнет 1 миллиарда пользователей?» модель тоже должна отвечать «Я не знаю».
Образец кода:
Я создал 100 вопросов и ответов, чтобы показать модели, что она должна отвечать только на вопросы, связанные с Next.js и что вполне нормально отвечать «Я не знаю». Это должно снизить количество галлюцинаций. Полученный набор обучающих данных приведен в файле fine tuning dataset.jsonl .
Fine-tuning
Наконец, после создания обучающего набора данных (чтобы узнать больше об этом процессе, просмотрите официальное руководство от OpenAI), мы готовы выполнять fine-tuning. К сожалению, сейчас существует не так много моделей, с которыми это можно делать. Вы можете просмотреть их все, вытащив список всех моделей 'openai api models.list' и отыскав модели со значением 'allow_fine_tuning: true,'.
В процессе fine-tuning можно поиграть со скоростью обучения или другими параметрами, но мой опыт показывает, что это не сильно влияет на результат. Обучение набору данных и так недешево, а использование дополнительных параметров делает его еще более дорогим.
Продолжительность процесса fine-tuning зависит от модели (davinci, ada и т. п.). На нашем наборе данных из 1511 случаев и 907 КБ это заняло около часа.
Сравнительный анализ
Помните, что мы работаем с моделью завершения текста, а не с моделью чата или инструкциями. И наша модель завершения текста настроена на реагирование в формате ответа. Кроме того, наша модель ожидает, что запрос будет завершаться последовательностью «?\n\n###\n\n». Если это не придерживаться, результат может быть неожиданным (но, скорее всего, модель попытается сгенерировать определенное содержимое, чтобы завершить запрос нужным образом).
Давайте попробуем оценить, как вести себя модель с приведенными ниже наборами вопросов.
Мы ожидаем, что модель даст надлежащие ответы на основе данного содержимого:
Моделирование с температурой 0.3
Правильные ответы:
Частично правильный ответ:
Этот код сообщает Next.js, что при воспроизведении этого файлового компонента нужно использовать только клиентские компоненты, а не компоненты сервера.
Я буду задавать 1 за правильный ответ, 0 за частично правильный ответ и -2 за неправильный ответ.
Моделирование с температурой 0.7
Правильные ответы:
Частично правильный ответ:
Неверный ответ:
Вы могли заметить, что модель все еще может галлюцинироваться при высоких температурах. Посмотрите на ответ «Next.js 13 был выпущен в ноябре 2020 года».
После анализа двух разных температурных циклов становится понятно: если мы хотим, чтобы ассистент был более точным, нам нужно снизить температуру. Поэтому мы будем использовать температуру 0,3 для всех последующих тестов и сохраним оценку отслеживания 10/12. Также рекомендуется установить температуру на 0.3, чтобы сделать результаты более стабильными и получить возможность воспроизводить входящие данные.
Набор 2. Нерелевантные вопросы
Мы научили нашу модель отвечать только на технические вопросы JavaScript, Next.js и React.
Правильные ответы:
Частично правильный ответ:
Неверный ответ:
npm run generate — это генератор случайного числа в диапазоне от 1 до 10.
В основном модель работает хорошо, но иногда галлюцинирует. Оценка 4/10. Здесь результат гораздо хуже, чем с правильными вопросами.
Набор 3. Неправильные запросы
Мы научили модель отвечать на вопросы. Но что произойдет, если ввести что-нибудь нелепое? Сейчас взглянем.
Конечный счет -11/14, всего 0/14. Когда мы неправильно формулируем вопросы, эта модель совершенно ужасна.
OpenAI Evals
Компания OpenAI создала OpenAI Evals — программную структуру с открытым исходным кодом, которая облегчает создание и выполнение тестов для оценки моделей и анализа их эффективности по образцу. OpenAI использует Evals для управления разработкой своих моделей путем обнаружения слабых мест и предотвращения регрессии. В свою очередь мы можем использовать Evals для мониторинга эффективности версий модели и развития интеграций продуктов.
OpenAI Evals работает не только с моделями чата, но поскольку именно на таких моделях сосредоточены OpenAI, набор данных для оценки нужно готовить в формате чата. Для управления параметрами модели можно использовать --modelspec_extra_options в инструменте CLI oaieval. Попытайтесь установить температуру на 0, чтобы получить предполагаемые результаты.
Последующие этапы fine-tuning
В основе хорошо функционирующей и надежной модели всегда лежат данные. Само собой разумеется, что наша модель QA-бота для фреймворка Next.js 13 еще не готова к выпуску. Нам нужно увеличить набор данных и лучше научить модель отвечать на нерелавантные вопросы, опять же используя больше образцов. Мы должны создать реестр Eval и следить за тем, как хорошо работает наша модель. Кроме того, мы также можем научить нашу модель обрабатывать входящие данные в формате, отличном от вопросов. Если мы будем готовить ее к выпуску, наш набор данных в идеале должен иметь несколько репозиториев образцов кода. Эта деятельность занимает около 60% всего процесса fine-tuning.
Кроме того, нам может понадобиться больше RLHF, чтобы научить модель должным образом отвечать на определенные вопросы.
Преимущество моделей из fine-tuning состоит в том, что их можно постоянно усовершенствовать. Хотя следует отметить, что fine-tuning может повлиять на результаты, настроенные ранее, поэтому для него всегда должна быть веская причина (что, однако, уменьшает стоимость и продолжительность обучения).
Наконец мы должны помнить, что работаем с уже обученной моделью, а возможности доучебы такой модели относительно ограничены. Если наша предметная область не очень знакома с базовой моделью GPT, желательно внедрять контекст в определенной форме, поскольку метод fine-tuning может быть недостаточным или даже неэффективным.
Вывод
Fine-tuning отлично подходит для относительно простых задач классификации.
Сначала попробуйте использовать меньшие модели, например ada. Они выполняют запросы быстрее, стабильнее, быстрее учатся и дешевле.
Не стройте огромные модели. Если ваш набор данных «велик» и его можно разделить на части, сделайте это и учите модель на меньших наборах.
УЧАСТЬ В АЗАРТНИХ ІГРАХ МОЖЕ ВИКЛИКАТИ ІГРОВУ ЗАЛЕЖНІСТЬ. ДОТРИМУЙТЕСЯ ПРАВИЛ (ПРИНЦИПІВ) ВІДПОВІДАЛЬНОЇ ГРИ.
Ліцензія видана ТОВ "СЛОТС Ю.ЕЙ." на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 15.09.23 (рішення КРАІЛ №245 від 31.08.2023); ТОВ "СЛОТС Ю.ЕЙ." – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 26.04.2021 (рішення КРАІЛ №150 від 12.04.2021); ТОВ «СПЕЙСИКС» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 08.02.2021 (рішення КРАІЛ №34 від 02.02.2021); ТОВ «ГЕЙМДЕВ» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 16.02.2021 (рішення № 47 від 10.02.2021).
Молчаливый копирайтер и дефицит «печенек». Украинский стартап знает, как будет выглядеть реклама в Facebook в будущем
CEO и фаундер Signum.AI Артем Гладких объявил в сентябре об официальном запуске решения по генерации рекламных постов для Facebook на базе одной из самых мощных на сегодня генеративных нейронных сетей — GPT-3. Последняя является детищем компании Open AI, которую запускали при участиии Илона Маска.
Хотите сообщить важную новость? Пишите в Telegram-бот
Главные события и полезные ссылки в нашем Telegram-канале