コサイン類似度とは?結局何に使うのか?次元の呪いについても解説!【Python実装例付】

データサイエンスのための数学

コサイン類似度とは?

一言で言うと?

コサイン類似度は、「ベクトルの方向がどれくらい似ているか」を測る指標です。

データの絶対的な大きさではなく、方向の違いに注目します。

“データの方向の違い”の分析は、文章や画像の特徴比較などに適しています。

例えば、

  • 文章A: 「私は猫が好きです。」
  • 文章B: 「私は犬が好きです。」

という2つのよく似た文章同士を比較するとします。

単語を数値化したベクトルを作成し、それらのコサイン類似度を計算することで、

このコサイン類似度を見ることで、文章同士がどれだけ似ているかを数値で評価できます。

ベクトルの大きさに影響を受けないため、主に「内容の類似性」を測るために使用されます。

コサイン類似度の定義

コサイン類似度とは、2つのベクトルがどれくらい似ているかを評価するための指標です。その計算式は次のようになります。

$$\text{Cosine Similarity} = \frac{A \cdot B}{||A|| ||B||} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \times \sqrt{\sum_{i=1}^{n} B_i^2}}$$

ここで、

  • \(A\)と\(B\)はそれぞれ 次元のベクトル
  • \(A \cdot B\)はベクトルの内積
  • \(||A||\)および\(||B||\)はそれぞれのベクトルのノルム(長さ)

この計算によって、コサイン類似度は-1から1の範囲を取ります。

  • 1に近い → 2つのベクトルの方向がほぼ同じ(類似している)
  • 0に近い → 2つのベクトルが直交している(無関係)
  • -1に近い → 2つのベクトルの方向が逆(全く異なる)

コサイン類似度の使い道

コサイン類似度は、先ほども述べたように「内容の類似度」で比較することができます。

そのため、データの特徴をベクトルで表す必要があるときに主に使われます。

自然言語処理(NLP)

  • 文章の類似度を測る → 例:「このニュース記事は過去の記事と似ているか?」
  • 検索エンジン → 例:「このクエリに最も関連するドキュメントはどれか?」

推薦システム

  • 映画の推薦 → 例:「このユーザーが好きな映画と似た映画を推薦する」
  • 商品推薦 → 例:「この顧客が過去に購入した商品と似た商品を提示する」

画像認識

  • 画像の特徴ベクトルを比較し、類似する画像を検索する。
  • 例:「この顔写真と最も似ている顔をデータベースから探す」

Pythonでのコサイン類似度の実装

Pythonでは、scipysklearnを用いて簡単にコサイン類似度を計算できます。

主に、Pythonではcosine_similarity(A, B)を使うことで実装することができます。

以下は簡単な実装例です。

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# 2つのベクトルを定義
A = np.array([[1, 2, 3]])
B = np.array([[4, 5, 6]])

# コサイン類似度を計算
similarity = cosine_similarity(A, B)
print(similarity)

【発展】次元の呪いとは?

次元の呪いとは

コサイン類似度を含む多くの機械学習アルゴリズムでは、「次元の呪い」と呼ばれる問題が発生します。

コサイン類似度における次元の呪いとは、高次元データ空間において発生する、以下のような問題を指します。

  • データ同士が直交する確率が増え、コサイン類似度が小さく算出される傾向が生じる

コサイン類似度は、ベクトル同士のなす角が90°であれば0になると考えることができます。

次元が増えるとそれぞれのベクトル同士の角度が90°になる可能性は増え、コサイン類似度は0に近づいていきます。

次元の呪いを軽減する方法

高次元データを扱う際には、コサイン類似度が小さくなってしまうことは自然なことです。

そこで、以下のような手法を使って次元を絞ることで、次元の呪いを軽減することができます。

  • 主成分分析(PCA): 高次元データを低次元に圧縮する
  • t-SNE: 高次元データを2Dや3Dに可視化する
  • 特徴選択: 重要な特徴のみを選択し、不要な次元を削減する

まとめ

今回はコサイン類似度の基本概念、用途、Pythonでの実装について解説しました。

コサイン類似度は、文章解析、推薦システム、画像認識など、さまざまな分野で活用されています。

機械学習などにも応用される非常に面白い内容ですので、楽しんで勉強を進めましょう!

データサイエンス.jpでは、データサイエンスや統計学をわかりやすく学べるようなプラットフォームを提供しています。機械学習やデータ分析など、実用的でトピックも扱っていますので、ぜひ他の記事もご覧ください!