Применение больших языковых моделей

May 02 2023
Введение
OpenAI ChatGPT покорил мир. Беспрецедентная скорость принятия пользователями соответствовала беспрецедентным экспериментам с его API сообществом разработчиков.

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

Разработка новых больших языковых моделей (LLM) также значительно ускорилась. Новые модели анонсируются фирмами или выпускаются с открытым исходным кодом. Многие проекты с открытым исходным кодом были доступны или запущены для решения различных аспектов постановки задачи, от обучения пользовательских моделей до тонкой настройки, корпуса данных и т. д.

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

Таким образом, мы видим, что весь ландшафт развивается чрезвычайно быстрыми темпами. На самом деле такие фреймворки, как LangChain, выпускают минорный релиз каждые пару дней.

Применение OpenAI

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

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

  • Подведение итогов
  • Обогащение контента
  • Создание заголовка
  • Перефразирование
  • Создание нескольких форматов, таких как краткая форма, твиты, точки презентации и т. д.

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

Другими вариантами использования, в которых используются присущие LLM знания, являются:

  • Генерация контента викторины
  • Опросы или опросный лист.

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

Общее решение включает создание подсказки в следующем общем формате:

Контекст:

Долина Зиро в Аруначал-Прадеше является домом для племени апатани и известна своими живописными видами на долину. Зиро находится примерно в 167 км от столицы Итанагара, и дорога к нему — одна из самых живописных в Аруначал-Прадеше. Долина окружена густым зеленым лесом и террасными фермами, которые выглядят потрясающе в любое время года. Глядя на нежные ручейки, журчащие вдали у обочины, в Зиро проникаешься ощущением умиротворения. Неудивительно, что долина является одним из самых посещаемых мест в Аруначал-Прадеше.

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

Инструкции подсказки: ответьте на приведенный ниже вопрос 100 словами из приведенного выше контекста.

Вопрос: Как далеко Зиро от столицы?

Отвечать:

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

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

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

Сейчас это в первую очередь проблема поиска. Контент можно разбить на фрагменты и проиндексировать. Для этого можно использовать базу данных векторов, такую ​​как Pinecone или Milvus. Контент векторизуется и сохраняется в базе данных. Когда пользователь задает вопрос, просто векторизуйте запрос и выполните поиск по сходству, чтобы получить соответствующие фрагменты.

Умный поиск свободного текста

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

Здесь можно использовать языковые возможности LLM для разбора искомого текста и определения параметров поиска.

Общее решение включает создание подсказки в следующем общем формате:

Инструкции подсказки: разберите предоставленный входной запрос в следующий формат JSON».

Формат JSON:

{"place": "Место, которое вы посещаете. Обязательный», «checkInDate»: «Дата заезда для бронирования. Обязательный. Формат дд/мм/гггг», «checkOutDate» : «Дата выезда для бронирования. Обязательный. Регистрация по умолчанию плюс 2 дня. Формат дд/мм/гггг», «minimumRating»: «Минимальный рейтинг, необходимый для отеля. Опционально», «maximumPricePerNight»: «Максимальная цена за ночь, которую человек готов заплатить. Необязательный" }

Примеры:

Вопрос: Ищем номера с 23 по 28 июля в Шимле с рейтингом 4 и выше.

Ответ: {«место»: «Шимла», «checkInDate»: «23.07.2023», «checkOutDate»: «28.07.2023», «минимальный рейтинг»: «4»}

Вопрос: Ищем номера с 15 августа на 3 дня в Дарджилинге.

Ответ: {"место": "Дарджилинг", "checkInDate": "15/08/2023", "checkOutDate": "17/08/2023"}

Вопрос: Еду в отпуск в Пондишери на 5 дней с 3 сентября.

Отвечать:

В этом случае мы использовали возможность LLM под названием Zero Shot Learning. Помимо инструкций, мы также дали несколько примеров, чтобы показать ожидаемый результат для набора вопросов. LLM продемонстрировали большие возможности в тонкой настройке своего поведения, обучаясь на небольшом наборе образцов.

LLM будет анализировать пользовательский запрос и предоставлять JSON в фиксированном формате. Затем то же самое можно просто использовать для включения фактической функции поиска.

В этом случае LLM, по сути, представляет собой интеллектуальный анализатор текста.

Бот поддержки

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

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

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

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

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

Таким образом, общее решение включает в себя:

  • Определение намерения: запрос корпуса или запрос бронирования
  • Обработка запроса корпуса
  • Поиск корпуса
  • Определение релевантных фрагментов
  • Вызов LLM с передачей соответствующих фрагментов и пользовательского запроса.
  • Обработка запроса на бронирование
  • Вызов LLM для определения типа и параметров
  • Разобрать ответ LLM в формате JSON.
  • Вызов соответствующих функций.
  • Рис. 1. Бот поддержки приложения для путешествий.

LLM действительно сталкивается с некоторыми проблемами, с которыми приходится работать.

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

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

Время отклика API OpenAI очень чувствительно по своей природе. Они варьируются от 2 до 12 секунд. Многое зависит от количества задействованного контента. Например, отправка большого контекста и ожидание подробного ответа на запрос потребовали бы больших вычислений для LLM, поэтому время ответа было бы выше. Некоторые из них могут быть обработаны с точки зрения восприятия путем перехода к потоковым API, но это по-прежнему будет означать, что окончательный ответ будет получен после относительно большого времени по сравнению с традиционным SLA времени отклика API.

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

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