File size: 9,384 Bytes
3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d 3c3809c 718c60d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | ---
library_name: transformers
license: apache-2.0
datasets:
- TeamDelta/bare-ja-v0.1
language:
- ja
base_model:
- llm-jp/llm-jp-3-13b
pipeline_tag: text-generation
---
# ArrowIdeative-13b-NeoBase-ZERO-llm-jp
## 概要
**ArrowIdeative-13b-NeoBase-ZERO-llm-jp** は、ベースモデルから **GRPO(RL)だけ**で事後学習を行うことを主軸に設計された、日本語向けLLMです。狙いとしては、典型的な「強い指示追従(Instruct)」に寄せ切らず、**ベースモデル寄りの“出力の自由度”**を残しつつ、**チャット運用に最低限必要な形式順守**と、**回答品質の底上げ**を同時に実現することです。
位置づけを一言でまとめると:
- **「ある程度プロンプトエンジニアリングが効くベースモデル」**
- ただし **完全なInstructモデルではない**(過剰な同調・過剰な定型化を狙っていない)
---
## モデルの要点
- **学習方式**:ベースモデルから **GRPOのみ**で直接作成(SFTを主軸にしない方針)
- **目的**:
1. **チャットテンプレート順守**(例:終端トークンなど、形式崩れの抑制)
2. **回答の品質向上**(報酬モデルによるスカラー報酬の導入)
- **特性**:ベースモデルに近い性格を維持しやすい設計(=指示追従の“均質化”を抑える意図)
---
## 推論コード
```python
import torch
from copy import deepcopy
from transformers import AutoTokenizer, AutoModelForCausalLM, StoppingCriteria, StoppingCriteriaList
# ===== モデル =====
model_path = "DataPilot/ArrowIdeative-13b-NeoBase-ZERO-llm-jp-v0.2"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="auto",
torch_dtype=torch.bfloat16,
)
model.eval()
system_prompt = """あなたは有能なアシスタントです。日本語で丁寧に答えてください。"""
prompt = """CPUとGPUの違いについて教えてください。"""
# (元コードのChatML形式を維持)
text = f"""<|im_start|>system
{system_prompt}<|im_end|>
<|im_start|>user
{prompt}<|im_end|>
<|im_start|>assistant
"""
inputs = tokenizer(text, add_special_tokens=False, return_tensors="pt", return_token_type_ids=False).to(model.device)
prompt_len = inputs["input_ids"].shape[1]
# "<|im_end|>" のトークン列(1トークンとは限らないので列で扱う)
stop_ids = tokenizer.encode("<|im_end|>", add_special_tokens=False)
stop_ids = torch.tensor(stop_ids, device=model.device, dtype=inputs["input_ids"].dtype)
class StopOnImEnd(StoppingCriteria):
def __init__(self, stop_ids_tensor: torch.Tensor):
super().__init__()
self.stop_ids = stop_ids_tensor
def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
k = int(self.stop_ids.numel())
if k == 0 or input_ids.shape[1] < k:
return False
return torch.equal(input_ids[0, -k:], self.stop_ids)
stopping_criteria = StoppingCriteriaList([StopOnImEnd(stop_ids)])
# 既定EOSで止まらないようにする(= "<|im_end|>" のみで停止させる)
gen_config = deepcopy(model.generation_config)
gen_config.eos_token_id = None
gen_config.pad_token_id = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else model.config.eos_token_id
with torch.inference_mode():
output = model.generate(
**inputs,
generation_config=gen_config,
stopping_criteria=stopping_criteria,
max_new_tokens=1024,
do_sample=True,
top_p=0.95,
temperature=0.5,
repetition_penalty=1.05,
)
generated = tokenizer.decode(output[0, prompt_len:], skip_special_tokens=False)
print(generated.split("<|im_end|>", 1)[0])
```
---
## ベースモデル
- Base: **llm-jp-3-13b**
https://huggingface.co/llm-jp/llm-jp-3-13b
---
## 使用データ(概要)
- Dataset: **TeamDelta/bare-ja-v0.1** の **質問(プロンプト)部分のみ**を一部利用
https://huggingface.co/datasets/TeamDelta/bare-ja-v0.1
このデータは、以下の合成フローにより作成されたものです(要約):
1. **ベースモデル(Sarashina2-70b)**で質問/回答のたたき台を生成
2. **Microsoft Phi-4-mini**で品質キュレーション(選別・整形)
3. **Multilingual E5**で多様性フィルタリング(近似質問の除去、重複削減)
- 参照:Sarashina2-70b
https://www.sbintuitions.co.jp/blog/entry/2024/08/21/144254
- BARE用プロンプト:
https://github.com/foxn2000/sdg/blob/main/prompts/bare.txt
---
## 学習構成
### 学習・推論フレームワーク
- 学習:**Unsloth**
- 報酬推論:**SGLang**
### 使用デバイス
- **NVIDIA RTX 5090 (32GB)**:主学習
- **NVIDIA RTX 4060 Ti (16GB)**:報酬モデル推論
### 報酬モデル
- **cyberagent/ca-reward-3b-ja**
https://huggingface.co/cyberagent/ca-reward-3b-ja
---
## 報酬設計(概要)
報酬は以下の5つの報酬関数で構成され、多角的に学習を誘導します:
### 1. **チャットテンプレートの順守**
- 終端トークン(`<|im_end|>`)の適切な出力とフォーマット準拠を評価
- **準拠時**: +1.0 × 長さファクター(短すぎる回答を抑制)
- **非準拠時**: -5.0(強いペナルティ)
- **極端に短い回答**: -5.0(15文字未満でハード拒否)
### 2. **反復ペナルティ**
- n-gram(デフォルト6文字)の反復率でループ出力を検出
- ペナルティ: -0.5 × 反復率(最大 -2.0)
- RM-hack(冗長な繰り返しで高スコア獲得)を防止
### 3. **オーバーロング抑制**
- max_completion_length近傍(85%以降)で段階的にペナルティ
- ソフトペナルティ: -0.8 × (進行率)^2.0(DAPO風)
- ハードペナルティ: -1.5(100%以上で切断時)
- 「最大長まで埋める」ドリフトを防止
### 4. **グループ内多様性**
- 同一プロンプトに対する複数生成間の重複・類似を検出
- **完全重複**: -0.3(2個目以降)
- **高類似(Jaccard≥0.85)**: -0.2 × 類似度
- エントロピー崩壊(mode collapse)対策
### 5. **回答品質(報酬モデル)**
- テンプレート準拠の場合のみ評価(ゲート制御)
- 外部RM(cyberagent/ca-reward-3b-ja)のスカラーを利用
- スケール: 1.0 × RMスコア、クリップ範囲: ±10.0
- **正値の場合のみ**長さファクター適用(短い回答への報酬を抑制)
- RM失敗時は`None`(マスク)として無視され学習に影響しない
### 報酬の合成
- TRL GRPOが全報酬関数の出力を合算(オプションで重み付け可能)
- グループ内相対的優位性(advantage)を計算してポリシー勾配を算出
- 適応的KL制御(beta調整)で参照モデルからの乖離を制御
---
## 使い方(推奨)
### 想定ユースケース
- 0→1のアイデア出し、探索的思考、下書き生成
- 指示を強く固定しすぎない対話(プロンプト設計で誘導する用途)
- ベースモデルの“面白さ”や多様性を残しつつ、最低限チャット運用したい場面
### 注意点
- **強い安全アラインメントや厳密な指示追従**を最優先したモデルではありません
- プロンプト設計次第で出力が大きく振れます(=長所でも短所でもある)
- チャットテンプレートを使う場合、**テンプレート仕様に合わせた入出力**を推奨します
---
## 生成品質・挙動の指針
- **ベース寄り**:過度に無難な“合意的テンプレ回答”へ収束させることを目的にしていません
- **プロンプト耐性**:命令の書き方で結果が変わりやすい設計(指示の粒度が重要)
- **出力の個性**:SFT偏重で起きやすい均質化を避け、探索性を残す狙い
---
## 既知の制限
- 形式順守は改善しても、**厳密な指示追従**や**安全性の自動担保**を保証しません
- 報酬モデルのバイアス(価値観・スタイル)を受けます
- 一般的なInstructモデルと同じ評価軸で単純比較すると、用途によっては不利になる場合があります
---
## ライセンス
- ベースモデルおよび関連データセットのライセンスに従います。
具体的には以下を参照してください:
- llm-jp-3-13b: https://huggingface.co/llm-jp/llm-jp-3-13b
- TeamDelta/bare-ja-v0.1: https://huggingface.co/datasets/TeamDelta/bare-ja-v0.1
- ca-reward-3b-ja: https://huggingface.co/cyberagent/ca-reward-3b-ja
---
## 謝辞
- llm-jp プロジェクト
- TeamDelta / bare-ja-v0.1
- サイバーエージェント(ca-reward-3b-ja)
- Unsloth / SGLang および関連OSS
---
## 引用(必要に応じて)
このリポジトリやモデルカードを引用する場合は、以下をベースに調整してください:
```bibtex
@misc{arrowideative_13b_neobase_zero_llm_jp,
title = {ArrowIdeative-13b-NeoBase-ZERO-llm-jp},
author = {holy-fox},
year = {2026},
}
``` |