Анализ большого объема неструктурированных текстовых данных является сложной задачей. Поскольку неструктурированные данные реального мира не имеют маркировки, мы не можем использовать алгоритмы обучения с учителем для создания моделей машинного обучения. Таким образом, тематическое моделирование используется для обнаружения тем из заданного немаркированного текста. Значит, мы хотим найти кластеры из неразмеченного текста.
Предупреждение:
Поскольку мы используем неконтролируемое обучение для поиска тем в нашем тексте, мы не можем оценить точность или эффективность модели машинного обучения, потому что у нас нет правильной метки для начала.
Алгоритм:
Одним из популярных алгоритмов для моделирования тем является LDA (латентное распределение Дирихле). Дирихле — имя человека, создавшего распределение Дирихле, но этот алгоритм создан не им. Название было дано потому, что LDA использует распределение Дирихле под капотом для поиска тем из корпусов текстов.
Реализация:
Мы собираемся использовать python для поиска скрытых тем из набора данных отзывов, найденного на kaggle. Он содержит отзывы клиентов об отелях. Сначала загрузите набор данных и посмотрите.
Мы собираемся использовать столбец «Positive_Review» из этого набора данных, для вашего случая вы можете взять любой набор данных и столбец, содержащий статьи. Теперь импортируйте CountVectorizer из sklearn и создайте его экземпляр. Параметр max_df означает, что мы игнорируем слова, содержащиеся в 90% статей. Другой параметр min_df означает, что слово должно присутствовать как минимум в 2-х статьях для его векторизации. Это полезно для игнорирования орфографических ошибок и других ошибок. dropna не требуется в приведенном ниже случае.
После того, как вы создали матрицу терминов документа, используйте алгоритм LDA, чтобы найти темы и подогнать ее.
Поздравляем! вы обучили модель.
Примечание.
n_components =› количество кластеров, которые вы хотите сформировать для своих статей. Это зависит от ваших собственных вариантов использования. Если кластеры перекрываются, сделайте больше кластеров, если он распространяется, сделайте меньше.
random_state =›Просто чтобы ваши и мои результаты совпадали.
Теперь пришло время увидеть результаты.
Как видите, в теме 0 речь идет о номерах и образе жизни, в теме 1 — об удобстве отелей, в теме 2 — о расположении отеля и так далее.
Эти кластеры могут быть или не быть идеальными для ваших вариантов использования, поэтому вам следует немного поиграть с размером кластеров, чтобы получить лучшие кластеры.
Как я уже упоминал, это алгоритм обучения без учителя, и мы не можем рассчитать его точность, поскольку у нас нет для этого достоверной информации.
Если вам понравился этот пост, не забудьте поставить аплодисменты и подпишитесь на меня на канале и в твиттере.