AI-200:Developing AI Cloud Solutions on Azure Azure データ管理サービスを使った AI ソリューションの開発 問4
Azure データ管理サービスを使った AI ソリューションの開発/Azure Database for PostgreSQL を使った AI ソリューションの開発Azure Database for PostgreSQL フレキシブル サーバーで pgvector を使い、RAG 用の文書テーブルを新しく作ります。テーブルは最初は空で、運用を始めてから文書が継続的に追加されます。検索の速度と再現率のバランスを重視する場合、ベクター列に作るインデックスとして適切なものはどれですか。
当サイトのオリジナル問題(AI-200:Developing AI Cloud Solutions on Azureの出題範囲「Azure データ管理サービスを使った AI ソリューションの開発」に対応。実際の試験問題ではありません)
- AHNSW インデックスを作成する。事前の学習ステップが不要なので空のテーブルにも作成でき、速度と再現率のバランスに優れる
- BIVFFlat インデックスを空のテーブルに作成する。データを入れる前に作るほど、リストの分割が最適になる
- Cベクター列に B-tree インデックスを作成し、<=> 演算子による近傍検索に使わせる
- Dインデックスは作らず、max_parallel_workers_per_gather を0にして全件走査を直列で実行させる
正解:A
解説
HNSW は、多層のグラフを使って近似最近傍探索を行うインデックスです。IVFFlat より作成に時間とメモリがかかりますが、速度と再現率のバランスに優れます。また、IVFFlat のような学習ステップが無いため、空のテーブルにも作成できます。IVFFlat は k-means でデータをリストに分割するので、データを入れてから作成するのが基本です。Azure Database for PostgreSQL フレキシブル サーバーでは、DiskANN のインデックスも利用できます。
選択肢ごとの解説
- A正しい。データが後から継続的に増え、速度と再現率のバランスを重視する場合は HNSW が適しています。
- B誤り。IVFFlat は既存のデータを k-means で分割してリストを作るため、データを入れてから作成するのが基本です。空のテーブルで作ると、分割が適切になりません。
- C誤り。B-tree インデックスはベクトルの距離による近傍検索には使えません。pgvector の近傍検索には、HNSW や IVFFlat などのベクター用インデックスを使います。
- D誤り。インデックスが無いと毎回全件を走査することになり、データが増えるほど遅くなります。並列実行を無効にすると、さらに遅くなります。