Qwen3-0.6B_WBD:ブラウザ・スマホ内で動く日本語を強化した小規模言語モデル

アプリケーション

1.Qwen3-0.6B_WBD:ブラウザ・スマホ内で動く日本語を強化した小規模言語モデルまとめ

・Qwen3-0.6Bに継続学習・強化学習を施し、日本語ベンチマーク平均スコアを+15.5ptに向上
・ブラウザ上での完全動作デモを公開。インストール不要・サーバー不要でスマートフォンからも試せる
・同モデルを使用したスマートフォン向けにexecutorchを用いたアプリ版の4bit量子化版も公開

2.なぜ0.6Bモデルをトレーニングしたのか?

大規模言語モデル(LLM)はどんどん賢くなっていますが、数学オリンピック金メダルレベルの問題を解いて欲しいと思う場面は滅多にありません。賢いモデルはパラメーターサイズが大きくなるため、高額なGPUがなければ動作させる事ができないというデメリットもあります。
直近で小規模言語モデル(SLM)が注目を集めたこともあり「ブラウザの中でAIが動かす」「スマートフォンの中でAIが動かす」という先進的な試みを見かける事も増えてきましたが、動作させるための技術的なハードルは高く、どの程度の速度/性能が実機で期待できるのかを把握するのが困難に思えました。
日常生活で有用と感じる機能を実現するためにはどの程度のパラメーターサイズがあれば十分なのか?
まずはオープンウェイトモデルとして広く採用されているQwen3 0.6Bをベースに継続学習で日本語の知識・語彙・推論能力を注ぎ込んで日本語性能を向上し、公に検証できるようにしたのが今回の「Qwen3-0.6B_WBD」です。

3.やったこと

実はQwen3-0.6B_WBDの前にゼロからフルスクラッチで事前学習したnanochat-jpを開発しています。残念ながら期待した性能が出せなかったので、事前学習が不足なのか、そもそもパラメーターサイズの能力限界なのかを確かめるために実績があるQwen3-0.6Bをベースに事後学習をやりなおした経緯です。

Qwen3をベースにした事により、既存の充実したオープンソースソフトウェア関連のエコシステム/ツール/インフラ関係を利用できるようになった事が大きな省力化に繋がりました。しかし、パラメーターサイズが関係すると思われる能力限界はやはり突破できませんでした。

学習は3つのフェーズで構成しています。
(1)SFT(教師ありファインチューニング)
日本語の語彙・知識・表現力、会話能力の底上げを行いました。使用データは独自に収集・合成したプライベートデータセットです。
(2)RL(強化学習)
推論能力をさらに引き上げました。「考えて答える」能力は0.6Bでも一定程度は伸ばせることがわかりました。
(3)QAT/PTQ(量子化認識学習/事後量子化)
torchtune(スマホ用)、WebLLM(MLC LLM)Transformers.js(ONNX)wllama(llama.cpp)の4種のスマホ/ブラウザでのLLM動作用ツールに向けてモデルフォーマットを変換し、最終的に安定性の観点からwllama向けの8bit GGUF量子化版を採用しました。スマートフォン動作向けのexecutorchを使った4bit量子化版(dahara1/Qwen3-0.6B-executorch-jp)も参考のために別途公開しています。

4.ベンチマーク結果

モデル  JCommonsenseQA  JNLI  JSTS  JSQuAD  平均
 Qwen3-0.6B(8bit量子化) 62.40% 32.20% 17.20% 76.00% 46.95%
Qwen3-0.6B_WBD(8bit量子化) 59.60% 72.60% 35.60% 82.00% 62.45%
JNLIが32.2% → 72.6%(+40.4pt)、JSTSが17.2% → 35.6%と大幅に改善しました。JCommonsenseQAがわずかに低下しているのは、知識が増えた結果、微妙なニュアンスの問いで迷いが出るケースが生じたため(「これ、どっちの意味でも取れるな…」という状態)です。
M-IFEVALについては、ベースモデルより数値が下がっている項目があります。評価セットには「英語以外の言語に翻訳してください」という指示が含まれており、日本語特化方向への学習と相性が良くないタスクが混在しているためです。また、安全性向上を目的としたトレーニング(知ったかぶりをしないスタンス)が悪影響を及ぼしている事も判明していますが、日本語固有のタスク(キーワード存在確認・文字数制約・箇条書き指定など)では十分な性能を示しています。

5.ブラウザ版のデモ

