ファインチューニングと RAG
基盤モデルを自分の用途に合わせる2つの道。内部を追加学習で書き換える「ファインチューニング」と、外部知識を検索して渡す「RAG」。向き不向きとコストで使い分ける。
- 1.迷ったらまず RAG。最新・固有の“知識”を渡したいなら検索で外付けするのが安く速い。
- 2.ファインチューニングは“振る舞い・口調・形式”を体に覚えさせる手段。知識の丸暗記には不向き。
- 3.両者は排他ではなく併用が定石。RAG で知識を、ファインチューニングで応答スタイルを整えるのが王道。
なぜ「そのまま」では足りないのか
基盤モデルは膨大な一般知識を持ちますが、次の2つは原理的に苦手です。
- 自社固有・最新の知識:社内規定、製品マニュアル、昨日のニュースなど、学習データに含まれていない情報は知りようがない。
- 決まった振る舞い:常に JSON で返す、特定の口調を保つ、自社のサポート手順に沿うなど、汎用モデルのままでは揺れる。
この「知識を足す」課題と「振る舞いを固める」課題は別物で、効く薬も違います。ここを混同すると遠回りになります。
ファインチューニング:内部を書き換える
入力と理想の出力のペア(例:問い合わせ文 → 模範回答)を数百〜数千件用意し、追加学習でモデルの重みを少しずつ更新します。学習が済めば、その傾向はモデル本体に焼き付きます。
学習データ(例)
入力: "解約したいです"
出力: "ご解約の手続きですね。まずマイページの…(自社手順の口調つき回答)"
……これを数百〜数千ペア
→ 追加学習 → モデルが「この口調・形式」を体得
得意なのは形式や口調、ドメイン特有の言い回しを安定させること。一方で、新しい事実を覚えさせる用途には向きません。事実が変わるたびに再学習が要りますし、少量の学習データに引っ張られて挙動が偏ることもあります。
「社内文書を全部ファインチューニングで覚えさせれば検索いらず」は典型的な落とし穴。学習で覚えた事実は更新が効かず、しかも“それらしい嘘”(ハルシネーション)として混ざりやすい。コストも高い。知識の追加は次の RAG の領分です。
RAG:外部知識を検索して渡す
モデルは一切いじりません。代わりに、
- 手元の文書をあらかじめ細かく分割し、エンベディング(意味のベクトル)にしてデータベースに入れておく。
- 質問が来たら、その質問に意味が近い文書を検索して取り出す。
- 取り出した文書をプロンプトに同梱して「これを根拠に答えて」とモデルに渡す。
# RAG のおおまかな流れ(擬似コード)
docs = vector_db.search(query, top_k=3) # 質問に近い文書を検索
prompt = f"次の資料だけを根拠に答えて:\n{docs}\n\n質問: {query}"
answer = llm.generate(prompt) # モデル本体は無改造
知識は外部 DB 側にあるので、文書を差し替えれば即座に最新化でき、再学習は不要。さらに「どの文書を根拠にしたか」を示せるため出典を提示しやすいのも大きな利点です。弱点は、検索がズレると答えもズレること、そして毎回プロンプトが長くなり1回の推論コストとレイテンシが増えることです。
「資料に書いていなければ『分かりません』と答えて」と指示し、根拠文書を渡すことで、モデルの“それらしい作り話”をかなり抑えられます。RAG は知識追加だけでなく、答えの裏付けを与える仕組みとしても効きます。
2つの違いを並べて見る
| 観点 | ファインチューニング | RAG |
|---|---|---|
| 変えるもの | モデル内部の重み | 渡す入力(プロンプト)だけ |
| 得意 | 口調・形式・振る舞いの固定 | 最新・固有の知識の付与 |
| 知識の更新 | 再学習が必要(遅い・高い) | 文書を差し替えるだけ(速い) |
| 出典の提示 | 原理的に難しい | 検索した文書を示せる |
| 初期コスト | 学習データ整備+学習費が高い | 比較的低い(DB構築のみ) |
| 推論時コスト | プロンプトは短く済む | 毎回プロンプトが長くなる |
| ハルシネーション | 学習内容次第で残る | 根拠提示で抑えやすい |
使い分けと、つまずきポイント
判断の軸はシンプルです。
- 足りないのが「知識」(最新情報・社内文書)→ RAG。
- 足りないのが「振る舞い」(口調・出力形式・手順の遵守)→ ファインチューニング。
- 両方(自社知識を、自社らしい口調で)→ 併用。RAG で知識を供給し、ファインチューニングで応答スタイルを整える。
ファインチューニングも RAG も始める前に、まずプロンプトエンジニアリングで足りるか確認を。指示文と少数の例(few-shot)を入れるだけで解決する課題は多く、最も安く速い。プロンプトで頭打ちになって初めて RAG、形式の安定が要れば追加でファインチューニング、という順番が遠回りしないコツです。
実務でよく踏む地雷もまとめておきます。
- RAG の精度は検索が9割:モデルを変える前に、分割サイズの調整や検索のチューニングで大きく改善することが多い。「答えが悪い=モデルが悪い」と早合点しない。
- ファインチューニングのデータ品質:少量でも質の悪いペアを混ぜると、その癖まで忠実に学習してしまう。量より質。
- コストの見え方が違う:ファインチューニングは初期の学習費が重く推論は軽い。RAG は初期は軽いが毎回の推論で課金が積み上がる。運用回数まで含めて試算する。
たとえ:新人を即戦力にする2つの方法
新しく入った優秀だが自社を知らない人(基盤モデル)を戦力化する場面を想像してください。
- RAG=社内マニュアルを手元に置いて、その都度引きながら答えてもらう。マニュアルを更新すればすぐ最新の対応になり、「何ページを見たか」も言える。ただし毎回ページをめくる手間(推論コスト)はかかる。
- ファインチューニング=何百件もの模範対応を反復練習させ、自社の作法を体に染み込ませる。一度覚えれば即答できるが、ルールが変われば練習し直しで、うろ覚えのまま自信満々に間違えることもある。
多くの現場の答えは「両方」。マニュアル(RAG)で“何を”答えるかを最新に保ちつつ、反復練習(ファインチューニング)で“どう”答えるかを自社流に固める——これが基盤モデルを実戦投入する王道です。
AI/機械学習 Article
ファインチューニングと RAGを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
LLM
比較で見る軸
難易度: intermediate / カテゴリ: AI/機械学習 / タグ数: 4
導入後に効く点
ファインチューニングは“振る舞い・口調・形式”を体に覚えさせる手段。知識の丸暗記には不向き。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- AI/機械学習
- タグ数
- 4
判断チェックリスト
- 自社の用途が「LLM / ファインチューニング」に近いか確認する。
- 強みである「迷ったらまず RAG。最新・固有の“知識”を渡したいなら検索で外付けするのが安く速い。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。