🤖📄 ChatGPT: эффективная суммаризация с помощью LLM
В этой статье разберём суммаризацию с помощью LLM на примере обработки отзывов в e-commerce.
Думали ли вы когда-нибудь о важности стандартизации и сжатия текстовых данных? Добро пожаловать в мир агентов суммаризации!
Агенты суммаризации незаметно влились в нашу жизнь, сжимая информацию и предоставляя быстрый доступ к нужному контенту во множестве программ и платформ.
В этой статье мы узнаем о применении ChatGPT в качестве мощного агента суммаризации для наших приложений. Благодаря умению LLM обрабатывать и понимать текст, они могут помочь в чтении текстов, генерации верных аннотаций либо стандартизации информации. Тем не менее важно понимать, как воспользоваться их потенциалом и знать об их лимитах.
Каково главное ограничение суммаризации? LLM часто не справляются со следованием определённому лимиту символов или слов при написании аннотаций.
Давайте изучим лучшие практики генерации аннотаций с помощью ChatGPT для нашего приложения, а также узнаем, почему существуют эти ограничения и как их преодолеть.
Эффективная суммаризация с ChatGPT
Агенты суммаризации используются по всему интернету. Так, веб-сайты используют их для написания точных содержаний статей, позволяя пользователям получить краткую сводку новостей без прочтения всего текста. Это же делают соцсети и поисковые системы.
Начиная с RSS-агрегаторов и соцсетей и заканчивая сайтами электронной коммерции, агенты суммаризации прочно укрепились в нашем цифровом ландшафте. С продвижением LLM некоторые из этих агентов начали использовать ИИ, чтобы сделать суммаризацию более эффективной.
ChatGPT может здорово помочь во время создания приложения с использованием агентов суммаризации, ускоряя чтение и классификацию текстов. Представьте, что у нас есть бизнес в сфере электронной коммерции, и мы хотим обрабатывать все пользовательские отзывы. ChatGPT может помочь с суммаризацией любого отзыва в паре предложений, его приведением к одному формату, определением его тона и соответствующей классификацией.
Конечно, можно просто дать ChatGPT какой-либо отзыв, но существует список лучших практик — как и худших — для более эффективного его применения.
Пример: отзывы в электронной коммерции
Представьте вышеуказанный пример, где мы хотим обработать все отзывы на заданный продукт из нашего онлайн-магазина. Пусть это будет наш лучший товар: первый детский компьютер!
В этом случае мы бы хотели, чтобы ChatGPT:
- отнёс отзыв к положительным или отрицательным;
- дал аннотацию отзыва в 20 словах;
- дал ответ с определённой структурой, чтобы привести все отзывы к одному формату.
Примечания по реализации
Ниже представлена базовая структура кода, который можно использовать для дачи ChatGPT запроса из нашего приложения. Я также предоставляю ссылку на Jupyter Notebook со всеми используемыми в этой статье примерами.
Функция get_completion()
вызывает API ChatGPT с помощью данного запроса. Если в запросе есть дополнительный пользовательский текст наподобие самого отзыва, он отделяется от остального кода тройными кавычками.
Используем функцию get_completion()
для отправки запроса ChatGPT.
Приведём запрос, выполняющий вышеуказанные условия:
Вот ответ от ChatGPT:
Как можно заметить из вывода, отзыв точен и хорошо структурирован, но в нём нет некоторой информации, в которой мы были бы заинтересованы, будучи владельцами онлайн-магазина, например, информации о доставке продукции.
Summarize с фокусом на <Shipping and Delivery>
Мы можем итеративно улучшить наш запрос, попросив ChatGPT сфокусироваться на конкретных вещах при написании аннотации. В этом случае нас интересуют любые детали перевозки и доставки:
Теперь ответ ChatGPT выглядит так:
Так отзыв более полон. Предоставление деталей о том, на чём стоит фокусироваться в оригинальном отзыве, очень важно, если мы хотим избежать потери важной для нас информации.
Заметили ли вы, что, хотя вторая попытка включает в себя информацию о доставке, в ней отсутствует один негативный аспект оригинального отзыва?
Исправим это!
Extract вместо Summarize
Изучая задачи по суммаризации, я узнала, что для LLM суммаризация может представлять трудности, если пользовательский запрос недостаточно точен.
При запросе от ChatGPT аннотации предложенного текста он может пропустить важную информацию — что с нами и случилось — или придавать одинаковое значение всем темам в тексте, давая обзор только основных моментов.
Эксперты в области LLM при решении подобных задач вместо summarize используют термин extract и дополнительную информацию о том, на чём фокусироваться.
Суммаризация нацелена на предоставление краткого обзора главных пунктов текста, включая темы, не связанные с тем, на чём фокусируется запрос. В то же время извлечение информации (information extraction) фокусируется на получении определённых деталей и может дать нам именно то, что нужно.
В этом случае, используя извлечение, мы получаем только информацию о нашей приоритетной теме: Shipping: Arrived a day earlier than expected.
Автоматизация
Эта система работает только для одного отзыва. Тем не менее при проектировании запроса для определённых нужд важно проводить тесты на наборе примеров, чтобы выловить в модели любые выбросы или аномалии.
В случае обработки нескольких отзывов посмотрим на примерную структуру кода на Python.
Вот аннотации для нашего набора отзывов:
Это несоответствие в подсчёте слов происходит потому, что у LLM нет чёткого понимания подсчёта слов или символов. Причиной этого является один из главных компонентов их архитектуры: токенизатор.
Токенизатор
LLM наподобие ChatGPT предназначены для генерации текста на основе статистических моделей, извлечённых из огромного количества языковых данных. Они крайне эффективно генерируют беглый и связный текст, но у них нет чёткого контроля над количеством слов.
В примерах выше, когда мы давали инструкцию на очень чёткое количество слов, ChatGPT имел трудности с выполнением этого требования. Вместо этого он выдавал текст, который был короче заданного числа слов.
В других случаях он может генерировать более длинный текст, или просто текст слишком подробный или поверхностный. Кроме того, ChatGPT может отдавать предпочтение другим факторам, таким как связность и актуальность, вместо точного следования ограничению слов. Это может вылиться в текст, качественный с точки зрения содержания и связности, но не подходящий с точки зрения количества слов.
Токенизатор — это ключевой элемент архитектуры ChatGPT, который явно влияет на количество слов в сгенерированном выводе.
Архитектура токенизатора
Токенизатор — первый шаг в процессе генерации текста. Он отвечает за разделение текста, который мы даём ChatGPT, на отдельные элементы (токены), впоследствии обрабатываемые языковой моделью.
Когда токенизатор разделяет часть текста на токены, он руководствуется набором правил, предназначенных для определения значимых единиц заданного языка. Тем не менее эти правила не всегда идеальны, и могут быть случаи, когда токенизатор разделяет или соединяет токены так, что затрагивается общее число слов в тексте.
Например, посмотрите на предложение: «I want to eat a peanut butter sandwich». Если токенизатор настроен на разделение токенов на основе пробелов и пунктуации, он может разделить данное предложение на следующие токены с общим числом слов равным восьми, что совпадает с числом токенов.
Однако, если токенизатор настроен на обращение с «peanut butter», как с составным словом, он может разбить предложение на следующие токены, где общее число слов равно восьми, а число токенов — семи.
Таким образом, конфигурация токенизатора может повлиять на общее число слов в тексте, и это может отразиться на способности LLM следовать инструкциям по точному числу слов. Несмотря на то что некоторые токенизаторы позволяют кастомизировать то, как они токенизируют текст, этого не всегда достаточно для гарантии выполнения конкретных требований по количеству слов. В нашем случае мы не можем контролировать эту часть архитектуры ChatGPT.
Это делает ChatGPT не лучшим выбором для использования ограничений по символам либо словам, но можно попробовать ограничить число предложений, так как токенизатор влияет не на число предложений, а на их длину.
Понимание этих ограничений поможет создать наиболее подходящий для ваших нужд запрос. Учитывая всё вышесказанное, сделаем последнюю итерацию с нашим запросом.
В завершение: отзывы в электронной коммерции
Для лучшего вида запросим результаты в формате HTML:
Вот последний вывод от ChatGPT:
Итог
В этой статье мы обсудили лучшие практики использования ChatGPT в качестве агента суммаризации для нашего приложения.
Мы увидели, что во время проектирования приложения очень сложно с первого раза придумать запрос, который идеально подойдёт всем требованиям. Главное — думайте о создании запросов как об итеративном процессе, где вы улучшаете и моделируете свой запрос, пока не получите желаемый результат.
Итеративно совершенствуя ваш запрос и применяя его к набору примеров, прежде чем внедрять его, вы можете убедиться, что выводы согласуются между собой и покрывают выбросы. В нашем примере может случиться так, что кто-то даст случайный текст вместо отзыва. Можно дать ChatGPT распоряжение иметь стандартизированный вывод для исключения всех выбросов.
Кроме того, во время использования ChatGPT неплохо было бы изучить все плюсы и минусы использования LLM для выбранной цели. Так мы обнаружили, что извлечение лучше суммаризации в плане получения аннотации текста, похожей на человеческую речь. Мы также установили, что предоставление фокуса аннотации может разительно изменить генерируемый материал.
Наконец, хотя LLM крайне эффективны в генерации текста, они не идеальны в плане следования чётким инструкциям относительно количества слов или другим ограничениям формата. Для достижения этой цели возможно будет необходимо остановиться на количестве предложений или на других методах и инструментах, таких как ручное редактирование или более специализированное ПО.