Vector Database

ベクトルデータベース

Vector Database を分かりやすく

Vector Database(ベクトルデータベース)は、高次元のベクトルを効率的に保存し、類似度検索を行うためのデータベースです。

例え話をしましょう。図書館で本を探すとします。

従来の検索(キーワードベース)

  • あなた「『Python』という言葉が含まれる本を探して」
  • 図書館「タイトルや目次に『Python』が含まれる本が5冊あります」
  • 問題:「プログラミング」や「コーディング」など、関連する本は見つからない

Vector Database の検索(意味ベース)

  • あなた「Pythonに関する本を探して」
  • 図書館「Pythonの本だけでなく、プログラミング、コーディング、 ソフトウェア開発など、意味が近い本も含めて20冊提案します」
  • メリット:キーワードが一致しなくても、意味が近ければ見つかる

Vector Database は、「意味の近さ」で検索できるデータベースです。

Vector Database の仕組み

Vector Database は、テキストや画像を数値のベクトルに変換して保存します。

ベクトル化(Embedding)

テキストをベクトルに変換:

「猫」 → [0.2, 0.8, 0.1, 0.5, ...] (1536次元)
「犬」 → [0.3, 0.7, 0.2, 0.4, ...] (1536次元)
「車」 → [0.9, 0.1, 0.8, 0.2, ...] (1536次元)

ベクトルの次元数は、モデルによって異なる
- OpenAI text-embedding-ada-002: 1536次元
- Sentence Transformers: 384〜768次元

類似度の計算

ベクトル間の距離や類似度を計算します。

コサイン類似度:
「猫」と「犬」の類似度: 0.85(高い)
「猫」と「車」の類似度: 0.15(低い)

意味が近いほど、類似度が高い

効率的な検索

数百万〜数億のベクトルから、類似したベクトルを高速に検索します。

従来の方法(全件スキャン):
100万件のベクトルを順番にチェック
→ 遅い(数秒〜数分)

Vector Database(近似最近傍探索):
インデックスを使って効率的に検索
→ 速い(数ミリ秒〜数十ミリ秒)

主要な Vector Database

様々な Vector Database が存在します。

Pinecone

特徴:
- マネージドサービス
- スケーラビリティが高い
- 簡単に始められる

料金:
- 無料プラン: 100万ベクトルまで
- 有料プラン: 使用量に応じて課金

用途:
- 本番環境での利用
- 大規模なアプリケーション

Chroma

特徴:
- オープンソース
- Python で簡単に使える
- ローカルでも動作

料金:
- 無料(オープンソース)

用途:
- プロトタイプ開発
- 小〜中規模のアプリケーション

Weaviate

特徴:
- オープンソース
- GraphQL API
- セルフホストとクラウドの両対応

料金:
- セルフホスト: 無料
- クラウド: 使用量に応じて課金

用途:
- エンタープライズ向け
- 複雑なクエリが必要な場合

FAISS

特徴:
- Facebook AI Research 開発
- 非常に高速
- ライブラリ(DBではない)

料金:
- 無料(オープンソース)

用途:
- 研究開発
- カスタム実装

Qdrant

特徴:
- Rust 製で高性能
- フィルタリング機能が豊富
- オープンソース

料金:
- セルフホスト: 無料
- クラウド: 使用量に応じて課金

用途:
- 高性能が求められる場合
- 複雑なフィルタリング

Vector Database の用途

Vector Database は、様々な AI アプリケーションで活用されています。

RAG(Retrieval Augmented Generation)

関連情報を検索して、AI の応答を強化します。

流れ:
1. ユーザーの質問をベクトル化
2. Vector Database で類似文書を検索
3. 検索結果を AI に渡す
4. AI が文脈を理解して応答

メリット:
- 最新情報を参照できる
- 専門知識を活用できる
- ハルシネーション(幻覚)を削減

Semantic Search(意味検索)

キーワードではなく、意味で検索します。

例:
ユーザーの検索: 「在宅勤務のメリット」

従来の検索:
「在宅勤務」「メリット」というキーワードを含む文書

Semantic Search:
「リモートワーク」「テレワーク」「通勤不要」など、
意味が近い文書も検索

推薦システム

ユーザーの好みに基づいて、類似アイテムを推薦します。

例: 音楽の推薦
1. ユーザーが好きな曲のベクトルを取得
2. 類似したベクトルの曲を検索
3. 推薦リストを生成

メリット:
- 明示的なタグやカテゴリが不要
- より細かいニュアンスで推薦

画像検索

テキストや画像から、類似画像を検索します。

例1: テキストから画像検索
「猫の写真」 → 猫の画像を検索

例2: 画像から類似画像検索
猫の画像をアップロード → 類似した猫の画像を検索

異常検知

