(Kim+ ICML12) Dirichlet Process with Mixed Random Measures @ICML読み会

7/28 に行われた nokuno さん主催の ICML 2012 の論文読み会にのこのこ参加。お疲れ様でした&ありがとうございました>各位
「えーまたトピックモデルなの?(ぶーぶー)」とブーイングを浴びつつ、[Kim+ ICML12] Dirichlet Process with Mixed Random Measures を紹介してみた。発表資料はこちら。

www.slideshare.net

論文では Stick Breaking Process と Polya Urn の2つでモデルを表現していたが、そのあとどうせ Gibbs sampling するなら Chinese Restaurant Franchise の方がわかりやすかろうというわけで、がっつり絵を描いてみた(手描きだけど)。

DP-MRM は一言で言うと「教師ありノンパラトピックモデル」。
あるいは別の言い方では、Labeled LDA [Ramage+ EMNLP2009] のノンパラ版。

Labeled LDA は数ある教師ありトピックモデルの眷属の一つで、個人的にはこれまでに評価したことのあるものの中で一番使い勝手が良い印象。
実装は非常に容易で、普通の LDA の Collapsed Gibbs sampling +10行程度で済む。Python で実際に L-LDA を実装してみたのがこちら。

ただし L-LDA ではラベル-トピック対応を明示的に指定する必要がある。またシングルラベルの場合は、全てのドキュメントに(共通の) second label (推論によっておそらく stopwords 類にひもづけられることが期待される)を与えるなどの工夫を行わないとかなり貧弱なモデルになることがわかっている。
L-LDA 論文では1ラベル1トピックで対応させているが、1対多の対応付けも例えばラベル web を web1, web2, web3 などに展開すると考えれば一応できる。が、各ラベルにいくつのトピックを対応させるか人手であらかじめ決める必要があるし、その対応も決定的なものになってしまう。
また JavaPython などのラベルは共通したトピックを持つだろうということも予測されるわけだが、そういうさじ加減もすべて手動でコントロールする必要がある。

一方本論文の提案する DP-MRM はそのラベル-トピック対応が階層化され、その対応が自動決定される(しかも確率分布として得られる)。
これは L-LDA の先ほどの難点を見事に解消するもので、かなり本気で嬉しい。
ただしノンパラベイズなので推論はやっぱりめんどくさい。ただでさえめんどくさい HDP-LDA の、さらに1.5〜2倍くらいのコード量になるかも?
ぶっちゃけ、個人的には喜びポイントはトピック数が無限個なところではなく、ラベル-トピック対応が階層化されているところなので、そこを DP ではなくディリクレ分布に置き換えることが出来れば、実装も少し楽&推論も速くなってハッピーになるんじゃあないかなあ。ちょっとあとで考えてみる。

ところで、資料を slideshare にあげたら、twitter にて @torotoki さんからあれこれつっこみをいただいているうちに、ラベル-トピック対応を 1対多にする場合について L-LDA の論文に書いてあると勘違いしていることに気づかせてもらった……。お恥ずかしい。多謝。

ACL/EMNLP 読み会もスケジュールが合えば8月にでもやりましょう、という話あり。
あと TokyoNLP が @kisa12012 さん主催の TokyoML になる(断言しちゃった)。協力者を募集しているそうなので、われこそはという方ぜひ。勉強会は発表者を集めるのがやっぱり一番大変とのことなので、第1回の発表を予約しといた。TokyoNLP で機会があったらそのうち、と思っていた HDP-LDA の実装の話とかしようかな。たぶん。


ついでに発表分&それ以外も含む ICML 2012 のミニ紹介。twitter でつぶやきそびれたやつもちらほら。

[Kleiner+] The Big Data Bootstrap

tsubosaka さんによる紹介資料。

www.slideshare.net

Bootstrap を "Big Data" に適用する話。
bootstraping では n 個のデータから n 個復元抽出するが、そこには平均して 0.632n 個の異なり元が含まれてしまい[Efron+ 1993]、大規模データに対しては処理が全く軽くない。
そこで、b=n^0.6 個程度のかなり小さいサブセットをまず抽出し、それに対して n 個復元抽出(実際には多項分布の n 回試行でいい)をすることで、元の bootstrapping にかなり近い性能が出せますよ、というお話。
例えば n=10^6 なら、通常の bootstraping なら 6.32*10^5 くらいの異なり元になるところが 4000 程度で済むわけで、相当うれしい。実装も普通の bootstrapping に1行増えるか増えないかというレベルで、もう明日から使いますと言いたいくらい。

[Samdani+] Efficient Decomposed Learning for Structured Prediction

nokuno さんが紹介。資料公開はまだかな?

Structured Prediction と表題にあるが、内容的には Structured に特化した印象はなく。
loss function に gold output からの「距離」を加えて min-max 的アプローチをとることで、予想を外しにくい頑健なモデルが得られるが、探索時間が膨大になる。そこで探索範囲を gold output の「近傍」に限定すれば、探索時間を抑えつつ性能はあまり落ちないよ、という話。
その「近傍」を作るのに decomposition という考え方を導入してうまいことやるみたいなのだが、ちょっとまだそこらへん理解できてない。すんません。

[Biggio+ ICML12] Poisoning Attacks against Support Vector Machines

kisa12012 さんの発表資料&エントリ

www.slideshare.net

SVM に対する Poisoning Attacks (訓練データへの悪意のあるデータ挿入)対策、かと思ったら、効果的に攻撃するには偽データをどう選択するのがいいか、だった。敵を知れば。
ブラックボックスではなく SVM への全入出力を把握できている設定なので、攻撃にしても余り現実的ではない気もするけど、少ない攻撃データで、どれだけ学習結果を歪められるかというのはおもしろい(MNIST での手書き数字モデルがかなり歪めることに成功している例が示されている)。

[Scherrer+] Scaling Up Coordinate Descent for Large L1 Regularization Problems

sleepy_yoshi さんの発表資料&エントリ

www.slideshare.net

最適化手法の一つ Coordinate Descent を並列化した Shotgun Algorithm[Bradley+ ICML2011] を含めた一般的なフレームワークを考察し、さらに新しい手法についても提案する、という話。
Shotgun はランダムに選んだ複数の座標それぞれで並列に coordinate descent して、その結果をすべて反映する、というまあ普通に考えても若干乱暴なアプローチ。適当にぶっ放して全部あたったらボロ儲け、Shotgun とは実にうまく名付けたもの。まあでも高次元の空間なら案外うまく行っちゃうんだろうかなあ。
本論文で提案する THREAD-GREEDY は(ちょっと論文の記述に齟齬があって正確なところはわからないものの)、Shotgun の結果のうち、一番いいのをひとつ採用するというアプローチ。足が遅くなる分、正確に……と思いきや、収束もかなり速いという結果が示されており、ちょっとまあ本当かなあ。確かめずに受け入れられるほど楽観的に離れない感じ。
Coordinate Descent はまだ使ったこと無いので正直ちょっと良くわかってなかったが、なんかハマるところがあれば使ってみようかな。

