RAG
外部から関連文書を検索し、それを文脈に入れて生成する。 Retrieval-Augmented Generation。
質問 → [検索] → 関連文書 k 件
↓
質問 + 文書 → [LLM] → 回答何を解決するのか#
| 問題 | RAG での改善 |
|---|---|
| 知識が学習時点で止まる | 最新の文書を渡せる |
| 社内文書を知らない | 独自データを検索対象にできる |
| 幻覚 | 根拠を文脈に置ける |
| 出典が示せない | 検索した文書を引用できる |
再学習せずに知識を更新できるのが実務上最大の利点。
構成#
- チャンク分割 — 文書を適当な長さに切る
- 埋め込み — 各チャンクをベクトル化
- 索引 — ベクトル DB に格納
- 検索 — 質問のベクトルに近いチャンクを取る
- 生成 — 取得したチャンクを文脈に入れて回答させる
難所#
チャンク分割が精度を大きく左右する。
- 小さすぎる → 文脈が切れて意味が失われる
- 大きすぎる → 無関係な部分がノイズになる
見出し構造に沿って切る、重複を持たせる、 親文書への参照を持たせる、といった工夫がある。
検索の質が上限を決める。 関連文書が取れなければ、どんなに良いモデルでも答えられない。 ベクトル検索とキーワード検索(BM25)を併用する ハイブリッド検索、および再ランキングが実務では有効。
限界#
- 「文書全体を要約して」のような全体を要する質問に弱い
- 複数文書をまたぐ推論が苦手
- 中盤の情報が見落とされる
参考文献#
- Patrick Lewis et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS, 2020. https://arxiv.org/abs/2005.11401
- Yunfan Gao et al. Retrieval-Augmented Generation for Large Language Models: A Survey. 2024. https://arxiv.org/abs/2312.10997
- Nelson F. Liu et al. Lost in the Middle. TACL 12, 2024. https://doi.org/10.1162/tacl_a_00638