SlideShare a Scribd company logo
1 of 39
Download to read offline
Latent Dirichlet Allocation入門

        @tokyotextmining
           坪坂 正志
内容
• NLPで用いられるトピックモデルの代表である
  LDA(Latent Dirichlet Allocation)について紹介
  する
• 機械学習ライブラリmalletを使って、LDAを使
  う方法について紹介する
Why LDA
• 白鵬が単独首位 琴欧洲敗れる
Why LDA
• 白鵬が単独首位 琴欧洲敗れる
• 人は上の文を見て相撲に関係する文である
  ことを理解できる
 – 文中に相撲という単語は出てこないのにもかか
   わらず
Why LDA
• 白鵬が単独首位 琴欧洲敗れる
• 人は上の文を見て相撲に関係する文である
  ことを理解できる
 – 文中に相撲という単語は出てこないのにもかか
   わらず
• 単語は独立に出現しているのではなく、潜在
  的なトピックを持ち、同じトピックを持つ単語
  は同じ文章に出現しやすい
Why LDA
• 文章/単語のトピックを推定すると何の役にた
  つか?
• 文章分類
• 次元削減
• 言語モデル
 – 情報検索[Wei and Croft 2006]
概要
• LDA
  – 確率モデル
  – 推論アルゴリズム
  – ハイパーパラメータの調整
  – 並列化
  – 高速化
• Mallet
  – Malletを使ったLDA
文章生成モデル
• トピック数Tはあらかじめ決める
• 各トピックごとに単語出現確率������������ を生成
 – ディリクレ分布から生成 ������������ ~Dir(������)
• 文章ごとにトピック確率������������ を生成する
 – ディリクレ分布から生成 ������������ ~Dir(������)
 – 各文章において以下のように単語を生成していく
   • ������������ ~Multi(������������ )と単語のトピックを生成する
   • ������������ ~Multi(������������������ )とトピックに応じた確率で単語を生成
パラメータは未知
• 実際にはパラメータは推定する必要がある




           [Steyvers and Griffiths 2007]より
推論アルゴリズム
• Bleiの元論文[Blei+ 2003]では変分ベイズを
  使ったパラメータ推定を行っている
• しかし、実用的には後にでたGibbs samplerを
  使ったパラメータ推定法がよく用いられる
  [Griffiths and Steyvers 2004]
 – 一回当たりの計算が軽い
 – 数式が簡単(実装コストが低い)
• 他にもcollapsed変分ベイズという方法もある
  [Teh+ 2007, Asuncion+ 2009]
Collapsed Gibbs sampler
• 文章中の各単語に対して、初期状態としてランダムなトピック
  を割り当てる
• 各単語に関してトピックを逐次更新する
 – 直感的には(文章中でのトピックtの割合) * (その単語におけるトピッ
   クtの割合)
 – 一つの文章では同じトピックがでやすい
 – 単語ごとに出やすいトピックと出にくいトピックがある




  ������������|������ : 文章dに出現するトピックtに属する単語の合計
  ������������|������ : トピックtに属する単語wの合計
  ������⋅|������ : トピックtに属する単語の合計
ハイパーパラメータの影響
• 多くの論文では������, ������を天下り的に設定するこ
  とが多い
 – 実際は������, ������の値によってPerplexityなど変わってく
   る [Asuncion+ 2009]
• また、������ = 0.1などと各トピックの事前パラメー
  タはすべて同じにすることが多い
でも実際は
• ������������ の値をトピックごとに差を設けることにより、
  トピックの出やすさを表現できる




              [Wallach+ 2009]より
他のストップワードへの対応方法
   [Wilson and Chew 2010]
• サンプリングの際の������������|������ などの計算で単語ご
  とに異なる重みづけを用いて計算する
 – 重み付けにはtf-idf, PMIなどを用いる
どうやって推定するか
                 [Wallach+ 2009]より

• 階層的なモデルを立てる




