タグ
白いカードに、青から紫の回路基板の線で描かれた脳と、中央の吹き出しに書かれたLLMの文字

RAGをファインチューニングで置き換えられる? KB検索の選択肢を調べて考えてみた

社内KB検索でRAGをファインチューニングに置き換えられるか。ファインチューニングが実際に学ぶもの、純粋IRやロングコンテキストが勝つ場面、それぞれのコストを整理します。

目次

はじめに

ナレッジベース(KB)検索システムを RAG で構築している方は多いと思います。私もその一人なのですが、あるとき素朴な疑問が湧いてきました。

「小さいローカルモデルを社内ドキュメントでファインチューニングすれば、RAG と同じことができて、しかもモデルサイズも小さく・安く済むのでは?」

参照するドキュメントに特化してモデルを仕立てれば、検索基盤もベクトル DB も要らなくなって身軽になりそうです。直感的にはそう思えます。しかし実際にはそうなりませんでした。ファインチューニングが学ぶのは事実ではなく振る舞いであり、KB 検索が本当に求めているものを供給できないからです。代わりに残ったのは逆の教訓でした。ニーズが狭ければ、フル装備の RAG より単純な構成のほうが勝つことが多い、ということです。この疑問を出発点に、「ファインチューニングは RAG の代わりになるのか」「そもそもファインチューニングとは何をしているのか」「そもそも RAG 以外に選択肢はないのか」を順に調べて考えてみました。

同じ疑問を持っている方の思考の整理に役立てば幸いです。

疑問1: ファインチューニングで RAG を置き換えられるのか

最初の疑問から調べてみると、どうやらこの直感はあまりうまくいかなさそうだ、ということが見えてきました。ファインチューニングと RAG は、そもそも解いている問題が違うからです。

ファインチューニングが学ぶのは「事実」ではなく「振る舞い」

ファインチューニングは、モデルの重みを調整して、スタイル・出力フォーマット・トーン・タスクの遂行パターンを変える手法です。一方で、「特定の事実を後から確実に引き出せるように埋め込む」ことは得意ではありません。

社内ドキュメントでファインチューニングすると、モデルは「社内ドキュメントっぽい話し方」を学びますが、具体的な質問に対しては、流暢で自信満々な誤答を平気で返すことがあります。RAG は逆に、事実を検索可能なストアに原文のまま保持します。

社内ドキュメントを重みに焼き込んだファインチューニングが、経費規程の質問に自信満々の誤答(1食200ドル)を返す一方、RAG は同じ文書を検索インデックスに原文のまま保持し、経費規程 v3.2 を引用して1食150ドルと答える様子を上下に並べた図

なぜ RAG が KB 検索に向くのか

調べていくと、RAG が KB 検索システムに向いている理由は、グラウンディングと引用・更新の安さ・検索コンテキストによるハルシネーション抑制の 3 点に整理できました。KB では、出典を追えることの価値が大きいです。

RAG とファインチューニングのみの構成:KB に必要な 3 つの性質3 行の比較図。グラウンディングと引用では、RAG もファインチューニングのみも「1 食あたり 150 ドルまで」と同じ回答を返すが、RAG は経費規程 v3.2 の p.4 §3.2 を出典として示せるのに対し、ファインチューニングのみは出典を示せない。更新では、RAG は変更された文書を再インデックスするだけで数分で反映されるのに対し、ファインチューニングのみはデータ収集・再学習・デプロイに数時間から数日かかる。ハルシネーションでは、RAG は「24 時間前まで」という検索コンテキストに基づいて 24 時間と答えるのに対し、ファインチューニングのみは拠りどころとなる文脈がなく、誤りうる 72 時間という回答を返す。RAG とファインチューニングのみの構成:KB に必要な 3 つの性質RAGファインチューニングのみ1グラウンディングと引用回答の根拠を示せるかA: 1 食あたり 150 ドルまで✓ 出典: 経費規程 v3.2 p.4 §3.2A: 1 食あたり 150 ドルまで✗ 出典を示せない2更新が安い知識の更新にどれだけ手間がかかるか変更された文書を再インデックス✓ 数分で反映されるデータ収集 → 再学習 → デプロイ✗ 数時間から数日3ハルシネーションの抑制回答に拠りどころがあるか検索コンテキスト:「24 時間前まで」✓ 回答: 24 時間(根拠あり)拠りどころとなる文脈がない✗ 回答: 72 時間(誤りうる)RAG は事実を外部に置き、追跡でき、更新できる状態に保つ
同じ回答でも、根拠を示せるのは一方だけです。

