В этом сообщении блога я попытаюсь проиллюстрировать использование метода «обучения в контексте» для создания специализированного чат-бота, который подходит для конкретного случая использования — в качестве помощника по хронометражу, который может давать ответы, подобные человеческим. Я буду использовать недавно выпущенный API языковой модели gpt-3.5-turbo (или GPT3.5). Эта модель используется для ChatGPT, поэтому в этом посте я буду называть ее ChatGPT или GPT3.5. Это означает то же самое.

Что такое «обучение в контексте», согласно ChatGPT:

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

Что просто говорит окольными путями, что мы предоставим ChatGPT некоторую контекстную информацию, прежде чем зададим ему наш вопрос.

Проиллюстрировать:

Вы спросите, какой смысл задавать ChatGPT вопросы, на которые уже есть ответ?

Вот где вступает в действие «обучение в контексте». С помощью этого метода у нас будет наш чат-бот на основе ChatGPT, выдающий правильные ответы на вопросы пользователей, даже если ответы на эти вопросы не были включены в обучающие данные чат-ботов / ChatGPT. То есть мы будем использовать наши собственные данные в качестве «контекстной информации», а чат-бот выдаст их в качестве ответа.

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

Откуда мы получаем контекстную информацию и как чат-бот узнает, какую контекстную информацию отправлять на основании вопросов пользователя?

Мы создадим «указатель», который будет содержать наши собственные данные, в данном случае руководства пользователя по использованию портала хронометража. Каждый раз, когда пользователь задает вопрос нашему чат-боту, чат-бот будет обращаться к этому индексу, искать соответствующую информацию, которая, по мнению чат-бота, поможет ответить на вопрос пользователя, а затем отправлять эту информацию вместе с вопросом пользователя в ChatGPT, чтобы запросить его для ответ.

Думайте об индексе как о репозитории, куда мы выгружаем все эти файлы, преобразуем их в текст и размещаем указатель на то, где они расположены. Например, попав в указатель, текст сортируется по словам, начинающимся с буквы А, буквы Б и так далее. Поэтому, когда наш чат-бот ищет в индексе слова, начинающиеся с буквы F (потому что это то, что нужно нашему пользователю), он переходит прямо к проиндексированным словам, начинающимся с буквы F, и ищет там — вместо того, чтобы искать во всем репозитории (начиная с A до З).

Продолжая наш пример, наш пользователь заблокировал свою учетную запись на портале хронометража и отправил указанное ниже приглашение в наш чат-бот, чтобы попросить о помощи:

Фактическое приглашение, которое отправляется в ChatGPT, когда пользователь нажимает кнопку «Отправить»:

Вы можете создать свой индекс, используя текстовые активы, которые хранятся в любом формате — текстовые файлы, MS Word, PDF, PPT и т. д. В Python, а также в модуле индекса есть инструменты для анализа этих типов документов и сохранения их в индексе. . GPT Index, используемый здесь модуль создания индекса, также предоставляет готовые коннекторы данных для других сервисов, откуда могут поступать эти текстовые активы. Эти активы должны быть сводом знаний, связанных с тем, в чем ваш чат-бот должен быть осведомлен.

Чтобы взаимодействие нашего пользователя с данными из этого индекса было пронизано «человеческим прикосновением», нам требуются услуги ChatGPT.

Веселая часть:

При некоторой быстрой инженерии мы попросим бота отыграть роль помощника хронометриста,

Поэтому он может игнорировать вопросы, не связанные с его ролью.

Вы можете задавать ему вопросы на тагальском (или другом языке).

Суть:

-Вы можете пропустить эту часть, если вас не интересуют технические детали-

Как это работает внутри?

Когда пользователь нажимает кнопку отправки, то, что пользователь ввел в поле вопроса чат-бота (input_text) и приглашение, то есть «роль», которую вы назначили своему чат-боту (ассистент хронометража), используется для запроса индекса. Этот запрос запроса ищет в индексе то, что он считает наиболее релевантными данными в индексе, соответствующем входным данным. Во вводе «мой пароль заблокирован» индексный запрос вывел инструкции о том, как разблокировать пароль пользователя.

Индекс взаимодействует с API завершения OpenAI через класс LLMPredictor модуля создания индекса, gpt_index или LlamaIndex.

Векторизация и встраивание

На этапе создания индекса были затронуты некоторые очень сложные темы обработки естественного языка (NLP), которые заняли у меня несколько дней, чтобы продвинуться вперед. Считай себя предупрежденным.

Векторизация в самом сокращенном смысле — это просто преобразование числовых представлений в слово. Например, слово «яблоко» может иметь векторное значение [1, 0, 0, 0, 0] в словаре слов модели. Языковые модели (и компьютеры в целом) могут обрабатывать числа более оптимально и эффективно по сравнению с использованием операций сопоставления строк и подстрок или операций сравнения текста. Например, если пользователь спросил о «apple», ChatGPT сможет идентифицировать его по его словарю по его векторному значению вместо того, чтобы путать его, например, со словом «ample', значение вектора которого равно [0, 1, 0, 0, 0].

Что такое вложения?

Когда мы присваивали векторное значение [1, 0, 0, 0, 0] слову 'яблоко', мы использовали простейший тип векторизации, называемый один горячий кодирование. Если бы ChatGPT действительно использовал этот метод для векторизации, слово яблоко имело бы векторное значение, подобное [1, 0, 0, 0 ,0…n], где n — количество слов в словаре ChatGPT, которое, по словам этих ребят, составляет около 14,7 миллионов слов. Таким образом, векторное значение слова яблоко (и всех слов в словаре модели) будет списком, содержащим число 1, за которым следуют 14,7 миллионов 0! Это будет очень дорого в вычислительном отношении для обработки. Это называется размерностью вектора, т. е. количеством элементов, используемых для определения вектора.

