Поиск скрытых тем с помощью тематического моделирования

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

Давайте сначала разберемся, что такое тематическое моделирование!

Тематическое моделирование

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

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

Методы, используемые для тематического моделирования

  • Скрытое распределение Дирихле (LDA)

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

Вкратце, LDA представляет документы как смесь тем, и эти темы связаны со словами с определенной вероятностью.

  • Факторизация неотрицательной матрицы

Это математический метод, при котором матрица факторизуется на две матрицы со свойством, что все три матрицы не имеют отрицательных элементов (отсюда и название!).

Мы можем создать матрицу X (матрицу данных) с размерами n * p ,, которая может быть представлена ​​как произведение двух матриц, то есть A (базисные векторы) с размерами n * k и B (матрица коэффициентов) с размерами k * p. Здесь n - количество документов, p - количество токенов, а k - количество тем. Это разложение, таким образом, соответствует связыванию документов с темами и тем с токенами и, следовательно, может использоваться как способ моделирования тем.

Оба метода используют концепцию соотнесения документов с темами, а тем - с токенами (или словами). В то время как LDA моделирует это как распределение вероятностей для поиска слов, которые больше относятся к теме, и документов, которые больше относятся к теме, NMF использует значения коэффициентов (полученные во время матричной факторизации) слов по каждой теме для интерпретации.

Реализация на Python на данных COVID Twitter

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

Создание матрицы терминов документа

Использование sklearn.feature_extraction.text.TfidfVectorizer для создания матрицы терминов документа, а затем применение fit_transform к обработанным твитам. Я установил несколько параметров, таких как max_df, min_df, ngram_range, stop_words. В качестве вывода вы получите dtm в виде разреженной матрицы 41122 * 43359, соответствующей количеству твитов и количеству токенов соответственно, то есть матрицу X с размерами n * p в терминах определения, указанного выше.

Создание модели NMF

Я пробовал и LDA, и NMF, NMF работал лучше, поэтому я расскажу вам о результатах NMF.

Создание объекта NMF с использованием sklearn.decomposition.NMF путем установки n_components как 5 (хотя я пробовал и другие значения для n_components, например 3,6,7) с последующей подгонкой и преобразованием матрицы терминов документа, полученной из Tfidf процесс.

Давайте посмотрим, как выглядит результат преобразования! Это матрица A с размерами n * k, как мы обсуждали выше в определении.

Для тем [0], соответствующих документу с индексом 0, я получаю массив с пятью значениями (соответствующими количеству тем), а наибольшее значение коэффициента в индексе 3 подразумевает, что этот конкретный документ принадлежит теме-3.

Объяснение каждой темы

Поскольку мы получили представление о том, как темы будут связаны с документами, используя вывод nmf_model.fit_transform (dtm), обсужденный выше. Давайте также разберемся, из чего состоят эти темы!

В этом случае мы используем nmf_model.components_ (это вторая матрица B с размерами k * p), чтобы получить отношение тем к словам, просматривая 10 лучших слов с наивысшими значениями коэффициентов, соответствующих каждой теме.

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

Здесь тема-0 касается цен на нефть и газ, тема-1 относится к продуктовым магазинам, тема-2 относится к дезинфицирующим средствам для рук и туалетной бумаге, тема-3 - к покупкам в Интернете, а тема-4 - к паническим покупкам.

Пометка твитов

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

В первой матрице, которую мы обсуждали, т.е. n * k (переменная темы), мы назначаем номер темы, соответствующий максимальному значению коэффициента, используя: df [‘Topic’] = themes.argmax (axis = 1)

На основе слов, связанных с каждой темой, мы можем создать соответствующий ярлык. Я создал 5 ярлыков: «oil_gas_prices», «grocery_store_workers», «toilet_paper_sanitiser», «online_shopping», «panic_buying_hoarding». Эти имена можно переопределить на основе творчества: D

Мы видим, что эти теги каким-то образом помогли понять твиты. Больше твитов было связано с темами panic_buying_hoarding и oil_gas_prices.

Ну это все! Вы сделали до конца.

Вы можете найти соответствующие коды для этого анализа здесь.

Использованная литература:-