| --- |
| language: |
| - en |
| - ja |
| license: apache-2.0 |
| tags: |
| - olmo |
| - causal-lm |
| - bilingual |
| - japanese |
| - from-scratch |
| pipeline_tag: text-generation |
| --- |
| |
| # OLMo-2-386M-JA |
|
|
| 英日バイリンガルの小規模言語モデル。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 | 8(GQA) | |
| | 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-4(cosine + min-LR 10%) | |
| | Effective batch | 128 seq ≈ 262K tokens | |
| | Optimizer | AdamW (weight_decay=0.1) | |
|
|
| ### Stage 2: CPT(Continued Pretraining) |
|
|
| | 項目 | 詳細 | |
| |------|------| |
| | データ | FineWeb-Edu (EN 60%) + CulturaX JA (JA 40%) | |
| | ドキュメント数 | 500K docs | |
| | LR | 1e-4(cosine) | |
|
|
| ### Stage 3: SFT(Supervised 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-6(linear) | |
| | Epochs | 2 | |
| | Effective batch | 64 | |
| | Loss | Cross-Entropy(assistant turns のみ) | |
|
|
| ### Stage 4: DPO(Direct Preference Optimization) |
|
|
| | 項目 | 詳細 | |
| |------|------| |
| | データ | allenai/ultrafeedback_binarized_cleaned | |
| | Loss | DPO sigmoid(β=0.1) | |
| | LR | 5e-7(linear) | |
| | 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)と比べて日本語トークン効率が大幅に向上しています。 |
|
|
| --- |
|
|
| ## 使い方 |
|
|
| ```python |
| 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 |
|
|
| 学習データに使用した各データセットのライセンスも確認してください: |
| - [FineWeb](https://huggingface.co/datasets/HuggingFaceFW/fineweb): ODC-By |
| - [Wikipedia](https://huggingface.co/datasets/wikimedia/wikipedia): CC BY-SA 4.0 |
| - [Tülu-3 SFT mixture](https://huggingface.co/datasets/allenai/tulu-3-sft-mixture): ODC-BY |
| - [UltraFeedback](https://huggingface.co/datasets/allenai/ultrafeedback_binarized_cleaned): MIT |
|
|
| --- |
|
|
| ## 引用 |
|
|
| 本モデルは以下の研究・成果物をベースにしています: |
|
|
| ```bibtex |
| @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} |
| } |
| ``` |
|
|