Использование хорошо зарекомендовавших себя алгоритмов и моделей для получения полезных результатов при тематическом моделировании никогда не было таким простым
Тематическое моделирование не всегда было таким простым. Не так давно распространенным методом тематического моделирования было скрытое распределение Дирихле (LDA). Используя LDA с Gensim просто кодировать, но результаты ... Мне часто не удавалось получить какую-либо полезную информацию. Поэтому меня впечатлило, когда я изучал использование модуля Top2Vec и обнаружил, что он настолько прост в использовании, а результаты настолько полезны.
Выпущенный в марте 2020 года, Top2Vec создан Димо Ангелов, а его статья опубликована на ArXiv в августе 2020 года. Несмотря на то, что они новые, алгоритмы, используемые Top2Vec, хорошо зарекомендовали себя - Doc2Vec, UMAP, HDBSCAN. Он также поддерживает использование таких моделей встраивания, как универсальный кодировщик предложений и BERT.
В этой статье мы рассмотрим высокоуровневую работу Top2Vec и проиллюстрируем использование Top2Vec посредством тематического моделирования отзывов об отелях. Вы можете представить, что это будет полезно для руководства отеля, организовав обзоры для понимания ключевых аспектов обратной связи с клиентами, и, разумеется, это можно применить и к другим видам обзоров.
Как работает Top2Vec
Top2Vec автоматически определяет темы, присутствующие в тексте, и не требует традиционной предварительной обработки текста, такой как удаление стоп-слов, выделение корней или лемматизация.
Top2Vec предприняла три ключевых шага.
1. Преобразуйте документы в числовые представления.
Имея список документов, Top2Vec преобразует каждый документ в числовое представление (или вектор документа) с помощью Doc2Vec или предварительно обученной модели. Точно так же каждое уникальное слово также будет иметь числовое представление (вектор слов).
Числовые представления создаются таким образом, что семантическое содержимое документов фиксируется, а похожие документы и слова будут близки друг к другу. В приведенном ниже примере мы видим, что документы (синие точки) и слова (зеленые точки), относящиеся к уборной, расположены близко друг к другу, а документы, относящиеся к парковке, собраны вместе.
2. Снижение размерности
С числовыми представлениями мы могли бы приступить к группированию документов, чтобы найти темы, но векторы документов в многомерном пространстве, как правило, разрежены. Таким образом, уменьшение размерности выполняется с помощью UMAP (Uniform Manifold Approximation and Projection), чтобы помочь найти плотные области. В статье автор находит 5 измерений,
которые дают наилучшие результаты для последующей задачи кластеризации.
3. Группирование документов для поиска тем
После сжатия числовых представлений в пространство более низкой размерности мы теперь готовы находить плотные области документов с помощью HDBSCAN (пространственная кластеризация приложений с шумом на основе иерархической плотности).
На диаграмме ниже каждая точка представляет документ, а плотные области документов окрашены, причем каждая область представляет тему. Серые точки - это выбросы, не принадлежащие ни к какому кластеру.
Для каждой плотной области затем получается числовое представление темы (вектор темы) путем взятия среднего арифметического всех векторов документов в одном кластере. И, наконец, каждому документу присваивается номер темы на основе ближайшего вектора темы к вектору его документа.
Теперь, когда мы лучше понимаем Top2Vec, мы готовы погрузиться в наш пример отзывов об отелях.
Данные
Набор данных, который мы используем, можно загрузить с сайта Kaggle и содержит 515 000 отзывов клиентов о роскошных отелях по всей Европе.
Он содержит различные столбцы, но на нашей иллюстрации мы будем использовать только один столбец - Negative_Review.
Пример Negative_Review:
Room was not cleaned correctly Wine Champagne glasses left dirty in the room the floors felt dirty and the shower drain was clogged From the day we arrived
Код
После некоторой очистки данных мы готовы передать наш список обзоров в Top2Vec.
Код для запуска моделирования выглядит следующим образом, где hotel_reviews - наши данные.
model = Top2Vec(documents=hotel_reviews)
Вот и все! Эта единственная строка кода будет предварительно обрабатывать документы для обучения, создавать векторы документов и слов с помощью Doc2Vec, выполнять уменьшение размерности векторов и, наконец, находить темы с помощью кластеризации.
Чтобы вместо этого использовать предварительно обученные модели, нам просто нужно добавить параметр embedding_model.
model = Top2Vec(documents=hotel_reviews, embedding_model='distiluse-base-multilingual-cased')
В нашем случае мы экспериментировали с Doc2Vec и другими предварительно обученными моделями для создания векторов документов и обнаружили, что предварительно обученная модель «distiluse-base-многоязычный корпус» лучше всего подходит для нашего примера.
Оценка результатов
Теперь мы готовы интерпретировать темы. Top2Vec имеет методы, которые упрощают оценку, создавая облака слов и извлекая наиболее похожие документы по каждой теме.
Давайте посмотрим на наши 3 самые популярные темы.
Из словесных облаков и примеров отзывов мы можем однозначно сделать вывод, что тема 1 связана с плохими туалетами, тема 2 связана с маленькими комнатами, а тема 3 - это жалобы по вопросам парковки.
Все эти результаты были получены без указания компьютеру тем, которые нужно искать, и с использованием всего нескольких строк кода. Власть! 💪
Если вы хотите попробовать это самостоятельно, наш пример записной книжки можно найти здесь для справки.
На примере отзывов об отелях мы надеемся, что теперь в вашем арсенале машинного обучения появился еще один инструмент для моделирования тем. Интересно, что я читал случаи, когда методология, аналогичная методике Top2Vec, распространяется на сегментацию клиентов, при этом основные отличия заключаются в том, что каждое «слово» является идентификатором розничного продавца, а каждый «документ» показывает последовательность идентификаторов розничных продавцов, посещенных покупателем. Идея для следующего проекта 😉.
Спасибо за чтение, и я надеюсь, что статья была полезной :) Пожалуйста, не стесняйтесь комментировать любые вопросы или предложения, которые могут у вас возникнуть.