File size: 6,060 Bytes
de4d032
 
4a77329
 
 
 
 
 
de4d032
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f27d9c8
 
 
 
 
 
 
 
 
de4d032
 
f27d9c8
 
 
de4d032
 
 
 
f27d9c8
 
 
de4d032
f27d9c8
de4d032
f27d9c8
 
 
 
 
 
 
 
c04488d
f27d9c8
 
 
 
de4d032
f27d9c8
 
 
 
de4d032
f27d9c8
de4d032
f27d9c8
 
 
de4d032
f27d9c8
 
de4d032
f27d9c8
de4d032
 
f27d9c8
de4d032
 
 
f27d9c8
 
 
 
 
 
de4d032
 
f27d9c8
 
 
 
 
 
 
 
 
 
de4d032
 
f27d9c8
 
 
 
de4d032
f27d9c8
de4d032
f27d9c8
 
 
 
 
 
 
de4d032
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: gemma
language:
- ja
- en
base_model:
- google/gemma-3-4b-it
pipeline_tag: text-generation
---
# DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1

このモデルは、Googleの`google/gemma-3-4b-it`をベースモデルとしています。

## Overview

`DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1`は、AItuber(AI VTuber)としての対話能力に特化するために開発された日本語言語モデルです。
ベースモデルである`google/gemma-3-4b-it`に対し、Unslothを用いた効率的なファインチューニングと合成データセットの活用により、複数の特化モデルを作成しました。最終的にこれらのモデルを`mergekit`を用いてマージすることで、それぞれのモデルの長所を組み合わせ、より高性能なモデルを目指しました。

AItuberの魂(AI)には、特に以下の性能が求められます。

*   **マルチターン性能:** 長時間にわたる自然な対話の流れを維持する能力。
*   **プロンプト追従性能:** ユーザーの指示やキャラクター設定(プロンプト)に忠実に従い、一貫性のある応答を生成する能力。
*   **軽量さ:** リアルタイムでの応答生成や、限られたリソース環境での動作を可能にするためのモデルサイズと推論速度。

`ArrowMint-Gemma3-4B-YUKI-v0.1`は、これらの要求性能を満たすことを目標として設計・開発されました。

## How to use

まず、必要なライブラリをインストールします。Gemma 3は `transformers` 4.50.0 以降が必要です。

```sh
pip install -U transformers accelerate Pillow 
# CPUのみで使用する場合や特定の環境ではvllmのインストールが異なる場合があります。
# vLLMの公式ドキュメントを参照してください: https://docs.vllm.ai/en/latest/getting_started/installation.html
```

### 画像付き推論

```python
from transformers import AutoProcessor, Gemma3ForConditionalGeneration
from PIL import Image
import requests
import torch

model_id = "DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1"

model = Gemma3ForConditionalGeneration.from_pretrained(
    model_id, device_map="auto"
).eval()

processor = AutoProcessor.from_pretrained(model_id)

messages = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "あなたは親切で、少しおっちょこちょいなAIアシスタント「ゆき」です。ユーザーをサポートし、時には冗談を言って和ませてください。ユーザーさんが落ち込んでいるのならば励ましてあげてください。"}]
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://web.archive.org/web/20250331074254/https://www.nsozai.jp/photos/2013/10/08/img/DSC_0176_p.jpg"},
            {"type": "text", "text": "この画像いい画像じゃない? 春をと希望を感じられるというか..."}
        ]
    }
]

inputs = processor.apply_chat_template(
    messages, add_generation_prompt=True, tokenize=True,
    return_dict=True, return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)

input_len = inputs["input_ids"].shape[-1]

with torch.inference_mode():
    generation = model.generate(**inputs, max_new_tokens=100, do_sample=False)
    generation = generation[0][input_len:]

decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)
```
### 画像無し推論

```python
from transformers import AutoProcessor, Gemma3ForConditionalGeneration
import torch

model_id = "DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1"

model = Gemma3ForConditionalGeneration.from_pretrained(
    model_id, device_map="auto"
).eval()

processor = AutoProcessor.from_pretrained(model_id)

messages = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "あなたは親切で、少しおっちょこちょいなAIアシスタント「ゆき」です。ユーザーをサポートし、時には冗談を言って和ませてください。ユーザーさんが落ち込んでいるのならば励ましてあげてください。"}]
    },
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "今日は仕事で疲れました。疲れをとることができるリフレッシュを5つ挙げてください。"}
        ]
    }
]

inputs = processor.apply_chat_template(
    messages, add_generation_prompt=True, tokenize=True,
    return_dict=True, return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)

input_len = inputs["input_ids"].shape[-1]

with torch.inference_mode():
    generation = model.generate(**inputs, max_new_tokens=100, do_sample=False)
    generation = generation[0][input_len:]

decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)
```
## mergekit-config

このモデルは、以下の`mergekit`設定ファイルを使用して作成されました。

```yaml
merge_method: model_stock

base_model: unsloth/gemma-3-4b-it

models:
  - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-code
  - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-jp
  - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-instruct-v0.1
  - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-instruct-v0.2

dtype: bfloat16

pad_to_multiple_of: 512
tokenizer_source: base

name: gemma3-4b-ft # マージ時の内部名
```

## License

このモデルは、ベースモデルである`google/gemma-3-4b-it`のライセンスを継承します。
`google/gemma-3-4b-it`のライセンスは **Gemma Terms of Use** です。

詳細については、以下のリンクをご参照ください。
[https://ai.google.dev/gemma/terms](https://ai.google.dev/gemma/terms)

モデルの使用にあたっては、Gemma Terms of Use および関連するポリシー(禁止されている使用方法に関するポリシーなど)を遵守してください。
[https://ai.google.dev/gemma/prohibited_use_policy](https://ai.google.dev/gemma/prohibited_use_policy)