大学時代に作った「Naive RAG」と、今学ぶ「Advanced RAG」の差分メモ
2025-12-05
azblob://2025/12/04/eyecatch/2025-12-04-university-rag-and-now-learn-rag-000.jpg

はじめに

この記事は、「ローカル環境でRAG(Retrieval-Augmented Generation)をやってみたい人」に向けた技術メモです。

大学時代、私はローカルLLMを使って「ドキュメントを検索して答えてもらうシステム」を作っていました。
「動けばOK」の精神で構築していましたが、最近あらためて調べ直すと、私が作っていたシンプルな構成は 「Naive RAG」、そこに工夫を加えたものは 「Advanced RAG」 と呼ばれていることを知りました。

本記事では、過去に実装した「Naive RAGの構成と課題」、そして今ならこうする「Advanced RAGの改善アイデア」をざっくり紹介します。

かつて作った「Naive RAG」の構成

私が実装していたのは、最もシンプルな構成です。

  • 分割:ドキュメントを一定の文字数(固定長)で機械的にチャンク分割
  • 保存:チャンクをベクトル化してDBへ保存
  • 検索:ユーザーの質問をベクトル化し、類似度の高いチャンクをTop-N件取得
  • 生成:取得したテキストをそのままプロンプトに埋め込み、LLMに回答させる

とりあえず動くものの、運用してみるといくつかの「惜しい点」が見えてきました。

実際に運用して感じた「3つの壁」

  • チャンク長のさじ加減が難しい:短すぎると文脈が切れ、長すぎるとノイズが増える
  • 型番・数値の「完全一致」に弱い :「503」を探したいのに、意味が近いだけの「500」や一般論がヒットしてしまう
  • 図表・レイアウト情報の欠落:標準的なテキスト抽出だけでは、図の中の文字や表構造が無視されてしまう(OCR等の前処理不足)

Advanced RAGで解決するテクニック集

最近のトレンド(Advanced RAG)を調べると、抱えていたモヤモヤを解消する具体的なアプローチが体系化されていました。

1. チャンク分割の工夫(Chunking Strategy)

ただの固定長ではなく、オーバーラップ(重複部分)を持たせたり、意味のまとまりを意識します。

  • オーバーラップ(Sliding Window):チャンクのつなぎ目で文脈が失われないよう、前後を少し重複させて分割する
  • セマンティックチャンク:文脈や意味の変わり目で区切る
  • Parent-Child(階層チャンク):検索は「細かいチャンク」で行ってヒット率を上げ、LLMにはその親にあたる「大きなチャンク」を渡して文脈を確保する手法

2. ハイブリッド検索(Hybrid Search)

「ベクトルの意味検索」と「キーワードの一致検索」を組み合わせます。

  • ベクトル検索:表記ゆれや意味的な検索に強い
  • キーワード検索(BM25等):型番、専門用語、固有名詞に強い
  • ランキング統合(RRF等):性質の違う2つの検索結果を、順位をもとに公平に混ぜ合わせる手法

両者を組み合わせることで、「用語」と「文脈」の両方をカバーします。

3. 再ランキング(Reranking)

検索精度を上げるための「二段構え」構成です。

  1. Retrieve: ベクトル検索などで広め・高速に候補を集める(例:Top 50)
  2. Rerank: 重い計算モデル(Cross-Encoder等)で精密に並び替え、本当に重要なTop 5に絞る

    ※精度と引き換えにレイテンシ(応答時間)が増えるため、Retrieve件数を調整して精度とレスポンス速度のバランスを取る

4. クエリの最適化(Query Transformation)

ユーザーの質問をそのまま使わず、検索しやすい形に整形します。

  • クエリリライト:曖昧な質問を具体的に書き換える
  • クエリ分解:複雑な質問を複数のサブ質問に分けて検索する

5. コンテキスト圧縮

LLMに渡す情報を最適化し、コスト削減と精度向上(ノイズ低減)を狙います。

  • フィルタリング:検索結果の中から、クエリと関連度が低い文章をピンポイントで除外する
  • 要約:長いドキュメントをLLMで要約し、情報量を保ったままサイズを小さくする

6. 評価(Evaluation)

「なんとなく」を脱却し、LLM-as-a-judge(LLMを審査員にする手法)で数値化します。

  • 主な指標
    • Faithfulness(忠実性):回答がドキュメントに嘘偽りなく基づいているか(ハルシネーションの検知)
    • Answer Relevance(関連性):質問に対して適切な回答になっているか
  • ツール:RAGASやTruLensなどのフレームワークを使用

これからローカルRAGをやる人へのロードマップ

いきなり全部盛り込むのは大変なので、以下のステップがおすすめです。

  1. Naive RAGの実装:まずは標準的なベクトル検索だけでパイプラインを通す
  2. チャンク戦略の変更:オーバーラップや区切り方を変えて変化を見る
  3. ハイブリッド検索の導入:キーワード検索を混ぜてみる
  4. Rerankerの追加:検索結果の並び順を改善する
  5. 評価:ツールを使って精度を数値化する

おわりに

調べてみて、「当時の課題に対して、こんなアプローチがあるんだな」と学びになりました。

これからローカルRAGを構築される方は、まずNaiveな構成で立ち上げつつ、課題に合わせて上記のAdvancedな手法を「つまみ食い」していくのが良さそうです。