索引精度レポート

索引精度レポート機能を使用すると、ベクトル索引の精度を判断できます。

1つの特定の問合せベクトルの精度

ベクトル索引の作成後、ベクトル検索がどの程度正確であるかを知りたい場合があります。実行可能な方法の1つは、同じ問合せベクトルを使用して2つの問合せを実行すること、つまり、1つはベクトル索引を使用して近似検索を実行し、もう1つは索引なしで完全検索を実行することです。次に、結果を手動で比較して、索引の実際の精度を判断する必要があります。

かわりに、DBMS_VECTOR.INDEX_ACCURACY_QUERYプロシージャによって提供される索引精度レポートを使用できます。このプロシージャでは、特定の問合せベクトルの上位K件の索引検索および特定のターゲット精度の精度レポートが提供されます。構文およびパラメータの詳細は、INDEX_ACCURACY_QUERYを参照してください。

銀河のシナリオを使用したこの手順の使用例を次に示します。
declare
    q_v VECTOR; 
    report varchar2(128);
begin 
    q_v := to_vector('[0,1,1,0,0]');
    report := dbms_vector.index_accuracy_query(
        OWNER_NAME => 'COSMOS', 
        INDEX_NAME => 'GALAXIES_HNSW_IDX',
        qv => q_v, top_K =>10, 
        target_accuracy =>90 );
    dbms_output.put_line(report); 
end; 
/

この例では、NGC 1073銀河に対応する埋込みと要求された90%の精度を使用して、GALAXIES_HNSW_IDXベクトル索引の上位10件の精度を計算します。

この索引精度レポートは次のようになります。
Accuracy achieved (100%) is 10% higher than the Target Accuracy requested (90%)

指定可能なパラメータは次のとおりです。

  • owner_name: 索引の所有者の名前

  • index_name: 索引名

  • qv: 問合せベクトル

  • top_K: 精度計算の上位K値

  • target_accuracy: 索引のターゲット精度

自動的に取得される問合せベクトルの精度

DBMS_VECTOR.INDEX_ACCURACY_REPORTファンクションのオーバーロード・バージョンを使用すると、特定の期間の特定のベクトル索引を使用して、近似検索によって達成された過去のワークロードの精度値から取得できます。近似検索に使用される問合せベクトルは、メモリー内に自動的に取得され、1時間ごとにカタログ表に永続化されます。

INDEX_ACCURACY_REPORT関数は、特定の索引に対して取得された問合せベクトルを使用して、達成された精度を計算します。各問合せベクトルの達成精度を計算するために、この関数は、近似類似検索の結果セットと、同じ問合せベクトルの正確な類似検索を比較します。

精度結果はディクショナリに格納され、DBA_VECTOR_INDEX_ACCURACY_REPORTディクショナリ・ビューを使用して公開されます。

銀河のシナリオを使用したこの関数の使用例を次に示します。

VARIABLE t_id NUMBER;
BEGIN
  :t_id := DBMS_VECTOR.INDEX_ACCURACY_REPORT('VECTOR', 'GALAXIES_HNSW_IDX');
END;
/

次の文を実行して、対応するタスク識別子を取得することもできます。

SELECT DBMS_VECTOR.INDEX_ACCURACY_REPORT('VECTOR', 'GALAXIES_HNSW_IDX');

INDEX_ACCURACY_REPORTファンクションで使用可能なパラメータは次のとおりです。

  • owner_name (IN): 索引の所有者名
  • ind_name (IN): 索引名
  • start_time (IN): この時間から取得された問合せベクトルは、精度計算で考慮されます。NULL start_timeは、過去24時間に取得された問合せベクトルを使用します。
  • end_time (IN): この時間まで取得された問合せベクトルは、精度計算の対象とみなされます。NULL end_timeは、start_timeから現在の時刻まで取得された問合せベクトルを使用します。
  • 戻り値: 指定された索引の精度が正常に計算された場合の数値のタスクID。そうでない場合はNULLタスクIDが返されます。

