LDAをやってみたわけだが、トピック間の関係も考慮したCorrelated Topic Model (CTM)というものがあるらしい。
Cでしかできない?と思っていたら、これは以前紹介したtopicmodelsパッケージでできるようだ。ldaパッケージと互換性があると以前書いたのでやってみる。
library(lda) library(topicmodels) data(AssociatedPress) data(cora.documents); data(cora.vocab) # LDA dtm0<- ldaformat2dtm(cora.documents, cora.vocab) # lda パッケージとの互換性変換っぽいやつ。cora は lda パッケージのもの lda0 <- LDA(dtm0, method="Gibbs", control=list(alpha=0.1), k=20) ldai <- posterior(lda0) words <- 5 termorder <- apply(ldai$terms, 1, order, decreasing=TRUE) # 単語の登場頻度順位 keywords <- matrix(colnames(ldai$terms)[termorder[seq(words),]], nr=words) # トピック単語
CTMをやるわけだが、オブジェクトはS4クラスらしくちょっとビビった。
# CTM ctm0 <- CTM(dtm0[1:50,], k=5) ctm0@beta # logarithmized parameters of the word distribution for each topic. ctm0@gamma # parameters of the posterior topic distribution for each document. ctm0@mu # mean of the topic distribution on the logit scale. ctm0@Sigma # variance-covariance matrix of topics on the logit scale.
ここで分散共分散行列なのだが、これはなぜかトピック数-1の行列らしい。
ctm0@Sigma [,1] [,2] [,3] [,4] [1,] 22.482237 -1.15066 3.105505 -9.434218 [2,] -1.150660 28.42748 -15.452410 -6.839730 [3,] 3.105505 -15.45241 29.146346 -1.954856 [4,] -9.434218 -6.83973 -1.954856 26.037524
理由は
These are files corresponding to the (K-1) x (K-1) covariance matrix between topics. Note that this code implements the logistic normal where a K-2 Gaussian is mapped to the K-1 simplex. (This is slightly different from the treatment in the paper, where the K-1 Gaussian is mapped to the K-1 simplex.)
とあって、トピック数Kのものは自由度K-1で(K-1)(K-1)行列?とか思っていたけどようわからんので保留。
だがしかし、
In terms of estimating the correlation of the K-th topic with other topics, I think we can do this as a post processing step. The CTM would give you the expected \theta vectors (distribution over topics) for each document, and I am guessing we could use these to compute the correlations of the K-th topic with other topics empirically.
とあるので、がどこにあるかよくわからないが
cor(ctm0@gamma) [,1] [,2] [,3] [,4] [,5] [1,] 1.0000000 -0.2207458 -0.2209763 -0.2224723 -0.1829545 [2,] -0.2207458 1.0000000 -0.3100127 -0.3008035 -0.2257832 [3,] -0.2209763 -0.3100127 1.0000000 -0.3120200 -0.2589668 [4,] -0.2224723 -0.3008035 -0.3120200 1.0000000 -0.2235212 [5,] -0.1829545 -0.2257832 -0.2589668 -0.2235212 1.0000000
がトピック間の相関でいいのか…?