ベクトルデータベースは、ドキュメントをその埋め込みとともに保存し、ベクトル空間での最近傍探索によってクエリに応答します。大規模になると厳密な最近傍探索はコストが高いため、これらのシステムは Malkov & Yashunin(2018)による HNSW グラフインデックスのような近似手法や、FAISS(Johnson et al., 2017)のような GPU で高速化された検索ライブラリを利用しています。
その結果、数百万件のパッセージを対象に 1 秒未満でセマンティック検索ができるようになります。これが、検索拡張生成(RAG)を実用的なものにするストレージ層です。
ベクトルデータベースは何に使われる?
従来のデータベースは値が完全に一致する行を探しますが、ベクトルデータベースは意味が近い項目を見つけます。たとえば「パスワードをリセットするには」と検索すると、共通する言葉がほとんどなくても「アカウントへのアクセスを回復する」というタイトルのヘルプ記事を返せます。そのため、ベクトルデータベースは次のような用途の基盤となっています。
- ヘルプセンター、Wiki、ドキュメントアーカイブを対象としたセマンティック検索
- 非公開のドキュメントをもとに回答するRAG チャットボット
- レコメンド:商品、記事、楽曲などの「似たものを表示」
- 重複・類似重複の検出
- 画像や音声の類似検索
ベクトルデータベースの仕組み
- 1埋め込みと保存。各項目は埋め込みモデルによって埋め込みに変換され、元のコンテンツやメタデータとともに保存されます。
- 2インデックス化。ベクトルは HNSW などの近似インデックスに整理されます。わずかな精度と引き換えに、大幅な高速化が得られます。
- 3クエリ。クエリは同じモデルで埋め込まれ、データベースはコサイン類似度などの類似度指標に基づいて、最も近いベクトルを見つけます。
- 4フィルタリングと返却。ほとんどのシステムは、類似検索とメタデータによるフィルター(日付、作成者、権限)を組み合わせて上位の一致結果を返します。多くの場合、その結果はリランカーに渡されます。
ベクトルデータベースと従来のデータベースの違い
| 従来のデータベース | ベクトルデータベース | |
|---|---|---|
| 一致の基準 | 完全一致する値やキーワード | 意味の近さ |
| クエリ | SQL またはキーによる検索 | 質問の埋め込み |
| インデックス | B-tree または転置インデックス | 近似最近傍インデックス(例:HNSW) |
| 結果 | 条件に一致するすべての行 | 最も類似した上位 k 件の項目(順位付き) |
選択肢は、Pinecone、Weaviate、Milvus、Qdrant、Chroma といった専用のベクトルデータベースから、PostgreSQL 向けの pgvector のように既存のデータベースにベクトル検索を追加する拡張機能まで幅広くあります。多くのチームにとっては、別のシステムを運用するよりも、すでに使っているデータベースにベクトル検索を追加するほうが簡単です。