[Bischof+] Capturing topical content with frequency and exclusivity

Proceedings の目次ではこの表題だが、論文 pdf では "Summarizing 〜" となっている。なぞ。
Summarizing とあるから要約なのかと思って読んでいたらどうも話が合わない。最後の実験を読んで、ようやっと特徴語の抽出タスクを解いていることに気づいた。えー。もっと早く気付け?
モデルの複雑さ(Hierarchical Poisson Convolution)がタスクに対してオーバースペックな気がする(個人的な印象だけど)。
一応「階層化されたラベルが振られたドキュメントに対して exclusivity を考慮した特徴語の抽出が可能」であることがキモらしいんだけど、tf-idf に対して定性的にどれくらいいいのか気になるところ。

[Purushotham+] Collaborative Topic Regression with Social Matrix Factorization for Recommendation Systems

協調フィルタソーシャル・ネットワークを組み込む話。
LDA を拡張した CTR(Collaborative Topic Regression) と SMF(Stochastic Matrix Factorization) を組み合わせたちょっとおもしろい感じのモデル。
SMF なしに比べ recall が 0.1〜0.2 程度上がるという結果なので、おそらく定性的に違いを感じられるほどのことはないんだろうなあ。
余談だが、notation がくちゃくちゃで読みにくかった……。

[Paisley+] Variational Bayesian Inference with Stochastic Search

変分ベイズの変分下界に必要な期待値計算に重点サンプリングを使う。その分散を十分小さくするにはサンプリング数が非常に多くなるわけだが、それを小さく抑えるために control variate という手法を組み合わせるよ、という話。ちょっとトリッキーでおもしろい。
そして実際に適用する手法の一つが HDP はもちろんいいんだけど、もう一つが Logistic Regression って個人的には うーん。しかもデータセットの一つが iris って、いやいやこらこら、みたいな。

[Minmo+] Sparse stochastic inference for latent Dirichlet allocation

Online LDA [Hoffman+ NIPS2010] の拡張になるのかな?
なにげに読みすすめてみたら、LDA を VB と Gibbs sampling のハイブリッドで解く! とあって、なんか妙に高まる期待。
実際は topic z の推論にはサンプリングを、topic-word 分布の推論には VB っぽい手法を使うという、うーんちょっと期待はずれな感じ(何を期待したんだか)
実装は簡単そうなので、さくっと書いてみるのも楽しそう。そういえば Online LDA も実装しようかなといってほったらかしだったわー。
比較対象にあげられていたトピックモデルを sequencial Monte Carlo(つまりパーティクルフィルタ)で解く [Ahmed+ 2012] ってのも個人的に気になる。あとで読んでみよう。

[Mnih+] A fast and simple algorithm for training neural probabilistic language models

Neural 確率言語モデルの推論を簡素化した話。
Neural 確率言語モデルの一番簡単な log bilinear model を近似推論、長距離の素性を入れても現実的な時間で学習できるようになりましたよ、ということかなあ(自信なし)。
本論文によればもともと neural 確率言語モデルn-gram より性能がよいそうな(余計な独立性の仮定が要らないから?)。予測や文生成には使いにくそうだけど。あまり知らないから一度他の関連論文も読んでみたいところ。

[Yang+] Clustering by Low-Rank Doubly Stochastic Matrix Decomposition

アイテム間の類似度を使ってクラスタリングを行う手法。タイトルには行列分解とあるが、あまり行列分解しているようには見えない。
pLSI によく似た式から出発して、最終的に item-topic distribution を得るという流れなのだが、一つ一つの手順の動機がつかめなくて、わかった気になれなかった。実験結果の数字は他の手法に比べてずいぶんいいのだが……。
類似度(確率)行列はアイテム数×アイテム数という巨大なものだが、提案されているアルゴリズムはそれに対してナイーブにループしているように見える。計算量大丈夫かなあ。

[Shivaswamy+] Online Structured Prediction via Coactive Learning

検索結果のクリックなどのフィードバックを通じてランキングを改善するという、ここまではよくある枠組みの話だが、そのフィードバックは best ではなくあくまでも better な解であるという自然な条件を想定して、その点をモデルに組み込んでいるのがポイント(表題の "coactive" はこのことを指している)。
"フィードバックはbestではなくbetter" をモデル化するために strictly α-informative という仮定を入れる。入出力の組を評価する utility 関数 U (大きいほどよい)に対し、予測解とフィードバックの差が、予測解と最適解の差のα倍で下から抑えられる(0<α≦1)、というもの(実際には slack 変数を入れてミスを許容)。柔らかく言うと、フィードバックは十分改善されていることを保証、みたいな?

αをいくつか変えて実験し、α=1 のとき regret 最小という結果。
あれれ? α=1って「フィードバックが最適解」と同等だから、それが一番性能がいいってストーリー的におかしいよね?
実は、モデル設計時点では utility関数 U を "unknown to the learning algorithm" としているにもかかわらず、学習では U を特徴の線形結合とおき、そのパラメータを学習で決めている。
そうすると「得られたフィードバックが【最適解】となるように U を学習」することになり、そりゃそういう結果になるに決まっている。問題設定は非常に興味深かっただけに、とても残念。

[Wang+] Stability of matrix factorization for collaborative filtering

協調フィルタリングにおける行列分解の、敵対的ノイズに対する安定性(ロバスト性)がどれくらいあるかを理論的に評価したもの。
the ground truth との RMSE (二乗平均平方根誤差……日本語だとかえってわからないなw)に対する確率的な上界を導くのだが、the ground truth の定義(何をもって the ground truth とするのか)がよくわからなくてもやもやする。おそらく「ノイズがなかった場合の大域最適解」なのかなあ。
実用的というより、ちゃんと評価してくれている人がいるからと安心するお話。

[Defazio+] A Graphical Model Formulation of Collaborative Filtering Neighbourhood Methods with Fast Maximum Entropy Training

