「この2つの文書はどれくらい似ているか」を数値にできたら、検索も推薦も一気に賢くなります。それを可能にするのが、データをベクトルにして「向きの近さ」を測るコサイン類似度です。自然言語処理や推薦システムの定番指標を、手計算できる例つきで解説します。

📖 ひと言でいうと

コサイン類似度とは、2つのベクトルのなす角度のコサイン(余弦)を使って類似度を測る指標です。値は-1から1の範囲をとり、向きが同じなら1、直角(無関係)なら0、正反対なら-1になります。ベクトルの長さではなく「向き」だけで比べるのが最大の特徴です。

方角にたとえると、2人の登山者が「どの方向に歩いているか」を比べるイメージです。歩く速さ(ベクトルの長さ)が違っても、同じ方角へ向かっていれば類似度は1に近い。文書でいえば、長い記事と短い記事でも話題の「方向」が同じなら似ていると判定できます。

🖼 1枚でわかるコサイン類似度

コサイン類似度 = ベクトルの「向きの近さ」で測る類似度
  • 計算式 — 2つのベクトルの内積 ÷ (それぞれの長さの積)
  • 値の範囲 — -1〜1。同じ向き=1 / 直角=0 / 正反対=-1
  • 特徴 — 長さ(文書の分量など)の影響を受けず、向きだけで比較
  • 用途 — 文書検索・推薦システム・単語や文の埋め込みベクトルの比較
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

コサイン類似度 は本書の章節記事では正式な定義段落が用意されていません。以下は、シラバスの位置づけと関連用語から再構成した補足解説です。

コサイン類似度は、G検定シラバスの「AIに必要な数理・統計知識」で、ユークリッド距離・マハラノビス距離などの距離指標や、相関係数などの関係性指標と並んで挙げられるキーワードです。データをベクトルとして表現したうえで類似度・距離を測る道具の1つであり、特に自然言語処理の文書比較や推薦システムの文脈で登場します。「距離(近さ)で測るユークリッド距離」との使い分けが問われやすい位置づけです。

🔍 しっかり理解する

計算の流れ——内積を長さで割るだけ

コサイン類似度 = (AとBの内積) ÷ (Aの長さ × Bの長さ) で計算します。内積は対応する成分同士を掛けて足したもの、長さは各成分の2乗和の平方根です。

① ベクトル化
文書などを数値の並びに変換
② 内積を計算
成分同士を掛けて足す
③ 長さの積で割る
各ベクトルの長さを掛けた値で割る
④ -1〜1で判定
1に近いほど似ている

実際に計算してみましょう。文書Aに「AI」が3回・「株価」が4回、文書Bに「AI」が4回・「株価」が3回出てくるとして、A = (3, 4)、B = (4, 3)というベクトルにします。

💡 ポイント
  • 内積: 3×4 + 4×3 = 12 + 12 = 24
  • Aの長さ: √(3² + 4²) = √25 = 5、Bの長さ: √(4² + 3²) = √25 = 5
  • コサイン類似度: 24 ÷ (5×5) = 24/25 = 0.96

0.96という1に近い値なので、2つの文書は「話題の構成がよく似ている」と判定できます。一方、A = (1, 0)とB = (0, 1)(共通の単語が全くない文書)なら内積は0で、類似度も0になります。

なぜ「長さ」を無視するのか

文書を単語の出現回数でベクトル化すると、長い文書ほどベクトルが長くなります。もし単純な距離で比べると、「同じ話題の長文と短文」が「違う話題の同じ長さの文書」より遠い、というおかしな判定になりがちです。コサイン類似度は長さの積で割る(正規化する)ことで分量の影響を打ち消し、純粋に「内容の方向性」だけを比較します。上の例でAの各回数を10倍して(30, 40)にしても、類似度は0.96のまま変わりません。

なお、単語の出現回数のように成分がすべて0以上のベクトル同士では、内積がマイナスにならないため、類似度は実質0〜1の範囲に収まります。マイナスの値が現れるのは、埋め込みベクトルのように負の成分を持ちうるデータを比べるときです。また実務の文書比較では、単純な出現回数の代わりに、どの文書にも現れるありふれた単語の重みを下げるTF-IDFで重み付けしたベクトルにコサイン類似度を適用するのが定番の組み合わせです。

ユークリッド距離との使い分け

🅰 コサイン類似度
  • 測るのは「向き」の近さ(角度ベース)
  • 値が大きいほど似ている(-1〜1)
  • 文書のように分量差を無視したい場面向き
🅱 ユークリッド距離
  • 測るのは2点間の「直線距離」
  • 値が小さいほど似ている(0以上)
  • 値の絶対的な大きさの差も意味を持つ場面向き

💡 具体例で考える

検索エンジンと推薦システム。検索クエリと各文書をベクトル化し、コサイン類似度が高い順に並べれば関連文書ランキングになります。ECサイトの「この商品を見た人へのおすすめ」も、商品やユーザーの嗜好をベクトル化して類似度の高いものを提示する、同じ発想の応用です。閲覧履歴の長いヘビーユーザーと数回しか見ていない新規ユーザーでも、興味の「向き」が同じなら似た相手として扱える点が、長さに影響されないコサイン類似度と相性のよい理由です。

単語・文の埋め込み(embedding)の比較。Word2Vecや大規模言語モデルが作る埋め込みベクトルでは、意味の近い単語や文が近い向きのベクトルになるよう学習されます。「王様」と「国王」のコサイン類似度は高く、「王様」と「冷蔵庫」は低い、といった意味の近さの測定に標準的に使われており、RAG(検索拡張生成)のベクトル検索でも中核の指標です。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • 「類似度が0 = 正反対」ではない — 0は直角(共通成分がない・無関係)を意味します。正反対はマイナス1です。
  • 「距離」と「類似度」の向きの混同 — ユークリッド距離は小さいほど似ている、コサイン類似度は大きいほど似ている、と判定の向きが逆です。
  • 長さの違いも考慮していると思い込む — コサイン類似度は向きだけを見るため、ベクトルを何倍かしても値は変わりません。大きさの差が重要な場面では距離指標を使います。
  • 相関係数との混同 — どちらも-1〜1の指標ですが、相関係数は2つの変数の連動を測り、コサイン類似度は2つのベクトル(データ点)の向きの近さを測ります。なお相関係数は「平均を引いてからコサイン類似度を取ったもの」と数学的に対応しており、親戚関係にあります。

📝 試験でのポイント

💡 ポイント
  • 「2つのベクトルのなす角のコサインで類似度を測り、値は-1〜1をとる」という定義の正誤判定が基本形です。
  • 小さな2次元ベクトルの内積と長さからコサイン類似度を計算させる問題が想定されます。内積→長さ→割り算の3ステップを落ち着いて実行しましょう。
  • 「1に近い=似ている、0=無関係(直角)、-1=正反対」という値の解釈は確実に押さえてください。
  • 「文書の長さの影響を受けにくい類似度指標はどれか」という形で、ユークリッド距離との対比で問われるパターンに注意しましょう。

📚 まとめ

💡 ポイント
  • コサイン類似度はベクトルの「向きの近さ」を-1〜1で表す類似度指標。
  • 計算は「内積 ÷ 長さの積」。例: (3,4)と(4,3)なら24÷25 = 0.96。
  • 長さ(分量)の影響を受けないため、文書比較や埋め込みベクトルの検索に最適。
  • 距離で測るユークリッド距離とは「向きか、距離か」「大きいほど似ているか、小さいほど似ているか」で対比して覚えましょう。