主题建模:LDA、每个主题中的词频和Wordcloud

主题建模:LDA、每个主题中的词频和Wordcloud,r,text,latent-semantic-indexing,tidytext,latent-semantic-analysis,R,Text,Latent Semantic Indexing,Tidytext,Latent Semantic Analysis,问题:我如何计算和编码每个主题中的单词频率? 我的目标是从每个主题创建“单词云” 我对wordcloud没有问题 根据守则, burnin <- 4000 #We do not collect this. iter <- 4000 thin <- 500 seed <-list(2017,5,63,100001,765) nstart <- 5 best <- TRUE #Number of topics: k <-

问题:我如何计算和编码每个主题中的单词频率? 我的目标是从每个主题创建“单词云”

我对wordcloud没有问题

根据守则,

  burnin <- 4000  #We do not collect this.
  iter <- 4000
  thin <- 500
  seed <-list(2017,5,63,100001,765)
  nstart <- 5
  best <- TRUE
  #Number of topics: 
  k <- 4
  LDA_results <-LDA(DTM,k, method="Gibbs", control=list(nstart=nstart,
                           seed = seed, best=best, 
                           burnin = burnin, iter = iter, thin=thin))

burnin根据每个主题的单词(
DTM[,topterms]
)从您的
DTM
中提取一个子集,并获取子集文档术语矩阵的列总和(
slam::col_sums
)。例如:

library(topicmodels)
library(tm)
library(wordcloud)
txt <- c(world="Hello hello world world world foo", foo="foo foo bar fizz")
dtm <- DocumentTermMatrix(VCorpus(VectorSource(txt)))
lda <- LDA(dtm, control = list(alpha = 0.1), k = 2)
freqlst <- lapply(
  terms(lda, thres=.2, simplify=F), 
  function(topterms) slam::col_sums(dtm[,topterms])
)
par(mfrow = c(1,2))
invisible(lapply(freqlst, function(x) 
  wordcloud(names(x), x, min.freq = 0)
))
库(topicmodels)
图书馆(tm)
图书馆(wordcloud)

txt如果你想为每个主题创建一个wordcloud,你需要的是每个主题的顶级术语,即每个主题生成的最可能的单词。这种概率被称为
beta
;这是每个主题每个单词的概率。贝塔概率越高,该词从该主题生成的概率就越高

您可以使用tidytext中的
tidy
,从LDA主题模型中获得整洁数据框中的
beta
概率。让我们看一个示例数据集,并使用两个主题拟合一个模型。

库(tidyverse)
图书馆(tidytext)
库(topicmodels)
数据(“关联新闻”)
ap_lda%
顶级(200,测试版)%>%
解组()%>%
安排(主题,-beta)
您现在可以使用它来创建wordcloud(通过一些重塑)。
beta
概率就是你想要对应单词大小的概率。

库(wordcloud)
图书馆(E2)
ap_top_术语%>%
变异(主题=粘贴(“主题”,主题))%>%
acast(术语~主题,value.var=“beta”,填充=0)%>%
云(颜色=c(“#F8766D”),“#00BFC4”),
最大字数=100)

你好,卢卡,请快速回复。。。。谢谢你的回复。“我会试试看,稍后再给你回复。”沙切万:不用担心。谢谢你,朱莉娅!我正在研究你的密码和下面那位先生的密码。。。。非常感谢。你能给我一些关于如何从矩阵“Beta”中绘制wordcloud的指导吗。厚度在我的代码中以频率表示。wordcloud(words=d$term,freq=d$freq,min.freq=1,max.words=200,random.order=FALSE,rot.per=0.35,colors=brewer.pal(8,“Dark2”))