メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

メトリックタイプ

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

現在、Zilliz Cloud は以下の種類の類似度メトリックをサポートしています:ユークリッド距離 (L2)、内積 (IP)、コサイン類似度 (COSINE)、JACCARDHAMMING、および BM25(疎ベクトルに対する全文検索用に特別に設計されています)。

以下の表は、異なるフィールドタイプとそれに対応するメトリックタイプのマッピングをまとめたものです。

フィールド型

次元範囲

サポートされるメトリックタイプ

デフォルトのメトリックタイプ

FLOAT_VECTOR

2-32,768

COSINE, L2, IP

COSINE

FLOAT16_VECTOR

2-32,768

COSINE, L2, IP

COSINE

BFLOAT16_VECTOR

2-32,768

COSINE, L2, IP

COSINE

INT8_VECTOR

2-32,768

COSINE, L2, IP

COSINE

SPARSE_FLOAT_VECTOR

次元を指定する必要はありません。

IP, BM25 (全文検索でのみ使用)

IP

BINARY_VECTOR

8-32,768*8

HAMMING, JACCARD, MHJACCARD

HAMMING

📘Notes
  • SPARSE_FLOAT_VECTOR 型のベクトルフィールドの場合、全文検索を実行する場合にのみ BM25 メトリックタイプを使用してください。詳細については、全文検索 を参照してください。

  • BINARY_VECTOR 型のベクトルフィールドの場合、次元値 (dim) は 8 の倍数である必要があります。

以下の表は、サポートされているすべてのメトリックタイプの類似距離値の特性とその値の範囲をまとめたものです。

メトリックタイプ

類似距離値の特性

類似距離値の範囲

L2

値が小さいほど類似度が高いことを示します。

[0, ∞)

IP

値が大きいほど類似度が高いことを示します。

[-1, 1]

COSINE

値が大きいほど類似度が高いことを示します。

[-1, 1]

JACCARD

値が小さいほど類似度が高いことを示します。

[0, 1]

MHJACCARD

MinHash シグネチャビットからジャカード類似度を推定します。距離が小さいほど類似度が高いことを意味します。

[0, 1]

HAMMING

値が小さいほど類似度が高いことを示します。

[0, dim(vector)]

BM25

項頻度、逆文書頻度、および文書正規化に基づいて関連性をスコアリングします。

[0, ∞)

ユークリッド距離 (L2)

本質的に、ユークリッド距離は 2 つの点を結ぶ線分の長さを測定します。

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

C8gHbw8dSozNslx9wXbcyt2hnLe

ここで、a = (a0, a1,..., an-1) および b = (b0, b1,..., bn-1) は n 次元ユークリッド空間内の 2 つの点です。

これは最も一般的に使用される距離メトリックであり、データが連続している場合に非常に有用です。

📘Notes

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

内積 (IP)

2 つの埋め込み間の IP 距離は以下のように定義されます:

Dqp4b8OP3oaQWgxZqoycL3ainwg

IP は、正規化されていないデータを比較する必要がある場合や、大きさ(マグニチュード)と角度を重視する場合により有用です。

📘Notes

埋め込み間の類似度を計算するために IP を使用する場合は、埋め込みを正規化する必要があります。正規化後、内積はコサイン類似度と等しくなります。

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

U23obWPTJoID9KxeGyjc1HAXn9d

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

SHDAb6UUgo7qR6xLXb5cv4bKnke

コサイン類似度

コサイン類似度は、2 つのベクトルセット間の角度のコサインを使用して、それらがどれだけ類似しているかを測定します。2 つのベクトルセットを、[0,0,...] と同じ点から始まりながら異なる方向を向く線分として考えることができます。

2 つのベクトルセット A = (a0, a1,..., an-1) および B = (b0, b1,..., bn-1) の間のコサイン類似度を計算するには、以下の式を使用します:

R1iNbuEDDoz8RdxtA4RcM706nMc

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

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

JACCARD 距離

JACCARD 距離係数は 2 つのサンプルセット間の類似度を測定し、定義されたセットの共通部分の濃度を和集合の濃度で割ったものとして定義されます。これは有限のサンプルセットにのみ適用可能です。

Sl4dbmQRVoIf1yx55mRcibZ3nAg

JACCARD 距離はデータセット間の非類似度を測定し、JACCARD 類似度係数を 1 から引くことで得られます。二値変数の場合、JACCARD 距離は Tanimoto 係数と同等です。

Kj2kbpNmHoTUUixjDC1ccTntnnV

MHJACCARD

MinHash Jaccard (MHJACCARD) は、文書の単語セット、ユーザータグセット、またはゲノム k-mer セットなどの大規模なセットに対して効率的かつ近似的な類似度検索を行うために使用されるメトリックタイプです。生のセットを直接比較する代わりに、MHJACCARD は MinHash シグネチャ を比較します。これは、ジャカード類似度を効率的に推定するように設計されたコンパクトな表現です。

このアプローチは、正確なジャカード類似度を計算するよりも著しく高速であり、大規模または高次元のシナリオで特に有用です。

適用可能なベクトル型

  • BINARY_VECTOR。各ベクトルは MinHash シグネチャを格納します。各要素は、元のセットに適用された独立したハッシュ関数の 1 つの下での最小ハッシュ値に対応します。

距離の定義

MHJACCARD は、2 つの MinHash シグネチャの中で一致する位置の数を測定します。一致率が高いほど、基礎となるセットはより類似しています。

