CTM Correlated Topic Model

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.

とあるので、\thetaがどこにあるかよくわからないが

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

がトピック間の相関でいいのか…?