Можно ли найти апостериорную вероятность появления тем, сгенерированных с помощью LDAvis, в данном документе? Как, если так?

Как может быть очевидно из вопроса, я довольно новичок в R, и мне не помешала бы небольшая помощь в этом.

При создании тематических моделей я экспериментировал с LDA и LDAvis — код в (A) и (B) ниже. LDA в (A) позволяет мне найти апостериорную вероятность тем, встречающихся в каждом документе в моем корпусе, который я использовал для запуска регрессий с переменными из других наборов данных. (B), подход к генерации тем с использованием LDAvis, создает «лучшие» и более связные темы, чем с помощью (A), но я не смог понять, как найти апостериорные вероятности тем, встречающихся в заданном документе, с помощью подход LDAvis, или сбрасывать со счетов это как невыполнимую задачу.

Все советы очень ценятся.

Благодарю вас!

(А)

set.seed(1)
require(topicmodels)
set.seed(1)
P5LDA4 <- LDA(P592dfm, control=list(seed=1), k = 23)
set.seed(1)
terms(P5LDA4, k =30)

#find posterior probability
postTopics <- data.frame(posterior(P5LDA4)$topics)
postTopics

(Б)

# MCMC and model tuning parameters:
K <- 23
G <- 5000
alpha <- 0.02
eta <- 0.02
# convert to lda format
dfmlda <- convert(newdfm, to = "lda")
# fit the model
library(lda)
set.seed(1)
t1 <- Sys.time()
fit <- lda.collapsed.gibbs.sampler(documents = dfmlda$documents, K = K, 
                               vocab = dfmlda$vocab, 
                               num.iterations = G, alpha = alpha, 
                               eta = eta, initial = NULL, burnin = 0,
                               compute.log.likelihood = TRUE)
t2 <- Sys.time()
t2 - t1
#Time difference of 3.13337 mins
save(fit, file = "./fit.RData")
load("./fit.RData")
library(LDAvis)
set.seed(1)
json <- createJSON(phi = t(apply(t(fit$topics) + eta, 2, function(x) x/sum(x))), 
               theta = t(apply(fit$document_sums + alpha, 2, function(x) x/sum(x))), 
               doc.length = ntoken(newdfm), 
               vocab = features(newdfm), 
               term.frequency = colSums(newdfm))
serVis(json, out.dir = "./visColl", open.browser = TRUE)

person Gazzer    schedule 28.12.2016    source источник


Ответы (1)


В вашем коде B вы уже вычисляете апостериор при создании json.

  1. тета: матрица D×K является апостериорным распределением тем документа.
  2. phi : матрица K × W является апостериорным распределением тем и терминов.

Надеюсь, это поможет!

person Franzi    schedule 05.09.2017