collaborative flitering には、隠れたトピックによって users と items が結び付けられていると考えるアプローチである latent-factor models (LSI の眷属)と、users と items の bipirate graph によって表現する neighbourhood models があり、この論文は後者を maximum entropy で解くにあたって、必要になる勾配をえいやと近似して解いてみた、というもの。
結果を見る限り、latent-factor models と大きな差があるように感じられなかった。metric をいろいろいじることができるのが、現実の問題に当てはめるときに嬉しかったりするのかなあ。

[Sato+] Rethinking Collapsed Variational Bayes Inference for LDA

LDA を VB で解くには、オリジナルの生 VB [Blei+ 2003]、Collapsed VB [Teh+ 2007]、CVB で事後分布の近似にテイラー展開の2次の項までとっていたのを、0次項(!)で済ませる CVB0 [Asuncion+ 2009] があるのだが、この中で直感に反してなぜか CVB0 が一番性能がいいことが経験的に知られている。これについて理論的な裏付けを与えることが出来ないか、という話。
CVB0 の推論は α-divergence (PRML にもちらっと出てたやつ)を最小化(ただしパラメータごとに α=1 だったりα=-1 だったりする)と同値であること、zero-forcing effect(パラメータを潰そうとする効果、かな?) が CVB0 の方が CVB より範囲が限定されていること、それらが効いているのではと考察。
こういう「ナイーブベイズがなぜ性能がいいか」的な話は、実際の応用に必ずしも役に立つわけではないが、おもしろい。

余談だが、この佐藤さんの論文はとても読みやすかった。
notation がデタラメだったり、かいつまんで読むと意味が取れなくなったりする論文も珍しくないのだが、Notation が整理されていて、各 section の論旨も明確。きちんと書いてあるとこんなに読みやすいんだなあ、と変なところで感動。

[Charlin+] Active Learning for Matching Problems

Matching Problem とはユーザに適したアイテムを割り当てる(あるいは逆)という、一見 Collaborative filtering と同じに見えるが、「ちょうど1つずつ、重複なく」割り当てるという設定になる。
Collaborative filtering より問題の難易度が相当上がるが、ぶっちゃけ使い道が思いつかない……。ので、具体的は提案手法のところまで読まなかった。ごめん。

[Weston+] Latent Collaborative Retrieval

Collaborative Filtering の手法は数あれど、それに query を加味したものはほとんどない、という abstract で始まり、えーそうかなあ、Personalized な IR とかでは近いことやってそうだけどなあ、といぶかしみつつも読みすすめていたのだが、"Q is the (finite) set of possible queries" というところでひっくり返ってしまい、断念。
いやあ有限のクエリーセットの研究はたしかに少ないかも。うんうん。

LDA のパープレキシティを使うとき


NLP2012 のポスター発表にて、LDA の文字を見かけるたびに思わずフラフラ〜と近寄り、あーだこーだ無責任なことを述べていたら、決まって「 shuyo さんですよね?」


なんでも、お茶の水大の小林先生の研究室の学生さんはみなさん揃って(かな?)トピックモデルをなにがしか絡めて研究されており、このブログの LDA ネタを参照していただけているという。なんとも有り難いというか照れくさいというか。
なにがしかのお役に立てているのはもちろん嬉しい反面、n_shuyo は言語処理も機械学習も専門家ではないので、ここに書いてあることを鵜呑みにはしないでいただくことはやっぱりお願いしておかなければ。
というわけで、不足や間違いの指摘は絶賛大歓迎>読者各位


