SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Infer.NETを使ってLDAを実装してみた
   @第五回自然言語処理勉強会

            坪坂正志
   m(dot)tsubosaka@gmail.com
Probabilistic Programming
• 確率モデルをプログラムの形で書く
• パラメータの推論の部分のコードはユーザが
  書かずに自動で推論が行える
• Ex:
 – BUGS (DSL)
 – Hierarchical Bayes Compiler (DSL)
 – Factorie (Scala)
 – Infer.NET (C#)

                   第5回自然言語処理勉強会        2
メリット
• 複雑な更新式を自分で計算する必要がなくなる
 – ex: 下のようなの




                第5回自然言語処理勉強会   3
• コードを見たときに元のモデルがイメージでき
  る
 – 推論アルゴリズムの結果から元のモデルを復元
   するのは難しい
 – 書いた人はわかってても引き継ぐ人は。。。




         第5回自然言語処理勉強会      4
• 変分ベイズ法、EP法、MCMCとか知らない人
  でも確率モデルが作れる
• 問題に合わせてモデルの形を変更するみた
  いなことが機械学習のエキスパートでなくても
  可能




         第5回自然言語処理勉強会      5
デメリット
• 自分でチューニングしたコードを書いたほうが
  実行時間・メモリ使用量ともに効率的
• 扱えるモデル・推論アルゴリズムがツールが
  サポートしている形式に依存する




         第5回自然言語処理勉強会    6
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
簡単な例
• 正規分布N(μ,1)に従うN個のデータx_iを観測した
  とする
• また平均μの事前分布として正規分布N(0,100)を
  仮定する
• PRML 2.3.6を読めばμの事後分布は



であることは分かる。
           第5回自然言語処理勉強会    8
モデルを表現するコード
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
推論部分
N.ObservedValue = 100;
X.ObservedValue = data; // double[] data
InferenceEngine engine = new InferenceEngine(new VariationalMessagePassing());
Console.WriteLine("mean=" + engine.Infer(mean));


• 観測した値をObservedValueに代入して、
  InferenceEngineのInferメソッドを呼ぶだけ




                                第5回自然言語処理勉強会                                     10
実行結果




• 理論値と一致する.
 – (パラメータが一つしかなく、変分近似の部分で近
   似が行われてないため)

         第5回自然言語処理勉強会    11
LDA[Blei+ 2003]
• 自然言語処理でよく用いられている文章の生
  成モデル
• 詳しくは自分の前の発表とかを参考にしてく
  ださい(http://slidesha.re/cWr4cs)




             第5回自然言語処理勉強会          12
生成モデル
• 各トピックtごとにW(語彙数)次元の単語出現確
  率ベクトルをディリクレ分布から生成
 – ������������ ∼ Dir(������)
• 文章ごとにT次元のトピック確率ベクトルをディリ
  クレ分布から生成
 – ������������ ∼ Dir(������)
• 各文章において以下のように単語を生成
 – ������������ ∼ Mult(������������ )と単語のトピックを生成する
 – ������������ ∼ Mult(������������������ )とトピックに応じた確率で単語を生成
   する

                    第5回自然言語処理勉強会       13
パラメータベクトルの定義




• ここでSparsityはNLPでよくでてくる高次元のベクトルでもそのほと
  んどが0であるという性質を表すために用いられる
  – SparsityオブジェクトはSparsity.ApproximateWithTolerance(1.0E-6)のように
    定義される。




                        第5回自然言語処理勉強会                         14
単語生成部分の定義




• usingブロックを使ってfor文やswitch文を表現
  できる



           第5回自然言語処理勉強会      15
Break Symmetry
• モデルがトピックに関して対象なのでPhiに関
  してランダムな初期化を行う必要がある




         第5回自然言語処理勉強会      16
推論




事後分布が格納される




         第5回自然言語処理勉強会   17
実験
• BBCの記事2225本のデータセットからランダムに
  1000件の記事を選択して、トピック数8で推論を
  行った
 – データセット: http://mlg.ucd.ie/datasets/bbc.html
 – 2225件全部使おうとするとメモリが足りなかった(この
   辺SharedVariableというのを使うと解決するみたいで
   すが、今回はそこまで余力がなかった)
• 推論には1856秒かかった
• 推論された各トピックの単語選択確率������������ の中の
  上位数単語を次のスライドに示す

                 第5回自然言語処理勉強会                18
Topic 0          Topic 1            Topic 2       Topic 3

 take million       year two      time against      on show
 call develop     compani win     world go just    market wai
secur manag        includ sale    govern elect     mobil three
 want websit      month expect     labour get     phone good
attack london       share top     work minist     four tori star




   Topic 4          Topic 5            Topic 6       Topic 7

game first 000    number plai      back open        peopl film
plan think five     dai week        cost digit    firm best told
 current rule         chang          network      sai music year
polit mean oil      campaign        spend ask      public award
 hold earlier     brown player     receiv agre    econom trade



                        第5回自然言語処理勉強会                           19
コミュニティ抽出法への応用
• コミュニティ抽出とはグラフ上からリンクが密
  な部分を抽出する手法である
 – 確率モデルを使ったコミュニティ抽出法について
   は以下の文献が参考になる
 – 山田,無限関係モデルとその周辺
  • http://www.kecl.ntt.co.jp/as/members/yamada/IBIS20
    08_081031yamada.pdf




                  第5回自然言語処理勉強会                       20
ICMc: (Interaction Component Model for Communities)
• http://arxiv.org/abs/0803.1628
• 以下のようなグラフの生成モデルを考える
• 各トピックtごとにV(頂点数)次元の頂点出現確率ベクト
  ルをディリクレ分布から生成
 – ������������ ∼ Dir(������)
• T次元のトピック確率ベクトルをディリクレ分布から生成
 – ������ ∼ Dir(������)
• ������個のリンクを以下のようを生成
 – ������������ ∼ Mult(������)とトピックを生成する
 – ������������ ∼ Mult ������������������ , ������������ ∼ Mult(������������������ )とリンクの両端の頂点をト
   ピックに応じた確率でサンプリングする

                     第5回自然言語処理勉強会                          21
Infer.NETによる実装(モデル部分)
Variable<int> numEdges = Variable.New<int>();
Range T = new Range(numTopics);
Range E = new Range(numEdges);
Range V = new Range(numVertexes);
VariableArray<Vector> Phi = Variable.Array<Vector>(T);
Phi[T] = Variable.DirichletSymmetric(V, beta).ForEach(T);
Variable<Vector> Theta = Variable.DirichletSymmetric(T, alpha);
VariableArray<int> Srcs = Variable.Array<int>(E);
VariableArray<int> Dests = Variable.Array<int>(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]);
   }
}
Variable<IDistribution<Vector[]>> PhiInit = Variable.New<IDistribution<Vector[]>>();
Phi.InitialiseTo(PhiInit);
                                 第5回自然言語処理勉強会                                          22
