|
--- |
|
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: |
|
``` |