「安く・小さく」という直感の落とし穴

「ドキュメントに特化した小さいモデルなら安くて小さい」という発想は魅力的ですが、いくつか穴があります。

  • ファインチューニングをしても、モデルを意味のあるかたちで小型化できるわけではありません。モデルサイズを決めるのは「必要な推論・言語能力」であって、「どれだけドメインの文章を見せたか」ではないからです。小さいモデルは、ドキュメントで仕立てても、やはり合成や指示追従が苦手な小さいモデルのままです。
  • ファインチューニングの構築・維持には実コスト(データ準備・計算・評価・ドキュメント更新のたびの再学習)がかかり、RAG はこれを回避できます。
  • RAG の推論コスト(検索チャンクでプロンプトが長くなる)は確かに気になりますが、学習パイプラインを保有するコストより安く済むことが多いです。
RAG と Fine-tuning:KB 検索における役割の違い2 つのパネルの図。左は RAG で、ユーザーの質問が検索に渡り、原文をそのまま保持したドキュメント DB を検索し、続く生成が文脈を基に根拠付き回答を合成する。事実は外部に残り、出典を示せ、更新はインデックスし直すだけで済む。右は Fine-tuning で、学習データが重みを調整して振る舞いを内在化し、同じ質問に対して流暢だが不確実な回答を返す。スタイル・フォーマット・用語は学習できるが、事実が重みににじみ、根拠を示せず、更新には再学習が要る。成熟パターンは事実を RAG、振る舞いのみ Fine-tuning に任せる。RAG と Fine-tuning:KB 検索における役割の違いRAG(Retrieval-Augmented Generation)ユーザーの質問1. 検索(Retrieval)関連文書を検索2. 生成(Generation)文脈を基に回答を合成根拠付き回答ドキュメント DB原文をそのまま保持– 事実を外部ストアに保持– 引用・出典を提示できる– 更新はインデックスし直すだけ– ハルシネーションを抑制事実の正確な参照が得意Fine-tuning学習データ重みの調整振る舞いを内在化ユーザーの質問流暢だが不確実な回答– スタイル・トーンを学習– 出力フォーマットを統一– ドメイン用語を習得– 事実が重みに「にじむ」– 根拠を示せない– 更新には再学習が必要振る舞いの変更が得意成熟パターン:事実は RAG、振る舞いは必要なら Fine-tuning
RAG は事実を外に置き、Fine-tuning は振る舞いを内側に取り込みます。

ファインチューニングが本当に効く場面

とはいえ、ファインチューニングが無意味というわけではありません。むしろ RAG と組み合わせると効果的です。

  • 一貫した出力フォーマット・トーン・ドメイン用語(専門用語)を教える
  • 検索してきたコンテキストの「使い方」を改善する(RAFT: Retrieval-Augmented Fine-Tuning など)、クエリ理解を良くする
  • 毎回繰り返す指示を重みに焼き込んでプロンプトを短くする

つまり成熟したパターンは「事実は RAG、振る舞いは(必要なら軽い)ファインチューニング」であって、RAG を「置き換える」ものではない、ということでした。

