O-ya tech(g0083)'s Projects

GitHub
← 記事一覧に戻る Back to Articles

【開発記】18MBの極小モデルで変換キーをゼロへ――ZeroConvert-IMEの独自モデル学習の全軌跡 【DevLog】Pushing 18MB SLMs to the Limit: The Evolution of Custom Model Training in ZeroConvert-IME

「変換キーを押すという操作そのものを、過去のものにしたい」

そんな構想から始まったのが、次世代AI日本語IME「ZeroConvert-IME」の開発です。人間がスペースキーや変換キーを連打して意図した漢字を探すのではなく、文脈を完璧に理解した極小AIが、打鍵したそばからストリーミングで自動確定していく世界を目指しています。

しかし、PCやスマートフォンのバックグラウンドで常駐し、1打鍵ごとにリアルタイム推論を行うIMEにおいて、巨大な7B〜70Bモデルを動かすことは不可能です。許されるリソースは「メモリ数十MB、CPU推論で20〜30ms以内」という極限の制約でした。

本記事では、azooKeyの zenz-v3.2-xsmall(6層・約26.7Mパラメータ)を出発点に、独自モデル「ZeroCon Model Nano / Standard」をどのように鍛え上げ、わずか18.7 MiBのサイズで総合正解率92.7%・タイポ補正78%を叩き出すに至ったのか、その学習の歩みと泥臭い実験の全貌を記録します。

1. 出発点と立ちはだかった「極小モデルの限界」

ベースとしたモデルは、azooKeyプロジェクトが公開している日本語変換モデル zenz-v3.2-xsmall(純粋 Apache-2.0ライセンス)です。6層・26.7Mという小ささで基本的なかな漢字変換をこなす素晴らしいモデルですが、実用IMEとして「無変換での自動確定」を託すには、以下の致命的な課題がありました:

  • 文脈による漢字選択の甘さ: 同音異義語(例:「きかん」「こうしょう」など)で前後の文脈を汲みきれず、初手で外す確率が高い。
  • 専門用語・四字熟語・複合文節の弱さ: パラメータ数が少ないため、少し難度の高い熟語になると途端に誤変換が発生する。
  • 英数字・記号・空白の破壊: プログラミングのパスやURL、半角スペースを含む文章を入力すると、勝手に全角化されたり空白が消滅したりする。
  • 文末の幻覚(Hallucination): 文末(</s>)付近で不要な句点や特殊トークンを勝手に生成してしまう。

2. スーパー教師「Standardモデル(90.5M)」の育成

「6層の極小モデルに直接難語を詰め込もうとしても容量(キャパシティ)が足りず破綻する」――。そこで取ったアプローチが、まず12層・90.5Mの『ZeroCon Model Standard』を育成し、圧倒的な知識を持つ“スーパー教師”を作ることでした。

Standardシリーズでは、Argon-4マージや広範なコーパス学習を重ね、難関ベンチマーク(250-Hard)で正解率98.0%を記録する高精度モデルを構築。このStandardを「絶対に答えを曲げない教師(Frozen Super-Teacher)」として固定し、Nanoへの蒸留へ進む布石としました。

3. Nano v4 で導入した5大ブレイクスルー

こうして誕生したのが、現行の主力モデル「ZeroCon Model Nano v4」です。パラメータ数・層数はBase Nanoと同じ6層・26.7Mのまま、以下の技術を組み込みました。

① 高ランク DoRA(r=64, alpha=128)& 6層別学習率

通常のLoRAではなく、重みの大きさと方向を分離して更新するDoRA (Weight-Decomposed Low-Rank Adaptation)を採用。ランクを旧Nano v3(r=16)の4倍である r=64 に引き上げ、FFNの記憶容量を一気に拡大しました。

さらに、浅い層(構文把握)の学習率は 0.45x に抑え、深い層(語彙選択)の学習率を 1.35x に引き上げる「層別学習率」を適用。学習後にAdapterを重み行列へ完全統合(Merge)するため、推論時の計算コストやファイルサイズは1バイトも増えません。

② Target-Corrected 二重アンカー蒸留

知識の蒸留において最大の罠は「教師モデル自身の誤答」です。教師が間違った確率分布をそのまま生徒に真似させると、生徒も同じバグを学習してしまいます。

💡 Target-Corrected ロジットスワップ

教師(Standard)やBase Nanoが誤答しているトークン位置を自動検出し、そのトップ1ロジットを「正解トークンのロジット」と強制的にスワップした補正ソフト分布(\(P_T^{\text{corr}}\))を生成。6,000語彙に及ぶダークナレッジ(暗黙の言語感覚)を保全しながら、教師の誤答引きずりを完全にゼロ化しました。

③ Induction Head の自己コピー抑止対照マージン

6層という浅いTransformerを詳細に解析したところ、Attentionの「Induction Head」が暴走し、第1文節で出力した漢字を第2文節へ無意味に繰り返してしまう自己コピー現象が頻発していることを突き止めました。

系列内で既に出現した表記をコピーしようとする動きを自動検知し、対照学習のマージン閾値 \(\gamma\) を通常の 2.2 から 3.0 へブースト。文節の変わり目での重複バグを根絶しました。

④ 半角スペース二重トークナイズ([UNK]=0 / \u3000=567)

学習時の推論エンジン(llama-server)と実IME(Swift / Kotlinエンジン)で、半角空白の内部トークナイズ表現が異なるという「泥臭い実装ギャップ」がありました。どちらの入力経路を通っても空白が失われないよう、両パターンの系列を並行して学習させ、空白保持率100%を達成しました。

