270 likes | 3.56k Views
IIR 輪講復習 #18 Matrix decompositions and latent semantic indexing. お知らせ. たつをさんによる補足情報 http://chalow.net/clsearch.cgi?cat=IIR 復習資料おきば http://bloghackers.net/~naoya/iir/ppt/. 参考. http://www-csli.stanford.edu/~hinrich/information-retrieval-book.html 本資料は書籍の輪読会に向けたサマリ
E N D
IIR輪講復習#18 Matrix decompositions and latent semantic indexing
お知らせ • たつをさんによる補足情報 • http://chalow.net/clsearch.cgi?cat=IIR • 復習資料おきば • http://bloghackers.net/~naoya/iir/ppt/
参考 • http://www-csli.stanford.edu/~hinrich/information-retrieval-book.html • 本資料は書籍の輪読会に向けたサマリ • 本資料内で一部上記ドキュメント, スライドからの引用あり
本章のテーマ • 行列の特異値分解 (Singular value decompositions, SVD) • 潜在的意味インデキシング (Latent semantic indexing, LSI)
単語文書行列 • 単語文書行列 C • 情報検索アルゴリズムのキモ • M単語 (辞書)、N文書 → M次元, N列 • 内積計算 → スコアリング • IIR これまで (7章) • スパースであることを利用して枝狩り • 転置インデックスが利用できる
LSI は何がしたいか • C をより小さな行列 Ck に近似したい • どのように近似? → C と Ck の二乗誤差を最小に • なぜ? • 次元を「削減」することで計算量を下げる • 次元を「縮退」させることで適合度を上げる • car で automobile を検索
次元の削減 • 行列 C の次元 ・・・ 単語 • × 要らない次元 (行)をいきなり削る • ○ 似たような次元 (行) をまとめてから要らない次元を捨てる • どうやって? • 行列の特異値分解 (SVD)
固有値 (eigenvalue) • Ax = λx • x はベクトル • λ ・・・ 固有値, x ・・・ 固有ベクトル • 特性方程式 |A - λI| = 0により算出 • 写像A により方向を変えないベクトル • 固有値、固有ベクトル • 便利な数学的性質を多数持つ • 行列の対角化 → An, 量子力学, 主成分分析, PageRank, HITS etc • その行列の性質をよく表現する値, ベクトルであり、行列を分解するのにも使える。にも関わらず、行列自身がそれを内包しているところが面白い
固有値と次元の重み 固有値, 固有ベクトル λ1 = 30, λ2 = 20, λ3 = 1 固有ベクトルどうしは一次独立。例として、適当なベクトル vは固有ベクトルの線形結合で以下のように表せる
固有値と次元の重み (続き) 固有ベクトルの線形結合で表現した vを Sで写像してみる (ちなみにλ1 = 30, λ2 = 20, λ3 = 1) S による写像において、相対的に小さな固有値に対応する固有ベクトル (ここではx3)の次元の影響が小さいことが分かる
固有値と次元の重み (続き) • 小さな固有値に対応した固有ベクトルの次元は行列の性質に与える影響が小さい • 行列を固有ベクトルで表現、すなわち基底を固有ベクトルに変更できれば、小さな固有値の次元を無視することで近似できる • そこで固有値による行列分解 S = UΛU-1
M ≠ N 行列を分解したい • 固有値分解で次元削減の手がかりが得られる、しかし固有値分解は正方行列 (M = N) にしか利用できない • 単語文書行列は多くの場合 M ≠ N • M ≠ N でも固有値絡みで行列を分解できないか → SVD • C = UΣVT
SVD • 任意の行列 C に対して C = UΣVT • U = CCt の固有ベクトルを列とする行列 • V = CtC の固有ベクトルを列とする行列 • CCt, CtC ・・・ 自己相関行列 • U, V は自己相関行列 = 対称行列から求めた固有ベクトルを成分にしている。対称行列の固有ベクトルは固有ベクトル同士で必ず直交するので U, V は直交行列 • Σは特異値 σij = (λij)1/2を対角成分とする対角行列 • 固有値分解によく似たかたち • σは U, Vtを構成するベクトルの「基底としての重み」を表している • σの値に従って次元を削減できる
SVD による行列の低階数近似 • C = UΣVt の Σ を構成するσij のうち、値が小さな物を 0 にする • ランク(階数) が下がる = 基底の数が減る • Σ → Σk • Ck = UΣkVt • 重要な基底だけを残して小さな行列に近似したことになる • Ck の近似の妥当性 • σの値による低階数近似は C と Ck の二乗誤差 (フロベニウスノルム)を最小化することが知られている
SVD は何をしているのか • C の行ベクトルの張る空間の正規直交基底と、列ベクトルの張る空間の正規直交基底を同時に求めている • データを表現するのに最適な基底として自己相関行列の固有ベクトルを求めている • U と Vt • さらに各基底の重要度を特異値σが与える • 単語文書行列の SVD → 文書を表現するの最適な正規直交基底と単語を表現するのに最適な正規直交基底を同時に求めている
単語文書行列の SVD による次元圧縮 • Latent semantic indexing • SVD で小さくした Ck にいつもの内積計算など • 単語文書行列を SVD したときに使った CCt, CtC は単語の共起、文書の共起 • 基底を固有ベクトルに変更したことで、SVD は似たような共起をする単語, 文書の次元を一つにまとめたことになる • ゆえに、小さな行列に近似したにも関わらず適合率が向上する
主成分分析と SVD※『情報検索アルゴリズム』より
主成分分析と SVD • 主成分分析 ・・・ 多変量解析 • 基底を変換して情報量の多い軸で変量を解析する l2 軸は無視できる!
主成分分析と SVD (続き) • 主成分分析の基底の求め方 • 特定の次元を削減したときに情報量を損なわないように • 情報量を損なわない = 情報量を最大にする • 情報量最大 = データの分散が大きくなる基底を選ぶ • データの分散を考えたい → 共分散行列を利用する
主成分分析と SVD (続き) • 共分散行列 • 対角成分が分散、それ以外が共分散 (μiは次元 i 番目の平均, D が単語文書行列, S が共分散行列)
主成分分析と SVD (続き) • 共分散行列を固有値分解する • S は (D - M)(D - M)T → 対称行列 • S = UΛUT • 分解により得られた行列 U への写像 • 固有ベクトルが各列 ・・・ 固有空間への写像 • 元々のデータを U に写像して(固有ベクトルの張る固有空間への基底変換)から共分散行列 S' を求めてみる • d = Ud' → U-1d = U-1Ud' → U-1d = Ud' → Utd = d' → d' = Utd • S' = UTSU = Λ
主成分分析と SVD (続き) • 固有空間へ写像したデータの共分散行列がΛ • Λは対角行列 → Λの対角成分は固有値 • 共分散行列の対角成分は分散、それ以外が共分散 → 共分散行列の固有値 = 分散! • 基底を固有ベクトルに変換してから、対応する固有値が大きな次元を扱うことは、分散が大きな次元を扱っていることに等しい • 固有ベクトル = 主成分
主成分分析と SVD (続き) • 共分散行列は自己相関行列 (D - M)(D -M)T • 自己相関行列 ・・・ 自分自身の転置との積 AAT • データを表現するのに最適な基底として自己相関行列の固有ベクトルを求めている → SVD と同じ • 主成分分析と SVD は本質的に等価な技術
まとめ • 大きな固有値に対応した固有ベクトルは、その固有ベクトルが張る空間において重要な基底になる • 基底を固有ベクトルへ変更し、固有値の大きい次元を考えられるようにするのが SVD や主成分分析 • 自己相関行列が共起を表しているため、固有値の大きな基底は似たような次元をまとめたものとみなせる = 情報量が大きい次元への"縮約" • 単語文書行列を SVD により低階数近似すると計算量が減り、適合率が向上する ・・・ LSI
参考文献 • 北研二, 津田和彦, 獅子堀正幹 『情報検索アルゴリズム』, 共立出版, 2002 • 金谷健一『これなら分かる応用数学教室―最小二乗法からウェーブレットまで』, 共立出版, 2003