RAG の上にファインチューニングが足すもの3 つのパネルの図。1 つめは出力フォーマット・トーン・ドメイン用語の一貫性で、ファインチューニング前はトーンが揺れて言い回しも一般的だが、後では一貫したトーンでドメイン用語を使い、出力が予測でき用語も統一される。2 つめは検索コンテキストの活用とクエリ理解の向上で、前は重要な情報を取りこぼし推論も弱いが、RAFT による後では関連箇所に集中し、指示に従って引用し、精度と引用が向上してハルシネーションが減る。3 つめは繰り返す指示を重みに焼き込むもので、1,200 トークンを超えるシステムプロンプトが 150 トークンになり、プロンプトが短くなってレイテンシとコストが下がる。RAG の上にファインチューニングが足すもの1出力フォーマット・トーン・ドメイン用語の一貫性ファインチューニング前トーンが揺れ、言い回しも一般的ファインチューニング後一貫したトーンで、ドメイン用語を使う出力が予測でき、用語も統一される2検索コンテキストの活用とクエリ理解の向上ファインチューニング前重要な情報を取りこぼし、推論も弱いファインチューニング後(RAFT)関連箇所に集中し、指示に従い、引用する精度と引用が向上し、ハルシネーションが減る3繰り返す指示を重みに焼き込むファインチューニング前システムプロンプト:1,200 トークン超ファインチューニング後システムプロンプト:150 トークンプロンプトが短くなり、レイテンシとコストが下がるRAG が正しい事実を運び、ファインチューニングがその使い方と伝え方を良くする
事実は RAG が供給し、その使い方と伝え方をファインチューニングが変えます。

疑問2: そもそもファインチューニングとは何をしているのか

ここまで「ファインチューニングは振る舞いを変えるもの」と書いてきましたが、正直に言うと、私にはまだ腑に落ちていない部分がありました。

「ファインチューニングって、ChatGPT や Claude みたいな製品モデルを自社データでちょっと調整する話でしょ? それで振る舞いが変わるくらいなら、プロンプトで十分じゃない?」

この疑問は、ベースモデルの存在を知らなかったことから来ていました。

私たちが使っているモデルは、すでにファインチューニング済み

調べてみて驚いたのは、ChatGPT や Claude といった製品モデルは、LLM の「完成品」ではなく、すでに大規模なファインチューニングを経た後の姿だということです。その前段階にあるベースモデル(プレトレーニング済みモデル)は、私たちが普段触っているものとはまったく別物でした。

事前学習済みベースモデルから、教師ありファインチューニング・報酬モデル・RLHF による大規模ファインチューニング、製品利用に向けたアライメントと統合を経て、ChatGPT・Claude・Gemini など日常的に使う製品に至る4段階の図

ベースモデルとは何か

ベースモデルは、インターネット上の膨大なテキスト(Web ページ、書籍、コードなど)を使って「次の単語を予測する」タスクで訓練されたモデルです。この事前学習(プレトレーニング)により、文法・知識・推論パターンなど、言語の基礎能力を獲得します。

ただし、ベースモデルは「テキスト補完エンジン」でしかありません。質問を入力しても、回答を返すのではなく、その質問文の続きを書こうとします。指示に従わず、質問に答えず、有害なリクエストも拒否しません。いわば言語能力は持っているけれど「会話の仕方を知らない」状態です。

「フランスの首都は?」という入力に対し、回答ではなく質問文の続きを3通り生成するベースモデルの図。指示に従わない・質問に答えない・有害な要求を拒否しない・会話を続けられない、という4点を併記

ファインチューニングがモデルを「使える」ようにする

ベースモデルを「役に立つアシスタント」に変えるのが、ポストトレーニングと呼ばれるファインチューニングの工程です。

  1. インストラクションチューニング: 「質問されたら回答する」「指示に従う」といった対話パターンを、大量の(質問, 回答)ペアで学習させます。
  2. RLHF(人間のフィードバックによる強化学習): 人間の評価者が「良い回答」「悪い回答」を判定し、その評価に基づいてモデルの出力を調整します。これにより、有用で安全な応答が強化されます。

つまり、私たちがプロンプトを打ち込んでいる相手そのものが、巨大なファインチューニングの産物だったのです。「プロンプトで十分」と思っていたのは、ファインチューニングの恩恵の上に立っていたからでした。

どちらにお金がかかるのか: プレトレーニング vs ファインチューニング

LLM の構築には大きく 2 つのフェーズがあります。コストの桁がまったく違います。

観点 プレトレーニング(ベースモデル構築) ファインチューニング(ポストトレーニング)
何をするか 大量テキストで「次の単語予測」を学習 対話・指示追従・安全性などを学習
計算コストの目安 数千万〜数億ドル規模 数百万ドル規模(RLHF 込み)
必要なインフラ 数千〜数万 GPU で数ヶ月 数十〜数百 GPU で数日〜数週間
必要なデータ 数兆トークン規模の汎用テキスト 数万〜数十万件の高品質な(指示, 回答)ペア + 人間の評価
参入障壁 非常に高い(資金・インフラ・データ・専門人材) 相対的に低い(オープンなベースモデルを活用可能)

