Vector Databaseが必要な理由
総当たりの類似度検索の限界、HNSWなどの近似最近傍アルゴリズムの仕組み、本番環境でvector databaseが解決する問題を理解します。
「Vector Databaseが必要な理由」はCoddyKit上の無料AI Engineering Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Engineering Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Engineering Academyコースには全4レッスンが含まれています。
インメモリ検索の限界
NumPyによる意味検索は小規模なコーパスではよく機能しますが、根本的なスケーラビリティの問題があります。検索のたびにすべてのベクトルを走査する必要があることです。文書が100万件ある場合、1回のクエリで15億回の浮動小数点乗算が必要になり、数百ミリ秒かかります。さらに、すべてのベクトルをRAMに収めなければなりません。
本番環境のAIシステムでは、数百万件の文書を50ミリ秒未満で検索する必要があります。ベクトルデータベースは、まさにこの要件を満たすために設計されています。
近似最近傍検索
Approximate Nearest Neighbor(ANN)アルゴリズムは、わずかな精度を犠牲にすることで、検索速度を大幅に向上させます。すべてのベクトルを調べる代わりに、ANNアルゴリズムは効率的なインデックス構造を使って、検索空間の大部分をスキップします。
実際には、ANNは95%以上の確率で真の最近傍を返しながら、厳密検索よりも100~1000倍高速です。RAGでは、このトレードオフはほとんどの場合に価値があります。
HNSWの仕組み
HNSW(Hierarchical Navigable Small World)は、Pinecone、Weaviate、Qdrant、pgvectorで使われている主要なANNアルゴリズムです。各ノードが最近傍ノードに接続する多層グラフを構築します。検索は最上層の疎なレイヤーから始まり、近似的な領域へ移動した後、精度を高めるために密な最下層へ降りていきます。
HNSWは優れたクエリ速度(データセットのサイズに対して対数時間)と高い再現率を実現しますが、事前にインデックスを構築する必要があります。
ベクトルデータベースが追加する機能
ベクトルデータベースはANNインデックスだけのものではありません。次の機能も提供します。
- メタデータフィルタリング —
category='finance'またはdate > '2024-01-01'に該当するベクトルだけを取得 - 永続ストレージ — 再起動後もデータが保持され、RAMの容量を超えてスケール可能
- CRUD操作 — 個々のベクトルの挿入、更新、削除
- 名前空間の分離 — 顧客や環境ごとにコレクションを分離
- 水平スケーリング — 数百万件のベクトルをシャード間に分散
メタデータフィルタリングの実践
メタデータフィルタリングを使うと、ANN検索を実行する前に、関連するサブセットだけに取得対象を絞り込めます。たとえばマルチテナントのRAGシステムでは、tenant_idでフィルタリングし、ユーザーが自分の文書だけを見られるようにします。メタデータフィルタリングがなければ、テナントごとに別のインデックスが必要になります。
これは、ベクトルデータベースとFAISSのような単純なANNライブラリを分ける、最も重要な機能の一つです。
# Conceptual example — Pinecone query with metadata filter
results = index.query(
vector=query_embedding,
top_k=5,
filter={
'tenant_id': {'$eq': 'acme_corp'},
'document_type': {'$in': ['invoice', 'contract']},
'date': {'$gte': '2024-01-01'}
},
include_metadata=True
)FAISS:高性能ANNライブラリ
FAISS(Facebook AI Similarity Search)はMetaが提供するオープンソースのANNライブラリで、GPUアクセラレーション検索では最速の選択肢です。ただし、完全なデータベースではありません。永続化、メタデータ、組み込みのサービング機能はありません。
FAISSは、1台のマシンで最大スループットが必要で、永続化を自分で管理する場合に最適です。Chroma、Weaviate、pgvectorは、内部でFAISSまたはHNSWを使用しています。
import faiss
import numpy as np
d = 1536 # dimension
n = 10000 # number of vectors
# Build a flat (exact) index as a baseline
index = faiss.IndexFlatIP(d) # Inner Product = dot product
# Add random vectors (pretend these are embeddings)
vectors = np.random.randn(n, d).astype('float32')
faiss.normalize_L2(vectors) # normalize for cosine sim
index.add(vectors)
query = np.random.randn(1, d).astype('float32')
faiss.normalize_L2(query)
scores, indices = index.search(query, k=5)
print('Top 5 indices:', indices[0])
print('Top 5 scores:', scores[0])ベクトルデータベースと従来のデータベースの比較
PostgreSQLなどの従来のSQLデータベースは、構造化データに対する完全一致検索や範囲検索に最適化されています。高次元の最近傍検索向けには設計されていません。pgvector拡張を使った場合でも、大規模なコーパスでは、純粋なPostgreSQLは専用のベクトルデータベースより低速です。
ただし、アプリケーションがすでにPostgreSQL上で動作していて、コーパスが数百万件未満であれば、pgvectorは非常に優れた選択肢です。別のインフラコンポーネントを追加せずに済むためです。
マネージドとセルフホストの選択肢
ベクトルデータベースの選択肢は、次の2種類に分けられます。
- マネージド(サーバーレス):Pinecone、Weaviate Cloud — 管理するインフラがなく、クエリ数やストレージに応じて支払い、すぐにスケール可能
- セルフホスト:Qdrant、Chroma、Weaviate open-source、pgvector — 完全な制御が可能で、大規模では低コストですが、バックアップ、アップグレード、スケーリングを自分で管理
初期段階のプロジェクトでは、迅速に進めるためにマネージドサービスから始めてください。月額費用が200~300ドルを超えたら、セルフホストを検討します。
インデックスの種類:Flat、IVF、HNSW
インデックスの種類によって、トレードオフが異なります。
- Flat:近似を行わない厳密検索。大規模環境では低速ですが精度の損失がゼロで、ベースラインのベンチマークに適しています
- IVF(Inverted File):ベクトルをクラスタに分割し、最も近いクラスタだけを検索。高速ですが、
nlistとnprobeの調整が必要です - HNSW:グラフベースで、多くのワークロードにおいて再現率と速度のバランスが最適です。ほとんどの本番環境向けデータベースでデフォルトになっています
メモリ削減のための量子化
ベクトル量子化は、ベクトル内の各32ビット浮動小数点数をより少ないビット数に圧縮し、わずかな精度低下と引き換えにメモリ使用量を大幅に削減します。
- FP32:1536次元 × 4バイト = ベクトルあたり6KB
- FP16:ベクトルあたり3KB — 2倍の圧縮で、精度の低下はほぼ無視できます
- INT8:ベクトルあたり1.5KB — 4倍の圧縮で、再現率の低下は約1%です
1000万個のベクトルでは、INT8量子化によってメモリ使用量が60GBから15GBに減少し、RAMに収まるかどうかの違いを生みます。
NumPyからベクトルDBへ移行するタイミング
次のような場合は、インメモリのNumPy検索からベクトルデータベースへの切り替えを検討してください。
- コーパスが5万文書を超え、クエリのレイテンシが悪化している
- メタデータフィルタリング(日付、ユーザー、カテゴリなど)が必要である
- アプリケーションを再起動しても保持される永続化が必要である
- 複数のサービスやユーザーで同じインデックスを共有する必要がある
- すべてを再インデックスせずに個々の文書を更新または削除する必要がある
クイックチェック
このレッスンで学んだAIエンジニアリングの概念を確認しましょう。
レッスンのまとめ
このレッスンでは、次のことを学びました。NumPyによる総当たり検索は数万件を超える文書にはスケールしない、HNSWは階層グラフをたどることで高速な近似最近傍検索を実現する、そしてベクトルデータベースはANNインデックスにメタデータフィルタリング、永続化、CRUD操作を追加するということです。次は、最も人気のあるマネージドベクトルデータベースであるPineconeをセットアップし、最初の文書をインデックス化します。
よくある質問
「Vector Databaseが必要な理由」レッスンは無料ですか?
はい。「Vector Databaseが必要な理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Engineering Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Engineering Academyコースには全4レッスンが含まれています。
「Vector Databaseが必要な理由」で何を学びますか?
総当たりの類似度検索の限界、HNSWなどの近似最近傍アルゴリズムの仕組み、本番環境でvector databaseが解決する問題を理解します。 ブラウザで直接実行するハンズオンコードでAI Engineering Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Engineering Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Engineering Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Vector Databaseが必要な理由」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Engineering Academyレッスンでコードを書いて実行できますか?
はい。すべてのAI Engineering Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Vector Databaseが必要な理由
- Pineconeを始める
- pgvector:PostgreSQLでEmbeddingを扱う
- Vector Storeの選定とベンチマーク