• Karate club data(Zachary 1977) に対してトピッ
  ク数2で推論した結果のトピック帰属確率の可
  視化
               第5回自然言語処理勉強会            23
まとめ
• Infer.NETを使って、文章生成モデルのLDAを
  実装する手順を紹介した。
• 今後、個別の問題に対してモデリングを行い、
  評価して、必要があればモデルを改良すると
  いう需要は高まっていくと思われる、そのよう
  なときにInfer.NETのようなモデルを簡単に記
  述できるフレームワークが有用になるのでは
  ないかと考えている。

           第5回自然言語処理勉強会        24
参考文献
• 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

Weitere ähnliche Inhalte

Was ist angesagt?

ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用nishio
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出Shuyo Nakatani
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要Toshihiro Kamishima
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用Yuya Unno
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門TanUkkii
 
ChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことJiro Nishitoba
 
Abstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarAbstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarKodaira Tomonori
 
ChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なことChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なことRetrieva inc.
 
質問応答システム入門
質問応答システム入門質問応答システム入門
質問応答システム入門Hiroyoshi Komatsu
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
はじめての人のためのDeep Learning
はじめての人のためのDeep Learningはじめての人のためのDeep Learning
はじめての人のためのDeep LearningTadaichiro Nakano
 
第1回 Jubatusハンズオン
第1回 Jubatusハンズオン第1回 Jubatusハンズオン
第1回 JubatusハンズオンYuya Unno
 
DATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialDATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialTatsuya Tojima
 
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"Ken'ichi Matsui
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Yuya Unno
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowTadaichiro Nakano
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Yasutomo Kawanishi
 
Active Learning from Imperfect Labelers @ NIPS読み会・関西
Active Learning from Imperfect Labelers @ NIPS読み会・関西Active Learning from Imperfect Labelers @ NIPS読み会・関西
Active Learning from Imperfect Labelers @ NIPS読み会・関西Taku Tsuzuki
 

Was ist angesagt? (20)

ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門
 
ChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なこと
 
Abstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarAbstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminar
 
ChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なことChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なこと
 
質問応答システム入門
質問応答システム入門質問応答システム入門
質問応答システム入門
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
はじめての人のためのDeep Learning
はじめての人のためのDeep Learningはじめての人のためのDeep Learning
はじめての人のためのDeep Learning
 
第1回 Jubatusハンズオン
第1回 Jubatusハンズオン第1回 Jubatusハンズオン
第1回 Jubatusハンズオン
 
DATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialDATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 Turorial
 
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
Active Learning from Imperfect Labelers @ NIPS読み会・関西
Active Learning from Imperfect Labelers @ NIPS読み会・関西Active Learning from Imperfect Labelers @ NIPS読み会・関西
Active Learning from Imperfect Labelers @ NIPS読み会・関西
 

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

XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介Akira Tanaka
 
2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...n-yuki
 
AIがAIを生み出す?
AIがAIを生み出す?AIがAIを生み出す?
AIがAIを生み出す?Daiki Tsuchiya
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crfShuyo Nakatani
 
Towards Knowledge-Based Personalized Product Description Generation in E-comm...
Towards Knowledge-Based Personalized Product Description Generation in E-comm...Towards Knowledge-Based Personalized Product Description Generation in E-comm...
Towards Knowledge-Based Personalized Product Description Generation in E-comm...harmonylab
 
Variational Template Machine for Data-to-Text Generation
Variational Template Machine for Data-to-Text GenerationVariational Template Machine for Data-to-Text Generation
Variational Template Machine for Data-to-Text Generationharmonylab
 
深層生成モデルと世界モデル, 深層生成モデルライブラリPixyzについて
深層生成モデルと世界モデル,深層生成モデルライブラリPixyzについて深層生成モデルと世界モデル,深層生成モデルライブラリPixyzについて
深層生成モデルと世界モデル, 深層生成モデルライブラリPixyzについてMasahiro Suzuki
 
Embedding Watermarks into Deep Neural Networks
Embedding Watermarks into Deep Neural NetworksEmbedding Watermarks into Deep Neural Networks
Embedding Watermarks into Deep Neural NetworksYusuke Uchida
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
HowtoよいデザインHiroki Yagita
 
Cedec2012 ai-contest-design-patterns-principles
Cedec2012 ai-contest-design-patterns-principlesCedec2012 ai-contest-design-patterns-principles
Cedec2012 ai-contest-design-patterns-principlesHironori Washizaki
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshareKeisuke Yahata
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門Daiyu Hatakeyama
 
Generative Deep Learning #01
Generative Deep Learning #01Generative Deep Learning #01
Generative Deep Learning #01逸人 米田
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画までShunji Umetani
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回Project Samurai
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 

Ähnlich wie Infer.NETを使ってLDAを実装してみた (20)

XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...
 
210122 msi dp
210122 msi dp210122 msi dp
210122 msi dp
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
AIがAIを生み出す?
AIがAIを生み出す?AIがAIを生み出す?
AIがAIを生み出す?
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crf
 
Towards Knowledge-Based Personalized Product Description Generation in E-comm...
Towards Knowledge-Based Personalized Product Description Generation in E-comm...Towards Knowledge-Based Personalized Product Description Generation in E-comm...
Towards Knowledge-Based Personalized Product Description Generation in E-comm...
 
Variational Template Machine for Data-to-Text Generation
Variational Template Machine for Data-to-Text GenerationVariational Template Machine for Data-to-Text Generation
Variational Template Machine for Data-to-Text Generation
 
C++ Now 2012 report
C++ Now 2012 reportC++ Now 2012 report
C++ Now 2012 report
 
深層生成モデルと世界モデル, 深層生成モデルライブラリPixyzについて
深層生成モデルと世界モデル,深層生成モデルライブラリPixyzについて深層生成モデルと世界モデル,深層生成モデルライブラリPixyzについて
深層生成モデルと世界モデル, 深層生成モデルライブラリPixyzについて
 
