217 lines
6.2 KiB
Markdown
217 lines
6.2 KiB
Markdown
|
|
---
|
|||
|
|
language:
|
|||
|
|
- en
|
|||
|
|
- ja
|
|||
|
|
license: apache-2.0
|
|||
|
|
tags:
|
|||
|
|
- olmo
|
|||
|
|
- causal-lm
|
|||
|
|
- bilingual
|
|||
|
|
- japanese
|
|||
|
|
- from-scratch
|
|||
|
|
pipeline_tag: 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 | 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}
|
|||
|
|
}
|
|||
|
|
```
|