На самом деле модели используют значительно меньшие размеры, чем это. Я пока не могу найти информацию о ChatGPT и GPT4, но судя по этой статье, их самая мощная модель GPT3 — davinci имеет размерность 12 288.

Они могут сделать это с помощью метода векторизации, называемого встраиванием. Они обучили модель встраивания на больших объемах текстовых данных, чтобы идентифицировать закономерности в словах и их совместное использование в реальном мире. Затем во время процесса внедрения модель внедрения присваивает значения словам в словаре языковой модели с использованием плотных векторов, то есть с использованием элементов, которые не равны нулю (в отличие от двоичной категоризации 1 и множества нулей, используемой в одном методе горячего кодирования) и в меньших размерах (макс. 12 288). Эти значения фиксируют семантические отношения между словами, а это означает, что похожие или связанные слова будут иметь близкие или похожие векторные представления с точки зрения векторных значений.

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

  • король: [0,8, 0,2, 0,3]
  • ферзь: [0,82, 0,18, 0,32]
  • королевский: [0,75, 0,25, 0,35]

А вот векторное значение слова «яблоко».

  • яблоко: [0,1, 0,9, 0,05]

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

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

Фух.

Таким образом, чтобы связать это с этапом создания индекса, после создания индекса текстовый корпус векторизуется с помощью службы встраивания OpenAI перед выводом в виде индексного json-файла в вашем каталоге проекта.

-Конец технического материала-

Подводя итог, с учетом нашего примера пользователя, который заблокировал свою учетную запись пользователя портала хронометража, окончательное приглашение или вопрос, который будет отправлен в ChatGPT API, будет выглядеть примерно так:

С помощью этой очень простой иллюстрации, я уверен, вы уже видите потенциал этого инструмента — например, вы можете поместить корпус текстовых данных о продуктах или услугах вашей компании, таких как официальная документация, журналы поддержки чата, электронные письма и другие органически сгенерированные данные из процессы поддержки клиентов/техподдержки в индексе. Вы можете использовать этот индекс для создания чат-бота поддержки клиентов для конкретного продукта/услуги. GPT3.5 поддерживает тагальский (и другие языки) помимо английского, поэтому данные на этих языках также могут быть добавлены в индекс. Индекс будет храниться на серверах компании, к которым может получить доступ чат-бот.

GPT3.5 принимает только текстовые подсказки или вводимые данные, однако в качестве обходного пути есть несколько инструментов, которые могут создавать «текстовое описание» — хотя и не очень эффективно — файлов изображений, встроенных в ваш PDF, файлы Word и т. д., во время анализа. Когда GPT4 станет доступен через API, мы сможем рассмотреть возможность добавления изображений и видео (?) в наш индекс, поскольку он поддерживает ввод изображений. В будущих версиях, возможно, мы увидим поддержку ввода для аудиофайлов, таких как журналы голосовых вызовов, и добавим их в индекс. Или, тем временем, используйте возможности преобразования речи в текст Whisper API, чтобы преобразовать его в текстовый формат, который мы можем сохранить в индексе.

Несмотря на то, что некоторый уровень данных будет доступен извне при использовании API, использование подхода «обучения в контексте» намного лучше, чем использование ваших собственных данных для обучения языковых моделей, поскольку это означало бы массовое хранение данных в серверы поставщиков, таких как OpenAI.

Если вам это нужно, вы можете сделать это через их сервис под названием тонкая настройка, где вы можете добавить свои собственные тренировочные данные в базовую модель и создать пользовательскую копию (например, gpt-3.5-turbo-testcompany ) для вашего исключительного использования.

Не очень веселая часть:

Расходы

Использование API-интерфейсов OpenAI LLM — это услуга с оплатой по мере использования, и ставка варьируется в зависимости от того, какую модель вы будете использовать. В нашем примере мы используем модель ChatGPT, также называемую gpt-3.5-turbo, которая является самой последней и лучшей, а также, кстати, самой дешевой. Есть GPT-4, но он еще не опубликован, есть ограничение на количество запросов, которые вы можете отправить, и есть список ожидания для доступа к его API.

Единица использования называется токеном. Нет простого способа объяснить, что такое токен, поэтому я просто дам ссылку на эту статью.

Я попросил ChatGPT оценить стоимость простого обмена вопросами и ответами с использованием нашего чат-бота.

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

Процесс векторизации на этапе создания индекса использует API встраивания OpenAI, а также использует токены. Создание индекса — это одноразовая вещь (теоретически), поэтому это единовременная стоимость.

Конфиденциальность и безопасность данных

Данные, используемые через API, такие как вопросы, переданные чат-боту, и ответы, полученные чат-ботом (то, что Open AI называет подсказками и завершениями соответственно), будут храниться на их серверах. в течение 30 дней до очистки. В соответствии с их политикой только ограниченное число сотрудников самой OpenAI — только те сотрудники, которые отслеживают его на предмет злоупотреблений — будут иметь доступ к данным. Для корпоративных клиентов у них может быть даже возможность полностью отказаться от хранения своих данных. Прочитайте их полную политику использования данных здесь.

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

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

И это все, что у меня есть. Спасибо за прочтение.

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

Источники/Вдохновение:

https://beebom.com/how-train-ai-chatbot-custom-knowledge-base-chatgpt-api/ — для кода пользовательского интерфейса

https://www.youtube.com/watch?v=EE1Y2enHrcU&ab_channel=ThuVudataanalytics