Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第二回機械学習アルゴリズム実装会 - LDA

15,316 views

Published on

Published in: Technology
  • Be the first to comment

第二回機械学習アルゴリズム実装会 - LDA

  1. 1. 機械学習アルゴリズム実装会#2 LDA for topic modeling Masayuki Isobe
  2. 2. 自己紹介 • 礒部正幸(いそべ まさゆき) • 職業: ソフトウェアエンジニア • 現在: アドファイブ(株) 代表 http://www.adfive.net – 今のところ代表1名の会社です – アドテク、データドリブンマーケティング事業 • ソフトウェアコンサルティング及び受託開発 • 理系大学院卒 • インターネット活動 – TwitterID: @chiral – (ブログ:アドファイブ日記) http://d.hatena.ne.jp/isobe1978/ • 最近実装したアルゴリズム – カルマンフィルタ、粒子フィルタ、Restricted Boltzmann Machine、ベイズロジスティック回帰、uplift modeling, SCW, LDA
  3. 3. Topic Modelingとは • 主に文書データを想定したクラスタリング – クラスタリング = 教師なし分類 文書データの例) 文書1 = “明日は機械学習ハッカソンの日だ。予習はバッチリだ。” 文書2 = “ワールドカップのせいで夜更かししちゃいそうで怖い。” 文書3 = “日本人のせいで鰻が絶滅したら末代まで世界の恥だ。” … • Bag of Words (BoW) というデータを統計モデル化 Bag of wordsの例) BoW1 = { “明日”:1, ”機械学習”:1, “ハッカソン”:1, “日”:1, “予習”:1, “バッチリ”:1 } BoW2 = { “ワールドカップ”:1, “夜更かし”:1, “怖い”:1 } BoW3 = { “日本人”:1, “鰻”:1, “絶滅”:1, “末代”:1, “世界”:1, “恥”:1 } ・単語の順番を無視して、文書内に出現する単語の頻度だけ考える ・教師データを与えずに、単語の出現傾向(=トピック)をモデル化する
  4. 4. LDAとは • TopicModelingの1手法 – 入力=文書(BoW)の集合 、 トピック数K( K=5とか、人間が与える) → 出力=各文書の各単語のトピック番号が確率分布で得られる 例)文書100個、トピック数K=3 BoW1 = { “明日”: [ 0.1,0.1 ,0.8], ”機械学習”:[ 0.2,0.3,0.5 ], “ハッカソン”:[ 0.4,0.3,0.3 ], “日”:[ 0.2,0.2,0.6 ] , “予習”:[ 0.3,0.5,0.2 ], “バッチリ”:[ 0.2,0.6,0.2 ] } BoW2 = … • 代表的な確率計算アルゴリズム(下に行くほど新しい) – 変分ベイズ法 • LDAの考案者であるBlei博士の論文で実装 – Collapsed Gibbs sampler • Mallet(Java), Gensim(Python) で実装されている – 周辺化変分ベイズ法Zero • Mahout(Java)で実装されている K=3なので3面サイコロの確率分布が各単語について計算される 今日はこれを 実装します。 (LDAの実装 といえば、まず 最初にこれを やるのが定番 となっている)
  5. 5. LDAの統計モデル(1) K = トピック数 α =ハイパーパラメータ Β =ハイパーパラメータ 人が天下り的に与える 統計モデルを数式じゃなくてこういう図であらわすことを グラフィカルモデルって言います 矢印は 「何かサイコロを振る行為」を表します。 黒く塗りつぶした変数(下図だとw)は、観測データ 白抜きの変数は、パラメータ 四角い箱の囲みは、その中にある丸と矢印を繰り返す という意味。 φ = V面サイコロ Θ =K面サイコロ Z =サイコロΘの出目 モデルの中で使うパラメータ M = 文書の数 N =その文書の単語の数 W =その文書の単語 (あと、図に無いけど便宜上 V =単語の種類数とする) 観測データ(学習データ) =
  6. 6. LDAの統計モデル(2) Βに従ってV面サイコロφを K(トピック数)個製造する αに従ってK面サイコロΘを M(文書の数)個製造する その文書用のK面サイコロΘ をN(その文書の単語数)回振る 出目Zを見てV面サイコロφを選んで 振ってWを出す(ってのをN個ぶんやる)
  7. 7. 潜在変数とベイズ推定 白抜きのパラメータのうち、人間が天下り的に与えない φ、Θ、Zの3つが パラメータ学習の対象。 ベイズ推定では、φ、Θ、Zの初期値を与えて、サンプリングによってφ、Θ、Zが それぞれどんな感じで出てくるかを調べる。 LDAで最も知りたいのはZであり、φ、Θはサンプリングせず、あらかじめ数式変形に よって周辺化(積分)することができる。 Collapsed Gibbs Samplerでは、zだけをサンプリングして、zの確率分布を分析する。
  8. 8. Zのサンプリング • (前頁の通り)Θとφは数式上であらかじめ積分消去してある。 • それでもZは1次元ではないことに注意、Zは「各文書の単語数を合計」したぶんだ け要素がある 坪坂さんの資料より引用 http://www.slideshare.net/tsubosaka/tokyotextmining 各面の面積が、この式 の右辺で表されるような 「K面サイコロ」を各単語 について作って振れば よい
  9. 9. アルゴリズム概要 ① 各単語にトピック番号(1~Kのいずれか)を ランダムに付与する ② 各単語ごとに、上の式に従ってK面サイコロを作り、 そのサイコロを振ってその単語に付与されたトピック 番号を更新する ③ すべての単語について②をやったら、また最初の単語 から②をやるというののを数十セット繰り返す ④ ②で振ったサイコロの出目 (文書Dの単語WのトピックがTという3つ組)の履歴を 集計して出力 Zは単語の数ぶんある多次元ベクトルなので、 ②は本来は多次元のぶんだけ 「いっせーのせ」でサイコロを振る必要があるが、単語1個ずつサイコロを振っていく、 そのときにその単語以外のZは固定してしまう、というのがギブスサンプラー。 おまけ知識:ギブスサンプラーとはなんぞや
  10. 10. データセットとソースコード • http://labs.adfive.net/mlhackathon/20140614/in1.csv – Yahooニュースヘッドライン(2014/6/13日分)から366記事 スクレイピングしてMeCab使ってBoW化したCSVファイル • http://labs.adfive.net/mlhackathon/20140614/in1_small.csv – より少量のデータとして、30記事ぶんのも用意しました • 講師のプログラムはこちらにおいてありますので見ながらやりたい人はどうぞ https://gist.github.com/chiral/2560383d5643da80b6bf
  11. 11. 参考資料 • https://www.ai-gakkai.or.jp/my-bookmark_vol27-no3/ • http://www.slideshare.net/tsubosaka/tokyotextmining • http://d.hatena.ne.jp/n_shuyo/20110215/lda

×