ノート:

  • start_timeend_timeの両方がNULLの場合、過去24時間に取得された問合せベクトルを使用して精度が計算されます。
  • start_timeNULLで、end_timeNULLでない場合、精度は、end_timeの24時間前からend_timeまで取得された問合せベクトルを使用して計算されます。
  • start_timeNULLでなく、end_timeNULLの場合、精度は、start_timeと現在の時間の間に取得された問合せベクトルを使用して計算されます。

DBA_VECTOR_INDEX_ACCURACY_REPORTビューを使用して分析結果を表示できます。

desc DBA_VECTOR_INDEX_ACCURACY_REPORT
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TASK_ID                                            NUMBER
 TASK_TIME                                          TIMESTAMP(6)
 OWNER_NAME                                         VARCHAR2(128)
 INDEX_NAME                                         VARCHAR2(128)
 INDEX_TYPE                                         VARCHAR2(16)
 MIN_TARGET_ACCURACY                                NUMBER
 MAX_TARGET_ACCURACY                                NUMBER
 NUM_VECTORS                                        NUMBER
 MEDIAN_ACHIEVED_ACCURACY                           NUMBER
 MIN_ACHIEVED_ACCURACY                              NUMBER
 MAX_ACHIEVED_ACCURACY                              NUMBER

次の文でターゲットの精度値を選択します。

SELECT MIN_TARGET_ACCURACY, MAX_TARGET_ACCURACY, num_vectors, MIN_ACHIEVED_ACCURACY, MEDIAN_ACHIEVED_ACCURACY, MAX_ACHIEVED_ACCURACY 
FROM DBA_VECTOR_INDEX_ACCURACY_REPORT WHERE task_id = 1;

MIN_TARGET_ACCURACY MAX_TARGET_ACCURACY NUM_VECTORS MIN_ACHIEVED_ACCURACY MEDIAN_ACHIEVED_ACCURACY MAX_ACHIEVED_ACCURACY
------------------- ------------------- ----------- --------------------- ------------------------ ---------------------
                  1                  10           2                    49                       57                    65
                 11                  20           3                    60                       73                    83
                 21                  30           3                    44                       64                    84
                 31                  40           2                    63                     76.5                    90
                 41                  50           3                    63                       81                    90
                 61                  70           2                    57                       68                    79
                 71                  80           3                    79                       87                    89
                 81                  90           3                    70                       71                    78
                 91                 100           4                    67                     79.5                    88

出力の各行は、1-10、11-20、21-30、...、91-100のターゲット精度値のバケットを表します。

特定の問合せベクトルの近似類似検索および特定のターゲット精度を実行する次の部分的な文を考えてみます。

SELECT ...
FROM ...
WHERE ...
ORDER BY VECTOR_DISTANCE( embedding, :my_query_vector, COSINE )
FETCH APPROXIMATE FIRST 3 ROWS ONLY WITH TARGET ACCURACY 65;

前述のおおよその類似検索が実行され、正確性レポート・タスクによって取得されると、NUM_VECTORSの値は、タスクのDBA_VECTOR_INDEX_ACCURACY_REPORTビューでselect文の結果の行6 (61から70の間のバケット値)で1ずつ増加します。NUM_VECTORSは、特定のターゲット精度バケットに含まれる問合せベクトルの数を表します。

MIN_ACHIEVED_ACCURACYMEDIAN_ACHIEVED_ACCURACYおよびMAX_ACHIEVED_ACCURACYは、指定されたターゲット精度バケットの実際の達成精度値です。

ノート:

問合せベクトルの取得を有効または無効にするには、初期化パラメータVECTOR_QUERY_CAPTUREを使用します。パラメータ値は、デフォルトでONに設定されています。このバックグラウンド機能をオフにするには、VECTOR_QUERY_CAPTUREOFFに設定します。VECTOR_QUERY_CAPTUREONの場合、データベースではサンプリングによって一部の問合せベクトルが取得されます。取得された問合せベクトルは1週間再トレーニングされ、自動的にパージされます。