Veni AI
データベース技術

ベクターデータベースと埋め込み検索システム

ベクターデータベースの技術アーキテクチャ、埋め込み検索アルゴリズム、HNSW、IVFインデックス、エンタープライズ向けセマンティック検索アプリケーションに関する包括的なガイド。

Veni AI Technical Team12 Ocak 20254 dk okuma
ベクターデータベースと埋め込み検索システム

ベクターデータベースと埋め込み検索システム

ベクターデータベースは、高次元ベクトルの保存と類似検索に最適化された特殊なデータベースです。特に RAG(Retrieval-Augmented Generation)システムにおいて、現代の AI アプリケーションの基盤となるコンポーネントです。

ベクターデータベースとは?

従来のデータベースが完全一致検索に最適化されている一方で、ベクターデータベースは Approximate Nearest Neighbor (ANN) 検索を中心に設計されています。

基本概念

Embedding: データ(テキスト、画像、音声)の数値ベクトル表現。

"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)

Similarity Search: クエリベクトルに最も近いベクトルを検索。

query_vector → Top-K most similar vectors

距離指標:

  • Cosine Similarity: 方向の類似性。
  • Euclidean Distance (L2): 幾何学的距離。
  • Dot Product: ベクトルの内積。

類似度指標:詳細分析

Cosine Similarity

cos(A, B) = (A · B) / (||A|| × ||B||)

値の範囲: [-1, 1]

  • 1: 同じ方向(完全一致)
  • 0: 直交(無関係)
  • -1: 反対方向

利用例: テキスト類似度、セマンティック検索

Euclidean Distance (L2)

d(A, B) = √(Σ(Aᵢ - Bᵢ)²)

値の範囲: [0, ∞) 利用例: 画像類似度、クラスタリング

Dot Product

A · B = Σ(Aᵢ × Bᵢ)

利用例: 正規化された埋め込みでは cosine と同等

インデックスアルゴリズム

1. Brute Force (Flat Index)

データベース内のすべてのベクトルとクエリを比較。

計算量: O(n × d)

  • n: ベクトル数
  • d: 次元数

利点: 100% の精度
欠点: 大規模データセットでは非常に遅い

2. IVF (Inverted File Index)

ベクトルをクラスタに分割して検索空間を縮小。

アルゴリズム:

  1. K-means でセントロイドを作成
  2. 各ベクトルを最も近いセントロイドに割り当て
  3. 検索時は最も近い nprobe 個のクラスタのみ検索
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.

3. HNSW (Hierarchical Navigable Small World)

グラフベース手法で、現時点で最も一般的なアルゴリズム。

構造:

1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)

パラメータ:

  • M: 各ノードの最大接続数
  • ef_construction: インデックス作成時の候補数
  • ef_search: 検索時の候補数

利点:

  • 非常に高速な検索: O(log n)
  • 高いリコール率
  • 動的な挿入・削除をサポート

4. Product Quantization (PQ)

ベクトルを圧縮してメモリ使用量を削減。

方法:

  1. ベクトルを M 個のサブベクトルに分割
  2. 各サブベクトルを K 個のセントロイドにマップ
  3. 元の成分ではなくセントロイド ID を保存
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x

5. Scalar Quantization (SQ)

Float32 表現を Int8 に変換。

1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## 人気のベクターデータベース比較 5 6### Pinecone 7 8**特徴:** 9- フルマネージドクラウドサービス。 10- 自動スケーリング。 11- メタデータフィルタリング。 12- ネームスペース分離。 13 14**使用例:** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})

Weaviate

特徴:

  • オープンソース。
  • 組み込みのベクトル化機能。
  • GraphQL API をサポート。
  • ハイブリッド検索(ベクター + キーワード)に対応。

Qdrant

特徴:

  • Rust 製で高パフォーマンス。
  • 豊富なフィルタリング機能。
  • ペイロードインデックス。
  • 分散デプロイメント対応。

Milvus

特徴:

  • GPU アクセラレーション。
  • マルチベクトル検索。
  • タイムトラベル(バージョニング)。
  • Kubernetes ネイティブアーキテクチャ。

ChromaDB

特徴:

  • 開発者に優しく、セットアップが容易。
  • インメモリ + 永続モード。
  • Python-first アプローチ。
  • プロトタイピングに最適。

比較表

機能PineconeWeaviateQdrantMilvus
ホスティングCloudBothBothBoth
スケーラビリティAutoManualManualAuto
ハイブリッド検索
GPU サポート--
価格Per vectorFree/PaidFree/PaidFree/Paid

フィルタリングとメタデータ

プレフィルタリング vs ポストフィルタリング

プレフィルタリング:

  1. まずメタデータフィルターを適用。
  2. フィルタ済みセット内でベクトル検索を実行。
  • 利点: 高速。
  • 欠点: リコール低下の可能性。

ポストフィルタリング:

  1. ベクトル検索で Top-K × 係数 の結果を取得。
  2. これらの結果にメタデータフィルターを適用。
  3. 最終的な Top-K を返す。
  • 利点: 高リコール。
  • 欠点: パフォーマンス低下。

ハイブリッド検索

キーワード(BM25)+ ベクトル検索の組み合わせ:

final_score = α × vector_score + (1-α) × keyword_score

パフォーマンス最適化

インデックスパラメータ

最適な HNSW 設定:

1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100

バッチ処理

1# Bad: 単一挿入 2for vec in vectors: 3 index.upsert([vec]) 4 5# Good: バッチ挿入 6index.upsert(vectors, batch_size=100)

コネクションプーリング

1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)

エンタープライズアーキテクチャ例

1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 45┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 1213┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘

モニタリングと可観測性

主要メトリクス

  • Query Latency (p50, p95, p99)
  • Recall Rate
  • QPS (Queries Per Second)
  • Index Size
  • Memory Usage

アラートしきい値

1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## 結論 10 11ベクターデータベースは、最新のAIアプリケーションに不可欠なコンポーネントです。適切なデータベースの選択、インデックス戦略、そして最適化によって、高性能なセマンティック検索システムを構築できます。 12 13Veni AIでは、エンタープライズ向けのベクター検索ソリューションを提供しています。ご要件についてはお気軽にお問い合わせください。

İlgili Makaleler