コサイン類似度とは?
コサイン類似度は、2つのベクトルの「大きさ」ではなく「向き(なす角)」に注目して、どれだけ似ているかを測る指標です。値は −1 から 1 の範囲を取り、1 なら2つのベクトルが完全に同じ方向を向いていること、0 なら直交している(無関係である)こと、−1 なら正反対の方向を向いていることを意味します。テキストマイニング、レコメンドシステム、情報検索、機械学習などの分野で、文書・埋め込みベクトル(embedding)・特徴量ベクトルの類似度を比較する際に広く使われています。
このツールの使い方
ベクトル A とベクトル B の各成分を、カンマ区切りの数値として入力します。両方のベクトルは同じ次元数である必要があります(次元数が異なる場合は、短いほうの長さに合わせて計算されます)。計算ボタンを押すと、コサイン類似度・内積・各ベクトルのノルム(大きさ)・2つのベクトルがなす角度(度)が表示されます。
計算式の解説
コサイン類似度は、2つのベクトルの内積を、それぞれのユークリッドノルム(大きさ)の積で割ったものです。
$$\cos\theta = \frac{\vec{A} \cdot \vec{B}}{\lVert \vec{A} \rVert \, \lVert \vec{B} \rVert} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^{2}} \; \sqrt{\sum_{i=1}^{n} B_i^{2}}}$$
内積 \(\vec{A} \cdot \vec{B}\) は、対応する成分どうしの積をすべて足し合わせた値です。ノルム \(\lVert \vec{A} \rVert\) は、各成分を2乗して合計し、その平方根を取ったものです。ノルムで割ることで結果が正規化され、ベクトルの長さに左右されず「向き」だけで決まる値になります。
計算例
A = [1, 2, 3]、B = [4, 5, 6] とします。内積は \(1\cdot4 + 2\cdot5 + 3\cdot6 = 4 + 10 + 18 = 32\) です。A のノルムは \(\sqrt{1+4+9} = \sqrt{14} \approx 3.7417\)、B のノルムは \(\sqrt{16+25+36} = \sqrt{77} \approx 8.7750\) となります。したがって $$\cos\theta = \frac{32}{3.7417 \times 8.7750} \approx \frac{32}{32.8329} \approx 0.9746$$ となり、なす角はおよそ 12.93° です。
よくある質問
結果がマイナスになることはありますか? はい。2つのベクトルがほぼ正反対の方向を向いている場合、コサイン類似度はマイナスになり、完全に逆向きのときには −1 まで下がります。
ベクトルの長さ(次元数)が違う場合はどうなりますか? 重なっている次元(短いほうのベクトルの長さ)のみを使って比較します。意味のある結果を得るためには、同じ次元数のベクトルを使うことをおすすめします。
ユークリッド距離とは何が違うのですか? コサイン類似度は大きさを無視して「向き」に着目します。そのため、たとえ一方のベクトルがもう一方よりずっと長くても、同じ方向を向いていれば完全に似ていると判定されます。