Zilliz Cloud は以下を報告します:

  • 距離 = 1 - 推定類似度(一致率)

距離値の範囲は 0 から 1 です:

  • 0 は MinHash シグネチャが同一であることを意味します(推定ジャカード類似度 = 1)

  • 1 はどの位置でも一致がないことを意味します(推定ジャカード類似度 = 0)

技術的な詳細については、MINHASH_LSH を参照してください。

HAMMING 距離

HAMMING 距離はバイナリデータの文字列を測定します。等しい長さの 2 つの文字列間の距離は、ビットが異なるビット位置の数です。

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

11011001 ⊕ 10011101 = 01000100。これには 2 つの 1 が含まれているため、HAMMING 距離 d (11011001, 10011101) = 2 となります。

BM25 類似度

BM25 は広く使用されているテキスト関連性測定手法であり、特に 全文検索 用に設計されています。これは以下の 3 つの主要な要素を組み合わせています:

  • 項頻度 (TF): 項が文書内に出現する頻度を測定します。頻度が高いほど重要性が高いことが多いですが、BM25 は飽和パラメータ k1k_1 を使用して、過度に頻繁な項が関連性スコアを支配することを防ぎます。

  • 逆文書頻度 (IDF): コーパス全体における項の重要性を反映します。より少ない文書に出現する項は、より高い IDF 値を受け取り、関連性への寄与が大きいことを示します。

  • 文書長正規化: 長い文書はより多くの項を含む傾向があるため、スコアが高くなる傾向があります。BM25 は文書長を正規化することでこのバイアスを軽減し、パラメータ bb がこの正規化の強さを制御します。

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}})}}

パラメータの説明:

  • QQ: ユーザーによって提供されたクエリテキスト。

  • DD: 評価対象の文書。

  • TF(qi,D)TF(q_i, D): 項頻度。項 qiq_i が文書 DD に出現する回数を表します。

  • IDF(qi)IDF(q_i): 逆文書頻度。以下のように計算されます:

    IDF(q_i)=\log(\{N-n(q_i)+0.5\over n(q_i)+0.5} + 1)

    ここで、NN はコーパス内の文書の総数であり、n(qi)n(q_i) は項 qiq_i を含む文書の数です。

  • D|D|: 文書 DD の長さ(項の総数)。

  • avgdlavgdl: コーパス内のすべての文書の平均長。

  • k1k_1: スコアに対する項頻度の影響を制御します。値が高いほど項頻度の重要性が増します。典型的な範囲は [1.2, 2.0] ですが、Zilliz Cloud では [0, 3] の範囲を許可しています。

  • bb: 長さ正規化の程度を制御し、0 から 1 の範囲です。値が 0 の場合、正規化は適用されません。値が 1 の場合、完全な正規化が適用されます。

最大類似度

最大類似度(別名 MAX_SIM)は、単純なベクトル埋め込みではなく、ベクトル埋め込みリスト間の類似度を測定します。主な考え方は、各文書を文脈的なチャンクまたはトークンに分割し、それぞれのベクトル埋め込みを作成して、文書ごとに埋め込みリストとして保存することです。クエリを受信すると、それもトークンに分割され、それに応じて埋め込みリストが生成されます。

score(Q,D)=i=1mmaxj=1ncos(eqi,edj)score(Q, D) = \sum_{i=1}^m\max_{j=1}^ncos(e_{q_i}, e_{d_j})

クエリと文書間の距離または類似度スコアは、上記の式を使用して計算されます。これは最大類似度 (MAX_SIM) と呼ばれます。式内の引数は以下の通りです:

  • QQ: ユーザーによって提供されたクエリテキスト。これはベクトル埋め込みリストに分割されており、EQ=[eq1,...,eqm]E_Q = [e_{q_1}, ..., e_{q_m} ] のようになります。

  • DD: 評価対象の文書。これはベクトル埋め込みリストに分割されており、ED=[ed1,...edn]E_D = [e_{d_1}, ... e_{d_n}] のようになります。

  • eqie_{q_i}: クエリ埋め込みリスト内の i 番目 のベクトル埋め込み。

  • edje_{d_j}: 文書内の j 番目 のベクトル埋め込み。

クエリと文書間の類似度スコアを決定するために、各クエリトークンのベクトル埋め込みを文書内のものと比較して、類似度スコアのリストを取得します。次に、すべてのスコアリストから最高スコアを合計して最終スコアを算出します。

BqBlwM4OOh6hM9bmNwbc2xUUnxc

Zilliz Cloud では、MAX_SIM を使用して、クエリと構造体の配列に保存された文書間の類似度を測定できます。

以下の表は、MAX_SIM シリーズで適用可能なメトリックタイプの一覧です:

メトリックタイプ

説明

MAX_SIM_L2

各クエリトークンと各文書トークン間の距離を計算するために L2 が使用され、複数のスコアリストが生成されます。その後、MAX_SIM によってすべてのスコアリストからの最高スコアを合計して最終スコアを決定します。

MAX_SIM_IP

各クエリトークンと各文書トークン間の距離を計算するために IP が使用され、複数のスコアリストが生成されます。その後、MAX_SIM によってすべてのスコアリストからの最高スコアを合計して最終スコアを決定します。

MAX_SIM_COSINE

各クエリトークンと各文書トークン間の距離を計算するために COSINE が使用され、複数のスコアリストが生成されます。その後、MAX_SIM によってすべてのスコアリストからの最高スコアを合計して最終スコアを決定します。