Edit model card

Model Card

  • μš”μ•½ μ‹œλ‚˜λ¦¬μ˜€ 기반 μ†Œμ„€ 생성 λͺ¨λΈ
  • werty1248/Korean-1930-Novel-Scene-Summarize μž‘μ—…μ˜ 효과 ν™•μΈμš© λͺ¨λΈμž…λ‹ˆλ‹€.

Training Details

Dataset

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
9
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.

Dataset used to train werty1248/Qwen2-7B-Korean-1930-Novel-sft