コサイン類似度の式
$$
\cos\theta = \frac{\mathbf{A}\cdot\mathbf{B}}{|\mathbf{A}|,|\mathbf{B}|} = \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}}
$$
式の意味を理解する
分子の理解
分子はベクトルの内積であり、以下2通りの書き方があります。
①成分で計算する方法(式で使っている形)
$$\mathbf{A}\cdot\mathbf{B} = A_1B_1 + A_2B_2 + \cdots + A_nB_n$$
②長さと角度で計算する方法(幾何学的な形)
$$\mathbf{A}\cdot\mathbf{B} = |\mathbf{A}|,|\mathbf{B}|\cos\theta$$
そして②は、次のように括弧をつけて読むと意味がわかります。
$$\mathbf{A}\cdot\mathbf{B} = |\mathbf{A}| \cdot (|\mathbf{B}|\cos\theta)$$
$|\mathbf{B}|\cos\theta$ は、BをAの方向に落とした「影」の長さです。
つまり内積は 「Aの長さ × Bの影の長さ」 であり、2つのベクトルがどれだけ同じ方向に伸びているかを、長さ込みで測った量です。
角度ごとの $\cos\theta$ の値は次のとおりです。
- 同じ方向を向いている → $\cos 0^\circ = 1$(影がBの長さそのまま)
- 直角に交わる → $\cos 90^\circ = 0$(影が消える)
- 真逆を向いている → $\cos 180^\circ = -1$(影がAと逆向き)
①と②が同じ値になる理由
①は座標の掛け算と足し算だけで計算でき、角度は不要です。
②は角度と長さを使います。この2つが一致することは、余弦定理から示せます(本記事では省略します)。
この一致のおかげで、座標さえわかれば、角度を測らなくても「影の量」を計算できます。
分母の理解
内積は長さに依存します。Bを10倍にすると、方向が同じでも内積は10倍になります。
そこで $|\mathbf{A}|,|\mathbf{B}|$ で割って、長さの影響を取り除きます(正規化)。
具体例で考えます。文章を単語の出現回数でベクトル化したとします。
- 文書A:「車」3回、「エンジン」2回
- 文書B:「車」30回、「エンジン」20回
Bは長い文書で、全体の回数がAの10倍です。ユークリッド距離で測ると「大きく離れている」ことになります。しかしコサイン類似度では、単語の比率が同じなので類似度は1になります。
「内容の構成比が同じか」 を見たいときに、文書の長さに左右されないのが最大の利点です。
※出現回数そのものに意味がある場合は、コサイン類似度は適さないことがあります。
図で見る理解
-
Bの長さを変えてみる
長さを変えても角度は変化しないため、コサイン類似度は変わらないです。
-
角度だけを動かしてみる
これがコサイン類似度そのものの値であり、変化します。
cosθが意味を持つ理由
$$
\cos\theta = \frac{\text{底辺(角θに接する辺)}}{\text{斜辺}}
$$
図の黄色い線(BをAの方向に落とした影)を、斜辺(B自体の長さ)で割った値がcosθです。
つまりcosθは、「Bの長さのうち、Aの方向を向いている部分が何割か」 を表します。
Bの長さが変わっても、この割合は変わりません。これがコサイン類似度が長さに依存しない理由です。


