metadata
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を主軸にしない方針)
- 目的:
- チャットテンプレート順守(例:終端トークンなど、形式崩れの抑制)
- 回答の品質向上(報酬モデルによるスカラー報酬の導入)
- 特性:ベースモデルに近い性格を維持しやすい設計(=指示追従の“均質化”を抑える意図)
推論コード
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
このデータは、以下の合成フローにより作成されたものです(要約):
- ベースモデル(Sarashina2-70b)で質問/回答のたたき台を生成
- Microsoft Phi-4-miniで品質キュレーション(選別・整形)
- 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
引用(必要に応じて)
このリポジトリやモデルカードを引用する場合は、以下をベースに調整してください:
@misc{arrowideative_13b_neobase_zero_llm_jp,
title = {ArrowIdeative-13b-NeoBase-ZERO-llm-jp},
author = {holy-fox},
year = {2026},
}