R - включение предварительно закодированного обучающего набора в модель lda

Я пытаюсь распределить список опрошенных вопросов по 30 различным категориям, используя функцию LDA в пакете топиков.

Код, который у меня есть до сих пор:

source <- VectorSource(openended$q2)
corpus <- Corpus(source)

corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, removeWords, stopwords('english'))
corpus <- tm_map(corpus, stemDocument, language = "english")

mat <- DocumentTermMatrix(corpus)
rowTotals <- apply(mat , 1, sum) 
mat <- mat[rowTotals> 0, ]

burnin <- 4000
iter <- 2000
thin <- 500
seed <-list(2003,5,63,100001,765)
nstart <- 5
best <- TRUE

k <- 30

ldaOut <-LDA(mat,k, method="Gibbs", control=list(nstart=nstart, seed = seed, 
best=best, burnin = burnin, iter = iter, thin=thin))
ldaOut.topics <- as.matrix(topics(ldaOut))
write.csv(ldaOut.topics,file=paste("LDAGibbs",k,"DocsToTopics.csv"))

У меня уже есть 10% данных в открытом $q2, закодированных соответствующим образом, как я могу обучить алгоритм, используя эти данные?

Спасибо!


person DBH    schedule 31.10.2017    source источник
comment
Поскольку LDA(), реализованный в topicmodels, представляет собой неконтролируемый генеративный алгоритм, вы не можете обучить модель так, как вы собираетесь. Вы можете подогнать модель и проверить, насколько новые данные вписываются в эту модель, через perplexity(). Что касается общего обсуждения, вы можете взглянуть на этот поток контролируемый LDA. Далее пакет lda предлагает модель slda, но я с ней не знаком и думаю, что это все же не то, что вы хотите. (поправьте меня кто-нибудь, если я ошибаюсь)   -  person Manuel Bickel    schedule 14.11.2017
comment
Ознакомьтесь с документом под названием Labeled LDA от Ramage. Я не думаю, что вы можете реализовать это в R, используя topicmodels. На самом деле я сейчас работаю над чем-то подобным для Python. Вы можете проверить это здесь github.com/KenHBS/LDA_thesis с ним не очень приятно работать для другие люди, но, возможно, это может помочь указать вам правильное направление. По сути, вы манипулируете априорным значением тета, чтобы все значения были равны нулю, за исключением элемента (элементов), которые соответствуют теме, имеющейся у вас в размеченных данных.   -  person KenHBS    schedule 20.11.2017