← 戻る

ベクトル類似度指標:L2 、コサインおよび内積

クエリポイントをドラッグし、メトリクスを切り替えて、最近傍がどのように変化するかを確認してください。

上位 5 件の最近傍(数値が小さいほど近い)

#1P1842.1
#2P1074.0
#3P17111.6
#4P14122.8
#5P13126.9
類似度指標
L2
表示値
ユークリッド距離

L2 (ユークリッド距離)

2点間の直線距離を測定する。同心円は等距離ゾーンを示しており、同じ円上のすべての点はクエリから等しく「遠い」位置にある。

メトリックとは何ですか?

メトリックとは、2つのベクトルを受け取り、それらがどれほど類似しているか(あるいは異なるか)を示す単一の数値を返す関数に過ぎない。ベクトル検索の本質は、「自分のクエリに対してメトリックスコアが最も高いK個のベクトルを見つける」ことにある。 それ以外のすべて――インデックス、クラスター、グラフ――は、データベース内のすべてのベクトルに対してこのスコアを計算する手間を省くための管理手段に過ぎません。

選択するメトリックによって、データにおける「類似」の意味が決まります。2つの埋め込みベクトルは、あるメトリックでは「近い」と評価され、別のメトリックでは「遠い」と評価されることがあります。同じデータでも、答えは異なるのです。そのため、インデックスを構築する前にこの選択を行う必要があります。

実際に目にする3つの用語

  • L2 (ユークリッド距離):直線距離。値が小さいほど良い。方向と大きさの両方が重要な場合に使用する — 画像の埋め込み、地理座標、センサーの生データなど。ほとんどのCVモデルのデフォルト設定。
  • コサイン:長さを無視したベクトル間の角度。値が高いほど良い。方向のみが重要な場合に使用する — テキスト埋め込み(BERT 、OpenAI など)、ベクトルの「人気度」が支配的になってはならないレコメンデーションシステムなど。
  • Inner Product(IP ):内積。位置の一致度と大きさの両方を評価する。値が高いほど良い。IP (DPR 、多くの検索モデル)に対して明示的に正規化を行うモデルと併用すること。ベクトルの長さが単位長の場合、数学的にはコサインと等しい。

2つの実用的なルール

  • メトリクスをモデルに合わせる。埋め込みモデルは、特定のメトリクスを念頭に置いて学習される。検索時に別のメトリクスを使用すると、リコールが知らぬ間に低下してしまう。選択する前にモデルカードを確認すること。
  • 一貫性を保ってください。コレクション内のすべてのベクトルは、同じメトリックを使用する必要があります。単一のインデックス内でそれらを混在させることはできず、異なるメトリック間のスコアを意味のある形で比較することもできません。

試してみてください:クエリポイントを原点付近にドラッグし、「Cosine」と「L2 」を切り替えてみてください。「Cosine」がクエリが指す「方向」のみを重視している様子を確認してください。原点の反対側にある点は、「L2 」では「近い」とみなされる一方、「Cosine」では「遠い」とみなされることがあります。この視覚的な違いこそが、この概念のすべてです。

メトリックタイプの設定はMilvus

『Milvus 』では、メトリックはmetric_type を通じてインデックスごとに設定される — L2、 IP、あるいは COSINE (密ベクトルの場合)のいずれかを使用して、インデックス作成時に設定されます。その後、そのコレクションに対するすべての検索では、上記で試したのと同じ関数が使用されます。最も信頼できる唯一のルールは、エンベディングモデルのトレーニングに使用されたメトリックを使用することです。このメトリックは、事実上すべてのモデルカードに記載されています。

2つの便利な近道。最新のテキスト埋め込みAPIのほとんど(OpenAI 、Cohere 、Voyage 、およびほとんどのSentenceTransformer)は、コサイン類似度を想定したベクトルを生成する。また、ベクトルが単位長に正規化されていれば、コサインと内積は同一の順位を返すため、 IP 正規化されたベクトルに対する計算は、 COSINEの代わりに、よく用いられ、計算コストがわずかに低い代替手段となります。

よくある質問

OpenAI やその他のテキスト埋め込みに対して、どの類似度メトリックを使用すべきですか?

コサイン類似度(Milvus 内の metric_typeCOSINE )を使用してください。OpenAI のtext-embedding-3ファミリーを含む、ほぼすべての最新のテキスト埋め込みモデルは、コサイン類似度を基準に学習されています。OpenAI の埋め込みは単位長に正規化されているため、内積(IP )は同一の順位付け結果を与え、優れた代替手段となります。

コサイン類似度と内積の違いは何ですか?

コサイン類似度は、2つのベクトルの長さを無視して、それらの間の角度のみを測定する。内積(ドット積)は、方向の一致と大きさの両方を評価するため、同じ方向を指す長いベクトルほど高いスコアとなる。単位正規化されたベクトルにおいて、この2つは数学的に同等である。

Milvus でインデックスを構築した後、メトリックの種類を変更することはできますか?

いいえ。メトリックは構築時にインデックスに組み込まれています。メトリックを切り替えるには、インデックスを削除し、新しい metric_type を使用して再構築する必要があります。異なるメトリックによるスコアは互いに比較できないため、結果の後処理時にそれらを混在させないでください。

メトリクスの選択は、リコールや検索速度に影響を与えますか?

処理速度は本質的に同一である――L2 、IP 、cosineはいずれもベクトルを1回走査するだけで済む。重要なのはリコールである。埋め込みモデルの学習に使用されたものとは異なるメトリックで検索を行うと、結果の品質が顕著に、しばしば劇的に低下する。

さらに詳しく:Milvus がサポートするメトリクスの完全なリストについては、『Similarity Metrics』のドキュメントを参照してください。これには、バイナリベクトル用のハミング(Hamming)やジャカード(Jaccard)、全文検索用のBM25などが含まれます。

探索を続けてください