LDA入門

57,179 views
56,708 views

Published on

0 Comments
91 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
57,179
On SlideShare
0
From Embeds
0
Number of Embeds
2,707
Actions
Shares
0
Downloads
544
Comments
0
Likes
91
Embeds 0
No embeds

No notes for slide

LDA入門

  1. 1. Latent Dirichlet Allocation入門 @tokyotextmining 坪坂 正志
  2. 2. 内容 • NLPで用いられるトピックモデルの代表である LDA(Latent Dirichlet Allocation)について紹介 する • 機械学習ライブラリmalletを使って、LDAを使 う方法について紹介する
  3. 3. Why LDA • 白鵬が単独首位 琴欧洲敗れる
  4. 4. Why LDA • 白鵬が単独首位 琴欧洲敗れる • 人は上の文を見て相撲に関係する文である ことを理解できる – 文中に相撲という単語は出てこないのにもかか わらず
  5. 5. Why LDA • 白鵬が単独首位 琴欧洲敗れる • 人は上の文を見て相撲に関係する文である ことを理解できる – 文中に相撲という単語は出てこないのにもかか わらず • 単語は独立に出現しているのではなく、潜在 的なトピックを持ち、同じトピックを持つ単語 は同じ文章に出現しやすい
  6. 6. Why LDA • 文章/単語のトピックを推定すると何の役にた つか? • 文章分類 • 次元削減 • 言語モデル – 情報検索[Wei and Croft 2006]
  7. 7. 概要 • LDA – 確率モデル – 推論アルゴリズム – ハイパーパラメータの調整 – 並列化 – 高速化 • Mallet – Malletを使ったLDA
  8. 8. 文章生成モデル • トピック数Tはあらかじめ決める • 各トピックごとに単語出現確率 を生成 – ディリクレ分布から生成 ~Dir() • 文章ごとにトピック確率 を生成する – ディリクレ分布から生成 ~Dir() – 各文章において以下のように単語を生成していく • ~Multi( )と単語のトピックを生成する • ~Multi( )とトピックに応じた確率で単語を生成
  9. 9. パラメータは未知 • 実際にはパラメータは推定する必要がある [Steyvers and Griffiths 2007]より
  10. 10. 推論アルゴリズム • Bleiの元論文[Blei+ 2003]では変分ベイズを 使ったパラメータ推定を行っている • しかし、実用的には後にでたGibbs samplerを 使ったパラメータ推定法がよく用いられる [Griffiths and Steyvers 2004] – 一回当たりの計算が軽い – 数式が簡単(実装コストが低い) • 他にもcollapsed変分ベイズという方法もある [Teh+ 2007, Asuncion+ 2009]
  11. 11. Collapsed Gibbs sampler • 文章中の各単語に対して、初期状態としてランダムなトピック を割り当てる • 各単語に関してトピックを逐次更新する – 直感的には(文章中でのトピックtの割合) * (その単語におけるトピッ クtの割合) – 一つの文章では同じトピックがでやすい – 単語ごとに出やすいトピックと出にくいトピックがある | : 文章dに出現するトピックtに属する単語の合計 | : トピックtに属する単語wの合計 ⋅| : トピックtに属する単語の合計
  12. 12. ハイパーパラメータの影響 • 多くの論文では, を天下り的に設定するこ とが多い – 実際は, の値によってPerplexityなど変わってく る [Asuncion+ 2009] • また、 = 0.1などと各トピックの事前パラメー タはすべて同じにすることが多い
  13. 13. でも実際は • の値をトピックごとに差を設けることにより、 トピックの出やすさを表現できる [Wallach+ 2009]より
  14. 14. 他のストップワードへの対応方法 [Wilson and Chew 2010] • サンプリングの際の| などの計算で単語ご とに異なる重みづけを用いて計算する – 重み付けにはtf-idf, PMIなどを用いる
  15. 15. どうやって推定するか [Wallach+ 2009]より • 階層的なモデルを立てる • 一定間隔でハイパーパラメータを最適化する – 実用上はこちらが階層的モデルと比べ精度も変 わらず、高速 – Malletではこちらを採用
  16. 16. 並列化 • マルチコアとかグリッドとか流行ってる • LDAにおいても並列化しようという話はいくつ かある – マルチコア[Newman+ 07] – グリッド (Mapreduce/MPIを使う)[Wang+ 2009] – GPGPU [Yan+ 2009]
  17. 17. 並列化 • 更新式
  18. 18. 並列化 • 更新式 文章ごとに独立 • 文章を各プロセッサに分散して配置する • | , .| は各プロセッサで独立に持つ – 定期的にグローバルな値を計算し直し、同期する – グローバルな値をmemcachedに持つという話も ある[Smola and Narayanamurthy 2010]
  19. 19. 並列化 • 1プロセッサあたりの時間/空間計算量 – プロセッサの数をPとする – 各プロセッサには文章が均一に割り当てられて いるとする 時間計算量 空間計算量 LDA O(NT) O(N + (D + W) * T) PLDA O(NT/P) O(N / P + (D / P + W) * T)
  20. 20. 高速化 • トピック数Tが多くなっていくとナイーブな実装 だと、一回のGibbs samplerにかかる時間が O(T)であるため、計算にかかるコストが大きい • 効率的なサンプリング方法が存在[Yao+ 2009]
  21. 21. 更新式の展開 • 更新式を展開する • 各項のトピックについての総和を保持
  22. 22. サンプリングの高速化 • 一様分布 ∼ ( + + )から乱数を生成 • 経験的に90%以上がの部分に落ちる • トピック-単語カウントに相当する項に関して 高速なサンプリングができればよい
  23. 23. サンプリングの高速化 • 上の式に従って高速にサンプリングするため に| の降順でトピックからサンプリングされ るかどうかを見ていく
  24. 24. 高速化のためのデータ構造 • | の頻度の降順でならんだ配列を維持する – ここで単語の総出現回数よりも非ゼロの要素数が 少ないことを利用するとメモリが大幅に節約できる – Malletでは(トピックID,出現回数)の組を32bitのint の形で保持している • このため出現回数が多い単語に関してはオーバフロー する危険がある トピックID 3 2 4 1 出現回数 8 6 6 3
  25. 25. 高速化の効果  データセットにはNIPS Dataset(1500文章, 約190万トークン) を使用  plda(code.google.com/p/plda)とmalletでトピック数を変えたときの 実行時間を測定  反復回数は両方ともに100回とした 3500 3000 2500 2000 実行時間(sec) plda 1500 mallet 1000 500 0 0 200 400 600 800 1000 1200 # of topics
  26. 26. 高速化の効果 • 前のグラフを対数領域でプロットしたもの 10000 1000 plda 100 mallet 10 1 1 10 100 1000
  27. 27. Malletとは • MAchine Learning for LanguagE Toolkit • Javaベースの統計的自然言語処理、文章分 類、トピックモデリングなどのパッケージ • Andrew McCallumを中心として開発が行われ ている
  28. 28. Instance • Malletにおいてデータ一つ一つはInstanceと いうオブジェクトで表現される – 文章集合中の文章に相当する • 4つのメンバ変数を持つ – Name (Instanceの名前 今回は使わない) – Data (入力データ) – Target/Label (出力 今回は使わない) – Source (Instanceのソース)
  29. 29. Iterator • InstanceにはIteratorを経由して、アクセスされ る – XML,ディレクトリ配下のファイルなど様々な入力 形式に対応できる • 大抵の場合はCsvIteratorが使える
  30. 30. CsvIterator CsvIterator(String fileName, Pattern lineRegex, int dataGroup, int targetGroup, int uriGroup) • 対象のfileNameの各行に対してlineRegexで マッチを行い、data,target,uri(name)に指定さ れたグループの値を代入する • Ex: name label dataと空白区切りで並んでい るデータから読み取る場合 – new CsvIterator(fileName, (¥¥w+)¥¥s+(¥¥w+)¥¥s+(.*), 3, 2, 1)
  31. 31. Pipe • CsvIteratorで読んだInstanceに入っているdata は単なるString – Malletで扱う形式に変換する必要がある • Instance Pipe.pipe(Instance inst) – 与えられたInstanceを別のInstanceに変換して返す – TokenSequence2FeatureSequenceなど様々な変換 用のPipeが存在する • SerialPipe(ListPipe) – 指定されたlist中のpipeを順番に適応するPipe
  32. 32. InstanceList • Instanceのリストを表現する • InstanceList(Pipe pipe) – InstanceListに入ってくるInstanceを処理するpipe を指定する • void InstanceList.addThruPipe(Iterator inst) – InstanceListにpipeを通しながらIterator経由で データをロードする
  33. 33. データのロード • PLDA形式のデータを読み込む a 2 is 1 character 1 a 2 is 1 b 1 character 1 after 1 class MyPipe extends Pipe{ static InstanceList load(String fileName) { @Override ArrayListPipe pipeList = new ArrayListPipe(); public Instance pipe(Instance inst) { pipeList.add(new MyPipe()); String data = (String)inst.getData(); pipeList.add(new TokenSequence2FeatureSequence()); String array[] = data.split(¥¥s+); InstanceList list = TokenSequence ret = new TokenSequence(); new InstanceList(new SerialPipes(pipeList)); for(int i = 0 ; i array.length ; i += 2){ CsvIterator it = new CsvIterator(fileName, (.*),1, 0,0); String word = array[i]; list.addThruPipe(it); int freq = Integer.parseInt(array[i + 1]); return list; for(int f = 0 ; f freq; ++f){ } ret.add(new Token(word)); } } inst.setData(ret); return inst; } }
  34. 34. ParallelTopicModel • マルチスレッドなLDA実装 static ParallelTopicModel train(int numberOfTopics , InstanceList training) { ParallelTopicModel ptm = new ParallelTopicModel(numberOfTopics); ptm.addInstances(training); ptm.estimate(); return ptm; } • 訓練後のデータの保存にはwrite(File f)を使う。 – シリアライズされたParallelTopicModelが保存される – static ParallelTopicModel read(File f)で読み込める
  35. 35. マルチスレッドのパフォーマンス • UCI Datasetのnytimesデータを使用 – 30万文章, 10万単語 – 約1億トークン – トピック数500, 反復回数 500回 1スレッド 276min 33sec 4スレッド 179min 45sec Core i7 920 , JDK 1.6.16 (-server –Xmx1500m)
  36. 36. トピックの代表的単語の抽出 • printTopWordsを使う 0 0.1847 algorithm learning function gradient convergence parameter error iteration vector 1 0.03452 map dominance ocular development pattern mapping organizing kohonen eye 2 0.01327 hint return data cost market stock prediction load subscriber 3 0.71807 case term result form consider general defined order paper 4 0.02225 face images recognition image faces representation hand video facial 5 0.42392 values line order point number high step result factor 6 0.01545 disparity gamma game play player partition games board operator 7 0.09096 local point region surface contour segment data field path 8 0.04591 prediction series error network predict training road predictor committee 9 0.12844 vector matrix linear space component dimensional point data transformation ...
  37. 37. 新規文章に関する推論 • getInferencer()を呼びTopicInferencerを取得 する • TopicInferencerのgetSampledDistributionを使 うと各トピックに帰属する確率を取得できる
  38. 38. 参考文献 • [Asuncion+ 2009] On smoothing and inference for topic models, UAI • [Blei+ 2003] Latent Dirichlet allocation, JMLR • [Griffiths and Steyvers 2004] Finding scientific topics, PNAS • [Newman+ 2007] Distributed inference for latent Dirichlet allocation, NIPS • [Smola and Narayanamurthy 2010] An architecture for parallel topic models, VLDB • [Steyvers and Griffiths 2007] Probabilistic topic models, In Handbook of Latent Semantic Analysis • [Teh+ 2007] A collapsed variational Bayesian inference algorithm for latent Dirichlet allocation, NIPS • [Wallach+ 2009] Rethinking LDA: Why Priors Matter, NIPS • [Wang+ 2009] PLDA: Parallel Latent Dirichlet Allocation for Large-scale Applications, AAIM • [Wilson and Chew 2010] Term Weighting Schemes for Latent Dirichlet Allocation, ACL • [Yan+ 2009] Parallel Inference for Latent Dirichlet Allocation on Graphics Processing Units, NIPS • [Yao+ 2009] Efficient methods for topic model inference on streaming document collections, SIGKDD
  39. 39. 参考文献2 • [Bao and Chang 2010] AdHeat: an influence-based diffusion model for propagating hints to match ads • [Chen+ 2009] Collaborative filtering for Orkut communities : discovery of user latent behavior • [Lau+ 2010] Best topic word selection for topic labelling, Colling • [Phan+ 2008] Learning to classify short and sparse text web with hidden topics from large-scale data collections • [Wei and Croft 2006] LDA-based document models for ad-hoc retrieval, SIGIR

×