• 一定間隔でハイパーパラメータを最適化する
 – 実用上はこちらが階層的モデルと比べ精度も変
   わらず、高速
 – Malletではこちらを採用
並列化
• マルチコアとかグリッドとか流行ってる
• LDAにおいても並列化しようという話はいくつ
  かある
 – マルチコア[Newman+ 07]
 – グリッド (Mapreduce/MPIを使う)[Wang+ 2009]
 – GPGPU [Yan+ 2009]
並列化
• 更新式
並列化
• 更新式



      文章ごとに独立

• 文章を各プロセッサに分散して配置する
• ������������|������ , ������.|������ は各プロセッサで独立に持つ
  – 定期的にグローバルな値を計算し直し、同期する
  – グローバルな値をmemcachedに持つという話も
    ある[Smola and Narayanamurthy 2010]
並列化
• 1プロセッサあたりの時間/空間計算量
 – プロセッサの数をPとする
 – 各プロセッサには文章が均一に割り当てられて
   いるとする
         時間計算量     空間計算量
 LDA     O(NT)     O(N + (D + W) * T)
 PLDA    O(NT/P)   O(N / P + (D / P + W) * T)
高速化
• トピック数Tが多くなっていくとナイーブな実装
  だと、一回のGibbs samplerにかかる時間が
  O(T)であるため、計算にかかるコストが大きい
• 効率的なサンプリング方法が存在[Yao+ 2009]
更新式の展開
• 更新式を展開する



• 各項のトピックについての総和を保持
サンプリングの高速化
• 一様分布������ ∼ ������(������ + ������ + ������)から乱数を生成
• 経験的に90%以上が������の部分に落ちる
• トピック-単語カウントに相当する項に関して
  高速なサンプリングができればよい



   ������   ������         ������
サンプリングの高速化


• 上の式に従って高速にサンプリングするため
  に������������|������ の降順でトピックからサンプリングされ
  るかどうかを見ていく
高速化のためのデータ構造
• ������������|������ の頻度の降順でならんだ配列を維持する
 – ここで単語の総出現回数よりも非ゼロの要素数が
   少ないことを利用するとメモリが大幅に節約できる
 – Malletでは(トピックID,出現回数)の組を32bitのint
   の形で保持している
    • このため出現回数が多い単語に関してはオーバフロー
      する危険がある

トピックID   3   2   4    1
出現回数     8   6   6    3
高速化の効果
     データセットには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
高速化の効果
• 前のグラフを対数領域でプロットしたもの
 10000




  1000




                               plda
  100
                               mallet




   10




     1
         1   10   100   1000
Malletとは
• MAchine Learning for LanguagE Toolkit
• Javaベースの統計的自然言語処理、文章分
  類、トピックモデリングなどのパッケージ
• Andrew McCallumを中心として開発が行われ
  ている
Instance
• Malletにおいてデータ一つ一つはInstanceと
  いうオブジェクトで表現される
 – 文章集合中の文章に相当する
• 4つのメンバ変数を持つ
 – Name (Instanceの名前 今回は使わない)
 – Data (入力データ)
 – Target/Label (出力 今回は使わない)
 – Source (Instanceのソース)
Iterator
• InstanceにはIteratorを経由して、アクセスされ
  る
 – XML,ディレクトリ配下のファイルなど様々な入力
   形式に対応できる
• 大抵の場合はCsvIteratorが使える
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)
Pipe
• CsvIteratorで読んだInstanceに入っているdata
  は単なるString
  – Malletで扱う形式に変換する必要がある
• Instance Pipe.pipe(Instance inst)
  – 与えられたInstanceを別のInstanceに変換して返す
  – TokenSequence2FeatureSequenceなど様々な変換
    用のPipeが存在する
• SerialPipe(List<Pipe>)
  – 指定されたlist中のpipeを順番に適応するPipe
InstanceList
• Instanceのリストを表現する
• InstanceList(Pipe pipe)
  – InstanceListに入ってくるInstanceを処理するpipe
    を指定する
