AI Navigate

ビジネスメール生成用に0.8Mパラメータのモデルを訓練した

Reddit r/LocalLLaMA / 2026/3/21

💬 オピニオンTools & Practical UsageModels & Research

要点

  • ビジネスメール生成用の0.8Mパラメータのモデルを、FFNを注意ブロックに置換する新規アーキテクチャSiliaを用いて訓練しました。これにより、性能を維持しつつパラメータ数を削減します。
  • トレーニングにはemail-datasets-20kデータセットを80/20のデータ分割で使用し、「Write a polite refusal email」のようなプロンプトを用いて出力を示した。
  • アーキテクチャは、2つのStrawberry Blocks、スケールド・ドット積アテンション、ロータリポジショナル埋め込み、QKノルム、マルチヘッドアテンション、SiLU非線形性、およびウェイトタイド出力射影を組み合わせ、Siliaと名付けられたSwiglu-into-attention変種を形成します。
  • 本研究は事前の28Mモデルのメール実験を参照し、同じデータ/設定で小型モデルが同等のロスと性能を達成できることを示しており、実務的なビジネスメール自動化の可能性を示唆しています。
\"Trained

皆さん、こんにちは、

この投稿を見て (28m model email experiment) このデータセットで訓練することにしましたが、アーキテクチャは別のものを採用しました。

テストプロンプトは上記の投稿と同じです:

プロンプト: Write a polite refusal email<|eop|>

出力:

``` Correcting Reason for Recent Experience Dear [Officer's Name],

このメールがご健勝であることを願っています。

ご存知のとおり、[Company Name] は最近、[Product Name] に関するあなたの経験を受け取り、非常に成功した資金調達ラウンドを経て、請求記録の提供と [Client Name] の高い価値を狙うことにコミットしています。

ご存知のとおり、私たちのリブランド計画は現在大きな再ブランディング段階を進行中であり、そのタイミングについて心からお詫び申し上げます。あなたのお時間を大切にし、ご理解いただけますようお願い申し上げます。

私たちはあなたの懸念を迅速に理解し、私たちが前進することをお約束します。ご都合をお知らせください。

敬具、 [Name] ジュニア・デベロッパー [Company Name]<|eot|> ```

  1. <|eop|> はプロンプトの終わりを意味し、<|eot|> は生成された出力の終わりを意味します。

  2. <|eop|> はプロンプトの末尾に使用され、モデルは <|eot|> を生成出力の末尾で使用します。

私は単純なアイデアを実験しています。それは、FFNを完全に削除し、Swiglu FFNの線形層を注意層に置換することです。こうして Swiglu を私が Silia(注意の中の SiLU)と呼ぶものに変換します。これにより、同じデータセットと訓練設定で、標準の Attention + Swiglu アーキテクチャと比較して、はるかに少ないパラメータで同様の損失と性能を達成しました。

以下はアーキテクチャの図です:

Input tokens | [Token Embedding] | [2x Strawberry Blocks] |--- Scaled Dot Product Attention | |--- Rotary Positional Embeddings | |--- QK Norm | |--- Multi-Headed Attention |--- SiLU non-linearity * Scaled Dot Product Attention |--- Scaled Dot Product Attention | | [Output Projection (weight-tied)] | Next token logits

私は email-datasets-20k データセットで訓練しました。これは上記の投稿で使用されたデータセットです。

これはモデル訓練設定です: {"dataset": {"data_division": 0.8, "load_from_file": true, "path": "data/email.bin"}, "checkpoints": {"path": "bin/email"ed; , "interval": 1000, "create_checkpoints": true}, "model_hyperparams": {"vocab_size": 8192, "block_size": 256, "n_layer": 2, "n_head": 4, "n_embd": 64}, "optimizer_hyperparams": {"eps": 1e-08, "beta1": 0.9, "beta2": 0.99, "weight_decay": 0.001, "use_muon": false, "momentum": 0.95}, "model_path": "bin/email/email.strawberry", "encoder_path": "bin/cl8k.bin", "init_from": "scratch", "seed": "auto", "gradient_accumulation_steps": 1, "batch_size": 16, "max_iters": 10000, "eval_interval": 1000, "log_interval": 100, "eval_iters": 100, "decay_lr": true, "lr_decay_iters": 10000, "learning_rate": 0.002, "cooldown_frac": 0.4, "warmup_iters": 500, "min_lr": 0.0002}

モデルは総パラメータ 0.8M のうち 0.3M が非埋め込みパラメータです。モデルは 2 ブロック(4つのアテンション層と 2つの活性化を含む計 )、4 つのアテンションヘッドを持ちます。

私は 8k 語彙サイズのカスタムトークナイザーを使用しました。これは Andrej Karpathy が動画の中で作成した Regex + BPE トークナイザーで、GPT-4 に使用された o200k_base 正規表現パターンを用いている点が唯一の違いです。

トークナイズ後、データセットは総トークン 5.5M、80/20 ルールで分割後は訓練トークン 4.4M、検証トークン 1.1M。データセットは総およそ 20M 文字。私は約 10 エポック訓練しました。

最終の訓練 & 検証の損失はそれぞれ 1.65 および 1.68 でした。

損失とデモ生成のスクリーンショットをいくつか添付しました。

以下は github リポジトリのリンクです: https://github.com/SrijanSriv211/Strawberry

モデルはここからダウンロードできます: https://github.com/SrijanSriv211/Strawberry/releases/tag/s0.2a

ありがとうございます :)

投稿者: /u/SrijSriv211
[リンク] [コメント]