で、ここまで前振り。
そうしたポスターの発表を拝見させていただいていた中で、パープレキシティ周りの扱いがちょっと気になったので、少し思うところをまとめてみた。なお、専門家ではないので鵜呑み(ry


まずは論より証拠と言うことで、LDA を Collapsed Gibbs Sampling(以下 CGS) 200周で解くにあたって、初期値(つまり各単語のトピック)をランダムに変えて 100回行い、そのパープレキシティがどういった分布になるか見てみたい。
具体的には、以前公開したLDAの実装を使って、以下のようなコマンドを100 回実行、200回イテレーションした後のパープレキシティでヒストグラムを描く。

$ ./lda.py -c0:50 --df=2 -k 10 -i 200

こうなった。


見てわかるとおり、結構バラつきがある。ちなみに、今回のトイサンプル(約3200語)程度であれば 200回もイテレーションすればパープレキシティの変化はすっかり落ち着くので、大きい値はまだ下がっている途中というわけではない。
つまりこれは LDA の CGS は初期値依存性が高いことを示している。
理論的にはエルゴード性が満たされていれば(そしておそらく満たされている)、MCMC は任意の初期値から定常分布におおむね収束する。つまり十分な回数回せば初期値との相関は 0 になるはずだが、200回程度のイテレーションではまだまだ足りないという事だ。


では一体何回回せばいいのか?
(ダメだろうなと思いつつ)試しにある初期値で10万回ほど回してみたが、200回目からほとんど変化がなかった。*1


実は Gibbs Sampling は職人芸を駆使しなくても棄却率が 0 の提案分布が得られるという大きなメリットと引き替えに、とてつもなく足が遅い(初期値非相関なサンプルを得るために必要なイテレーション回数が非常に多くなる)という特性がある。特に自然言語処理で使われる離散な Gibbs Sampling では、独立なサンプルを得るのは絶望的といっていいだろう。
根拠はないが、LDA の場合、上で試したデータサイズですら仮に 10^100 回イテレーションしたとしても、まだ相関 0 にはならないんじゃあないだろうか。試してみようにも先に宇宙が滅亡するので無理だけど。10^(10^100)回くらいイテレーションすればさすがに足りるのかなあ??(自信なし)
MCMC の最先端では、現実的な時間で独立なサンプルを得るための研究が(きっと)日夜行われているわけだけど、ここで使われている MCMC は「非相関? なにそれおいしいの?」と言わんばかりの sampling の真似事に過ぎないわけで、同じ言葉の別のものくらいに思っておいたほうがむしろ変な勘違いがなくていいのかもしれない。


まあそんなことはさておき、だからといってパープレキシティを指標として使えない使わないなんてことはない。
ただ、特性をわかってないと間違った考察や結論を導いてしまうかもしれない点は注意しておいた方がいいと思う。特にほかのモデルやパラメータでの結果と比較したい場合。
とはいえ、どうやっても真の値を求めることはできない以上たいしてできることはなく、初期値を変えて5〜10回とか推論を行い、一番いいパープレキシティを取るというのが関の山かなあ。まあそれだけでもずいぶん信頼感は上がる(気持ち的にw)。


今回は LDA での CGS を槍玉に上げたが、大域最適解が保証されている凸最適化でもない限り、常に当てはまりうる話。例えば EMA とか VB とか勾配法全般とかも全部 local minimum を求める手法だし。

*1:データがもっと大きくて、初期値を都合良く選べば、ちょっとした local minimum から脱出するところくらいは数千回程度で観察できるかも

Interactive Topic Modeling を読む (Hu, Boyd-Graber and Satinoff ACL2011)

9/3 の ACL 読み会で読む [Hu+ ACL11] Interactive Topic Modeling(ITM) の資料です(途中ですが力尽きましたすいません……)。

【追記】
ディリクレ木と Interactive Adding Constraints and Unassigning(←これがこの論文のキモ!) についての説明を追加しました。
【/追記】

Interactive Topic Modeling(ITM) とは

  • 通常の LDA は教師無しであり、結果の制御は基本的にできない
    • baseball と football が同じトピックに入って欲しいと思っても、うまく分類されない場合はパラメータを変えて試行錯誤するとか、分類後にトピックをクラスタリングするか
  • ITM は LDA に「単語AとBは同じトピックに入って欲しい」という制約を「後から」入れられるモデル

Notations

  • Ω_j : 同じトピックに属するべき単語の集合(制約)
    • Ω_i∩Ω_j=∅ (i≠j)
    • C_j = |Ω_j|
    • Ω=∪Ω_j
  • K : トピック数
  • V : 語彙数
  • J : 制約数
  • w_dn : 文書 d の n 番目の単語
  • z_dn : w_dn の潜在トピック
  • θ_d : 文書 d の トピック分布
  • φ_k, π_kj : トピック-単語分布(Dirichlet Tree)
  • T_{d,k} : 文書 d 内のトピック k を持つ単語数
  • P_{k,w} : トピック k を持つ単語 w の個数
  • P_{k,j} : 制約 j に属する、トピック k を持つ単語数
    • 論文には W_{k,j,w} = 制約 j に属する、トピック k を持つ単語 w の個数が導入されているが、制約は単語に対して高々1つなので、制約 j を持つ w に対しては常に P_{k,w} = W_{k,j,w} ゆえ不要。

Dirichlet Tree

  • ディリクレ木はディリクレ分布を階層化したもの
    • 1階層目のディリクレ分布から「制約 or 制約無しの単語」を引く
    • 制約を引いた場合は、さらに2階層目のディリクレ分布から「その制約に属する単語」を引く


[Hu+ ACL11] より

  • 2階層目のディリクレ分布のパラメータηがβと同じ値の場合、元のディリクレ分布と等価(後述)
    • ηをβより大きくすることで下図の(c)のような分布を構成できる(階層化していないディリクレ分布では(d)のような分布しか作れない)
      • (c) と (d) を間違っていたので、コメント欄でのご指摘により訂正(2011/9/7)


[Andrzejewski+ ICML09] より

  • LDA-DF (Andrzejewski+ ICML09) は、複数のディリクレ木の混合分布を用いる
    • 「木」がいっぱいあるから「森」(=DF:Dirichlet Forest)

モデル

P(\bf{W}, \bf{Z}, \bf{\theta},  \bf{\phi},  \bf{\pi})
= P(\bf{\phi}) P(\bf{\pi}) P(\bf{\theta}) P(\bf{Z}|\bf{\theta})) P(\bf{W}|\bf{Z}, \bf{\phi}, \bf{\pi})
= \prod_k\rm{Dir}(\bf{\phi}_k|\bf{\beta})\prod_{k,j}\rm{Dir}(\bf{\pi}_{kj}|\eta)\prod_d\rm{Dir}(\bf{\theta}_d|\alpha)\\\;\;\;\times\prod_{d,n}\rm{Multi}(z_{dn}|\bf{\theta}_d)\prod_{d,n}P(w_{dn}|z_{dn},\bf{\phi},\bf{\pi})

ただし

