ベクトルインデックスは、アイテムやコンテンツをベクトルとして表現し、ベクトル距離に基づく Top-K 類似性検索をサポートします。
ベクトルインデックスの概要
ベクトル検索は、アイテムやコンテンツをベクトルとして表現し、ベクトルインデックスを構築します。1 つ以上のユーザーまたはアイテムのベクトルを入力して、ベクトル距離に基づいて Top-K のアイテムやコンテンツを取得できます。
ベクトルインデックスの設定
カテゴリなしのベクトル設定
{
"table_name": "test_vector",
"summarys": {
"summary_fields": [
"id",
"vector_field"
]
},
"indexs": [
{
"index_name": "pk",
"index_type": "PRIMARYKEY64",
"index_fields": "id",
"has_primary_key_attribute": true,
"is_primary_key_sorted": false
},
{
"index_name": "embedding",
"index_type": "CUSTOMIZED",
"index_fields": [
{
"boost": 1,
"field_name": "id"
},
{
"boost": 1,
"field_name": "vector_field"
}
],
"indexer": "aitheta2_indexer",
"parameters": {
"enable_rt_build": "false",
"min_scan_doc_cnt": "20000",
"vector_index_type": "Qc",
"major_order": "col",
"builder_name": "QcBuilder",
"distance_type": "SquaredEuclidean",
"embedding_delimiter": ",",
"enable_recall_report": "false",
"is_embedding_saved": "false",
"linear_build_threshold": "5000",
"dimension": "128",
"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
"searcher_name": "QcSearcher",
"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
}
}
],
"attributes": [
"id",
"vector_field"
],
"fields": [
{
"field_name": "id",
"field_type": "INTEGER"
},
{
"user_defined_param": {
"multi_value_sep": ","
},
"field_name": "vector_field",
"field_type": "FLOAT",
"multi_value": true
}
]
}
カテゴリありのベクトル設定
{
"table_name": "test_vector",
"summarys": {
"summary_fields": [
"id",
"vector_field",
"category_id"
]
},
"indexs": [
{
"index_name": "pk",
"index_type": "PRIMARYKEY64",
"index_fields": "id",
"has_primary_key_attribute": true,
"is_primary_key_sorted": false
},
{
"index_name": "embedding",
"index_type": "CUSTOMIZED",
"index_fields": [
{
"boost": 1,
"field_name": "id"
},
{
"field_name": "category_id",
"boost": 1
},
{
"boost": 1,
"field_name": "vector_field"
}
],
"indexer": "aitheta2_indexer",
"parameters": {
"enable_rt_build": "false",
"min_scan_doc_cnt": "20000",
"vector_index_type": "Qc",
"major_order": "col",
"builder_name": "QcBuilder",
"distance_type": "SquaredEuclidean",
"embedding_delimiter": ",",
"enable_recall_report": "false",
"is_embedding_saved": "false",
"linear_build_threshold": "5000",
"dimension": "128",
"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
"searcher_name": "QcSearcher",
"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
}
}
],
"attributes": [
"id",
"vector_field",
"category_id"
],
"fields": [
{
"field_name": "id",
"field_type": "INTEGER"
},
{
"user_defined_param": {
"multi_value_sep": ","
},
"field_name": "vector_field",
"field_type": "FLOAT",
"multi_value": true
},
{
"field_name": "category_id",
"field_type": "INTEGER"
}
]
}
-
カテゴリを使用して、カテゴリ別のベクトル検索をサポートできます。たとえば、1 つの画像に複数のカテゴリを設定できます。カテゴリなしでインデックスを構築し、取得したベクトルをフィルタリングするだけでは、検索で結果が返されない場合があります。
-
管理者モードでベクトルインデックスを設定する場合、
build_index_paramsパラメーターとsearch_index_paramsパラメーターの内容のエスケープ解除をする必要があります。
フィールドの説明
-
field_name:ベクトルインデックスを構築するためのフィールド。プライマリキー (またはそのハッシュ値) とベクトルフィールドの少なくとも 2 つのフィールドを含める必要があります。プライマリキーの値は整数である必要があります。カテゴリ別にインデックスを構築するには、整数値を持つカテゴリフィールドも追加する必要があります。index_fields配列内のフィールドは、プライマリキー、カテゴリ (該当する場合) 、ベクトルの順序でなければなりません。 -
index_name:ベクトルインデックスの名前。 -
index_type:インデックスタイプ。CUSTOMIZEDに設定する必要があります。 -
indexer:ベクトルインデックスを構築するためのプラグイン。aitheta2_indexerのみがサポートされています。 -
parameters:ベクトルインデックスのビルドおよびクエリパラメーター。-
dimension:次元 -
embedding_delimiter:ベクトル要素の区切り文字。デフォルト:カンマ (,)。 -
distance_type:距離メトリック。サポートされている値:-
Inner Product(内積) -
SquaredEuclidean(二乗ユークリッド距離) :正規化されたデータにはこのタイプを使用します。
-
-
major_order:データストレージ形式。サポートされている値:-
col(列ストア) :パフォーマンスを向上させるには、この形式を使用します。次元は 2 のべき乗である必要があります。 -
row(行ストア) :これはデフォルトの形式です。
-
-
builder_name:インデックスビルダーのタイプ。推奨されるタイプは以下のとおりです。詳細なパラメーターについては、お問い合わせください。-
QcBuilder -
LinearBuilder(線形ビルド) :ドキュメント数が 10,000 未満の場合に推奨されるビルダーです。
-
-
searcher_name:インデックスサーチャーのタイプ。builder_nameの値に対応している必要があります。GPU サポートについては、お問い合わせください。-
QcSearcher:QcBuilderに対応する CPU ベースのサーチャー。 -
LinearSearcher:LinearBuilderに対応する CPU ベースの総当たりサーチャー。
-
-
build_index_params:インデックスビルドパラメーター。builder_nameの値に対応します。詳細については、「Quantized Clustering (QC) の設定」をご参照ください。 -
search_index_params:インデックス検索パラメーター。searcher_nameの値に対応します。詳細については、「search_index_params」をご参照ください。 -
linear_build_threshold:線形ビルドのしきい値。ドキュメント数がこの値を下回る場合、LinearBuilderとLinearSearcherを使用します。デフォルト:10,000。線形ビルドはメモリを節約し、ロスレスな検索を提供しますが、大規模なデータセットではパフォーマンスが低下します。 -
min_scan_doc_cnt:検索の候補セット内のドキュメントの最小数。デフォルト:10,000。proxima.qc.searcher.scan_ratioと同様です。両方が設定されている場合は、大きい方の値を使用します。-
scan_ratioまたはmin_scan_doc_cntの値は、大きくすればするほど良いというわけではありません。値が大きすぎると、パフォーマンスに大きな影響を与え、レイテンシーが増加する可能性があります。 -
一般的に、Top-K ベクトルを取得するための
min_scan_doc_cntの推奨値はmax(10000, 100 * topk)です。scan_ratioの推奨値はmax(10000, 100 * topk) / total_doc_cntです。具体的な値は、データサイズ、再現率、およびパフォーマンス要件によって異なります。 -
これら 2 つの類似したパラメーターは、リアルタイムおよび複数カテゴリのシナリオの要件を満たすために用意されています。ほとんどの場合、
scan_ratioを設定するだけで十分です。
-
-
enable_recall_report:再現率メトリクスをレポートするかどうか。デフォルト:false。 -
is_embedding_saved:元のベクトルを保存するかどうか。デフォルト:false。INT8/FP16の量子化とリアルタイム検索を有効にする場合は、trueに設定する必要があります。そうしないと、バッチ増分ビルドが失敗します。 -
enable_rt_build:リアルタイムインデックス作成を有効にするかどうか。デフォルト:false。 -
ignore_invalid_doc:無効なベクトルデータを無視するかどうか。デフォルト:true。 -
rt_index_params:リアルタイムインデックスパラメーター。enable_rt_buildがtrueの場合に適用されます。例:{ "proxima.oswg.streamer.segment_size": 2048 }
-