メトリックタイプ
類似度メトリックはベクトル間の類似性を測定するために使用されます。適切な距離メトリックを選択することで、分類およびクラスタリングのパフォーマンスを大幅に改善できます。
現在、Zilliz Cloudはこれらの類似性メトリックタイプをサポートしています:ユークリッド距離(L2)、内積(IP)、コサイン類似度(COSINE)、JACCARD、HAMMING、およびBM25(スパースベクトルの全文検索に特化して設計されています)。
以下は、異なるフィールドタイプとそれに対応するメトリックタイプとのマッピングをまとめた表です。
フィールドタイプ | 次元範囲 | サポートされているメトリックタイプ | デフォルトのメトリックタイプ |
|---|---|---|---|
| 2-32,768 |
|
|
| 2-32,768 |
|
|
| 2-32,768 |
|
|
| 2-32,768 |
|
|
| 次元を指定する必要はありません。 |
|
|
| 8-32,768*8 |
|
|
SPARSE_FLOAT_VECTOR型のベクトルフィールドについては、全文検索を実行する場合にのみBM25メトリックタイプを使用します。詳細については、全文検索を参照してください。BINARY_VECTOR型のベクトルフィールドについては、次元値(dim)は8の倍数でなければなりません。
以下は、サポートされているすべてのメトリックタイプの類似性距離値の特性とその値の範囲をまとめた表です。
メトリックタイプ | 類似性距離値の特性 | 類似性距離値の範囲 |
|---|---|---|
| 値が小さいほど類似性が高い。 | [0, ∞) |
| 値が大きいほど類似性が高い。 | [-1, 1] |
| 値が大きいほど類似性が高い。 | [-1, 1] |
| 値が小さいほど類似性が高い。 | [0, 1] |
| MinHash署名ビットからのJaccard類似度の推定値。距離が小さいほど類似度が高い | [0, 1] |
| 値が小さいほど類似性が高い。 | [0, dim(vector)] |
| 用語頻度、逆文書頻度、および文書正規化に基づいて関連性を評価します。 | [0, ∞) |
ユークリッド距離(L2)
本質的に、ユークリッド距離は2点をつなぐセグメントの長さを測定します。
ユークリッド距離の公式は以下の通りです。

ここで、a = (a0, a1,..., an-1) および b = (b0, b1,..., bn-1) は、n次元ユークリッド空間における2つの点です。
これは最も一般的に使用される距離メトリックであり、データが連続している場合に非常に有用です。
Zilliz Cloudではユークリッド距離が距離メトリックとして選択された場合、ルートを適用する前の値のみを計算します。
内積(IP)
2つの埋め込み間のIP距離は次のように定義されます。

IPは、正規化されていないデータを比較する必要がある場合や、大きさと角度を重視する場合に特に有用です。
埋め込み間の類似性を計算するためにIPを使用する場合、埋め込みを正規化する必要があります。正規化後、内積はコサイン類似度と等しくなります。
X'が埋め込みXから正規化されたと仮定します。
2つの埋め込み間の相関は次のとおりです。
コサイン類似度
コサイン類似度は、2つのベクトル集合の角度のコサインを使用して、それらがどれほど似ているかを測定します。2つのベクトル集合を同じ点、たとえば[0,0,...]から始まり、異なる方向を向いている線分と考えることができます。
2つのベクトル集合 A = (a0, a1,..., an-1) および B = (b0, b1,..., bn-1) の間のコサイン類似度を計算するには、次の公式を使用します。

