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
4
Inference API
Input a message to start chatting with werty1248/Qwen2-7B-Korean-1930-Novel-sft.
Model is too large to load in Inference API (serverless). To try the model, launch it on Inference Endpoints (dedicated) instead.

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