ブラウザデモはこちらから試せます。インストール不要・サーバー不要です。メモリが8GB以上搭載されていれば10年以上前のパソコンでも動きます。
WASM + llama.cppによる完全クライアントサイド動作で、8bit量子化の610MBモデルがブラウザ上で推論します。

6.スマートフォン動作について

更にサイズを小さくした4ビット量子化版モデルではスマートフォンアプリ上での動作も確認しています。
動作確認端末:AQUOS sense4 basic A003SH
 項目  内容
 発売日  2020年11月19日(約5年前の廉価スマートフォン)
 SoC  Qualcomm Snapdragon 720G
 RAM  3GB
 動作速度  17.20 token/second
最新のiphone、Google Pixelなどの機種では40 t/sを越える性能が出せる事も判明しており、0.6Bより大きなパラメーターサイズのモデルでも実用的な速度を出せる可能性が高いです。

ただし、Androidは実機動作を確認していますが、開発ツールをインストールしたパソコンとケーブルで繋いでモデルファイルを転送する手順が必要で、一般ユーザーが手軽に使える状態ではありません。iPhoneについてはメモリ使用量の制限を解除してもらうために、アプリリリースと同等のApple社による審査プロセスが必要なため、今回はXcodeを用いたシミュレーター上での動作確認のみです。「スマートフォンで動く」は本当ですが、「スマートフォンで誰でも簡単に使える」にはまだ実現にはハードルが高い事も判明しています。

ブラウザデモを前面に出しているのはこのような理由からです。

7.ローカル環境での使い方

ローカルでllama.cppを使って動かしたい場合は、以下のコマンドで起動できます。
./llama-server -hf webbigdata/Qwen3-0.6B_WBD \
–host 0.0.0.0 –port 8080 \
–ctx-size 2048 \
–temp 0.7 –top-p 0.8 –top-k 20 –min-p 0.01 –repeat-penalty 1.05
ブラウザで http://127.0.0.1:8080/ を開けばそのまま使えます。
Qwen3はTemperature=0などの決定論的な生成を使うと繰り返しが発生しやすいため、上記のサンプリングパラメーターの使用を推奨します。

8.0.6Bの限界

以下、本プロジェクト実施中に実感した事の振り返りです。

・「雑談」に対応の難しさ。複数ターンに及ぶ日常会話を軌道から外れずに整合性を保ち続ける事は0.6Bモデルでは非常に困難です。

・「幻覚対策」の難しさ。「知ったかぶり」や「能力を超えた事は出来ないと返答する」などを学習させるとベンチマークスコアは確実に落ちます。当てずっぽうでも何かアウトプットした方が部分点を貰える事は確かです。

・口調等の「キャラクターの一貫性」これも0.6Bモデルでは非常に困難です。やや古い文献によれば16B程度のモデルで実現している例もあるようなので、最新の手法を反映する事で将来的に8B程度のモデルで実現できたらな、と考えています。

・推論能力の向上は0.6Bでも十分向上できますが、直近の研究で2重にプロンプトを入力するだけモデルの性能がかなり向上する事が判明しており、無理に推論能力を実装する必要はないかもしれないと感じています。熟考した上で結論を間違うパターンや考え方は間違っているのに正答するケースもあるためです。
・推論速度は十分。人間の読書速度は3〜7 t/s (トークン/秒)と呼ばれており、これは十分達成できており、メモリ使用量さえ許容できればもう少しパラメーターサイズを大きくしても良いかもしれないと考えています。
今回の開発で「日本語日常会話能力の強化」にも取り組みました。結果として単発の応答品質は改善できましたが、複数ターンに及ぶ会話の整合性を保つことは0.6Bでは現時点の技術ではかなり困難な事が明らかになりました。
文脈を追う能力にはモデルのパラメータ数がかなり効いてくるようです。単発Q&Aや応答、要約・翻訳・短文生成などは十分に機能するので特化型モデルとして活用する方向性が良さそうと感じています。

9.まとめ・今後

0.6Bという超軽量モデルでも、継続学習と強化学習を組み合わせることで日本語ベンチマーク平均スコアを15ポイント以上引き上げることができました。
「端末の中で日本語AIが動く」という体験はまだ荒削りな部分もありますが、方向性としては有望と考えています。モデルの改善は引き続き進めていく予定です。
ぜひブラウザデモで試してみてください。ご意見・フィードバックは以下からお寄せください。

3.Qwen3-0.6B_WBD:ブラウザ・スマホ内で動く日本語を強化した小規模言語モデル関連リンク

タイトルとURLをコピーしました