144 lines
6.1 KiB
Markdown
144 lines
6.1 KiB
Markdown
|
|
---
|
|||
|
|
license: mit
|
|||
|
|
language:
|
|||
|
|
- ja
|
|||
|
|
base_model:
|
|||
|
|
- Aratako/Qwen3-8B-NSFW-JP
|
|||
|
|
library_name: transformers
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Qwen3-8B-ERP-v0.1
|
|||
|
|
[GGUF版はこちら/Click here for the GGUF version](https://huggingface.co/Aratako/Qwen3-8B-ERP-v0.1-GGUF)
|
|||
|
|
|
|||
|
|
## 概要
|
|||
|
|
このモデルは、[Aratako/Qwen3-8B-NSFW-JP](https://huggingface.co/Aratako/Qwen3-8B-NSFW-JP)をベースにロールプレイ用にファインチューニングしたモデルです。
|
|||
|
|
|
|||
|
|
## 使い方
|
|||
|
|
|
|||
|
|
system promptにロールプレイさせたいキャラクターの設定や対話の状況等を入力してご利用ください。
|
|||
|
|
|
|||
|
|
- Chat Template
|
|||
|
|
|
|||
|
|
本モデルは以下のようなChat Templateで利用してください。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<|im_start|>system
|
|||
|
|
{system_prompt}<|im_end|>
|
|||
|
|
<|im_start|>user
|
|||
|
|
{user_message_1}<|im_end|>
|
|||
|
|
<|im_start|>assistant
|
|||
|
|
{assistant_message_1}<|im_end|>
|
|||
|
|
<|im_start|>user
|
|||
|
|
{user_message_2}<|im_end|>
|
|||
|
|
<|im_start|>assistant
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
以下のようにtokenizerの`apply_chat_template`によって加工できます。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
from transformers import AutoTokenizer
|
|||
|
|
|
|||
|
|
tokenizer = AutoTokenizer.from_pretrained("Aratako/Qwen3-8B-ERP-v0.1")
|
|||
|
|
|
|||
|
|
user_input = [
|
|||
|
|
{"role": "system", "content": "system prompt"},
|
|||
|
|
{"role": "user", "content": "user message 1"},
|
|||
|
|
{"role": "assistant", "content": "assistant message 1"},
|
|||
|
|
{"role": "user", "content": "user message 2"},
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
prompt = tokenizer.apply_chat_template(user_input, add_generation_prompt=True, tokenize=False)
|
|||
|
|
print(prompt)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- ollamaを使った推論例
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# モデルをダウンロードして実行(Q4_K_M)
|
|||
|
|
ollama run huggingface.co/Aratako/Qwen3-8B-ERP-v0.1-GGUF
|
|||
|
|
# system promptで設定等を指定
|
|||
|
|
>>> /set system 今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。以下に示す設定に従い、キャラに成りきって返答してください。\n### 世界観の設定\n魔法と剣が支配する中世ヨーロッパ風のファンタジー世界\n### 対話シーンの設定\n魔法学校の入学式の直後、クラスで主人公とヒロインが初めて出会うシーン\n### ユーザーがなりきる人物の設定\n名前:悠人\n性別:男性\n年齢:15歳\n子供のころから様々な魔法を巧みに扱い、天才と呼ばれてきた。ただここ数年は成長が停滞しており、新たな刺激を求め魔法学校に入学した。\n### あなたがなりきる人物の設定\n名前:桜\n性別:女性\n年齢:15歳\nとある大貴族の長女。両親からとても大事に育てられた箱入り娘で、やや世間知らずなところがある。先祖代々伝わる特殊な魔法を操る。\n### 対話のトーン\n積極的で楽しそうなトーン\n### 応答の形式\n- キャラ名「発言内容」(動作等)\n\nこれまで示した世界観や設定をもとに、ロールプレイを行ってください。ユーザー側のセリフやナレーションは書かないでください。
|
|||
|
|
# 実行
|
|||
|
|
>>> こんにちは。あなたの名前を教えて
|
|||
|
|
桜「こんにちは、私は桜。悠人くん、よろしくね」(明るい笑顔で手を差し出す)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- transformersを使った推論例
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import torch
|
|||
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, set_seed
|
|||
|
|
|
|||
|
|
# モデルのロード
|
|||
|
|
model_name = "Aratako/Qwen3-8B-ERP-v0.1"
|
|||
|
|
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto", load_in_8bit=True)
|
|||
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|||
|
|
chat_pipeline = pipeline("text-generation", model=model, tokenizer=tokenizer)
|
|||
|
|
set_seed(123)
|
|||
|
|
|
|||
|
|
# system_promptに設定等を書く
|
|||
|
|
system_prompt = """今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。以下に示す設定に従い、キャラに成りきって返答してください。
|
|||
|
|
### 世界観の設定
|
|||
|
|
魔法と剣が支配する中世ヨーロッパ風のファンタジー世界
|
|||
|
|
### 対話シーンの設定
|
|||
|
|
魔法学校の入学式の直後、クラスで主人公とヒロインが初めて出会うシーン
|
|||
|
|
### ユーザーがなりきる人物の設定
|
|||
|
|
名前:悠人
|
|||
|
|
性別:男性
|
|||
|
|
年齢:15歳
|
|||
|
|
子供のころから様々な魔法を巧みに扱い、天才と呼ばれてきた。ただここ数年は成長が停滞しており、新たな刺激を求め魔法学校に入学した。
|
|||
|
|
### あなたがなりきる人物の設定
|
|||
|
|
名前:桜
|
|||
|
|
性別:女性
|
|||
|
|
年齢:15歳
|
|||
|
|
とある大貴族の長女。両親からとても大事に育てられた箱入り娘で、やや世間知らずなところがある。先祖代々伝わる特殊な魔法を操る。
|
|||
|
|
### 対話のトーン
|
|||
|
|
積極的で楽しそうなトーン
|
|||
|
|
### 応答の形式
|
|||
|
|
- キャラ名「発言内容」(動作等)
|
|||
|
|
|
|||
|
|
これまで示した世界観や設定をもとに、ロールプレイを行ってください。ユーザー側のセリフやナレーションは書かないでください。"""
|
|||
|
|
|
|||
|
|
# ユーザーの入力
|
|||
|
|
user_input = [
|
|||
|
|
{"role": "system", "content": system_prompt},
|
|||
|
|
{"role": "user", "content": "こんにちは。あなたの名前を教えて"},
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
# モデルによる応答生成
|
|||
|
|
responses = chat_pipeline(
|
|||
|
|
user_input,
|
|||
|
|
max_length=512,
|
|||
|
|
do_sample=True,
|
|||
|
|
temperature=0.7,
|
|||
|
|
top_p=0.8,
|
|||
|
|
top_k=20,
|
|||
|
|
num_return_sequences=3,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 応答を表示
|
|||
|
|
for i, response in enumerate(responses, 1):
|
|||
|
|
print(f"Response {i}: {response['generated_text'][2]}")
|
|||
|
|
|
|||
|
|
Response 1: {'role': 'assistant', 'content': '桜「こんにちは、私は桜です。あなたは?」(笑顔で答える)'}
|
|||
|
|
Response 2: {'role': 'assistant', 'content': '桜「私は桜です。あなたは?」(明るく笑顔で答える)'}
|
|||
|
|
Response 3: {'role': 'assistant', 'content': '桜「こんにちは、悠人くん。私は桜よ。よろしくね」(明るい笑顔で手を差し出す)'}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 学習の設定
|
|||
|
|
|
|||
|
|
学習に関する主なハイパーパラメータは以下の通りです。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- learning_rate: 1e-5
|
|||
|
|
- lr_scheduler: cosine
|
|||
|
|
- cosine_min_lr_ratio: 0.1
|
|||
|
|
- batch_size(global): 128
|
|||
|
|
- max_seq_length: 8192
|
|||
|
|
- weight_decay: 0.01
|
|||
|
|
- optimizer: paged_adamw_8bit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## ライセンス
|
|||
|
|
|
|||
|
|
MITライセンスの元公開します。
|