潜在的意味インデキシング(LSI)徹底入門 - あらびき日記
上記で紹介されていたサンプルを動かしてみました。
Rで書かれたスクリプトです。
d1: 会場には車で行きます。 d2: 会場には自動車で行きます。 d3: 会場には自転車で行きます。 d4: お店には自転車で行きます。
以上のような4つの文章から、単語を取り出して、
d1 d2 d3 d4 会場 1 1 1 0 店 0 0 0 1 自動車 0 1 0 0 自転車 0 0 1 1 行く 1 1 1 1 車 1 0 0 0
と行列で表現する。単語の語順は考慮しない(bag of words)
このままでも自動車と車が類義語だと分かります。
単語の意味は、周囲の単語との関係で決まると考えると、
同じような言葉に囲まれているから、車と自動車は同一の意味だと推定できるみたいなニュアンスかな。
で、この行列を圧縮する
圧縮の仕組みはちょっとよくわからないですが、
次元の呪いも減るのでしょうし、圧縮することで、過学習が無くなって、類似度判定が向上するようです。
実際にRをインストールして動かしてみました。
はじめd1とd2の類似度は0.666667だったのが、次元圧縮すると1.0に向上しています。
# Rscript lsi_sample.R to make data frame 単語・文書行列 d1 d2 d3 d4 会場 1 1 1 0 店 0 0 0 1 自動車 0 1 0 0 自転車 0 0 1 1 行く 1 1 1 1 車 1 0 0 0 検索クエリq「会場 車」との類似度 元々の文書の類似度 d1 d2 d3 d4 d2 0.6666667 d3 0.6666667 0.6666667 d4 0.3333333 0.3333333 0.6666667 q 0.8164966 0.4082483 0.4082483 0.0000000 ランク削減版の類似度 d1 d2 d3 d4 d2 1.000000000 d3 0.837087619 0.837087619 d4 0.349599386 0.349599386 0.805193724 q 0.678298315 0.678298315 0.431130039 0.003082754 次元削減版の類似度 d1 d2 d3 d4 d2 1.00000000 d3 0.83708762 0.83708762 d4 0.34959939 0.34959939 0.80519372 q 0.93838173 0.93838173 0.59644045 0.00426479
同じようなことを、googleのword2vecの記事でも見ましたが、
mecab - 米googleの研究者が開発したWord2Vecで自然言語処理(独自データ) - Qiita
あれは100次元などで単語をベクトル表現すると、
man,king→woman, ?
と尋ねるとqueenが判るとのことで、
これは幾何学的に、
man - king + woman = queen
と表現されているそうで(凄すぎる)
要するに、man-kingというベクトルは、差のベクトルを表してますから
その差をwomanに足してやると、その位置にはqueenがいる(100次元空間座標で)
さらに凄いのが、goodとbestの中間にbetterの座標がいるように学習されたそうです(驚き)
要はこういうことですよね。better = (good+best)/2
これが、bag of wordsを深層学習することで得られたとは本当に凄いと思う。
しかし、Rって凄いね。ちょっと演習してみますかね。あとpythonも演習してみますかね。
覚えることが多すぎる。数学力も全然無いから、統計学とか勉強したい。