RAG(Retrieval-Augmented Generation)におけるRetrieverの理論と技術の一環として、「**ベクトルデータベースの基本(FAISS, Weaviate, Milvus)」**は極めて重要な役割を果たします。以下では、それぞれのベクトルデータベースの概要とRAG文脈における活用を含めて詳しく解説します。
ベクトルデータベースとは何か
ベクトルデータベース(Vector Database)とは、密ベクトル(dense vector)として表現されたデータを格納し、それらの間の**類似性検索(Similarity Search)**を効率的に行うためのシステムです。
RAGでは、テキストをエンコーダ(例:DPR、Sentence-BERTなど)でベクトル化し、ユーザーのクエリと類似する文書ベクトルを高速に検索するためにベクトルデータベースが使われます。
主なベクトルデータベースと特徴
1. FAISS(Facebook AI Similarity Search)
-
開発元:Meta(旧Facebook)
-
言語サポート:C++、Python
-
特徴:
-
高速で大規模な**最近傍探索(k-NN)**が可能。
-
IndexFlatL2、IVF、HNSWなど複数のインデックス方式を提供。
-
GPU対応あり、バッチ処理に強い。
-
-
用途:
-
数百万〜数十億件規模のベクトル検索。
-
Pythonスクリプトとの統合性が高く、RAGの研究用途にも多用される。
-
2. Weaviate
-
開発元:Semi Technologies(オープンソース)
-
言語サポート:REST API、GraphQL、Pythonクライアント
-
特徴:
-
ベクトル検索だけでなく、スキーマ付きのオブジェクトストレージを提供。
-
内蔵のベクトル化機能(例:OpenAI、Cohereなどとの統合)あり。
-
メタデータ検索と組み合わせたハイブリッド検索が可能。
-
-
用途:
-
RAGにおいて「知識ベース付きの検索システム」構築に適している。
-
分散処理やクラウドネイティブな構成が容易。
-
3. Milvus
-
開発元:Zilliz(オープンソース)
-
言語サポート:Python SDK(pymilvus)、REST API
-
特徴:
-
スケーラブルな分散設計。
-
**近似最近傍探索(ANN)**を効率化するための多様なインデックス(IVF、HNSW、NSGなど)をサポート。
-
高性能で商用利用にも適する。
-
-
用途:
-
ベクトル検索におけるクラスタ運用や大規模運用に適しており、RAGシステムの実装基盤に向いている。
-
RAGとの関係と技術的位置づけ
RAGでは、Retriever部分が質問文をエンコードし、それに類似する知識(文書ベクトル)を検索する役割を担います。その際、次のような処理が行われます:
-
文書を事前にベクトル化(オフライン処理)
-
クエリ(質問文)をベクトル化(オンライン処理)
-
ベクトルデータベースを使って類似文書を検索
-
Generatorに検索結果を渡して回答を生成
このように、FAISS、Weaviate、Milvusなどのベクトルデータベースは、Retrieverの検索精度と応答速度を大きく左右する中核的な要素です。
選定ポイントの比較
| 特徴 | FAISS | Weaviate | Milvus |
|---|---|---|---|
| インデックス | 多彩(Flat, IVF, HNSW) | HNSWベース | IVF, HNSW, NSG など多数 |
| スケーラビリティ | 単体またはGPUスケーラブル | クラウド対応(分散処理あり) | フル分散構成対応 |
| メタデータ検索 | なし | あり(GraphQLベース) | 一部対応 |
| ベクトル化機能 | 外部(例:DPR等で生成) | 内蔵(OpenAIなどとの統合) | 外部(別途ベクトル化要) |
まとめ
ベクトルデータベースは、RAGのRetriever機構を支える高速・高精度な類似文書検索の基盤です。FAISSは研究・高速性重視の用途に、Weaviateは構造化データ統合型検索に、Milvusは大規模分散環境での本番運用に向いています。利用目的に応じて適切なベクトルデータベースを選定することが、RAGのパフォーマンスを最大化する鍵となります。
生成日:2025/06/07