ITやAIの分野で頻繁に耳にする「コサイン類似度(Cosine Similarity)」は、データ同士の類似性を測るための非常に重要な指標です。特に自然言語処理(NLP)やレコメンデーションシステム、そして近年の大規模言語モデル(LLM)の進化を支える根幹技術の一つとなっています。
本記事では、コサイン類似度の基本的な概念から、高校数学レベルの知識で理解できる計算方法、具体的な応用事例、そしてIT初心者が知っておくべきポイントまで、図解を交えながらわかりやすく徹底的に解説します。この記事を読めば、コサイン類似度がどのようにして「意味の近さ」を測っているのか、その仕組みがクリアに理解できるはずです。
コサイン類似度とは?ベクトルの「方向」に着目する理由
コサイン類似度とは、簡単に言えば「2つのデータがどれくらい同じ方向を向いているか」を測る指標です。データは、数値の並びである「ベクトル」として表現されます。この2つのベクトルが作る「角度のコサイン(余弦)」を計算することで類似度を算出します。
ベクトルの方向で類似性を測るメリット
コサイン類似度が優れているのは、ベクトルの「大きさ(長さ)」に影響を受けない点です。
- 文書の類似度判定の例:
- 短い文書A:「AIの活用事例」
- 長い文書B:「AIの活用事例を、具体的な業務プロセスと最新の導入事例を交えて徹底解説するレポート」
文書Aと文書Bは、使われている単語やテーマが非常に似ているため、「意味」としては極めて類似しています。しかし、文書Bの方が単語数が多いため、一般的な「距離」で測ると遠くなってしまいます。コサイン類似度は、この単語の出現傾向(ベクトルの方向)が似ているかどうかを見るため、文書の長さ(ベクトルの大きさ)に関わらず、本質的な「意味の近さ」を正確に評価できるのです。
コサイン類似度の値の範囲
コサイン類似度の値は、必ず-1から1の範囲を取ります。この値が類似度の高さを表します。
- 1に近い: 2つのベクトルが完全に同じ方向を向いている(非常に類似している)
- 0: 2つのベクトルが直交している(無関係、関連性なし)
- -1に近い: 2つのベクトルが正反対の方向を向いている(全く異なる、逆の意味を持つ)
コサイン類似度の計算方法(数式と具体例)
コサイン類似度は、以下の数式で定義されます。高校で習うベクトルの内積とノルム(大きさ)の知識があれば理解できます。
定義式
2つのベクトルを$\mathbf{A}$と$\mathbf{B}$としたとき、コサイン類似度 $S_C$ は次の式で計算されます.
$$\mathbf{A} \cdot \mathbf{B} = \sum_{i=1}^{n} a_i b_i = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n $$
2. ノルム $(|\mathbf{A}|, |\mathbf{B}|)$ の計算
ノルムは、ベクトルの各要素を二乗し、それらをすべて足したものの平方根で求められます(三平方の定理の一般化です)。
$$|\mathbf{A}| = \sqrt{\sum_{i=1}^{n} a_i^2} = \sqrt{a_1^2 + a_2^2 + \cdots + a_n^2}$$
$$|\mathbf{B}| = \sqrt{\sum_{i=1}^{n} b_i^2} = \sqrt{b_1^2 + b_2^2 + \cdots + b_n^2}$$
$$\mathbf{A} \cdot \mathbf{B} = (2 \times 1) + (1 \times 1) + (1 \times 1) + (1 \times 1) + (0 \times 1) = 2 + 1 + 1 + 1 + 0 = 5 $$
- ノルム $|\mathbf{A}|$ の計算$$|\mathbf{A}| = \sqrt{2^2 + 1^2 + 1^2 + 1^2 + 0^2} = \sqrt{4 + 1 + 1 + 1 + 0} = \sqrt{7} \approx 2.646
$$ - ノルム $|\mathbf{B}|$ の計算$$|\mathbf{B}| = \sqrt{1^2 + 1^2 + 1^2 + 1^2 + 1^2} = \sqrt{1 + 1 + 1 + 1 + 1} = \sqrt{5} \approx 2.236$$
- コサイン類似度 $S_C$ の計算$$S_C(\mathbf{A}, \mathbf{B}) = \frac{5}{\sqrt{7} \times \sqrt{5}} = \frac{5}{\sqrt{35}} \approx \frac{5}{5.916} \approx 0.845$$
計算結果は約0.845となり、1に近いため、これらの文書は「非常に類似している」と判断できます。このように、コサイン類似度は、文書の単語の出現傾向(ベクトルの方向)を比較することで、意味的な近さを定量的に評価できるのです。
コサイン類似度の主な応用事例と最新動向
コサイン類似度は、その特性から特にデータの「意味」や「傾向」の類似性を評価したい場面で幅広く活用されています。
1. 自然言語処理(NLP)と大規模言語モデル(LLM)
これがコサイン類似度の最も重要な応用分野です。
- 単語/文書の類似度判定:
テキストを単語埋め込み(Word Embedding)や文書埋め込み(Sentence Embedding)と呼ばれる高次元ベクトルに変換します。このベクトルのコサイン類似度を計算することで、「東京」と「日本」、「医師」と「医者」といった単語の意味的な近さや、2つの文書のトピックの類似度を測ることができます。
- セマンティック検索(意味検索):
従来のキーワード検索(単語の一致を見る)と異なり、質問文と文書をベクトル化し、コサイン類似度が高い文書を抽出します。これにより、言い回しが異なっていても、意味的に関連性の高い情報を見つけ出すことができます。これは、LLMの知識を外部データベースから取得するRAG(Retrieval-Augmented Generation)の根幹技術です。
2. レコメンデーションシステム
AmazonやNetflixなどの推薦システムにもコサイン類似度が活用されています。
- ユーザー間またはアイテム間の類似度計算:
ユーザーの過去の購買履歴や評価をベクトル化し、ユーザー同士、または商品(アイテム)同士の類似度をコサイン類似度で計算します。「Aさんが購入した商品」と「Bさんが購入した商品」のベクトルの向きが似ていれば、AさんとBさんの嗜好は似ていると判断し、AさんにBさんが購入した商品を推薦するといったことが可能になります。
3. 画像・音声認識
画像や音声の特徴量をベクトル化し、それらの類似性を測る際にも使われます。例えば、画像検索で「この画像に似た画像を検索」する際に、画像特徴ベクトルのコサイン類似度が高いものを返します。
コサイン類似度に関するTIPSとよくある質問(FAQ)
TIPS:他の類似度指標との違い
類似度を測る指標として「ユークリッド距離」も有名ですが、コサイン類似度とは特性が異なります。
| 指標 | 測るもの | 特性 |
|---|---|---|
| コサイン類似度 | ベクトルの方向(角度) | 大きさに依存せず、傾向や意味の近さを評価。高次元データ、特にテキスト分析に強い。 |
| ユークリッド距離 | ベクトルの絶対的な距離(長さ) | 原点からの実際の距離を評価。ベクトルの大きさに影響される。データの密度が高い場合などに有効。 |
FAQ:なぜAIではコサイン類似度が多用されるのか?
AI、特にNLPでは、単語や文書のベクトル表現(埋め込み)が非常に高次元(数百~数千次元)になることが一般的です。このような高次元かつスパース(まばら)なデータにおいて、ユークリッド距離は正確な類似性を測るのが難しくなる現象(次元の呪い)があります。
一方で、コサイン類似度はベクトルの大きさに影響されず、純粋に方向性のみを評価するため、データがスパースであっても安定して意味的な類似度を評価できるため、多用されています。
理解度チェックのための練習問題
理解を深めるため、簡単な2次元ベクトルのコサイン類似度を計算してみましょう。
練習問題
以下の2つのベクトルのコサイン類似度 $S_C(\mathbf{A}, \mathbf{B})$ を計算しなさい。
- ベクトル $\mathbf{A} = (3, 0)$
- ベクトル $\mathbf{B} = (4, 3)$
解答と解説
1. 内積 $\mathbf{A} \cdot \mathbf{B}$ の計算
$$
\mathbf{A} \cdot \mathbf{B} = (3 \times 4) + (0 \times 3) = 12 + 0 = 12
$$
2. ノルム $|\mathbf{A}|$ の計算
$$
|\mathbf{A}| = \sqrt{3^2 + 0^2} = \sqrt{9 + 0} = \sqrt{9} = 3
$$
3. ノルム $|\mathbf{B}|$ の計算
$$
|\mathbf{B}| = \sqrt{4^2 + 3^2} = \sqrt{16 + 9} = \sqrt{25} = 5
$$
4. コサイン類似度 $S_C$ の計算
$$
S_C(\mathbf{A}, \mathbf{B}) = \frac{12}{3 \times 5} = \frac{12}{15} = 0.8
$$
答え:0.8
解説:コサイン類似度は0.8であり、1に非常に近い値です。これは、ベクトル$\mathbf{A}$と$\mathbf{B}$が比較的近い方向を向いていることを示しています。
まとめ

コサイン類似度は、データ間の「意味」や「傾向」の類似性を、ベクトルの方向(角度のコサイン)に着目して定量的に評価する強力な指標です。
- 定義: 2つのベクトルのなす角度のコサイン(余弦)
- 計算式: 内積をそれぞれのノルムの積で割る
- 特徴: ベクトルの大きさに依存せず、高次元データの類似度判定に優れている
- 応用: 自然言語処理、LLMのセマンティック検索、レコメンデーションシステムなど
AIやデータサイエンスの分野でキャリアを築く上で、コサイン類似度の理解は必須の知識となります。この記事を通じて、その概念と重要性がしっかりと伝わったなら幸いです。今後、さらに複雑なAI技術を学ぶ際にも、この基礎知識が必ず役立つはずです。

コメント