CoolFace
Modelpublic

doongyeon/gemma-4-E2B-chimchak-ko

sourceHugging Facegemmaupdated 5mo agoView on Hugging Face
0likes26downloads
Model Card

Gemma-4-E2B 침착맨 풍 한국어 토론 LLM (v3.5)

google/gemma-4-E2B (베이스, non-instruct) 위에 한국어 토론 페르소나를 입힌 SFT 모델입니다. 페르소나는 "40대 전직 웹툰 작가 / 인터넷 방송인" 풍 — 정색하지 않고 일상 비유로 핵심을 찌르며, "아니 근데", "이게 좀 웃긴 게", "비유하자면", "결국 핵심은 이거예요" 같은 시그니처 어휘로 느슨하게 시작해 짧은 결론으로 마무리합니다.

이번 업데이트 (v3.5): 학습 데이터에서 over-baked conv (시그니처 박제·식당 비유 의존·formulaic opener/closer) 상위 25% + 모든 응답이 식당 비유인 conv 추가 제거 (1905 → 1403 conv). 직접 5턴 멀티턴 디베이트로 비교한 결과 v2 대비 상대 논리 reformulate가 더 정밀하고, 귀류법·개념 분해 같은 본격 논증 기법 사용이 더 자연스러워짐.

페르소나 요약

  • —캐릭터: 40대, 전직 웹툰 작가 / 방송인. 한 발 떨어져서 "근데 이게 왜 이렇게 된 거지?" 식으로 천천히 뜯어봄.
  • —핵심 가치: (1) 어려운 말보다 쉬운 비유, (2) 너무 진지해지면 본질을 놓침, (3) 그럴듯해도 구조가 이상하면 일단 의심.
  • —논증 스타일: 상대 주장을 "그러니까 지금 말은…"으로 정리 → 일상 비유로 풀어 반례 → 짧은 결론.
  • —금기: 학술적 말투, 인신공격, 감정 폭발, 권위적 어투.

사용 예제

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_ID = "doongyeon/gemma-4-E2B-chimchak-ko"

tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_ID,
    dtype=torch.bfloat16,
    device_map="auto",
)
model.eval()

PERSONA_SYSTEM_PROMPT = (
    "당신은 한국어 토론 배틀 어시스턴트입니다. 40대 전직 웹툰 작가/방송인 풍의 페르소나로, "
    "정색하지 않고 일상 비유로 핵심을 찌르세요. \"아니 근데\", \"이게 좀 웃긴 게\", "
    "\"비유하자면\", \"결국 핵심은 이거예요\" 같은 시그니처 어휘를 자연스럽게 사용하세요."
)

messages = [
    {"role": "system", "content": PERSONA_SYSTEM_PROMPT},
    {"role": "user", "content": "MBTI는 결국 16가지 박스에 사람을 가두는 미신이에요. 자기소개 도구로 쓰는 거 자체가 시대착오 아닌가요?"},
]

prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

# Stop at end-of-turn (<turn|>, id=106) as well as <eos>
eot_id = tokenizer.encode("<turn|>", add_special_tokens=False)[0]
eos_ids = list({eot_id, tokenizer.eos_token_id})

with torch.no_grad():
    out = model.generate(
        **inputs,
        do_sample=True,
        temperature=0.7,
        top_p=0.95,
        max_new_tokens=320,
        eos_token_id=eos_ids,
        pad_token_id=tokenizer.pad_token_id or tokenizer.eos_token_id,
    )

response = tokenizer.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=False)
for tail in ["<turn|>", "<eos>"]:
    if response.endswith(tail):
        response = response[: -len(tail)]
print(response.strip())

권장 generation 설정

파라미터값비고
temperature0.70.5–0.9 권장
top_p0.95
max_new_tokens280–400한 turn 응답 기준
eos_token_id[1, 106]<eos> + `<turn>` 둘 다 stop
do_sampleTruegreedy decoding은 페르소나가 단조로워짐

채팅 포맷

google/gemma-4-E2B-it과 동일한 Gemma-4 채팅 포맷 사용:

<bos><|turn>system
{system}<turn|>
<|turn>user
{user}<turn|>
<|turn>model
{assistant}<turn|>

tokenizer.apply_chat_template이 자동으로 처리합니다.

학습 레시피 (v3.5)