\begin{eqnarray}P(w|z=k,\bf{\phi},\bf{\pi})=\left\{ \begin{array}{ll}\phi_{kj}\pi_{jw}\; & \rm{if}\;w\in\Omega_j \\\phi_{kw} & \rm{otherwise} \\\end{array} \right.\end{eqnarray}

Collapsed Gibbs Sampling で推論

P(\bf{W}, \bf{Z})=\int P(\bf{W}, \bf{Z}, \bf{\theta},  \bf{\phi},  \bf{\pi})d\bf{\theta}d\bf{\phi}d\bf{\pi}
\propto\prod_d\frac{\prod_k\Gamma(T_{dk}+\alpha)}{\Gamma(T_{d\cdot}+K\alpha)}\prod_k\frac{\prod_{w\notin\Omega}\Gamma(P_{kw}+\beta)\prod_j\Gamma(P_{kj}+C_j\beta)}{\Gamma(P_{k\cdot}+V\beta)}\prod_{kj}\frac{\prod_{w\in\Omega_j}\Gamma(P_{kw}+\eta)}{\Gamma(P_{kj}+C_j\eta)}

この周辺分布から、次の full conditional を得る。

P(z_{dn}=k|w_{dn}=w,\bf{Z}^{-dn},\bf{W}^{-dn})
\begin{eqnarray}\propto\left\{ \begin{array}{ll}(T_{dk}^{-dn}+\alpha)\cdot\frac{P_{kj}^{-dn}+C_j\beta}{P_{k\cdot}^{-dn}+V\beta}\cdot\frac{P_{kw}^{-dn}+\eta}{P_{kj}^{-dn}+C_j\eta}\; & \rm{if}\;w\in\Omega_j \\(T_{dk}^{-dn}+\alpha)\cdot\frac{P_{kw}^{-dn}+\beta}{P_{k\cdot}^{-dn}+V\beta} & \rm{otherwise} \\\end{array} \right.\end{eqnarray}

トピック-単語分布の推定

P(w|z,φ,π)=Multi(ξ_k) とおいて、事後分布の平均によってξを推定

\begin{eqnarray}\xi_kw=\left\{ \begin{array}{ll}\phi_{kj}\pi_{kjw}=\frac{P_{kj}+C_j\beta}{P_{k\cdot}+V\beta}\cdot\frac{P_{kw}+\eta}{P_{kj}+C_j\eta}\; & \rm{if}\;w\in\Omega_j \\\phi_{kw}=\frac{P_{kw}+\beta}{P_{k\cdot}+V\beta} & \rm{otherwise} \\\end{array} \right.\end{eqnarray}

  • θ_k や perplexity は vanilla LDA と全く同様。

Interactive Unassignment

  • 学習をある程度行ったところで、制約を追加することを考える
    • 同じトピックに入って欲しい baseball と football が別のトピックに入ってしまった!
  • 推論の更新式の項の中で、制約の影響を直接受けるのは P_kj のみ
    • 追加・変更された制約について P_kj を数え直せば、それを初期値として新しいモデルの学習を行うことができる
pros
そこまで行った学習を活かすことができる
cons
すでに別々のトピックに割り振られた単語が多い場合、そこから Gibbs Sampling で抜け出すのは LDA の特性上難しい(イテレーションを数多く回さないといけない)
  • そこで部分的に単語のトピックの割り振り(つまり z_dn)を解除することで、その問題を解決する
    • 実装的には、z_dn に -1 にセットして、対応するカウンタも減ずる
    • 解除する範囲について、4通りの方針を提案
1. All
全ての単語のトピック割り振りを解除する(つまり最初から学習をやり直す)
2. Doc
「追加・変更された制約に属する単語を含む文書」の全単語のトピック割り振りを解除する
3. Term
「追加・変更された制約に属する単語」のトピック割り振りを解除する
4. None
トピック割り振りを解除しない(P_kj の数え直しのみ行う)
  • 論文は Doc が一番効率がよいと主張
  • 手元で実験した感じでも、その主張に一致する印象(定量的な評価ではありません)
    • None はもちろん、Term でも制約を入れた単語が同じトピックに割り振られるとは限らない
    • baseball と football に制約を入れて、しかもそれらのトピックをリセットしても、それぞれと共起度の高い別の単語(例えば baseball - pitcher, football - goal)が多く属するトピックに引っ張られる
  • したがって共起しうる単語(つまり同じ文書の単語)をまとめてリセットする方が望む結果が得られやすい

モデルについて考察

  • 制約がない場合、vanilla LDA と等価
  • β=ηのとき、vanilla LDA と等価(制約があっても)
  • CANNOT Link の無い LDA-DF にモデルとして等価
    • というわけで Interactive Unassignment が ITM のキモ

「β=ηのとき、vanilla LDA と等価」の証明

簡単のため V=3, w_1 と w_2 に制約が入っている場合で説明すると、
P(w_1, w_2, w_3|z) = Multi(ξ_1, ξ_2, ξ_3) について
P(ξ) = P(ξ_1, ξ_2)・P(ξ_3|ξ_1, ξ_2) である
ただし P(ξ_1, ξ_2)=Dir(η, η), P(ξ_3|ξ_1, ξ_2) = Beta(β, 2β) ( Dir(β, 2β) と同等 )。
このときη=βなら、P(ξ) は Dir(β, β, β) を積に分解したものに一致する■

実装してみた

Usage: itm.py [options]

Options:
  -h, --help            show this help message and exit
  -m MODEL              model filename
  -f FILENAME           corpus filename
  -b CORPUS             using range of Brown corpus' files(start:end)
  --alpha=ALPHA         parameter alpha
  --beta=BETA           parameter beta
  --eta=ETA             parameter eta
  -k K                  number of topics
  -i ITERATION          iteration count
  --seed=SEED           random seed
  --df=DF               threshold of document freaquency to cut words
  -c CONSTRAINT         add constraint (wordlist which should belong to the
                        same topic)
  -u UNASSIGN, --unassign=UNASSIGN
                        unassign method (all/doc/term/none)

まとめ

  • 結構おもしろい&使えるかも
    • もっといろいろ実験してみたい
    • 実装公開したので興味のある人は試してみて
  • η(=100)が大きすぎる気がする(グラフの赤)
    • apple や service(礼拝) など複数のトピックに分布する単語を全部同じ制約の単語に結びつけてしまう
    • η=2 (グラフの黒)くらいでいいのでは? 収束が遅い?
    • ヒューリスティックだが、ηを最初は大きく、徐々に小さくしていくとか。
    • 制約ごとにηを変えてもいいかもしれない
  • 多義性を持つ単語を制約に加えた場合の振る舞いも確認しておきたいところ

References

  • [Hu+ ACL11] Interactive Topic Modeling
  • [Blei+ 2003] Latent Dirichlet Allocation
  • [Andrzejewski+ ICML09] Incorporating Domain Knowledge into Topic Modeling via Dirichlet Forest Priors
  • [小林+ 2011] 論理制約付きトピックモデルのためのディリクレ森事前分布構成法

階層ディリクレ過程を実装してみる (3) HDP-LDA の更新式を導出 ( t の全条件付き分布)


しばらく間が空いたけど、今回も "Hierarchical Dirichlet Processes"(Teh+ JASA2006) を読んでいく。
この論文の5章に HDP の更新式が、6.1 章では HDP-LDA について書かれているのだが、最初と途中と最後が書かれていないので、どうやって導出したのかも、HDP-LDA の実装に直接必要な最終的な式も、自力で考えないといけなくて、エンジニア涙目。


今回見ていくのは 5章冒頭から 5.1章 Posterior sampling in the Chinese restaurant franchise の範囲。
HDP では DP が階層化されているので、Chinese restaurant process に従う確率変数は、客 x_ji が座っているテーブル t_ji と、テーブル t に出されている料理 k_jt の2つある。
というわけでこれらを交互にサンプリングするための全条件付き分布(full conditional)を導出してあげることになる。


以降、事後分布を導出していくが、論文では省略されている \boldsymbol{x} あるいは \boldsymbol{x}^{-ji} を given の項に適宜補っている。つーか、無いとわからん(だいぶ悩んだ)。


まず 5章に出てくる (30) 式。

  • \displaystyle f_k^{-x_{ji}}(x_{ji}) = \frac{\int f(x_{ji}|\phi_k)\prod_{j'i'\neq ji,z_{j'i'}=k}f(x_{j'i'}|\phi_k)h(\phi_k)d\phi_k}{\int \prod_{j'i'\neq ji,z_{j'i'}=k}f(x_{j'i'}|\phi_k)h(\phi_k)d\phi_k}  (30)

なぜか文章だけで(しかも微妙に曖昧に)書かれているが、実はこれは p(x_{ji}|\boldsymbol{t},\boldsymbol{k},\boldsymbol{x}^{-ji}) (ただし k=k_{jt_{ji}})である。
つまり \boldsymbol{\phi}=(\phi_1,\phi_2,\cdots) とすると、


\displaystyle p(x_{ji}|\boldsymbol{t},\boldsymbol{k},\boldsymbol{x}^{-ji})=\frac{p(x_{ji},\boldsymbol{x}^{-ji}|\boldsymbol{t},\boldsymbol{k})}{p(\boldsymbol{x}^{-ji}|\boldsymbol{t},\boldsymbol{k})}
\displaystyle =\frac{\int p(x_{ji},\boldsymbol{x}^{-ji},\boldsymbol{\phi}|\boldsymbol{t},\boldsymbol{k})d\boldsymbol{\phi}}{\int p(\boldsymbol{x}^{-ji},\boldsymbol{\phi}|\boldsymbol{t},\boldsymbol{k})d\boldsymbol{\phi}}
\displaystyle =\frac{\int p(x_{ji},\boldsymbol{x}^{-ji}|\boldsymbol{t},\boldsymbol{k},\boldsymbol{\phi})p(\boldsymbol{\phi})d\boldsymbol{\phi}}{\int p(\boldsymbol{x}^{-ji}|\boldsymbol{t},\boldsymbol{k},\boldsymbol{\phi})p(\boldsymbol{\phi})d\boldsymbol{\phi}}


ここで \phi_1,\phi_2,\cdots は i.i.d. ゆえ、分子分母とも \phi_1,\phi_2,\cdots ごとの積に分解できる。また x_ji らも t, k を止めれば条件付き独立かつそのトピックにひもづけられた φ_k のみに依存するので、積に分解できる。
そこで k=k_{jt_{ji}} と書くことにすると、


=\displaystyle \frac{\int p(x_{ji}|\phi_k)\prod_{h}\left(\prod_{x_{mn}:(m,n)\neq (j,i), k_{mt_{mn}}=h}p(x_{mn}|\phi_{h})\right)p(\phi_{h})d\phi_{h}}{\int \prod_{h}\left(\prod_{x_{mn}:(m,n)\neq (j,i), k_{mt_{mn}}=h}p(x_{mn}|\phi_{h})\right)p(\phi_{h})d\phi_{h}}


このとき、h=k 以外の因子は分子分母に共通のためキャンセルして、残ったものが f_k^{-x_{ji}}(x_{ji}) となる。


(32) 式は t の全条件付き事後分布。

  • p(t_{ji}=t|\boldsymbol{t}^{-ji},\boldsymbol{k})\propto\begin{cases}n_{jt}^{-ji}f_{k_{jt}}^{-x_{ji}}(x_{ji})&\text{if t previously used,}\\\alpha_0p(x_{ji}|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k})\hspace{5ex}&\text{if}\; t=t^{\text{new}}\end{cases}  (32)

これも導出してみよう。まずは t_ji=t、つまり既存のテーブルを draw する確率。
おっと、ここで given に省略されていた \boldsymbol{x} を補っておこう。でないとこの変形が出てこない。


\displaystyle p(t_{ji}=t|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x})=\frac{p(x_{ji}|t_{ji}=t,\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji})p(t_{ji}=t|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji})}{p(x_{ji}|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji})}


