索引精度レポート
索引精度レポート機能を使用すると、ベクトル索引の精度を判断できます。
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_time
とend_time
の両方がNULL
の場合、過去24時間に取得された問合せベクトルを使用して精度が計算されます。start_time
がNULL
で、end_time
がNULL
でない場合、精度は、end_time
の24時間前からend_time
まで取得された問合せベクトルを使用して計算されます。start_time
がNULL
でなく、end_time
がNULL
の場合、精度は、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_ACCURACY
、MEDIAN_ACHIEVED_ACCURACY
およびMAX_ACHIEVED_ACCURACY
は、指定されたターゲット精度バケットの実際の達成精度値です。
ノート:
問合せベクトルの取得を有効または無効にするには、初期化パラメータVECTOR_QUERY_CAPTURE
を使用します。パラメータ値は、デフォルトでON
に設定されています。このバックグラウンド機能をオフにするには、VECTOR_QUERY_CAPTURE
をOFF
に設定します。VECTOR_QUERY_CAPTURE
がON
の場合、データベースではサンプリングによって一部の問合せベクトルが取得されます。取得された問合せベクトルは1週間再トレーニングされ、自動的にパージされます。
親トピック: ベクトル索引の様々なカテゴリの管理