language, license, tags, pipeline_tag
language license tags pipeline_tag
en
ja
apache-2.0
olmo
causal-lm
bilingual
japanese
from-scratch
text-generation

tokenizerから自作した英語日本語対応モデルアーキテクチャーはOLMo-2-386Mベース

LLM学習の勉強用に開発したモデルです。会話にはなりません。

英日バイリンガルの小規模言語モデル。OLMo-2 アーキテクチャをベースに、ランダム初期化から Pretrain → CPT → SFT → DPO の4ステージパイプラインで学習しました。

事前学習済みモデルの重みをダウンロードせず、AllenAI が公開しているアーキテクチャ設定(config.json)のみを使用してゼロから学習しています。


モデル概要

項目
アーキテクチャ OLMo-2縮小版
パラメータ数 ~386M
語彙数 65,536英日 BPE
コンテキスト長 2,048 tokens
精度 bfloat16
対応言語 英語 / 日本語

アーキテクチャ詳細

ハイパーパラメータ
hidden_size 1,024
num_hidden_layers 16
num_attention_heads 16
num_key_value_heads 8GQA
intermediate_size 4,096

学習パイプライン

ランダム重み初期化
      ↓
Stage 1: Pretraining    (~2B tokens, EN 70% / JA 30%)
      ↓
Stage 2: CPT / Annealing  (高品質データで継続学習)
      ↓
Stage 3: SFT            (~115K instruction samples)
      ↓
Stage 4: DPO            (UltraFeedback preference alignment)
      ↓
  本モデル

Stage 1: Pretraining

項目 詳細
データ FineWeb (EN 70%) + Wikipedia JA (JA 30%)
トークン数 ~2B tokens
LR 3e-4cosine + min-LR 10%
Effective batch 128 seq ≈ 262K tokens
Optimizer AdamW (weight_decay=0.1)

Stage 2: CPTContinued Pretraining

項目 詳細
データ FineWeb-Edu (EN 60%) + CulturaX JA (JA 40%)
ドキュメント数 500K docs
LR 1e-4cosine

Stage 3: SFTSupervised Fine-Tuning

データセット サンプル数 言語
allenai/tulu-3-sft-mixture 70,000 英語
kunishou/databricks-dolly-15k-ja ~15,000 日本語
lightblue/tagengo-gpt4日本語のみ 10,000 日本語
izumi-lab/llm-japanese-dataset 20,000 日本語
合計 ~115,000
項目
LR 5e-6linear
Epochs 2
Effective batch 64
Loss Cross-Entropyassistant turns のみ)

Stage 4: DPODirect Preference Optimization

項目 詳細
データ allenai/ultrafeedback_binarized_cleaned
Loss DPO sigmoidβ=0.1
LR 5e-7linear
Epochs 1

トークナイザー

英日バイリンガル BPE トークナイザーをゼロから学習しました。

項目
種類 ByteLevel BPE
語彙数 65,536= 2¹⁶
学習データ FineWeb 60K docs + Wikipedia JA 60K docs
特殊トークン <|endoftext|>, <|padding|>, <|user|>, <|assistant|>, <|system|>

OLMo-2 のオリジナルトークナイザーvocab=50,280と比べて日本語トークン効率が大幅に向上しています。


使い方

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "itacora/olmo2-386m-ja"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

messages = [{"role": "user", "content": "機械学習とは何ですか?"}]
input_text = tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
inputs.pop("token_type_ids", None)

with torch.inference_mode():
    output = model.generate(
        **inputs,
        max_new_tokens=200,
        temperature=0.7,
        top_p=0.9,
        do_sample=True,
        repetition_penalty=1.3,
    )

response = tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)

チャットテンプレート

<|user|>
{ユーザーの入力}
<|assistant|>
{モデルの返答}<|endoftext|>

学習環境

項目 詳細
GPU NVIDIA RTX 4090 (24GB VRAM)
フレームワーク PyTorch 2.4 + Transformers + TRL
精度 bfloat16 + gradient checkpointing
プラットフォーム RunPod

限界と注意事項

  • Pretrain データ量: Chinchilla 最適値386M × 20 = ~8B tokensに対して約 2B tokens のみ。言語能力・知識量ともに制限があります。
  • 繰り返し: 長い生成では同じ文が繰り返されることがあります。repetition_penalty=1.3 の使用を推奨します。
  • 事実の誤り: 知識が不十分なため、誤った情報を生成する場合があります。重要な用途には使用しないでください。
  • 日本語品質: SFT データの一部izumi-lab【P】 等のフォーマットマーカーが含まれており、日本語生成に影響することがあります。
  • 研究・実験目的: 本モデルはフルパイプラインの動作確認・学習実験を目的として作成されました。プロダクション用途には適しません。

ライセンス

Apache 2.0

学習データに使用した各データセットのライセンスも確認してください:


引用

本モデルは以下の研究・成果物をベースにしています:

@article{olmo2,
  title={OLMo 2: The best fully open language model to date},
  author={Team OLMo},
  year={2025},
  url={https://arxiv.org/abs/2501.00656}
}
Description
Model synced from source: Itaking/itakura_v4-model
Readme 1.8 MiB