コサイン類似度と内積の関係を新人エンジニアにわかりやすく解説

こんにちは。ゆうせいです。

今日は「コサイン類似度と内積の関係」についてお話しします。機械学習やデータ分析を勉強すると必ず出てくる概念ですが、公式だけ見るとピンとこない人も多いんですよね。そこで、イメージを重視して解説していきます!

コサイン類似度とは?

コサイン類似度(Cosine Similarity)は、2つのベクトルがどれくらい同じ方向を向いているかを表す指標です。値は -1 から 1 の範囲に収まります。

  • 1 → 完全に同じ方向
  • 0 → 直角で全く関係がない
  • -1 → 完全に逆方向

方向だけに注目するので、長さ(大きさ)は関係ありません。たとえば、(1,1) と (100,100) は大きさが全然違いますが、向きが同じなのでコサイン類似度は1になります。

内積との関係

ここで登場するのが「内積」です。
実は、コサイン類似度は内積を使って表現できます。

公式はこうです。

cos類似度(a, b) = (a・b) / (|a||b|)

ここで

  • a・b は内積
  • |a|, |b| はそれぞれのベクトルの大きさ

つまり「内積をベクトルの長さで割ったもの」がコサイン類似度です。

なぜ割るのか?

内積 a・b = |a||b|cosθ という公式を思い出してください。

もしそのまま内積を使うと、ベクトルの大きさの影響を受けてしまいます。大きなベクトル同士は値も大きく、小さなベクトルは値が小さくなってしまうのです。

そこで「長さで割る」ことで、大きさの影響を消して純粋に方向(cosθ)だけを取り出しているわけです。

例で確認

a = (1, 0)、b = (0, 1) の場合

  • 内積:a・b = 1×0 + 0×1 = 0
  • |a| = 1, |b| = 1
  • cos類似度 = 0 / (1×1) = 0

つまり直角なので似ていないと判断されます。

次に a = (1, 1)、b = (2, 2) の場合

  • 内積:a・b = 1×2 + 1×2 = 4
  • |a| = √(1²+1²) = √2
  • |b| = √(2²+2²) = √8 = 2√2
  • cos類似度 = 4 / (√2 × 2√2) = 1

大きさは違うけれど方向が同じなので、類似度は1となります。

cos類似度は三角関数で計算できないのか?

「cos類似度は三角関数で計算できないのか?」という疑問は、コサイン類似度を初めて学ぶ人が必ず一度は抱くものなんです。

結論

理論的には「三角関数の cos を使って求める」ことは可能です。ただし、実際には三角関数を直接計算することはほとんどありません。なぜなら、三角関数を使わずに内積を利用した式の方が計算がはるかに簡単だからです。

cos類似度の定義

コサイン類似度は角度 θ を使って定義すると、

cos類似度(a, b) = cosθ

ここで θ は2つのベクトル a, b のなす角です。

つまり「角度がわかれば三角関数で計算できる」ことになります。

角度を求める難しさ

でも実際に角度 θ を求めるとなると…?
ベクトル a, b が与えられているとき、θ を出すには三角関数の逆関数(arccos)を使わなければなりません。

θ = arccos( (a・b) / (|a||b|) )

すると最終的に cos類似度 = cosθ に戻すので、結局 a・b / (|a||b|) という内積を使った式にたどり着きます。

まとめると

  • 定義としては cos類似度 = cosθ
  • でも角度 θ を求めるのに arccos を使うと計算が複雑になる
  • だから内積の式 cos類似度 = (a・b) / (|a||b|) を直接使った方が効率的

具体例

a = (1, 0), b = (1, 1)

  1. 内積を使う方法
    a・b = 1×1 + 0×1 = 1
    |a| = √(1²+0²) = 1
    |b| = √(1²+1²) = √2
    cos類似度 = 1 / (1×√2) = 1/√2 ≈ 0.707
  2. 角度から求める方法
    θ = arccos(1/√2) = 45°
    cosθ = 0.707

同じ答えですが、内積を使った方が一発で出せます。

エンジニアとしての応用

  • 検索エンジン:文章をベクトル化してコサイン類似度で近い文章を探す
  • レコメンドシステム:ユーザーの嗜好ベクトルと商品の特徴ベクトルを比較
  • クラスタリング:類似度の高いデータをまとめる

このように「ベクトルの大きさは関係なく方向だけで判断する」という性質が、データ解析や機械学習の現場でとても便利なんです。

まとめ

コサイン類似度は「内積をベクトルの長さで割ったもの」で、2つのベクトルがどれだけ同じ方向を向いているかを表します。
内積は方向と大きさを含む情報ですが、そこから「大きさの影響を消して純粋に方向だけを見る」のがコサイン類似度です。

次の学習ステップとしては、ユークリッド距離やマンハッタン距離など、ほかの類似度指標とも比較してみると理解が一層深まりますよ。

さて、あなたが今扱っているデータは「方向(傾向)」を重視すべきでしょうか? それとも「大きさ(量)」を重視すべきでしょうか?

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。