Мне было интересно, знает ли кто-нибудь, как извлечь весовые коэффициенты из вероятностной модели, построенной в R, используя пакет topicmodels
.Получение терминальных весов из модели LDA в R
Следуя примеру в следующем link я создал тему модели, как так:
Gibbs = LDA(JSS_dtm, k = 4,
method = "Gibbs",
control = list(seed = 1, burnin = 1000, thin = 100, iter = 1000))
мы можем получить темы с помощью topics(Gibbs,1)
, термины, используя terms(Gibbs,10)
и даже тему вероятности с помощью [email protected]
, но после того, как смотреть на str(Gibbs)
Кажется, что нет возможности получить вероятностные вероятности в каждой теме. Это было бы полезно, потому что тема 1 могла быть 50% -ным сроком А и 50% термином В, а тема 2 может составлять 90% С-С и 10% -й срок D. Я знаю, что такие инструменты, как MALLET и модуль NLTK Python, но я также надеялся, что подобное решение может существовать в R.
Если кто-то знает, как это может быть достигнуто, сообщите нам об этом.
Большое спасибо!
EDIT:
В пользу других, я думал, что я разделю свой текущий обходной путь. Если бы я знал вероятностные вероятности, я бы смог визуализировать их и дать зрителю лучшее понимание того, что означает каждая тема, но без вероятностей я просто разбиваю свои данные по каждой теме и создаю слово облако для каждого тема с использованием бинарных весов. Хотя эти значения не являются вероятностями, они дают представление о том, на чем сосредоточена каждая тема.
Смотрите ниже код:
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)