답변:
내가 아는 한 많은 주제와 말뭉치를 제공하면됩니다. Grun and Hornik (2011)의 15 페이지 하단에서 시작하는 예제에서 볼 수 있듯이 후보 주제 세트를 지정할 필요는 없습니다 .
1 월 28 일에 업데이트되었습니다. 이제 아래 방법과 약간 다르게 작동합니다. 내 현재 접근 방식은 여기를 참조하십시오 : https : //.com/a/21394092/1036500
학습 데이터없이 최적의 주제 수를 찾는 비교적 간단한 방법은 데이터가 주어지면 최대 개수의 로그 가능성을 가진 주제 수를 찾기 위해 주제 수가 다른 모델을 반복하는 것입니다. 이 예제를 고려하십시오R
# download and install one of the two R packages for LDA, see a discussion
# of them here: http://stats.stackexchange.com/questions/24441
#
install.packages("topicmodels")
library(topicmodels)
#
# get some of the example data that's bundled with the package
#
data("AssociatedPress", package = "topicmodels")
주제 모델을 생성하고 출력을 분석하기 전에 모델이 사용해야하는 주제 수를 결정해야합니다. 다음은 다른 주제 번호를 반복하고 각 주제 번호에 대한 모형의 로그 우도를 구하여 가장 좋은 것을 선택할 수 있도록 플롯하는 함수입니다. 가장 많은 주제는 패키지에 예제 데이터를 빌드 할 수있는 가장 높은 로그 가능성 값을 가진 주제입니다. 여기에서는 2 개의 주제로 시작하지만 100 개의 주제로 시작하는 모든 모델을 평가하기로 결정했습니다 (시간이 조금 걸립니다!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
이제 생성 된 각 모델에 대한 로그 우도 값을 추출하고이를 계획 할 수 있습니다.
best.model.logLik <- as.data.frame(as.matrix(lapply(best.model, logLik)))
best.model.logLik.df <- data.frame(topics=c(2:100), LL=as.numeric(as.matrix(best.model.logLik)))
이제 가장 높은 로그 가능성이 표시되는 주제 수를 확인하는 도표를 작성하십시오.
library(ggplot2)
ggplot(best.model.logLik.df, aes(x=topics, y=LL)) +
xlab("Number of topics") + ylab("Log likelihood of the model") +
geom_line() +
theme_bw() +
opts(axis.title.x = theme_text(vjust = -0.25, size = 14)) +
opts(axis.title.y = theme_text(size = 14, angle=90))
주제가 10과 20 사이 인 것 같습니다. 우리는 데이터를 검사하여 다음과 같이 로그 모호도가 가장 높은 정확한 주제 수를 찾을 수 있습니다.
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
결과적으로 13 개의 주제가이 데이터에 가장 적합합니다. 이제 13 개의 주제로 LDA 모델을 작성하고 모델을 조사 할 수 있습니다.
lda_AP <- LDA(AssociatedPress[21:30,], 13) # generate the model with 13 topics
get_terms(lda_AP, 5) # gets 5 keywords for each topic, just for a quick look
get_topics(lda_AP, 5) # gets 5 topic numbers per document
그리고 모델의 속성을 결정합니다.
이 접근 방식은 다음을 기반으로합니다.
그리피스, TL 및 M. Steyvers 2004. 과학적인 주제 찾기. 미국 국립 과학원의 절차 101 (Suppl 1) : 5228 –5235.
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
. 왜 데이터의 원시 21:30 만 선택합니까?
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 좋은 답변.