生成AIにおいて重要な役割を担いながら、理解が難しいとされるベクトルデータベースの基礎理論から実践的なアプリケーション構築までを体系的に学べるハンズオンガイドです。ベクトル埋め込みの基本理論から、PythonやSQLite/PostgreSQLを活用した実装手法、さらにLLMと連携したRAGアプリケーションの構築までを実践的に解説します。非構造化データを活用したAIアプリケーション開発に取り組むエンジニアにとって有用な一冊です。
ベクトルデータベース
―実践で学ぶセマンティック検索の基礎
Nitin Borwankar 著、佐藤 直生 訳
- TOPICS
- Database
- 発行年月日
- 2026年09月28日
- PRINT LENGTH
- 304
- ISBN
- 978-4-8144-0179-6
- 原書
- Vector Databases
- FORMAT
目次
まえがき
1章 ベクトルデータベース入門
1.1 なぜベクトルデータベースが必要なのか
1.1.1 新しいデータ型:ベクトル
1.1.2 類似度検索
1.1.3 ベクトル型は何が違うのか
1.1.4 ベクトルデータベースをどこで使うか
1.2 SQLとベクトルデータベース
1.2.1 ビジネス数学の基礎:会計における算術
1.2.2 リレーショナルデータベース管理システムにおけるベクトル表現
1.2.3 ベクトル固有の機能が必要となる理由
1.3 NoSQLとベクトルデータベース
1.3.1 NoSQLデータベースとベクトルストレージ
1.3.2 NoSQLデータベースにおけるベクトル拡張機能の限界
1.3.3 ベクトル拡張機能を備えたNoSQLを選ぶべきタイミング
1.4 ハイブリッドアプローチ:構造化データ、ベクトルデータを組み合わせる
1.4.1 ベクトルデータ、メタデータの両方が必要となる理由
1.4.2 純粋なベクトルストレージの限界
1.4.3 ハイブリッドデータベースアーキテクチャ
1.4.4 ハイブリッドクエリの例
1.4.5 ハイブリッドアプローチの利点
1.5 まとめ
2章 埋め込み
2.1 ベクトル埋め込みを理解する:なぜそれが必要なのか
2.2 Word2Vec:すべてを変えたブレイクスルー
2.3 Doc2Vec:単語からドキュメントへ
2.4 埋め込みから最新の言語モデルへ:トランスフォーマーへの接続
2.4.1 エンコーダーのみのトランスフォーマー(BERT とそのバリアント)
2.4.2 デコーダーのみのトランスフォーマー(GPTファミリー)
2.4.3 エンコーダー/デコーダー型トランスフォーマー(T5、BART)
2.5 埋め込みモデル:特化したベクトル生成器
2.5.1 従来のモデルとの違い
2.5.2 現代のLLMアプリケーションにおける役割
2.5.3 実践的なアプリケーションとユースケース
2.5.4 単純なRAGパイプライン
2.5.5 Sentence Transformersライブラリ:テキスト埋め込みの万能ツール
2.5.6 Sentence Transformersを使うためのベストプラクティス:詳細ガイド
2.6 埋め込み層:ゼロショット学習へのゲートウェイ
2.6.1 トランスフォーマーにおける埋め込みの構造
2.6.2 ゼロショット学習とのつながり
2.6.3 ゼロショット学習を可能にする主要な特性
2.6.4 制約と考慮事項
2.6.5 最新動向とトレンド
2.7 Word2Vecによるベクトル演算:実践ガイド
2.7.1 ステップ1:セットアップとインストール
2.7.2 ステップ2:事前学習済みWord2Vecモデルのロード
2.7.3 ステップ3:ベクトル演算関数の実装
2.7.4 ステップ4:古典的なking-queen類推
2.7.5 ステップ5:さらに興味深い類推
2.7.6 ステップ6:対話型の探索ツール
2.7.7 ベクトル演算についてのまとめ
2.8 まとめ
3章 FAISSによる類似度検索
3.1 基盤
3.1.1 ベクトル表現
3.1.2 距離尺度
3.1.3 選択の際のヒューリスティック(経験則)
3.2 FAISSのインデックス
3.2.1 フラットインデックス(ブルートフォース)
3.2.2 IVF(倒立ファイル)ベースのインデックス
3.2.3 LSHベースのインデックス
3.2.4 HNSWベースのインデックス
3.2.5 他の特化型インデックス
3.2.6 複合インデックスと変換型インデックス
3.2.7 適切なインデックスの選択
3.3 量子化
3.3.1 SQ(スカラー量子化)
3.3.2 PQ(積量子化)
3.4 ANNの問題
3.4.1 問題
3.4.2 計算コストの回避
3.4.3 FAISSにおける主要なANNの手法
3.4.4 FAISSにおけるインデックスの選択
3.4.5 コード例
3.5 HNSWインデックス
3.5.1 HNSWとは何か
3.5.2 HNSWの仕組み
3.5.3 主要パラメーターの解説
3.5.4 実践例:類似度検索システムの構築
3.5.5 パフォーマンス特性
3.5.6 ベストプラクティス
3.6 FAISSのアーキテクチャとコンポーネント
3.6.1 基盤
3.6.2 中核となる概念
3.6.3 主なコンポーネント
3.6.4 一般的なワークフロー
3.6.5 具体例
3.6.6 重要なポイント
3.6.7 さらなる探究
3.7 まとめ
4章 SQLite3によるセマンティック検索
4.1 SQLiteのベクトル類似度検索拡張機能
4.1.1 中核機能
4.1.2 アーキテクチャの概要
4.1.3 制限事項
4.2 開発環境のセットアップ
4.2.1 依存関係のインストール
4.2.2 インストールの確認
4.2.3 運用プラグマ
4.3 データベーススキーマの設計
4.3.1 スキーマ要件
4.3.2 テーブル定義
4.3.3 スキーマ設計における判断事項
4.4 Python Reddit API Wrapperを使用したRedditへの接続
4.4.1 Reddit API認証情報の作成
4.4.2 PRAWクライアントの実装
4.4.3 使用例
4.5 コンテンツの抽出と前処理
4.5.1 テキストクリーニングパイプライン
4.5.2 品質フィルタリング
4.6 埋め込みの生成と保存
4.6.1 埋め込みジェネレーター
4.6.2 データベースへの保存
4.6.3 バッチ処理パイプライン
4.7 ベクトルインデックスの構築
4.7.1 VSSインデックス
4.7.2 インデックス管理
4.8 セマンティック検索の実装
4.8.1 検索結果コンテナー
4.8.2 検索エンジン
4.9 すべてを統合する
4.9.1 ワークフローの例
4.9.2 出力例
4.10 機能拡張:増分インデックス化
4.11 まとめ
5章 PostgreSQL pgvectorを用いたarXiv論文検索システムの構築
5.1 科学文献検索の課題
5.1.1 ArXivが理想的なデータソースである理由
5.1.2 実世界でのユースケース
5.1.3 技術スタックの選定理由
5.2 アーキテクチャの概要
5.2.1 システムコンポーネント
5.2.2 データフロー
5.2.3 設計思想
5.3 環境のセットアップと依存関係
5.3.1 PostgreSQLとpgvectorのインストール
5.3.2 Python環境の設定
5.3.3 ディレクトリ構造と設定
5.3.4 検証とテスト
5.4 科学論文向けのデータベース設計
5.4.1 スキーマ設計の原則
5.4.2 主要なテーブルの構造
5.4.3 ベクトルストレージ戦略
5.4.4 インデックス化戦略
5.5 ArXivとの統合とPDF管理
5.5.1 ArXiv APIクライアントの実装
5.5.2 PDFダウンロードパイプライン
5.5.3 バッチ処理システム
5.6 PDFのテキスト抽出と処理
5.6.1 PDF抽出の課題
5.6.2 テキストの高度なチャンク化
5.7 ベクトルの生成と保存
5.7.1 埋め込みモデルの戦略
5.7.2 バッチ処理パイプライン
5.8 類似度検索の実装
5.9 対話型アプリケーションとUI
5.10 ローカルデプロイのためのDockerパッケージ
5.10.1 コンテナーのアーキテクチャ
5.10.2 Docker Composeの設定
5.10.3 データベース初期化スクリプト
5.10.4 開発ワークフロー
5.10.5 クラウド対応設計
5.11 基本的なパフォーマンスチューニング
5.11.1 インデックスの設定
5.11.2 クエリのパフォーマンス
5.11.3 リソース管理
5.12 次のステップ
5.12.1 現在の制限事項
5.12.2 機能拡張のアイデア
5.13 取り組んだこと
5.13.1 システムの成果
5.13.2 習得した技術スキル
5.13.3 実用的な研究ツール
5.13.4 高度なシステムのための基盤
5.13.5 将来の可能性
5.14 まとめ
6章 SQLite VSSとOllamaを用いたRAGシステムの構築
6.1 システムアーキテクチャの概要
6.2 ベクトル対応のデータベース基盤
6.2.1 ベクトル対応データベースのセットアップ
6.2.2 RAGのためのスキーマ設計
6.2.3 検索インデックスの作成
6.3 テキスト処理とベクトル生成
6.3.1 埋め込みモデルの管理
6.3.2 テキストの高度なチャンク化
6.3.3 埋め込みを用いたコンテンツの保存
6.4 ハイブリッド検索の実装
6.4.1 ハイブリッド検索アルゴリズム
6.4.2 セマンティック検索コンポーネント
6.4.3 キーワード検索コンポーネント
6.4.4 スコアの融合とランキング
6.5 OllamaとのLLM統合
6.5.1 Ollama APIクライアント
6.5.2 ヘルスチェック関数
6.6 RAGパイプライン
6.6.1 コンテキストの整形
6.6.2 質問応答パイプライン
6.7 デモとテスト
6.7.1 サンプルデータのロード
6.7.2 主なデモ機能
6.7.3 対話型Q&Aインターフェイス
6.7.4 クイックテストユーティリティ
6.8 次のステップ:システムの拡張
6.8.1 不足しているRedditデータ機能
6.8.2 パフォーマンスの最適化
6.8.3 本番環境での考慮事項
6.8.4 高度なRAGパターン
6.9 まとめ
7章 PostgreSQLとpgvectorを用いた科学分野向けRAGシステムの構築
7.1 システムの目標と機能
7.2 アーキテクチャの概要
7.3 pgvector を用いたデータベース基盤
7.3.1 データベースの構成とセットアップ
7.3.2 科学論文のためのスキーマ設計
7.3.3 高パフォーマンスのベクトルインデックス
7.4 埋め込み生成の戦略
7.5 ArXiv統合とPDF処理
7.5.1 ArXiv APIによる論文の発見
7.5.2 高度なPDFテキスト抽出
7.6 テキストの高度なチャンク化
7.7 埋め込みを含む保存パイプライン
7.8 多層セマンティック検索
7.8.1 アブストラクトレベルの検索
7.8.2 セクションレベルの検索
7.9 RAGパイプライン:詳細解説
7.9.1 OllamaによるローカルLLM統合
7.9.2 ヘルスチェックとモデル検出
7.9.3 高度なコンテキスト取得
7.9.4 科学向けのプロンプトエンジニアリング
7.9.5 完全なRAG実行パイプライン
7.10 デモと対話型インターフェイス
7.10.1 メインデモの流れ
7.10.2 検索のデモ
7.10.3 RAGのデモ
7.10.4 対話型検索インターフェイス
7.10.5 モード選択付きのエントリポイント
7.10.6 HNSWに関する技術的補足
7.10.7 結果の評価方法
7.11 次のステップ:科学向けRAGシステムの拡張
7.12 まとめ
8章 完全な会話検索/RAGシステムの構築
8.1 システムの目標と機能
8.2 システムアーキテクチャの概要
8.3 構築するもの
8.4 会話の保存のためのデータベース基盤
8.4.1 会話スキーマの設計
8.4.2 最適なパフォーマンスのための3テーブルアーキテクチャ
8.4.3 高パフォーマンスのベクトルインデックス化
8.5 会話データのインポートとデータ処理のパイプライン
8.5.1 エラー処理を備えた堅牢なJSONインポート
8.5.2 原子的トランザクション処理
8.5.3 タイムスタンプの処理とデータ検証
8.5.4 エラー復旧とログ記録
8.6 効率的な埋め込みの生成とバッチ処理
8.6.1 モデル管理のためのシングルトンパターン
8.6.2 増分処理戦略
8.6.3 最適なパフォーマンスのためのバッチ処理
8.6.4 競合処理を伴うデータベースへの挿入
8.7 会話の理解を伴うコンテキスト検索
8.7.1 セマンティック類似度検索
8.7.2 豊富なコンテキストのための複数テーブルの結合
8.7.3 結果の整形と構造
8.7.4 会話コンテキストの取得
8.7.5 コンテキストウィンドウの計算
8.8 会話履歴のためのRAG統合
8.8.1 構造化されたコンテキスト管理
8.8.2 OllamaとのローカルLLM統合
8.8.3 正常性監視とモデル検出
8.8.4 コンテキストの取得と組み立て
8.8.5 会話型プロンプトエンジニアリング
8.8.6 パフォーマンス監視機能を備えた完全なRAGパイプライン
8.9 FastAPIによる完全なウェブAPI
8.9.1 FastAPIアプリケーションの構造
8.9.2 検証を備えたリクエストモデル
8.9.3 検索エンドポイントの実装
8.9.4 RAG質問応答エンドポイント
8.9.5 システム統計と監視
8.9.6 サーバーの起動と設定
8.10 デモとサンプルデータ
8.10.1 現実的なサンプルデータの生成
8.10.2 複数トピックのサンプルの網羅性
8.10.3 サンプルデータ処理パイプライン
8.10.4 包括的なシステムデモ
8.10.5 段階的な機能デモ
8.10.6 条件付き実行を伴うRAGのデモ
8.10.7 本番環境向けインポート機能
8.10.8 アプリケーションのエントリポイント
8.11 まとめ:完全な個人向けナレッジシステム
付録 ベクトルクエリ言語
A.1 中核となる概念
A.1.1 データモデル
A.1.2 基本的な構文構造
A.2 ベクトル操作
A.2.1 類似度検索
A.2.2 ハイブリッド検索
A.2.3 範囲検索
A.2.4 バッチ操作
A.3 ベクトル関数と集約
A.3.1 ベクトル関数
A.3.2 ベクトル集約
索引