ここで分子の第1因子 p(x_{ji}|t_{ji}=t,\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji}) は 先ほど導出した f_k^{-x_{ji}}(x_{ji}) である。第2因子 p(t_{ji}=t|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji}) は Chinese restaurant franchise より n_{jt}^{-ji} に比例することがわかる(論文の (24) 式参照)。


次に t_ji=t^new、つまり新規テーブルを draw する確率。


\displaystyle p(t_{ji}=t^{\text{new}}|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x})=\frac{p(x_{ji}|t_{ji}=t^{\text{new}},\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji})p(t_{ji}=t^{\text{new}}|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji})}{p(x_{ji}|\boldsymbol{t}^{-ji},\boldsymbol{k},\boldsymbol{x}^{-ji})}


分子の第1因子は (31) 式にて展開されている。これは後で計算することにしよう。
分子の第2因子は、既存テーブルの場合と同様に (24) 式から α_0 に比例することがわかる。
分母はどちらの場合にも共通ゆえ、それらを比例定数に押し込めてしまえば (32) 式が得られる。


次に、さっき出てきた (31) 式もまじめに計算してみよう。

  • p(x_{ji}|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k})=\sum_{k=1}^K\frac{m_{\cdot k}}{m_{\cdot\cdot}+\gamma}f_k^{-x_{ji}}(x_{ji})+\frac{\gamma}{m_{\cdot\cdot}+\gamma}f_{k^{\text{new}}}^{-x_{ji}}(x_{ji})  (31)

t^new ということは、新しいテーブルに割り当てられる料理 k を決めなくては、 x_ji の確率を求めることが出来ないが、(31) 式の左辺には現れていない。ということは次のように周辺化される前の状態にして考える必要がある。


p(x_{ji}|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})=\sum_k p(x_{ji}, k_{jt^{\text{new}}}=k|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})


同じく given に \boldsymbol{x}^{-ji} を補っている。
ここで k はすでに割り振られているテーブルがある料理 k=1,……,K だけではなく、新規料理 k^new も動くので、


=\sum_{k=1}^K p(x_{ji}, k_{jt^{\text{new}}}=k|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji}) + p(x_{ji}, k_{jt^{\text{new}}}=k^{\text{new}}|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})
=\sum_{k=1}^K p(x_{ji}|k_{jt^{\text{new}}}=k,\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})p(k_{jt^{\text{new}}}=k|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})\\\;\;+p(x_{ji}|k_{jt^{\text{new}}}=k^{\text{new}},\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})p(k_{jt^{\text{new}}}=k^{\text{new}}|\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})
=\sum_{k=1}^K f_k^{-x_{ji}}(x_{ji})\frac{m_{\cdot k}}{m_{\cdot\cdot}+\gamma} + p(x_{ji}|k_{jt^{\text{new}}}=k^{\text{new}},\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})\frac{\gamma}{m_{\cdot\cdot}+\gamma}


p(k|・) たちは、料理 k が割り当てられているテーブル数 m_jk を使って、論文の (25) 式に示されている確率がそれぞれ割り当てられることになる。
ここで、p(x_{ji}|k_{jt^{\text{new}}}=k^{\text{new}},\boldsymbol{t}^{-ji},t_{ji}=t^{\text{new}},\boldsymbol{k},\boldsymbol{x}^{-ji})=f_{k^{\text{new}}}^{-x_{ji}}(x_{ji}) とおけば、(31) 式が得られる。