通常のパターンと異なるデータを検出します。

例: セキュリティログの監視
1. 正常なログのベクトルを保存
2. 新しいログのベクトルを計算
3. 既存のベクトルと類似度を比較
4. 類似度が低い場合、異常として警告

Vector Database の設計パターン

効果的に Vector Database を使うための設計パターンです。

パターン 1: シンプルな RAG

基本的な RAG の実装

1. データの準備
   - ドキュメントを小さなチャンクに分割
   - 各チャンクをベクトル化
   - Vector Database に保存

2. 検索
   - ユーザーの質問をベクトル化
   - 類似チャンクを検索(Top 3〜5)
   - AI に渡して応答生成

パターン 2: メタデータフィルタリング

メタデータで絞り込んでから検索

例: ドキュメント管理システム
1. ベクトル検索
2. メタデータでフィルタリング
   - 作成日: 2024年以降
   - 部署: 営業部
   - 公開ステータス: 公開

結果: 条件に合う文書のみを検索

パターン 3: ハイブリッド検索

ベクトル検索とキーワード検索を組み合わせ

1. ベクトル検索: 意味の近さで検索
2. キーワード検索: 特定の用語を含む文書
3. 両方の結果をマージ

メリット:
- 精度の向上
- 柔軟な検索

パターン 4: 階層的検索

粗い検索 → 詳細な検索

1. ドキュメント全体のベクトルで検索
2. 関連ドキュメントを特定
3. そのドキュメント内のチャンクを検索

メリット:
- 効率的
- より関連性の高い結果

Vector Database のベストプラクティス

Vector Database を効果的に使うためのベストプラクティスです。

1. 適切なチャンクサイズ

小さすぎるチャンク(50〜100文字):
- 文脈が不足
- 検索精度が低下

大きすぎるチャンク(2000文字以上):
- 関連性の低い情報も含まれる
- 検索精度が低下

推奨:
- 200〜500文字程度
- 段落や意味の区切りで分割

2. オーバーラップ

チャンク間でテキストを重複させる

例:
チャンク1: [文1, 文2, 文3]
チャンク2: [文3, 文4, 文5](文3が重複)

メリット:
- 文脈の連続性を保持
- 検索精度の向上

3. メタデータの活用

ベクトルと一緒にメタデータを保存

例:
- ドキュメントID
- タイトル
- 作成日
- カテゴリ
- タグ

メリット:
- フィルタリングが可能
- 検索結果の管理が容易

4. 定期的な更新

データを最新に保つ

プロセス:
1. 新しいドキュメントを追加
2. 古いドキュメントを削除
3. 更新されたドキュメントを再ベクトル化

重要性:
- 情報の鮮度を保つ
- 検索精度を維持

Vector Database の課題

Vector Database にもいくつかの課題があります。

課題 1: コスト

ベクトル化と保存にコストがかかります。

ベクトル化のコスト:
- OpenAI Embeddings: $0.10 / 1M トークン
- 100万ドキュメント(平均500トークン): 約 $50

保存コスト:
- Pinecone: $0.096 / 1M ベクトル / 月
- 100万ベクトル: 約 $96 / 月

合計: 初期 $50 + $96 / 月

課題 2: レイテンシ

検索には時間がかかる場合があります。

一般的なレイテンシ:
- 小規模(〜10万ベクトル): 10〜50ms
- 中規模(〜100万ベクトル): 50〜100ms
- 大規模(〜1000万ベクトル): 100〜300ms

リアルタイムアプリケーションでは考慮が必要

課題 3: 精度とスピードのトレードオフ

高精度検索:
- すべてのベクトルを比較
- 遅いが正確

高速検索:
- 近似アルゴリズム(ANN)
- 速いが、わずかに精度が落ちる

バランスを取る必要がある

まとめ

Vector Database は、高次元ベクトルを効率的に保存・検索するためのデータベースです。RAG や semantic search など、AI アプリケーションに不可欠な技術です。

重要なポイント

  1. 意味検索 - キーワードではなく、意味の近さで検索
  2. 高速 - 数百万のベクトルから数ミリ秒で検索
  3. RAG - AI の応答を強化する重要な要素
  4. 多様な用途 - 検索、推薦、異常検知など
  5. 選択肢 - Pinecone、Chroma、Weaviate など多数

Vector Database が最適な場面

  • RAG(Retrieval Augmented Generation)
  • Semantic Search(意味検索)
  • 推薦システム
  • 画像検索
  • 異常検知

Vector Database の選び方

  • 小規模・プロトタイプ: Chroma、FAISS
  • 中規模: Qdrant、Weaviate
  • 大規模・本番環境: Pinecone

Vector Database は、AI アプリケーションの可能性を大きく広げます。適切に活用することで、より賢く、より有用な AI システムを構築できます。