在R中从LDA模型中获取术语权重

3
我想知道是否有一种方法可以使用“topicmodels”包从R中构建的主题模型中提取术语权重/概率。请参考以下链接中的示例创建主题模型:链接
Gibbs = LDA(JSS_dtm, k = 4, 
            method = "Gibbs",
            control = list(seed = 1, burnin = 1000, thin = 100, iter = 1000))

我们可以使用 topics(Gibbs,1) 获取主题,使用terms(Gibbs,10)获取术语,甚至使用Gibbs@gamma获取主题概率,但是在查看 str(Gibbs) 后,发现似乎没有办法获取各个主题内的术语概率。这将是有用的,因为主题1可能是50%的术语A和50%的术语B,而主题2可能是90%的术语C和10%的术语D。我知道类似 MALLET 和 Python 的 NLTK 模块提供了这种功能,但我也希望 R 中存在类似的解决方案。
如果有人知道如何实现,请告诉我们。 非常感谢!
编辑:
为了让其他人受益,我想分享一下我的当前解决方法。 如果我知道术语概率,我将能够将它们可视化,并使观察者更好地理解每个主题的含义,但是没有概率,我只需通过每个主题来拆分我的数据,并使用二进制权重为每个主题创建一个词云。 虽然这些值不是概率,但它们给出了每个主题关注的内容的指示。
请参见以下代码:
JSS_text   <- sapply(1:length(JSS_papers[,"description"]), function(x) unlist(JSS_papers[x,"description"]))
jss_df     <- data.frame(text=JSS_text,topic=topics(Gibbs, 1))
jss_dec_df <- data.frame()

for(i in unique(topics(Gibbs, 1))){
  jss_dec_df <- rbind(jss_dec_df,data.frame(topic = i, 
                                            text = paste(jss_df[jss_df$topic==i,"text"],collapse=" ")))
}

corpus <- Corpus(VectorSource(jss_dec_df$text))
JSS_dtm <- TermDocumentMatrix(corpus,control = list(stemming = TRUE, 
                                                    stopwords = TRUE, 
                                                    minWordLength = 3,
                                                    removeNumbers = TRUE, 
                                                    removePunctuation = TRUE,
                                                    function(x)weightSMART(x,spec="bnc")))

(JSS_dtm  = removeSparseTerms(JSS_dtm,0.1)) # not the sparsity parameter 

library(wordcloud)
comparison.cloud(as.matrix(JSS_dtm),random.order=F,max.words=100, 
                 scale=c(6,0.6),colours=4,title.size=2)
1个回答

4

明白了,要获取术语权重,请使用 posterior(lda_object)$terms 。结果证明比我想象的要容易得多!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接