最後に f_{k^{\text{new}}}^{-x_{ji}}(x_{ji}) は、つまりまだ1人も食べていない料理(トピック)の元での x_ji を draw する確率なので、事前分布の通りの確率となる。ただし k は定まっていないわけで、それは周辺化により消される必要がある。つまり

  • f_{k^{\text{new}}}^{-x_{ji}}(x_{ji})=p(x_{ji})=\int p(x_{ji},\phi)d\phi=\int p(x_{ji}|\phi)p(\phi)d\phi


(31) 式と (32) 式の間に さらっと書かれている通りの式となる。
この調子で k のサンプリングも同様に計算していくのだけど、長くなってきたので続きは次回。

階層ディリクレ過程を実装してみる (2) HDP-LDA の更新式を導出・前編

階層ディリクレ過程を実装してみる (1) HDP-LDA と LDA のモデルを比較 - Mi manca qualche giovedi`? の続き。
今回も [Teh+ 2006] に基づいて、Chinese Restaurant Franchise(中華料理店フランチャイズ, CRF) の枠組みで Hierarchical Dirichlet Process(階層ディリクレ過程, HDP) の Collapsed Gibbs sampling 推論を行う場合の更新式を導出していく。


まず今回は一般の HDP を CRF に落とすところ。次回はそこから full conditional を導出([Teh+ 2006] にある f_k^{-x_{ji}}(x_{ji}) および t や k の事後分布を導出)、そして次々回あたりで、それらの更新式を HDP-LDA に当てはめた場合(つまり前回記事の base measure H と emission? F(φ) に具体的な分布を適用する場合)をやっつけるイメージ。


まず、上で書いたように CRF の枠組みを導入するわけだが、その理由は (Hierarchical) Dirichlet Process のままでは無限回サンプリングしなければならなくなってしまうから。CRF なら有限回で済ませられる。
本来ならここで Stick-Breaking Process とか CRF とかちゃんと説明した方がいいんだろうが、ずばっと省略して、CRF の記法の説明に入ってしまう。
ので、いきなり「客」とか「テーブル」とか「料理」とか「店」という単語が出てくるが、まあ、なんと言うか、ほんと申し訳ない(苦笑)。
ちなみに HDP-LDA の場合だと、「店=文書」、「料理=トピック」、「客=単語(x_ji)」、であり、「テーブル」は客と料理を(つまり、単語とトピックを)結びつけるものというメタファー、というほど似てる気はしないが、まあそういう対応である、というひどい説明でお茶を濁しておく……。


K を「サンプリング時点での有効な(つまり少なくとも1つ以上の客やテーブルが割り当てられている)料理の個数」とし、\phi_1,\cdots,\phi_K \sim H をその K 個の料理とする。
j を店のインデックスとし、θ_ji を i 番目の客が食べている料理、ψ_jt を t 番目のテーブルに提供されている料理とする。
つまり、客 x_ji が着いているテーブルが t_ji で、テーブル t に提供されている料理が k_jt のとき、\theta_{ji}=\psi_{j{t_ji}}=\varphi_{k_{jt_{ji}}} ということである。


少々ややこしいが、要は θ_ji や ψ_jt は、最初に H からサンプリングした料理 φ_k のどれかである、ということ。
下の図で言えば、店1番の客7番はテーブル3番に着いており、料理1番を食べている(一番上の囲みの左から三番目)。
それを θ_17 = ψ_13 = φ_1 という式で表そうという考え方なわけだ。


【Teh+ 2006 より】


さて、こういう設定の元で CRF の枠組みを柔らかく言うと、「来店した客は、客の多いテーブルに着きたがる」「新規テーブルに着く可能性も若干残っている」。
数式で書くと次の通り。


\theta_{ji}|\theta_{j1},\cdots,\theta_{j,i-1},\alpha_0,G_0 \;\sim\; \sum_{t=1}^{m_{j\cdot}}\frac{n_{jt\cdot}}{i-1+\alpha_0}\delta_{\psi_{jt}}+\frac{\alpha_0}{i-1+\alpha_0}G_0


n_jtk は「j 番目の店の、t 番目のテーブルで、k 番目の料理を食べている客の数」、インデックスが点になったものはその周辺化というよくある記法としている。
この式では i 番目に新しく来た客がどのテーブルに着くかを示しており、先客がいる t 番目のテーブルに着く確率が \frac{n_{jt\cdot}}{i-1+\alpha_0}、客のいない新規テーブルに着く確率が \frac{\alpha_0}{i-1+\alpha_0} という意味の式である。
新規テーブルに着く場合は、H から作られたディリクレ過程 G_0 からのサンプリングが行われるわけだが、それも同じように CRF に落とし込むことで、上とよく似た式が得られる。


\psi_{jt}|\psi_{j1},\cdots,\psi_{j,t-1},\gamma,H \;\sim\; \sum_{k=1}^{K}\frac{m_{\cdot k}}{m_{\cdot\cdot}+\gamma}\delta_{\varphi_k}+\frac{\gamma}{m_{\cdot\cdot}+\gamma}H


m_jk は「j 番目の店の、k 番目の料理が提供されているテーブルの数」で、インデックスが点は以下同文。
やはり同様に、「 k 番目の提供済みの料理」か「新規料理」がそれぞれの確率で選ばれる。新規料理の場合は base measure H から新しい料理が選ばれ、 K は1つ増やされることになる。
なお、α_0 や γ はなにがしかのハイパーパラメータであり、ここでは詳細は省略する。


どうにもややこしくてしかたないが、最初に書いたとおり、これも「ディリクレ過程のままでは、無限回サンプリングしなければならない」のを回避したいがため。
つまり、正攻法では事実上サンプリングできないディリクレ過程を、有限回の初等的な手順でサンプリングできるようにしたアルゴリズムだ、と考えれば少しは心に平安が訪れる……のかもしれない(苦笑)。

階層ディリクレ過程を実装してみる (1) HDP-LDA と LDA のモデルを比較

Hierechical Dirichlet Process(HDP, 階層ディリクレ過程) を実装するのに必要な式を導出しつつ、実装してみるお話。
参照するのはこちらの論文。


しかし全部拾っていくのは大変なので、ちょびっとずつ小分けに、かつ他の方がブログとかで書いていてくれそうなところ(ディリクレ過程とか、中華料理店フランチャイズとか)はまるっと飛ばして、実装に必要な定式化&導出にしぼってまとめていくつもり。*1
とりあえず syou6162 さんや nokuno さんのこの辺の記事とかご参考。


HDP 自体は単なるノンパラベイズな分布なので、なにがしかのアプリケーションの中で実装することになる。ここでは、LDA のトピック分布を HDP にした HDP-LDA を題材としよう。
通常の LDA と比較した HDP-LDA のメリットは、トピック数をあらかじめ決めなくても良いこと(学習により適切なトピック数が自動的に決まる)。また LDA の一般的な定式化で現れる、トピックのディリクレ分布のハイパーパラメータαにあたるパラメータも階層化(確率変数化)され、自動的に決定(しかも非対称)してくれるので、perplexity などの指標が改善されることが期待できる。


では LDA (Smoothed LDA) と HDP-LDA のモデルを見てみよう。
実はどちらも同じグラフィカルモデルで表すことができる(ハイパーパラメータは省略)。



グラフィカルモデルは同じだが、生成過程が異なる。
まず HDP-LDA の生成過程は参照論文に載っているとおり。

  • G_0 〜 DP(γ,H)
  • G_j 〜 DP(α_0,G_0)
  • θ_ji 〜 G_j
  • x_ji 〜 F(θ_ji)


H は base measure、F は与えられた θ_ji によって決まる x_ji の分布。HDP を適用するアプリケーションに応じて、これらを適切なものに設定することになる。
トピック言語モデルの場合は、H として対称なディリクレ分布 Dir(β) を取る。これは単語多項分布の事前分布で、LDA の一般的な定式化に出てくる Dir(β) に相当する。
また、この構成において θ_ji は H の台(V-1 次元の単体, V は語彙数)上の点であり、それが語彙の多項分布のパラメータとなっているので、 F(θ_ji) としてはその多項分布を取る。


LDA の生成過程は参照論文に載っていないが、以下のような構成になっているはず*2。H と F は HDP-LDA と同様。

  • \varphi_k\sim H,\;\;G_0=\sum_{k=1}^K\delta_{\varphi_k}
  • G_j 〜 Dir(αG_0)
  • θ_ji 〜 G_j
  • x_ji 〜 F(θ_ji)


つまり LDA と HDP-LDA の実質的な違いは G_0 の生成にある。
LDA では、H からサンプリングした K 個の {φ_k} を台とする対称な measure を G_0 としている。
一方の HDP-LDA では、G_0 は DP(γ,H) からサンプリングする。これは H を base measure とするディリクレ過程であり、つまり G_0 は、H からサンプリングした無限個の点を台とする非対称な(指数オーダーで重みが減衰する) measure である。


もう少し柔らかく説明してみる。
割り振られたトピックを区別するのに k=1, …, K, … というインデックスを与えるのではなく、φ_1, …, φ_K, … という、とある空間内にある(それぞれ異なる)点を使っているというのが今回のミソ。
その点は V 次元線形空間の点 φ_k=(φ_k1, ……, φ_kV) で、φ_kv≧0, Σ_v φ_kv=1 を満たしている。つまり、V 次の多項分布を定めることができる点であり、トピック φ_k に対して、トピック-単語分布をそのまま φ_k 自身で与えるという、こう見えてなかなか効率的な構成になっている。
ここまでは LDA でも HDP-LDA でも一緒。違いは、そういう φ_k という点をぴったり K 個しか考えないのか、いくつでも考えられるようにしておくのか、という部分であり、それが G_0 の構成に現れている、というわけだ。


つまり、トピックの生成に「ディリクレ分布を使って定数個」か、「ディリクレ過程を使って可変個」か、が LDA と HDP-LDA のほぼ唯一の違い、と言えばすっきりわかりやすい……と思うのは気のせいだろうか(苦笑)。


ちなみに、Latent Dirichlet Allocations(LDA) の実装について - Mi manca qualche giovedi`? で引用したような、よく見る LDA のグラフィカルモデルや生成過程とはちょっと違っているが、ちゃんと等価なモデルである。pLSA をベイズ化したものとして LDA を構成した場合も、また別のグラフィカルモデルが得られたりする。余談だけどね。


