RAG:検索拡張生成 — 外部知識で「幻覚」を抑える
LLM は知らないことを聞かれても、もっともらしい嘘を自信たっぷりに作ってしまいます(ハルシネーション)。RAG(Retrieval-Augmented Generation)は、答える前に関連文書を検索してプロンプトに詰め込み、モデルにその文書だけを根拠に答えさせる仕組み。知識をパラメータではなく実行時の検索で与える、この「検索×生成」の合わせ技を動かして理解します。
1. ハルシネーション — 自信満々の作り話
LLM は「正しいこと」ではなく「それらしい続き」を生成する機械です。学習データに無かった事実(社内規定・最新情報・個別の数字など)を聞かれても、知らないとは言わず、具体的な数字までそれらしく捏造してしまう。しかも口調は自信満々で、出典を示せません。
2. ベクトル検索 — 「意味が近い」文書を引く
RAG の心臓は検索です。ただしキーワード一致ではなく、質問も文書も埋め込み(意味を表す数ベクトル)に変換し、ベクトル空間での近さで探すのがポイント。「返品」と「返金」のように語は違っても意味が近ければ、近くに配置され、ヒットします。
質問ボタンを押すと、その質問ベクトル(★)に意味が近い文書チャンクが上位から選ばれます。取得件数 k を変えて、何件を根拠として渡すか試してください。
3. RAG パイプライン — 検索 → 連結 → 生成
取り出した文書を質問と一緒にプロンプトへ詰め込み(augment)、「この資料だけを根拠に答えて」と指示して生成させます。モデルは自分の曖昧な記憶ではなく、目の前に置かれた確かな文書を読んで答えるので、出典つきの正確な回答になります。
「RAGあり/なし」を切り替えて、同じ質問への答えがどう変わるか見てください。なしは記憶頼みで幻覚、ありは文書を根拠に引用つきで答えます。
4. チャンク分割 — 文書をどう刻むか
長い文書はそのままでは扱えないので、あらかじめチャンク(かたまり)に分割して埋め込み、保存しておきます。このチャンクの大きさが検索の効きを左右する隠れた急所。小さすぎると文脈が足りず、大きすぎると無関係な部分まで混ざって検索がぼやけます。境目で意味が切れないよう、少し重ねて(オーバーラップ)刻むのが定石です。
5. まとめ
- ハルシネーションは次トークン予測の宿命。知らないことも「それらしく」埋めてしまい、しかも自信満々で出典を示せない。
- ベクトル検索 — 質問と文書を埋め込みにし、意味の近さ(cos類似度)で関連文書を引く。語の一致ではなく意味の一致。
- RAG = 検索 → 連結(augment) → 生成。取得文書を根拠に答えさせることで、正確さと出典を両立する。
- 知識の外出し — 重みを再学習せず、文書ストアの更新だけで知識を最新化できる。チャンク分割の設計が検索品質を握る。