相関係数・COS類似度

(1)COS類似度


文章の類似度を測る尺度としてCOS類似度がある。クラスタリングの素性だとかに使われるようで、簡単な式で算出できるのでとっても便利である。
\HUGE{\frac{\bf{x}\cdot\bf{y}}{|\bf{x}||\bf{y}|}}=\cos{\theta}

具体例で考えてみる。
文書x:「私は本格的に頭の悪い生徒です。」
文書y:「私は本当に頭の良い生徒です。」


この二つの文書は類似しているだろうか?
ぱっと見似たような文章だがまあ、言いたいことは違うし逆だ。(この文書の類似度を求めることに意味はあるだろうか?)


このとき、文書を単語1語の生起回数を要素としたベクトルにしてみよう。(ベクトルと書いたがこれを単純に、要素を並べたもの、と思ってもこの範囲では問題ない。と書けば予防線が張れるのか。)
まず全文書の単語をならべたベクトルを用意する。


{私,は,本格的,に,本当,頭,の,悪い,良い,生徒,です}


読点は今要らない情報ではないので無視する。
さて、このベクトルに生起回数を入れてみよう。
文書x:{1,1,1,1,0,1,1,1,0,1,1}
文書y:{1,1,0,1,1,1,1,0,1,1,1}
となる。ここでcos類似度を計算すると、0.77777だ。まあ、似ているようだ。一応、式は
\HUGE{\frac{\bf{1+1+0+1+0+1+1+0+0+1+1}}{\bf{\sqrt{9}}\bf{\sqrt{9}}}}こんなもんです。


分母はノルムというやつで、全ての単語生起回数を2乗して足し、平方根をとるという計算になる。
その結果、分母の値は9となった。また、分子はそれぞれの要素をかけて足す演算で、どっちかが0であれば足されずに終わる。
だから、分子は分母に比べて必ず小さくなる。


そういうわけで、COS類似度は1以下の値になる。今回は生起回数を対象にしたのでCOS類似度の値が負になることはない。


しかし、「出現していたら1,出現していなければ-1」という使い方ならば-1になることもあるので、COS類似度の範囲は-1〜1ということを一般にしておくと問題が起きない。
まあ-1〜1だろうと0〜1だろうと、生起回数を対象にしたような扱いなら意味に大した違いはでないだろう。(普通にやれば0〜1の範囲になるとは思うんだけどなあ。)


当たり前のことを書いておくと、別に二つの文が意味的に似ている(伝えたい情報が似ている)ことがCOS類似度によって求められるわけではなく、あくまで見た目似ていることがわかるだけだ。
レポートのパクリチェックとかは割と特異で大きい文書を扱うので、似ているとパクリ確率は非常に高いだろう。しかし、今のような小さい文書などでは、意味のある結果が出るとは限らない。
対象の文書にこの指標が効を奏するか、よくよく考えなければならない。(という自分への戒め)


(2)相関係数


相関係数は二つの「確率変数」の間の関係度合いを測る指標だ。そして、その二つの確率変数には正規分布を仮定する。
正規分布ということは、平均と分散があるということで、この二つを使って相関係数は求められる。
意味としては、値が1か-1に近いほど関係があり、0であれば二つの間に関係がない、ということになる。(場合によるが、大雑把にはこうなる。)
ー1ならば反対の関係があるということだ。(xが増加するとyが減少する、など)
なお、回帰分析からも相関係数の式を垣間見ることができるが、それは今度メモにする。で、式は下記。

\HUGE{\frac{\sum_{k=1}^{n}(x_{k}-\overline{x})(y_{k}-\overline{y})}{(\sqrt{\sum_{k=1}^{n}(x_{k}-\overline{x})^{2}}\sqrt{\sum_{k=1}^{n}(y_{k}-\overline{y})^{2}}}


でっかいためか厳しい式に見えるが、COS類似度との違いは平均を使うかどうかだけだ。
COS類似度では単純に文書の生起回数を使っていたが、今回はそれぞれのデータからそのデータの平均を引くものを使う。


せっかくだから上の文書ベクトルに対して相関係数を求めてみよう。あまりの意味の無さに愕然とするだろう。
まず平均だが、文書xは回数の平均が9/11、文書yも9/11だ。それぞれのデータから平均を引けば、
文書x':{ 2/11, 2/11, 2/11, 2/11, -9/11, 2/11, 2/11, 2/11, -9/11, 2/11, 2/11 }
文書y':{ 2/11, 2/11, -9/11, 2/11, 2/11, 2/11, 2/11, -9/11, 2/11, 2/11, 2/11 }
というベクトルが出来上がる。なお、データの平均からの差は偏差と呼ばれるので、これを偏差ベクトルと呼ぶことにする。


これを使えばあの厳しい式はすっきりする。
\HUGE{\frac{\bf{x'}\cdot\bf{y'}}{|\bf{x'}||\bf{y'}|}}


どうだろう。偏差ベクトルを使えばCOS類似度と式は全く同じだ。
計算してみると、値は-46/190 = -0.2421となる。
ー0.2421というと殆ど無さそうな負の関係があるということだが、この文書の間には何の意味もない値である。
無理やり意味付けするならば、1ならば全く同じ文書、-1のときは二つの文書での出現単語が全て違う文書となる。0はどっちかで全ての単語生起回数が1のときとか?
それ以外の値は色々と考えてみたがどうも場合によるとしか言えない。偏差を使うことは文書ベクトルに対してほとんど意味が無さそうだ。


考えるまでもなく、相関係数を求めることは全く意味の無い結果に終わった。
相関係数を求めるということは、文書ベクトルxが正規分布n1に従い、yが正規分布n2に従う、ということを仮定する。つまり、基本的興味は「文書間の出現単語頻度の分布の関係」になる。
COS類似度でも同じだが、「は」が2回、「本格的」が1回、などの単語が何であるか、といった情報については見ない。身長や体重計測で「佐藤君の身長が165cm」、といった見方をしないのとある意味同じことだ。
すると、今やっていたことは「ある文書中に出てくる出現単語の頻度は、もう一つの文書中に出てくる出現単語の頻度と関係があるか?」という問いとなる。
「ある文書」と「もう一つの文書」の選び方が定まれば関係が出てくるかもしれないが、今は選び方を考えていない以上、二つの文書は「全文書という母集団から(ランダムに)抽出した二つの標本文書」という見方になり、データ群xとデータ群yは同じ母集団に従うため、求めているのは「文書における出現単語頻度の偏差積(ノルムで割ったもの)」ということになってしまう。(つまり、意味が無い。)


(3)まとめ


計算法上では、COS類似度と相関係数の違いはベクトルに偏差を使うか使わないかにある。
そのせいか、自分にはCOS類似度は相関係数とやっていることが同じにしか見えなかった。
そこで、相関係数を文書ベクトルに対して求めてみるというアホなことをしてみたが、偏差を使うことの無意味さを味わってしまったのだ。
恥ずかしいがせっかくなのでメモとして残しておく。
次は相関係数と回帰分析についてメモしてみよう。