elsur.jpn.org >

« 読了:秋山・仙石・柴崎(2013) 商業集積統計のつくりかた | メイン | トピックモデルの表記比較 (いつも思うんですが、専門家のみなさん記号を統一していただけませんかね) »

2017年9月12日 (火)

 仕事の都合で仕方なく、トピックモデルについてあれこれ考えているんだけど、トピック数の決定ってのはいったいどうしたらいいのかしらん、と不思議である。
 解説本などをみると、それは階層ディリクレ過程で推定できる、それにはまず中華料理店のフランチャイズ・チェーンの仕組みについて検討する必要がある、ただし店舗内のテーブル数は無限とする... なんて途方に暮れるようなことが書いてあるんだけど(本当)、そんなおそろしい話じゃなくてですね、探索的因子分析のスクリー基準みたいなしょっぼーい話でいいから、なんか目安がほしいだけなんですけど...

 やっぱり、データをちょっとホールドアウトしておいて、perplexityが低くなるトピック数を選べって話だろうか。面倒くさいなあ、と思いながらぼんやり検索していたら、なんと!Rにはldatuningというパッケージがあり、topicmodelsパッケージでLDA(潜在ディリクレ配分モデル)を組む際の最適トピック数を教えてくれるのだそうである。すごい!偉い!
 
 さっそくldatuningを試してみたところ、さまざまなトピック数について、CaoJuan2009, Arun2010, Daveaud2014, Griffiths2004という4つの指標が出力される。それだけのパッケージであった。チャートを描いて考えな、という話である。
 なんだ、この謎の指標は? マニュアルには一切説明がなく、ただ出典が書いてあるだけ。
 さすがに気持ち悪いので、出典をあつめてめくってみた。

CaoJuan2009

 出典はJuan, Tian, Jintao, Yongdon, Sheng (2009, Conf.)。
 パラパラめくってみただけであきらめたんだけど(第一著者は博士の院生さんで80年生まれとのこと。うわー)、どうやら、2トピック間の語彙を通じたコサイン類似性を求め、その総当たり平均が最小になるようなトピック数を求める... というような話らしい。LDAではトピックは独立なはずだから、ということみたいだ。へぇー。
 ldatuningのソースを眺めるとこうなっている。トピック$k(=1,\ldots,K)$の単語事後分布を格納したベクトルを$x_k$として、
 $dist_{k,j} = \sum x_k x_j / \sqrt{\sum x_k^2 * \sum x_j^2}$
と定義し、すべての2トピックの組み合わせについてこの距離を合計し, $K(K-1)/2$で割っている。

Deveaud2014

 出典はDeveaud, SanJuan, Bellot (2014), 論文だか紀要だかよくわからない。
 もちろんきちんと読もうなどという大それた野心は持ち合わせていないわけで、トピック数決定についてのページをディスプレイ上で眺めただけなのだが、どうやら、2トピック間での単語出現分布のKLダイバージェンスを求め、その総当たり平均が最大になるようなトピック数を求める... という話らしい。へぇー。
 ldatuningのソースを眺めると、
 $dist_{k,j} = 0.5 \sum x_k \log(x_k/x_j) + 0.5 \sum x_j \log(x_j/x_k)$
と定義し、すべての2トピックの組み合わせについてこの距離を合計し, $K(K-1)$で割っている。

Arun2010

 出典はArun, Suresh, Madhaven, Murthy(2010, Conf.)。入手できなかった。上のDeveaud et al.(2014)によれば、これもトピック間の距離みたいなものを最大にすることを目指すのだそうだ。
 ソースコードを眺めたのだが、トピック別の単語事後分布とそのハイパーパラメータを使って、なにかごにょごにょしている模様。

Griffiths2004

 出典として、Griffiths & Steyvers (2004, PNAS) と、誰かの修論かなにかが挙げられている。前者は科学研究のトピックを推定するという話で、有名な論文であろう。
 ちゃんと読んでないけど、パラパラめくったところによればこういうことらしい。
 要するに、トピック数を$T$、コーパス全体の単語を$\mathbf{w}$として、対数尤度$\log P(\mathbf{w}|T)$が最大になる$T$にすればいいじゃん、というアイデアである。しかしその直接の算出は、単語をトピック$\mathbf{z}$に割り当てるすべてのパターンを通じた合計が必要になるので無理。ところが、次のやりかたでうまく近似できる。
 まず事後分布$P(\mathbf{z} | \mathbf{w}, T)$から$\mathbf{z}$をドローし、$P(\mathbf{w}|\mathbf{z}, T)$をたくさん求める。で、その調和平均を求める。へぇー。
 なおGrun& Hornik(2011, J.Stat.Software)によれば、このやり方には推定量の分散が無限大になるかもしれないという欠点があるのだそうだ。
 ソースコードのほうは、little tricky というコメントがついており、よくわからないことをやっている。

 こうしてみると、Griffith & Steyvers (2004) はモデルの周辺尤度に注目する路線、他の3つはトピック間の単語事後分布の類似性に注目する路線といえそうだ。前者はperplexityみたいなもの、後者はcoherenceみたいなもの、ということなのかしらん?
 探索的因子分析のアナロジーで言うと、前者はどうにかしてモデル適合度を求めようという路線、後者は回転後負荷行列の性質を調べる路線(たとえば単純構造が得られたかどうかとか)、という感じかしらん?
 えーと、自分で書いててよくわかんなくなってきたので、このへんで。

雑記:データ解析 - 潜在ディリクレ配分のトピック数を手軽に決める方法 (Rのldatuningパッケージが提供する謎の4つの指標について)

rebuilt: 2020年4月20日 18:54
validate this page