評価
元の Qwen3.5-0.8B・v2 と、同じ方法・同じ設定で測りました(llama.cpp、GGUF f16。v2.5 の思考ありの理科・算数は Kaggle の GPU、それ以外は Mac で実行)。
Table with columns: Qwen3.5-0.8B(元), v2, v2.5(このモデル) | Qwen3.5-0.8B(元) | v2 | v2.5(このモデル) |
|---|
| 理科(MMLU-Pro の物理・化学・生物 300問、10択)・思考あり、上限 4,096 | 1.3% | 4.0% | 36.1%(3回の平均) |
| 同・思考なし、上限 4,096 | 33.0% | 10.7% | 31.3% |
| MGSM 日本語(算数の文章題 250問)・思考あり、上限 4,096 | 4.4% | 0.0% | 27.4%(2回の平均) |
| 同・思考なし、上限 4,096 | 15.2% | 5.2% | 28.0% |
| JCommonsenseQA(1,119問、生成で答える/選択肢の確率で選ぶ) | 42.6% / 69.3% | 71.6% / 70.8% | 71.0% / 71.7% |
| 一般常識30問(日本語/英語) | 17 / 21 | 22 / 24 | 22 / 22 |
| 中国語の混入(キャラ設定なしの会話) | 1% | 0% | 0% |
| 「私は AI なので」と断る回答(キャラ設定なしの会話) | 17% | 1% | 5% |
| 会話 590回答のうち、打ち切り | 21 | 2 | 1 |
| 思考ありで会話・知識の質問(340回答)をしたとき、答えが空になった割合 | 76% | ― | 0% |
- 生成の設定:思考ありは temperature 1.0、top_p 0.95、top_k 20、presence_penalty 0
- 元のモデルは思考ありだと長く考えすぎて、上限 4,096 までに考え終わらないことがほとんどです(理科で 99%。会話の質問の空の答えも、ほとんどがこれです)。上限を伸ばすと解ける問題が増え、別の環境で測ったときは、思考ありで上限 32,768 なら理科 27%・上限 8,192 なら MGSM 25%、思考なし(答えの中で英語で長く考える)で上限 8,192 なら理科 41% でした
- 元のモデルより強くなったわけではありません。 同じ上限 4,096 で比べると、理科は元のモデルの思考なし(33.0%、答えの中で長く考える)とほぼ同じです。v2.5 は、短い思考(中央値約 280 トークン)でそこまで届くのが違いです
- 思考なしでも、答えの前に短く手順を書いて解きます(理科 31.3%、MGSM 28.0%。答えの長さの中央値は理科 237・MGSM 105 トークン)。算数は思考ありと思考なしでほぼ同じです
- 理科は 300問なので、測るたびに揺れます。v2.5 を同じ設定で3回測ると 37.7%・32.3%・38.3% でした(MGSM は 27.2%・27.6%)
使い方
transformers 5 系(5.17 で確認)を使ってください。
from transformers import AutoModelForImageTextToText, AutoTokenizerimport torch model_id = "Takenoko12345678/Qwen3.5-0.8B-Japanese-SFT-v2.5"tok = AutoTokenizer.from_pretrained(model_id)model = AutoModelForImageTextToText.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto") messages = [{"role": "user", "content": "時速 60 km で 2 時間 30 分走ると、何 km 進みますか?"}]# 理系の問題は思考あり(True)がおすすめ。指定しなければ思考なしtext = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, enable_thinking=True)inputs = tok(text, return_tensors="pt", add_special_tokens=False).to(model.device)out = model.generate(**inputs, max_new_tokens=4096, do_sample=True, temperature=1.0, top_k=20, top_p=0.95)print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
- チャットテンプレートは元のモデルのものです。
enable_thinking を指定しなければ思考なしになります
- llama.cpp のサーバーは、指定しないと思考ありで動きます。思考なしにするには、リクエストに
"chat_template_kwargs": {"enable_thinking": false} を付けてください。LM Studio では「思考」の切り替えで選べます
推奨の生成設定
- 思考あり(理科・算数の問題など):temperature 1.0、top_k 20、top_p 0.95、生成の上限は 4,096 以上
- 思考なし(会話):temperature 1.0、top_k 20、top_p 1.0、presence_penalty 2.0。llama.cpp では
repeat_penalty 1.1 もおすすめです
- 事実を答えさせる・選択問題:temperature 0
学習の詳細
公開している v2 から、2段階で全部の重みを追加学習しました(画像の部分は固定)。
1段目:理系の思考・コード(9,692件、学習率 1e-5、1周)
2段目:会話でも思考を使えるようにする(4,600件、学習率 5e-6、1周)
1段目だけのモデルは、思考ありで理系以外の質問をすると、96% で答えを考える部分に書いたまま終わっていました(思考ありの手本が理系だけだったため)。そこで、次のデータで短く追加学習しました。
Table with columns: データ, 件数| データ | 件数 |
|---|
| 会話・コード・作文の質問と答えはそのままに、その間に入る短い思考(1〜3文)を先生役 Qwen3.8-27B が書いたもの | 1,600 |
| 1段目のデータから選んだ復習用(半分は理系の手本) | 3,000 |
- 環境:Kaggle の T4。fp32 で計算し、bf16 で保存しました(8bit Adam、出力層の損失は 1,024 トークンずつ計算)
- 理系の問題の出典:算数は openai/gsm8k の train(MIT。評価の MGSM は GSM8K の test から作られているので重なりません)、数学は DeepMath-103K(MIT)、理科は OpenScienceReasoning-2(CC BY 4.0、NVIDIA。評価の MMLU-Pro と文面が重なるものは除外)
- 思考の手本は短いもの(日本語で数行)だけにしました。元の 0.8B は長く考えすぎて止まらなくなるためです
既知の問題
- 事実の誤り(幻覚)がまだ多いです。 0.8B は覚えられる知識が限られ、知らないことをもっともらしく作ります。例:「土星って何色なの?」に、質問からずれて「土星の6番目の衛星『トラバサ』」という存在しない衛星の話を作りました。事実を調べる用途には使わないでください
- 思考で相手の意図を決めつけることがあります。 例:ふざけた一言(「ぐへへへへw」)を「不適切な言葉遣い」と考えて、謝るだけの返事をしました
- 元のモデルより短く考える分、長く丁寧に計算すれば解ける問題を落とします。 理科の知識の問題(生物)は元のモデルとほぼ同じですが、計算の問題(化学・物理)は元のモデルに及びません
- ツール呼び出し(function calling)はできません。 元のモデルはできますが、この追加学習で失われました(電卓などのツールを渡しても呼ばずに自分で答えます)
- 思考ありでも、理科の約2割は上限 4,096 トークンまで考え終わりません
- 「私は AI なので」と断る回答が、v2(1%)より少し増えています(5%)
- 深刻な悩みの相談に、一般論や的外れな答えを返すことがあります。人向けに公開する場合は、相談窓口の案内などの安全策を別に用意してください
- 元のモデルの MTP(先読み用の層)の重みは含まれていません(
config.json の mtp_num_hidden_layers は 0)
ライセンスと帰属表示
Apache License 2.0。元のモデル Qwen/Qwen3.5-0.8B(Apache 2.0)の派生モデルです。
変更点:v2 の学習(v2 の説明を参照)に加えて、上記の2段階で追加学習しました。チャットテンプレートとトークナイザーは元のモデルのものです。
学習データ: