milvus-logo
LFAI
フロントページへ
  • コンセプト

類似性メトリクス

Milvusでは、ベクトル間の類似性を測定するために類似性メトリックが使用されます。適切な距離メトリックを選択することで、分類とクラスタリングの性能を大幅に向上させることができます。

以下の表は広く使われている類似度メトリクスが様々な入力データ形式とMilvusインデックスにどのように適合するかを示しています。現在、Milvusは浮動小数点埋め込み(しばしば浮動小数点ベクトルや密なベクトルとして知られる)、バイナリ埋め込み(バイナリベクトルとしても知られる)、スパース埋め込み(スパースベクトルとしても知られる)を含む様々なタイプのデータをサポートしています。

メトリック型 インデックスの種類
  • ユークリッド距離 (L2)
  • 内積 (IP)
  • コサイン類似度 (COSINE)
  • フラット
  • IVF_FLAT
  • IVF_SQ8
  • IVF_PQ
  • GPU_IVF_FLAT
  • GPU_IVF_PQ
  • HNSW
  • DISKANN
メトリックタイプ インデックスタイプ
  • ジャカード
  • ハミング
  • BIN_FLAT
  • BIN_IVF_FLAT
メトリックタイプ インデックスタイプ
IP
  • スパース・インバーテッド・インデックス
  • スパースワンド

ユークリッド距離 (L2)

基本的に、ユークリッド距離は2点を結ぶセグメントの長さを測定する。

ユークリッド距離の公式は以下の通り:

euclidean ユークリッド距離

ここでa= (a0,a1,...,an-1)とb= (b0,b0,...,bn-1)はn次元ユークリッド空間の2点である。

これは最もよく使われる距離尺度で、データが連続的な場合に非常に便利である。

Milvusはユークリッド距離が距離メトリックとして選択された時のみ平方根を適用する前に値を計算します。

内積 (IP)

2つのベクトル埋め込み間のIP距離は次のように定義されます:

ip IP

IPは、正規化されていないデータを比較する場合や、大きさや角度を気にする場合に便利です。

正規化された埋込みデータにIP距離を適用すると,埋込みデータ間の余弦類似度を計算するのと同じ結果になります.

X'が埋め込みXから正規化されたとします:

normalize 正規化

2つの埋め込み間の相関は次のようになります:

normalization 正規化

コサイン類似度

コサイン類似度は、2組のベクトル間の角度の余弦を用いて、それらの類似度を測定します。2組のベクトルは、同じ原点([0,0,...])から出発し、異なる方向を向いている2つの線分と考えることができます。

2組のベクトルA = (a0,a1,...,an-1)B = (b0,b1,...,bn-1)の余弦類似度を計算するには、次の式を使います:

cosine_similarity cosine_similarity

余弦類似度は常に区間[-1, 1]にある。例えば、2つの比例ベクトルは余弦類似度が1、2つの直交ベクトルは類似度が0、2つの反対ベクトルは類似度が-1です。余弦が大きければ大きいほど、2つのベクトル間の角度が小さくなり、これらの2つのベクトルが互いに似ていることを示します。

コサイン類似度を1から引くことで、2つのベクトル間のコサイン距離が得られます。

ジャカード距離

ジャカード類似度係数は、2つの標本集合間の類似度を測定し、定義された集合の交点のカーディナリティをそれらの和のカーディナリティで割ったものとして定義される。有限の標本集合にのみ適用できる。

Jaccard similarity coefficient ジャカード類似度係数

Jaccard距離はデータ集合間の非類似度を測定し,Jaccard類似度係数を1から引くことで得られる.

Jaccard distance ジャカード距離

ハミング距離

ハミング距離は2値データの文字列を測定する。同じ長さの2つの文字列間の距離は、ビットが異なるビット位置の数である。

例えば、1101 1001 と 1001 1101 という2つの文字列があるとする。

11011001 ⊕ 10011101 = 01000100.これには2つの1が含まれるため、ハミング距離d (11011001, 10011101) = 2となる。

構造の類似性

ある化学構造がより大きな化学構造の一部として存在する場合、前者を部分構造、後者を上部構造と呼ぶ。例えば、エタノールは酢酸の部分構造であり、酢酸はエタノールの上部構造である。

構造の類似性は、一方が他方の上部構造または下部構造であるという点で、2つの化学式が互いに類似しているかどうかを判断するために使用される。

AがBの上部構造であるかどうかを判定するには、次式を使用する:

superstructure 上部構造

ここで

  • Aは、検索する化学式のバイナリ表現である。
  • B はデータベース内の化学式のバイナリ表現である。

この式が0 を返すと、Aは Bの上部構造ではない。

AがBの部分構造であるかどうかを判定するには、以下の式を使用する:

substructure 部分構造

ここで

  • A は、検索する化学式のバイナリ表現である。
  • B はデータベース内の化学式のバイナリ表現である。

この式が0 を返すと、Aは Bの部分構造ではありません。

よくある質問

メトリックの種類が内積の場合、ベクトル検索のトップ1の結果が検索ベクトルそのものではないのはなぜですか?距離メトリックとして内積を使用する際に、ベクトルを正規化していない場合に発生します。
正規化とは何ですか?なぜ正規化が必要なのですか?

正規化とは、埋め込み(ベクトル)のノルムが1になるように変換することです。埋込みの類似度を計算するために内積を使用する場合、埋込みを正規化する必要があります。正規化後は、内積は余弦類似度に等しくなります。

詳しくはWikipediaをご覧ください。

ユークリッド距離(L2)と内積(IP)を距離メトリックとして使用した場合、異なる結果が得られるのはなぜですか?ベクトルが正規化されているか確認してください。もしそうでなければ、まずベクトルを正規化する必要があります。理論的に言えば、ベクトルが正規化されていない場合、L2で計算された類似度はIPで計算された類似度とは異なります。

次のページ

翻訳DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?