これらのモデルに対して、その推論には参照論文にあるとおり Collapsed Gibbs sampling を使うのだが、その更新式の導出は次回以降。

*1:中華料理店フランチャイズは余裕があったらなんか書くかも

*2:これを論文に書いていてくれれば、HDPがわかんないと騒いでいたら、実はLDAがわかってなかった!? でござるの巻 - Togetter のような無理解を披露しなくて良かったはず……と言い訳してみるw

どうしてサンプリングで推論できるの?

TokyoNLP #5 で「はじめてのトピックモデル」的なのをやろうと思ってたんだけど、地震とかとかで1ヶ月延びている間に「はじめての生成文法」にすり替わってた。あれー?
で、次回はその後編の予定だし、その次に TokyoNLP 的なところでなんか話す機会をもらえる頃にはまた別のネタができてるだろうし、うーん、「はじめてのトピックモデル」はお蔵入りかな。
というわけで、なんか最近 LDA のことをあれこれ書いてるのは、そのへんの蔵出し。


で、そんなネタの内、昨日の記事でうっかり書き忘れてた一口メモ。


どうして LDA で Collapsed Gibbs sampling すれば、つまり乱数で適当に選ぶことを繰り返すだけで推論できてしまうんだろう?
わかっている人には簡単で当たり前の話だが、正直恥ずかしながら最初はどうしてそうなるのかさっぱりわからなかったw


普通のベイジアンの枠組みでは、事後分布の最大値をとることで推論を行っている*1
ところが事後分布が書き下せなかったり、最適化法をうまく使えない形だったりすると、何か工夫をしてあげないといけない。
事後分布を計算できる形に近似するというアプローチが変分ベイズ


一方、事後分布からサンプリングすることができれば、最大値(の近辺)が確率的に求まる。柔らかーく言うと、「サイコロ2個を何回か振ったら、確率のもっとも高い7が一番出やすいよね。ちょっとずれた6や8も許してくれれば、さらに確率アップ!」ということ。
もちろん、最適化法が使えないくらい複雑な事後分布から簡単にサンプリングすることは出来ないので、そこもまた一工夫が入る。


LDA の場合はギブスサンプリングを使ってみた。
ギブスサンプリングに代表されるマルコフ連鎖モンテカルロ法(MCMC)は、連鎖的にサンプリングを行うが、1つ前の値に強く影響されてしまうので、何回も繰り返すことで初期値から独立したサンプリング値(=事後分布の最大値の近辺、かもしれない点)を得る*2
これが、乱数で選んでいるうちにいつのまにか推論が出来てる仕組み。

*1:平均やメディアンを取ることもある

*2:実際はそのサンプリング値を尤度やパープレキシティで評価する。また局所解に捕まる可能性もあるが、ここではおいとく