プレトレーニングは圧倒的にコストが高く、これを自前で行えるのは世界でも数十社程度です。一方で、ファインチューニングはオープンなベースモデル(Llama、Mistral など)を出発点にできるため、新しい企業でも手が届きます。

新モデルが強くなるのは、どちらのおかげか

ここまでの話を踏まえると、もうひとつ気になることがあります。「GPT-3 → GPT-4」や「Claude 2 → Claude 3」のように、新モデルが劇的に賢くなるのは、プレトレーニングとファインチューニングのどちらの貢献が大きいのでしょうか。

結論から言うと、プレトレーニングが能力の「天井」を決め、ファインチューニングがその天井にどれだけ近づけるかを決めます

  • 世代をまたぐ大きなジャンプ(GPT-3 → GPT-4、Claude 2 → Claude 3 など)は、ほぼプレトレーニングの進化によるものです。より多くの計算資源、より良いデータ、より大きなモデルサイズ、アーキテクチャの改善。これらがベースモデルの基礎能力(推論の深さ、知識の幅、コード理解力)を引き上げます。ファインチューニングでは、ベースモデルが持っていない能力を後から付け足すことはできません。
  • 同世代内の改善(GPT-4 → GPT-4o、Claude 3 Opus → Claude 3.5 Sonnet など)では、ファインチューニングやポストトレーニングの改善が大きな役割を果たすことがあります。同じ(または近い)ベースモデルでも、より良い RLHF データ、より洗練された学習手法、蒸留の工夫によって、ベンチマークスコアが大幅に向上するケースがあります。

つまりプレトレーニングは「どこまで賢くなれるか」の上限を設定し、ファインチューニングは「その賢さをどれだけ引き出せるか」を決めます。両者は代替ではなく補完の関係です。新モデルが強い理由を一言で言えば、より良いベースモデルの上に、より良いファインチューニングが乗っているからです。

新しい企業が自社モデルを持つ現実的な道筋

このコスト構造を知ると、「自社モデルを持ちたい」場合の選択肢が見えてきます。

  1. プレトレーニングから: 数千万ドル〜。フロンティア研究所レベルの資金とインフラが必要。現実的には数十社のみ。
  2. オープンなベースモデル + 自社ファインチューニング: 数万〜数百万ドル。自社ドメインに特化したモデルを構築可能。多くの AI スタートアップが採るルート。
  3. 製品モデルの API + プロンプトエンジニアリング: 数百〜数千ドル/月。最も手軽だが、モデル自体は自社のものではない。

LLM を使う3つのルートを、コストと支配権の強さとともに並べた図。ゼロからのプレトレーニングは1,000万〜1億ドル超で完全な支配権、オープンなベースモデル+自社ファインチューニングは1万〜100万ドル超、製品モデル API +プロンプトエンジニアリングは月100〜1万ドル超で支配権は最小

つまり「ファインチューニングに数百万ドル」は、性格を変えるだけの話ではありませんでした。テキスト補完しかできないベースモデルを、アシスタントとして成立させる工程であり、それ自体が製品の核心的な価値を生むプロセスなのです。

企業がさらにファインチューニングする理由

製品モデルの上から追加でファインチューニングする場合もあります。これは「性格変更」ではなく、実務上の強い理由があります。

  • 信頼性: プロンプトは「お願い」、ファインチューニングは「訓練」。数百万コールの本番では 5% の失敗が致命的になり得ます。
  • 新しい能力: ツール利用パターン、構造化抽出、ドメイン推論など、プロンプトだけでは確実にはできないことを教えられます。
  • コスト削減: 毎回 3,000 トークンの指示をプロンプトに載せる代わりに、重みに焼き込んで 50 トークンで済ませられます。スケールすれば大きな差になります。
  • 蒸留(Distillation): 巨大で高価なモデルの出力で小さく安いモデルをファインチューニングし、能力の大半をわずかなコストで得る手法です。

