白井ゼミ 豊田秀樹(2008)『データマイニング入門』 (東京図 書)第9章 情報知能学科 白井 英俊 1 潜在意味分析(LSA) • LSA: Latent Semantic Analysis 人間の意図、意味という背景をとらえた情報 検索を可能にするために開発された手法 ⇒ 言葉の同義性や多義性に対処するために発 展した統計的技法 潜在意味索引(latent semantic indexing)とも 潜在意味分析(LSA)(続) • 特徴: 文書には意味の構造が存在する 文書中の「意味」を表す語句を行列で表現 この行列を分解する ⇒複数の語句の背後に共通して潜在する意味構造 を抽出 語句-文書行列を作成し、この行列を特異値分解によ り、より少ない次元で、本来の情報を表現する 意味の定式化:語句-文書行列 語句―文書行列:すべての文書の現れる語句を行、対象の 文書を列に配置した共起行列 要素は出現(1)・非出現(0)、または出現頻度数 表9.1 語句-文書行列の例(辞書定義から、一部) 病院 医院 クリニック 少年院 医師 0 0 2 0 医療 1 0 0 0 病気 0 1 0 0 患者 1 0 0 0 収容 1 0 0 1 施設 0 0 1 1 送致 0 0 0 1 特異値分解 • 語句-文書行列から、潜在的な意味の構造を特異 値分解により抽出 • 語句t個、文書d個の語句-文書行列 M td に対し Mtd TtnSnn D'd n ここで S は対角要素に特異値と呼ばれる非負の値 が大きい順に配置された対角行列 n はAの行と列のうち値の小さい方(n=Min(t,d)) T の各列は左特異ベクトル(語句の特徴)、Dの各列 は右特異ベクトル(文書の特徴) nはMの階数(Mを構成する独立ベクトルの個数), 特異値は その「強さ」(貢献度)と考えるとわかりやすいだろう 特異値分解(図示してみると) 病院 医院 クリニック 少年院 医師 0 0 2 0 医療 1 0 0 0 病気 0 1 0 0 患者 1 0 0 0 診察 1 1 1 0 治療 1 1 1 0 収容 1 0 0 1 施設 0 0 1 1 矯正 0 0 0 1 送致 0 0 0 1 裁判所 0 0 0 1 = -0.47 -0.16 -0.12 -0.16 -0.52 -0.52 -0.25 -0.32 -0.08 -0.08 -0.08 -0.22 0.01 -0.11 0.01 -0.20 -0.20 0.44 0.32 0.43 0.43 0.43 0.62 0.300 -0.37 0.356 -0.14 -0.692 -0.37 0.356 -0.20 -0.187 -0.20 -0.187 -0.32 0.209 0.37 0.004 0.06 -0.146 0.06 -0.146 0.06 -0.146 3.13 2.19 1.98 1.24 -0.51 0.03 -0.74 0.44 -0.37 -0.24 -0.27 -0.86 -0.73 -0.24 0.61 0.19 -0.26 0.94 0.11 -0.18 少ない次元での近似 ˆ Ttk Skk D'dk M td 行列Mをその次元(n)より少ない次元で近似(k<n) -0.47 -0.16 -0.12 -0.16 -0.52 -0.52 -0.25 -0.32 -0.08 -0.08 -0.08 -0.22 0.01 -0.11 0.01 -0.20 -0.20 0.44 0.32 0.43 0.43 0.43 3.13 0.00 0.00 2.19 病院 医院 クリニック 少年院 -0.51 医師 0.03 0 0 2 0 医療 -0.24 1 0 0 0 -0.37 病気 0 1 0 0 -0.73 -0.24 患者 0.94 1 0 0 0 -0.26 診察 1 1 1 0 治療 1 1 1 0 収容 1 0 0 1 施設 0 0 1 1 矯正 0 0 0 1 送致 0 0 0 1 裁判所 0 0 0 1 病院 医院 クリニック 少年院 医師 0.74 0.65 1.18 -0.07 医療 0.27 0.18 0.37 0.16 病気 0.18 0.19 0.32 -0.13 患者 0.27 0.18 0.37 0.16 診察 0.82 0.70 1.28 0.00 治療 0.82 0.70 1.28 0.00 収容 0.43 0.06 0.33 1.12 施設 0.53 0.20 0.56 0.92 矯正 0.16 -0.13 -0.04 0.96 送致 0.16 -0.13 -0.04 0.96 裁判所 0.16 -0.13 -0.04 0.96 語句の近さの表示 (2次元だからやれること) 0.6 0.8 少年院 送致 矯正 裁判所 0.4 収容 0.2 施設 患者 0.0 病院 医療 -0.2 病気 医師 診察 治療 クリニック -0.7 -0.6 -0.5 医院 -0.4 -0.3 -0.2 -0.1 類似性 類似性を検討する観点: • 元の文書間の類似性 文書ごとのベクトルにおける 個々のセルをみる • 語句間の類似性 • 語句と文書間の類似性 • 検索質問文と元の文書間の類似性 類似性をベクトル間の角度として計 算する(おなじみの方法) 元の行列式ではなく、次元数を少なくした行列で類似度を計算 する⇒ (ノイズや類義語などの影響を削減して)本質的な意味 空間が抽出されている、という期待 類似度の計算(myCosineを使って) 元のデータから類似度を計算:myCosine(a=as.matrix(data)) 病院 医院 病院 1.00 0.52 医院 0.52 1.00 クリニック 0.34 0.44 少年院 0.20 0.00 クリニック 少年院 0.34 0.20 0.44 0.00 1.00 0.17 0.17 1.00 次元圧縮データから類似度を計算:myCosine(a=mk) 病院 病院 1.00 医院 0.90 クリニック 0.96 少年院 0.41 医院 0.90 1.00 0.98 -0.04 クリニック 少年院 0.96 0.41 0.98 -0.04 1.00 0.15 0.15 1.00 検索質問文 LSAにおける情報検索では、 検索される文書を潜在意味空 間上のベクトルとして表現 検索質問文もその空間上の ベクトルとして表現 例:「病気を治療する施設」 病院 医院 クリニック 少年院 -0.51 0.03 -0.37 -0.24 -0.73 -0.24 -0.26 0.94 文書を表現した「語句」によるベクトル表 現:q=(0,0,1,0,0,1,0,1,0,0,0) 病院 =( -0.30, 0.005) q’=qt Tt×k Sk×k-1 医院 0.999 0.833 クリニック 0.945 少年院 0.282 語句-文書行列の作成 情報知能学IVでやったように。。。 語句-文書行列を作成するには、文書における語句 の出現頻度(L)の代わりに いろいろな重み(G)をも たせることが用いられている: a(i,j) = L(i,j)×G(i) L(i,j)=log(tf(i,j)+1) # 語句の頻度(term frequency) L(i,j)= 1 if tf(i,j)>0 ; 0 otherwise 1 G(i) j L(i, j )2 G(i) = gf(i)/df(i) # gf(i):語句iの全体の出現頻度、df(i): その語句が含まれる文書の数 そのほかp.284を参照のこと 今日は。。。 • RからMeCab(奈良先端大学院大学で開発され た形態素解析器、茶筌より高速)を使う • ひょっとしてガーデンのマシンで動かない場合 は、講義のウェブページからdoctermOrg.csvを ダウンロードして使うこと 注意:1列目はrow.names、1行目はcolnames、 2行目と3行目はp.289にあるように分析では 不要
© Copyright 2024 ExpyDoc