距離指標の選択(cosine、L2、dot)
cosine、L2(ユークリッド)、dot-productのどれを選ぶべきか、また多くのEmbeddingモデルがcosineを好む理由を学びます。
「距離指標の選択(cosine、L2、dot)」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
よく使われる3つのメトリクス
ベクトルDBでは、距離メトリクスを選択できます。最もよく目にするのは次の3つです。
- コサイン類似度 — ベクトル間の角度
- 内積 — 一方のベクトルをもう一方へ射影した値
- ユークリッド距離(L2) — 直線距離
コサイン
範囲:-1から1。値が大きいほど類似しています。
import numpy as np
def cosine(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))内積
範囲:-無限大から+無限大。値が大きいほど類似しています。
def dot(a, b):
return np.dot(a, b)
# Equivalent to cosine when both vectors are unit-normalized.ユークリッド距離(L2)
範囲:0から+無限大。値が小さいほど類似しています。
def l2(a, b):
return np.linalg.norm(np.array(a) - np.array(b))どれを使うべきか
テキスト埋め込みでは、次の選択が一般的です。
- OpenAI text-embedding-3 — コサイン(ベクトルは事前に正規化されています)
- Cohere — コサイン
- Sentence Transformers / BGE — 通常はコサインですが、モデルカードを確認してください
迷ったらコサインを使ってください。
正規化すると内積はコサインと等しい
|a| = |b| = 1の場合、cos(a,b) = a . bとなります。内積のほうが高速です(除算が不要なため)。そのため、本番システムでは事前に正規化したベクトルに対して内積を使うことがよくあります。
L2が使われる場合
一部の研究モデル(古いSentence-BERTの派生モデルや画像埋め込みなど)はL2距離で学習されており、L2を使うと性能が向上します。必ずモデルカードを確認してください。
インデックスにとって重要な理由
インデックス構造(HNSW、IVF、FAISS)は、特定のメトリクス向けに構築されます。インデックス作成後にメトリクスを変更すると、通常はインデックスを最初から再構築する必要があります。
Setting Metric in Pinecone
from pinecone import ServerlessSpec
pc.create_index(
name='docs',
dimension=1536,
metric='cosine', # or 'dotproduct' or 'euclidean'
spec=ServerlessSpec(cloud='aws', region='us-east-1')
)Setting Metric in Qdrant
from qdrant_client.models import VectorParams, Distance
client.create_collection(
collection_name='docs',
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)システム間でメトリクスが一致しない場合
後からクロスエンコーダーで再ランキングする場合、クロスエンコーダーには独自のスコア尺度があります。まず正規化せずに、異なるメトリクスを1つの複合スコアに混在させないでください。
違いを可視化する
2つの単位ベクトルの場合:
- cos = 1、L2 = 0 -> 同一
- cos = 0.5、L2 ~ 1 -> 関連している
- cos = 0、L2 ~ sqrt(2) -> 直交している
- cos = -1、L2 = 2 -> 正反対
一度だけ事前正規化する
取り込み時の正規化は低コストです(除算1回)。これによりコサインや内積との互換性が確保され、後からクエリごとに正規化する必要もなくなります。
vec = vec / np.linalg.norm(vec)デフォルトのメトリクス
OpenAIのテキスト埋め込みでデフォルトとなる距離メトリクスはどれでしょうか。
まとめ
テキストにはコサインを使います。一度だけ事前正規化し、高速化のために内積を使います。インデックス作成時にメトリクスを設定してください。後から変更するには再構築が必要です。
よくある質問
「距離指標の選択(cosine、L2、dot)」レッスンは無料ですか?
はい。「距離指標の選択(cosine、L2、dot)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「距離指標の選択(cosine、L2、dot)」で何を学びますか?
cosine、L2(ユークリッド)、dot-productのどれを選ぶべきか、また多くのEmbeddingモデルがcosineを好む理由を学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「距離指標の選択(cosine、L2、dot)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Pinecone、Weaviate、Qdrantの比較
- ハイブリッド検索のためのメタデータフィルタリング
- ベクトルの更新と削除
- 距離指標の選択(cosine、L2、dot)