小規模言語モデル(SLM)のPost training

最近、蒸留が可能な大規模モデルが増加している[1] 。敬語変換を対象にSLM[2]をPost trainigすることで実用的なモデルが構築可能か試してみた。結果、Post training後の2Bのモデル(Gemma-2-Llama-Swallow 2B)が10倍以上の規模のローカルLLM(Gemma 4 31B / 1-shot)を超えるだけでなく、フロンティアモデル(Claude Opus 4.6 / 1-shot)に近い性能を出すことができた。

モデル / 手法BLEUchrFLLM as a judge
Claude Opus 4.6 / 1-shot71.5475.344.69
Gemma-2-Llama-Swallow 2B / QLoRA + DPO77.2874.564.64
Gemma 4 31B / 1-shot67.3571.734.60

手法

敬語変換モデル構築を対象として、教師モデルを用いたデータ合成後、Post trainingを行うことでSLMを強化する。データ合成はペルソナやコンテキストを事前作成し参照データを使いながら複数モデルでAgenticに行う。Post trainingはFine tuningとReinforcement learningを用いる。

  1. 敬語ルールを機械可読に変換する
    文化庁が出している「敬語の指針」をAIに読み込ませ、敬語の運用原則とチェックリスト、典型的な誤用をリスト化した。このデータはデータ合成と評価ルーブリック作成に用いた。
  2. ペルソナとコンテキストの合成
    架空の氏名、会社、部署、役職、社内外関係を持つペルソナを1,000人分作成。さらにIT/SaaS、製造、物流、教育、医療、行政、小売など15ドメイン、20種類のシナリオから900件のコンテキストを作成した。
  3. メールスレッドの作成
    ペルソナとコンテキストをランダムに選択し、複数通のメールのやりとりを合成した。合成時に軽微な敬語の誤り、典型的な誤り、失礼な表現を含む状況を入れ込み教師データを作成した。これらのプロセスでは1.のデータを参照、複数のモデルをAgenticに用い相互レビューと修正を行うことで品質を高めた。
    1.、2.を含め合成時に使用したモデルはDeepSeek V4 Flash(https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash)[3]、Mistral Large 2512(https://huggingface.co/mistralai/Mistral-Large-3-675B-Instruct-2512)[4]である。
  4. Post training用データと評価ルーブリックの作成
    合成した30,000件のデータのうち29,600件をPost trainingに、200件をtraining中の検証用に、200件をテスト用に分割した[5]。評価用データには評価ルーブリックを入れ込みLLM as a judgeで判定しやすくした。評価データは全量目検証している[6]。
  5. Post trainingと評価
    合成したデータを用いてGemma-2-Llama-Swallow 2B(https://swallow-llm.github.io/gemma2-llama-swallow.ja.html)[7]とGemma 4 E2B(https://huggingface.co/google/gemma-4-E2B)[8]に対してfine tuningを行った。Gemma-2-Llama-Swallow 2BではFull Fine-TuningとQLoRAを行い、Gemma 4 E2BはUnsloth LoRAを利用した。成績の良かったGemma-2-Llama-Swallow 2B + QLoRAに対してはDPO(Direct Preference Optimization)を用いたRLを追加的に実施した[9]。学習環境はNVIDIA RTX Pro 6000である[10]。
    評価はBLEUなどの機械評価の他、GPT-5.5を用いたLLM as a judgeで行った(目検も実施している)[11]。比較対象としてGemma 4 31B(規模が大きく日本語に強いローカルモデル)とClaude Opus 4.6(フロンティアモデル)を用いた。これらは1-shot構成でCodexによるプロンプトチューニングを実施している[12]。

結果

結果は下表のとおり。最終モデルは2Bで31BのGemma 4を超え、Opus 4.6に迫る性能を出せた[13]。また、教師モデルであるMistral Large、Deepseek V4 Flash単体の性能を超えており、参照ドキュメントの活用やAgenticなデータ合成に効果があったことがうかがえる。

モデル / 手法BLEUchrFLLM as a judge
正解データ100.00100.005.00
Claude Opus 4.6 / 1-shot71.5475.344.69
Gemma-2-Llama-Swallow 2B / QLoRA + DPO77.2874.564.64
Gemma 4 31B / 1-shot67.3571.734.60
Gemma-2-Llama-Swallow 2B / QLoRA79.7682.374.60
Gemma-2-Llama-Swallow 2B / Full FT79.2182.004.53
Gemma 4 E2B / Unsloth LoRA final76.3778.604.35
Mistral Large 251249.6951.444.27
Deepseek V4 Flash52.7559.303.84
Gemma-2-Llama-Swallow 2B / Post training前44.8362.982.72
Gemma 4 E2B / Post training前16.7344.142.35

※ 太字は本件でPost trainingを行った結果。下線はPost training前の値。

所感

データ合成に50 USD、数時間の学習という規模で、2Bのモデルがフロンティアモデルのone shotに肉薄する性能となったのは正直驚きだった。敬語変換という狭く特化したタスクであるとはいえ、「蒸留可能な教師モデルで工夫したデータを合成し、SLMをPost trainingする」というレシピの費用対効果は高そう。

Kimi K3やDeepSeek V4 Flash 0731など高性能な大規模公開モデルが増加している、蒸留可能なモデルが増えてきている、SLMの性能が上がっている、APIコストが高くなってきている、…などなど最近の雰囲気からこの手のパイプラインも重要になりそう[14]。

脚注

[1] https://openrouter.ai/models?distillable=true、Open router的にはdistillableとなっているKimi K3やDeepSeek V4にとても期待が高い(実態としては利用規約を要確認)。SLMの対比としてはLLM(Large Language Model)、LRM(Large Reasoning Model)。現状だとマルチモーダル前提のモデルがほとんどで、LLMと表現して正しいのか謎な状況になっている。
[2] Small Language Model(小規模言語モデルまたは小型言語モデル)、スモールの定義はなんとなく10B以下くらいだと思うが「10Bが小規模なのか?」は謎である。
[3] 284B, 13B ActiveのLLM、MITライセンス、
DeepSeek-AI, et al, “DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence,” 2026.
[4] 675B, 41B ActiveのLLM、Apache-2 ライセンス、
Mistral AI, “Mistral Large 3 Model Card,” , 2025.
[5] データ合成で使用したコストは50 USD程度。
[6] 敬語変換の妥当性は確認、学習データとペルソナ・コンテキストの被りがないことも確認はしているが、合成データであるのでその分布とのLeakageは避けられないとは思う。
[7] 2BのSLM、https://ai.google.dev/gemma/terms & Llama3.3ライセンス(https://developer.meta.com/ai/llama3_3/license/)に沿って利用可能、
Kazuki Fujii, et al, “Continual Pre-Training for Cross-Lingual LLM Adaptation:Enhancing Japanese Language Capabilities,” in Proceedings of the First Conference on Language Modeling, 2024, pp. (to appear).
Naoaki Okazaki, et al, “Building a Large Japanese Web Corpus for Large Language Models,” in Proceedings of the First Conference on Language Modeling, 2024, pp. (to appear).
Youmi Ma, et al, “Building Instruction-Tuning Datasets from Human-Written Instructions with Open-Weight Large Language Models,” 2025.
[8] 実質5.1BのSLM、Apache-2 ライセンス、
Gemma Team, et al, “Gemma 4 Technical Report,” 2026.
[9] SFT済みadapterを出発点にDPO。強化学習では、正解メールをchosen、事実を壊す、敬語の誤用を入れる、余計な説明を混ぜる、構造を欠落させる、といったhard negativeをrejectedとした。
[10] パラメータにもよるのだろうが、長くても数時間で実行可能。SFTのみでもかなりの効果があったためRLは最終調整として実施している。
[11] データ合成時に「敬語の指針」を用い評価ルーブリックを作成しているため、LLM as a judgeと目検はほとんど整合していた。
[12] 検証時点で性能の良いものとして活用。JudgeがGPT-5.5であるため、Familyバイアスを避けるためOpenAI系列ではないものを使っている。
[13] Gemma-2-Llama-Swallow 2Bはとても性能が高い。日本語での継続学習等が効果を発揮しているように見える(このタスクとの相性もよさそうに思える)。適当なデータを入れてみた感じの動作も悪くなさそうなので、実データを使った検証をしてみたいところ。手作成データでしっかり検証したい気持ちもなくはないが、ぷるーふおぶこんせぷととしてはいったんこの結果で良いかなと思っている。(合成データの限界とLeakage疑いは避けられないのでスコアの評価は誇大広告気味である)
[14] 実際のところは良くわからないが、うまくデータ合成して使えるSLMを作るという方向性は悪くなさそうな予感。

脳からの知識蒸留(Distilling the Knowledge from a Brain) – 結果 –

前回からの続き。脳からの知識蒸留を目指し実験を行った。目的は効率的なハンドラベリングであり、今回のPoCでは生体情報をDeep Learningの蒸留と同じ方法、ソフトターゲットの設定で活用できるか?を検証した。

解いた問題と前提

データセット

脳からの知識蒸留を目指すため、前回作成したツールを用いて約330枚のバラの写真に対するハンドラベリングを行った。ハンドラベリング時に取得したデータは次の通り。

  • 病気の区分(黒星病・うどん粉病・健康)
  • 病気の進行度(軽症・中程度・重症)
  • 脳波(集中度を利用)
  • 分類にかかった時間(集中度の平均化のために使用)

元データはバラの病気診断サイト用に収集したもので、黒星病・うどん粉病・健康が1/3ずつとなるよう調整し、ハンドラベリングを実施した(各クラスのデータ数は同じ)。進行度は軽症が半分、中程度以上が半分な感じだが、データセット内の進行度の割合は調整していない。

モデル・学習の概要

今回は3クラス(黒星病・うどん粉病・健康)分類問題を(Convolution層+Pooling層)×2+分類用の層×2なCNNで解くシンプルな問題設定・モデルとした。転移学習や事前学習は行っていない。
脳からの知識蒸留が有効かを確認するため、下記4つのデータで学習し結果を比較した。

  1. 病気区分のラベルのみを用いた学習(普通の学習)
  2. 病気区分のラベルと進行度を併用した学習。病気進行度が高いほど病気区分ラベルの確信度が高くなるようにした。
  3. 病気区分のラベルと脳波を併用した学習。集中度が低いほど病気区分ラベルの確信度が高くなるようにした。(難しく考えなくても分類できたと言う意図[1])
  4. 病気区分のラベルと進行度と脳波を併用した学習。2.と3.の掛け算。

データセットを学習用75%・評価用25%に分割し、2エポック後の評価用データに対する正解率を比較した。学習データ・評価データに含まれる写真は4条件すべてで同一である(4条件でデータ分割による有利不利は生じていない)。loss関数として1.ではcategorical_crossentropyを、2.-4.ではkullback_leibler_divergenceを用いた。これは、2.-4.の正解データが教師の出力(本件では人間の確信度に相当する分布)でありバイナリ値ではない為である。

結果とまとめ

結果は次の通りであった。驚くべきことに[2]、Distilling the Knowledge from a Brainには効果があった。

  1. 通常の学習:正解率 37%
  2. 進行度の併用:正解率 37%
  3. 脳波の併用:正解率 41%
  4. 進行度+脳波の併用:正解率 49%

結果の解釈は難しいが、正解ラベル以外の情報(特に脳波)にも意味がありそうな感じである。データ数が少なく、そもそもの正解率が低いので何ともいえない感もあるので、今後データ数を増やして再度実験を行ってみたいところ。以下、硬い感じのまとめ。
AIが流行るにつれてハンドラベリングの重要性も上がっている[3]。本PoCではハンドラベリング時に脳波を測定し、それをモデル学習時に使用することで学習の効率化が出来る事がわかった。今後のラベリング作業では脳波を測定することがスタンダードになるだろう[4]。分類時の脳波付きデータセットが広く公開されることを期待する[5]。そのようなデータセットのもと、Distilling the Knowledge from a Brainの活用や脳波予測タスクをマルチタスクの1つとして解く学習によって、他のタスクの精度が上がっていくと推測される[6]。
(硬いまとめはここまで。個人的な思い的な考察はその他に続く。)

脚注

[1] この仮定は相当怪しい。
[2] こんな雑な問題設定・解き方で差が出るとは思わなかったが、複数回実行しても結果がほぼ同じであった。同じモデルにtrainを繰り返していないか確認したり、1.-4.の学習順番を変えてみたりもしたが同じ結果だった。びっくり。観測者効果的なもので脳波が変わったのだろうか?それはそれでびっくりだが。
[3] これはたぶん本当。実務では大きな課題。
[4] 脳波計測がスタンダードにはならないだろうが、取りやすい生体データが併用される可能性は感じた。特に心拍とか視線とか。
[5] 欲しい人がいれば今回のデータを公開してもよいかなーと思いつつ、雑にやったところを綺麗にするのが面倒なので、お蔵入りになりそうな予感がしている。
[6] 個人的にマルチタスクへの適用に可能性を感じている(参考論文「One Model To Learn Them All」)が、良い感じのデータが無いので試せていない。暇があったらやるかも。
“脳からの知識蒸留(Distilling the Knowledge from a Brain) – 結果 –” の続きを読む

脳からの知識蒸留(Distilling the Knowledge from a Brain) – 準備-

知識の蒸留(Knowledge Distillation)とは?

Deep learningの世界では知識の蒸留(Knowledge Distillation)が行われている。蒸留というと非常にかっこよい響きなのだが、やっているのは「大きなモデル」を用いて「小さなモデル」を「効率的に学習・構築」することである。
バラの病気診断モデルは以前紹介したように次の手順で構築した。

  • データ(写真)を集めて、ラベル(病気の有無など)を人が設定する(ハンドラベリング)。
  • ハンドラベリングしたデータを用いて、教師あり学習を利用し、植物の葉が病気か否かを判別する多値分類モデルを構築する。

上記で構築したバラの病気診断モデルはInception V3をベースにしておりネットワークの規模が大きい(ネットワーク規模の情報)。すなわち、高精度だが低速度である。バラの病気診断モデルをスマホに展開したい場合、若干精度を落としてでもネットワーク規模が小さく高速なモデル(例えばMobileNet)を使いたくなる。普通はデータだけ再利用してモデルは学習しなおすというプロセスが必要となるが、蒸留を用いると効率的な構築が可能となる。ざっくりとした仕組みは次の通りである。

  1. 病気診断モデル(Inception V3 / 先生)に学習用画像データを入力し、その画像に対する「健康・黒星病・うどん粉病・その他カビ系の病気」の4カテゴリの確率を得る。
  2. 病気診断モデル(Inception V3 / 先生)が出した4カテゴリの確率情報も用いて病気診断モデル(MobileNet / 生徒)を学習する。

普通は健康か否かという0/1の情報で学習するが、高精度モデルが診断した確率にも有用な情報が含まれているので、それを利用しようというアイデアである。実際に蒸留は効果があり、モデル圧縮をする場合によく用いられている。詳細はIntelの記事が良くまとまっていて、kerasを用いた実装例も載っている。

脳からの知識の蒸留(Distilling the Knowledge from a Brain)

バラの病気診断サイトを作ったときに時間がかかったのは、病気か否かのラベリングである。一般的に人間によるラベリングは高コストであり、しかも、間違いが含まれている。ハンドラベリングをしたことがある人ならわかると思うが、現実のデータには判定に困る画像も多い。加えて判定基準は人によって異なっている。同症状の画像に異なるラベルが貼られていることは少なくない。
ハンドラベリングは教師である人間から、生徒であるDeep Learningな各モデルへの情報伝達に他ならない。ということは蒸留の仕組みも利用できるはずである。人間が下した0/1の判断だけではなく、それに付随する判断確率の情報を用いれば高速・高精度なモデルが構築できるに違いない。問題は判断確率の分布情報をどうやって得るかであるが、近年のテクノロジーによって解決できる。すなわち脳波を計れば良い[1]。

脳波の測定とラベリング

今回、脳波の測定はNeuroSkyのMindWave Mobile 2で行った。このデバイスを用いてハンドラベリング時の脳波をはかり、その値をラベルの確度の一つとして利用する。MindWave Mobile2は1.5万円くらいで購入でき、python+thinkgearを用いてデータの取得が可能である(serialではなくpyserialが必要なことに注意)。なお、本件はMacで実施したのでWindowsではやり方が異なる可能性がある。
ライブラリはpipから導入できる。

pip install thinkgear
pip install pyserial

ライブラリ導入後、pythonを用いて

device = '/dev/tty.MindWaveMobile-SerialPo'
tg = ThinkGearProtocol(device)
for pkt in tg.get_packets():
  for d in pkt:
    if isinstance(d, ThinkGearAttentionData):
      val = d.value
      now = datetime.datetime.now()
      print("{},{}".format(now, val))

と言う感じでデータが取得できる(上記の例では脳波というよりは集中度をとっている)
今回は下画像のようなラベリング用簡易WEBアプリに脳波取得ロジックを組み込み、ラベリング実施時の脳波(特に集中度)を計測・保存した。ハンドラベリング時には0/1な病気判定だけでなく、その病気の進行度も選べるようになっており、迷いが生じると脳波に現れる[2]。モデル構築の学習時に脳波情報を併用することで、Deep Learning部の収束が早くなれば、脳からの知識蒸留ができた[3]と言えるのではないか。

実験の結果は次ページで報告。

脚注

[1] 別に脳波である必要は無い。むしろ、脳波は計測が難しく、このような用途には適していない。
[2] 実際のところ現れたと言えば現れたが本当に脳波なのかはかなり疑問である。前述の通り、心拍とか血圧とか目線とか判断までの時間とか脳波よりも測りやすくて効果がありそうな指標は多数存在する。
[3] 本件が誇大広告であることは認識している。が、Deep Learning関係の研究論文から著しく外れた言葉使いはしていない(と思う)ので激しい突っ込みは勘弁してください。