Welcome to the probabilistic world
 某企業でデータマイニングのコンサルタン  トをしてます 前職はシステムエンジニアです さらに言うと元々は某国立大学の非常勤研  究員 (いわゆるポス毒です)
 Microsoft       Research Cambridge開発の統計  モデルを.NETに構築するためのライブラ  リ 統計モデルを実装するためのスイスアー  ミーナイフ ライセンスはMicrosoft Researchの独自...
 自然科学において理論を説明するための具  体的なもの 確率モデルとは統計理論を用いて理論構築  を行う
 さいころ • 各面が均一に出る (ある面の出る確率は1/6) • 期待値は3.5 (確率と確率変数をかけた総和) 2項分布 • n=1の場合を特にベルヌーイ分布と言う。 多項分布 正規分布 ポアソン分布 などなど
   public class FirstExample   {            public static void Main()            {                         Variable<b...
 Probability   both coins    最初は2枚のコインが  are heads:                   両方とも表となる確率  Bernoulli(0.25)             次はどちらか若しく...
 Latent       Dirchlet Allocation (潜在的ディリク  レ配分法) 元々は文章からの話題の推定に用いられた 2003年にD.M.Blei, A.Y.Ng, M.I.Jordanが提  案
 Latent 潜在的 Dirchlet ディリクレ Allocation 配分法
 「今何を見ている?ガンダムAGEだよ…  えー、今なら、モーレツ宇宙海賊だよ。」 この文章を人間が見れば、この話題がアニ  メであることは洞察できる。アニメという  言葉は出てこないにもかかわらず つまるところ、裏に隠れた話題と結びつい...
 予測 • 例えばSEOにお金をつぎ込めばショッピングサイ  トでお客は買い物をするのかどうか? セグメンテーション • マーケットを分割して最適化を行うLDAはこの中ではセグメンテーションに資すると考えられる
 潜在したトピックという情報を抽出する 用途としてはトピックによる文章の分類な  どに応用できるほか、最近だと購買履歴を  ベースに消費者のセグメンテーションを行  うといった研究事例が報告されている pLSAを改良した文章集合の生成モデ...
 LDAではαとβという2つのパラメータを用  いてモデルから生成されているとしている 分布θがディリクレ分布Dir(α)に基づいて選  ばれる クラスタ数Nになるまで繰り返す • znが多項分布Mult(θ)に基づいて選ばれる。 • w...
 現実的に解こうとすると変分ベイズEMア  ルゴリズムやGibbs Samplerなどを使う必  要がある 当然、そのアルゴリズムを熟知し適切な実  装を行う必要がある つまり、実装技術+数学的な知識が両方な  いと困難
 確率モデルをプログラムの形で書く パラメータの推定の部分はユーザが書かず  に自動的に推論 複雑な更新式を自分で書き下す必要がない 変分ベイズ法やMCMCとかを知らなくて  も確率モデルができてしまう プログラムの効率的には自分で最...
            if (!(ie.Algorithm is  VariationalMessagePassing))            {                     Console.WriteLine("Prob...
   Range D = new Range(NumDocuments).Named("D");   Range W = new Range(SizeVocab).Named("W");   Range T = new Range(Num...
 int    numDocs = wordsInDoc.Length; NumDocuments.ObservedValue =  numDocs; int[] numWordsInDoc = new int[numDocs]; in...
   NumWordsInDoc.ObservedValue = numWordsInDoc;   Words.ObservedValue = wordIndices;   WordCounts.ObservedValue = wordC...
 Infer.NETにおいては問題の解き方は定義  されない モデルを定義してそれを基に推論する
   FLXMCmvnorm <- function(formula=.~., diagonal=TRUE)   {     z <- new("FLXMC", weighted=TRUE, formula=formula,      ...
 実際問題、マイニングの現場においては現  実のビジネスを理解して、それを元にモデ  リングを行い データを投入して確認し、モデルを修正す  るという反復的な作業が基本です そのため、モデルを簡単に記述できるフ  レームワークは非常に有用...
 using (Variable.ForEach(D)){   using (Variable.ForEach(WInD))   {      var topic = Variable.Discrete(Theta[D]);    ...
 確率モデルをコードで記述 EMアルゴリズムといった解き方を記述す  るのではない プログラムの実行効率はよくチューニング  されたライブラリには及ばない 反復作業が必要なモデリングにおいては有  効です
 D.M.Blei, A.Y.Ng, M.I.Jordan, "Latent Dirichlet  Allocation" JMLR, vol.3, pp.993-1022 (2003) Infer.NET users guide: Tut...
もっと先を…<<予測>>したくはないか、少年
Infer.netによるldaの実装
Upcoming SlideShare
Loading in …5
×

Infer.netによるldaの実装

1,791 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,791
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Infer.netによるldaの実装

  1. 1. Welcome to the probabilistic world
  2. 2.  某企業でデータマイニングのコンサルタン トをしてます 前職はシステムエンジニアです さらに言うと元々は某国立大学の非常勤研 究員 (いわゆるポス毒です)
  3. 3.  Microsoft Research Cambridge開発の統計 モデルを.NETに構築するためのライブラ リ 統計モデルを実装するためのスイスアー ミーナイフ ライセンスはMicrosoft Researchの独自形 式で現時点では商業利用可のライセンスは 存在しない。
  4. 4.  自然科学において理論を説明するための具 体的なもの 確率モデルとは統計理論を用いて理論構築 を行う
  5. 5.  さいころ • 各面が均一に出る (ある面の出る確率は1/6) • 期待値は3.5 (確率と確率変数をかけた総和) 2項分布 • n=1の場合を特にベルヌーイ分布と言う。 多項分布 正規分布 ポアソン分布 などなど
  6. 6.  public class FirstExample { public static void Main() { Variable<bool> firstCoin = Variable.Bernoulli(0.5).Named("firstCoin"); Variable<bool> secondCoin = Variable.Bernoulli(0.5).Named("secondCoin"); Variable<bool> bothHeads = (firstCoin & secondCoin).Named("bothHeads"); InferenceEngine ie = new InferenceEngine(); if (!(ie.Algorithm is VariationalMessagePassing)) { Console.WriteLine("Probability both coins are heads: "+ie.Infer(bothHeads)); bothHeads.ObservedValue=false; Console.WriteLine("Probability distribution over firstCoin: " + ie.Infer(firstCoin)); } else Console.WriteLine("This example does not run with Variational Message Passing"); } } first example of Infer.NET from Microsoft Research
  7. 7.  Probability both coins  最初は2枚のコインが are heads: 両方とも表となる確率 Bernoulli(0.25)  次はどちらか若しくは Probability distribution 両方が裏となった場合 over firstCoin: に最初のコインが表と Bernoulli(0.3333) なる条件付確率
  8. 8.  Latent Dirchlet Allocation (潜在的ディリク レ配分法) 元々は文章からの話題の推定に用いられた 2003年にD.M.Blei, A.Y.Ng, M.I.Jordanが提 案
  9. 9.  Latent 潜在的 Dirchlet ディリクレ Allocation 配分法
  10. 10.  「今何を見ている?ガンダムAGEだよ… えー、今なら、モーレツ宇宙海賊だよ。」 この文章を人間が見れば、この話題がアニ メであることは洞察できる。アニメという 言葉は出てこないにもかかわらず つまるところ、裏に隠れた話題と結びつい て、この場合だとアニメの番組名が文章中 で頻出している
  11. 11.  予測 • 例えばSEOにお金をつぎ込めばショッピングサイ トでお客は買い物をするのかどうか? セグメンテーション • マーケットを分割して最適化を行うLDAはこの中ではセグメンテーションに資すると考えられる
  12. 12.  潜在したトピックという情報を抽出する 用途としてはトピックによる文章の分類な どに応用できるほか、最近だと購買履歴を ベースに消費者のセグメンテーションを行 うといった研究事例が報告されている pLSAを改良した文章集合の生成モデル 文章はk個の話題に応じて発生した語で構 成 語の背後に話題という観測できない情報を 置く
  13. 13.  LDAではαとβという2つのパラメータを用 いてモデルから生成されているとしている 分布θがディリクレ分布Dir(α)に基づいて選 ばれる クラスタ数Nになるまで繰り返す • znが多項分布Mult(θ)に基づいて選ばれる。 • wnが確率p(wn|zn,β)で選ばれる 従って、LDAを解くことというのはパラメータαとβを推定すること
  14. 14.  現実的に解こうとすると変分ベイズEMア ルゴリズムやGibbs Samplerなどを使う必 要がある 当然、そのアルゴリズムを熟知し適切な実 装を行う必要がある つまり、実装技術+数学的な知識が両方な いと困難
  15. 15.  確率モデルをプログラムの形で書く パラメータの推定の部分はユーザが書かず に自動的に推論 複雑な更新式を自分で書き下す必要がない 変分ベイズ法やMCMCとかを知らなくて も確率モデルができてしまう プログラムの効率的には自分で最適化した コードには及ばないInfer.NETを使ってLDAを実装してみた第5回 自然言語処理勉強会
  16. 16.  if (!(ie.Algorithm is VariationalMessagePassing)) { Console.WriteLine("Probability both coins are heads: "+ie.Infer(bothHeads)); bothHeads.ObservedValue=false; Console.WriteLine("Probability distribution over firstCoin: " + ie.Infer(firstCoin)); } 基本的にはObservedValueをセットして、ie.Infer を呼ぶだけ first example of Infer.NET from Microsoft Research
  17. 17.  Range D = new Range(NumDocuments).Named("D"); Range W = new Range(SizeVocab).Named("W"); Range T = new Range(NumTopics).Named("T"); NumWordsInDoc = Variable.Array<int>(D).Named("NumWordsInDoc"); Range WInD = new Range(NumWordsInDoc[D]).Named("WInD"); // Surround model by a stochastic If block so that we can compute model evidence Evidence = Variable.Bernoulli(0.5).Named("Evidence"); IfBlock evidenceBlock = null; // We cannot calculate evidence in the power-plate version if (!UsePowerPlate) evidenceBlock = Variable.If(Evidence); Theta = Variable.Array<Vector>(D); Theta.SetSparsity(ThetaSparsity); Theta.SetValueRange(T); ThetaPrior = Variable.Array<Dirichlet>(D).Named("ThetaPrior"); Theta[D] = Variable<Vector>.Random(ThetaPrior[D]); Phi = Variable.Array<Vector>(T); Phi.SetSparsity(PhiSparsity); Phi.SetValueRange(W); PhiPrior = Variable.Array<Dirichlet>(T).Named("PhiPrior"); Phi[T] = Variable<Vector>.Random(PhiPrior[T]); Words = Variable.Array(Variable.Array<int>(WInD), D).Named("Words"); WordCounts = Variable.Array(Variable.Array<double>(WInD), D).Named("WordCounts" LDAModel.cs
  18. 18.  int numDocs = wordsInDoc.Length; NumDocuments.ObservedValue = numDocs; int[] numWordsInDoc = new int[numDocs]; int[][] wordIndices = new int[numDocs][]; double[][] wordCounts = new double[numDocs][];
  19. 19.  NumWordsInDoc.ObservedValue = numWordsInDoc; Words.ObservedValue = wordIndices; WordCounts.ObservedValue = wordCounts; ThetaInit.ObservedValue = GetInitialisation(numDocs, NumTopics, ThetaSparsity); ThetaPrior.ObservedValue = new Dirichlet[numDocs]; for (int i = 0; i < numDocs; i++) ThetaPrior.ObservedValue[i] = Dirichlet.Symmetric(NumTopics, alpha); PhiPrior.ObservedValue = new Dirichlet[NumTopics]; for (int i = 0; i < NumTopics; i++) PhiPrior.ObservedValue[i] = Dirichlet.Symmetric(SizeVocab, beta); if (UsePowerPlate) Engine.OptimiseForVariables = new IVariable[] { Theta, Phi }; else Engine.OptimiseForVariables = new IVariable[] { Theta, Phi, Evidence }; postTheta = Engine.Infer<Dirichlet[]>(Theta); postPhi = Engine.Infer<Dirichlet[]>(Phi);
  20. 20.  Infer.NETにおいては問題の解き方は定義 されない モデルを定義してそれを基に推論する
  21. 21.  FLXMCmvnorm <- function(formula=.~., diagonal=TRUE) { z <- new("FLXMC", weighted=TRUE, formula=formula, dist = "mvnorm", name="model-based Gaussian clustering") require("mvtnorm") z@defineComponent <- expression({ logLik <- function(x, y) dmvnorm(y, mean=center, sigma=cov, log=TRUE) predict <- function(x, ...) matrix(center, nrow=nrow(x), ncol=length(center), byrow=TRUE) new("FLXcomponent", parameters=list(center = center, cov = cov), df=df, logLik=logLik, predict=predict) }) z@fit <- function(x, y, w){ para <- cov.wt(y, wt=w)[c("center","cov")] para$df <- (3*ncol(y) + ncol(y)^2)/2 if(diagonal){ para$cov <- diag(diag(para$cov)) para$df <- 2*ncol(y) } with(para, eval(z@defineComponent)) } z }
  22. 22.  実際問題、マイニングの現場においては現 実のビジネスを理解して、それを元にモデ リングを行い データを投入して確認し、モデルを修正す るという反復的な作業が基本です そのため、モデルを簡単に記述できるフ レームワークは非常に有用性が高いと思わ れる
  23. 23.  using (Variable.ForEach(D)){ using (Variable.ForEach(WInD)) { var topic = Variable.Discrete(Theta[D]); using (Variable.Switch(topic)) Words[D][WInD] = Variable.Discrete(Phi[topic]); }} usingを使ってForEachが書ける switchも同様にusingで
  24. 24.  確率モデルをコードで記述 EMアルゴリズムといった解き方を記述す るのではない プログラムの実行効率はよくチューニング されたライブラリには及ばない 反復作業が必要なモデリングにおいては有 効です
  25. 25.  D.M.Blei, A.Y.Ng, M.I.Jordan, "Latent Dirichlet Allocation" JMLR, vol.3, pp.993-1022 (2003) Infer.NET users guide: Tutotials and examples: Latent Dirichlet allocation http://research.microsoft.com/en- us/um/cambridge/projects/infernet/docs/Latent%20Diri chlet%20Allocation.aspx Infer.NETを使ってLDAを実装してみた(第5回 自然言語 処理勉強会) LDA 入門(第5回 自然言語処理勉強会) 汪金芳、手塚集、上田修功、田栗正章、樺島祥介、甘 利俊一、竹村彰通、竹内啓、伊庭幸人 『計算統計 I ― 確率計算の新しい手法』11巻〈統計科学のフロンティ ア〉、2003年。ISBN 4000068512。
  26. 26. もっと先を…<<予測>>したくはないか、少年

×