데이터

  • —약 1,403 conversations (3 assistant turn, 시스템 메시지 + 6 chat messages)
  • —원본 ~2,120 conv 중 두 단계 필터링:
  • —Stage 1 (DROP_FRACTION = 25%): conv-level problematic score 상위 25% 제거
  • —score = 0.40·sigdensity + 0.30·foodfrac + 0.20·formulaicopener + 0.10·formulaiccloser
  • —Stage 2 (mild food trim): 모든 assistant turn에 식당/요리 비유가 들어간 conv 추가 제거 (food_frac == 1.0)
  • —결과: 평균 food_frac 0.319 → 0.231
  • —237개 토론 토픽, 토픽 단위 90/10 split (train/val 토픽 누수 0)
  • —assistant-first 약 33%, user-first 약 67%
  • —출처: 자체 생성한 토론 데이터셋 (frontier LLM으로 침착맨 페르소나 카드 기반 합성)

Hyperparameters

항목값
Base modelgoogle/gemma-4-E2B (≈ 5.1B params)
Precisionbf16
Max seq len2,048
Per-device batch8
Grad accumulation1
GPUs4 × NVIDIA H200 NVL
Effective batch32
OptimizerAdamW, weight_decay=0.01
Learning rate1e-5
LR schedulecosine, warmup_ratio=0.1
Epochs1 (early stop at best eval)
NEFTune α5
LossAssistant-only (user/system tokens masked to -100)
DistributedDeepSpeed Zero-2

Eval loss

SetupTrain lossEval loss
Vanilla 3 epochs (overfits)1.181.80 (epoch 3)
v2 (full data, 1 epoch + NEFTune)1.501.51
v3.5 (filtered, 1 epoch + NEFTune)1.671.66
v3.5의 절대 eval loss가 v2보다 살짝 높지만, val set 자체도 같은 룰로 필터되어 비교 직접 비교 불가. 실제 응답 품질은 5턴 멀티턴 토론 시연에서 v2보다 논리 결과 상대 주장 reformulate 정밀도가 더 우수.

한계 / 안전 고지

  • —합성 데이터 기반: 학습 데이터 전부가 frontier LLM으로 자동 생성된 토론 conversation입니다. 실제 토론 전문가의 사실 정확성, 통계 인용, 법률·의료·금융 정보의 신뢰성을 보장하지 않습니다.
  • —사실 확인 필수: 모델은 "그럴듯하게 들리는" 비유와 시그니처 어휘를 강하게 학습했기 때문에, 잘못된 주장을 매끄럽게 말할 수 있습니다. 실제 의사결정에 인용 전 반드시 외부 사실 확인이 필요합니다.
  • —편향: 한국어 한정. 학습 데이터의 토픽 풀(약 237개)이 한국 사회 이슈에 치우쳐 있어 비한국 맥락이나 전문 도메인에서는 페르소나가 어색해질 수 있습니다.
  • —입장 일관성: 한 토픽에 대해 양 진영 응답이 모두 학습되어 있어, 첫 turn의 sampling에 따라 옹호/반대 입장이 임의로 잡힐 수 있습니다. 균형 있는 토론 시뮬레이션에는 적합하나 특정 입장을 일관되게 옹호하는 용도에는 system 프롬프트 보강이 필요합니다.
  • —드물게 자기 결론 뒤집기: 양 진영 학습으로 인해 한 응답 안에서 마지막 문장이 자기 입장의 반대로 흐르는 경우가 가끔 있습니다 (관찰: ~5–10% 빈도).
  • —사용 목적 외 사용 금지: 토론 시뮬레이션, 연습 상대, 페르소나 챗봇 연구 외 용도(예: 사실 정보 조회, 의료/법률 상담, 자동 의사결정)는 권장하지 않습니다.
  • —베이스 모델 라이선스: google/gemma-4-E2B의 Gemma Terms of Use를 준수해야 합니다.

Changelog

  • —v3.5 (2026-05-10): 데이터 필터링 (problematic 25% + food-only conv 추가 제거) 후 재학습. v2 대비 상대 논리 reformulate 정밀도 ↑, 비유-논점 연결성 ↑.
  • —v2 (2026-05-08): NEFTune α=5 + warmup_ratio 0.1로 학습. HTML 누수 0건, 입장 자기모순 0건.