インデックスの作成
インデックスは、Vectorizeの「原子」です。ベクトルはインデックスに挿入され、指定された入力ベクトルに対して類似のベクトルをインデックスからクエリすることを可能にします。
インデックスを作成するには、3つの入力が必要です:
- 名前、例えば
prod-search-indexまたはrecommendations-idx-dev。 - 各ベクトルの(固定)次元サイズ、例えば384または1536。
- ベクトルの類似性を計算するために使用する(固定)距離メトリック。
インデックスの構成は、作成後に変更することはできません。
wranglerを使用してインデックスを作成するには:
npx wrangler vectorize create your-index-name --dimensions=NUM_DIMENSIONS --metric=SELECTED_METRICWorker’s AIの@cf/baai/bge-base-en-v1.5埋め込みモデルからベクトル埋め込みを受け入れるインデックスを作成するには、次のコマンドを使用します。このモデルは768次元のベクトルを出力します:
npx wrangler vectorize create your-index-name --dimensions=768 --metric=cosineVectorizeは、REST APIを介してインデックスの作成もサポートしています。
例えば、Pythonスクリプトから直接インデックスを作成するには:
import requests
url = "https://api.cloudflare.com/client/v4/accounts/{}/vectorize/v2/indexes".format("your-account-id")
headers = { "Authorization": "Bearer <your-api-token>"}
body = { "name": "demo-index", "description": "いくつかのインデックスの説明", "config": { "dimensions": 1024, "metric": "euclidean" },}
resp = requests.post(url, headers=headers, json=body)
print('ステータスコード:', resp.status_code)print('レスポンスJSON:', resp.json())このスクリプトは、ステータスコード 201 とともに、提供された構成でインデックスが作成されたことを示すJSONレスポンスボディを印刷するはずです。
次元は、それらを生成するために使用される機械学習(ML)モデルの出力サイズから決定され、モデルが特徴をベクトル埋め込みにエンコードし記述する方法の関数です。
出力次元の数は、ベクトル検索の精度、検索パフォーマンス(レイテンシ)、およびインデックスの全体的なサイズを決定することができます。小さい出力次元は、ユーザー向けアプリケーションにとって便利な、より迅速な検索を可能にすることがあります。大きい出力次元は、特に大規模なデータセットや実質的に類似した入力を持つデータセットに対して、より正確な検索を提供することができます。
インデックスが作成される次元の数は変更できません。インデックスは、同じ次元数の密なベクトルを受け取ることを期待しています。
以下の表は、いくつかの例の埋め込みモデルとその出力次元を示しています:
| モデル / 埋め込みAPI | 出力次元 | 使用例 |
|---|---|---|
Workers AI - @cf/baai/bge-base-en-v1.5 | 768 | テキスト |
OpenAI - ada-002 | 1536 | テキスト |
Cohere - embed-multilingual-v2.0 | 768 | テキスト |
Google Cloud - multimodalembedding | 1408 | マルチモーダル(テキスト、画像) |
距離メトリックは、ベクトルが互いにどれだけ近いかを決定する関数です。Vectorizeインデックスは、以下の距離メトリックをサポートしています:
| メトリック | 詳細 |
|---|---|
cosine | 距離は -1(最も類似していない)から 1(同一)まで測定されます。 0 は直交ベクトルを示します。 |
euclidean | ユークリッド(L2)距離。 0 は同一のベクトルを示します。正の数が大きいほど、ベクトルは離れています。 |
dot-product | 負の内積。大きな負の値 または 小さな正の値は、より類似したベクトルを示します。スコア -1000 は -500 よりも類似しており、スコア 15 は 50 よりも類似しています。 |
ベクトル間の類似性を決定することは、結果のベクトル埋め込みで特徴を表す機械学習モデルに基づいて主観的である可能性があります。例えば、cosine メトリックを使用した場合のスコア 0.8511 は、2つのベクトルが距離的に近いことを意味しますが、彼らが表すデータが 類似している かどうかは、モデルが元のコンテンツをどれだけうまく表現できるかの関数です。
距離メトリックは、インデックス作成後に変更できず、各メトリックには異なるスコアリング関数があります。