Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

RAG と BM25 解説書 アウトライン

検索拡張生成(RAG: Retrieval-Augmented Generation)において、高精度な回答を生成するには的確なドキュメントを検索する仕組みが欠かせません。 本書では、意味の近さで探す「ベクトル検索」と、正確な単語の一致で探す伝統的な全文検索アルゴリズム「BM25」を組み合わせたハイブリッド検索について解説します。 さらに、Python と LangChain による実践的な実装方法、主要データストアの特徴と選び方、そして実プロジェクトでの大規模データ(235万件)における BM25 アーキテクチャとハイブリッド運用評価までを網羅します。

章構成

  • 1. RAGと情報検索の基本

    RAG の全体像と検索(Retrieval)の重要性、LLM 単体での限界(ハルシネーションや知識の古さ)を解消する仕組み、検索手法の分類を学びます。

  • 2. BM25アルゴリズムの仕組み

    BM25(Best Matching 25)の背景、TF-IDF との違い、計算式の意味(単語頻度の飽和、文書長によるペナルティ)、日本語における形態素解析の役割を理解します。

  • 3. ベクトル検索とBM25の比較

    密ベクトル検索(Dense Retrieval)と疎検索(Sparse Retrieval: BM25)のメリット・デメリットを対比し、なぜ両者を併用するハイブリッド検索が必要なのかを解説します。

  • 4. 主要データストアの比較と選定

    RAG で利用される主要なデータストア(Chroma、FAISS、Qdrant、Milvus、Pinecone、Elasticsearch / OpenSearch、PostgreSQL / pgvector)の特徴、メリット・デメリット、選定基準をまとめます。

  • FAISS 徹底解説:高速ベクトル検索とインデックス設計

    Meta が開発したベクトル検索ライブラリ FAISS の仕組み、近似最近傍探索(ANN)のアルゴリズム(IndexFlat、IVF、HNSW、PQ)、類似度尺度(L2 / 内積 / コサイン)、Python ネイティブおよび LangChain での実装、インデックス永続化(保存・復帰・メモリマップ)、BM25 とのハイブリッド統合、画像類似度検索(CLIP / マルチモーダル RAG)への応用、チューニング指針を解説します。

  • 5. LangChainによるBM25の実装

    Python と LangChain(langchain-community)を使用して、日本語テキストを適切にトークナイズした BM25Retriever を構築し、キーワード検索を実行する手順を学びます。

  • 6. ハイブリッド検索とEnsembleRetriever

    Ollama(bge-m3)によるベクトル検索と BM25 検索を統合する EnsembleRetriever の実装方法、Reciprocal Rank Fusion(RRF)のアルゴリズム、重みパラメータの調整法を解説します。

  • 7. リランキングとRAGパイプラインの構築

    検索結果の順位を再評価する Cross-Encoder(リランカー)の適用手法と、検索した文書を Ollama(gemma4:12b)に渡して回答を生成する完全なローカル RAG パイプラインを LCEL で構築します。

  • 8. 実践データソース別の索引システム構築

    IRIS バンドルデータ(構造化 Markdown)、LOTUS ノートデータ(差分更新)、大容量テキストデータ(行単位ストリーミング)、複数 PDF ドキュメントに対する具体的な前処理・チャンキング手順と、BM25 およびベクトルインデックスの永続化手法を学びます。

  • 実践チュートリアル:SQLite3 FTS5 + Chroma によるローカル BM25+RAG パイプライン構築

    SQLite3 FTS5(省メモリ・超高速なディスクベース BM25 検索)と Chroma(ベクトル検索)をハイブリッド統合し、Ollama(bge-m3)、FlashRank による高精度リランキング、そしてローカル LLM(gemma4:12b)による推論までを一気通貫で体験する実践チュートリアルです。さらに、日本語に特化した高性能モデル(ruri-v3-310m および ruri-v3-reranker-310m)への切り替え手法を解説します。

  • 9. 実践事例:英辞郎データ(235万件)の高速BM25検索アーキテクチャ

    約 160MB・235 万件の英辞郎辞書テキストを対象に、Pure Python のインメモリ保持限界を克服し、SQLite FTS5 と文字バイグラムによるゼロ外部依存・メモリ 40MB・応答 1 〜 3ms の高速 BM25 検索基盤を構築した実プロジェクトの設計とトラブルシューティングを解説します。

  • 10. 実践評価:大規模辞書におけるベクトル検索とBM25のハイブリッド運用設計

    235 万件規模の大規模データにおける全件ベクトル化のコストボトルネック(Embedding 推論時間、ストレージ・メモリ消費、入力補完レイテンシ)を評価し、BM25・局所ベクトル DB・ローカル LLM を適材適所で組み合わせる「3層ハイブリッド戦略」を解説します。

  • 11. まとめと発展的アプローチ

    全体の総括、運用時の注意点(チャンク分割、メタデータフィルタリング)、検索精度の評価手法(Ragas 等)についてまとめます。