KAWK-1.5-50M Korean Base
한국어에 집중한 작은 언어모델을 데이터 수집, 토크나이저, 사전학습, 평가까지 직접 만들고, 적은 파라미터로 어느 정도의 한국어 능력을 얻을 수 있는지 검증하기 위해 개발한 51.5M 파라미터 베이스 모델입니다.
기존 다국어 모델을 한국어로 미세조정한 모델이 아닙니다. 한국어 중심 말뭉치로 SentencePiece 토크나이저를 새로 학습하고, Llama 계열 모델을 처음부터 사전학습했습니다. Supra-50M 계열은 작은 모델의 개발 순서를 참고하는 출발점이었으며, 어휘 크기, 레이어 수, 데이터 구성은 한국어에 맞게 다시 설계했습니다.
이 모델은 베이스 next-token predictor입니다. 질문에 답하도록 학습된 챗봇이 아니며, 입력 뒤에 이어질 한국어 텍스트를 생성하는 용도로 사용해야 합니다.
왜 50M부터 만들었나
50M은 최고 성능의 챗봇을 만들기 위한 크기라기보다, 개인이 접근할 수 있는 GPU에서 다음 전체 파이프라인을 검증하기 위한 엔지니어링 프로토타입입니다.
- 한국어 전용 토크나이저 설계
- 웹 말뭉치 정제·중복 제거·패킹
- scratch pretraining과 checkpoint 재개
- 올바른 causal LM objective 검증
- validation loss와 UTF-8 byte-normalized 평가
- Hugging Face 공개와 재현 가능한 학습 이력 보존
이 50M 경험과 테스트를 바탕으로 이후 KAWK-500M을 만들었습니다.
모델 구조
| 항목 | 값 |
|---|
| 아키텍처 | LlamaForCausalLM, decoder-only |
| 파라미터 | 51,542,528 |
| 어휘 | 한국어 SentencePiece Unigram 20,000 |
| 레이어 | 14 |
| Hidden / MLP | 512 / 1,408 |
| Attention / KV heads | 8 / 4 |
| Head dimension | 64 |
| 최대 문맥 | 1,024 tokens |
| 활성화 / 정규화 | SwiGLU(SiLU) / RMSNorm |
| 위치 표현 | RoPE, theta 10,000 |
| 입력·출력 임베딩 | 공유 |
32K 어휘를 그대로 사용하면 50M 모델의 많은 파라미터가 임베딩에 소비됩니다. KAWK-50M은 어휘를 20K로 줄이고 남는 예산을 14개 Transformer 레이어에 배분했습니다.
한국어 토크나이저와 데이터 원칙
- 외부 Unicode NFC 정규화
- SentencePiece Unigram, 내부 normalization은 identity
- byte fallback과 숫자 분리 사용
- 영어·코드·수학 전용 말뭉치는 사용하지 않음
- KTX, Windows, 제품명, 숫자, 단위처럼 한국어 문장에 자연스럽게 포함된 영문·숫자는 유지
- HTML, URL 과다, 반복 문장, code/math-heavy 문서, 낮은 한글 비율 문서 필터링
- 이메일·전화번호 등 개인정보 형태 마스킹
- exact/near duplicate 제거
주요 사전학습 원천은 HuggingFaceFW/fineweb-2의 kor_Hang이며, 원천 revision과 이용 조건은 학습 아카이브에 고정했습니다.
학습 이력과 중요한 정정
현재 공개 모델은 올바른 next-token objective로 복구·검증한 약 6B-token Base 릴리스입니다.
개발 중 초기 대규모 실험에서는 dataset이 labels를 한 token 이동한 상태로 반환하고 LlamaForCausalLM이 내부에서 다시 shift하여 사실상 두 token 앞을 예측하는 오류가 있었습니다. 같은 잘못된 기준으로 training/validation loss를 계산해 늦게 발견됐습니다.
- 초기 잘못된 20B Base + 3B CPT 실험은 정상적인 23B next-token 학습량으로 계산하지 않습니다.
- raw next-token NLL, generation, unit test로 원인을 확인했습니다.
- objective 수정 후 100M A/B 검증 → 1B recovery → 추가 5B recovery를 진행했습니다.
- 실패 run은 재현을 위해 별도 archive에 보존하지만 최종 정상 모델로 취급하지 않습니다.
이 정정은 학습량을 크게 보이게 만드는 것보다 실제 objective와 재현성을 우선한 결과입니다.
평가
| 항목 | 결과 |
|---|
| Validation loss | 2.89026 |
| Validation perplexity | 17.9979 |
| Bits per UTF-8 byte | 0.92329 |
| 이전 1B checkpoint loss | 2.97448 |
| Gate | passed |
평가는 고정된 한국어 validation 문서에서 수행했습니다. 다른 토크나이저를 쓰는 모델과 token-level perplexity를 직접 비교하면 안 됩니다.
사용 예시
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4repo_id = "Infinity08/KAWK-1.5-50M-Korean-Base"
5tokenizer = AutoTokenizer.from_pretrained(repo_id, use_fast=False)
6model = AutoModelForCausalLM.from_pretrained(repo_id)
7
8prompt = "대한민국의 수도는"
9inputs = tokenizer(prompt, return_tensors="pt")
10outputs = model.generate(
11 **inputs,
12 max_new_tokens=80,
13 do_sample=True,
14 temperature=0.8,
15 top_p=0.9,
16 repetition_penalty=1.1,
17)
18print(tokenizer.decode(outputs[0], skip_special_tokens=True))
적합한 용도
- 소형 한국어 LM 연구와 교육
- 토크나이저·사전학습·CPT 실험
- 한국어 자동완성과 제한적인 텍스트 생성
- 소비자 GPU/CPU 추론 테스트
- 더 큰 한국어 모델의 파이프라인 검증
한계
- 50M급이므로 지식량, 사실성, 복잡한 추론 능력이 매우 제한적입니다.
- 챗봇처럼 지시를 따르도록 학습되지 않았습니다.
- 반복, 잘못된 사실, 웹 데이터의 편향·광고성 문구를 생성할 수 있습니다.
- 의료·법률·금융·안전 관련 판단에 사용하면 안 됩니다.
- 개인정보 재현, 편향, 유해성에 대한 포괄적인 안전 평가가 완료되지 않았습니다.
관련 자료
원천 데이터에는 서로 다른 이용 조건이 적용될 수 있습니다. 이 모델 카드는 원천 데이터의 재배포 권리를 별도로 부여하지 않으며, 사용자는 각 upstream dataset의 라이선스와 귀속 조건을 확인해야 합니다.