Hierarchical Navigable Small World索引の構文およびパラメータ

Hierarchical Navigable Small Worldベクトル索引を作成するための構文と例です。

構文

CREATE VECTOR INDEX vector_index_name 
ON table_name (vector_column)
[GLOBAL] ORGANIZATION INMEMORY [NEIGHBOR] GRAPH
[WITH] [DISTANCE [CUSTOM [<schema>.][<package>.]] metric name]
[WITH TARGET ACCURACY percentage_value]
[QUANTIZATION SCALAR COMPRESSION RATIO {2|4|8}]
[PARAMETERS (TYPE HNSW , 
    {NEIGHBORS max_closest_vectors_connected | M max_closest_vectors_connected}, 
    EFCONSTRUCTION max_candidates_to_consider,
    RESCORE FACTOR rescore_factor,
    ALGORITHM UNIFORM_QUANTIZATION)]
[PARALLEL degree_of_parallelism]

HNSWパラメータ

NEIGHBORSMは同等であり、ベクトルが任意のレイヤーに保持できる近傍の最大数を表します。最後の頂点には、最大200万の近傍を持つことができる柔軟性が1つ追加されます。

EFCONSTRUCTIONは、挿入時に検索の各ステップで考慮される最も近いベクトル候補の最大数を表します。

RESCORE FACTORは、セマンティック検索問合せのリスコアリング乗数を定義する、オプションの整数パラメータです。これはデフォルト値が1であり、索引が量子化されている場合(QUANTIZATIONが指定されている場合)のみ適用されます。

HNSWベクトル索引パラメータの有効な範囲は次のとおりです。

使用上の注意

オプションで、QUANTIZATIONキーワードをCOMPRESSION RATIOパラメータとともに使用して、スカラー量子化を新しいベクトル索引に適用できます。

COMPRESSION RATIOにより、スカラー量子化された索引を作成するときのベクトル列の圧縮レベルを指定します。圧縮率が高くなると、ストレージ要件は小さくなりますが、量子化が増えます。COMPRESSION RATIOに指定できる値は、2、4および8です。

次の表では、元のベクトル列形式に応じた、索引に格納される、結果となるデータ型を圧縮率ごとに示します。

圧縮率 FLOAT64入力 FLOAT32入力 FLOAT16入力
2 Float32 Float16 Int8
4 Float16 Int8 サポート対象外
6 Int8 サポート対象外 サポート対象外

なお、"サポート対象外"とは、圧縮率とベクトル列形式の特定の組合せでスカラー量子化を使用できないことを意味しています。

Hierarchical Navigable Small WorldのCREATE INDEX ONLINE

進行中の更新のために実表が使用可能ある必要があり、それを索引作成中にロックできないという状況では、CREATE VECTOR INDEXONLINE句を使用してHNSW (Hierarchical Navigable Small World)索引をオンラインで作成できます。この方法を使用すると、DML操作が頻繁に発生するアプリケーションで、索引のために元表の更新を一時停止する必要がありません。

構文

CREATE VECTOR INDEX index_name ON table_name(vector_column)
  ORGANIZATION INMEMORY NEIGHBOR GRAPH
  [WITH TARGET ACCURACY 95]
  [DISTANCE EUCLIDEAN]
  PARAMETERS (type HNSW, neighbors 32, efConstruction 500)
  ONLINE;
オンライン索引作成に関する考慮事項
  • 索引作成の間は、索引付けされるベクトルすべてで次元とストレージ・タイプが同じである必要があります。索引作成中に変化や不整合が生じると、エラーが発生します(ORA-51902、ORA-51934など)。
  • 索引構築中に実表でDMLの率が非常に高くなった場合は、索引作成時間が長くなる可能性があります。
  • 含まれる列(そのベクトル列に加えて他の列)を使用したオンライン索引作成は、現在はサポートされていません。
  • オンラインでの分散HNSW索引の作成は、現在はサポートされていません。

CREATE VECTOR INDEX galaxies_hnsw_idx ON galaxies (embedding) 
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE COSINE
WITH TARGET ACCURACY 95;

CREATE VECTOR INDEX galaxies_hnsw_idx ON galaxies (embedding) 
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE COSINE
WITH TARGET ACCURACY 90 PARAMETERS (type HNSW, neighbors 40, efconstruction 500)
PARALLEL 8;

CREATE VECTOR INDEX galaxies_quantized_idx ON galaxies (embedding)
ORGANIZATION INMEMORY NEIGHBOR GRAPH WITH TARGET ACCURACY 90
DISTANCE EUCLIDEAN
QUANTIZATION SCALAR COMPRESSION RATIO 2
PARAMETERS (type HNSW, neighbors 32, efConstruction 200,
             rescore factor 2, algorithm uniform_quantization);

CREATE VECTOR INDEX galaxies_hnsw_idx ON galaxies(embedding) 
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE EUCLIDEAN
WITH TARGET ACCURACY 95
PARAMETERS (type HNSW, neighbors 32, efConstruction 500)
ONLINE;

詳細は、『Oracle AI Database SQL言語リファレンス』「CREATE VECTOR INDEX」を参照してください。