2015-11-21 2 views
2

Мне было интересно, знает ли кто-нибудь, как извлечь весовые коэффициенты из вероятностной модели, построенной в 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) 

ответ

3

фигурного это - получить термин вес, использовать posterior(lda_object)$terms. Оказалось, было намного легче, чем я думал!

Смежные вопросы