日本語LLMを一から自作して、ブラウザで動かして公開した話
「AIを作っている」と言うと、たいてい「APIを叩いているんでしょ?」と返ってきます。でも今回作ったのは、トークナイザーから事前学習まで、全部スクラッチの日本語LLMです。既存モデルの改造でもファインチューニングでもありません。
BuildersLoop の価値観のひとつは「作るを抽象論で終わらせない」。AIを語るなら、根っこから一度は自分の手で作ってみよう——そう思って挑戦した記録です。完成したモデルは、いまブラウザから誰でも触れます。
👉 実際に動かす:BuildersLoop AI(Hugging Face Space) — あなたのブラウザのGPUで動きます。
作ったもの
対話できる日本語のチャットAI「BuildersLoop AI」です。スペックはこんな感じ。
- サイズ:約 290M パラメータ(いわゆる小型モデル)
- 構成:nanoGPT 系のシンプルな GPT アーキテクチャ
- トークナイザー:自作の BPE(語彙 約40,000)
- 動作:サーバー無し。訪問者のブラウザ(WebGPU)で推論
① トークナイザーを自作する
LLMはまず、文章を「トークン」という小さな単位に区切るところから始まります。ここを既製品で済ませず、日本語コーパスから自分で BPE を学習させて語彙を作りました。
日本語は英語と違って単語の区切りが曖昧なので、語彙の作り方で品質が大きく変わります。ここはモデルの「土台」。一番地味だけど、一番効きました。
② 事前学習(Pre-training)
次に、大量の日本語テキストでモデルにひたすら「次の単語」を当てさせます。使ったデータと規模は:
- コーパス:日本語の大規模データ(CulturaX)+ 青空文庫 など
- 学習量:約 5B トークン
- アーキテクチャ:nanoGPT 系・約 290M
GPUを回し続けて、文章として成立する日本語が出てくるようになるまで。ここで「言葉のベース」ができます。
③ チャットできる形にする
事前学習しただけのモデルは、ただ文章の続きを書くだけ。これを「質問されたら答える」対話の形に調整して、ようやく会話ができるようになりました。
④ ブラウザで動かす(ここが面白い)
普通、AIチャットはサーバーのGPUで動かします。でもそれだとサーバー代がかかるし、人が増えると重くなる。そこで発想を変えて、「訪問者のブラウザのGPUで動かす」方式にしました。
具体的には、モデルを ONNX 形式に変換し、transformers.js + WebGPU でブラウザ上で推論させています。サーバーは一切計算しません。だから何人来てもサーバーは無料のまま、各自の端末で動く。返答はだいたい 1秒以内です。
正直なところ、まだ弱い
BuildersLoop の価値観は「Radical Sharing(包み隠さず共有する)」。なので正直に書きます。
290M は今のAIとしてはかなり小さく、雑談は自然ですが、知識を問う質問は苦手です。事実を堂々と間違えることもあります。それでも「小さいLLMなら、全工程を自分の手で動かせる」という挑戦としては、大きな一歩でした。
つまずきも色々ありました。量子化(モデルの軽量化)は何度も失敗して、結局フルサイズで公開。ブラウザ側のトークナイザー読み込みでもハマって、手書きで読み込む処理を書いて回避しました。このあたりは別記事で掘り下げる予定です。
これから
次は、もっと大きなモデル(1B級)と、コーディング対応。個人開発ではありますが、「日本発のモデルを自分たちで育てる」ところまで持っていきたいと思っています。
生成品質・アーキテクチャ・ブラウザ推論まわり、ツッコミは大歓迎です。
あなたのブラウザで、自作AIと話してみてください。
BuildersLoop AI を試す