• void InstanceList.addThruPipe(Iterator inst)
  – InstanceListにpipeを通しながらIterator経由で
    データをロードする
データのロード
    • 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                                           ArrayList<Pipe> pipeList = new ArrayList<Pipe>();
  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;
  }
}
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)で読み込める
マルチスレッドのパフォーマンス
• UCI Datasetのnytimesデータを使用
 – 30万文章, 10万単語
 – 約1億トークン
 – トピック数500, 反復回数 500回

 1スレッド                         276min 33sec
 4スレッド                         179min 45sec

   Core i7 920 , JDK 1.6.16 (-server –Xmx1500m)
トピックの代表的単語の抽出
• 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
...
新規文章に関する推論
• getInferencer()を呼びTopicInferencerを取得
  する
• TopicInferencerのgetSampledDistributionを使
  うと各トピックに帰属する確率を取得できる
参考文献
•   [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
参考文献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

More Related Content

What's hot

RでGARCHモデル - TokyoR #21
RでGARCHモデル - TokyoR #21RでGARCHモデル - TokyoR #21
RでGARCHモデル - TokyoR #21
horihorio
 

What's hot (20)

【DL輪読会】HyperTree Proof Search for Neural Theorem Proving
【DL輪読会】HyperTree Proof Search for Neural Theorem Proving【DL輪読会】HyperTree Proof Search for Neural Theorem Proving
【DL輪読会】HyperTree Proof Search for Neural Theorem Proving
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
Stanでガウス過程
Stanでガウス過程Stanでガウス過程
Stanでガウス過程
 
SHAP値の考え方を理解する(木構造編)
SHAP値の考え方を理解する(木構造編)SHAP値の考え方を理解する(木構造編)
SHAP値の考え方を理解する(木構造編)
 
PRML輪読#1
PRML輪読#1PRML輪読#1
PRML輪読#1
 
社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学
 
RでGARCHモデル - TokyoR #21
RでGARCHモデル - TokyoR #21RでGARCHモデル - TokyoR #21
RでGARCHモデル - TokyoR #21
 
金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル
 
ベイズ推定の概要@広島ベイズ塾
ベイズ推定の概要@広島ベイズ塾ベイズ推定の概要@広島ベイズ塾
ベイズ推定の概要@広島ベイズ塾
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明
 
強化学習その1
強化学習その1強化学習その1
強化学習その1
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
「統計的学習理論」第1章
「統計的学習理論」第1章「統計的学習理論」第1章
「統計的学習理論」第1章
 

Viewers also liked

関東CV勉強会 Kernel PCA (2011.2.19)
関東CV勉強会 Kernel PCA (2011.2.19)関東CV勉強会 Kernel PCA (2011.2.19)
関東CV勉強会 Kernel PCA (2011.2.19)
Akisato Kimura
 
Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...
Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...
Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...
wl820609
 
Manifold learning with application to object recognition
Manifold learning with application to object recognitionManifold learning with application to object recognition
Manifold learning with application to object recognition
zukun
 
LDA等のトピックモデル
LDA等のトピックモデルLDA等のトピックモデル
LDA等のトピックモデル
Mathieu Bertin
 
最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)
IMJ Corporation
 

Viewers also liked (20)

関東CV勉強会 Kernel PCA (2011.2.19)
関東CV勉強会 Kernel PCA (2011.2.19)関東CV勉強会 Kernel PCA (2011.2.19)
関東CV勉強会 Kernel PCA (2011.2.19)
 
LDAを用いた教師なし単語分類
LDAを用いた教師なし単語分類LDAを用いた教師なし単語分類
LDAを用いた教師なし単語分類
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...
Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...
Dimension Reduction And Visualization Of Large High Dimensional Data Via Inte...
 
Methods of Manifold Learning for Dimension Reduction of Large Data Sets
Methods of Manifold Learning for Dimension Reduction of Large Data SetsMethods of Manifold Learning for Dimension Reduction of Large Data Sets
Methods of Manifold Learning for Dimension Reduction of Large Data Sets
 
