はじめに
個人や小規模チームを前提に、「ドメイン特化LLMを『今から』現実的に作るにはどうすればいいか」をテーマに、複数回に分けて思考の整理と実装のポイントをまとめていきたいと思います。
なぜ「今から」なのかというと、
ここ1〜2年で、LLM(大規模言語モデル)を取り巻く環境は様変わりしました。
一気に「実運用の道具」として実装できるフェーズへ移行した感覚があります。
具体的には、
- 商用利用できる高性能なOSSモデル(特に日本語対応モデル)が増えた
- 個人レベルの計算資源(GPUなど)でも、十分に学習を回せるようになった
- 企業では「社内データをセキュアに扱いたい」というニーズが待ったなしになった
この3点が揃ったことで、「自前でLLMを育てる」は現実的な"選択肢"になったと思います。
とはいえ、いざ手を動かそうとすると、
- 「ドメイン特化って、具体的にどう作るの?」
- 「ファインチューニングって言葉が広すぎて、何を指してるのかわからない」
- 「Colabや手元のGPUで、どこまで現実的にできるの?」
といった壁にぶつかりがち。
特に「専門知識を覚えさせて、かつ自然に会話させたい」という場合、
RAGなど、単なるチャットボット作りとは違う戦略が必要になります。
そこでこの連載では、実装・運用を見据えた現実的なラインを探ることを目的に、
戦略から実装までを整理していきます。
第1回となる今回は、まず「戦略と判断軸」の話です。
なぜ今やるのか、そして各手法(DAPT / SFT / CFT)についての解説
それらをどう組み合わせるのが正解なのか
まずはここについて解説していきたいと思います。
なぜ「今」なのか?
少し前までなら実行自体難しかったと思いますが、
今は明らかに風向きが変わっています。理由は大きく3つあります。
1. 「本当に使える」OSSモデルが揃ってきた
ほんの少し前まで、実務レベルのLLMといえばOpenAIなどのクローズドAPI一択でした。
しかし、2025年の今は状況が違います。
- gpt-oss (OpenAI製のオープンウェイトモデル)
- Llama 3.1 (Meta)
- Qwen 2.5 (Alibaba)
- Nemotron-3 (NVIDIA)
- Sarashina2 (ソフトバンク/SB Intuitionsの日本語特化モデル)
このように、選択肢が非常に豊富です。
しかも、小規模から大規模まで多様なサイズ展開があるので、「まずは小さく試して、手応えがあったら大きくする」というソフトウェア開発として当たり前の戦略が取れるようになりました。
2. 計算資源の民主化が進んだ
「GPUを買う予算がない」というのも、過去の話になりつつあります。
例えば、DGX Sparkのような比較的安価で導入しやすいAIワークステーションが登場し、個人でも「自宅スパコン」が持てる時代になりました。クラウドでも、Google Colabなどの環境が充実しています。
また、量子化やPEFT(LoRAなど)といった技術のおかげで、フルスペックの計算資源がなくても「とりあえず学習を回してみる」ことのハードルが劇的に下がりました。
「研究室や大企業じゃないと無理」だったことが、今なら個人や小規模チームでも十分に手が届きます。
3. 「社内LLM・知識特化LLM」が現実的な課題になった
企業でLLMを使うと、どうしても「セキュリティ」や「専門性」の壁に当たります。
- 社外のAPIに生データを投げられない
- 機密情報・未公開情報を扱いたい
- 汎用モデルが知らない「ニッチな専門知識」を前提に推論させたい
こうした状況では、「汎用LLMをそのまま使う」よりも「自前で特化モデルを持つ」メリットが急激に大きくなります。
良いモデルがあり、計算資源もあり、手元にはデータがある。 そんな時はまさに取り組み時かと思います!
3つの「チューニング」を整理する:DAPT / SFT / CFT
さて、いざ「作る」となったとき、もっとも混乱しやすいのが
「どのデータで・何を目的に・どのレイヤーを調整するか」という点です。
ここでLLMの文脈でよく出てくる DAPT / SFT / CFT について、
それぞれ役割を解説していきたいと思います。
各手法の違いについて
| 手法 | 正式名称 | 何をする? | 目的 | 主に変わるもの |
|---|---|---|---|---|
| DAPT | Domain-Adaptive Pre-Training | 生テキストで追加事前学習 | ドメイン知識を入れる | 語彙・世界知識 |
| SFT | Supervised Fine-Tuning | 正解付きデータで学習 | 指示に正しく答える | 出力スタイル・タスク能力 |
| CFT | Continual Fine-Tuning | 運用しながら継続学習 | 劣化防止・知識更新 | 振る舞いの維持・改善 |
それぞれ詳しく見ていきましょう。
① DAPT(ドメイン適応事前学習)
位置づけ:「事前学習の続きを、ドメイン特化データでやる」
まずはここからです。モデルに「教科書」を読ませるフェーズです。
-
何を学習する?
- 社内ドキュメント、技術仕様書、Wiki、ログなど
- 要するに「ラベルなしの生テキスト」を大量に読ませます
-
何が良くなる?
- ドメイン特化の専門用語を理解するようになります
- 「知らない単語が多い」という根本的な問題が解消されます
-
何が変わらない?
- ここが重要です。 DAPTだけでは、「指示に従って会話する能力」はあまり向上しません。ただの「物知り」になるだけで、チャットとしては不愛想なままの場合があります
② SFT(教師ありファインチューニング)
位置づけ:「正解例を見せて、答え方を教える」
DAPTで知識を得たモデルに、「会話の作法」を教えるフェーズです。
LLMの学習においてInstructionと呼ばれるフェーズのうち、特にメインがこのSFTになります。
-
何を学習する?
-
{"instruction": "〇〇について教えて", "output": "それは〜です。"}といったQ&A形式のデータが代表的です
-
-
何が良くなる?
- ユーザーの指示を理解し、適切なフォーマットで応答できるようになります
- 「自然な会話」をさせたいなら、この工程は必須です
-
何が弱い?
- このフェーズだけで新しい「知識」を大量に覚えさせるのは非効率です。知識はDAPTで入れ、SFTではその引き出し方を教えるイメージです
③ CFT(継続的ファインチューニング)
位置づけ:「運用しながら、少しずつ学習を続ける」
作ったモデルを運用し始めた後のフェーズです。
-
何を学習する?
- 日々の新しいニュース、追加されたドキュメント、ユーザーからのフィードバック(Good/Bad)
-
目的
- 知識の鮮度維持と、性能劣化、破壊的忘却(Catastrophic Forgetting)の防止
-
注意点
- やり方を間違えると、これまで出来ていたことが壊れる可能性があります。データのバランス調整が非常に重要になります
今回の戦略:知識を入れて「自然に喋らせる」には?
「ドメイン特化LLMを作りたい」という時、多くのケースで「専門知識を持っていて(DAPT)」かつ「自然に応答できる(SFT)」状態を目指すことになると思います。
例えば、「ゲーム攻略AI」を作るとしましょう。
-
DAPT(知識注入)
- 全攻略記事、用語集、キャラデータなどのテキストを読ませる
- モデルは「モンハン」や「ポケモン」の専門用語と概念を理解した状態になります
- ただし、これだけだと、質問しても記事の続きを勝手に書き始めたりします
-
SFT(対話能力付与)
- 「初心者にオススメの武器は?」「〇〇です」という対話データで学習させる
- ここで初めて、DAPTで得た知識を使って「攻略アドバイザー」として振る舞えるようになります
よくある誤解と現実解
- ❌ 「SFTだけやればドメイン特化できる」
- 語彙や概念理解が弱いままなので、表面的な会話しかできません
- ❌ 「知識を入れたいからDAPTだけでいい」
- これだと、ただの「文章生成器」です
- チャットボットとして自然に使いたいなら、仕上げのInstruct(SFT/RLHF/DPO...)が不可欠
- ❌ 「DAPTは巨大GPU必須なんでしょ?」
- いいえ。現在は7Bモデル + LoRAを使えば、コンシューマー級のGPUやColabでも十分に効果を出せます。
目指すべきフロー
ドメイン特化LLMを成功させるための現実的なフローは以下の通りです。
[ベースモデル]
↓
[ DAPT ] ← 生テキストで「知識」を注入(LoRAでOK)
↓
[ SFT ] ← Q&Aデータで「対話」を調整(ここもLoRAでOK)
↓
[ 完成 ]
今回はこの流れを前提に話を進めます。「知識注入(DAPT)」と「対話調整(SFT)」は、どちらか一つではなくセットで考えていきます。
まとめ
- DAPTでドメインの「脳(知識)」を作り
- SFTでドメインの「口(対話)」を整える
次回は、この戦略を具体的に実行に移すため、
「Colabやローカル環境でDAPTを回すための、ベースモデル選定とデータ準備」
について、実践的な内容に入っていきます。