ScaNN ベクトルクエリのパフォーマンスの概要

ドキュメントのバージョンを選択します。

このページでは、AlloyDB AI の Scalable Nearest Neighbor(ScaNN)インデックスを使用してベクトルクエリのパフォーマンスを向上させる方法の概要について説明します。詳細については、インデックスとクエリベクトルを作成するをご覧ください。

ScaNN インデックスは、ツリー量子化ベースのインデックス方式を使用します。この手法では、インデックスは量子化(ハッシュ化)関数とともに検索ツリーを学習します。クエリを実行すると、検索ツリーを使用して検索空間が枝刈りされ、量子化を使用してインデックス サイズが圧縮されます。この枝刈りにより、クエリベクトルとデータベース ベクトル間の類似性(距離)のスコアリングが高速化されます。

高い秒間クエリ数(QPS)と最近傍クエリでの高い再現率を両立するには、使用するデータとクエリに最も適した方法で ScaNN インデックスのツリーをパーティショニングする必要があります。

高次元エンベディング モデルは、はるかに低い次元数でも多くの情報を保持できます。たとえば、エンベディングの次元のわずか 20% で情報の 90% を保持できます。このようなデータセットを高速化するため、AlloyDB AI ScaNN インデックスは、インデックス化されたベクトルに対してプリンシパル コンポーネント分析(PCA)による次元削減を自動的に実行します。これにより、ベクトル検索の CPU とメモリ使用量がさらに削減されます。詳細については、scann.enable_pca をご覧ください。

次元削減により、インデックスでの再現率はわずかに低下します。この再現率の低下を補正するため、AlloyDB AI ScaNN インデックスは、まずインデックスから取得した多数の PCA 済みベクトル候補を使用してランク付けを行います。次に、これらの PCA 済みベクトル候補を元のベクトルに基づいて再度ランク付けします。詳細については、scann.pre_reordering_num_neighbors をご覧ください。

次のステップ