AI・生成AI

RAG構成で社内文書検索の精度を上げる — Chunking・Re-ranking・Contextual Retrieval の実装知見

「RAGを作ったが精度が出ない」はなぜ起きるか

生成AIの社内導入で最も多い相談が 「RAG(検索拡張生成)を組んだが、期待した回答が返ってこない」 です。

原因のほとんどは LLM ではなく、検索(Retrieval)側の設計にあります。本記事では実務で効いた改善手法を整理します。

1. Chunking 戦略 — 分割の粒度が精度を決める

文書を固定長で機械的に切ると、意味の途中で分断されて検索精度が落ちます。

  • 固定サイズ + Overlap: シンプル。512〜1024トークン、20%オーバーラップが定番
  • 意味単位分割: 見出し・段落・箇条書き単位で切る。構造化文書に有効
  • 親子チャンク: 小さく検索し、回答時は親(大きい)チャンクを渡す

実務では「意味単位で切る + 親子構成」の組み合わせが安定します。

2. Re-ranking — 検索結果を並べ直す

ベクトル検索の top-k をそのまま渡すと、関連度の低いチャンクがノイズになります。

  • Cross-encoder で top-k を再スコアリング(Cohere Rerank / bge-reranker 等)
  • 検索で top-30 → re-rank で top-5 に絞る、が費用対効果良好

3. Query rewriting — 質問を検索向けに書き換える

ユーザーの質問はそのまま検索に向かないことが多い。

  • HyDE: 仮の回答を生成してから、その回答で検索する
  • Multi-query: 質問を複数の言い換えに展開して検索、結果をマージ

4. Contextual Retrieval — チャンクに文脈を追記する

Anthropic が提唱した手法で、各チャンクの前に「この文書全体における位置づけ」を1文追記してから embedding します。

これだけで検索失敗率が大きく下がるケースがあり、実装コストも低いので最初に試す価値があります。

5. Embedding の類似検索を速くする

  • pgvector: 中小規模ならこれで十分、DB統合が楽
  • HNSW / IVF-Flat インデックスで近似最近傍
  • 100万件を超えるなら Pinecone / Qdrant / Weaviate を検討

トレードオフは 精度 vs コスト vs レイテンシ。要件に応じて選定します。

モデル選定 — OpenAI / Anthropic / 自社ホスト

  • コスト最適化: 難易度で Sonnet ↔ Haiku を切り替え
  • 長文の再利用: Anthropic の Prompt Caching が強力
  • 機密要件: 自社ホスト(vLLM / Ollama)も選択肢

まとめ

RAG は「LLMを繋げば動く」ものではなく、検索側の設計・評価・改善のループが本体です。

IT.Skill では、PoC で終わらせず運用に乗せる RAG / 生成AI の導入を受託しています。
「何から始めるべきか」の顧問相談から、お問い合わせ ください。