Как стать автором
Обновить

Как анализировать тысячи отзывов с ChatGPT? Частые ошибки и пример на реальных данных

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров6.9K
Всего голосов 20: ↑19 и ↓1+19
Комментарии12

Комментарии 12

Почему не показать чатугпт каждый отзыв отдельно +таблицу для классификации или что там по инструкции.

Верно, по сути это мы в итоге и делаем.

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

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

Хорошая статья, спасибо!

Хотел добавить, что бОльшая часть этого функционала есть в пакете BERTopic

Кстати, а вы не обрабатывали ситуацию, когда в одном отзыве описано несколько проблем?

Спасибо! Посмотрел BERTopic, выглядит действительно удобно!

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

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

Огромное спасибо что поделились! Мне ваш материал был интересен! Для тех кто будет глубже копать:

Выбор между использованием модели векторизации текста, такой как text-embedding-3-large, и алгоритмом тематического моделирования, таким как BERTopic, зависит от ваших целей и задач.

text-embedding-3-large

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

  • Универсальность: Подходит для широкого спектра задач NLP.

  • Масштабируемость: Эффективно работает с большими объемами текста.

  • Семантическое понимание: Позволяет оценить близость и сходство текстов на основе их семантики.

BERTopic

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

  • Выделение тем: Автоматически определяет и группирует темы в текстовых данных.

  • Интерпретируемость: Генерирует список ключевых слов для каждой темы, что помогает в понимании контента каждой группы.

  • Глубина анализа: Может выявлять более глубокие и специфические темы в данных за счет контекстного понимания трансформеров.

Выводы

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

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

Отличная статья, спасибо! Использовал подобный подход для анализа выявления общих проблем по инцидентам (сервис).

Подход, когда сначала делается кластеризация, а потом LLM используется для описания кластера действительно имеет массу преимуществ:

  • Позволяет использовать разные подходы для эмбеддингов - можно начинать даже с tf-idf с опциональным понижением размерности и заканчивать LLM.

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

  • Классические методы кластеризации позволяют применять известные методы для поиска оптимального количества кластеров (по "силуэту" например).

  • Можно работать с большими по объему обращениями (один кейс - это переписка), и большими корпусами обращений без опасения перелететь через размер контекста

  • Для описания кластера можно выбирать подмножество кейсов сэмплированием (если кластера и тексты большие). Кстати для k-means можно ограничиваться окрестностью центра кластера, а в методах когда эмбединг допускает обратное преобразование - вообще смотрнть на центр кластера и получать описание в некотором виде (не так здорово, конечно, как вышло бы у LLM)

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

Спасибо за полезные дополнения!

  • Интересно про количество кластеров. Кажется, не очень хорошо, что я просто на глаз их определяю, поэтому мне понравилось про метод "по силуэту", я про него раньше не знал.

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

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

Когда один отзыв может одновременно соответствовать нескольким темам решили не разбирать?

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

Но общий подход все равно такой же должен сработать:

  • Во-первых, в жизни все равно будут какие-то отзывы, которые содержат ровно одну тему. Они выделятся в отдельные кластеры и там мы эту тему поймаем.

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

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

Отличная статья.

В целом после набора датасета задачу можно свести к обучению локальной модели. В качестве ембединга использовать е5, он хорош даже если сравнивать с large.

Локальная модель будет быстрее, если актуально конечно скорость, но самое главное будет работать в закрытом контуре, если важна конфиденциальность.

  1. Какой промпт использовали чтобы выделить тему из кластера?

  2. Пробовали объединить темы Чатгпт? Как выглядел промпт?

  3. Визуализация эмбеддингов какая-то слишком удобная )) На реальных данных кластера также хорошо разделяются?

Оч полезная статья, спасибо!

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории