コサイン類似度(cosine similarity)は、2つのベクトルの類似度を示す指標です。
コサイン類似度は、-1 〜 1の間で値をとり、2つのベクトルの向きが近い時に、コサイン類似度の値は1に近くなり、反対にベクトルの向きが反対のときは、コサイン類似度の値は -1に近くなります。
この記事では、コサイン類似度についてわかりやすくまとめていきます。
cos類似度の定義
まず、cos類似度の定義はこのようになっています。
cos類似度
2つのベクトルを$\bm{a}, \bm{b}$とするとき、これらのcos類似度$cos similarity$は次のように定義される。
\begin{equation} \operatorname{cos ~ similarity} = \frac{\bm{a} \cdot \bm{b}}{ || \bm{a}|| ~ || \bm{b}|| } \end{equation}
コサイン類似度の用途
コサイン類似度は、2つのベクトルがどれだけ近いかを表現する量と書きましたが、ベクトルを扱う機械学習分野でコサイン類似度は非常によく利用します。
特に自然言語処理などでは、単語をベクトルをして表現するため、単語の類似度をよくコサイン類似度を用いて表現することがあります。
Pythonでコサイン類似度を実装する
Pythonでコサイン類似度を実装していきましょう。
といっても実装はかなり簡単です。numpyの内積計算である、np.dot()を利用することで、コサイン類似度はこのように実装できます。
import numpy as np
def cos_similarity(a, b):
return np.dot(a, b) / (np.sqrt(np.dot(a, a)) * np.sqrt(np.dot(b, b)))