2013年9月29日日曜日

潜在意味解析

潜在意味解析(LSA)とは、高次元のデータを低次元に圧縮する技術(次元圧縮と呼びます)です。
主成分分析をご存知の方は、そちらをイメージすると理解が早いです。

■用途

①文書分類
②検索ワードとは異なる表現をした文書の検索
③情報推薦



■考え方

どのデータも、予め決められたいくつかの素材データの組み合わせで
構成されていると考えます。
つまり、データの差分は、素材データが使われた量の違いであると考えるのです。
(量がマイナスになるものもありますが、ここはご愛嬌ってことで・・・^-^;)

この素材データが何であるのか、という点と、その使用量の2つを推測し、
これらを何らかの形で活用しましょう、という発想がLSAです。

「何らかの形で」と表現をぼかした理由は、用途によって使い方が違うからです。


■特異値分解(SVD)

LSAのメインはSVDです。
SVDとは、1つの行列を、3つの行列の積として表現するための処理方法で、
先ほどの考え方の項目で書いた「素材データ」と「その使用量」を
求めるために使用します。

式で書くと、こんな感じです。

 D = U・S・V*   ・・・(式1)

Dは分解前の行列で、n x m 行列です。

Uはn x k の直交行列です。ここで、kはnとmのうち小さい数値が入ります。
Vはm x k の直交行列です。V*はVの転置行列です。
Sは、k x k の対角行列であり、特異値が並ぶ対角行列となっています。 

ここで、特異値とは、行列Aと行列A*との積を固有値分解し、
その平方根をとったものです。非負値です。


ここで注目するべきところは、行列Uと行列Vが
それぞれ直交行列である点です。

これは、行列Dの部分空間にあたる基底ベクトルが
行列Uあるいは行列Vであることを示しています。
ここで基底ベクトルとは、先ほどの「考え方」のところで書いた
素材データのことを言います。

よって、(式1)が言わんとすることは、
行列Dとして表現されたデータは、
行列Uで表された素材データを
行列(S・V*)*で表される量だけ配合したもの、
と見ることができるのです。

(かなり説明を飛ばしましたが、ここは行列としての本質になるので
 後で改めて説明しましょう。気が向いたら・・・ですが・・・(^-^;;))


ちなみに、具体的なSVDの数値計算の仕方は私も分かりませんm(_ _)m
こちらは、必要に迫られたときに勉強したいと思いますが、
今のところは、Rのライブラリがあるので、有難く使わせてもらうにとどめています(^^)



■次元圧縮

LSAでは、SVDを行った際に得られる3つの行列(式1を参照)のうち
行列Sにあたるものが、次元圧縮の鍵を握っています。

行列Sは、特異値が対角に並んでいる行列でした。
この特異値は、要は固有値そのものです。
つまり、行列Uあるいは行列Vで表される素材データの
量にあたるものです。

つまり、特異値が小さいものを使わないようにすることによって、
情報を抽象化したり、演算量を削減したりするわけです。

実際には、(式1)でいうkの値を小さくすることによって実現します。



■分析の仕方の例

ここでは、冒頭で書いた3つの用途について書いてみます。

①文書分類

単語文書行列(ここでは文書を行ベクトルで表現する。素性は単語)を
SVDして、行列Vを求めます。

行列Vは、行列Dで表される各データを
行列Uの各列を基底ベクトルに持つ部分空間へ
射影した後の座標です。

この行列Vとその転置行列であるV*との積を取ることによって
各文書が他のどの文書に近いのかを把握することができます。
この行列積の各要素の大きさを基にしてデンドログラムを作成していけば
クラスタリングの結果を得ることができます。


単語の抽象化が必要なければ、行列Dと行列Uとの積をとり、
各要素の最大値を調べることによって、行列Dの各列データが
どこに所属するのかを決めても良いと思います。


②検索ワードとは異なる表現をした文書の検索

検索対象とする文書データ全体に対して単語文書行列を作成します。
そして、この単語文書行列の転置行列に対してSVDを行います。

行列Uは、部分空間の基底ベクトルの集合となるので、
こんどは検索文字列にあたる入力ベクトルの左から
行列Uの転置行列をかけて、次元圧縮を行います。

この次元圧縮後の入力ベクトルと、行列Vとの積をとると
検索対象の文書データとの類似度がそれぞれ求まりますから、
この中から一定値以上のものを検索結果として出せばよいでしょう。


③情報推薦

基本的な考え方は②と同じです。
②において、次元圧縮後の入力ベクトルと、行列Vとの積で得られた
列ベクトルのうち、もっとも要素値が高くなった文書を
推薦結果として出せばよいでしょう。



次回は、サンプルプログラムを用意しようと思っています。

サンプルは、あらびきさんのソースコードがとても分かりやすいので、
以下のサイトを参照して頂くのが良いかと。。。


■参考資料

潜在的意味インデキシング(LSI)徹底入門(あらびき日記)
http://d.hatena.ne.jp/a_bicky/20120324/1332591498

LSAの概要と実行(猪原敬介さんの資料)
http://www.educ.kyoto-u.ac.jp/cogpsy/personal/Kusumi/datasem09/inohara.pdf


0 件のコメント:

コメントを投稿