コサイン類似度は常に区間 [-1, 1] に含まれます。たとえば、2つの比例するベクトルはコサイン類似度が 1 になり、2つの直交するベクトルは類似度が 0 になり、2つの反対方向のベクトルは類似度が -1 になります。コサインが大きいほど、2つのベクトル間の角度が小さくなり、これらの2つのベクトルが互いに類似していることを示します。
コサイン類似度を1から引くことで、2つのベクトル間のコサイン距離を得ることができます。
JACCARD距離
JACCARD距離係数は2つの標本集合間の類似性を測定し、定義された集合の交差の濃度をそれらの和集合の濃度で割って定義されます。有限標本集合にのみ適用できます。
JACCARD距離はデータセット間の不類似性を測定し、JACCARD類似係数を1から引いて得られます。2値変数については、JACCARD距離はTanimoto係数と同等です。
MHJACCARD
MinHash Jaccard(MHJACCARD)は、文書語集合、ユーザータグ集合、またはゲノムk-mer集合などの大規模集合上で効率的かつ近似的な類似度検索を行うためのメトリックタイプです。MHJACCARDは生の集合を直接比較する代わりに、MinHash署名を比較します。これはJaccard類似度を効率的に推定するように設計されたコンパクトな表現です。
このアプローチは、正確なJaccard類似度を計算するよりはるかに高速であり、特に大規模または高次元のシナリオに有用です。
適用可能なベクトルタイプ
BINARY_VECTOR。各ベクトルはMinHash署名を格納します。各要素は、元の集合に適用された独立したハッシュ関数の1つに対する最小ハッシュ値に対応します。
距離定義
MHJACCARDは、2つのMinHash署名で一致する位置の数を測定します。一致率が高いほど、基になる集合がより類似していることを示します。
Milvusでは以下を報告します。
- 距離 = 1 - 推定類似度(一致率)
距離値の範囲は0〜1です。
-
0 はMinHash署名が同一であることを意味します(推定Jaccard類似度 = 1)
-
1 はどの位置でも一致しないことを意味します(推定Jaccard類似度 = 0)
技術的な詳細については、MINHASH_LSHを参照してください。
ハミング距離
ハミング距離はバイナリデータ文字列を測定します。等しい長さの2つの文字列間の距離は、ビットが異なる位置の数です。
たとえば、1101 1001 と 1001 1101 という2つの文字列があるとします。
11011001 ⊕ 10011101 = 01000100。これには2つの1が含まれているため、ハミング距離 d (11011001, 10011101) = 2 です。
BM25類似度
BM25は広く使用されているテキスト関連性測定方法であり、特に全文検索用に設計されています。これには以下の3つの主要な要素が組み込まれています。
-
用語頻度(TF): 文書内で用語がどれだけ頻繁に出現するかを測定します。出現頻度が高いほど重要であることが多いですが、BM25は飽和パラメータを使用して、過度に頻繁な用語が関連性スコアを支配するのを防ぎます。
-
逆文書頻度(IDF): 用語が全体のコーパス全体にどれだけ重要かを反映します。少数の文書に出現する用語は高いIDF値を受け取り、関連性へのより大きな貢献を示します。
-
文書長正規化: 長い文書は多くの用語を含むため、スコアが高くなりやすいです。BM25はこのバイアスを、パラメータでこの正規化の強度を制御することにより緩和します。
BM25のスコアリングは以下のように計算されます。
score(D, Q)=\sum_{i=1}^{n}IDF(q_i)\cdot \{\{TF(q_i,D)\cdot(k_1+1)}\over\{TF(q_i, D)+k_1\cdot(1-b+b\cdot \{\{|D|}\over{avgdl}})}}パラメータ説明:
-
:ユーザーが提供するクエリテキスト。
-
:評価中の文書。
-
:用語頻度。文書中に用語が出現する頻度を表します。
-
:逆文書頻度。次のように計算されます。
IDF(q_i)=\log(\{N-n(q_i)+0.5\over n(q_i)+0.5} + 1)ここで、はコーパス中の文書の総数、は用語を含む文書の数です。
-
:文書の長さ(用語の総数)。
-
:コーパス中すべての文書の平均長。
-
:スコアに対する用語頻度の影響を制御します。値が大きいほど用語頻度の重要性が高まります。通常の範囲は[1.2, 2.0]ですが、Zilliz Cloudでは[0, 3]の範囲を許可します。
-
:長さの正規化の程度を制御します。0〜1の範囲です。値が0の場合、正規化は適用されません。値が1の場合、完全な正規化が適用されます。