Topic Models
Topic ModelsTopic Models
Topic Models
 
Manifold learning with application to object recognition
Manifold learning with application to object recognitionManifold learning with application to object recognition
Manifold learning with application to object recognition
 
The Gaussian Process Latent Variable Model (GPLVM)
The Gaussian Process Latent Variable Model (GPLVM)The Gaussian Process Latent Variable Model (GPLVM)
The Gaussian Process Latent Variable Model (GPLVM)
 
Self-organizing map
Self-organizing mapSelf-organizing map
Self-organizing map
 
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
 
WSDM2016読み会 Collaborative Denoising Auto-Encoders for Top-N Recommender Systems
WSDM2016読み会 Collaborative Denoising Auto-Encoders for Top-N Recommender SystemsWSDM2016読み会 Collaborative Denoising Auto-Encoders for Top-N Recommender Systems
WSDM2016読み会 Collaborative Denoising Auto-Encoders for Top-N Recommender Systems
 
Visualizing Data Using t-SNE
Visualizing Data Using t-SNEVisualizing Data Using t-SNE
Visualizing Data Using t-SNE
 
AutoEncoderで特徴抽出
AutoEncoderで特徴抽出AutoEncoderで特徴抽出
AutoEncoderで特徴抽出
 
LDA等のトピックモデル
LDA等のトピックモデルLDA等のトピックモデル
LDA等のトピックモデル
 
トピックモデルの話
トピックモデルの話トピックモデルの話
トピックモデルの話
 
Recsys2016勉強会
Recsys2016勉強会Recsys2016勉強会
Recsys2016勉強会
 
KDD 2016勉強会 Deep crossing
KDD 2016勉強会 Deep crossingKDD 2016勉強会 Deep crossing
KDD 2016勉強会 Deep crossing
 
Deeplearning輪読会
Deeplearning輪読会Deeplearning輪読会
Deeplearning輪読会
 
Twitterテキストのトピック分析
Twitterテキストのトピック分析Twitterテキストのトピック分析
Twitterテキストのトピック分析
 
最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)最新事例にみるサービスデザインという新潮流(I・CON2014)
最新事例にみるサービスデザインという新潮流(I・CON2014)
 

Similar to LDA入門

12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
 
10分で分かるr言語入門ver2.8 14 0712
10分で分かるr言語入門ver2.8 14 0712 10分で分かるr言語入門ver2.8 14 0712
10分で分かるr言語入門ver2.8 14 0712
Nobuaki Oshiro
 
10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用
Nobuaki Oshiro
 

Similar to LDA入門 (20)

12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約
 
10分で分かるr言語入門ver2.8 14 0712
10分で分かるr言語入門ver2.8 14 0712 10分で分かるr言語入門ver2.8 14 0712
10分で分かるr言語入門ver2.8 14 0712
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用
 
Python opt
Python optPython opt
Python opt
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
お金をかけないDBチューニング
お金をかけないDBチューニングお金をかけないDBチューニング
お金をかけないDBチューニング
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成
 
Abstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminarAbstractive Text Summarization @Retrieva seminar
Abstractive Text Summarization @Retrieva seminar
 
AWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon Athena
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
 
programming camp 2008, introduction of programming, algorithm
programming camp 2008, introduction of programming, algorithmprogramming camp 2008, introduction of programming, algorithm
programming camp 2008, introduction of programming, algorithm
 

More from 正志 坪坂

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読み会)
正志 坪坂
 
static index pruningについて
static index pruningについてstatic index pruningについて
static index pruningについて
正志 坪坂
 

More from 正志 坪坂 (20)

Recsys2018 unbiased
Recsys2018 unbiasedRecsys2018 unbiased
Recsys2018 unbiased
 
WSDM2018Study
WSDM2018StudyWSDM2018Study
WSDM2018Study
 
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
 
static index pruningについて
static index pruningについてstatic index pruningについて
static index pruningについて
 
NIPS 2012 読む会
NIPS 2012 読む会NIPS 2012 読む会
NIPS 2012 読む会
 
