メトリックタイプ
類似度メトリックはベクトル間の類似性を測定するために使用されます。適切な距離メトリックを選択することで、分類およびクラスタリングのパフォーマンスを大幅に改善できます。
現在、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を引くことで求められます。バイナリ変数の場合、JACCARD距離はTanimoto係数と等価です。
MHJACCARD
MinHash Jaccard (MHJACCARD)は、文書の単語集合、ユーザータグ集合、またはゲノムk-mer集合などの大規模集合に対して効率的かつ近似的な類似度検索を行うために使用されるメトリックタイプです。MHJACCARDは、生の集合を直接比較する代わりに、Jaccard類似度を効率的に推定するように設計されたコンパクトな表現であるMinHash署名を比較します。
このアプローチは、正確なJaccard類似度を計算するよりもはるかに高速であり、特に大規模または高次元のシナリオに有用です。
適用可能なベクトル型
BINARY_VECTOR。各ベクトルはMinHash署名を保存します。各要素は、元の集合に適用される独立したハッシュ関数の下での最小ハッシュ値に対応します。
距離の定義
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の場合は完全な正規化が適用されます。