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

29
Rによる文書モデルの可視化 ~ディリクレ分布、混合ディリクレ分布、LDA #tokyoR @nokuno

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

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

Rによる文書モデルの可視化~ディリクレ分布、混合ディリクレ分布、LDA

#tokyoR

@nokuno

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

Twitter: @nokuno

はてな:id:nokuno

自然言語処理勉強会を主催(第2回は9/25開催)

PRML/R/Python/Hadoopなど

自己紹介 2

2002~2006:コミケで同人ゲーム売ってた2007~2008:未踏でSocial IMEの開発2009~現在:Web業界勤務(←今ここ)

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

文書モデルとは

Wikipediaの可視化

生成モデルの可視化

ディリクレ分布

混合ディリクレ分布

LDA

今日の話題 3

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

文書の生成確率をモデル化

単語の多項分布を利用するのが一般的

文書を、その文書が含む単語の割合で表す

文書モデルとは 4

Documents

w1: μ1w2: μ2w3: μ3・・・

bag-of-words

w1: μ1w2: μ2w3: μ3・・・

w1: μ1w2: μ2w3: μ3・・・

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

ある文書で単語w_kがN単語中m_k回使われる確率

単語の多項分布 5

K

k

m

k

K

Kk

mmm

NNmmmMult

121

21...

),|,...,,( μ

パラメータμ_k:単語w_kが使われる確率

※単語の順序は無視=bag-of-words仮定

N

mkk

←全単語数

←単語w_kが使われた回数

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

多項分布のパラメータμ_kは以下を満たす

パラメータ空間 6

10 k

1k

k

3変数の場合、この条件を満たすパラメータは図の三角形上の1点で表される

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

Wikipediaのダンプデータから、記事ごとのunigram確率を出力

Wikipediaからの文書unigramの出力 7

本文抽出

形態素解析

unigramの集計

正規化して出力

前処理

単語に分割

正規化項で割り算

単語の出現頻度

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

ソースコード(Python) 8

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

データ例 9

Wikipediaの記事からbag-of-wordsを集計・正規化

正規化・単語選択

形態素解析・集計

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

Wikipediaの可視化 10

東京 日本

アメリカ

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

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)

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

Wikipediaの可視化 12

の 東京

R

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

Wikipediaの可視化 13

的 物

こと

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

Wikipediaの可視化 14

は の

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

Wikipediaの可視化 15

日 年

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

ディリクレ分布 16

K

k

kK

i

i

kDir1

1

1

0

)(

)()|(

正規化項

K

k

k

1

0

0

1)( dueux uxガンマ関数:

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

ディリクレ分布 17

plot(rdirichlet(10000, c(1,1,1))[,1:2], cex=0.1)

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

ディリクレ分布 18

plot(rdirichlet(10000, c(0.1,0.1,0.1))[,1:2], cex=0.1)

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

ディリクレ分布 19

plot(rdirichlet(10000, c(10,10,10))[,1:2], xlim=c(0,1), ylim=c(0,1), cex=0.1)

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

ディリクレ分布 20

plot(rdirichlet(10000, c(1,1,10))[,1:2], xlim=c(0,1), ylim=c(0,1), cex=0.1)

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

ディリクレ分布 21

plot(rdirichlet(10000, c(10,10,1))[,1:2], xlim=c(0,1), ylim=c(0,1), cex=0.1)

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

混合ディリクレ分布 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)

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

混合ディリクレ分布 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)

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

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)

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

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)

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

文書モデルは、単語の多項分布の確率モデル

Wikipediaの分布を可視化した

ディリクレ分布を色々組み合わせてモデル化

推論とかわかりません><

混合ディリクレ分布は意外とよさげ

まとめ 26

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

ご清聴ありがとうございました

27

Presentation by

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

Wikipediaの可視化 28

世界 年

時代

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

ベイジアンアップデート 29