おさかなLM は、「言語モデルは魔法ではない」ことを 手で触って確かめるための 小さな教材です。約870万パラメータの 言語モデルが、 サーバーを使わず あなたのブラウザの中だけで動きます。 さらに、もっと小さなモデルを その場でゼロから学習させることもできます。 必要なのは ブラウザだけ。アカウントも GPU も インストールも要りません。
7つのページ
このプロジェクトについて
おさかなLM は、GuppyLM (作者 arman-bd、MIT ライセンス)を 日本語化した派生プロジェクトです。モデル構造・学習ループ・トークナイザーの方式は 原作のまま、合成会話データとブラウザ側の体験を 日本語向けに 作り直しています。
日本語化にあたって トークナイザーを 変更する必要は ありませんでした。 ByteLevel BPE は 文字ではなく UTF-8 のバイトを単位に動くため、 日本語のコーパスで 学習し直すだけで 日本語を扱えます。 MeCab のような 分かち書きは 不要です。
モデルの中身
| おさかなLM | こざかなLM(ブラウザ学習) | |
|---|---|---|
| パラメータ | 8,726,016 | 約 170,000 |
| 層の数 | 6 | 2 |
| 1層の幅 | 384 | 64 |
| ヘッド | 6 | 4 |
| 読める長さ | 128 トークン | 64 トークン |
| 語彙 | 4,096 | 約 1,500 |
| 学習データ | 会話 6万件 | 会話 400件+自作 |
| 学習の場所 | CPU 4コア / 約10分 | ブラウザ / 約1分半 つづきからなら 約15秒 |
こざかなLM には 2つのモードがあります。ゼロからは でたらめな数字から
400ステップ(約1分半)。つづきからは あらかじめ学習しておいた土台
(kozakana_base.bin、約660KB)を読みこんで 60ステップ(約15秒)——
いわゆる ファインチューニングです。
モデルの形は どちらも同じで、どこから始めるかだけが ちがいます。
素朴な Transformer です。GQA も RoPE も SwiGLU も使っていません。 チャットの形式と 特殊トークンは 原作と完全に同じです。
<|im_start|>user
{ユーザーの発話}<|im_end|>
<|im_start|>assistant
{ぐっぴーの返事}<|im_end|>
使っている技術
- 推論 … ONNX Runtime Web(WebAssembly)。量子化した約9MBのモデルを読み込みます
- トークナイザー … ByteLevel BPE。HuggingFace tokenizers の実装を JavaScript に移植しています
- ブラウザ学習 … 順伝播・逆伝播・AdamW を 素の JavaScript で実装(
trainer.js)。 画面が固まらないよう Web Worker で動かします - ファインチューニング … 学習ずみの土台を float16 で配布し
(
kozakana_base.bin、約660KB)、読みこんでから 続きを学習します。 土台は ブラウザと同じエンジンで作っています(tools/pretrain_kozakana.mjs) - 学習(本体) … PyTorch。GPU なしの CPU でも 約10分で終わります
自分で 学習させる
リポジトリを取得して、次の3コマンドで データ生成から モデルの書き出しまで 行えます。
pip install -r requirements.txt python -m guppylm.prepare_data # 会話データ生成 + トークナイザー学習 python -m guppylm.train # モデルの学習 python tools/export_onnx.py # ブラウザ用に ONNX へ書き出し
会話の内容は guppylm/generate_data.py に すべて書かれています。
ここを書き換えれば、ぐっぴー以外の キャラクターにも できます。
ライセンスと クレジット
原作: GuppyLM by
arman-bd — MIT License
本プロジェクト: yandod/osakana-lm — MIT License