SlideShare ist ein Scribd-Unternehmen logo
1 von 27
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<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
 Probability   both coins    最初は2枚のコインが
  are heads:                   両方とも表となる確率
  Bernoulli(0.25)             次はどちらか若しくは
 Probability distribution     両方が裏となった場合
  over firstCoin:              に最初のコインが表と
  Bernoulli(0.3333)            なる条件付確率
 Latent
       Dirchlet Allocation (潜在的ディリク
  レ配分法)
 元々は文章からの話題の推定に用いられた
 2003年にD.M.Blei, A.Y.Ng, M.I.Jordanが提
  案
 Latent 潜在的
 Dirchlet ディリクレ
 Allocation 配分法
 「今何を見ている?ガンダムAGEだよ…
  えー、今なら、モーレツ宇宙海賊だよ。」
 この文章を人間が見れば、この話題がアニ
  メであることは洞察できる。アニメという
  言葉は出てこないにもかかわらず
 つまるところ、裏に隠れた話題と結びつい
  て、この場合だとアニメの番組名が文章中
  で頻出している
 予測
 • 例えばSEOにお金をつぎ込めばショッピングサイ
  トでお客は買い物をするのかどうか?
 セグメンテーション
 • マーケットを分割して最適化を行う




LDAはこの中ではセグメンテーションに資すると考えられる
 潜在したトピックという情報を抽出する
 用途としてはトピックによる文章の分類な
  どに応用できるほか、最近だと購買履歴を
  ベースに消費者のセグメンテーションを行
  うといった研究事例が報告されている
 pLSAを改良した文章集合の生成モデル
 文章はk個の話題に応じて発生した語で構
  成
 語の背後に話題という観測できない情報を
  置く
 LDAではαとβという2つのパラメータを用
  いてモデルから生成されているとしている
 分布θがディリクレ分布Dir(α)に基づいて選
  ばれる
 クラスタ数Nになるまで繰り返す
 • znが多項分布Mult(θ)に基づいて選ばれる。
 • wnが確率p(wn|zn,β)で選ばれる
 従って、LDAを解くことというのはパラ
メータαとβを推定すること
 現実的に解こうとすると変分ベイズEMア
  ルゴリズムやGibbs Samplerなどを使う必
  要がある
 当然、そのアルゴリズムを熟知し適切な実
  装を行う必要がある
 つまり、実装技術+数学的な知識が両方な
  いと困難
 確率モデルをプログラムの形で書く
 パラメータの推定の部分はユーザが書かず
  に自動的に推論
 複雑な更新式を自分で書き下す必要がない
 変分ベイズ法やMCMCとかを知らなくて
  も確率モデルができてしまう
 プログラムの効率的には自分で最適化した
  コードには及ばない
Infer.NETを使ってLDAを実装してみた
第5回 自然言語処理勉強会
            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
   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
 int
    numDocs = wordsInDoc.Length;
 NumDocuments.ObservedValue =
  numDocs;

 int[] numWordsInDoc = new int[numDocs];
 int[][] wordIndices = new int[numDocs][];
 double[][] wordCounts = new
  double[numDocs][];
   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);
 Infer.NETにおいては問題の解き方は定義
  されない
 モデルを定義してそれを基に推論する
   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
   }
 実際問題、マイニングの現場においては現
  実のビジネスを理解して、それを元にモデ
  リングを行い
 データを投入して確認し、モデルを修正す
  るという反復的な作業が基本です
 そのため、モデルを簡単に記述できるフ
  レームワークは非常に有用性が高いと思わ
  れる
 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で
 確率モデルをコードで記述
 EMアルゴリズムといった解き方を記述す
  るのではない
 プログラムの実行効率はよくチューニング
  されたライブラリには及ばない
 反復作業が必要なモデリングにおいては有
  効です
 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。
もっと先を…<<予測>>したくはないか、少年

Weitere ähnliche Inhalte

Was ist angesagt?

Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowTadaichiro Nakano
 
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますAI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますfukuoka.ex
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」fukuoka.ex
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用nishio
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"Ken'ichi Matsui
 
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」fukuoka.ex
 
Jupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJun-ya Norimatsu
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
各言語の k-means 比較
各言語の k-means 比較各言語の k-means 比較
各言語の k-means 比較y-uti
 
ChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なことChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なことRetrieva inc.
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Yasutomo Kawanishi
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係についてDeep Learning JP
 
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
 
ChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことJiro Nishitoba
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習Motoya Wakiyama
 
第1回 Jubatusハンズオン
第1回 Jubatusハンズオン第1回 Jubatusハンズオン
第1回 JubatusハンズオンYuya Unno
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開Seiya Tokui
 

Was ist angesagt? (20)

Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますAI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
Deep learning入門
Deep learning入門Deep learning入門
Deep learning入門
 
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
 
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
 
Jupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep Learning
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
各言語の k-means 比較
各言語の k-means 比較各言語の k-means 比較
各言語の k-means 比較
 
ChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なことChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なこと
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
ChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なこと
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
 
第1回 Jubatusハンズオン
第1回 Jubatusハンズオン第1回 Jubatusハンズオン
第1回 Jubatusハンズオン
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 

Ähnlich wie Infer.netによるldaの実装

Proof summit2014mizar
Proof summit2014mizarProof summit2014mizar
Proof summit2014mizarAlcor80UMa
 
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz..."Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...nkazuki
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest informationSony Network Communications Inc.
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningAndroidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningMiyoshi Kosuke
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
ICML2018読み会: Overview of NLP / Adversarial Attacks
ICML2018読み会: Overview of NLP / Adversarial AttacksICML2018読み会: Overview of NLP / Adversarial Attacks
ICML2018読み会: Overview of NLP / Adversarial AttacksMotoki Sato
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~Fujio Kojima
 
0728 論文紹介第三回
0728 論文紹介第三回0728 論文紹介第三回
0728 論文紹介第三回Kohei Wakamatsu
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用de:code 2017
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
データとは何か
データとは何かデータとは何か
データとは何かKenta Suzuki
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語ScalaTanUkkii
 
Generative Deep Learning #01
Generative Deep Learning #01Generative Deep Learning #01
Generative Deep Learning #01逸人 米田
 

Ähnlich wie Infer.netによるldaの実装 (20)

Xtext 紹介
Xtext 紹介Xtext 紹介
Xtext 紹介
 
Proof summit2014mizar
Proof summit2014mizarProof summit2014mizar
Proof summit2014mizar
 
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz..."Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
 
6 Info Theory
6 Info Theory6 Info Theory
6 Info Theory
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningAndroidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
ICML2018読み会: Overview of NLP / Adversarial Attacks
ICML2018読み会: Overview of NLP / Adversarial AttacksICML2018読み会: Overview of NLP / Adversarial Attacks
ICML2018読み会: Overview of NLP / Adversarial Attacks
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
0728 論文紹介第三回
0728 論文紹介第三回0728 論文紹介第三回
0728 論文紹介第三回
 
KDD2014 勉強会
KDD2014 勉強会KDD2014 勉強会
KDD2014 勉強会
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
データとは何か
データとは何かデータとは何か
データとは何か
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
Generative Deep Learning #01
Generative Deep Learning #01Generative Deep Learning #01
Generative Deep Learning #01
 

Mehr von 池田 直哉

Predictive analytics and julia
Predictive analytics and juliaPredictive analytics and julia
Predictive analytics and julia池田 直哉
 
Azure ml上のRにおける状態空間法でのwebのアクセス解析
Azure ml上のRにおける状態空間法でのwebのアクセス解析Azure ml上のRにおける状態空間法でのwebのアクセス解析
Azure ml上のRにおける状態空間法でのwebのアクセス解析池田 直哉
 
Azure machine learning
Azure machine learningAzure machine learning
Azure machine learning池田 直哉
 
Accord.netによる線形回帰
Accord.netによる線形回帰Accord.netによる線形回帰
Accord.netによる線形回帰池田 直哉
 
とある戦士の爆死過程
とある戦士の爆死過程とある戦士の爆死過程
とある戦士の爆死過程池田 直哉
 
Mongo dbを使ってみる
Mongo dbを使ってみるMongo dbを使ってみる
Mongo dbを使ってみる池田 直哉
 
Tongue diagnosis support system
Tongue diagnosis support systemTongue diagnosis support system
Tongue diagnosis support system池田 直哉
 

Mehr von 池田 直哉 (9)

H2O 3.0 with .net
H2O 3.0 with .netH2O 3.0 with .net
H2O 3.0 with .net
 
H2O 3.0
H2O 3.0H2O 3.0
H2O 3.0
 
Predictive analytics and julia
Predictive analytics and juliaPredictive analytics and julia
Predictive analytics and julia
 
Azure ml上のRにおける状態空間法でのwebのアクセス解析
Azure ml上のRにおける状態空間法でのwebのアクセス解析Azure ml上のRにおける状態空間法でのwebのアクセス解析
Azure ml上のRにおける状態空間法でのwebのアクセス解析
 
Azure machine learning
Azure machine learningAzure machine learning
Azure machine learning
 
Accord.netによる線形回帰
Accord.netによる線形回帰Accord.netによる線形回帰
Accord.netによる線形回帰
 
とある戦士の爆死過程
とある戦士の爆死過程とある戦士の爆死過程
とある戦士の爆死過程
 
Mongo dbを使ってみる
Mongo dbを使ってみるMongo dbを使ってみる
Mongo dbを使ってみる
 
