類似性メトリクス
Milvusでは、ベクトル間の類似性を測定するために類似性メトリックが使用されます。適切な距離メトリックを選択することで、分類とクラスタリングの性能を大幅に向上させることができます。
以下の表は広く使われている類似度メトリクスが様々な入力データ形式とMilvusインデックスにどのように適合するかを示しています。現在、Milvusは浮動小数点埋め込み(しばしば浮動小数点ベクトルや密なベクトルとして知られる)、バイナリ埋め込み(バイナリベクトルとしても知られる)、スパース埋め込み(スパースベクトルとしても知られる)を含む様々なタイプのデータをサポートしています。
メトリック型 | インデックスの種類 |
---|---|
|
|
メトリックタイプ | インデックスタイプ |
---|---|
|
|
メトリックタイプ | インデックスタイプ |
---|---|
IP |
|
ユークリッド距離 (L2)
基本的に、ユークリッド距離は2点を結ぶセグメントの長さを測定する。
ユークリッド距離の公式は以下の通り:
ユークリッド距離
ここでa= (a0,a1,...,an-1)とb= (b0,b0,...,bn-1)はn次元ユークリッド空間の2点である。
これは最もよく使われる距離尺度で、データが連続的な場合に非常に便利である。
内積 (IP)
2つのベクトル埋め込み間のIP距離は次のように定義されます:
IP
IPは、正規化されていないデータを比較する場合や、大きさや角度を気にする場合に便利です。
正規化された埋込みデータにIP距離を適用すると,埋込みデータ間の余弦類似度を計算するのと同じ結果になります.
X'が埋め込みXから正規化されたとします:
正規化
2つの埋め込み間の相関は次のようになります:
正規化
コサイン類似度
コサイン類似度は、2組のベクトル間の角度の余弦を用いて、それらの類似度を測定します。2組のベクトルは、同じ原点([0,0,...])から出発し、異なる方向を向いている2つの線分と考えることができます。
2組のベクトルA = (a0,a1,...,an-1)とB = (b0,b1,...,bn-1)の余弦類似度を計算するには、次の式を使います:
cosine_similarity
余弦類似度は常に区間[-1, 1]にある。例えば、2つの比例ベクトルは余弦類似度が1、2つの直交ベクトルは類似度が0、2つの反対ベクトルは類似度が-1です。余弦が大きければ大きいほど、2つのベクトル間の角度が小さくなり、これらの2つのベクトルが互いに似ていることを示します。
コサイン類似度を1から引くことで、2つのベクトル間のコサイン距離が得られます。
ジャカード距離
ジャカード類似度係数は、2つの標本集合間の類似度を測定し、定義された集合の交点のカーディナリティをそれらの和のカーディナリティで割ったものとして定義される。有限の標本集合にのみ適用できる。
ジャカード類似度係数
Jaccard距離はデータ集合間の非類似度を測定し,Jaccard類似度係数を1から引くことで得られる.
ジャカード距離
ハミング距離
ハミング距離は2値データの文字列を測定する。同じ長さの2つの文字列間の距離は、ビットが異なるビット位置の数である。
例えば、1101 1001 と 1001 1101 という2つの文字列があるとする。
11011001 ⊕ 10011101 = 01000100.これには2つの1が含まれるため、ハミング距離d (11011001, 10011101) = 2となる。
構造の類似性
ある化学構造がより大きな化学構造の一部として存在する場合、前者を部分構造、後者を上部構造と呼ぶ。例えば、エタノールは酢酸の部分構造であり、酢酸はエタノールの上部構造である。
構造の類似性は、一方が他方の上部構造または下部構造であるという点で、2つの化学式が互いに類似しているかどうかを判断するために使用される。
AがBの上部構造であるかどうかを判定するには、次式を使用する:
上部構造
ここで
- Aは、検索する化学式のバイナリ表現である。
- B はデータベース内の化学式のバイナリ表現である。
この式が0
を返すと、Aは Bの上部構造ではない。
AがBの部分構造であるかどうかを判定するには、以下の式を使用する:
部分構造
ここで
- A は、検索する化学式のバイナリ表現である。
- B はデータベース内の化学式のバイナリ表現である。
この式が0
を返すと、Aは Bの部分構造ではありません。
よくある質問
メトリックの種類が内積の場合、ベクトル検索のトップ1の結果が検索ベクトルそのものではないのはなぜですか?
距離メトリックとして内積を使用する際に、ベクトルを正規化していない場合に発生します。正規化とは何ですか?なぜ正規化が必要なのですか?
正規化とは、埋め込み(ベクトル)のノルムが1になるように変換することです。埋込みの類似度を計算するために内積を使用する場合、埋込みを正規化する必要があります。正規化後は、内積は余弦類似度に等しくなります。
詳しくはWikipediaをご覧ください。
ユークリッド距離(L2)と内積(IP)を距離メトリックとして使用した場合、異なる結果が得られるのはなぜですか?
ベクトルが正規化されているか確認してください。もしそうでなければ、まずベクトルを正規化する必要があります。理論的に言えば、ベクトルが正規化されていない場合、L2で計算された類似度はIPで計算された類似度とは異なります。次のページ
- Milvusでサポートされているインデックスタイプについてもっと知る。