コサイン類似度
Cosine Similarity
2つのベクトルの方向の近さを測定する数学的指標。大きさを無視して方向のみで類似性を評価します。テキスト検索や推奨システムで活用。
コサイン類似度とは?
コサイン類似度は、2つのベクトルの方向の近さを0~1で数値化する指標です。 大きさは無視し、方向のみを比較するため、テキスト検索や推奨システムで活躍。「2本の矢印がどれだけ同じ方向を向いているか」で類似性を判定する考え方です。
ひとことで言うと: 文書Aと文書Bを多次元の矢印に変換して、その向きがどれだけ一致しているかで「似ている度合い」を判定する手法。
ポイントまとめ:
- 何をするものか: ベクトル間の角度からスコア(0~1)を算出
- なぜ必要か: テキスト量が異なる文書でも、意味内容の類似性を正確に評価可能
- 実用例: 検索エンジン、AIチャットボット推奨、不正検出
重要性
テキスト量の異なる2つの記事を比較するとき、単語数では判定できません。短くまとめた記事も、長く詳しく説明した記事も、内容が同じなら「類似している」と判定すべき。コサイン類似度はこの課題を解決し、文書のボリュームに左右されず、意味的な近さだけで比較します。検索精度が向上すれば、ユーザー満足度も上がります。
仕組み
基本公式:
コサイン類似度 = (ベクトルA・ベクトルB) / (|A| × |B|)
2つの文書をベクトル(数値の羅列)に変換。各単語の出現頻度やTF-IDF値で要素を決定。2つのベクトルの内積をそれぞれの大きさで割ると、角度のコサイン値(0~1)が得られます。
スコア解釈:
- 1.0 = 完全に同じ方向(意味が一致)
- 0.5 = 中程度に類似
- 0.0 = 全く関連なし
実務例
検索エンジン: ユーザーが「iPhone 15 ケース」と検索したとき、関連商品ページをベクトル化し、クエリベクトルとのコサイン類似度でランキング。量が異なるテキストでも、意味が近いページが上位に。
チャットボット: ユーザー入力と過去の質問データを比較。最もコサイン類似度が高い質問の回答を返す。文体や長さの差は影響しません。
不正検出: ユーザー行動パターン(購買履歴など)をベクトル化。過去のパターンとのコサイン類似度が極端に低ければ、不正の可能性。
メリットと注意点
メリット: 計算が高速、高次元データに強い、意味的類似性を正確に抽出、大規模データセットでスケール可能。
注意点: 大きさを無視するため、「規模が大きい方が重要」という文脈では使用不可。また、前処理(テキスト正規化、ベクトル化方式)で結果が大きく変わる点に注意。
関連用語
- ベクトル — 方向と大きさを持つ数値の羅列
- TF-IDF — ベクトル要素の値を決める重み付け方式
- 自然言語処理 — テキスト分析全般の技術領域
- 機械学習 — コサイン類似度を活用するAI技術
- 推奨エンジン — ユーザーにアイテム提案するシステム
よくある質問
Q: 他の類似度指標(ユークリッド距離など)との違いは? A: ユークリッド距離は大きさを含め全てを考慮しますが、コサイン類似度は方向のみ。テキスト検索では方向重視が有効。物理データ(座標)ではユークリッド距離の方が適切です。
Q: ベクトル化の段階で精度が決まるのか? A: その通り。同じテキストでも、単語の選び方、TF-IDFの計算方式、次元削減の手法で全く異なる結果になります。モデル選択が極めて重要。
Q: リアルタイム検索で使用できるか? A: スパース行列対応ライブラリ(scikit-learn, TensorFlow)なら高速計算可能。データセットが大規模でなければ数ミリ秒で処理可能。