Обнаружение сходства текста между различными тематическими моделями

#r #quanteda

#r #quanteda

Вопрос:

В подходе к тематическому моделированию, где у нас есть 2 разных результата тематических моделей, подобных этому:

 library(dplyr)
library(ggplot2)
library(stm)
library(janeaustenr)
library(tidytext)

library(quanteda)
testDfm <- gadarian$open.ended.response %>%
    tokens(remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE)  %>%
    dfm()
    
out <- convert(testDfm, to = "stm")
documents <- out$documents
vocab <- out$vocab
meta <- out$meta

topic_model1 <- stm(documents = out$documents, vocab = out$vocab, K = 5)
topic_model2 <- stm(documents = out$documents, vocab = out$vocab, K = 3)
 

давайте назовем их topic_model1 и topic_model2 (возможно, было бы лучше использовать другой ввод данных, но набор данных gadarian был наиболее простым из соображений воспроизводимости).

Есть ли какой-либо способ сравнить текстовые результаты двух моделей и предоставить какой-то метаанализ или создать какую-либо диаграмму для сравнения тем двух моделей?

Ответ №1:

сравнение двух моделей немного сложно — потому что у нас есть word, темы, две модели и, конечно, бета-значение. Простая диаграмма для визуализации одной модели будет такой:

 library(tidytext)
library(dplyr)
library(ggplot2)

tidytext::tidy(topic_model2) %>% 
  dplyr::group_by(topic) %>% 
  dplyr::slice_max(beta, n = 5) %>% # just the top 5 beta values to keep the plot readable
  ggplot2::ggplot(aes(reorder(term, beta), beta)) 
  ggplot2::geom_col()  
  ggplot2::coord_flip()  
  ggplot2::facet_wrap(~topic)
 

введите описание изображения здесь

Этот подход может быть использован и усовершенствован для параллельного создания тепловых карт для каждой модели:

 tidytext::tidy(topic_model1) %>% 
  dplyr::group_by(topic) %>% 
  dplyr::slice_max(beta, n = 5) %>% 
  dplyr::mutate(MODEL = "K5") %>% 
  dplyr::union(tidytext::tidy(topic_model2) %>% 
                     dplyr::group_by(topic) %>% 
                     dplyr::slice_max(beta, n = 5) %>% 
                     dplyr::mutate(MODEL = "K3") ) %>% 
  ggplot2::ggplot(aes(topic, term, fill = beta))  
  ggplot2::geom_tile()  
  ggplot2::facet_wrap(~MODEL) 
 

введите описание изображения здесь

Вы можете взглянуть на это руководство и примеры, чтобы получить вдохновение: https://www.tidytextmining.com/topicmodeling.html