WSDM 2012 勉強会資料
WSDM 2012 勉強会資料WSDM 2012 勉強会資料
WSDM 2012 勉強会資料
 

LDA入門

  • 1. Latent Dirichlet Allocation入門 @tokyotextmining 坪坂 正志
  • 2. 内容 • NLPで用いられるトピックモデルの代表である LDA(Latent Dirichlet Allocation)について紹介 する • 機械学習ライブラリmalletを使って、LDAを使 う方法について紹介する
  • 4. Why LDA • 白鵬が単独首位 琴欧洲敗れる • 人は上の文を見て相撲に関係する文である ことを理解できる – 文中に相撲という単語は出てこないのにもかか わらず
  • 5. Why LDA • 白鵬が単独首位 琴欧洲敗れる • 人は上の文を見て相撲に関係する文である ことを理解できる – 文中に相撲という単語は出てこないのにもかか わらず • 単語は独立に出現しているのではなく、潜在 的なトピックを持ち、同じトピックを持つ単語 は同じ文章に出現しやすい
  • 6. Why LDA • 文章/単語のトピックを推定すると何の役にた つか? • 文章分類 • 次元削減 • 言語モデル – 情報検索[Wei and Croft 2006]
  • 7. 概要 • LDA – 確率モデル – 推論アルゴリズム – ハイパーパラメータの調整 – 並列化 – 高速化 • Mallet – Malletを使ったLDA
  • 8. 文章生成モデル • トピック数Tはあらかじめ決める • 各トピックごとに単語出現確率������������ を生成 – ディリクレ分布から生成 ������������ ~Dir(������) • 文章ごとにトピック確率������������ を生成する – ディリクレ分布から生成 ������������ ~Dir(������) – 各文章において以下のように単語を生成していく • ������������ ~Multi(������������ )と単語のトピックを生成する • ������������ ~Multi(������������������ )とトピックに応じた確率で単語を生成
  • 10. 推論アルゴリズム • Bleiの元論文[Blei+ 2003]では変分ベイズを 使ったパラメータ推定を行っている • しかし、実用的には後にでたGibbs samplerを 使ったパラメータ推定法がよく用いられる [Griffiths and Steyvers 2004] – 一回当たりの計算が軽い – 数式が簡単(実装コストが低い) • 他にもcollapsed変分ベイズという方法もある [Teh+ 2007, Asuncion+ 2009]
  • 11. Collapsed Gibbs sampler • 文章中の各単語に対して、初期状態としてランダムなトピック を割り当てる • 各単語に関してトピックを逐次更新する – 直感的には(文章中でのトピックtの割合) * (その単語におけるトピッ クtの割合) – 一つの文章では同じトピックがでやすい – 単語ごとに出やすいトピックと出にくいトピックがある ������������|������ : 文章dに出現するトピックtに属する単語の合計 ������������|������ : トピックtに属する単語wの合計 ������⋅|������ : トピックtに属する単語の合計
  • 12. ハイパーパラメータの影響 • 多くの論文では������, ������を天下り的に設定するこ とが多い – 実際は������, ������の値によってPerplexityなど変わってく る [Asuncion+ 2009] • また、������ = 0.1などと各トピックの事前パラメー タはすべて同じにすることが多い
  • 14. 他のストップワードへの対応方法 [Wilson and Chew 2010] • サンプリングの際の������������|������ などの計算で単語ご とに異なる重みづけを用いて計算する – 重み付けにはtf-idf, PMIなどを用いる
  • 15. どうやって推定するか [Wallach+ 2009]より • 階層的なモデルを立てる • 一定間隔でハイパーパラメータを最適化する – 実用上はこちらが階層的モデルと比べ精度も変 わらず、高速 – Malletではこちらを採用
  • 16. 並列化 • マルチコアとかグリッドとか流行ってる • LDAにおいても並列化しようという話はいくつ かある – マルチコア[Newman+ 07] – グリッド (Mapreduce/MPIを使う)[Wang+ 2009] – GPGPU [Yan+ 2009]
  • 18. 並列化 • 更新式 文章ごとに独立 • 文章を各プロセッサに分散して配置する • ������������|������ , ������.|������ は各プロセッサで独立に持つ – 定期的にグローバルな値を計算し直し、同期する – グローバルな値をmemcachedに持つという話も ある[Smola and Narayanamurthy 2010]
  • 19. 並列化 • 1プロセッサあたりの時間/空間計算量 – プロセッサの数をPとする – 各プロセッサには文章が均一に割り当てられて いるとする 時間計算量 空間計算量 LDA O(NT) O(N + (D + W) * T) PLDA O(NT/P) O(N / P + (D / P + W) * T)
  • 20. 高速化 • トピック数Tが多くなっていくとナイーブな実装 だと、一回のGibbs samplerにかかる時間が O(T)であるため、計算にかかるコストが大きい • 効率的なサンプリング方法が存在[Yao+ 2009]
  • 22. サンプリングの高速化 • 一様分布������ ∼ ������(������ + ������ + ������)から乱数を生成 • 経験的に90%以上が������の部分に落ちる • トピック-単語カウントに相当する項に関して 高速なサンプリングができればよい ������ ������ ������
  • 23. サンプリングの高速化 • 上の式に従って高速にサンプリングするため に������������|������ の降順でトピックからサンプリングされ るかどうかを見ていく
  • 24. 高速化のためのデータ構造 • ������������|������ の頻度の降順でならんだ配列を維持する – ここで単語の総出現回数よりも非ゼロの要素数が 少ないことを利用するとメモリが大幅に節約できる – Malletでは(トピックID,出現回数)の組を32bitのint の形で保持している • このため出現回数が多い単語に関してはオーバフロー する危険がある トピックID 3 2 4 1 出現回数 8 6 6 3
  • 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
  • 27. Malletとは • MAchine Learning for LanguagE Toolkit • Javaベースの統計的自然言語処理、文章分 類、トピックモデリングなどのパッケージ • Andrew McCallumを中心として開発が行われ ている
  • 28. Instance • Malletにおいてデータ一つ一つはInstanceと いうオブジェクトで表現される – 文章集合中の文章に相当する • 4つのメンバ変数を持つ – Name (Instanceの名前 今回は使わない) – Data (入力データ) – Target/Label (出力 今回は使わない) – Source (Instanceのソース)
  • 29. Iterator • InstanceにはIteratorを経由して、アクセスされ る – XML,ディレクトリ配下のファイルなど様々な入力 形式に対応できる • 大抵の場合はCsvIteratorが使える
  • 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. Pipe • CsvIteratorで読んだInstanceに入っているdata は単なるString – Malletで扱う形式に変換する必要がある • Instance Pipe.pipe(Instance inst) – 与えられたInstanceを別のInstanceに変換して返す – TokenSequence2FeatureSequenceなど様々な変換 用のPipeが存在する • SerialPipe(List<Pipe>) – 指定されたlist中のpipeを順番に適応するPipe
  • 32. InstanceList • Instanceのリストを表現する • InstanceList(Pipe pipe) – InstanceListに入ってくるInstanceを処理するpipe を指定する • void InstanceList.addThruPipe(Iterator inst) – InstanceListにpipeを通しながらIterator経由で データをロードする
  • 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 ArrayList<Pipe> pipeList = new ArrayList<Pipe>(); 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. 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. マルチスレッドのパフォーマンス • UCI Datasetのnytimesデータを使用 – 30万文章, 10万単語 – 約1億トークン – トピック数500, 反復回数 500回 1スレッド 276min 33sec 4スレッド 179min 45sec Core i7 920 , JDK 1.6.16 (-server –Xmx1500m)
  • 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. 新規文章に関する推論 • getInferencer()を呼びTopicInferencerを取得 する • TopicInferencerのgetSampledDistributionを使 うと各トピックに帰属する確率を取得できる
  • 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. 参考文献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