蒸留の3ステップ図。巨大で高価なティーチャーモデルが高品質な出力を生成し、その(プロンプト, 出力)ペアを学習データとして集め、小さなスチューデントモデルをそれを模倣するようにファインチューニングする。能力はティーチャー100%に対しスチューデント約90%、実行コストは10〜100分の1になる

目安は「まずプロンプト、壁にぶつかったらファインチューニング」。プロンプトでは届かない信頼性、記述しきれない複雑な振る舞い、長いプロンプトが高くつくスケール。そこに達したとき投資し、推論コスト削減で回収する構図です。

観点 プロンプトエンジニアリング ファインチューニング
与えられる例の数 数個 数万件
一貫性・信頼性 「お願い」ベースでばらつく 「訓練」ベースで高い
新しい能力の付与 限定的 可能
プロンプト長・推論コスト 長くなりがち 焼き込んで短縮できる
モデル間の能力転移 不可 蒸留で可能

疑問3: そもそも RAG 以外に選択肢はないのか

「事実は RAG」と分かったところで、次に「RAG が唯一の正解なのか?」という疑問が出てきました。ここで役立ったのが、「RAG とは何か」を分解して捉え直すことでした。

RAG を 2 段階に分解する

RAG は一枚岩ではなく、2 つのステージを貼り合わせたものです。

  1. 検索(Retrieval): 関連するテキストを見つける。これはまさに古典的な ML / 情報検索(IR)です(BM25、埋め込み、リランカー、ベクトル検索)。推論は要りません。
  2. 生成(Generation): LLM が検索してきたテキストを読んで回答を合成する。

つまり「ML か RAG か」という分け方は誤った二分法で、ML(機械学習)は RAG の検索半分そのものなのです。本当に考えるべき設計上の問いは「どのステージが本当に必要で、それぞれどこまで高度である必要があるか」でした。

この視点で見ると、ニーズ別の代替が見えてきます。

KB検索アーキテクチャの選択フロー3 つの判断からなるフローチャート。まず合成回答が必要かを問い、不要なら BM25・Dense・Reranker による純粋 IR。必要ならコーパスが大きいかを問い、小さく安定していれば Long Context、複雑なクエリなら Agent 型検索。大きく変化する場合はマルチホップ推論の要否を問い、不要なら通常の RAG、必要なら関係性を構造化した GraphRAG。KB検索アーキテクチャの選択フローユーザーのニーズは?合成回答が必要?Yesコーパスは大きい?大きい / 変化マルチホップ推論が必要?No小さい / 安定複雑なクエリNoYes純粋 IRBM25 + Dense + RerankerLong Context全文をプロンプトに詰め込むAgent 型検索反復的に検索・読解・再検索RAG検索 + 生成の標準パターンGraphRAG関係性を構造化凡例判断ノードLLM 要LLM 不要高度
合成回答の要否、コーパス規模、マルチホップの 3 つで決まります。

ケース別の使い分け

  • 「探す」だけなら LLM を外す: やりたいことが「正しいドキュメント/箇所を見つける」だけなら、古典的 IR(BM25 + Dense Retriever + リランカー)だけでシステムが完結します。生成なし・ハルシネーションなし・安い・速い・監査可能。多くの「KB 検索」ニーズは実はこれで、LLM を後付けして過剰設計になっているケースもあります。
  • コーパスが小さいなら検索を省いてロングコンテキスト: 昨今の大きなコンテキストウィンドウを使えば、ナレッジが概ね収まる規模なら、まるごとプロンプトに詰め込むだけで済みます(プロンプトキャッシュで安く)。ベクトル DB もチャンク分割も検索ミスもありません。小さく安定したコーパスでは RAG よりシンプルです。ただし規模が大きくなるとコスト・レイテンシ・“lost in the middle”(長文中央の想起低下)で破綻します。
  • 関係性が重要なら GraphRAG / ナレッジグラフ: 複数ドキュメントにまたがって事実をつなぐ必要がある問い(マルチホップ)では、素の Vector RAG は各チャンクを孤立して取ってくるため苦戦します。ナレッジグラフを構築して問い合わせる、あるいは GraphRAG が向きます。構築・維持コストは高めです。
  • クエリが複雑・多段ならエージェント型検索: 1 回の retrieve-then-generate ではなく、モデルに反復的に検索・読解・クエリ改善・再検索をさせます。難しい問いに強い一方、1 クエリあたりは遅く高価です。
