RAG:検索拡張生成 — 外部知識で「幻覚」を抑える

LLM は知らないことを聞かれても、もっともらしい嘘を自信たっぷりに作ってしまいます(ハルシネーション)。RAG(Retrieval-Augmented Generation)は、答える前に関連文書を検索してプロンプトに詰め込み、モデルにその文書だけを根拠に答えさせる仕組み。知識をパラメータではなく実行時の検索で与える、この「検索×生成」の合わせ技を動かして理解します。

1. ハルシネーション — 自信満々の作り話

LLM は「正しいこと」ではなく「それらしい続き」を生成する機械です。学習データに無かった事実(社内規定・最新情報・個別の数字など)を聞かれても、知らないとは言わず、具体的な数字までそれらしく捏造してしまう。しかも口調は自信満々で、出典を示せません。

ハルシネーション — 根拠なしに断言してしまう
モデルが学習していない「社内固有の事実」を質問しています。答えは一見完璧ですが、数字も日付も作り物で、赤い「根拠なし」印のとおり出典を示せません。自信度メーターが高いままなのが厄介 — 間違いを間違いと自覚しないのです。
注意 — なぜ幻覚は起きるのか 次トークン予測は流暢さを最適化しているのであって、事実性を保証していない。学習データに答えが無い問いでも、モデルは分布上「ありそうな文字列」を出力するため、空欄ではなくそれらしい捏造で埋めてしまう。温度を下げても「自信を持って間違える」だけで、根本原因(知識が重みに無い)は消えない。

2. ベクトル検索 — 「意味が近い」文書を引く

RAG の心臓は検索です。ただしキーワード一致ではなく、質問も文書も埋め込み(意味を表す数ベクトル)に変換し、ベクトル空間での近さで探すのがポイント。「返品」と「返金」のように語は違っても意味が近ければ、近くに配置され、ヒットします。

質問ボタンを押すと、その質問ベクトル(★)に意味が近い文書チャンクが上位から選ばれます。取得件数 k を変えて、何件を根拠として渡すか試してください。

ベクトル空間での最近傍検索 — 意味の近さで引く
各点=文書チャンクの埋め込み(意味が近いものは近くに集まる)。★=質問の埋め込み。線でつながった上位 k 件が「関連文書」として取り出され、次の生成に渡されます。類似度%は近いほど高い。
類似度 = cos θ = (q · d) / (|q| |d|) q=質問ベクトル、d=文書ベクトル。向きが揃うほど(=意味が近いほど)1に近づく。近似最近傍探索(ANN)で大量の文書からでも高速に上位を引ける

3. RAG パイプライン — 検索 → 連結 → 生成

取り出した文書を質問と一緒にプロンプトへ詰め込み(augment)、「この資料だけを根拠に答えて」と指示して生成させます。モデルは自分の曖昧な記憶ではなく、目の前に置かれた確かな文書を読んで答えるので、出典つきの正確な回答になります。

「RAGあり/なし」を切り替えて、同じ質問への答えがどう変わるか見てください。なしは記憶頼みで幻覚、ありは文書を根拠に引用つきで答えます。

Retrieve → Augment → Generate の流れ
RAGあり=質問を検索し、取得した文書 [1][2] を根拠に 引用つきで回答(緑)。RAGなし=検索を挟まず記憶だけで答え、根拠のない断言になりがち(赤)。同じ質問で切り替えて答えの中身を比べてみてください。
POINT — 知識を「重み」から「プロンプト」へ外出しする ファインチューニングは知識をモデルの重みに焼き込む(=パラメトリックな記憶)。RAG は知識を外部の文書ストアに置き、必要なときだけ検索して渡す(=非パラメトリックな記憶)。だから再学習なしで知識を最新化でき、「どの文書に基づくか」という出典も示せる。社内ドキュメントQ&Aや最新情報の参照に RAG が定番なのはこのため。

4. チャンク分割 — 文書をどう刻むか

長い文書はそのままでは扱えないので、あらかじめチャンク(かたまり)に分割して埋め込み、保存しておきます。このチャンクの大きさが検索の効きを左右する隠れた急所。小さすぎると文脈が足りず、大きすぎると無関係な部分まで混ざって検索がぼやけます。境目で意味が切れないよう、少し重ねて(オーバーラップ)刻むのが定石です。

チャンクサイズのトレードオフ
文書を並んだ「文」の列とし、色ごとに1チャンク。★の文に答えがあります。小さくするとピンポイントで引けるが前後の文脈を失い、大きくすると文脈は豊かだが無関係な文も一緒に取り込みます。オーバーラップは、答えが境目にまたがっても取りこぼさないための保険。

5. まとめ

一歩先へ — RAG は万能ではない 検索が的外れな文書を引けば、モデルはその誤りに引きずられる(garbage in, garbage out)。逆に正しい文書を渡しても無視して幻覚することもある。実務では、キーワード検索とベクトル検索を混ぜるハイブリッド検索、取得結果を並べ替えるリランキング、文書間の関係をたどるGraphRAG などで検索品質を底上げする。そして次のレッスンでは、検索や計算といった行動を LLM 自身に選ばせて多段のタスクをこなすAIエージェントへ進みます。RAG は、その「ツールを使うLLM」の最初の一歩でもあります。