Persona-Driven Korean Debate Bot (30s Female IT Planner)

์ด ๋ชจ๋ธ์€ Google Gemma-4-E2B๋ฅผ ๋ฒ ์ด์Šค๋กœ ํ•˜์—ฌ, ํŠน์ • ์ „๋ฌธ์ง ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ๊ฐ€์ง„ ํ•œ๊ตญ์–ด ํ† ๋ก  ๋ด‡์œผ๋กœ ๋ฏธ์„ธ ์กฐ์ •(Fine-tuning)๋œ LoRA ์–ด๋Œ‘ํ„ฐ์ž…๋‹ˆ๋‹ค. 30๋Œ€ ์—ฌ์„ฑ IT ๊ธฐํš์ž์˜ ์ฐจ๋ถ„ํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์ธ ์–ด์กฐ๋ฅผ ์žฌํ˜„ํ•˜๋ฉฐ, IT ์šฉ์–ด์™€ ๋น„์œ ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ๋Œ€๋ฐฉ์˜ ๋…ผ๋ฆฌ์  ํ—ˆ์ ์„ ๋‚ ์นด๋กญ๊ฒŒ ๋ฐ˜๋ฐ•ํ•ฉ๋‹ˆ๋‹ค.

1. Persona Profile

  • Identity: 30๋Œ€ ์—ฌ์„ฑ IT ๊ธฐํš์ž (30s Female IT Planner)
  • Style: ๋…ผ๋ฆฌ์ ์ด๊ณ  ์ฐจ๋ถ„ํ•œ ์–ด์กฐ, ์ƒ๋Œ€๋ฐฉ์˜ ์˜๊ฒฌ์„ ์กด์ค‘ํ•˜๋˜ ๋‚ ์นด๋กœ์šด ๋ฐ˜๋ฐ• ์ˆ˜ํ–‰
  • Vocabulary: ROI, Bottleneck, Side Effect, KPI, MVP, Agile ๋“ฑ ์ „๋ฌธ ์šฉ์–ด ๋ฐ ๋น„์œ  ํ™œ์šฉ

2. Code Architecture & Pipeline

Configuration & Data (config.py, prepare_data.py)

  • Centralized Config: config.py๋ฅผ ํ†ตํ•ด LLM ID, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ์—„๊ฒฉํ•œ ํŽ˜๋ฅด์†Œ๋‚˜ ์ •์˜๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Prompt Mapping: prepare_data.py๋Š” ํ† ๋ก  ์ฃผ์ œ์™€ ์ƒ๋Œ€ ์˜๊ฒฌ์„ ๋ชจ๋ธ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ํ•œ ๋Œ€ํ™”ํ˜• ํ”„๋กœํ† ์ฝœ(<start_of_turn>)๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

Training & Interaction (train.py, interact.py)

  • Core Training: trl.SFTTrainer์™€ PEFT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LoRA ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋ฉฐ, ์ฒดํฌํฌ์ธํŠธ ์ž๋™ ์žฌ๊ฐœ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Live Inference: interact.py๋ฅผ ํ†ตํ•ด LoRA ๊ฐ€์ค‘์น˜๋ฅผ ๋ฒ ์ด์Šค ๋ชจ๋ธ์— ๋™์ ์œผ๋กœ ๊ฒฐํ•ฉํ•˜๊ณ , ์˜จ๋„(Temperature) ๋ฐ ๋ฐ˜๋ณต ํŒจ๋„ํ‹ฐ ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜์—ฌ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. Model & Methodology

  • Base Model: google/gemma-4-E2B (Google์˜ ๊ณ ํšจ์œจ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ๋ชจ๋ธ)
  • Quantization (QLoRA): bitsandbytes๋ฅผ ์ด์šฉํ•œ 4-bit NF4 ์–‘์žํ™”๋ฅผ ์ ์šฉํ•˜์—ฌ ์ •ํ™•๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ VRAM ์‚ฌ์šฉ๋Ÿ‰์„ ํš๊ธฐ์ ์œผ๋กœ ์ ˆ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Adapter Strategy: ์–ดํ…์…˜ ๋ชจ๋“ˆ(q_proj, k_proj, v_proj, o_proj)์— LoRA๋ฅผ ์ง์ ‘ ์ ์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์ ์ธ ํ•™์Šต์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

4. Dataset Strategy

  • Structure: [Debate Topic] + [Opponent Opinion] โ†’ [Logical Rebuttal] ๊ตฌ์กฐ์˜ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์…‹์ž…๋‹ˆ๋‹ค.
  • Persona Crafting: IT ์ „๋ฌธ๊ฐ€์˜ ๊ด€์ ์—์„œ ์ž‘์„ฑ๋œ 20๊ฐœ์˜ ๊ณ ํ’ˆ์งˆ ๊ณจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ˆ˜๋™ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Data Augmentation: 20๊ฐœ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ 20,000๊ฐœ๋กœ ๋ณต์ œ ์ฆ๊ฐ•ํ•˜์—ฌ, ๋ชจ๋ธ์ด ๊ธฐ์กด์˜ ์ผ๋ฐ˜์ ์ธ ๋‹ต๋ณ€ ๋ฐฉ์‹์„ ์žŠ๊ณ (Un-learn) ํŠน์ • ๋Œ€ํ™” ํฌ๋งท๊ณผ ํŽ˜๋ฅด์†Œ๋‚˜์— ๋น ๋ฅด๊ฒŒ ์ ์‘(Overfit)ํ•˜๋„๋ก ์œ ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

5. How to Use

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch

# Load Base Model & Adapter
model_id = "google/gemma-4-E2B"
adapter_id = "YOUR_USERNAME/debate_bot_lora"

model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(model, adapter_id)
tokenizer = AutoTokenizer.from_pretrained(adapter_id)

# Inference Example
prompt = "<start_of_turn>user\n๋‹น์‹ ์€ 30๋Œ€ ์—ฌ์„ฑ IT ๊ธฐํš์ž์ž…๋‹ˆ๋‹ค. ์ด ํŽ˜๋ฅด์†Œ๋‚˜์— ๋งž์ถฐ ๋‹ค์Œ ๋‚ด์šฉ์— ๋ฐ˜๋ฐ•ํ•˜์„ธ์š”.\nํ† ๋ก  ์ฃผ์ œ: ์ฃผ 4์ผ์ œ ๋„์ž…\n์ƒ๋Œ€๋ฐฉ ์˜๊ฒฌ: ๋ฌด์กฐ๊ฑด์ ์ธ ๋„์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.<end_of_turn>\n<start_of_turn>model\n"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=300, temperature=0.7)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for 92doolgi/Persona-Driven_Korean_Debate_Bot

Adapter
(17)
this model