Embedding Watermarks into Deep Neural Networks
Embedding Watermarks into Deep Neural NetworksEmbedding Watermarks into Deep Neural Networks
Embedding Watermarks into Deep Neural Networks
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
Howtoよいデザイン
 
Cedec2012 ai-contest-design-patterns-principles
Cedec2012 ai-contest-design-patterns-principlesCedec2012 ai-contest-design-patterns-principles
Cedec2012 ai-contest-design-patterns-principles
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshare
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
 
Generative Deep Learning #01
Generative Deep Learning #01Generative Deep Learning #01
Generative Deep Learning #01
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 

Mehr von 正志 坪坂

KDD 2016勉強会 Deep crossing
KDD 2016勉強会 Deep crossingKDD 2016勉強会 Deep crossing
KDD 2016勉強会 Deep crossing正志 坪坂
 
Deeplearning輪読会
Deeplearning輪読会Deeplearning輪読会
Deeplearning輪読会正志 坪坂
 
WSDM 2016勉強会 Geographic Segmentation via latent factor model
WSDM 2016勉強会 Geographic Segmentation via latent factor modelWSDM 2016勉強会 Geographic Segmentation via latent factor model
WSDM 2016勉強会 Geographic Segmentation via latent factor model正志 坪坂
 
Deeplearning勉強会20160220
Deeplearning勉強会20160220Deeplearning勉強会20160220
Deeplearning勉強会20160220正志 坪坂
 
OnlineMatching勉強会第一回
OnlineMatching勉強会第一回OnlineMatching勉強会第一回
OnlineMatching勉強会第一回正志 坪坂
 
Tokyowebmining ctr-predict
Tokyowebmining ctr-predictTokyowebmining ctr-predict
Tokyowebmining ctr-predict正志 坪坂
 
Riak Search 2.0を使ったデータ集計
Riak Search 2.0を使ったデータ集計Riak Search 2.0を使ったデータ集計
Riak Search 2.0を使ったデータ集計正志 坪坂
 
Contexual bandit @TokyoWebMining
Contexual bandit @TokyoWebMiningContexual bandit @TokyoWebMining
Contexual bandit @TokyoWebMining正志 坪坂
 
Introduction to contexual bandit
Introduction to contexual banditIntroduction to contexual bandit
Introduction to contexual bandit正志 坪坂
 
確率モデルを使ったグラフクラスタリング
確率モデルを使ったグラフクラスタリング確率モデルを使ったグラフクラスタリング
確率モデルを使ったグラフクラスタリング正志 坪坂
 
Big Data Bootstrap (ICML読み会)
Big Data Bootstrap (ICML読み会)Big Data Bootstrap (ICML読み会)
Big Data Bootstrap (ICML読み会)正志 坪坂
 

Mehr von 正志 坪坂 (20)

Recsys2018 unbiased
Recsys2018 unbiasedRecsys2018 unbiased
Recsys2018 unbiased
 
WSDM2018Study
WSDM2018StudyWSDM2018Study
WSDM2018Study
 
Recsys2016勉強会
Recsys2016勉強会Recsys2016勉強会
Recsys2016勉強会
 
KDD 2016勉強会 Deep crossing
KDD 2016勉強会 Deep crossingKDD 2016勉強会 Deep crossing
KDD 2016勉強会 Deep crossing
 
Deeplearning輪読会
Deeplearning輪読会Deeplearning輪読会
Deeplearning輪読会
 
WSDM 2016勉強会 Geographic Segmentation via latent factor model
WSDM 2016勉強会 Geographic Segmentation via latent factor modelWSDM 2016勉強会 Geographic Segmentation via latent factor model
WSDM 2016勉強会 Geographic Segmentation via latent factor model
 
Deeplearning勉強会20160220
Deeplearning勉強会20160220Deeplearning勉強会20160220
Deeplearning勉強会20160220
 
OnlineMatching勉強会第一回
OnlineMatching勉強会第一回OnlineMatching勉強会第一回
OnlineMatching勉強会第一回
 
Recsys2015
Recsys2015Recsys2015
Recsys2015
 
KDD 2015読み会
KDD 2015読み会KDD 2015読み会
KDD 2015読み会
 
