Поиск скрытых тем с помощью тематического моделирования
В продолжение части-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.
Ну это все! Вы сделали до конца.
Вы можете найти соответствующие коды для этого анализа здесь.
Использованная литература:-