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

Предупреждение:

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

Алгоритм:

Одним из популярных алгоритмов для моделирования тем является LDA (латентное распределение Дирихле). Дирихле — имя человека, создавшего распределение Дирихле, но этот алгоритм создан не им. Название было дано потому, что LDA использует распределение Дирихле под капотом для поиска тем из корпусов текстов.

Реализация:

Мы собираемся использовать python для поиска скрытых тем из набора данных отзывов, найденного на kaggle. Он содержит отзывы клиентов об отелях. Сначала загрузите набор данных и посмотрите.

Мы собираемся использовать столбец «Positive_Review» из этого набора данных, для вашего случая вы можете взять любой набор данных и столбец, содержащий статьи. Теперь импортируйте CountVectorizer из sklearn и создайте его экземпляр. Параметр max_df означает, что мы игнорируем слова, содержащиеся в 90% статей. Другой параметр min_df означает, что слово должно присутствовать как минимум в 2-х статьях для его векторизации. Это полезно для игнорирования орфографических ошибок и других ошибок. dropna не требуется в приведенном ниже случае.

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

Поздравляем! вы обучили модель.

Примечание.

n_components =› количество кластеров, которые вы хотите сформировать для своих статей. Это зависит от ваших собственных вариантов использования. Если кластеры перекрываются, сделайте больше кластеров, если он распространяется, сделайте меньше.

random_state =›Просто чтобы ваши и мои результаты совпадали.

Теперь пришло время увидеть результаты.

Как видите, в теме 0 речь идет о номерах и образе жизни, в теме 1 — об удобстве отелей, в теме 2 — о расположении отеля и так далее.

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

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

Если вам понравился этот пост, не забудьте поставить аплодисменты и подпишитесь на меня на канале и в твиттере.