Recsys2014 recruit
Recsys2014 recruitRecsys2014 recruit
Recsys2014 recruit
 
EMNLP2014_reading
EMNLP2014_readingEMNLP2014_reading
EMNLP2014_reading
 
Tokyowebmining ctr-predict
Tokyowebmining ctr-predictTokyowebmining ctr-predict
Tokyowebmining ctr-predict
 
KDD2014_study
KDD2014_study KDD2014_study
KDD2014_study
 
Riak Search 2.0を使ったデータ集計
Riak Search 2.0を使ったデータ集計Riak Search 2.0を使ったデータ集計
Riak Search 2.0を使ったデータ集計
 
Contexual bandit @TokyoWebMining
Contexual bandit @TokyoWebMiningContexual bandit @TokyoWebMining
Contexual bandit @TokyoWebMining
 
Introduction to contexual bandit
Introduction to contexual banditIntroduction to contexual bandit
Introduction to contexual bandit
 
確率モデルを使ったグラフクラスタリング
確率モデルを使ったグラフクラスタリング確率モデルを使ったグラフクラスタリング
確率モデルを使ったグラフクラスタリング
 
Big Data Bootstrap (ICML読み会)
Big Data Bootstrap (ICML読み会)Big Data Bootstrap (ICML読み会)
Big Data Bootstrap (ICML読み会)
 