Tongue diagnosis support system
Tongue diagnosis support systemTongue diagnosis support system
Tongue diagnosis support system
 

Kürzlich hochgeladen

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Kürzlich hochgeladen (10)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

Infer.netによるldaの実装

  • 1. Welcome to the probabilistic world
  • 2.  某企業でデータマイニングのコンサルタン トをしてます  前職はシステムエンジニアです  さらに言うと元々は某国立大学の非常勤研 究員 (いわゆるポス毒です)
  • 3.  Microsoft Research Cambridge開発の統計 モデルを.NETに構築するためのライブラ リ  統計モデルを実装するためのスイスアー ミーナイフ  ライセンスはMicrosoft Researchの独自形 式で現時点では商業利用可のライセンスは 存在しない。
  • 4.  自然科学において理論を説明するための具 体的なもの  確率モデルとは統計理論を用いて理論構築 を行う
  • 5.  さいころ • 各面が均一に出る (ある面の出る確率は1/6) • 期待値は3.5 (確率と確率変数をかけた総和)  2項分布 • n=1の場合を特にベルヌーイ分布と言う。  多項分布  正規分布  ポアソン分布  などなど
  • 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.  Probability both coins  最初は2枚のコインが are heads: 両方とも表となる確率 Bernoulli(0.25)  次はどちらか若しくは  Probability distribution 両方が裏となった場合 over firstCoin: に最初のコインが表と Bernoulli(0.3333) なる条件付確率
  • 8.  Latent Dirchlet Allocation (潜在的ディリク レ配分法)  元々は文章からの話題の推定に用いられた  2003年にD.M.Blei, A.Y.Ng, M.I.Jordanが提 案
  • 9.  Latent 潜在的  Dirchlet ディリクレ  Allocation 配分法
  • 10.  「今何を見ている?ガンダムAGEだよ… えー、今なら、モーレツ宇宙海賊だよ。」  この文章を人間が見れば、この話題がアニ メであることは洞察できる。アニメという 言葉は出てこないにもかかわらず  つまるところ、裏に隠れた話題と結びつい て、この場合だとアニメの番組名が文章中 で頻出している
  • 11.  予測 • 例えばSEOにお金をつぎ込めばショッピングサイ トでお客は買い物をするのかどうか?  セグメンテーション • マーケットを分割して最適化を行う LDAはこの中ではセグメンテーションに資すると考えられる
  • 12.  潜在したトピックという情報を抽出する  用途としてはトピックによる文章の分類な どに応用できるほか、最近だと購買履歴を ベースに消費者のセグメンテーションを行 うといった研究事例が報告されている  pLSAを改良した文章集合の生成モデル  文章はk個の話題に応じて発生した語で構 成  語の背後に話題という観測できない情報を 置く
  • 13.
  • 14.  LDAではαとβという2つのパラメータを用 いてモデルから生成されているとしている  分布θがディリクレ分布Dir(α)に基づいて選 ばれる  クラスタ数Nになるまで繰り返す • znが多項分布Mult(θ)に基づいて選ばれる。 • wnが確率p(wn|zn,β)で選ばれる  従って、LDAを解くことというのはパラ メータαとβを推定すること
  • 15.  現実的に解こうとすると変分ベイズEMア ルゴリズムやGibbs Samplerなどを使う必 要がある  当然、そのアルゴリズムを熟知し適切な実 装を行う必要がある  つまり、実装技術+数学的な知識が両方な いと困難
  • 16.  確率モデルをプログラムの形で書く  パラメータの推定の部分はユーザが書かず に自動的に推論  複雑な更新式を自分で書き下す必要がない  変分ベイズ法やMCMCとかを知らなくて も確率モデルができてしまう  プログラムの効率的には自分で最適化した コードには及ばない Infer.NETを使ってLDAを実装してみた 第5回 自然言語処理勉強会
  • 17. 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
  • 18. 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
  • 19.  int numDocs = wordsInDoc.Length;  NumDocuments.ObservedValue = numDocs;  int[] numWordsInDoc = new int[numDocs];  int[][] wordIndices = new int[numDocs][];  double[][] wordCounts = new double[numDocs][];
  • 20. 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);
  • 21.  Infer.NETにおいては問題の解き方は定義 されない  モデルを定義してそれを基に推論する
  • 22. 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  }
  • 23.  実際問題、マイニングの現場においては現 実のビジネスを理解して、それを元にモデ リングを行い  データを投入して確認し、モデルを修正す るという反復的な作業が基本です  そのため、モデルを簡単に記述できるフ レームワークは非常に有用性が高いと思わ れる
  • 24.  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で
  • 25.  確率モデルをコードで記述  EMアルゴリズムといった解き方を記述す るのではない  プログラムの実行効率はよくチューニング されたライブラリには及ばない  反復作業が必要なモデリングにおいては有 効です
  • 26.  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。