INDEX_ACCURACY_QUERY

特定の問合せベクトル、上位Kおよびターゲット精度についてベクトル索引の精度を検証するには、DBMS_VECTOR.INDEX_ACCURACY_QUERY関数を使用します。

構文

DBMS_VECTOR.INDEX_ACCURACY_QUERY (
    OWNER_NAME         IN VARCHAR2,
    INDEX_NAME         IN VARCHAR2,
    QV                 IN VECTOR,
    TOP_K              IN NUMBER,
    TARGET_ACCURACY    IN NUMBER
) return VARCHAR2;

DBMS_VECTOR.INDEX_ACCURACY_QUERY (
    OWNER_NAME         IN VARCHAR2, 
    INDEX_NAME         IN VARCHAR2,
    QV                 IN VECTOR,
    TOP_K              IN NUMBER,
    QUERY_PARAM        IN JSON
) return VARCHAR2;

パラメータ

表12-4 DBMS_VECTORのINDEX_ACCURACY_QUERY (IN)のパラメータ

パラメータ 説明
owner_name

ベクトル索引の所有者の名前。

index_name

ベクトル索引の名前。

qv

問合せベクトルを指定します。

top_k

精度計算のtop_k値。

target_accuracy

ベクトル索引のターゲット精度値。

query_param

ベクトル索引の精度の計算中に使用する問合せパラメータの指定に使用できるJSON入力。サポートされる値は次のとおりです。

  • accuracy: ターゲットの精度。
  • neighbor partition probes: IVF索引の場合の近傍パーティション・プローブ。
  • efsearch: HNSW索引の場合のefsearch
  • rescore factor: 量子化されたベクトル索引で使用されます。現在、rescore factorは、量子化されたHNSW索引の場合のみサポートされています。

ベクトル索引の精度を判断する方法の詳細は、『Oracle AI Database Oracle AI Vector Searchユーザーズ・ガイド』索引精度レポートを参照してください。

使用上の注意

query_paramパラメータでrescore factorフィールドを指定すると、この値を使用して、指定された索引について、達成された精度が計算されます。これにより、精度の要件に基づいて、スカラー量子化HNSW索引について、適切な再スコア係数を手動で選択できるようになります。

量子化の詳細は、Oracle AI Database AI Vector Searchユーザーズ・ガイドスカラー量子化HNSW索引を参照してください。

IVF索引を使用した例:

DECLARE
  q_v    VECTOR;
  report VARCHAR2(128);
BEGIN
  q_v := TO_VECTOR('[1, 1, 1]', 3, FLOAT64);
  report := DBMS_VECTOR.INDEX_ACCURACY_QUERY(owner_name => 'VEC',
                                index_name => 'IVF_IDX',
                                qv => q_v,
                                top_K => 10,
                                query_param => json('{"accuracy": 80 }'));
  DBMS_OUTPUT.PUT_LINE(report);
END;
/

結果:

Accuracy achieved (100%) is 20% higher than the Target Accuracy requested (80%)
DECLARE
  q_v    VECTOR;
  report VARCHAR2(128);
BEGIN
  q_v := TO_VECTOR('[1, 1, 1]', 3, FLOAT64);
  report := DBMS_VECTOR.INDEX_ACCURACY_QUERY(owner_name => 'VEC',
                                index_name => 'IVF_IDX',
                                qv => q_v,
                                top_K => 10,
                                query_param => json('{"neighbor partition probes": 2}'));
  DBMS_OUTPUT.PUT_LINE(report);
END;
/

結果:

Accuracy achieved (100%) for NEIGHBOR PARTITION PROBES (2)

HNSW索引を使用した例:

DECLARE
  q_v    VECTOR;
  report VARCHAR2(128);
BEGIN
  q_v := TO_VECTOR('[1, 1, 1]', 3, FLOAT64);
  report := DBMS_VECTOR.INDEX_ACCURACY_QUERY(owner_name => 'VEC',
                                index_name => 'HNSW_IDX',
                                qv => q_v,
                                top_K => 10,
                                query_param => json('{"efsearch": 32}'));
  DBMS_OUTPUT.PUT_LINE(report);
END;
/

結果:

Accuracy achieved (100%) for EFSEARCH (32)

量子化HNSW索引を使用した例:

DECLARE
  q_v    VECTOR;
  report VARCHAR2(128);
BEGIN
  q_v := TO_VECTOR('[1, 1, 1]', 3, FLOAT64);
  report := DBMS_VECTOR.INDEX_ACCURACY_QUERY(owner_name => 'VEC',
                                index_name => 'QUANTIZED_HNSW_IDX',
                                qv => q_v,
                                top_K => 10,
                                query_param => json('{"efsearch": 32, "rescore factor " : 2}'));
  DBMS_OUTPUT.PUT_LINE(report);
END;
/

結果:

Accuracy achieved (100%) for EFSEARCH (32), RESCORE FACTOR (2)