検索におけるコサイン類似度
コサイン類似度は2つのベクトル間の角度を測定します。意味検索で標準的に使われる距離指標です。
「検索におけるコサイン類似度」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
類似度の測定
2つのベクトルはどの程度近いでしょうか。一般的な距離指標は次の3つです。
- 余弦類似度 — ベクトル間の角度
- 内積 — 射影
- ユークリッド距離(L2距離) — 直線距離
テキストembeddingでは、余弦類似度がデフォルトです。
余弦類似度の公式
ベクトルAとBについて、次のようになります。
cos(A, B) = (A . B) / (|A| * |B|)
結果は-1から1の範囲です。
- 1 = 同じ方向
- 0 = 直交(無関係)
- -1 = 反対方向
NumPyを使ったPythonでの実装
実装は単純です。
import numpy as np
def cosine_similarity(a, b):
a = np.array(a)
b = np.array(b)
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cosine_similarity(vec_apple, vec_orange)) # high
print(cosine_similarity(vec_apple, vec_car)) # low正規化済みベクトル
埋め込みがすでに正規化されている場合(OpenAIの埋め込みは正規化されています)、コサイン類似度は内積と等しくなるため、除算を省略できます。
def cosine_normalized(a, b):
return np.dot(a, b) # fasterTop-K検索
クエリに最も類似するK件のドキュメントを見つけるには、すべてのドキュメントとの類似度を計算して並べ替えます。
def topk(query_vec, doc_vecs, k=5):
scores = [(np.dot(query_vec, v), i) for i, v in enumerate(doc_vecs)]
scores.sort(reverse=True)
return scores[:k]スケールアップ
単純なTop-K検索はクエリごとにO(N)です。1万件のドキュメントなら問題ありませんが、1,000万件では遅くなります。大規模なコーパスには、近似最近傍(ANN)インデックスであるHNSW、IVF、FAISSを使用します。
なぜユークリッド距離ではないのか
L2距離では、ベクトルの長さが意味を持つものとして扱われます。埋め込みでは、大きさよりも方向のほうが重要です。そのため、コサイン類似度が適しています。
(正規化されたベクトルでは、L2距離とコサイン類似度は同じ順位付けになるため、どちらでも問題ありません。)
内積とコサイン類似度
ベクトルがすでに正規化されている場合、内積はコサイン類似度と等しく、除算が不要なので高速です。本番環境の多くのシステムでは、正規化されたベクトルに対して内積を使用します。
A Tiny End-to-End Retrieval
docs = ['Python is a programming language', 'Pizza is Italian food', 'The Eiffel Tower is in Paris']
doc_vecs = [embed(d) for d in docs]
query_vec = embed('What is Python?')
scores = [(cosine_similarity(query_vec, v), d) for v, d in zip(doc_vecs, docs)]
scores.sort(reverse=True)
for s, d in scores:
print(f'{s:.3f} {d}')
# 0.83 Python is a programming language
# 0.45 Pizza is Italian food
# 0.41 The Eiffel Tower is in Parisハイブリッド検索
コサイン類似度とキーワード検索(BM25)を組み合わせることで、意味検索と完全一致検索の両方の利点を得られます。現在、本番環境の多くのシステムではハイブリッド検索を使用しています。
しきい値によるフィルタリング
類似度のしきい値を下回る結果を除外し、関連性のないコンテキストをLLMに渡さないようにします。
results = [r for r in retrieved if r.score > 0.7]コサイン類似度の範囲
コサイン類似度の値の範囲はどのようになりますか。
まとめ
コサイン類似度は、埋め込み検索で標準的に使われる指標です。本番規模では、ハイブリッド検索やANNと組み合わせます。
よくある質問
「検索におけるコサイン類似度」レッスンは無料ですか?
はい。「検索におけるコサイン類似度」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「検索におけるコサイン類似度」で何を学びますか?
コサイン類似度は2つのベクトル間の角度を測定します。意味検索で標準的に使われる距離指標です。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「検索におけるコサイン類似度」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。