Rによる文書モデルの可視化 #TokyoR

4,798 views
4,650 views

Published on

Rによる文書モデルの可視化 #TokyoR

  1. 1. Rによる文書モデルの可視化 ~ディリクレ分布、混合ディリクレ分布、LDA #tokyoR @nokuno
  2. 2. 自己紹介 2  Twitter: @nokuno  はてな:id:nokuno  自然言語処理勉強会を主催(第2回は9/25開催)  PRML/R/Python/Hadoopなど 2002~2006:コミケで同人ゲーム売ってた 2007~2008:未踏でSocial IMEの開発 2009~現在:Web業界勤務(←今ここ)
  3. 3. 今日の話題 3  文書モデルとは  Wikipediaの可視化  生成モデルの可視化  ディリクレ分布  混合ディリクレ分布  LDA
  4. 4. 文書モデルとは 4  文書の生成確率をモデル化  単語の多項分布を利用するのが一般的  文書を、その文書が含む単語の割合で表す Documents bag-of-words w1: μ1 w1: μ1 w1: μ1 μ2 w2: w2: μ2 w2: μ2μ3 w3: w3: μ3 ・ w3: μ3 ・ ・ ・ ・ ・ ・ ・ ・
  5. 5. 単語の多項分布 5  ある文書で単語w_kがN単語中m_k回使われる確率  N K  m m ...m   k Mult (m1 , m2 ,..., mK | μ, N )  mk   1 2 K  k 1 パラメータμ_k:単語w_kが使われる確率 mk ←単語w_kが使われた回数 k  N ←全単語数 ※単語の順序は無視=bag-of-words仮定
  6. 6. パラメータ空間 6  多項分布のパラメータμ_kは以下を満たす 0  k  1  k k 1 3変数の場合、この条件を満たすパラメータは 図の三角形上の1点で表される
  7. 7. Wikipediaからの文書unigramの出力 7 Wikipediaのダンプデータから、記事ごとのunigram確率を出力 本文抽出 前処理 形態素解析 単語に分割 unigramの集計 単語の出現頻度 正規化して出力 正規化項で割り算
  8. 8. ソースコード(Python) 8
  9. 9. データ例 9  Wikipediaの記事からbag-of-wordsを集計・正規化 形態素解析・集計 正規化・単語選択
  10. 10. Wikipediaの可視化 10 アメリカ 東京 日本
  11. 11. Wikipediaの可視化(+正規ノイズ) 11 アメリカ 東京 日本 noise<-matrix(rnorm(2000,sd=0.01),ncol=2) plot(read.table("R/topic10.txt", fileEncoding="utf-8", header=T)[1:2]+noise, cex=0.1)
  12. 12. Wikipediaの可視化 12 R の 東京
  13. 13. Wikipediaの可視化 13 こと 的 物
  14. 14. Wikipediaの可視化 14 に は の
  15. 15. Wikipediaの可視化 15 月 日 年
  16. 16. ディリクレ分布 16 ( 0 ) K Dir (  |  )  K   k k 1  ( i ) i 1 k 1 正規化項 K  0   k k 1  ガンマ関数: ( x)   u x 1e u du 0
  17. 17. ディリクレ分布 17 plot(rdirichlet(10000, c(1,1,1))[,1:2], cex=0.1)
  18. 18. ディリクレ分布 18 plot(rdirichlet(10000, c(0.1,0.1,0.1))[,1:2], cex=0.1)
  19. 19. ディリクレ分布 19 plot(rdirichlet(10000, c(10,10,10))[,1:2], xlim=c(0,1), ylim=c(0,1), cex=0.1)
  20. 20. ディリクレ分布 20 plot(rdirichlet(10000, c(1,1,10))[,1:2], xlim=c(0,1), ylim=c(0,1), cex=0.1)
  21. 21. ディリクレ分布 21 plot(rdirichlet(10000, c(10,10,1))[,1:2], xlim=c(0,1), ylim=c(0,1), cex=0.1)
  22. 22. 混合ディリクレ分布 22 x <- rdirichlet(10000, c(10,15,15))[,1:2] y <- rdirichlet(10000, c(100,20,20))[,1:2] z <- rdirichlet(10000, c(20,50,10))[,1:2] plot(rbind(x, y, z), xlim=c(0,1), ylim=c(0,1), cex=0.1)
  23. 23. 混合ディリクレ分布 23 x <- rdirichlet(10000, c(1,1,10))[,1:2] y <- rdirichlet(10000, c(10,1,1))[,1:2] z <- rdirichlet(10000, c(1,10,1))[,1:2] plot(rbind(x, y, z), xlim=c(0,1), ylim=c(0,1), cex=0.1)
  24. 24. LDA 24 x <- rdirichlet(10000, c(1,1,1))[,1:2] linear <- function(x) {x %*% matrix(c(0.7,0.1,-0.05,0.8),nrow=2) + c(0.05,0.05)} plot(linear(x),xlim=c(0,1), ylim=c(0,1), cex=0.1)
  25. 25. LDA 25 x <- rdirichlet(10000, c(5,1,1))[,1:2] plot(linear(x),xlim=c(0,1), ylim=c(0,1), cex=0.1)
  26. 26. まとめ 26  文書モデルは、単語の多項分布の確率モデル  Wikipediaの分布を可視化した  ディリクレ分布を色々組み合わせてモデル化  推論とかわかりません><  混合ディリクレ分布は意外とよさげ
  27. 27. 27 ご清聴ありがとうございました Presentation by
  28. 28. Wikipediaの可視化 28 時代 世界 年
  29. 29. ベイジアンアップデート 29

×