File size: 7,235 Bytes
b2a5828 e6fbc8f b2a5828 |
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 |
---
license: apache-2.0
datasets:
- werty1248/Korean-1930-Novel-Scene-Summarize
language:
- ko
pipeline_tag: text-generation
---
## Model Card
- ์์ฝ ์๋๋ฆฌ์ค ๊ธฐ๋ฐ ์์ค ์์ฑ ๋ชจ๋ธ
- [werty1248/Korean-1930-Novel-Scene-Summarize](https://huggingface.co/datasets/werty1248/Korean-1930-Novel-Scene-Summarize) ์์
์ ํจ๊ณผ ํ์ธ์ฉ ๋ชจ๋ธ์
๋๋ค.
## Training Details
### Dataset
- [werty1248/Korean-1930-Novel-Scene-Summarize](https://huggingface.co/datasets/werty1248/Korean-1930-Novel-Scene-Summarize)
- ์ ์๊ถ์ด ๋ง๋ฃ๋ 20์ธ๊ธฐ ์ด ํ๊ตญ ๊ทผ๋๋ฌธํ 96ํธ
### Preprocessing
- system prompt์ ํจ๊ป ์์ค์ ์ฒซ ๋ฌธ๋จ์ ์ ๊ณต
- ์ดํ user๊ฐ ์๋๋ฆฌ์ค(50%) ๋๋ ์ด๋ฒคํธ(50%)๋ฅผ ์ ๊ณตํ๋ฉด assistant๊ฐ ๋ต๋ณ์ ์์ฑ
- 3-shot multi-turn ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํํ์ฌ ํ์ต
- ํ๋กฌํํธ ์์๋ ์๋์ ์์ต๋๋ค.
- Axolotl(full config๋ ์๋์ ์์ต๋๋ค)
- LoRA: (rank=32, alpha=128)
- NefTune_alpha: 5
- total_batch_size: 8
- num_epoch: 3
- 1xA100์์ ์ฝ 8์๊ฐ ํ์ต
## Template & How to use
- ์ ์ instruction์ ๋ฌด์ํ๋ ๊ฒฝํฅ ์์
- ํ์/์์ด ๋จ์ด๊ฐ ์์ด๋ ํ์ ์ํ๋จ
- ํ๊ตญ์ด ๋ฅ๋ ฅ์ด ๋ ๋จ์ด์ง ๊ฒ ๊ฐ์
### Input(๋๋ฌผ์ ๋ง์๋ ์ ๋์
๋ถ)
```
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
tokenizer = AutoTokenizer.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft")
model = AutoModelForCausalLM.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft", torch_dtype=torch.bfloat16).to('cuda')
system_prompt = """๋น์ ์ ์์ค ์์ฑ ์ด์์คํดํธ์
๋๋ค. ๋น์ ์ ์๋ฌด๋ ์ ์ ์ ๊ฐ์ด๋์ ๋ฐ๋ผ 1900~1940๋
๋ ๊ทผ๋ ํ๊ตญ ์์ค์ ์์ฑํ๋ ๊ฒ์
๋๋ค.
- ์ฃผ์ด์ง ์๋๋ฆฌ์ค ์์ฝ์ ํ์ธํ๊ณ , ์ด์ ๋ํ๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ๋กฏ์ ๊ตฌ์ฑํ์ญ์์ค.
- ํ๋ถํ ํ๊ตญ์ด ํํ ๋ฐ ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐฝ์์ ์ผ๋ก ์งง์ ์ฌ์ ์์ฑํ์ธ์.
- ์ฌ์ ๋์ฌ์ ๊ทผ๋ ํ๊ตญ ํน์ ์ ํํ, ์ดํ, ์ฌํฌ๋ฆฌ, ์กด๋๋ง๊ณผ ๋ฐ๋ง์ ๋ฐ์ํ์ญ์์ค.
- ์ฌ์ ์ฃผ์ ์ฌ๊ฑด์ ๊ทผ๋ ํ๊ตญ์ ์ญ์ฌ์ , ๊ธฐ์ ์ ํน์ฑ์ ๋ฐ์ํ์ญ์์ค.
- ์ฌ์ 5~10๋ฌธ์ฅ์ผ๋ก ๊ตฌ์ฑํ์ธ์.
"""
first_message = """### ์ฒซ ๋ฌธ๋จ
ํ๋์ ๋ถ์ฌ๋ฅด๋ ์ฉ์ ๋
ธ์ฌ์๋ ์ํ์ง๊ณ
์์๋ค์ ์๋น๋ ์ฌํ ์์ ๋ฌปํ๋ฒ๋ฆฐ
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ๊ฒ๋ค์ ๋๊ตฌ๋ ์ ๊ฒฝ์ฐ์ง ์๋
์์กด์ด ์ฒ๋ฐํ ๋๋ด์ด ๋ ์๋์
ํ ๋จ์๊ฐ ์ฌ๋ง์ ๊ฑท๊ณ ์์๋ค.
"""
scenario = """### ๋ฑ์ฅ์ธ๋ฌผ
์ฌ๊ด ์ฃผ์ธ, ์ผ์ด๊ฑด ๋๋ผ์นด
### ์๋๋ฆฌ์ค
์ฌ๊ด ์ฃผ์ธ์ด ๋ฌธ๋ ์ฐฝ๋ฐ์ ๋ฐ๋ผ๋ณธ๋ค. ์ฌ๊ด ์ฃผ๋ณ์ ์จํต ์ฌ๋ง์ด๋ค. ์งํ์ ์ ๋ฉ๋ฆฌ์ ํ ์ฌ๋ด๊ฐ ํผ์ง๋งํ ์๋ฃจ๋ฅผ ์ง์ง ๋๋ฉด์ ์ฌ๊ด ๋ฐฉํฅ์ผ๋ก ๊ฑธ์ด์จ๋ค.
"""
messages = [{'role':'system', 'content':system_prompt + first_message},
{'role':'user', 'content':scenario},]
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=512)
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipe(
prompt,
do_sample=True,
temperature=0.8,
top_k=50,
top_p=0.95,
add_special_tokens=True
)
print(outputs[0]["generated_text"][len(prompt):])
```
### Result
```
ํ๋์ ๊นจ๋ํ์๋ค. ๋ฐ๋๋ ์์ด์ง ์์๋ค. ๋ฐ์ ์์ ๊ตด๋ฌ์ ธ ์๋ ํฌ์น์ด ํ ๋ฉ๋งํ๊ณ ํธ๋ฅธ ํ๋น ์๋ ์ ๋ณด์๋ค.
๊ฑฐ๊ธฐ๋ ๋ง์นจ ํ ์ฑ์ ์ฌ๊ด์ด ์ง์ฒด๋ก ๊ฝํ ์์๋ค. ์ข์ฐ ๋ฉ๋ฆฌ ๋ฐ์๊ฐ ์ฐ์ ๋ฟ์ด๋ค. ๋๋ฌด๋ ์๋ชฉ๋ ์๋ ์จ ์ฒ์ง๊ฐ ํคํ ์ฌ๊ด ์์ ์์์ธ๊ณ ์๋ ๊ฒ์ด๋ค. ์ผ๋ฅธ ๋ณด๋ฉด ํ ์กฐ๊ฐ ์์ถ ์ ๊ฐ๊ธฐ๋ ํ์ง๋ง ๊ฑด์ถ์ด๋ผ๋๋ ๋ณด๋ค๋ ๋ํ์ ๋
์ ๋ด์ด๋๊ณ ๋จ์ํ ๊ฐํ ํ๋๋ฅผ ๊ฑธ์ด์ ๊ทธ๋๋ก ๋ฒ์ดํ๋ โ์ฌ๊ดโ์ด๋ค. ๋ช๋ช ์ข์ ๊ธธ๋ง ๋ค์ด์๋ค๊ฐ ์ฌ๋ผ์ก์ ๋ฟ ํ ๊ธธ๋ ์ ๋ซ๋ ค์ง ๊ทธ ์๋ฆฌ์ ๊ทธ๋๋ก ์งํฑ๋์ด ์๋ ์ฌ๊ด์ด๋ค. ๊ธธ์ ๋ํ๋๋ ์ฌ๋์ ์๋ค. ์ข์ฐ๋ก ๋ฐ์๋ฅผ ๋ผ๊ณ ๋ ๋น์ด ์๋ ์ฐ ์ค์์ ๊ฐ๊ฐ์ด ๊ณ ๊ธฐ ๊ตฝ๋ ๋ฅ์ด์ ์ฏ๋ฐ๊ตฌ๋๋ฉฐ ๊ณ ๊น๊ฐ๋ง๋ฅผ ๊ฑธ๊ณ ํ์ธ๋ง ๋ช ๋ง๋ฆฌ์ฉ ์ง๋๊ฐ๊ณ ํคํ๊ฒ ์ ๋ฐ๋ฅ์ ํ๋น๋ง ๋น์น๊ณ ํ๋ ์ธ์ธํ ์ฌ๊ด์ด๋ค. ๊ทธ๊ฒ์ด ๋ฃธ_service๋ผ๋ ์ธ๊ณ์๋ ๋ฌ๋ฆฌ ์ฃผ์ธ๋ ์๊ณ ์ฌ์ฅ๋ ์๊ณ ์๋ ์๊ณ ํ ๊ฐํ๋ง ๊ฑธ๊ณ ์ฒ๋น์ฒ๋ผ ์ธ๋กญ๊ฒ ์งํค๊ณ ์๋ ๋ชจ์์ด๋ค.
๊ทธ๋ฐ ์ฌ๊ด์์ ์ด์ฝ๊ณ ์์ด ํ ์ฌ๋ ๋ํ๋ฌ๋ค. ์ฐฝ๋ฌธ์ด ์ด๋ ธ๋ค. ๋ฐ์ ๋ด๋ค๋ณด๋ ํ ์ ์ ๊ฒ์ ๊ทธ๋ฆผ์๊ฐ ์ฐฝ ์์์ ๋๋๋ด ์ค๋ฏ๋ฌ์ง๋ค. ๊ทธ๋ฌ๋๋ ๋ค์ ํ์ฐธ ํ์ ๊ทธ ๊ฒ์ ๊ทธ๋ฆผ์๋ ์๋ชฉ์ผ๋ก ์ฐจ์ฐจ ๋์ ๊ฐ์ง๊ณ ๋ ๊ทธ๋๋ก ์ฌ๋ผ์ง๋ ๊ฒ์ด๋ค.
๊ทธ๋ก๋ถํฐ ์ฌ๊ด์ ์๋ก์ด ์ผ์ ๋นํ์๋ค. ๋ฐ์๋ฆฌ์ค ์๋ฃจ๋ฅผ ๋ค๊ณ ํ ์ฌ๋์ด๊ฐ ๊ฑธ์ด ๋ค์ด์ค์ง ์์๋๊ฐ. ์ผ๊ตด์ ๋จผ๋น์ผ๋ก ๋๋ํ ๋ชป ๋ณด์ด๋ ๋ฒ์จ ์ฌ๋ฉด ์ฌ์ค ๊ฐ๋ฐ์ ์ ๋๋ ๊ณณ์ ํผ์งํ ์๋ฃจ๋ฅผ
```
### Result of Original model(Qwen/Qwen2-7b-instruct)
```
"๊ทธ๊ฒ ๋๊ตฌ๋? ์ ์ด๋ ๊ฒ ๋จผ ๊ณณ์์ ์ด๊ณณ์ผ๋ก ์?" ์ฌ๊ด ์ฃผ์ธ์ด ๋ฌผ์ด๋ณด๋ฉฐ ์ฐฝ๋ฌธ์ ๋ฒ๋ฆฌ๊ณ ๋งํ๋ค. ๊ทธ๋
์ ๋ชฉ์๋ฆฌ๋ ์ฌ๋ง์ ๊ฑด์กฐํจ๊ณผ ํจ๊ป ๊ฑฐ์น ๋ฐ๋์ ๊ฐ๋ผ์์๋ค.
์ผ์ด๊ฑด ๋๋ผ์นด๋ผ๋ ์ฌ๋ด๋ ์์ ์ ์๋ฃจ๋ฅผ ๋ ์ง์ง ๋๋ฉฐ ์ฌ๊ด ์ชฝ์ผ๋ก ๋ค๊ฐ๊ฐ๋ค. ๊ทธ์ ๋์๋ ํฌ๋ฏธํ๊ฒ ๋ณด์ด๋ ๋จผ์ง์ ๋จผ์ง๊ฐ ๊ฐ์ธ๊ณ ์๋ ํ๋น์ด ๋น๋๋ ๋ฏํ๋ค. ๊ทธ์ ์ผ๊ตด์๋ ๋๋ฐฉ์ธ์ด ๊ตด๋ฌ ๋ด๋ ค๊ฐ๋ฉฐ, ๊ทธ์ ์
์ ๋งํ ์ค๋น๋ฅผ ํ๊ณ ์์๋ค.
"์ฌ๊ด ์ฃผ์ธ๋, ์ ๋ฅผ ๋ฐ์์ฃผ์ค ์ ์์๊น์? ์ ๊ฐ ์ด๊ณณ์์ ์ ์ ์ฌ๊ณ ์ถ์ต๋๋ค." ๊ทธ์ ๋ชฉ์๋ฆฌ๋ ์ฌ๋ง์ ๋ฌด๋ํ ์กฐ์ฉํจ์ ๊นจ์ฐ๋ฉฐ ์ ํด์ก๋ค.
์ฌ๊ด ์ฃผ์ธ์ ๊ทธ์ ์ฒด์ก๋ณต๊ณผ ๋ๆฑๆฑํ ๋ชจ์ต์ ๋ณด๋ฉฐ, ์ด ์ฌ๋ด์ ์ํฉ์ ๋ํด ๊ฑฑ์ ์ค๋ฌ์ ๋ค. "๊ทธ๋, ๋ค๊ฐ ํ์ํ๋ค๊ณ ๋๊ผ๋ค๋ฉด, ์ฌ๊ธฐ์ ์ฌ์ด๋ผ. ํ์ง๋ง ์ ์ด๋ฐ ๊ณณ๊น์ง ์๋์ง ์ค๋ช
ํด ์ค์ผ ํ ๊ฒ ๊ฐ์." ๊ทธ๋
์ ๋งํฌ๋ ์น๊ทผํ๋ฉด์๋ ๋ถ๋ช
ํ ์ง์์๋ค.
```
## Others
### Axolotl config
```
base_model: Qwen/Qwen2-7B-Instruct
trust_remote_code: true
load_in_8bit: false
load_in_4bit: false
strict: false
datasets:
- path: train_data.jsonl
type: sharegpt
dataset_prepared_path:
val_set_size: 0.05
output_dir: ./outputs/out
sequence_len: 4096
sample_packing: true
eval_sample_packing: true
pad_to_sequence_len: true
adapter: lora
lora_model_dir:
lora_r: 32
lora_alpha: 128
lora_dropout: 0.05
lora_target_linear: true
lora_fan_in_fan_out:
wandb_project:
wandb_entity:
wandb_watch:
wandb_name:
wandb_log_model:
neftune_noise_alpha: 5
gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 3
optimizer: adamw_torch
lr_scheduler: cosine
learning_rate: 0.0002
train_on_inputs: false
group_by_length: false
bf16: auto
fp16:
tf32: false
gradient_checkpointing: true
gradient_checkpointing_kwargs:
use_reentrant: false
early_stopping_patience:
resume_from_checkpoint:
local_rank:
logging_steps: 1
xformers_attention:
flash_attention: true
warmup_steps: 10
evals_per_epoch: 4
saves_per_epoch: 1
debug:
deepspeed:
weight_decay: 0.0
fsdp:
special_tokens:
``` |