246 lines
11 KiB
Markdown
246 lines
11 KiB
Markdown
---
|
||
language:
|
||
- ja
|
||
- en
|
||
license:
|
||
- llama3.3
|
||
- gemma
|
||
library_name: transformers
|
||
base_model:
|
||
- tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.5
|
||
tags:
|
||
- llama3
|
||
- sft
|
||
- japanese
|
||
- aituber
|
||
- roleplay
|
||
- chat
|
||
pipeline_tag: text-generation
|
||
---
|
||
|
||
# ArrowCanaria-Llama-8B-SFT-v0.1
|
||
|
||
## モデル概要
|
||
|
||
**ArrowCanaria-Llama-8B-SFT-v0.1** は、AItuber(AI VTuber)向けに雑談性能を重視して設計された日本語特化の8Bパラメータ言語モデルです。
|
||
|
||
多くの日本語LLMは翻訳調の硬い文体や、定型的なテンプレート応答に陥りがちです。本モデルは「AItuberとして視聴者と自然に雑談できるモデル」を目指し、**雑談・ロールプレイ(RP)・推論・日本語の自然さ**を高い水準で獲得することを目標に開発されました。テンプレート的・機械的な応答ではなく、**自然な日本語で人間らしく回答できること**が最大の特徴です。
|
||
|
||
本モデルは `tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.5` をベースに、高品質な日本語合成小説データセットによる継続事前学習(CPT)でドメイン知識を拡張した後、Chat Vectorマージで対話能力を復元し、さらに17.5万件超の合成データセットによる3フェーズのカリキュラムSFTを実施して構築されています。独自のデータ生成フレームワーク **SDG_LOOM** によって作成された高品質なデータと、EQ(感情知性)を優先する段階的な学習率設計により、従来のモデルよりも効率的かつ効果的なトレーニングを実現しています。
|
||
|
||
### 想定ユースケース
|
||
|
||
- **AItuber / AI VTuber**: 配信中のリスナーとの雑談・コメント対応
|
||
- **チャットボット**: 自然な日本語での日常会話・悩み相談
|
||
- **ロールプレイ**: キャラクターを演じた対話・創作支援
|
||
- **汎用アシスタント**: 知識応答・推論・ツール呼び出しを含む幅広いタスク
|
||
|
||
### 主な特徴
|
||
|
||
- 🗣️ **自然な日本語応答** — 定型文や翻訳調を排した、人間らしい対話。相談・共感・傾聴といった感情的な応答にも対応し、会話相手に寄り添った回答を生成する
|
||
- 💬 **高い雑談性能** — 日常会話・相談・共感的応答に強く、AItuberとしてリスナーと自然にコミュニケーションできる対話能力を持つ
|
||
- 🎭 **RP・キャラクター対話** — 一貫した人格・感情表現を持ったロールプレイ対話が可能。キャラクターの感情の揺れや対話の駆け引きを表現できる
|
||
- 🧠 **推論力** — 論理的思考・数学的推論の基礎を保持。高難度推論データで学習しており、複雑な質問にも対応可能
|
||
- 🔧 **Tool Use / RAG** — Function Calling・検索拡張生成にも対応。日本語・英語両方でのツール呼び出しや、与えられたコンテキストに基づく正確な回答が可能
|
||
- ✍️ **クリエイティブ表現** — 文学的な比喩・暗喩・情景描写など、豊かな日本語表現力を持つ
|
||
|
||
### モデル仕様
|
||
|
||
| 項目 | 詳細 |
|
||
|---|---|
|
||
| **モデル名** | `DataPilot/ArrowCanaria-Llama-8B-SFT-v0.1` |
|
||
| **ベースモデル** | `tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.5` |
|
||
| **アーキテクチャ** | Llama 3.1 (Transformer decoder-only) |
|
||
| **パラメータ数** | 8B |
|
||
| **学習データ量** | 175,000件超(JP 70.9% / EN 29.1%) |
|
||
| **コンテキスト長** | 4,096 tokens |
|
||
| **精度** | BF16 |
|
||
| **ライセンス** | Llama 3.1 Community License + Gemma Terms of Use License |
|
||
|
||
---
|
||
|
||
## 推論方法
|
||
|
||
### 🤗 Transformers
|
||
|
||
```python
|
||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||
|
||
model_name = "DataPilot/ArrowCanaria-Llama-8B-SFT-v0.1"
|
||
|
||
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||
model = AutoModelForCausalLM.from_pretrained(
|
||
model_name,
|
||
torch_dtype="bfloat16",
|
||
device_map="auto",
|
||
)
|
||
|
||
messages = [
|
||
{"role": "system", "content": "あなたは親しみやすいAIアシスタントです。自然な日本語で会話してください。"},
|
||
{"role": "user", "content": "最近ちょっと疲れてるんだよね。何かリフレッシュできる方法ない?"},
|
||
]
|
||
|
||
input_ids = tokenizer.apply_chat_template(
|
||
messages,
|
||
add_generation_prompt=True,
|
||
return_tensors="pt",
|
||
).to(model.device)
|
||
|
||
outputs = model.generate(
|
||
input_ids,
|
||
max_new_tokens=512,
|
||
temperature=0.7,
|
||
top_p=0.9,
|
||
repetition_penalty=1.05,
|
||
do_sample=True,
|
||
)
|
||
|
||
response = tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True)
|
||
print(response)
|
||
```
|
||
|
||
### ⚡ vLLM
|
||
|
||
```bash
|
||
# vLLM サーバーの起動
|
||
vllm serve DataPilot/ArrowCanaria-Llama-8B-SFT-v0.1 \
|
||
--dtype bfloat16 \
|
||
--max-model-len 4096 \
|
||
--host 0.0.0.0 \
|
||
--port 8000
|
||
```
|
||
|
||
```bash
|
||
# リクエスト例(curl)
|
||
curl http://localhost:8000/v1/chat/completions \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"model": "DataPilot/ArrowCanaria-Llama-8B-SFT-v0.1",
|
||
"messages": [
|
||
{"role": "system", "content": "あなたは親しみやすいAIアシスタントです。自然な日本語で会話してください。"},
|
||
{"role": "user", "content": "最近ちょっと疲れてるんだよね。何かリフレッシュできる方法ない?"}
|
||
],
|
||
"temperature": 0.7,
|
||
"max_tokens": 512
|
||
}'
|
||
```
|
||
|
||
---
|
||
|
||
## データ概要
|
||
|
||
### SDG_LOOM による高品質データ生成
|
||
|
||
本モデルの学習データは、独自の合成データ生成フレームワーク **[SDG_LOOM](https://github.com/foxn2000/sdg_loom)** を活用して作成されています。SDG_LOOM は、高品質な合成データを効率的に生成するためのパイプラインであり、データの品質管理・フィルタリングを体系的に行うことで、学習に最適なデータセットを構築します。
|
||
|
||
### データ構成
|
||
|
||
合計 **175,000件超** の合成データセットで学習を行いました。
|
||
|
||
| 言語 | 件数 | 比率 |
|
||
|---|---|---|
|
||
| 日本語 | 124,000件 | 70.9% |
|
||
| 英語 | 51,000件 | 29.1% |
|
||
| **合計** | **175,000件超** | **100%** |
|
||
|
||
### タスク別内訳
|
||
|
||
| カテゴリ | 内容 | 言語 |
|
||
|---|---|---|
|
||
| **知識応答** | シングルターン・マルチターンの知識QA | 🇯🇵 JP |
|
||
| **雑談・相談** | 日常会話・悩み相談・共感的応答(EQの中核) | 🇯🇵 JP |
|
||
| **Tool Use** | Function Calling(日本語/英語)・エージェント行動 | 🇯🇵🇬🇧 JP/EN |
|
||
| **RAG** | 検索拡張生成(コンテキスト参照→質問応答) | 🇬🇧 EN |
|
||
| **推論** | 高難度推論・数学的思考 | 🇬🇧 EN |
|
||
| **RP** | ロールプレイ対話・キャラクター感情表現 | 🇯🇵 JP |
|
||
| **AItuber RP** | 配信者↔リスナー対話・即興的なキャラクター応答 | 🇯🇵 JP |
|
||
| **クリエイティブ** | 文学的表現力(比喩・暗喩・描写) | 🇯🇵 JP |
|
||
|
||
---
|
||
|
||
## 学習概要
|
||
|
||
### モデル作成パイプライン
|
||
|
||
本モデルは以下の3段階で構築されています:
|
||
|
||
```
|
||
1. CPT(Continual Pre-Training)
|
||
tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.5
|
||
+ 10k フィルタリング済み高品質日本語合成小説データセット
|
||
↓
|
||
2. Chat Vector マージ(Mergekit)
|
||
CPTモデルに元モデルの Chat Vector をマージし、
|
||
対話能力を復元
|
||
↓
|
||
3. SFT(Supervised Fine-Tuning)
|
||
175,000件超の合成データセットで LoRA による
|
||
3フェーズカリキュラム学習
|
||
```
|
||
|
||
### SFT 学習設計
|
||
|
||
#### カリキュラム学習(3フェーズ構成)
|
||
|
||
SFT は「声→能力→人格」の順序で段階的に学習する **カリキュラム学習** を採用しています。
|
||
|
||
```
|
||
Phase 1: 基盤構築 ──▶ Phase 2: 能力拡張 ──▶ Phase 3: 個性統合
|
||
65,000件 63,000件 47,000件
|
||
```
|
||
|
||
| フェーズ | データ件数 | 目的 | 学習率 |
|
||
|---|---|---|---|
|
||
| **Phase 1: 基盤構築** | 65,000件 | 日本語 EQ・知識応答・推論力の原型を確立 | `1e-4` |
|
||
| **Phase 2: 能力拡張** | 63,000件 | Tool Use / RAG / エージェント能力の獲得 | `3e-5` |
|
||
| **Phase 3: 個性統合** | 47,000件 | EQ・キャラクター性・対話人格の統合 | `5e-5` |
|
||
|
||
#### EQ優先の学習率設計
|
||
|
||
```
|
||
P1 (1e-4) >> P3 (5e-5) > P2 (3e-5)
|
||
```
|
||
|
||
- **Phase 1 (`1e-4`)**: 日本語EQ・知識応答の基盤を強く刻み込む
|
||
- **Phase 2 (`3e-5`)**: Tool/RAG は補助的能力のため控えめに学習し、Phase 1 の文体を最大限保護
|
||
- **Phase 3 (`5e-5`)**: 個性統合は EQ の中核目標のため Phase 2 より積極的に学習。ただし Phase 1 の基盤を上書きしない範囲に留める
|
||
|
||
#### 壊滅的忘却の防止
|
||
|
||
各フェーズでは **リプレイバッファ** を導入し、前フェーズのデータの一部を再混合することで壊滅的忘却を防止しています。
|
||
|
||
#### 主な学習パラメータ
|
||
|
||
| パラメータ | 値 |
|
||
|---|---|
|
||
| **LoRA rank (r)** | 32 |
|
||
| **LoRA alpha** | 64 |
|
||
| **LoRA target modules** | `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` |
|
||
| **LoRA dropout** | 0.0(Unsloth 高速パッチ適用のため) |
|
||
| **最大シーケンス長** | 4,096 tokens |
|
||
| **実効バッチサイズ** | 16(batch=2 × grad_accum=8) |
|
||
| **Optimizer** | AdamW (torch fused) |
|
||
| **精度** | BF16 |
|
||
| **Packing** | 有効(GPU 利用率最大化) |
|
||
| **Loss** | NLL(標準 Negative Log-Likelihood) |
|
||
| **Warmup ratio** | 0.05(Phase 1/2)/ 0.10(Phase 3) |
|
||
| **Epochs** | 1.0(全フェーズ共通、packing により 1 エポックで十分) |
|
||
| **学習フレームワーク** | Unsloth + TRL `SFTTrainer` |
|
||
|
||
#### Phase 3 の工夫
|
||
|
||
Phase 3 では RP・クリエイティブという **スタイル転移力の強いデータ** を扱うため、以下の工夫を施しています:
|
||
|
||
- **Warmup ratio を 0.10 に倍増**(Phase 1/2 は 0.05):学習初期の急激なパラメータ変動を抑制し、Phase 1/2 で蓄積した能力を保護
|
||
- **学習率を Phase 1 の半分(5e-5)に設定**:スタイル転移の強度を適度に抑制しつつ、Phase 2 より積極的に個性を学習
|
||
|
||
---
|
||
|
||
## 謝辞
|
||
|
||
- 質の高い日本語モデルを作成してくれたSwallowチームに感謝します。 - [tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.5](https://huggingface.co/tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.5)
|
||
- 高品質なベースモデルを作成してくれたMetaのLlamaチームに感謝します。 - [Meta Llama](https://www.llama.com)
|
||
- 高効率な学習フレームワークを作成してくださったUnslothに感謝します。 - [Unsloth](https://github.com/unslothai/unsloth)
|
||
- そのほか、高品質なデータを作成する際にDeepSeek-V3.2とkimi K2.5を使用しました。[DeepSeekチーム](https://www.deepseek.com)と[Kimiチーム](https://www.moonshot.ai)に感謝します。
|
||
|
||
Built by Kimi |