Model Card
- μμ½ μλλ¦¬μ€ κΈ°λ° μμ€ μμ± λͺ¨λΈ
- werty1248/Korean-1930-Novel-Scene-Summarize μμ μ ν¨κ³Ό νμΈμ© λͺ¨λΈμ λλ€.
Training Details
Dataset
- 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:
- Downloads last month
- 11
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social
visibility and check back later, or deploy to Inference Endpoints (dedicated)
instead.