Tokyowebmining2012
Tokyowebmining2012Tokyowebmining2012
Tokyowebmining2012
 

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

  • 1. Infer.NETを使ってLDAを実装してみた @第五回自然言語処理勉強会 坪坂正志 m(dot)tsubosaka@gmail.com
  • 2. Probabilistic Programming • 確率モデルをプログラムの形で書く • パラメータの推論の部分のコードはユーザが 書かずに自動で推論が行える • Ex: – BUGS (DSL) – Hierarchical Bayes Compiler (DSL) – Factorie (Scala) – Infer.NET (C#) 第5回自然言語処理勉強会 2
  • 3. メリット • 複雑な更新式を自分で計算する必要がなくなる – ex: 下のようなの 第5回自然言語処理勉強会 3
  • 4. • コードを見たときに元のモデルがイメージでき る – 推論アルゴリズムの結果から元のモデルを復元 するのは難しい – 書いた人はわかってても引き継ぐ人は。。。 第5回自然言語処理勉強会 4
  • 5. • 変分ベイズ法、EP法、MCMCとか知らない人 でも確率モデルが作れる • 問題に合わせてモデルの形を変更するみた いなことが機械学習のエキスパートでなくても 可能 第5回自然言語処理勉強会 5
  • 6. デメリット • 自分でチューニングしたコードを書いたほうが 実行時間・メモリ使用量ともに効率的 • 扱えるモデル・推論アルゴリズムがツールが サポートしている形式に依存する 第5回自然言語処理勉強会 6
  • 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. 簡単な例 • 正規分布N(μ,1)に従うN個のデータx_iを観測した とする • また平均μの事前分布として正規分布N(0,100)を 仮定する • PRML 2.3.6を読めばμの事後分布は であることは分かる。 第5回自然言語処理勉強会 8
  • 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. 推論部分 N.ObservedValue = 100; X.ObservedValue = data; // double[] data InferenceEngine engine = new InferenceEngine(new VariationalMessagePassing()); Console.WriteLine("mean=" + engine.Infer(mean)); • 観測した値をObservedValueに代入して、 InferenceEngineのInferメソッドを呼ぶだけ 第5回自然言語処理勉強会 10
  • 11. 実行結果 • 理論値と一致する. – (パラメータが一つしかなく、変分近似の部分で近 似が行われてないため) 第5回自然言語処理勉強会 11
  • 12. LDA[Blei+ 2003] • 自然言語処理でよく用いられている文章の生 成モデル • 詳しくは自分の前の発表とかを参考にしてく ださい(http://slidesha.re/cWr4cs) 第5回自然言語処理勉強会 12
  • 13. 生成モデル • 各トピックtごとにW(語彙数)次元の単語出現確 率ベクトルをディリクレ分布から生成 – ������������ ∼ Dir(������) • 文章ごとにT次元のトピック確率ベクトルをディリ クレ分布から生成 – ������������ ∼ Dir(������) • 各文章において以下のように単語を生成 – ������������ ∼ Mult(������������ )と単語のトピックを生成する – ������������ ∼ Mult(������������������ )とトピックに応じた確率で単語を生成 する 第5回自然言語処理勉強会 13
  • 14. パラメータベクトルの定義 • ここでSparsityはNLPでよくでてくる高次元のベクトルでもそのほと んどが0であるという性質を表すために用いられる – SparsityオブジェクトはSparsity.ApproximateWithTolerance(1.0E-6)のように 定義される。 第5回自然言語処理勉強会 14
  • 16. Break Symmetry • モデルがトピックに関して対象なのでPhiに関 してランダムな初期化を行う必要がある 第5回自然言語処理勉強会 16
  • 17. 推論 事後分布が格納される 第5回自然言語処理勉強会 17
  • 18. 実験 • BBCの記事2225本のデータセットからランダムに 1000件の記事を選択して、トピック数8で推論を 行った – データセット: http://mlg.ucd.ie/datasets/bbc.html – 2225件全部使おうとするとメモリが足りなかった(この 辺SharedVariableというのを使うと解決するみたいで すが、今回はそこまで余力がなかった) • 推論には1856秒かかった • 推論された各トピックの単語選択確率������������ の中の 上位数単語を次のスライドに示す 第5回自然言語処理勉強会 18
  • 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 wai secur manag includ sale govern elect mobil three want websit month expect labour get phone good attack london share top work minist four tori star Topic 4 Topic 5 Topic 6 Topic 7 game first 000 number plai back open peopl film plan think five dai week cost digit firm best told current rule chang network sai music year polit mean oil campaign spend ask public award hold earlier brown player receiv agre econom trade 第5回自然言語処理勉強会 19
  • 20. コミュニティ抽出法への応用 • コミュニティ抽出とはグラフ上からリンクが密 な部分を抽出する手法である – 確率モデルを使ったコミュニティ抽出法について は以下の文献が参考になる – 山田,無限関係モデルとその周辺 • http://www.kecl.ntt.co.jp/as/members/yamada/IBIS20 08_081031yamada.pdf 第5回自然言語処理勉強会 20
  • 21. ICMc: (Interaction Component Model for Communities) • http://arxiv.org/abs/0803.1628 • 以下のようなグラフの生成モデルを考える • 各トピックtごとにV(頂点数)次元の頂点出現確率ベクト ルをディリクレ分布から生成 – ������������ ∼ Dir(������) • T次元のトピック確率ベクトルをディリクレ分布から生成 – ������ ∼ Dir(������) • ������個のリンクを以下のようを生成 – ������������ ∼ Mult(������)とトピックを生成する – ������������ ∼ Mult ������������������ , ������������ ∼ Mult(������������������ )とリンクの両端の頂点をト ピックに応じた確率でサンプリングする 第5回自然言語処理勉強会 21
  • 22. Infer.NETによる実装(モデル部分) Variable<int> numEdges = Variable.New<int>(); Range T = new Range(numTopics); Range E = new Range(numEdges); Range V = new Range(numVertexes); VariableArray<Vector> Phi = Variable.Array<Vector>(T); Phi[T] = Variable.DirichletSymmetric(V, beta).ForEach(T); Variable<Vector> Theta = Variable.DirichletSymmetric(T, alpha); VariableArray<int> Srcs = Variable.Array<int>(E); VariableArray<int> Dests = Variable.Array<int>(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]); } } Variable<IDistribution<Vector[]>> PhiInit = Variable.New<IDistribution<Vector[]>>(); Phi.InitialiseTo(PhiInit); 第5回自然言語処理勉強会 22
  • 23. • Karate club data(Zachary 1977) に対してトピッ ク数2で推論した結果のトピック帰属確率の可 視化 第5回自然言語処理勉強会 23
  • 24. まとめ • Infer.NETを使って、文章生成モデルのLDAを 実装する手順を紹介した。 • 今後、個別の問題に対してモデリングを行い、 評価して、必要があればモデルを改良すると いう需要は高まっていくと思われる、そのよう なときにInfer.NETのようなモデルを簡単に記 述できるフレームワークが有用になるのでは ないかと考えている。 第5回自然言語処理勉強会 24
  • 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