Вам понадобится 5 минут, чтобы понять и внедрить LDA в Python.

Введение

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

Благодаря тематическому моделированию — эпохе обработки естественного языка, используемой для эффективного анализа больших неразмеченных текстовых данных путем их группировки/кластеризации по темам. Мы постараемся охватить технику тематического моделирования под названием LDA с помощью Python.

LDA — Как это работает

LDA означает скрытое распределение Дирихле. Этот метод пытается обнаружить темы из корпуса документов, используя распределение вероятностей, основанное на следующих предположениях:

  • Предположение 1. В документах с похожими темами используются похожие группы слов, а это означает, что все документы представляют собой распределения вероятностей по скрытым темам.
  • Предположение 2. Скрытые темы можно найти путем поиска групп слов, которые обычно встречаются вместе в документах по всему корпусу, что означает, что темы представляют собой распределения вероятностей по словам.

Реализация LDA

Основные шаги

  • Выберите фиксированное количество K тем для изучения.
  • Для каждого документа в корпусе случайным образом назначьте каждое слово в документе одной из тем. Этот шаг дает как тематические представления всех документов, так и словесные распределения всех тем.
  • Начиная с предыдущего шага, повторите слова в каждом документе, чтобы улучшить эти темы.
  • В процессе каждому документу будет присвоена тема

О данных

  • Это новости Австралийской радиовещательной корпорации, опубликованные за восемь лет, доступные на Kaggle. Эти данные имеют два основных столбца:
  • дата_публикации: дата публикации статьи в формате ггггММдд.
  • headline_text: текст заголовка на английском языке.
  • Набор данных имеет

Загрузка данных и выбор подмножества

Строка 6 показывает (1226258, 2), что означает 1226258 строк и 2 столбца. Поскольку у нас много строк, я решил выбрать подмножество из 20 000 строк, чтобы ускорить обработку. Эта операция выполняется в строках 9 и 10. При желании вы можете изменить номер наблюдения.

Строка 13 показывает 5 случайных строк из выбранной выборки, как показано ниже.

Подготовка данных для LDA

Создайте матрицу терминов Document X

Нас не интересует столбец publish_data, так как мы будем использовать только данные headline_text.

Определяя объект CountVectorizer, как показано ниже, мы игнорируем:

  • все термины, которые встречаются более 95% раз в нашем корпусе документов. Поскольку пороговое значение max_df (0,95) означает, что термины, превышающие это значение, не являются значимыми. В данном конкретном случае большинство из них будет stopwords.
  • все термины, которые встречаются менее трех раз (min_df = 3) во всем корпусе.

Строка 9 показывает следующий вывод, означающий, что у нас есть 20 000 документов и 6425 различных слов.

<20000x6425 sparse matrix of type '<class 'numpy.int64'>'
	with 89645 stored elements in Compressed Sparse Row format>

Давайте посмотрим на некоторые из тех слов/функций, которые были извлечены из документов.

В строке 5 показаны следующие слова:

['zimbabwe', 'zimbabwean', 'zone', 'zones', 'zoo']

Построить модель LDA

Теперь из нашей матрицы DTM мы можем построить модель LDA для извлечения тем из подчеркнутых текстов. Количество извлекаемых тем — это гиперпараметр, и мы будем использовать 7 тем.
Поскольку LDA — это итеративный алгоритм, в нашем случае у нас будет 30 итераций, но значение по умолчанию — 10. Значение случайного состояния может быть любой цифрой, и он стремится воспроизвести тот же результат.

Показать самые популярные слова в теме

Теперь из модели LDA мы можем сгенерировать лучшие слова по каждой из семи тем.

Предыдущий код генерирует следующий вывод.

THE TOP 10 WORDS FOR TOPIC #0
['weather', 'election', 'labor', 'urged', 'qld', 'act', 'council', 'nsw', 'new', 'govt']


THE TOP 10 WORDS FOR TOPIC #1
['report', 'indigenous', 'country', 'rural', 'charged', 'accused', 'new', 'health', 'calls', 'says']


THE TOP 10 WORDS FOR TOPIC #2
['queensland', 'charges', 'hospital', 'case', 'guilty', 'child', 'sex', 'murder', 'man', 'court']


THE TOP 10 WORDS FOR TOPIC #3
['face', 'england', 'years', 'win', 'australian', 'talks', 'wins', 'final', 'cup', 'world']


THE TOP 10 WORDS FOR TOPIC #4
['probe', 'dead', 'woman', 'killed', 'dies', 'car', 'crash', 'man', 'interview', 'police']


THE TOP 10 WORDS FOR TOPIC #5
['live', 'return', 'care', 'residents', 'test', 'australia', 'new', 'change', 'workers', 'day']


THE TOP 10 WORDS FOR TOPIC #6
['news', 'search', 'west', 'market', 'coronavirus', 'national', 'gold', 'farmers', 'sydney', 'coast']

Наблюдение: похоже,

  • Тема 1 больше ориентирована на правительство
  • Тема 3, кажется, больше о спорте, чем о чем-то другом

Прикреплять ярлыки обнаруженных тем к исходным документам

Строка 5 кода показывает: (20000, 7), что означает, что final_topics содержит для каждого из наших 20 000 документов оценку вероятности насколько вероятно, что документ относится к каждой из 7 тем.

В строке 11 показаны первые 5 документов и соответствующие им темы.

Согласно нашей модели LDA:

  • первый и второй документ относятся к 4-й теме.
  • третий и четвертый документы относятся к 4-й теме.
  • пятый документ относится к 6-й теме.
  • и т. д.

Небольшая визуализация

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

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

Заключение

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

Дополнительные ресурсы

Гитхаб код

Извлечение темы с неотрицательной матричной факторизацией и скрытым распределением Дирихле

pyLDAvis