Infer.NETを使ってLDAを実装してみた   @第五回自然言語処理勉強会            坪坂正志   m(dot)tsubosaka@gmail.com
Probabilistic Programming• 確率モデルをプログラムの形で書く• パラメータの推論の部分のコードはユーザが  書かずに自動で推論が行える• Ex: – BUGS (DSL) – Hierarchical Bayes Co...
メリット• 複雑な更新式を自分で計算する必要がなくなる – ex: 下のようなの                第5回自然言語処理勉強会   3
• コードを見たときに元のモデルがイメージでき  る – 推論アルゴリズムの結果から元のモデルを復元   するのは難しい – 書いた人はわかってても引き継ぐ人は。。。         第5回自然言語処理勉強会      4
• 変分ベイズ法、EP法、MCMCとか知らない人  でも確率モデルが作れる• 問題に合わせてモデルの形を変更するみた  いなことが機械学習のエキスパートでなくても  可能         第5回自然言語処理勉強会      5
デメリット• 自分でチューニングしたコードを書いたほうが  実行時間・メモリ使用量ともに効率的• 扱えるモデル・推論アルゴリズムがツールが  サポートしている形式に依存する         第5回自然言語処理勉強会    6
Infer.NETとは• Microsoft Researchが学術用途のために公開して  いるグラフィカルモデル上のベイズ推論を行うた  めのフレームワーク – Tom Minka, John Winn, John Guiver, Anith...
簡単な例• 正規分布N(μ,1)に従うN個のデータx_iを観測した  とする• また平均μの事前分布として正規分布N(0,100)を  仮定する• PRML 2.3.6を読めばμの事後分布はであることは分かる。           第5回自然言...
モデルを表現するコード1: Variable<int> N = Variable.New<int>().Named("N");2: Range i = new Range(N).Named("i");3: Variable<double> me...
推論部分N.ObservedValue = 100;X.ObservedValue = data; // double[] dataInferenceEngine engine = new InferenceEngine(new Variati...
実行結果• 理論値と一致する. – (パラメータが一つしかなく、変分近似の部分で近   似が行われてないため)         第5回自然言語処理勉強会    11
LDA[Blei+ 2003]• 自然言語処理でよく用いられている文章の生  成モデル• 詳しくは自分の前の発表とかを参考にしてく  ださい(http://slidesha.re/cWr4cs)             第5回自然言語処理勉強会...
生成モデル• 各トピックtごとにW(語彙数)次元の単語出現確  率ベクトルをディリクレ分布から生成 –  ∼ Dir()• 文章ごとにT次元のトピック確率ベクトルをディリ  クレ分布から生成 –  ∼ Dir()• 各文章において以下のように単...
パラメータベクトルの定義• ここでSparsityはNLPでよくでてくる高次元のベクトルでもそのほと  んどが0であるという性質を表すために用いられる  – SparsityオブジェクトはSparsity.ApproximateWithTole...
単語生成部分の定義• usingブロックを使ってfor文やswitch文を表現  できる           第5回自然言語処理勉強会      15
Break Symmetry• モデルがトピックに関して対象なのでPhiに関  してランダムな初期化を行う必要がある         第5回自然言語処理勉強会      16
推論事後分布が格納される         第5回自然言語処理勉強会   17
実験• BBCの記事2225本のデータセットからランダムに  1000件の記事を選択して、トピック数8で推論を  行った – データセット: http://mlg.ucd.ie/datasets/bbc.html – 2225件全部使おうとする...
Topic 0          Topic 1            Topic 2       Topic 3 take million       year two      time against      on show call ...
コミュニティ抽出法への応用• コミュニティ抽出とはグラフ上からリンクが密  な部分を抽出する手法である – 確率モデルを使ったコミュニティ抽出法について   は以下の文献が参考になる – 山田,無限関係モデルとその周辺  • http://ww...
ICMc: (Interaction Component Model for Communities)• http://arxiv.org/abs/0803.1628• 以下のようなグラフの生成モデルを考える• 各トピックtごとにV(頂点数)次...
Infer.NETによる実装(モデル部分)Variableint numEdges = Variable.Newint();Range T = new Range(numTopics);Range E = new Range(numEdges)...
• Karate club data(Zachary 1977) に対してトピッ  ク数2で推論した結果のトピック帰属確率の可  視化               第5回自然言語処理勉強会            23
まとめ• Infer.NETを使って、文章生成モデルのLDAを  実装する手順を紹介した。• 今後、個別の問題に対してモデリングを行い、  評価して、必要があればモデルを改良すると  いう需要は高まっていくと思われる、そのよう  なときにInf...
参考文献• Infer.NET users guide : Tutorial and examples : Latent  Dirichlet allocation http://research.microsoft.com/en-  us/u...
Upcoming SlideShare
Loading in …5
×

Infer.NETを使ってLDAを実装してみた

7,314 views
7,215 views

Published on

Infer.NETを使ってLDAを実装してみた- 第五回自然言語処理勉強会

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

No Downloads
Views
Total views
7,314
On SlideShare
0
From Embeds
0
Number of Embeds
2,569
Actions
Shares
0
Downloads
43
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Infer.NETを使ってLDAを実装してみた

  1. 1. Infer.NETを使ってLDAを実装してみた @第五回自然言語処理勉強会 坪坂正志 m(dot)tsubosaka@gmail.com
  2. 2. Probabilistic Programming• 確率モデルをプログラムの形で書く• パラメータの推論の部分のコードはユーザが 書かずに自動で推論が行える• Ex: – BUGS (DSL) – Hierarchical Bayes Compiler (DSL) – Factorie (Scala) – Infer.NET (C#) 第5回自然言語処理勉強会 2
  3. 3. メリット• 複雑な更新式を自分で計算する必要がなくなる – ex: 下のようなの 第5回自然言語処理勉強会 3
  4. 4. • コードを見たときに元のモデルがイメージでき る – 推論アルゴリズムの結果から元のモデルを復元 するのは難しい – 書いた人はわかってても引き継ぐ人は。。。 第5回自然言語処理勉強会 4
  5. 5. • 変分ベイズ法、EP法、MCMCとか知らない人 でも確率モデルが作れる• 問題に合わせてモデルの形を変更するみた いなことが機械学習のエキスパートでなくても 可能 第5回自然言語処理勉強会 5
  6. 6. デメリット• 自分でチューニングしたコードを書いたほうが 実行時間・メモリ使用量ともに効率的• 扱えるモデル・推論アルゴリズムがツールが サポートしている形式に依存する 第5回自然言語処理勉強会 6
  7. 7. Infer.NETとは• Microsoft Researchが学術用途のために公開して いるグラフィカルモデル上のベイズ推論を行うた めのフレームワーク – Tom Minka, John Winn, John Guiver, Anitha Kannanの 四人で開発を行っている – Probabilistic Programmingを行うためのソフトウェア – http://research.microsoft.com/en- us/um/cambridge/projects/infernet/• 商用利用禁止 第5回自然言語処理勉強会 7
  8. 8. 簡単な例• 正規分布N(μ,1)に従うN個のデータx_iを観測した とする• また平均μの事前分布として正規分布N(0,100)を 仮定する• PRML 2.3.6を読めばμの事後分布はであることは分かる。 第5回自然言語処理勉強会 8
  9. 9. モデルを表現するコード1: Variable<int> N = Variable.New<int>().Named("N");2: Range i = new Range(N).Named("i");3: Variable<double> mean =Variable.GaussianFromMeanAndVariance(0, 100);4: VariableArray<double> X =Variable.Array<double>(i).Named("X");5: X[i] =Variable.GaussianFromMeanAndVariance(mean, 1.0).ForEach(i); • 非常に簡潔かつ直接的にモデルが書けてる 第5回自然言語処理勉強会 9
  10. 10. 推論部分N.ObservedValue = 100;X.ObservedValue = data; // double[] dataInferenceEngine engine = new InferenceEngine(new VariationalMessagePassing());Console.WriteLine("mean=" + engine.Infer(mean));• 観測した値をObservedValueに代入して、 InferenceEngineのInferメソッドを呼ぶだけ 第5回自然言語処理勉強会 10
  11. 11. 実行結果• 理論値と一致する. – (パラメータが一つしかなく、変分近似の部分で近 似が行われてないため) 第5回自然言語処理勉強会 11
  12. 12. LDA[Blei+ 2003]• 自然言語処理でよく用いられている文章の生 成モデル• 詳しくは自分の前の発表とかを参考にしてく ださい(http://slidesha.re/cWr4cs) 第5回自然言語処理勉強会 12
  13. 13. 生成モデル• 各トピックtごとにW(語彙数)次元の単語出現確 率ベクトルをディリクレ分布から生成 – ∼ Dir()• 文章ごとにT次元のトピック確率ベクトルをディリ クレ分布から生成 – ∼ Dir()• 各文章において以下のように単語を生成 – ∼ Mult( )と単語のトピックを生成する – ∼ Mult( )とトピックに応じた確率で単語を生成 する 第5回自然言語処理勉強会 13
  14. 14. パラメータベクトルの定義• ここでSparsityはNLPでよくでてくる高次元のベクトルでもそのほと んどが0であるという性質を表すために用いられる – SparsityオブジェクトはSparsity.ApproximateWithTolerance(1.0E-6)のように 定義される。 第5回自然言語処理勉強会 14
  15. 15. 単語生成部分の定義• usingブロックを使ってfor文やswitch文を表現 できる 第5回自然言語処理勉強会 15
  16. 16. Break Symmetry• モデルがトピックに関して対象なのでPhiに関 してランダムな初期化を行う必要がある 第5回自然言語処理勉強会 16
  17. 17. 推論事後分布が格納される 第5回自然言語処理勉強会 17
  18. 18. 実験• BBCの記事2225本のデータセットからランダムに 1000件の記事を選択して、トピック数8で推論を 行った – データセット: http://mlg.ucd.ie/datasets/bbc.html – 2225件全部使おうとするとメモリが足りなかった(この 辺SharedVariableというのを使うと解決するみたいで すが、今回はそこまで余力がなかった)• 推論には1856秒かかった• 推論された各トピックの単語選択確率 の中の 上位数単語を次のスライドに示す 第5回自然言語処理勉強会 18
  19. 19. Topic 0 Topic 1 Topic 2 Topic 3 take million year two time against on show call develop compani win world go just market waisecur manag includ sale govern elect mobil three want websit month expect labour get phone goodattack london share top work minist four tori star Topic 4 Topic 5 Topic 6 Topic 7game first 000 number plai back open peopl filmplan think five dai week cost digit firm best told current rule chang network sai music yearpolit mean oil campaign spend ask public award hold earlier brown player receiv agre econom trade 第5回自然言語処理勉強会 19
  20. 20. コミュニティ抽出法への応用• コミュニティ抽出とはグラフ上からリンクが密 な部分を抽出する手法である – 確率モデルを使ったコミュニティ抽出法について は以下の文献が参考になる – 山田,無限関係モデルとその周辺 • http://www.kecl.ntt.co.jp/as/members/yamada/IBIS20 08_081031yamada.pdf 第5回自然言語処理勉強会 20
  21. 21. ICMc: (Interaction Component Model for Communities)• http://arxiv.org/abs/0803.1628• 以下のようなグラフの生成モデルを考える• 各トピックtごとにV(頂点数)次元の頂点出現確率ベクト ルをディリクレ分布から生成 – ∼ Dir()• T次元のトピック確率ベクトルをディリクレ分布から生成 – ∼ Dir()• 個のリンクを以下のようを生成 – ∼ Mult()とトピックを生成する – ∼ Mult , ∼ Mult( )とリンクの両端の頂点をト ピックに応じた確率でサンプリングする 第5回自然言語処理勉強会 21
  22. 22. Infer.NETによる実装(モデル部分)Variableint numEdges = Variable.Newint();Range T = new Range(numTopics);Range E = new Range(numEdges);Range V = new Range(numVertexes);VariableArrayVector Phi = Variable.ArrayVector(T);Phi[T] = Variable.DirichletSymmetric(V, beta).ForEach(T);VariableVector Theta = Variable.DirichletSymmetric(T, alpha);VariableArrayint Srcs = Variable.Arrayint(E);VariableArrayint Dests = Variable.Arrayint(E);using (Variable.ForEach(E)) { var topic = Variable.Discrete(Theta).Named(topic); using (Variable.Switch(topic)) { Srcs[E] = Variable.Discrete(Phi[topic]); Dests[E] = Variable.Discrete(Phi[topic]); }}VariableIDistributionVector[] PhiInit = Variable.NewIDistributionVector[]();Phi.InitialiseTo(PhiInit); 第5回自然言語処理勉強会 22
  23. 23. • Karate club data(Zachary 1977) に対してトピッ ク数2で推論した結果のトピック帰属確率の可 視化 第5回自然言語処理勉強会 23
  24. 24. まとめ• Infer.NETを使って、文章生成モデルのLDAを 実装する手順を紹介した。• 今後、個別の問題に対してモデリングを行い、 評価して、必要があればモデルを改良すると いう需要は高まっていくと思われる、そのよう なときにInfer.NETのようなモデルを簡単に記 述できるフレームワークが有用になるのでは ないかと考えている。 第5回自然言語処理勉強会 24
  25. 25. 参考文献• Infer.NET users guide : Tutorial and examples : Latent Dirichlet allocation http://research.microsoft.com/en- us/um/cambridge/projects/infernet/docs/Latent%20Di richlet%20Allocation.aspx , 今日の話は基本ここを読 めば実は書いてある• John Winn and Tom Minka : Probabilistic Programming with Infer.NET, http://research.microsoft.com/en- us/um/people/minka/papers/mlss2009/index.html• S.S.J. WANG M.P. WAND : Using Infer.NET for Statistical Analyses, Working Paper at Centre for Statistical and Survey Methodology, 06-10, 2010 第5回自然言語処理勉強会 25

×