如果你想为每个主题创建一个词云,你想要的是每个主题的热门词,即每个主题最可能生成的词。这个概率称为beta
; 这是每个主题每个单词的概率。这个概率 beta 越高,从该主题生成该词的概率就越高。
您可以使用from tidytextbeta
从 LDA 主题模型中获取整洁数据框中的概率。tidy
让我们看一个示例数据集并仅使用两个主题来拟合模型。
library(tidyverse)
library(tidytext)
library(topicmodels)
data("AssociatedPress")
ap_lda <- LDA(AssociatedPress, k = 2, control = list(seed = 1234))
你现在已经适合模型了!现在,我们可以得出概率。
ap_topics <- tidy(ap_lda, matrix = "beta")
ap_topics
#> # A tibble: 20,946 x 3
#> topic term beta
#> <int> <chr> <dbl>
#> 1 1 aaron 1.686917e-12
#> 2 2 aaron 3.895941e-05
#> 3 1 abandon 2.654910e-05
#> 4 2 abandon 3.990786e-05
#> 5 1 abandoned 1.390663e-04
#> 6 2 abandoned 5.876946e-05
#> 7 1 abandoning 2.454843e-33
#> 8 2 abandoning 2.337565e-05
#> 9 1 abbott 2.130484e-06
#> 10 2 abbott 2.968045e-05
#> # ... with 20,936 more rows
他们都混在那里。让我们使用 dplyr 来获取每个主题的最可能的术语。
ap_top_terms <- ap_topics %>%
group_by(topic) %>%
top_n(200, beta) %>%
ungroup() %>%
arrange(topic, -beta)
您现在可以使用它来制作 wordcloud(进行一些重塑)。概率是你想要对应的beta
单词有多大。
library(wordcloud)
library(reshape2)
ap_top_terms %>%
mutate(topic = paste("topic", topic)) %>%
acast(term ~ topic, value.var = "beta", fill = 0) %>%
comparison.cloud(colors = c("#F8766D", "#00BFC4"),
max.words = 100)