4. 成果:ベースモデルからどこまで進化したか?

開発評価ベンチマーク(基本・文脈230問+高難度250問=全480問)における単体性能の比較です:

モデル 層数 / パラメータ サイズ 基本・文脈 (230問) 高難度 (250問) 全480問 総合正解率 CPU平均遅延
Base zenz-v3.2 Q4_K_M 6層 / 26.7M 17.6 MB 181 (78.7%) 172 (68.8%) 353 / 480 (73.5%) 27.8 ms
旧 Nano v3 IQ4_NL_emb8 6層 / 26.7M 18.7 MB 190 (82.6%) 176 (70.4%) 366 / 480 (76.2%) 24.0 ms
Standard v3 F16 (教師) 12層 / 90.5M 183.2 MB 207 (90.0%) 245 (98.0%) 452 / 480 (94.2%) 30.1 ms
新 Nano v4 IQ4_NL_emb8 6層 / 26.7M 18.7 MB 206 (89.6%) 239 (95.6%) 445 / 480 (92.7%) 23.0 ms
新 Nano v4 Q6_K 6層 / 26.7M 23.3 MB 208 (90.4%) 245 (98.0%) 453 / 480 (94.4%) 24.9 ms

わずか18.7 MBのサイズでありながら、ベースモデルから92問(+19.2ポイント)改善。180MB超の12層スーパー教師とほぼ同等の精度を、6層の超軽量モデルで再現することに成功しました。

5. タイポ補正の劇的進化:メインモデル1本化への大改革(v0.2.2)

ZeroConvert-IMEの最大の強みは「変換操作の削減」ですが、キーボード入力で最も変換操作を増やしている元凶は「タイポ(打ち間違い)」です。

従来のバージョンでは、タイポ補正専用のCorrectorモデルを独立した常駐プロセス(ポート18090)として動かしていました。しかしこれには「常駐サーバーが2重にメモリを消費する」「プロセス間通信で遅延が増える」「補正正解率が20.8%と実用に遠い」という三重苦がありました。

「変換モデル自身がタイポを直す」統合モデルへの挑戦

v0.2.2では独立サーバーを完全撤廃。メイン変換モデル(Nano v4)1本の中で、読み候補の尤度判定・表層リランキング・漢字変換を一気通貫で処理する新アーキテクチャへ刷新しました。

  • QWERTYキーボードの物理配列(隣接キー誤打鍵)をモデル化したシミュレーションデータを投入。
  • 正常な入力に対して余計な補正を行わない「Abstain(自制)学習」を徹底。
  • タスク間勾配干渉(変換タスクの勾配と補正タスクの勾配が打ち消し合う現象)を測定し、衝突を防ぐ学習制約を導入。

この結果、常駐メモリを半減させながら、タイポ補正正解率は 20.8% → 78.0%(実質86.7%) へと劇的に跳ね上がりました。

6. 極限の量子化技術:18.7 MiBの秘密(IQ4_emb8)

通常の4bit量子化(Q4_K_M)では、単語の意味の入り口である「Token Embedding」や最後の「Output Tensor」まで4bitに潰してしまい、稀少な漢字や記号の判別力が低下します。

そこで採用したのが「IQ4_NL + Q8_0」のハイブリッド量子化です。重みの大部分を占めるFFN中間層には重要度マトリクス(imatrix)に基づく高精度非線形4bit(IQ4_NL)を用いつつ、語彙表現を司るEmbedding層・Output層を8bit(Q8_0)で保護。これによって、非量子化F16と遜色ない表現力を保ったまま、18MB台への極小化を成し遂げました。

7. 徹底して「ズル」を許さない評価哲学

言語モデルの開発で最も陥りやすい罠が「評価データへの過学習(データリーク)」です。開発テストで100%が出ても、実IMEで触った瞬間にボロボロでは何の意味もありません。

🛡 データ分離と退行テストの鉄則
  • 予約キーのSHA256照合: 評価ベンチマークに含まれる1,626の語彙・キーと学習コーパスの重複を自動検査し、リーク0件(PASS)を数学的に証明。
  • 退行(Regression)の厳格監視: 難語が直っても、日常会話の漢字や数字・URLが1つでも壊れたらそのモデルは即時不採用。
  • 失敗した実験の完全記録: 「R7」など、更新制約を試みて目標に届かなかった実験もすべてログ・考察とともにリポジトリへ残し、次の一手の糧とする。

8. おわりに:変換キーのない未来へ

極小エッジSLMの可能性は、まだ始まったばかりです。「小さなモデルだから賢くない」のではなく、「用途を研ぎ澄まし、徹底した蒸留と数学的工夫を注ぎ込めば、18MBのモデルでも驚異的な知性を発揮できる」ということを、ZeroCon Modelの開発を通じて確信しました。

現在、ZeroConvert-IMEはWindows版インストーラーおよびAndroid版APKとしてGitHub Releasesで無料公開しています。ぜひ、変換キーを押さずに思考のスピードで文字が紡がれていく感覚を体験してみてください。

ZeroConvert-IME aims to eliminate conversion keypresses entirely. In this comprehensive technical log, we document how we pushed a 6-layer 26.7M edge SLM to achieve 92.7% benchmark accuracy, 78% typo correction, and 23ms latency within an astonishing 18.7 MiB footprint.

ZeroConvert-IME を試してみる

Windowsインストーラー・Android APKをGitHub Releasesからダウンロードできます。

最新版をダウンロード ↗ GitHubリポジトリ ↗