概要
- GuppyLM は約 9Mパラメータ の小型LLMで、魚のキャラクターとして会話
- Colabノートブック1つ・5分 で誰でも訓練・会話可能
- 60,000件の合成会話データ からゼロから学習
- シンプルなVanilla Transformer構成 で理解しやすい設計
- 性格や会話トピックもカスタマイズ可能 な教育用プロジェクト
GuppyLMとは何か
- GuppyLM は、 小型LLM として魚(Guppy)のキャラクターを演じるモデル
- 短く、すべて小文字 の文章で水槽や食べ物、光など魚らしい話題を語る
- 人間の抽象的な概念 (お金、スマホ、政治など)は理解しない設計
- 60種類のトピック (挨拶、感情、温度、食べ物、光、水、夜、孤独、泡、反射、夢、友達、冗談など)に沿った会話データを合成
- HuggingFace から事前学習済みモデルをダウンロードし、すぐに会話可能
モデルアーキテクチャ
- パラメータ数 :8.7M
- 層数 :6
- 隠れ次元 :384
- ヘッド数 :6
- FFN :768(ReLU)
- 語彙数 :4,096(BPE)
- 最大シーケンス長 :128トークン
- 正規化 :LayerNorm
- 位置埋め込み :学習済み
- LMヘッド :埋め込みと重み共有
- バニラTransformer :GQA、RoPE、SwiGLU、early exitなしのシンプル構成
性格と会話スタイル
- Guppy は短く、好奇心旺盛で少し間抜けな性格
- 水、温度、光、振動、食べ物 など五感的な体験が中心
- 「食べ物」への執着 が強い
- 人間の複雑な話題 は一切理解しない
- 一回ごとのやりとり(シングルターン) で安定した出力
学習データとデータセット
- HuggingFaceデータセット :arman-bd/guppylm-60k-generic
- サンプル数 :60,000(訓練57K/テスト3K)
- 形式 :{"input": "...", "output": "...", "category": "..."}
- カテゴリ数 :60
- 合成テンプレート を用いた会話生成
- 30種類の水槽オブジェクト
- 17種類の餌
- 25種類の活動
- 60テンプレートから約16,000通りの出力
プロジェクト構成
- guppylm/
- config.py:ハイパーパラメータ管理
- model.py:バニラTransformer実装
- dataset.py:データ読み込み・バッチ化
- train.py:訓練ループ(コサインLR・AMP対応)
- generate_data.py:会話データ自動生成
- eval_cases.py:テストケース評価
- prepare_data.py:データ準備・トークナイザ訓練
- inference.py:チャットインターフェース
- tools/
- make_colab.py:Colabノートブック自動生成
- export_dataset.py:データセットHuggingFaceアップロード
- dataset_card.md:データセットREADME
設計のポイント
- システムプロンプトなし :全学習サンプルが同一プロンプトで、性格は重みに直接埋め込み
- シングルターン会話 :128トークン制限により複数ターンは出力が崩れるため採用せず
- バニラTransformer採用 :小規模モデルでは複雑な構造は不要
- 合成データ利用 :一貫した性格・話題を保つためテンプレート合成で大量生成
クイックスタート
- 事前学習済みモデルで即チャット :Colabで全セル実行
- 自分で訓練 :T4 GPU選択、全セル実行でデータ取得・トークナイザ訓練・モデル訓練・テストまで完了
- ローカルチャット :
pip install torch tokenizerspython -m guppylm chat
ライセンス・利用例
- MITライセンス
- 性格や会話テンプレートを自由にカスタマイズ可能
- 独自キャラクターへの応用も容易
まとめ
- GuppyLMは教育・実験用に最適な小型LLM
- LLMの基本構造・学習・推論の全工程を体験可能
- 大規模モデルのブラックボックス感を払拭する教材
- 手軽にカスタムLLMを構築・拡張できる設計