我想知道是否有一种方法可以使用“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)