RAGの内部:チャンク化・検索・再ランクの設計
RAGの回答品質は検索の質でほぼ決まる。チャンク化・密疎ハイブリッド・再ランクの設計判断を原理から押さえれば、的外れな引用や幻覚の主因を体系的に潰せる。
- 1.RAGは検索が上流。チャンク化(サイズ・オーバーラップ・境界)で取得粒度が決まり、密検索(埋め込み)と疎検索(BM25)はヒットの性質が補完的なのでハイブリッドが基本。
- 2.1段目の検索は再現率(recall)を稼ぐ広い網、2段目のクロスエンコーダ再ランクで適合率(precision)を上げる二段構成が定石。融合はRRFが頑健。
- 3.失敗モードはチャンク切断・埋め込みドメイン不一致・top-kノイズ・lost-in-the-middleなど。Recall@k/nDCGとアブレーションで原因を切り分ける。
RAGをパイプラインとして分解する
RAG(検索拡張生成)は「文書を埋め込みにして近傍検索する」と一言で語られがちですが、実態は インデックス時 と 検索時 の二つの工程からなるパイプラインです。インデックス時に「チャンク化 → 埋め込み → ベクトル/転置インデックス構築」を行い、検索時に「クエリ変換 → 一次検索 → 再ランク → 文脈注入 → 生成」を行います。
重要な原則は、生成は検索の下流でしかないことです。LLMが幻覚を起こす・的外れに答える事例の多くは、生成ではなく検索段階で正解チャンクを取り逃している(または無関係チャンクを混入させている)ことに起因します。だから設計の比重は検索側に置くべきで、各段の役割を分けて考えます。
一次検索は 再現率(recall) を最大化する役割、再ランクは 適合率(precision) を最大化する役割です。一次検索で取り逃したチャンクは下流で二度と復活しないため、まず recall を確保し、ノイズは後段で削るのが鉄則です。
チャンク化:取得の最小単位を決める
チャンク化は「検索でヒットさせる単位」と「LLMに渡す単位」を同時に決める設計判断です。埋め込みは1チャンク=1ベクトルに圧縮するため、チャンクが長すぎると複数の話題が1ベクトルに混ざって意味がぼやけ(意味の希釈)、短すぎると文脈が切れて単独では意味をなさなくなります。
| 戦略 | 区切り方 | 強み | 弱み |
|---|---|---|---|
| 固定長 | 文字/トークン数で機械的に分割 | 実装が単純・粒度が均一 | 文や見出しの途中で切れやすい |
| 再帰的分割 | 段落→文→語の順で境界優先に分割 | 意味境界を壊しにくい | 長さが不均一になる |
| 構造ベース | 見出し・コードブロック等の文書構造で分割 | 論理単位を保てる | 整った構造の文書が前提 |
| セマンティック | 文間の埋め込み類似度が落ちる点で分割 | 話題境界に沿う | 計算コストとパラメータ調整が要る |
実務の定石は 再帰的分割 + オーバーラップ です。オーバーラップ(隣接チャンクでチャンク長の概ね1〜2割を共有)は、答えが境界をまたぐときに片側のチャンクに必ず含まれるようにする保険です。サイズは「埋め込みモデルの最大入力長」「想定質問が必要とする文脈量」「top-k×チャンク長がコンテキスト予算に収まるか」の三点から逆算します。粒度を上げたい場合は、小さく検索して大きく渡す(small-to-big、親子チャンク)も有効で、検索は短文ベクトルで精密に当て、注入時は親段落を渡して文脈を補います。
密検索と疎検索:補完しあう二つの当て方
一次検索には性質の異なる二系統があります。疎検索(sparse) は語の一致を見る方式で、代表が BM25 です。BM25は語の出現頻度(TF)を飽和させつつ、希少語ほど重い重み(IDF)を与え、文書長で正規化したスコアを返します。これは「型番・関数名・固有名詞・略語」のような 完全一致が効く語 に滅法強く、未知語でも文字が一致すれば当たります。
密検索(dense) は埋め込みで意味の近さを測る方式です(基盤はベクトルデータベース)。言い換え・同義・多言語にまたがる 意味的な近さ を拾える一方、学習データにない固有名詞や厳密な記号一致は苦手で、埋め込みのドメインがずれると的外れになります。
| 観点 | 疎検索(BM25) | 密検索(埋め込み) |
|---|---|---|
| 一致の基準 | 語の表層一致+希少度重み | ベクトルの近さ(意味) |
| 得意 | 型番・固有名詞・略語・完全一致 | 言い換え・同義・多言語 |
| 苦手 | 語彙不一致(同義語を取り逃す) | 未知の固有名詞・厳密な記号一致 |
| 索引 | 転置インデックス | 近似最近傍(ANN, HNSW等) |
両者は失敗の仕方が異なるため、ハイブリッド が基本形になります。問題は二系統のスコアがスケールも分布も違う点で、単純な加算では片方が支配します。これを避ける頑健な融合が RRF(Reciprocal Rank Fusion) です。スコアではなく順位だけを使い、各リストでの順位 r に対し 1/(k+r)(k は60前後の定数)を足し合わせます。スケール非依存で外れ値に強く、チューニング不要に近いのが利点です。
# RRFによる融合(疎・密の2リストを統合)
score(d) = sum_over_lists 1 / (k + rank_list(d)) # k ≈ 60
# 各リストで上位の文書ほど 1/(k+rank) が大きく、両方に出る文書が上位化
再ランク:クロスエンコーダで適合率を上げる
一次検索の埋め込みは バイエンコーダ です。クエリと文書を別々にベクトル化し内積を取るため、事前計算が効いて高速ですが、両者の相互作用を見られず精度に上限があります。そこで一次検索で広めに(例: top-50〜100)取り、上位だけを クロスエンコーダ で精査するのが二段構成です。
クロスエンコーダはクエリと文書を 連結して同時にTransformerへ入力 し、トークン間アテンションで両者を突き合わせた適合度スコアを直接出します。相互作用を全層で見るため精度は高い一方、ペアごとに本体を1回走らせるので、全文書には適用できず 上位の再ランク専用 に使います。
| 段 | モデル | 計算量 | 役割 |
|---|---|---|---|
| 一次検索 | バイエンコーダ+ANN | 事前計算+近似探索で高速 | recall重視で広く取る |
| 再ランク | クロスエンコーダ | ペア毎に推論、上位のみ | precision重視で並べ替え |
「速いが粗い検索で網を広げ、遅いが正確な再ランクで上位だけ精査する」── 速度と精度のトレードオフを段で分離するのが二段検索の本質です。最終的にLLMへ渡すのは再ランク後の上位 k 件だけにします。
文脈注入と失敗モードの切り分け
再ランク後の上位チャンクをプロンプトへ並べる 文脈注入 にも設計判断があります。LLMには lost-in-the-middle(長い文脈の中央に置かれた情報を見落としやすい)傾向があるため、最重要チャンクは先頭か末尾 に置きます。また各チャンクに出典(タイトル・URL・章)を付すと、引用整合と幻覚抑制に効きます。注入量はKVキャッシュの消費とコストに直結するので、top-k は recall を満たす最小に絞ります。
評価は感覚でなく 検索メトリクスとアブレーション で行います。
- Recall@k:正解チャンクが上位k件に入る割合。一次検索の網の広さを測る一次指標。
- nDCG / MRR:正解が上位ほど高い順位感応の指標。再ランクの効果はここで見る。
- 末端評価:回答の正確性・根拠整合(faithfulness)。LLM-as-judge等で測る。
正解が一次検索に無い(Recall@kが低い)→ チャンク化・オーバーラップ・ハイブリッド比率を見直す。
正解はあるが上位に来ない(recallは高いがnDCGが低い)→ 再ランクを追加/強化する。
意味は近いが事実が違う→ 埋め込みのドメイン不一致。ドメイン適応した埋め込みやBM25併用を検討。
チャンクが途中で切れて回答不能→ 境界を尊重する分割+親子チャンク(small-to-big)。
切り分けの順番が肝心です。まず Recall@k を見て一次検索(チャンク化・ハイブリッド)の問題か、再ランクの問題か、生成の問題かを切り分けます。生成プロンプトを触る前に、正解チャンクがそもそも上位に入っているか を必ず確認する。これがRAGデバッグの第一歩です。なお、根拠の与え方を学習側で強化するRLHFやDPOとは層が異なり、RAGは外部知識を 推論時に 注入する点が本質的に区別されます。
AI/機械学習 Article
RAGの内部:チャンク化・検索・再ランクの設計を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
RAG
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 6
導入後に効く点
1段目の検索は再現率(recall)を稼ぐ広い網、2段目のクロスエンコーダ再ランクで適合率(precision)を上げる二段構成が定石。融合はRRFが頑健。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 6
判断チェックリスト
- 自社の用途が「RAG / 検索」に近いか確認する。
- 強みである「RAGは検索が上流。チャンク化(サイズ・オーバーラップ・境界)で取得粒度が決まり、密検索(埋め込み)と疎検索(BM25)はヒットの性質が補完的なのでハイブリッドが基本。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。