ベクトルの類似度を測る指標と MinHash について
こんにちは、 @kz_morita です。
今回は類似度を測る指標について、Cos 類似度と、Jaccard係数 そしてそれを高速に処理するための MinHash について調べたことをまとめていきます。
類似度の計算の必要性 ベクトルの類似度を計算することは、例えばベクトル化された文書間の類似検索であったり、重複するドキュメントを検出したりする際に有効とされています。
今回は、類似度の指標である
Cos 類似度 Jaccard 係数 と高速化のための MinHash というアルゴリズムついて見ていきます。
Cos 類似度の定義 Cos 類似度は、ベクトル同士の類似度 (≒ ちかさ) を表すことができる式です。
ベクトル $\vec{a}$ と $\vec{b}$ の Cos 類似度はを表す式は以下のような形になります。
$$ cos \theta = \frac{\vec{a}\cdot\vec{b}}{|\vec{a}||\vec{b}|} = \frac{\sum_{i=1}^{N} a_{i}b_{i}}{\sqrt{\sum_{i=1}^{N} a^2_{i}} \sqrt{\sum_{i=1}^{N} b^2_i}} $$
これは、ベクトルの内積の式である
$$ \vec{a}\cdot\vec{b} = |\vec{a}||\vec{b}| cos \theta $$
から変形したものになります。
つまり二つのベクトルが成す角 $\theta$ の $cos$ の値を類似度として使うということで、その値の範囲は $$ -1 \leq Cos 類似度\leq 1 $$ になり、1に近づくほど角度が近い = 類似度が近いとなり、0 に近づくほど直交していて、-1 ほど反対になるというものになります。