ニーズ 推奨アプローチ 生成(LLM)の要否
ドキュメント/箇所を探すだけ 純粋な IR(BM25 + Dense + リランカー) 不要
小さく安定したコーパス ロングコンテキスト(+ プロンプトキャッシュ) 要(検索は不要)
マルチホップ・関係性 GraphRAG / ナレッジグラフ
複雑・多段のクエリ エージェント型検索
大規模・変化するコーパスで合成回答 RAG

率直なまとめ

正直なところ、「大規模で変化するコーパスに対して、グラウンディングされた最新の合成回答を返す」という組み合わせについては、RAG を置き換える存在はありません。それこそが RAG の役割だからです。

ただし、ニーズがもっと絞られている場合には、RAG よりシンプルな手段が勝つことが多い、というのが学びでした。間違いは「RAG を選ぶこと」ではなく「もっと安いサブセットで足りる場面でフル装備の RAG に手を伸ばすこと」。だから実務で問うべきは「RAG に勝つものは何か」ではなく「ユーザーはそもそも合成回答を必要としているか、コーパスはどれくらい大きく・安定しているか」です。この 2 つの答えがアーキテクチャを決めます。

これまでの話との整合

先ほどの「ファインチューニングは事実の埋め込みが苦手(それは RAG の仕事)」という指摘は、狭く・正しいものでした。一方で疑問 2 で見たように、ファインチューニングの「振る舞いを変える」は、ベースモデルをアシスタントに仕立てるところから、信頼性・新スキル・蒸留によるコスト削減まで、非常に幅広いレンジをカバーします。

深掘り: コスト削減が本当の目的なら

最初の動機に戻ると、私の関心は結局「コストを下げたい」でした。その観点では、ファインチューニングより効きやすい打ち手が別にあります。

  • RAG の裏側の生成モデルを、より小さく・安いものにする
  • 検索品質を上げる(より良いチャンク分割、リランキング、ハイブリッド検索)ことで、送るトークンを減らす
  • 埋め込みをキャッシュする
  • オープンな小型モデル(例: 7〜8B 規模)を自前ホスティングして RAG の生成器にする

これで、グラウンディングを手放すことなく「ユースケースに合わせた小さいローカルモデル」を手に入れられます。

なお一点注意として、あなたの「KB 検索」が生成というより本当は検索・ルックアップ(正しい箇所を見つける)なら、最大の勝ちはほぼ検索側にあり、LLM の選択はほとんど効いてきません。

まとめ

素朴な「ファインチューニングで RAG を安く置き換えられないか」という疑問から始めて、次のような整理にたどり着きました。

  • ファインチューニングは「事実」ではなく「振る舞い」を学ぶ。KB 検索の事実提供は RAG の仕事で、置き換えではなく併用が成熟パターン。
  • RAG は一枚岩ではなく「検索(古典的 ML/IR)+生成(LLM)」。ニーズが絞られていれば、純粋 IR・ロングコンテキスト・GraphRAG・エージェント型のほうがシンプルに勝つことも多い。
  • 実務で問うべきは「RAG に勝つ手段は?」ではなく「合成回答が要るか」「コーパスはどれくらい大きく・安定しているか」。
  • 私たちが使う製品モデル(ChatGPT、Claude)自体が、ベースモデルに対する大規模ファインチューニングの産物。プレトレーニング(数千万〜数億ドル)とファインチューニング(数百万ドル)はコストの桁が違い、オープンモデル活用で参入障壁は下がる。目安は「まずプロンプト、壁にぶつかったらファインチューニング」。
  • コスト削減が目的なら、小型生成モデル・検索品質改善・埋め込みキャッシュ・自前ホスティングのほうが効きやすい。

判断の出発点はシンプルで、「ユーザーは答えが欲しいのか、ドキュメントが欲しいのか」「コーパスはどれくらいの規模・更新頻度か」。この 2 つを先に決めると、アーキテクチャの選択がだいぶ楽になります。

この記事をシェア