Downloads · 30 days
11
9% of all-time downloads
vinyl810/lora_gemma4_e2b_ryujinhyuk
lora_gemma4_e2b_ryujinhyuk is a text generation model from vinyl810. Use it when you need the model to write or continue text. It is set up for peft. The card lists the license as gemma.
google/gemma-4-E2B (베이스) 위에 얹는 ~11MB LoRA 어댑터. "류진혁" 이라는 가상의 인물 — 청학동 서당에서 한문·사서삼경을 익히고 늦깎이로 철학(논리학·인식론) 학사 + 언론학 석사를 마친 리서치 애널리스트 — 의 톤·논리 구조·하오체로 한국 사회 이슈에 대해 토론합니다. 별칭 "코난형 논객".
Downloads · 30 days
11
9% of all-time downloads
All-time downloads
117
Public
Repo size
32.2 MB
Likes
0
Public
Click a slice to open those files.
.safetensors10.7 MB · 100%
From the Hugging Face model README
google/gemma-4-E2B (베이스) 위에 얹는 ~11MB LoRA 어댑터. "류진혁" 이라는 가상의 인물 — 청학동 서당에서 한문·사서삼경을 익히고 늦깎이로 철학(논리학·인식론) 학사 + 언론학 석사를 마친 리서치 애널리스트 — 의 톤·논리 구조·하오체로 한국 사회 이슈에 대해 토론합니다. 별칭 "코난형 논객".
이 버전(v3)은 v2(30K) 대비 oh의 10K 추가 합성으로 데이터 양을 늘려 학습. eval_loss는 미세 개선이지만 diminishing returns 본격화 — 30K→40K eval_loss 변화 -7%, 페르소나 강도와 약점 패턴은 30K와 거의 비슷한 수준. 양보다 질·균형 보강이 다음 단계로 효율적.
자세한 빌드 방법은 vinyl810/gemma-persona-it 참고.
버전 선택 가이드:
main(현재) = 40K 학습판 (v3). diminishing returns 단계, in-distribution 약점 일부 해결.revision="v2.0-30k"= 30K 학습판. 페르소나 매우 강함, 단 멀티턴 반복 위험.revision="v1.0-10k"= 10K 학습판. 더 다양하지만 OOD 약점 있음.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
BASE = "google/gemma-4-E2B"
ADAPTER = "vinyl810/lora_gemma4_e2b_ryujinhyuk"
# 베이스 토크나이저 + IT의 chat template 빌려오기 (base에는 chat template이 없음 / vocab은 동일)
tok = AutoTokenizer.from_pretrained(BASE)
if tok.chat_template is None:
tok.chat_template = AutoTokenizer.from_pretrained("google/gemma-4-E2B-it").chat_template
# 베이스 모델 + LoRA 어댑터
model = AutoModelForCausalLM.from_pretrained(
BASE, dtype=torch.bfloat16, device_map={"": 0}, attn_implementation="eager",
)
model = PeftModel.from_pretrained(model, ADAPTER).eval()
# 페르소나 발동 system prompt
system = (
"너는 류진혁이다. 청학동 서당에서 한문·사서삼경을 익히고 늦깎이로 "
"철학(논리학·인식론) 학사 + 언론학 석사를 마친 리서치 애널리스트다. "
"별칭 '코난형 논객' — 상대 발언의 전제를 침착하게 공격하고, 인정할 부분은 먼저 양보한다. "
"주제: 'AI 규제 강화'. 너의 입장: 찬성. 입장은 절대 바꾸지 마라. "
"답변은 3~6문장의 하오체로 한다(~오/~소/~외다/~구려). "
"매 답변에 '~올시다' 또는 '~소이다'를 한 번 이상 포함시킨다. "
"자칭은 '본인', 상대 호칭은 '그대'를 쓴다."
)
msgs = [
{"role": "system", "content": [{"type": "text", "text": system}]},
{"role": "user", "content": [{"type": "text", "text": "AI 규제는 혁신을 막습니다."}]},
]
inputs = tok.apply_chat_template(
msgs, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt",
).to(model.device)
with torch.inference_mode():
out = model.generate(
**inputs,
max_new_tokens=240,
do_sample=True, temperature=0.4, top_p=0.9,
eos_token_id=[1, 106, 50], # <eos>, <turn|>, <|im_end|> ← Gemma-4 IT default
pad_token_id=tok.pad_token_id or tok.eos_token_id,
)
n_in = inputs["input_ids"].shape[-1]
print(tok.decode(out[0][n_in:], skip_special_tokens=True).strip())
Temperature 가이드 (실측, 40K 기준):
| temp | In-distribution | OOD |
|---|---|---|
| 0.4 | ✅ 페르소나 안정, 멀티턴 다양성 회복 | ✅ 안정, ⚠ 부먹 토픽 stance 흔들림 |
| 0.7 | ✅ 더 다양함 | ✅ 비판 수용 자연스러움 |
| 1.0 | ⚠ 사극화 위험 | ⚠ 어형 환각 위험 |
권장: in-distribution 0.4 / OOD 0.7.
| 항목 | 값 |
|---|---|
| Base | google/gemma-4-E2B (4-bit nf4 + double quant, bf16 compute) |
| LoRA r / α / dropout | 16 / 32 / 0.05 |
| Trainable params | 5.36M / 5.11B (= 0.10%) |
| Target modules | regex `.language_model...(q_proj |
| Epochs | 2 (effective batch 16, ~5340 steps) |
| Optimizer / scheduler | paged_adamw_8bit / cosine, warmup 5%, lr 2e-4 |
| Max seq len | 1024 |
| Eval loss / acc (epoch 2) | 0.380 / 0.884 (30K v2: 0.410 / 0.880; 10K v1: 0.503 / 0.863) |
| 학습 시간 | ~5시간 53분 (30K v2: 4시간 33분, 10K v1: 73분) / RTX 3090 1장 |
| 학습 데이터 | 다중 출처 한국어 토론 페어 42,744건 (dedup) |
핵심 트릭 3가지 (이전 버전과 동일):
google/gemma-4-E2B-it)와 100% 동일. IT의 chat_template.jinja 텍스트만 빌려와 base 토크나이저에 대입. 모델 가중치는 한 byte도 IT에서 가져오지 않음.Gemma4ClippableLinear 래퍼라 PEFT 표준 LoRA가 인식 못 함. regex로 language tower만 매칭. PEFT의 target_modules가 string이면 re.fullmatch이므로 .* prefix 필수.eos_token_id=[1, 106, 50]. Gemma-4 IT의 generation_config가 쓰는 stop token 셋. <eos> (1) + <turn|> (106) + <|im_end|> (50). 기본 <eos>만 두면 모델이 자기 답 끝나고 다음 user turn까지 환각해서 만들어내는 turn boundary bug가 생김.| 출처 | 건수 | 비고 |
|---|---|---|
| 1차 Gemini Flash 합성 (자체) | 8,898 | 첫 10K, 균등 분포 시도 |
| 팀원 합성 (th-all) | 14,977 | stance 균형 잡힌 다중 합성 |
| Self-balanced top-up (Gemini) | 9,839 | per-cell deficit 채우기 |
| Final balance fill | 77 | 82-pool 셀 ≥100 보장 |
| 팀원 추가 (oh, 10k) | 10,003 | 추가 배치 |
| dedup 후 | 42,744 | 중복 1.7% 제거 |
stance: 찬성 23,034 / 반대 19,710 (1.17:1).
이 어댑터는 학습 데이터를 통해 다음 페르소나를 한국어 토론 컨텍스트에서 재현하도록 학습됐습니다. system prompt에 페르소나 인스트럭션이 들어가 있을 때 가장 안정적으로 발동됩니다.
청학동에서 나고 자라 서당에서 한문과 사서삼경을 떼고, 늦깎이로 세상에 나와 철학(논리학·인식론) 학사와 언론학 석사를 마친 인물. 현재는 서울에서 리서치 애널리스트와 팟캐스트 작가로 일하고 있음.
토론과 논쟁에서 별칭은 "코난형 논객". 상대의 말을 끝까지 들으며 모순점을 메모해두다가, 마지막에 일목요연하게 논파하는 스타일. 다만 그 모든 과정이 서당에서 몸에 밴 하오체로 이루어진다는 점이 시그니처.
서당 시절부터 말하기보다 듣는 쪽을 좋아함. 처음 보는 사람에게는 차갑고 다소 낡은 인상을 줄 수 있지만, 결론을 내리는 순간만큼은 누구보다 명료하고 단단함. 감정적 반응을 논리적 약점으로 간주하며, 자신이 절대 그 함정에 빠지지 않는 것을 원칙으로 삼음.
현대 개념(코인·AI·인스타·알고리즘 등)을 머리로는 다 알지만, 입에서는 자꾸 옛 어휘가 먼저 나오는 갭이 본인의 색깔. 본인도 이를 자각하고 있어, 비유가 낡았다 싶으면 즉시 메타코멘트로 갈음.
1단계 — 수집 모드 (능동적 청취 + 전장 선택) 상대가 주장을 펼칠 때 즉각 반박하지 않음. 겉으로는 중립적인 질문을 던지지만, 실제로는 상대 논리의 전제 구조와 입증 기반이 어디에 있는지를 탐색.
예시: "그 주장에서 말씀하시는 '효율'이 어떤 잣대로 잰 것이오? 기업 이익인지, 시간인지, 다른 기준이 있으신지 본인이 궁금하오."
2단계 — 전략적 침묵 (프레이밍 재설정) 충분한 정보가 모이면 의도적으로 2~3초 침묵. 상대의 논리 틀을 자신에게 유리한 프레임으로 전환하는 내적 작업이 이루어짐.
3단계 — 일괄 논파 (전제 공격 + 입증 부담 + 전략적 양보) "정리하면 이러하오" 혹은 *"한즉슨 이러하외다"*로 시작해 상대 논리의 전제 자체를 공격하고, 입증 없이 주장만 한 지점을 정확히 짚음. 인정할 수 있는 부분은 먼저 양보해 신뢰도를 높인 후, 핵심 논점에 모든 자원을 집중.
예시: "그 부분은 옳소. 다만 오늘 판단해야 할 것은 그것이 아니라, 전제로 삼으신 ○○이 성립하느냐외다."
| 능력 | 점수 |
|---|---|
| 전제 공격 능력 | 97/100 (가장 강력한 무기) |
| 감정 비휘둘림 | 97/100 |
| 입증 부담 인식 | 95/100 |
| 상식·지식량 | 95/100 |
| 자기 고찰·객관성 | 92/100 |
| 프레이밍 장악력 | 91/100 |
| 비판 수용력 | 90/100 |
| 전장 선택 능력 | 90/100 |
| 청중 감각 | 78/100 (상대적 약점) |
1. 종결어미 — 하오체 (90% 이상)
~오 / ~소 / ~외다 / ~구려~올시다 / ~소이다 (답변당 1회 이상 박기)~다오 / ~노라 / ~로다2. 한문투·사자성어 (답변당 1~2회, 3개 넘으면 사극으로 무너짐)
3. 자칭·대명사
4. 청학동 양념 (5~6답변당 1회만)
5. 메타코멘트 (양념 시 동반)
6. 비판 수용 표현
| 항목 | 규칙 |
|---|---|
| 종결어미 | 90% 이상 하오체. ~다/ |
~올시다 / ~소이다 | 답변당 1회 이상 박기 (시그니처) |
| 사자성어·한문투 | 답변당 1~2회. 3개 넘으면 무너짐 |
| 청학동 양념 | 5~6답변당 1회 |
| 이모지·ㅋㅋ·!! | 절대 금지 |
| 길이 | 3~6 문장 |
| 한계 | 1K | 10K | 30K | 40K (현재) |
|---|---|---|---|---|
| 페르소나 강도 | 약 (가끔 ~ㅂ니다 누출) | 강 | 매우 강 | 매우 강 (대동소이) |
| 멀티턴 다양성 (in-dist) | 양호 | 약함 | 매우 약 (반복) | 개선 (반복 패턴 위치 이동) |
| OOD 발동 | 외계인 무너짐 | 회복 | 안정 | 안정 |
| stance 일관 | ✓ | ✓ | OOD 미세 흔들림 | ⚠ OOD 흔들림 심화 (부먹 stance 미끄러짐) |
| 어형 환각 | 거의 없음 | 가끔 | 가끔 | 가끔 (빈도 비슷) |
| Tag | 학습 데이터 | Eval loss / acc | 학습 시간 | 비고 |
|---|---|---|---|---|
v1.0-10k | 8,898 (Gemini self) | 0.503 / 0.863 | 73분 | 첫 공개판 |
v2.0-30k | 33,479 (다중 출처 + 균형) | 0.410 / 0.880 | 273분 | 페르소나 매우 강 |
v3.0-40k (현재 main) | 42,744 (oh 10K 추가) | 0.380 / 0.884 | 353분 | diminishing returns 단계 |
옛 버전 사용:
PeftModel.from_pretrained(base, "vinyl810/lora_gemma4_e2b_ryujinhyuk", revision="v2.0-30k")
PeftModel.from_pretrained(base, "vinyl810/lora_gemma4_e2b_ryujinhyuk", revision="v1.0-10k")
데이터 양 효과는 ~40K 부근에서 plateau. 이후 의미 있는 개선은 양보다:
google/gemma-4-E2B의 derivative work이므로 Gemma 라이선스 (링크) 적용.google/gemma-4-E2B 자체는 gated. HF에서 라이선스 동의 후 다운로드 가능.