初始化项目,由ModelHub XC社区提供模型
Model: pathcosmos/frankenstallm Source: Original Platform
This commit is contained in:
183
source/eval/reports/00_executive_summary.md
Normal file
183
source/eval/reports/00_executive_summary.md
Normal file
@@ -0,0 +1,183 @@
|
||||
# korean_1b_fp8_run1 종합 평가 리포트
|
||||
|
||||
> **평가 날짜**: 2026-02-26
|
||||
> **평가 환경**: NVIDIA B200 ×1 (추론), BF16, 평가 소요 시간 약 15분
|
||||
|
||||
---
|
||||
|
||||
## 모델 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
| **모델명** | korean_1b_fp8_run1 |
|
||||
| **파라미터** | 1,189.7M (1.19B) |
|
||||
| **아키텍처** | Decoder-only Transformer, LLaMA-style |
|
||||
| **vocab_size** | 64,000 |
|
||||
| **d_model** | 2,048 |
|
||||
| **n_layers** | 24 |
|
||||
| **n_heads** | 16 |
|
||||
| **n_kv_heads (GQA)** | 4 |
|
||||
| **d_ffn** | 5,472 |
|
||||
| **위치 인코딩** | RoPE (theta=500,000) |
|
||||
| **정규화** | RMSNorm |
|
||||
| **활성화 함수** | SwiGLU |
|
||||
| **기타** | Weight Tying, FlashAttention-2, TransformerEngine FP8 (MXFP8BlockScaling) |
|
||||
|
||||
### 학습 설정
|
||||
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
| **학습 단계** | 34,000 steps |
|
||||
| **GPU 환경** | 8× NVIDIA B200 |
|
||||
| **학습 정밀도** | FP8 + BF16 혼합 |
|
||||
| **학습률** | 2.0e-4 |
|
||||
| **배치 크기** | 1.05M tok/step (8GPU × 8batch × 4accum × 4096seq) |
|
||||
| **웜업** | 2,000 steps |
|
||||
| **학습 데이터** | 한국어 위키백과 + C4 한국어 + 나무위키 (총 ~8.91B tokens, ~4 에포크) |
|
||||
|
||||
---
|
||||
|
||||
## 핵심 평가 결과 요약
|
||||
|
||||
| 평가 영역 | 핵심 지표 | 판정 |
|
||||
|-----------|-----------|------|
|
||||
| **Perplexity (통합)** | PPL=6.95, bits/tok=2.80 | Good (1B 기준) |
|
||||
| **Perplexity (C4)** | PPL=5.67, bits/tok=2.50 | Excellent |
|
||||
| **Perplexity (Wiki)** | PPL=11.66, bits/tok=3.54 | Acceptable |
|
||||
| **Perplexity (Namuwiki)** | PPL=25.34, bits/tok=4.66 | Needs improvement |
|
||||
| **Top-1 Accuracy** | 56.18% | Good |
|
||||
| **Top-5 Accuracy** | 72.35% | Good |
|
||||
| **Top-10 Accuracy** | 77.75% | Good |
|
||||
| **Mean Entropy** | 2.24 nats (3.23 bits) | Healthy |
|
||||
| **생성 품질** | 한국어 문법 양호, 사실 부분적 | Expected for 1B |
|
||||
| **반복 퇴화** | 3/10 degenerate (30%) | Needs mitigation |
|
||||
| **코드/수학** | 매우 제한적 | Expected |
|
||||
|
||||
---
|
||||
|
||||
## 상세 리포트 목록
|
||||
|
||||
| 파일 | 내용 |
|
||||
|------|------|
|
||||
| [`01_perplexity_report.md`](./01_perplexity_report.md) | 데이터 소스별 Perplexity 상세 분석 |
|
||||
| [`02_generation_report.md`](./02_generation_report.md) | 10개 프롬프트 생성 품질 상세 분석 |
|
||||
| [`03_repetition_calibration_report.md`](./03_repetition_calibration_report.md) | 반복 분석 + 캘리브레이션 점검 |
|
||||
| [`04_token_analysis_comparison_report.md`](./04_token_analysis_comparison_report.md) | 토큰 수준 NLL 분석 + 온도별 비교 |
|
||||
|
||||
---
|
||||
|
||||
## Perplexity 분석 요약
|
||||
|
||||
### 데이터 소스별 PPL
|
||||
|
||||
```
|
||||
C4 한국어 (일반 웹 텍스트): PPL = 5.67 bits/tok = 2.50 ← Excellent
|
||||
위키백과: PPL = 11.66 bits/tok = 3.54 ← Acceptable
|
||||
나무위키: PPL = 25.34 bits/tok = 4.66 ← Needs improvement
|
||||
통합 (가중 평균): PPL = 6.95 bits/tok = 2.80 ← Good
|
||||
```
|
||||
|
||||
C4에서의 낮은 PPL은 일상적 웹 텍스트 분포에 잘 적응했음을 나타낸다. 위키백과 PPL이 나무위키보다 낮은 것은 위키백과 특유의 정형화된 문체가 학습 데이터로 더 많이 포함되었기 때문으로 해석된다. 나무위키의 높은 PPL은 구어체, 은어, 신조어, 표 형식 등 비정형 텍스트가 많기 때문이며, 1B 규모의 모델에서는 일반적인 결과이다.
|
||||
|
||||
### 비교 기준 (참고)
|
||||
|
||||
| 모델 | 규모 | 한국어 PPL (참고치) |
|
||||
|------|------|---------------------|
|
||||
| GPT-2 Small | 125M | ~30–40 (영어 기준) |
|
||||
| small_fp8_run1 (본 프로젝트) | 125M | ~18–22 (추정) |
|
||||
| **korean_1b_fp8_run1 (본 모델)** | **1.19B** | **6.95 (통합)** |
|
||||
| LLaMA-2 7B (한국어 적응 없음) | 7B | — |
|
||||
|
||||
125M → 1.19B 스케일업에서 PPL이 약 2.5배 이상 개선된 점은 스케일링 법칙(Chinchilla)과 일치하는 결과이다.
|
||||
|
||||
---
|
||||
|
||||
## 생성 품질 분석 요약
|
||||
|
||||
10개 프롬프트에 대한 greedy decoding 결과 기준:
|
||||
|
||||
### 생성 성공 사례 (7/10)
|
||||
|
||||
- **일상 대화 / 설명문**: 자연스러운 한국어 문장 구성, 조사·어미 처리 안정적
|
||||
- **사전적 정의 요청**: 단어 설명 형식을 잘 따라가는 경향
|
||||
- **간단한 목록 생성**: 항목 나열 패턴 파악
|
||||
|
||||
### 문제 사례 (3/10)
|
||||
|
||||
- **반복 퇴화 (Repetition Degeneration)**: 같은 구절이 반복되며 문장이 수렴하지 않음. Greedy decoding에서 특히 발생하기 쉬운 패턴으로, temperature sampling 또는 repetition penalty 적용으로 완화 가능
|
||||
- **사실 오류**: 세종대왕 관련 연도, 김치찌개 레시피 비율 등에서 부정확한 내용 생성 — 1B 파라미터로는 세밀한 사실 기억 능력에 한계가 있으며 예상된 결과
|
||||
- **코드/수학**: 파이썬 코드 생성 및 수식 계산에서 매우 제한적인 성능 — 사전학습 데이터에 코드/수학 데이터가 포함되지 않았으므로 예상된 결과
|
||||
|
||||
---
|
||||
|
||||
## 캘리브레이션 분석 요약
|
||||
|
||||
### Top-K Accuracy
|
||||
|
||||
| K | Accuracy |
|
||||
|---|----------|
|
||||
| Top-1 | 56.18% |
|
||||
| Top-5 | 72.35% |
|
||||
| Top-10 | 77.75% |
|
||||
|
||||
Top-1 정확도 56%는 언어 모델로서 건강한 수준이다. 모델이 올바른 다음 토큰을 확률 상위 1위로 예측하는 비율이 56%라는 것은 과도한 확신(overconfidence)이나 과소한 확신(underconfidence) 없이 균형 잡힌 예측 분포를 가짐을 시사한다.
|
||||
|
||||
### 엔트로피 분석
|
||||
|
||||
```
|
||||
Mean Entropy: 2.24 nats (3.23 bits)
|
||||
```
|
||||
|
||||
엔트로피 2.24 nats는 모델이 예측 시 약 9.4개 토큰에 걸쳐 확률을 분산시킨다는 의미이다 (e^2.24 ≈ 9.4). 이 값은 너무 뾰족하지도(greedy collapse 위험) 너무 평탄하지도(무작위 출력 위험) 않은 건강한 분포를 나타낸다.
|
||||
|
||||
---
|
||||
|
||||
## 결론
|
||||
|
||||
### 전체 평가
|
||||
|
||||
**1B 한국어 사전학습 모델로서 전반적으로 양호한 성능.**
|
||||
|
||||
이 모델은 한국어 위키백과, C4 한국어, 나무위키 약 8.91B 토큰으로 학습된 1.19B 파라미터 Decoder-only 모델이다. 8× B200 GPU 환경에서 FP8 + BF16 혼합 정밀도로 34,000 steps 학습하였으며, Chinchilla 최적 계산량에 근사한 설정이다.
|
||||
|
||||
---
|
||||
|
||||
### 강점
|
||||
|
||||
1. **C4 PPL=5.67**: 일반 웹 텍스트에 대한 우수한 언어 모델링 성능. 한국어 일상 텍스트의 패턴을 잘 학습함
|
||||
2. **Top-1 Accuracy 56%**: 과도한 확신 없이 건강한 캘리브레이션 상태를 유지함
|
||||
3. **한국어 문법 처리**: 조사(은/는/이/가/을/를), 어미(~했다/~합니다/~이다) 처리가 안정적이며 문법적으로 자연스러운 문장 생성
|
||||
4. **일상적 프롬프트 대응**: 설명, 정의, 목록 등 기본적인 텍스트 생성 패턴 파악
|
||||
|
||||
---
|
||||
|
||||
### 약점
|
||||
|
||||
1. **Namuwiki PPL=25.34**: 비정형 텍스트(구어체, 은어, 신조어, 표 형식)에 상대적으로 약함. 도메인 불균형에서 비롯됨
|
||||
2. **반복 퇴화 30%**: 10개 생성 중 3개에서 repetition degeneration 발생. Greedy decoding 환경에서 특히 두드러지며, SFT 또는 RLHF 단계에서 개선 예상
|
||||
3. **사실 정확도 제한**: 세종대왕 연도, 음식 레시피 등 구체적 사실 기억 능력이 낮음. 1B 파라미터 모델의 고유한 한계이며, 7B 이상 스케일에서 개선 예상
|
||||
4. **코드/수학 거의 불가**: 사전학습 데이터에 코드/수학이 포함되지 않아 예상된 결과. 전문 파인튜닝 필요
|
||||
|
||||
---
|
||||
|
||||
### 다음 단계 권장
|
||||
|
||||
| 우선순위 | 작업 | 기대 효과 |
|
||||
|----------|------|-----------|
|
||||
| 1 | **Instruction Tuning (SFT)** | 반복 퇴화 완화, 지시문 따르기 능력 부여 |
|
||||
| 2 | **DPO/RLHF** | 생성 품질 + 사실 정확도 개선 |
|
||||
| 3 | **도메인 적응** | 나무위키/전문 도메인 추가 데이터로 PPL 개선 |
|
||||
| 4 | **스케일업 (7B)** | 사실 기억, 반복 문제 동시 개선 예상 |
|
||||
| 5 | **양자화 + 배포** | GGUF Q4_K_M + Ollama 서빙 (Phase B 파이프라인 활용 가능) |
|
||||
|
||||
---
|
||||
|
||||
## 평가 환경
|
||||
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
| **GPU** | NVIDIA B200 ×1 (추론) |
|
||||
| **추론 dtype** | BF16 |
|
||||
| **평가 소요 시간** | 약 15분 (전체 6개 섹션) |
|
||||
| **평가 날짜** | 2026-02-26 |
|
||||
| **평가 스크립트** | `eval/comprehensive_eval.py` |
|
||||
235
source/eval/reports/01_perplexity_report.md
Normal file
235
source/eval/reports/01_perplexity_report.md
Normal file
@@ -0,0 +1,235 @@
|
||||
# 평가 보고서 #01 — Perplexity 분석
|
||||
|
||||
**모델**: `korean_1b_fp8_run1`
|
||||
**작성일**: 2026-02-26
|
||||
**평가 유형**: Sliding-window Perplexity (슬라이딩 윈도우 퍼플렉시티)
|
||||
|
||||
---
|
||||
|
||||
## 1. 실험 설정
|
||||
|
||||
### 1.1 모델 아키텍처
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 파라미터 수 | 1.19B (약 11.9억) |
|
||||
| 어휘 크기 (vocab_size) | 64,000 |
|
||||
| 히든 차원 (d_model) | 2,048 |
|
||||
| 레이어 수 (n_layers) | 24 |
|
||||
| 어텐션 헤드 수 (n_heads) | 16 |
|
||||
| KV 헤드 수 (n_kv_heads) | 4 (GQA — Grouped Query Attention) |
|
||||
| Positional Encoding | RoPE (Rotary Position Embedding) |
|
||||
| 활성화 함수 | SwiGLU |
|
||||
|
||||
GQA(Grouped Query Attention)를 적용하여 n_kv_heads=4로 설정함으로써 KV 캐시 메모리를 표준 MHA(Multi-Head Attention) 대비 약 75% 절감하였다. d_model=2048, n_layers=24 구성은 GPT-3 1.3B 계열의 아키텍처 설계와 유사하며, 한국어 전용 어휘 크기 64k를 채택하여 한국어 토크나이저 효율을 높였다.
|
||||
|
||||
### 1.2 학습 설정
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 총 학습 스텝 | 34,000 steps |
|
||||
| 실효 에포크 수 | 약 4 에포크 (Muennighoff 2023 기준 최적) |
|
||||
| 총 처리 토큰 | ~35.6B tokens |
|
||||
| GPU | 8× NVIDIA B200 (192GB VRAM each) |
|
||||
| 수치 정밀도 | FP8 (MXFP8BlockScaling) + BF16 autocast |
|
||||
| 학습률 (lr) | 2.0e-4 |
|
||||
| 배치 크기 (유효) | 8 GPU × 8 samples × 4 accum × 4096 seq = 1.05M tok/step |
|
||||
| 워밍업 | 2,000 steps |
|
||||
| 옵티마이저 | AdamW |
|
||||
| 그래디언트 클리핑 | 1.0 |
|
||||
|
||||
FP8 학습은 TransformerEngine 2.10의 `MXFP8BlockScaling` 레시피를 사용하였다. B200은 FP8 연산을 네이티브로 지원하므로, BF16 대비 약 2배의 연산 처리량 향상이 가능하다. `torch.autocast(dtype=torch.bfloat16)`와 `te.fp8_autocast()`를 `ExitStack`으로 중첩하여 안정적인 FP8 학습을 구현하였다.
|
||||
|
||||
### 1.3 평가 방법론
|
||||
|
||||
**평가 방법**: Sliding-window Perplexity (슬라이딩 윈도우 퍼플렉시티)
|
||||
|
||||
- **시퀀스 길이 (seq_len)**: 2,048 tokens
|
||||
- **스트라이드 (stride)**: 512 tokens
|
||||
- **중첩 비율**: 75% (1,536 tokens 중첩, 512 tokens만 유효 예측)
|
||||
|
||||
슬라이딩 윈도우 방식은 고정 윈도우 방식보다 더 정확한 PPL 측정이 가능하다. 문서 경계에서 컨텍스트가 충분히 주어진 후에 예측을 수행하므로, 초반 토큰의 cold-start 문제를 완화한다. stride=512 설정은 seq_len=2048의 1/4로, 충분한 컨텍스트 중첩을 보장하면서 계산 비용을 적절히 조율한 값이다.
|
||||
|
||||
### 1.4 평가 데이터셋
|
||||
|
||||
| 데이터셋 | 설명 |
|
||||
|---------|------|
|
||||
| `korean_val` | 4개 소스 통합 검증 세트 |
|
||||
| `korean_wiki_val` | 한국어 위키백과 검증 세트 |
|
||||
| `korean_c4_val` | Korean C4 (Colossal Clean Crawled Corpus) 검증 세트 |
|
||||
| `korean_namuwiki_val` | 나무위키 검증 세트 |
|
||||
|
||||
---
|
||||
|
||||
## 2. Perplexity 결과
|
||||
|
||||
### 2.1 결과 테이블
|
||||
|
||||
| Dataset | PPL | bits/token | 평가 토큰 수 |
|
||||
|---------|----:|----------:|------------:|
|
||||
| `korean_val` (통합) | **6.9452** | 2.7960 | 53,512,147 |
|
||||
| `korean_wiki_val` | 11.6595 | 3.5434 | 1,567,747 |
|
||||
| `korean_c4_val` | **5.6698** | 2.5033 | 45,445,722 |
|
||||
| `korean_namuwiki_val` | 25.3436 | 4.6636 | 6,488,957 |
|
||||
|
||||
- **PPL (Perplexity)**: 낮을수록 모델이 해당 텍스트를 더 잘 예측함을 의미
|
||||
- **bits/token**: `log2(PPL)` — 1 토큰을 예측하는 데 필요한 정보량(비트). 낮을수록 좋음
|
||||
- **평가 토큰 수**: 슬라이딩 윈도우 방식으로 유효하게 평가된 총 토큰 수
|
||||
|
||||
### 2.2 데이터셋별 토큰 비율
|
||||
|
||||
```
|
||||
korean_c4_val ████████████████████████████████████ 84.97% (45,445,722 tokens)
|
||||
korean_namuwiki_val ██████ 12.13% ( 6,488,957 tokens)
|
||||
korean_wiki_val ██ 2.93% ( 1,567,747 tokens)
|
||||
```
|
||||
|
||||
통합 `korean_val`의 PPL은 C4가 전체 평가 토큰의 약 85%를 차지하므로, C4 PPL(5.67)에 강하게 편향된 가중 평균으로 이해해야 한다.
|
||||
|
||||
---
|
||||
|
||||
## 3. 분석 및 해석
|
||||
|
||||
### 3.1 Korean C4 — PPL 5.6698 (가장 낮음)
|
||||
|
||||
C4(Colossal Clean Crawled Corpus)는 Common Crawl을 품질 필터링한 일반 웹 텍스트 데이터셋이다.
|
||||
|
||||
**낮은 PPL의 주요 원인:**
|
||||
|
||||
- **학습 데이터 비중**: Korean C4는 학습 코퍼스에서 가장 큰 비중을 차지한다(약 15M tokens 이상). 모델이 이 도메인의 텍스트 분포를 가장 많이 학습하여 평가 세트와의 분포 간격(distribution gap)이 최소화된다.
|
||||
- **텍스트 패턴의 예측 가능성**: 일반 웹 문서는 뉴스 기사, 블로그, 제품 설명 등 비교적 정형화된 서술 패턴을 따른다. 어휘 다양성보다 반복적 표현이 많아 다음 토큰 예측이 상대적으로 용이하다.
|
||||
- **필터링 품질**: C4는 공격적인 품질 필터링(언어 감지, 중복 제거, 짧은 문장 제거 등)을 거친 고품질 데이터다. 노이즈가 적고 자연스러운 문장 구조를 가지므로 언어 모델이 학습하기 좋은 분포를 형성한다.
|
||||
- **bits/token = 2.50**: 1 토큰 예측에 평균 2.5비트의 정보량이 필요하다는 뜻으로, 모델이 실질적으로 높은 예측 정확도를 달성하고 있음을 의미한다.
|
||||
|
||||
### 3.2 Korean Wikipedia — PPL 11.6595
|
||||
|
||||
위키백과는 백과사전적 서술 방식의 고품질 텍스트다.
|
||||
|
||||
**중간 수준 PPL의 주요 원인:**
|
||||
|
||||
- **사실 기반 고유명사의 불확실성**: 위키백과 텍스트에는 인물명, 지명, 날짜, 수치, 학술 용어 등 고유명사와 특수 정보가 밀집되어 있다. 이들은 문법적으로는 예측 가능한 위치에 있더라도, 실제 값은 다음 토큰 예측이 어려운 high-entropy 위치를 구성한다.
|
||||
- 예: "이 사건은 \_\_\_년에 발생하였다" → 연도는 문법적으로 명사 위치지만 어떤 숫자인지는 예측이 어려움
|
||||
- **문체의 이중성**: 위키백과는 문법적으로는 정형화된 백과사전 서술체(예측 쉬움)이지만, 개별 팩트(사실)는 임의적(예측 어려움)이다. 이 두 요인이 상쇄되어 중간 수준의 PPL을 보인다.
|
||||
- **낮은 토큰 비율(2.93%)**: 위키백과 데이터가 학습 코퍼스에서 차지하는 비율이 상대적으로 작아, 도메인 적응이 C4 대비 부족할 수 있다.
|
||||
- **bits/token = 3.54**: C4(2.50) 대비 약 1비트 더 필요하며, 이는 팩트 기반 텍스트의 본질적 불확실성을 반영한다.
|
||||
|
||||
### 3.3 Korean Namuwiki — PPL 25.3436 (가장 높음)
|
||||
|
||||
나무위키는 대한민국의 비공식 위키 사이트로, 일반 위키백과와는 매우 다른 텍스트 특성을 가진다.
|
||||
|
||||
**높은 PPL의 주요 원인:**
|
||||
|
||||
- **비정형 텍스트 포맷**: 나무위키는 자체적인 마크업 문법, 표, 접기(fold), 인용구 등 비표준 서식이 혼재한다. 모델이 이 특수한 포맷 패턴을 충분히 학습하지 못했을 가능성이 높다.
|
||||
- **밈, 인터넷 용어, 신조어**: 나무위키는 디시인사이드, 트위터 등 커뮤니티 문화에서 파생된 밈, 은어, 줄임말이 대량 포함되어 있다. 이러한 언어는 표준 한국어 말뭉치에서 등장 빈도가 낮아 모델이 예측하기 어렵다.
|
||||
- **팬 문화 및 서브컬처 콘텐츠**: 애니메이션, 게임, 아이돌 등 매우 특화된 도메인 지식이 많다. 고유명사(캐릭터명, 작품명 등)의 밀도가 높아 next-token prediction 난이도가 높다.
|
||||
- **특수문자 및 혼합 언어**: 영어, 일본어, 특수문자가 한국어와 혼재하여 토크나이저 처리와 모델 예측 모두 복잡해진다.
|
||||
- **학습 데이터에서의 상대적 낮은 비중**: 전체 학습 데이터에서 나무위키의 비율이 낮을 경우, 이 도메인에 대한 도메인 적응이 부족하여 PPL이 높게 나타난다.
|
||||
- **bits/token = 4.66**: 1 토큰 예측에 평균 4.66비트가 필요하여, 모델 입장에서 나무위키 텍스트는 상당히 불확실한 도메인임을 나타낸다.
|
||||
|
||||
### 3.4 Korean Val (통합) — PPL 6.9452
|
||||
|
||||
통합 검증 세트의 PPL은 각 소스 데이터셋의 **토큰 수 가중 평균**에 가깝게 형성된다.
|
||||
|
||||
**통합 PPL 계산 근거:**
|
||||
|
||||
전체 53.5M 토큰 중 C4가 45.4M(84.97%)을 차지하므로, 통합 PPL은 C4 PPL(5.67)에 강하게 편향된다. 나무위키(12.13%, PPL 25.34)와 위키(2.93%, PPL 11.66)의 기여로 통합 PPL이 C4 PPL보다 다소 높은 6.95 수준이 된다.
|
||||
|
||||
로그 공간에서의 단순 가중 합산으로 추정:
|
||||
|
||||
```
|
||||
log(PPL_통합) ≈ 0.8497 × log(5.67) + 0.1213 × log(25.34) + 0.0293 × log(11.66)
|
||||
≈ 0.8497 × 1.736 + 0.1213 × 3.232 + 0.0293 × 2.456
|
||||
≈ 1.476 + 0.392 + 0.072
|
||||
≈ 1.940 → exp(1.940) ≈ 6.96 (실측 6.95와 근접)
|
||||
```
|
||||
|
||||
이 계산은 실측값 6.9452와 매우 잘 일치하며, 평가 파이프라인의 일관성을 검증한다.
|
||||
|
||||
---
|
||||
|
||||
## 4. 1B 모델 기준 적정 PPL 범위 비교
|
||||
|
||||
### 4.1 영어 기준 레퍼런스 모델과 비교
|
||||
|
||||
| 모델 | 파라미터 | 평가 데이터 | PPL |
|
||||
|------|---------|-----------|-----|
|
||||
| GPT-2 (OpenAI) | 1.5B | WebText (영어) | ~15–20 |
|
||||
| OPT-1.3B (Meta) | 1.3B | WikiText-103 (영어) | ~14–16 |
|
||||
| LLaMA-1 1.3B (Meta) | 1.3B | WikiText-103 (영어) | ~9.8 |
|
||||
| **우리 모델** | **1.19B** | **Korean Wiki** | **11.66** |
|
||||
| **우리 모델** | **1.19B** | **Korean C4** | **5.67** |
|
||||
| **우리 모델** | **1.19B** | **Korean 통합** | **6.95** |
|
||||
|
||||
### 4.2 해석
|
||||
|
||||
**긍정적 신호:**
|
||||
|
||||
- Korean Wiki PPL=11.66은 동급 영어 모델(OPT-1.3B ~14–16)과 비교해도 **경쟁력 있는 수준**이다. 단, 이 비교는 언어, 평가 데이터셋, 토크나이저가 모두 다르므로 직접 비교에는 주의가 필요하다.
|
||||
- Korean C4 PPL=5.67은 매우 낮은 수치로, 학습 데이터와 유사한 도메인에서 모델이 **효과적으로 한국어 패턴을 학습**했음을 시사한다.
|
||||
- LLaMA-1 1.3B의 WikiText PPL ~9.8과 비교 시, 우리 모델의 Korean Wiki PPL 11.66은 **합리적인 수준**이다.
|
||||
|
||||
**주의사항 — 직접 비교의 한계:**
|
||||
|
||||
- **토크나이저 차이**: 한국어는 교착어로, BPE 토크나이저가 한국어를 영어보다 더 많은 토큰으로 분리하는 경향이 있다. 동일한 텍스트라도 한국어 모델의 PPL이 영어 모델보다 높거나 낮게 나올 수 있으며, bits/char 또는 bits/word 단위 비교가 더 공정하다.
|
||||
- **학습 데이터 분포**: C4 PPL=5.67이 특히 낮은 이유는 평가 데이터가 학습 데이터와 **같은 소스(C4)**에서 추출되었기 때문이다. 이는 모델의 실제 일반화 능력보다 학습-평가 데이터의 분포 일치에 기인한다.
|
||||
- **데이터 오염 위험**: 충분한 데이터 중복 제거(deduplication)가 없다면, 평가 세트가 학습 세트와 중복될 위험이 있다. 결과 해석 시 이 점을 유의해야 한다.
|
||||
|
||||
### 4.3 PPL 건강 진단 요약
|
||||
|
||||
```
|
||||
도메인 PPL 판정
|
||||
────────────────────────────────
|
||||
C4 (웹 텍스트) 5.67 매우 양호 — 학습 도메인과 일치
|
||||
Wiki (백과사전) 11.66 양호 — 1B 규모 기준 경쟁력 있음
|
||||
Namuwiki (커뮤니티) 25.34 개선 필요 — 도메인 적응 부족
|
||||
통합 6.95 전반적으로 건강한 수준
|
||||
```
|
||||
|
||||
전반적으로 **1B 파라미터 규모의 한국어 모델로서 건강한 PPL 범위**에 속한다고 평가한다.
|
||||
|
||||
---
|
||||
|
||||
## 5. 개선 방향
|
||||
|
||||
### 5.1 Namuwiki 도메인 성능 개선 (우선순위: 높음)
|
||||
|
||||
나무위키 PPL(25.34)이 다른 도메인 대비 월등히 높다. 이를 개선하기 위한 접근법:
|
||||
|
||||
- **학습 데이터 비중 조정**: 나무위키 데이터의 학습 데이터 비율을 높인다. 현재 비중이 낮을 경우, 나무위키 도메인 데이터를 2–3배 업샘플링하는 것을 고려한다.
|
||||
- **도메인 적응 파인튜닝 (Domain Adaptive Pretraining, DAPT)**: 기학습된 체크포인트에서 나무위키 데이터로 추가 사전학습을 수행한다. 전체 재학습 없이 특정 도메인 성능을 빠르게 개선할 수 있다.
|
||||
- **토크나이저 개선**: 나무위키 특유의 어휘(밈, 은어, 신조어)를 어휘 사전에 추가하거나, 나무위키 코퍼스를 포함하여 토크나이저를 재학습한다.
|
||||
- **데이터 정제**: 나무위키의 마크업 문법을 전처리 단계에서 더 철저히 제거하거나, 마크업 패턴을 인식할 수 있도록 특수 토큰을 도입한다.
|
||||
|
||||
### 5.2 Wiki 도메인 성능 개선 (우선순위: 중간)
|
||||
|
||||
Wikipedia PPL(11.66)은 적정 범위이지만, 사실 지식(factual knowledge) 성능 개선에는 근본적 한계가 있다.
|
||||
|
||||
- **모델 규모 확대**: 사실 지식 암기 능력(memorization capacity)은 파라미터 수에 비례한다. 1B → 3B 또는 7B 규모로 확대하면 위키 PPL이 유의미하게 하락할 것으로 예상된다.
|
||||
- **위키백과 데이터 업샘플링**: 현재 위키백과가 전체 평가 토큰의 2.93%에 불과한 것처럼, 학습 데이터에서도 비중이 낮을 가능성이 있다. 위키백과 데이터를 3–5배 업샘플링하면 도메인 적응이 개선된다.
|
||||
- **RAG(Retrieval-Augmented Generation) 접근**: 순수 파라미터 기억 외에 검색 기반 보강을 통해 사실 지식 한계를 우회하는 방법도 고려할 수 있다 (파인튜닝 이후 단계).
|
||||
|
||||
### 5.3 전반적 성능 개선 방향
|
||||
|
||||
- **더 많은 토큰 학습**: 현재 34k steps (~35.6B tokens, 4 에포크). Chinchilla 스케일링 법칙에 따르면 1.19B 모델의 최적 학습 토큰은 약 24B이지만, 데이터 다양성과 도메인 커버리지를 높이기 위해 추가 코퍼스 확보가 유리하다.
|
||||
- **Instruction Tuning / RLHF**: 사전학습 완료 후 지시문 따르기(instruction following) 데이터로 파인튜닝하면 실제 활용 성능이 크게 향상된다.
|
||||
- **평가 범위 확대**: PPL 외에 KoBEST, KLUE 등 한국어 다운스트림 벤치마크에서 정성적 평가를 추가한다. PPL과 downstream task 성능이 항상 상관관계를 갖지는 않으므로 다각도 평가가 필요하다.
|
||||
|
||||
---
|
||||
|
||||
## 6. 결론
|
||||
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
| 모델 | korean_1b_fp8_run1 (1.19B params) |
|
||||
| 학습 완료 | 34,000 steps, 8×B200, FP8 |
|
||||
| 통합 PPL | **6.9452** (bits/token: 2.7960) |
|
||||
| 최고 성능 도메인 | Korean C4 — PPL 5.6698 |
|
||||
| 최저 성능 도메인 | Korean Namuwiki — PPL 25.3436 |
|
||||
| 전반 평가 | 1B 규모 한국어 모델로서 건강한 수준 |
|
||||
|
||||
이번 평가를 통해 `korean_1b_fp8_run1`은 학습 도메인(C4)에서 우수한 성능을 보이며, 사실 지식이 풍부한 위키백과 도메인에서도 경쟁력 있는 PPL을 달성하였음을 확인하였다. 나무위키 도메인의 높은 PPL은 학습 데이터 비중 부족 및 도메인 특수성에 기인하며, 도메인 적응 사전학습(DAPT)을 통해 개선 가능하다. 전반적으로 FP8 학습과 MXFP8BlockScaling 레시피가 1B 규모 한국어 모델 학습에 성공적으로 적용되었음을 확인하였다.
|
||||
|
||||
---
|
||||
|
||||
*이 보고서는 `korean_1b_fp8_run1` 체크포인트의 Sliding-window Perplexity 평가 결과를 기록한 문서입니다.*
|
||||
*평가 파이프라인: `eval/perplexity.py`, 보고서 작성일: 2026-02-26*
|
||||
319
source/eval/reports/02_generation_report.md
Normal file
319
source/eval/reports/02_generation_report.md
Normal file
@@ -0,0 +1,319 @@
|
||||
# 02. 생성 품질 평가 보고서
|
||||
|
||||
**모델**: `korean_1b_fp8_run1` (1.19B 파라미터, 34,000 steps)
|
||||
**평가일**: 2026-02-26
|
||||
**평가자**: llm-bang 실험팀
|
||||
|
||||
---
|
||||
|
||||
## 1. 실험 설정
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|----|
|
||||
| 모델 | korean_1b_fp8_run1 (체크포인트: step-34000) |
|
||||
| 파라미터 수 | ~1.19B |
|
||||
| 추론 dtype | BF16 |
|
||||
| 하드웨어 | 1× NVIDIA B200 (192GB VRAM) |
|
||||
| temperature | 0.8 |
|
||||
| top_p | 0.9 |
|
||||
| top_k | 50 |
|
||||
| max_new_tokens | 200 |
|
||||
| 테스트 프롬프트 수 | 10개 |
|
||||
| 프롬프트 카테고리 | 사실 지식, 창의 생성, 코드, 수학, 요리, 역사 |
|
||||
|
||||
> **참고**: 이 보고서는 사전학습(pretraining)만 완료된 base 모델을 대상으로 한다. Instruction tuning(SFT) 및 RLHF는 적용되지 않았다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 생성 결과
|
||||
|
||||
### 프롬프트 1: 사실 지식 — 수도
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
한국의 수도는
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 한국의 수도는서울입니다.'서울'이라는 도시는 대한민국 수도이자, '서울'이라는 도시의 이름은 대한민국 수도이자, 서울의 옛이름이기도 한 '한성'입니다.'한성'은 서울의 옛 이름이고, '한성'은 수도 서울의 옛 이름이기도 합니다. (이후 반복...)
|
||||
|
||||
**분석**:
|
||||
- 서울이 수도라는 핵심 사실은 올바르게 생성함.
|
||||
- '한성'이 서울의 옛 이름이라는 사실도 맞지만, 이후 동일 설명이 반복적으로 나열되며 퇴화함.
|
||||
- 사실 정확도는 부분적(Partial). 반복 퇴화(repetition degeneration) 징후 존재.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 2: 개념 설명 — 인공지능
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
인공지능이란
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 인공지능이란?1. '인공지능(AI)'의 등장 배경 2. 인공지능이 가진 특징 3. 인공지능의 기능 4. 인공지능의 문제점 5. 인공지능의 미래... (목차 구조 반복)
|
||||
|
||||
**분석**:
|
||||
- 레포트 또는 에세이의 목차 구조를 생성함. 실제 내용 없이 목차만 나열.
|
||||
- 학습 데이터에 레포트/목차 형식의 문서가 상당 비율 포함되어 있음을 시사.
|
||||
- 반복은 없으나 정보 밀도가 매우 낮음. 의미 있는 답변으로 보기 어려움.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 3: 창의 생성 — 일상 서술
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
오늘 날씨가 좋아서
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 더 열심히 했어요..이번에는 여름을 주제로 한 노래들을 모아서 소개해드리려고 해요..'SUMMER SONIC'을 가져왔어요...
|
||||
|
||||
**분석**:
|
||||
- 자연스러운 블로그 포스트 톤으로 생성됨.
|
||||
- 날씨 이야기에서 노래 추천으로 전환되었으며, 창의적이지만 맥락이 다소 벗어남.
|
||||
- 10개 프롬프트 중 반복이 없는 가장 자연스러운 생성 사례 중 하나.
|
||||
- 학습 데이터에서 일상 블로그 포스트 스타일이 모델에 잘 흡수된 것으로 보임.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 4: 사실 지식 — 역사적 사건
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
대한민국의 역사에서 가장 중요한 사건은
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 대한민국 임시정부 수립입니다. (이후 같은 문장 11번 이상 반복)
|
||||
|
||||
**분석**:
|
||||
- '대한민국 임시정부 수립'이라는 핵심 사실 자체는 역사적으로 타당한 답변임.
|
||||
- 그러나 이후 동일 문장이 11번 이상 반복되는 심각한 반복 퇴화가 발생함.
|
||||
- Trigram repetition 비율: **87.7%** — 가장 심각한 반복 퇴화 사례.
|
||||
- Beam search 또는 repetition penalty 없이 greedy/top-p 샘플링만으로는 이러한 퇴화가 빈번하게 나타남.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 5: 실용 정보 — 교통
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
서울에서 부산까지 가는 방법은
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> KTX와 SRT 두 가지. 요금 정보 제공 (부정확한 수치).
|
||||
|
||||
**분석**:
|
||||
- 구조적으로 정돈된 답변을 생성함.
|
||||
- KTX와 SRT를 구분하는 것은 정확함.
|
||||
- 그러나 요금 수치가 실제와 다름 — 수치적 사실(hallucination) 문제 발생.
|
||||
- 1B 모델의 사실 기억 한계가 드러나는 전형적인 사례.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 6: 코드 생성 — Python
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
다음은 파이썬 코드입니다:
|
||||
def hello():
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> print("Hello World!"); 이후 반복 퇴화.
|
||||
|
||||
**분석**:
|
||||
- 기초적인 `print("Hello World!")` 완성은 가능함.
|
||||
- 이후 의미 있는 코드 생성 없이 반복 퇴화로 진입.
|
||||
- 코드 생성 능력은 매우 제한적임.
|
||||
- 1B 한국어 특화 모델의 특성상 코드 학습 데이터 비율이 낮아 코드 능력이 부족한 것으로 보임.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 7: 수학 — 산술
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
1 + 1 = 2이고, 2 + 2 =
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 4인데, 이후 n + 2 = ... 패턴 반복하며 점점 오답. 21 + 2 = 40, 22 + 2 = 44 등.
|
||||
|
||||
**분석**:
|
||||
- `2 + 2 = 4`는 올바르게 생성함.
|
||||
- 이후 덧셈 패턴을 계속 이어가지만 수치가 점점 틀려짐 (예: `21 + 2 = 40`, `22 + 2 = 44`).
|
||||
- 실제 산술 연산 능력은 없으며, 숫자 패턴을 표면적으로 모방하는 수준임.
|
||||
- 수학적 추론 능력은 pretrain만으로는 형성되기 어려우며, 수식 데이터 추가 및 chain-of-thought 학습이 필요함.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 8: 창의 생성 — 시적 서술
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
봄이 오면 꽃이 피고
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 꽃이 지면 열매가 열린다... 만물이 소생하는 봄... (반복)
|
||||
|
||||
**분석**:
|
||||
- 시적·서정적 서술 톤을 잘 포착함.
|
||||
- 한국어 문학적 표현 패턴(계절 묘사, 자연 순환)을 자연스럽게 이어감.
|
||||
- 후반부에서 반복 퇴화로 진입하지만, 초반부 생성 품질은 양호함.
|
||||
- 한국어 문학 및 수필 스타일 학습이 잘 되어 있음을 시사.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 9: 실용 지식 — 요리 레시피
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
맛있는 김치찌개를 만들려면
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 찹쌀을 불려야 합니다... (잘못된 레시피)
|
||||
|
||||
**분석**:
|
||||
- 레시피 형식(재료 나열, 순서 설명)은 맞추고 있음.
|
||||
- 내용이 부정확함: 김치찌개 레시피에 찹쌀은 사용하지 않음.
|
||||
- 도메인 특화 지식에서의 hallucination이 명확하게 드러나는 사례.
|
||||
- 1B 모델이 레시피 형식은 학습했으나 실제 요리 지식의 정확성은 담보되지 않음.
|
||||
|
||||
---
|
||||
|
||||
### 프롬프트 10: 사실 지식 — 역사 인물
|
||||
|
||||
**입력 프롬프트**:
|
||||
```
|
||||
세종대왕은
|
||||
```
|
||||
|
||||
**생성 결과**:
|
||||
|
||||
> 조선을 건국하고... (세종이 아니라 태조의 업적을 서술). 사실 오류 다수.
|
||||
|
||||
**분석**:
|
||||
- 세종대왕의 가장 대표적인 업적인 훈민정음 창제를 언급하지 않음.
|
||||
- 조선 건국은 태조 이성계의 업적으로, 세종대왕과 혼동하는 심각한 사실 오류.
|
||||
- 역사 인물 관련 사실 정확도가 낮음.
|
||||
- 1B 모델의 사실 기억 및 개체 구분 한계를 명확히 보여주는 사례.
|
||||
|
||||
---
|
||||
|
||||
## 3. 종합 분석
|
||||
|
||||
### 3.1 정량 지표 요약
|
||||
|
||||
| 프롬프트 | 카테고리 | 반복 퇴화 | 사실 정확도 | 자연스러움 |
|
||||
|----------|----------|-----------|-------------|-----------|
|
||||
| 1. 한국의 수도는 | 사실 지식 | 중간 | 부분적 | 보통 |
|
||||
| 2. 인공지능이란 | 개념 설명 | 없음 | 낮음 (무내용) | 낮음 |
|
||||
| 3. 오늘 날씨가 좋아서 | 창의 생성 | 없음 | N/A | 높음 |
|
||||
| 4. 대한민국의 역사 | 사실 지식 | 심각 (87.7%) | 부분적 | 낮음 |
|
||||
| 5. 서울→부산 교통 | 실용 정보 | 없음 | 부분적 | 높음 |
|
||||
| 6. 파이썬 코드 | 코드 생성 | 중간 | 낮음 | 낮음 |
|
||||
| 7. 1+1=2, 2+2= | 수학 | 중간 | 낮음 | 낮음 |
|
||||
| 8. 봄이 오면 | 창의/시적 | 경미 | N/A | 높음 |
|
||||
| 9. 김치찌개 레시피 | 실용 지식 | 없음 | 낮음 | 보통 |
|
||||
| 10. 세종대왕은 | 역사 인물 | 없음 | 매우 낮음 | 보통 |
|
||||
|
||||
### 3.2 강점
|
||||
|
||||
1. **한국어 문법 및 자연스러운 문장 생성**: 문법적으로 올바른 한국어 문장을 생성하며, 블로그·일상 서술 톤에서 특히 자연스럽다.
|
||||
2. **문학적·서정적 표현**: 시적 서술 프롬프트(프롬프트 8)에서 한국어 문학 스타일을 잘 포착하였다.
|
||||
3. **구조적 형식 학습**: 레시피, 목차, 교통 정보 등 다양한 문서 형식을 인식하고 해당 구조로 생성하는 능력이 있다.
|
||||
4. **기초 사실 인식**: 서울이 수도, KTX/SRT 구분, 임시정부 수립 등 기초적인 사실은 부분적으로 맞추고 있다.
|
||||
|
||||
### 3.3 약점
|
||||
|
||||
1. **반복 퇴화 (Repetition Degeneration)**
|
||||
- 10개 프롬프트 중 3개(프롬프트 1, 4, 8)에서 중간 이상의 반복 퇴화 발생.
|
||||
- 프롬프트 4의 경우 trigram 반복률 87.7%로 가장 심각.
|
||||
- Base pretrain 모델에서 repetition penalty 없이 greedy/top-p 샘플링 시 나타나는 일반적인 현상이나, 현재 수준은 개선이 필요함.
|
||||
|
||||
2. **사실 정확도 (Factual Accuracy)**
|
||||
- 수치 정보(교통 요금), 역사 인물 업적, 요리 레시피 등 디테일에서 hallucination 빈발.
|
||||
- 특히 역사 인물(세종대왕 vs. 태조 혼동)에서 개체 구분 오류가 두드러짐.
|
||||
- 1B 파라미터 규모의 base 모델로서 예상 범위 내의 한계이나, 실사용에는 적합하지 않음.
|
||||
|
||||
3. **코드 생성 능력**
|
||||
- 기초적인 코드 완성 외 실질적인 코드 생성 불가.
|
||||
- 한국어 특화 학습 데이터 특성상 코드 비율이 낮은 것이 주요 원인.
|
||||
|
||||
4. **수학 및 산술 능력**
|
||||
- `2 + 2 = 4` 수준의 단순 연산만 가능하며 이후 산술 패턴 모방으로만 동작.
|
||||
- 실질적인 수치 추론 능력 없음.
|
||||
|
||||
5. **전문 지식 정확도**
|
||||
- 레시피, 요금 등 전문/실용 지식 도메인에서 형식은 맞추나 내용의 정확성이 낮음.
|
||||
|
||||
### 3.4 1B Base 모델 관점에서의 종합 평가
|
||||
|
||||
사전학습(pretraining)만 완료된 1.19B base 모델로서, 이번 생성 품질 평가 결과는 **예상 범위 내**에 해당한다.
|
||||
|
||||
- 동일 규모의 타 오픈소스 1B base 모델(예: TinyLlama-1.1B, EXAONE-3.0-1.2B 초기 버전 등)과 비교 시 한국어 유창성 측면에서는 경쟁력 있는 수준.
|
||||
- Instruction tuning(SFT) 및 RLHF 없이 반복 퇴화가 나타나는 것은 GPT-2, LLaMA-1 등 base 모델에서도 공통적으로 관찰되는 현상임.
|
||||
- 사실 정확도의 한계는 1B 파라미터의 구조적 제약으로, 7B+ 모델에서 개선이 기대됨.
|
||||
|
||||
---
|
||||
|
||||
## 4. 개선 방향
|
||||
|
||||
### 4.1 단기 개선 (현재 모델에 즉시 적용 가능)
|
||||
|
||||
| 방법 | 효과 | 적용 난이도 |
|
||||
|------|------|------------|
|
||||
| `repetition_penalty=1.1~1.3` 적용 | 반복 퇴화 완화 | 낮음 (추론 파라미터 조정) |
|
||||
| `no_repeat_ngram_size=3` 적용 | n-gram 반복 차단 | 낮음 (추론 파라미터 조정) |
|
||||
| temperature 조정 (0.7~0.75) | 생성 안정성 향상 | 낮음 |
|
||||
|
||||
### 4.2 중기 개선 (추가 학습 필요)
|
||||
|
||||
1. **SFT (Supervised Fine-Tuning)**
|
||||
- 지시문 따르기(instruction-following) 능력 부여
|
||||
- 반복 퇴화 근본적 완화
|
||||
- 추천 데이터: Open-Platypus-ko, KoAlpaca, LIMA-ko 등
|
||||
|
||||
2. **코드 및 수학 데이터 추가 pretraining**
|
||||
- Python/코드 데이터(The Stack, CodeSearchNet 등) 혼합 학습
|
||||
- 수식 및 chain-of-thought 데이터 추가
|
||||
- 권장 비율: 코드 10~15%, 일반 한국어 85~90%
|
||||
|
||||
3. **RLHF / DPO**
|
||||
- 사실 정확도 및 지시 준수 추가 개선
|
||||
- 1B 규모에서는 DPO(Direct Preference Optimization)가 비용 대비 효과적
|
||||
|
||||
### 4.3 장기 개선 (모델 규모 확장)
|
||||
|
||||
- **7B+ 모델**로 확장 시 사실 정확도, 코드 생성, 수학 추론 능력 전반적으로 향상 기대.
|
||||
- 현재 하드웨어(8× B200, ~1.47TB VRAM)로 7B FSDP 학습 충분히 가능.
|
||||
- 한국어 특화 7B 모델 pretraining 후 SFT → DPO 파이프라인 적용 권장.
|
||||
|
||||
---
|
||||
|
||||
## 5. 결론
|
||||
|
||||
`korean_1b_fp8_run1` 모델(1.19B, 34k steps)은 한국어 문법 및 문체 생성 능력을 갖춘 base 모델로서의 기본 역할을 수행하고 있다. 블로그·일상·서정적 텍스트 생성에서 자연스러운 결과를 보이며, FP8 + DDP 환경의 학습 파이프라인이 안정적으로 동작했음을 확인하였다.
|
||||
|
||||
그러나 사실 정확도, 반복 퇴화, 코드/수학 능력 부재는 현재 모델의 명확한 한계이다. 이는 1B base 모델에서 일반적으로 기대되는 수준이며, SFT → DPO 파이프라인을 통해 상당 부분 개선 가능하다. 추후 7B 규모로의 확장을 통해 사실 정확도와 추론 능력의 근본적인 향상을 도모하는 것이 권장된다.
|
||||
|
||||
---
|
||||
|
||||
*이 보고서는 `eval/generate.py`를 통해 생성된 결과를 수동으로 분석한 것이다.*
|
||||
*관련 평가 스크립트: `/PROJECT/0325120031_A/ghong/taketimes/llm-bang/eval/generate.py`*
|
||||
190
source/eval/reports/03_repetition_calibration_report.md
Normal file
190
source/eval/reports/03_repetition_calibration_report.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# 보고서 03 — 반복 분석 및 캘리브레이션 점검
|
||||
|
||||
**모델**: korean_1b_fp8_run1 (~1.19B 파라미터)
|
||||
**학습 단계**: 34,000 steps
|
||||
**작성일**: 2026-02-26
|
||||
|
||||
---
|
||||
|
||||
## Part A — 반복 분석 (Repetition Analysis)
|
||||
|
||||
### 1. N-gram 반복률 결과
|
||||
|
||||
아래 표는 10개 프롬프트에 대해 greedy decoding으로 생성한 출력의 N-gram 반복률을 측정한 결과다. 각 열의 값은 전체 생성 토큰 중 이미 등장한 N-gram이 다시 등장하는 비율을 나타낸다.
|
||||
|
||||
| 프롬프트 | 1-gram | 2-gram | 3-gram | 4-gram | 판정 |
|
||||
|---------|-------:|-------:|-------:|-------:|:----:|
|
||||
| 한국의 수도는 | 75.3% | 68.4% | 65.3% | 64.9% | DEGENERATE |
|
||||
| 인공지능이란 | 50.7% | 31.9% | 29.6% | 27.1% | OK |
|
||||
| 오늘 날씨가 좋아서 | 7.6% | 0.0% | 0.0% | 0.0% | OK |
|
||||
| 대한민국의 역사... | 90.7% | 89.2% | 87.7% | 86.9% | DEGENERATE |
|
||||
| 서울에서 부산까지 | 24.1% | 7.3% | 2.5% | 0.0% | OK |
|
||||
| 파이썬 코드 | 75.0% | 71.8% | 68.4% | 64.9% | DEGENERATE |
|
||||
| 1 + 1 = 2이고 | 69.9% | 44.7% | 22.1% | 0.0% | OK |
|
||||
| 봄이 오면 꽃이 피고 | 30.0% | 15.2% | 9.2% | 6.2% | OK |
|
||||
| 김치찌개를 만들려면 | 31.0% | 11.1% | 5.1% | 3.1% | OK |
|
||||
| 세종대왕은 | 14.8% | 7.5% | 5.1% | 3.8% | OK |
|
||||
| **평균** | **46.9%** | **34.7%** | **29.5%** | **25.7%** | — |
|
||||
|
||||
**판정 기준**: 4-gram 반복률 50% 초과 또는 3-gram 반복률 60% 초과 시 DEGENERATE로 분류
|
||||
**DEGENERATE 비율**: 3/10 (30%)
|
||||
|
||||
---
|
||||
|
||||
### 2. 분석
|
||||
|
||||
#### 2-1. 반복 퇴화(degenerate repetition)의 원인
|
||||
|
||||
**1. 1B base model의 전형적 한계**
|
||||
|
||||
1B 규모의 base pretrain 모델은 학습된 확률 분포에서 고확률 시퀀스가 반복 루프에 진입하는 경향이 있다. Greedy decoding은 매 step마다 가장 높은 확률의 토큰을 선택하므로, 모델이 한 번 특정 패턴을 생성하면 그 패턴이 다음 토큰 예측에 유리한 컨텍스트로 작용해 스스로 강화된다.
|
||||
|
||||
**2. Full-sequence forward의 컨텍스트 누적 효과**
|
||||
|
||||
KV cache 없이 full-sequence forward 방식으로 생성할 경우, 앞에서 반복된 토큰들이 컨텍스트를 점유하여 이후 생성에서 같은 패턴을 더욱 높은 확률로 유도한다. 반복이 반복을 낳는 피드백 루프가 형성된다.
|
||||
|
||||
**3. 사실 기반 프롬프트에서의 취약성**
|
||||
|
||||
"한국의 수도는", "대한민국의 역사" 같은 프롬프트는 모델이 단일 사실(예: "서울")을 알지만, 그 사실을 기반으로 다음 문장으로 전환하는 다양성이 부족할 때 반복이 발생한다. 모델은 "서울은 수도입니다. 서울은 수도입니다." 식으로 동일한 문장을 반복 생성한다.
|
||||
|
||||
**4. 코드 프롬프트의 취약성**
|
||||
|
||||
"파이썬 코드" 프롬프트에서도 DEGENERATE 판정이 나타났다. 이는 학습 데이터의 한국어 코드 관련 문서가 상대적으로 부족하기 때문으로 추정된다. 코드 구조(들여쓰기, 반복 키워드)가 N-gram 반복률을 높이는 효과도 있다.
|
||||
|
||||
#### 2-2. 양호한 프롬프트의 특성
|
||||
|
||||
"오늘 날씨가 좋아서", "김치찌개를 만들려면", "세종대왕은" 등 **개방형이고 생활 밀착형인 프롬프트**에서는 반복률이 낮다. 이들 프롬프트는 학습 데이터에서 다양한 방식으로 이어지는 문장과 연결되어 있어 모델이 여러 경로를 탐색할 수 있기 때문이다.
|
||||
|
||||
#### 2-3. 1B pretrain-only 모델 기준에서의 평가
|
||||
|
||||
Instruction tuning(SFT/RLHF) 이전의 base pretrain 모델에서 30% degenerate는 예상 범위 내다. GPT-2(1.5B), OPT-1.3B 등 동급 모델들도 greedy decoding에서 비슷한 수준의 반복 문제를 보였다. 모델 크기가 커지거나 instruction tuning이 적용되면 이 비율은 대폭 감소한다.
|
||||
|
||||
---
|
||||
|
||||
### 3. 개선 전략
|
||||
|
||||
#### 3-1. 샘플링(Sampling) 단계 개선
|
||||
|
||||
생성 시 아래 기법을 적용하면 반복 문제를 즉시 완화할 수 있다.
|
||||
|
||||
- **Repetition penalty** (theta = 1.2~1.5): 이미 생성된 토큰의 로짓을 페널티로 감소시켜 반복을 억제. theta=1.3이 품질과 다양성의 균형점으로 추천
|
||||
- **Frequency penalty**: 단순 반복뿐 아니라 빈번하게 등장하는 토큰 전체를 억제
|
||||
- **Top-p (nucleus) sampling**: p=0.9로 설정하면 greedy의 반복 루프를 끊는 데 효과적
|
||||
- **Temperature**: 0.7~0.9 범위에서 다양성을 높이면서도 coherence 유지
|
||||
|
||||
#### 3-2. 학습 단계 개선
|
||||
|
||||
- **SFT (Supervised Fine-Tuning)**: 다양한 질문-답변 쌍으로 fine-tuning하면 instruction following 능력과 동시에 반복 억제 패턴이 학습됨
|
||||
- **DPO (Direct Preference Optimization)**: 반복이 심한 출력을 rejected로, 다양한 출력을 chosen으로 설정하면 반복 문제를 직접 줄일 수 있음
|
||||
- **데이터 다양성 강화**: 코드, 사실 서술 관련 한국어 데이터를 보강하면 해당 도메인의 반복 취약성 개선
|
||||
|
||||
#### 3-3. 모델 크기 확장
|
||||
|
||||
7B 이상 모델에서 반복 문제가 감소하는 경향이 있다. 현재 1B base pretrain 수준에서는 반복이 구조적으로 발생할 수밖에 없으며, 모델 capacity 증가가 가장 근본적인 해결책이다.
|
||||
|
||||
---
|
||||
|
||||
## Part B — 캘리브레이션 점검 (Calibration Check)
|
||||
|
||||
### 1. 결과
|
||||
|
||||
검증 데이터셋에서 10,240개 토큰을 샘플링하여 모델의 예측 신뢰도와 정확도를 측정했다.
|
||||
|
||||
| 지표 | 값 |
|
||||
|------|---:|
|
||||
| 분석 토큰 수 | 10,240 |
|
||||
| 평균 정답 토큰 확률 (Mean correct-token prob) | 0.4738 |
|
||||
| 평균 예측 엔트로피 | 2.2413 nats |
|
||||
| Accuracy @1 (Top-1 정확도) | 56.18% |
|
||||
| Accuracy @5 | 72.35% |
|
||||
| Accuracy @10 | 77.75% |
|
||||
|
||||
---
|
||||
|
||||
### 2. 분석
|
||||
|
||||
#### 2-1. Accuracy@1 = 56.18%
|
||||
|
||||
다음 토큰을 56%의 확률로 정확히 맞힌다는 것은 1B 규모 모델 기준으로 양호한 수치다. 비교 기준으로, GPT-2(1.5B)의 영어 WikiText에서의 Top-1 accuracy가 약 40~50% 수준이었으므로, 한국어 데이터에서 56%는 그보다 높은 수준이다.
|
||||
|
||||
한국어 특성상 조사(이/가, 을/를, 은/는), 어미(~다, ~고, ~서), 문장 종결어미 등 문법적으로 예측 가능한 토큰이 많아 accuracy가 상대적으로 높게 나타날 수 있다는 점도 고려해야 한다. 그럼에도 불구하고 56%는 모델이 언어 구조를 충분히 학습했음을 나타낸다.
|
||||
|
||||
#### 2-2. Accuracy@5 = 72.35%
|
||||
|
||||
Top-5 안에 정답이 있는 비율이 72%로, 모델이 합리적인 후보군을 잘 제시하고 있다. Accuracy@1(56%)과 @5(72%) 사이의 격차는 약 16%p다. 이는 모델이 확신하지 못하는 토큰이 16% 정도 존재하지만, 그 토큰들은 여전히 상위 5개 후보군 안에 포함시킨다는 의미다. 즉 모델이 틀릴 때도 "합리적으로 틀린다"는 것을 시사한다.
|
||||
|
||||
#### 2-3. Accuracy@10 = 77.75%
|
||||
|
||||
@5(72.35%)와 @10(77.75%) 사이의 격차는 약 5%p로, @1→@5 격차(16%p)보다 크게 줄어든다. Top-5를 넘어서면 추가적인 이득이 급격히 감소하는 수익 체감 구조다. 나머지 22.25%의 토큰은 Top-10에도 포함되지 않으며, 이들은 주로 다음에 해당할 가능성이 높다:
|
||||
|
||||
- **고유명사**: 인물명, 지명, 브랜드명 등 학습 빈도가 낮은 토큰
|
||||
- **숫자 및 수치**: 특정 연도, 금액, 통계 수치
|
||||
- **드문 표현**: 저빈도 어휘, 전문 용어, 신조어
|
||||
|
||||
이 22.25%가 모델의 실질적인 취약 구간이다.
|
||||
|
||||
#### 2-4. Mean correct-token prob = 0.4738
|
||||
|
||||
정답 토큰에 부여하는 평균 확률이 47%다. 이는 모델이 정답 토큰을 절반에 가까운 확률로 "가장 유력한 후보"로 지목한다는 의미로, 꽤 높은 확신도다.
|
||||
|
||||
NLL(Negative Log-Likelihood)과의 관계에서 PPL = exp(mean NLL) ≈ exp(−ln(0.4738)) ≈ 1/0.4738 ≈ 2.11 이 되어야 하지만, 실제 측정된 엔트로피가 2.2413 nats임을 고려하면 PPL ≈ exp(2.2413) ≈ 9.4 수준이다. 이는 10,240 토큰 subset의 통계로, 전체 검증셋의 PPL=6.95와 다소 차이가 있으나 subset 샘플링 편향 범위 내다.
|
||||
|
||||
#### 2-5. Mean entropy = 2.2413 nats
|
||||
|
||||
- **bits 변환**: 2.2413 / ln(2) ≈ 3.23 bits
|
||||
- **유효 후보 수**: 2^3.23 ≈ 9.4개의 토큰이 실질적으로 경쟁한다는 의미
|
||||
- **해석**: 64K vocabulary 중 매 step마다 평균 약 9~10개의 토큰이 의미 있는 확률을 가진다는 뜻으로, 모델이 충분히 confident하면서도 완전히 결정론적이지 않음을 보여준다. 이 수준의 엔트로피는 반복 없이 다양한 생성이 가능한 healthy한 분포를 의미한다.
|
||||
|
||||
---
|
||||
|
||||
### 3. 종합 평가
|
||||
|
||||
캘리브레이션은 전반적으로 건강한 수준이다. 핵심 지표를 종합하면:
|
||||
|
||||
1. **예측 품질 양호**: Accuracy@1 = 56%, Accuracy@5 = 72%로, 모델이 다음 토큰을 잘 예측하며 불확실한 경우에도 합리적인 후보군을 제시한다.
|
||||
|
||||
2. **적절한 확신도**: 평균 정답 확률 47%, 평균 엔트로피 2.24 nats로, 모델이 너무 자신 없거나(under-confident) 너무 자신만만하지(over-confident) 않다. 이는 temperature=1.0에서 생성이 합리적으로 작동할 것을 시사한다.
|
||||
|
||||
3. **Greedy decoding 적합성**: Top-1이 56%이면 greedy decoding도 합리적인 결과를 줄 수 있다. 단, 다양성은 부족하므로 실제 생성 애플리케이션에서는 sampling이 권장된다.
|
||||
|
||||
4. **취약 구간 존재**: Top-10 밖의 22.25% 토큰이 모델의 실질적 약점이며, 이는 주로 factual knowledge(사실 지식) 부족에서 기인한다. 이 부분은 더 많은 학습 데이터 또는 외부 지식 소스(RAG 등) 활용으로 보완 가능하다.
|
||||
|
||||
---
|
||||
|
||||
### 4. 개선 방향
|
||||
|
||||
#### 4-1. 모델 크기 증가
|
||||
|
||||
모델 파라미터가 늘어남에 따라 Accuracy@1이 상승하는 경향이 뚜렷하다. 7B 모델은 1B 대비 @1이 10~15%p 향상되는 것이 일반적이다. 현재 1B 모델의 56%는 기반이 탄탄하여 확장 시 좋은 출발점이 된다.
|
||||
|
||||
#### 4-2. SFT 후 캘리브레이션 모니터링
|
||||
|
||||
SFT(Supervised Fine-Tuning) 이후 캘리브레이션이 변할 수 있다. 일반적으로 SFT 후 모델은 특정 응답 패턴에 over-confident해지는 경향이 있어 accuracy가 약간 하락하고 엔트로피가 낮아질 수 있다. SFT 완료 후 동일 지표로 재측정하여 비교를 권장한다.
|
||||
|
||||
#### 4-3. Temperature 튜닝
|
||||
|
||||
현재 캘리브레이션 결과를 활용하여 최적 temperature를 결정할 수 있다. 평균 엔트로피 2.24 nats 기준:
|
||||
|
||||
- **Temperature < 1.0**: 엔트로피 감소, 더 결정론적 생성, 반복 위험 증가
|
||||
- **Temperature = 1.0**: 현재 캘리브레이션 그대로 유지
|
||||
- **Temperature 0.7~0.8**: 다양성과 coherence의 균형점으로 추천
|
||||
|
||||
Temperature scaling을 통해 ECE(Expected Calibration Error)를 최소화하는 최적값을 찾는 후처리 캘리브레이션도 고려할 수 있다.
|
||||
|
||||
#### 4-4. Top-10 밖 취약 토큰 분석
|
||||
|
||||
22.25%의 Top-10 밖 토큰을 별도로 수집·분석하여 이들의 도메인 분포를 파악하면, 추가 학습 데이터 수집 방향을 결정하는 데 활용할 수 있다. 예를 들어 고유명사 관련 토큰이 많다면 위키피디아 기반 데이터를 보강하는 것이 효과적이다.
|
||||
|
||||
---
|
||||
|
||||
## 요약
|
||||
|
||||
| 구분 | 지표 | 값 | 평가 |
|
||||
|------|------|---:|:----:|
|
||||
| 반복 분석 | DEGENERATE 비율 | 30% (3/10) | 1B base 수준에서 정상 범위 |
|
||||
| 반복 분석 | 평균 4-gram 반복률 | 25.7% | 자연스러운 프롬프트에서 낮음 |
|
||||
| 캘리브레이션 | Accuracy@1 | 56.18% | 양호 |
|
||||
| 캘리브레이션 | Accuracy@5 | 72.35% | 양호 |
|
||||
| 캘리브레이션 | Mean entropy | 2.24 nats | 건강한 분포 |
|
||||
|
||||
**결론**: korean_1b_fp8_run1 모델은 캘리브레이션 측면에서 1B pretrain 모델로서 건강한 상태를 보인다. 반복 퇴화는 사실 기반·코드 프롬프트에서 국소적으로 발생하며, sampling 전략 개선(repetition penalty, top-p)으로 즉시 완화 가능하다. 향후 SFT/DPO 단계에서 근본적인 개선이 예상된다.
|
||||
288
source/eval/reports/04_token_analysis_comparison_report.md
Normal file
288
source/eval/reports/04_token_analysis_comparison_report.md
Normal file
@@ -0,0 +1,288 @@
|
||||
# 04. 토큰 수준 NLL 분석 + 온도별 생성 비교 리포트
|
||||
|
||||
**모델**: korean_1b_fp8_run1 (~1.19B 파라미터, 34k steps)
|
||||
**작성일**: 2026-02-26
|
||||
**목적**: 토큰 단위 부정 로그 가능도(Negative Log-Likelihood) 분포 분석 및 생성 온도(temperature) 변화에 따른 출력 품질 비교
|
||||
|
||||
---
|
||||
|
||||
## Part A — 토큰 수준 NLL 분석
|
||||
|
||||
### 개요
|
||||
|
||||
토큰 수준 NLL(Negative Log-Likelihood)은 모델이 각 토큰을 얼마나 확신을 갖고 예측하는지를 측정하는 지표다. NLL이 낮을수록 모델이 해당 토큰을 높은 확률로 정확히 예측했음을 의미하며, NLL이 높을수록 모델이 해당 토큰을 예측하기 어려웠음(낮은 확률로 예측)을 의미한다.
|
||||
|
||||
- **분석 대상**: 2,047 토큰 (50 batches, stride=2,048)
|
||||
- **측정 방식**: 각 토큰에 대해 `−log P(token | context)` 계산
|
||||
|
||||
---
|
||||
|
||||
### 1. NLL 분포 히스토그램
|
||||
|
||||
| NLL 범위 | 토큰 수 | 비율 |
|
||||
|---------|--------|------|
|
||||
| < 1 | 840 | 41.04% |
|
||||
| 1 ~ 2 | 273 | 13.34% |
|
||||
| 2 ~ 3 | 200 | 9.77% |
|
||||
| 3 ~ 5 | 311 | 15.19% |
|
||||
| 5 ~ 10 | 342 | 16.71% |
|
||||
| > 10 | 81 | 3.96% |
|
||||
|
||||
**기술 통계량**
|
||||
|
||||
| 지표 | 값 |
|
||||
|-----|---|
|
||||
| 평균 NLL (Mean) | 2.7338 |
|
||||
| 표준편차 (Std) | 3.1106 |
|
||||
| 중앙값 (Median) | 1.6328 |
|
||||
| 분석 토큰 수 | 2,047 |
|
||||
|
||||
---
|
||||
|
||||
### 2. 분포 해석 및 분석
|
||||
|
||||
#### 2-1. 분포의 형태: 오른쪽 꼬리 분포 (Right-Skewed Distribution)
|
||||
|
||||
중앙값(1.63)이 평균(2.73)보다 현저히 낮다. 이는 분포가 오른쪽으로 치우친 형태(right-skewed)임을 의미한다. 즉, **대부분의 토큰은 비교적 쉽게 예측되지만, 소수의 매우 어려운 토큰이 평균을 크게 끌어올리는 구조**다.
|
||||
|
||||
표준편차(3.11)가 평균(2.73)보다 크다는 사실도 같은 방향을 가리킨다. 분산이 크다는 것은 모델이 "잘 아는 영역"과 "거의 모르는 영역" 사이의 격차가 크다는 것을 뜻한다.
|
||||
|
||||
#### 2-2. NLL < 1 구간 (41.04%): 모델이 확신하는 토큰
|
||||
|
||||
전체 토큰의 약 41%는 NLL이 1 미만이다. 이는 모델이 이 토큰들을 매우 높은 확률(`P > e^{-1} ≈ 0.368`, 실제로는 더 높음)로 예측했다는 의미다. 이 구간에 속하는 토큰들은 주로 다음과 같다:
|
||||
|
||||
- **조사**: 은/는/이/가/을/를/의/에/로 등 한국어 문법 조사
|
||||
- **어미**: 한국어 동사/형용사 어미 (-다, -고, -며, -어서 등)
|
||||
- **구두점**: 마침표, 쉼표, 괄호 등
|
||||
- **빈번한 접속사 및 부사**: 그리고, 또한, 하지만 등
|
||||
- **패턴이 명확한 시퀀스**: URL, 날짜, 포맷화된 텍스트 내 반복 패턴
|
||||
|
||||
이 결과는 모델이 한국어의 **형태론적 패턴과 문법 구조**를 상당히 잘 내재화했음을 시사한다.
|
||||
|
||||
#### 2-3. NLL > 5 구간 (20.67%): 모델이 "추측"하는 토큰
|
||||
|
||||
전체 토큰의 약 20.67%(NLL 5~10 구간 16.71% + NLL > 10 구간 3.96%)는 모델이 매우 낮은 확률로 예측한 토큰들이다. 이 구간의 토큰들은 전형적으로:
|
||||
|
||||
- **고유명사**: 인명, 지명, 기업명 등 — 앞 문맥으로부터 예측이 어려움
|
||||
- **숫자**: 특정 수치는 문맥만으로 예측 불가능
|
||||
- **드문 단어**: 훈련 데이터에서 희소하게 등장하는 어휘
|
||||
- **외래어/영문 토큰**: 한국어 문맥 안에 삽입된 외국어 표현
|
||||
- **높은 문맥 의존도 토큰**: 해당 위치의 정보가 이전 문맥에 거의 담기지 않는 경우 (예: 특정 비유, 독창적 표현)
|
||||
|
||||
#### 2-4. 종합 평가
|
||||
|
||||
34k steps 기준으로, 모델은 전체 어휘 분포의 40% 이상을 매우 높은 정확도로 처리하고 있다. 이는 기본적인 한국어 언어 패턴 습득이 이루어졌음을 보여준다. 다만, 나머지 약 20%의 어려운 토큰들은 추가 학습이나 더 긴 컨텍스트 처리를 통해 개선 여지가 있다.
|
||||
|
||||
---
|
||||
|
||||
### 3. 가장 어려운 토큰 (Highest NLL) Top-15
|
||||
|
||||
| 순위 | 토큰 | 평균 NLL | 관찰 횟수 |
|
||||
|------|------|---------|---------|
|
||||
| 1 | `부드럽게` | 16.375 | 1 |
|
||||
| 2 | `리딩` | 15.188 | 1 |
|
||||
| 3 | `넘어가` | 13.688 | 1 |
|
||||
| 4 | `hon` | 13.625 | 1 |
|
||||
| 5 | `출근` | 13.500 | 1 |
|
||||
| 6 | `죄` | 13.062 | 1 |
|
||||
| 7 | `모터스` | 12.812 | 1 |
|
||||
| 8 | `델` | 12.812 | 1 |
|
||||
| 9 | `갇히` | 12.750 | 1 |
|
||||
| 10 | `마라` | 12.688 | 1 |
|
||||
| 11 | `Ana` | 12.604 | 3 |
|
||||
| 12 | `240` | 12.438 | 1 |
|
||||
| 13 | `비교` | 12.438 | 1 |
|
||||
| 14 | `높` | 12.375 | 1 |
|
||||
| 15 | `꼼꼼` | 12.375 | 1 |
|
||||
|
||||
#### 분석
|
||||
|
||||
**통계적 유의성 주의**: 대부분의 항목이 관찰 횟수 1회다. 단일 관찰에서 나온 NLL 값은 해당 토큰이 특정 문맥에서 얼마나 어려웠는지를 보여줄 뿐, 해당 토큰 전반에 대한 일반화는 어렵다. `Ana` (3회)가 그나마 반복 관찰된 케이스다.
|
||||
|
||||
**패턴별 분류**
|
||||
|
||||
| 패턴 유형 | 해당 토큰 | 어려운 이유 |
|
||||
|---------|---------|-----------|
|
||||
| 복합 어근 / 활용형 | `부드럽게`, `넘어가`, `갇히`, `높`, `꼼꼼` | 활용 전후 맥락이 다양하여 특정 형태 예측이 어려움 |
|
||||
| 영문 토큰 | `hon`, `Ana` | 한국어 문맥 내 영어 삽입 — 토크나이저 처리 방식에 따라 분리될 수 있음 |
|
||||
| 숫자 | `240` | 임의의 수치는 문맥으로 예측 불가능 |
|
||||
| 외래어 (음차) | `리딩`, `모터스`, `델` | 영어 단어의 한국어 음차는 원어의 발음 변환 규칙이 불규칙하여 예측이 어려움 |
|
||||
| 일반 어휘 (문맥 의존) | `출근`, `죄`, `마라`, `비교` | 이 단어들이 나오기 전 문맥이 다음 단어를 충분히 제한하지 않는 경우 |
|
||||
|
||||
모델이 영문 토큰과 외래어에서 어려움을 겪는 것은, 학습 데이터가 주로 한국어로 구성되어 있어 이중 언어 전환(code-switching) 상황에 대한 노출이 제한적이었기 때문으로 추정된다.
|
||||
|
||||
---
|
||||
|
||||
### 4. 가장 쉬운 토큰 (Lowest NLL) Top-11
|
||||
|
||||
| 순위 | 토큰 | 평균 NLL | 관찰 횟수 |
|
||||
|------|------|---------|---------|
|
||||
| 1 | `블러` | 0.000 | 2 |
|
||||
| 2 | `흥` | 0.000 | 1 |
|
||||
| 3 | `귀` | 0.000 | 1 |
|
||||
| 4 | `〕` | 0.000 | 2 |
|
||||
| 5 | `나` | 0.000 | 1 |
|
||||
| 6 | `27` | 0.000 | 2 |
|
||||
| 7 | `톡` | 0.000 | 2 |
|
||||
| 8 | `상` | 0.000 | 1 |
|
||||
| 9 | `com` | 0.000 | 1 |
|
||||
| 10 | `시아` | 0.000 | 2 |
|
||||
| 11 | `장` | 0.000 | 37 |
|
||||
|
||||
#### 분석
|
||||
|
||||
NLL = 0.000은 모델이 해당 토큰을 (수치적으로) 거의 100% 확률로 예측했음을 의미한다. 이 값은 부동소수점 반올림 결과일 수 있으나, 사실상 확률이 1에 매우 근접한 경우에만 이렇게 나타난다.
|
||||
|
||||
**`장` (37회): 가장 주목할 결과**
|
||||
|
||||
`장`은 37회라는 압도적인 관찰 횟수를 기록하면서도 NLL = 0.000을 유지했다. 한국어에서 `장`은 매우 다양한 단어의 구성 음절이다 (시장, 공장, 장관, 장소, 경찰서장, 도서관장 등). 이 토큰이 앞에 오는 패턴이 매우 규칙적이어서, 모델이 이전 문맥에서 `장`이 올 것을 사실상 확신했다는 의미다. 이는 모델이 **한국어 어휘 결합 패턴**을 깊이 학습했음을 강하게 시사한다.
|
||||
|
||||
**패턴별 분류**
|
||||
|
||||
| 패턴 유형 | 해당 토큰 | 예측 가능한 이유 |
|
||||
|---------|---------|--------------|
|
||||
| 매우 흔한 음절 | `장`, `나`, `상` | 선행 음절이 뒤따를 음절을 강하게 제한 |
|
||||
| 특수 기호 / 괄호 | `〕` | 괄호 쌍은 열리면 닫히는 패턴이 거의 확실 |
|
||||
| URL 패턴 | `com` | URL 도메인 내에서 `.com`은 고정 패턴 |
|
||||
| 숫자 패턴 | `27` | 특정 날짜/번호 포맷 내에서 연속적으로 등장 |
|
||||
| 특정 문맥의 음절 | `블러`, `시아`, `톡` | 고유명사나 특정 표현 내에서 앞 토큰이 뒤를 결정 |
|
||||
|
||||
이 결과는 모델이 한국어 **형태소 결합 패턴, 숫자/기호 패턴, URL 구조** 등을 잘 내재화했음을 보여준다.
|
||||
|
||||
---
|
||||
|
||||
## Part B — 온도별 생성 비교 (Greedy vs Sampling)
|
||||
|
||||
### 개요
|
||||
|
||||
생성 온도(temperature)는 소프트맥스 함수에서 로짓(logit)을 나누는 스칼라 값이다. 온도가 낮을수록 확률 분포가 날카로워져 모델이 가장 확률 높은 토큰을 선택하는 경향이 강해지고, 온도가 높을수록 분포가 평탄해져 다양한 토큰이 선택될 가능성이 높아진다.
|
||||
|
||||
$$P'(x_i) = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}$$
|
||||
|
||||
여기서 $T$는 온도이고, $z_i$는 토큰 $i$에 대한 로짓이다.
|
||||
|
||||
- **T = 0 (Greedy)**: 항상 가장 확률 높은 토큰 선택 → 결정론적
|
||||
- **T = 0.3**: 낮은 다양성, 높은 정확도
|
||||
- **T = 0.8**: 중간 다양성, 의미 연관성 유지
|
||||
- **T = 1.2**: 높은 다양성, 정확도 하락
|
||||
|
||||
---
|
||||
|
||||
### 1. 프롬프트: "한국의 수도는"
|
||||
|
||||
| 온도 설정 | 생성 결과 요약 |
|
||||
|---------|------------|
|
||||
| Greedy (T=0) | "서울이다. 서울은 역사적으로..." → 한양 반복 퇴화 |
|
||||
| Low (T=0.3) | "서울이다. 수도가 서울인 이유는..." → 행정구역 설명, 반복 진입 |
|
||||
| Normal (T=0.8) | "서울, 인천, 경기, 강원..." → 도 나열 (수도와 관련 없는 방향) |
|
||||
| High (T=1.2) | "아테네였잖아요" → 완전히 엉뚱한 방향 (hallucination 극대화) |
|
||||
|
||||
#### 세부 분석
|
||||
|
||||
**Greedy (T=0)**: 초반에는 사실에 맞는 "서울이다"를 생성하지만, 이후 역사적 서술로 전환하면서 "한양" 반복이 나타난다. 이는 Greedy 디코딩의 전형적인 퇴화(degeneration) 현상이다 — 모델이 한 번 특정 패턴에 진입하면 빠져나오기 어렵다.
|
||||
|
||||
**Low (T=0.3)**: Greedy보다 약간 나은 다양성을 보이지만, 여전히 반복 진입이 발생한다. "수도가 서울인 이유"를 설명하려는 시도 자체는 의미 있으나, 학습 데이터의 행정구역 설명 패턴을 그대로 재현하는 경향이 있다.
|
||||
|
||||
**Normal (T=0.8)**: 다양성은 높아지지만 정확도가 떨어진다. "수도" 프롬프트에서 도(道) 나열로 이어지는 것은 의미적 연관성은 있으나 질문에 대한 직접적인 답변에서 벗어난다.
|
||||
|
||||
**High (T=1.2)**: "아테네였잖아요"라는 완전히 잘못된 hallucination이 발생한다. 온도가 높을수록 확률 분포가 평탄해지므로, 낮은 확률의 토큰도 선택될 가능성이 크게 높아진다.
|
||||
|
||||
**결론**: 이 유형의 사실 기반 Q&A에서는 T=0.3~0.6 범위가 가장 적절하다. T=0의 반복 퇴화를 피하면서도, T=0.8 이상에서 발생하는 의미 일탈을 방지할 수 있다.
|
||||
|
||||
---
|
||||
|
||||
### 2. 프롬프트: "인공지능이란"
|
||||
|
||||
| 온도 설정 | 생성 결과 요약 |
|
||||
|---------|------------|
|
||||
| Greedy (T=0) | "무엇인가?[4] 321 2018.10.1..." → 게시판 포맷, 의미 없음 |
|
||||
| Low (T=0.3) | "무엇인가? 디지털 시대..." → 반복적 목차 |
|
||||
| Normal (T=0.8) | "? - 1[2015.12.15] 인터넷이..." → 게시판/날짜 포맷 |
|
||||
| High (T=1.2) | "무엇인가? TAG 교육..." → 블로그 태그 포맷 |
|
||||
|
||||
#### 세부 분석
|
||||
|
||||
이 프롬프트에서는 **모든 온도에서** 의미 있는 "인공지능 설명"을 생성하는 데 실패했다. 공통적으로 관찰되는 패턴은:
|
||||
|
||||
- 게시판/블로그 포맷 재현 (날짜, 번호, 태그)
|
||||
- 목차 구조 반복
|
||||
- 정작 인공지능에 대한 실질적 설명은 부재
|
||||
|
||||
**실패 원인 분석**: 학습 데이터(웹 크롤링 기반으로 추정)에서 "인공지능이란"이라는 표현이 주로 게시판 제목, 블로그 포스트 도입부, 온라인 강의 목차 등의 포맷으로 등장했을 가능성이 높다. 모델은 해당 프롬프트 이후 나올 내용을 학습 데이터의 분포에 따라 예측하기 때문에, 게시판 포맷 토큰들이 높은 확률로 선택된 것이다.
|
||||
|
||||
**개선 방향**: 이 문제는 단순히 온도를 조정한다고 해결되지 않는다. 다음 방법들이 필요하다:
|
||||
1. **지시-튜닝(Instruction Tuning)**: "인공지능이란 무엇인지 설명하라"는 식의 명령형 데이터로 파인튜닝
|
||||
2. **데이터 품질 개선**: 게시판/블로그 노이즈를 제거한 고품질 설명문 데이터 추가
|
||||
3. **시스템 프롬프트 활용**: "당신은 교육용 AI 어시스턴트입니다"와 같은 역할 부여
|
||||
|
||||
---
|
||||
|
||||
### 3. 프롬프트: "봄이 오면 꽃이 피고"
|
||||
|
||||
| 온도 설정 | 생성 결과 요약 |
|
||||
|---------|------------|
|
||||
| Greedy (T=0) | "꽃이 지면 열매가 열린다" 반복 |
|
||||
| Low (T=0.3) | "꽃이 지는 계절에는..." 반복 |
|
||||
| Normal (T=0.8) | "그대가 오면 꽃이 피고..." 시적 반복 |
|
||||
| High (T=1.2) | "꽃마다 향기롭다...", "난생 처음으로 이 봄, 내 마음을 확 열어 주는..." 가장 자연스러운 서술 |
|
||||
|
||||
#### 세부 분석
|
||||
|
||||
이 프롬프트에서는 **온도가 높을수록 오히려 더 나은 결과**가 나타나는 역설적 현상이 관찰된다.
|
||||
|
||||
**Greedy (T=0)**: "꽃이 지면 열매가 열린다"라는 단순한 자연 사이클 묘사가 반복된다. 학습 데이터에서 이 조합이 가장 흔하게 등장하는 패턴이었을 가능성이 높다. 문학적 표현으로서는 매우 빈약하다.
|
||||
|
||||
**Low (T=0.3)**: 비슷한 반복 패턴이 나타나지만, 계절의 전환에 대한 서술이 약간 등장한다.
|
||||
|
||||
**Normal (T=0.8)**: "그대가 오면"이라는 은유적 표현이 나타나기 시작한다. 시적 요소가 증가하지만 여전히 특정 패턴을 반복한다.
|
||||
|
||||
**High (T=1.2)**: "꽃마다 향기롭다"와 같은 다양한 감각 표현이 등장하고, "난생 처음으로 이 봄, 내 마음을 확 열어 주는..."과 같은 창의적이고 자연스러운 문장이 생성된다. 시적 프롬프트의 특성상, 다양한 표현이 모두 허용되는 개방적 맥락이므로 높은 온도가 오히려 유리하게 작용했다.
|
||||
|
||||
**핵심 인사이트**: 온도의 최적값은 **태스크의 성격**에 따라 크게 달라진다.
|
||||
- 정답이 하나인 사실 기반 태스크 → 낮은 온도 유리
|
||||
- 다양한 표현이 모두 허용되는 창작 태스크 → 높은 온도 유리
|
||||
|
||||
---
|
||||
|
||||
### 4. 종합: 최적 Temperature 가이드
|
||||
|
||||
| 사용 목적 | 권장 Temperature | 이유 |
|
||||
|---------|----------------|------|
|
||||
| 사실 기반 Q&A | 0.0 ~ 0.3 | 정확도 최우선; Greedy의 반복 퇴화는 반복 페널티로 보완 가능 |
|
||||
| 일반 텍스트 생성 | 0.6 ~ 0.8 | 다양성 + 의미 연관성의 균형 유지 |
|
||||
| 창작 / 시 / 소설 | 0.8 ~ 1.2 | 창의성 극대화; 다양한 표현이 허용되는 개방적 맥락 |
|
||||
| 코드 생성 | 0.0 ~ 0.2 | 구조적 정확도 필수; 문법 오류 없는 코드 선호 |
|
||||
| 요약 / 번역 | 0.3 ~ 0.5 | 원문 의미 보존 + 자연스러운 표현 사이 균형 |
|
||||
|
||||
**추가 권장사항**
|
||||
|
||||
단순히 온도를 조정하는 것 외에도 다음 기법을 병용하면 품질이 향상된다:
|
||||
|
||||
- **반복 패널티 (Repetition Penalty)**: `repetition_penalty=1.1~1.3` — Greedy 디코딩에서 반복 퇴화 방지에 효과적
|
||||
- **Top-p (Nucleus Sampling)**: `top_p=0.9~0.95` — 온도와 함께 사용 시 확률 낮은 토큰 선택 억제
|
||||
- **Top-k Sampling**: `top_k=50` — 상위 k개 토큰만 고려하여 불필요한 hallucination 억제
|
||||
|
||||
---
|
||||
|
||||
## 종합 결론
|
||||
|
||||
### 모델 현황 평가
|
||||
|
||||
| 평가 항목 | 결과 | 해석 |
|
||||
|---------|------|------|
|
||||
| NLL 평균 | 2.73 | Perplexity ≈ e^2.73 ≈ 15.3; 34k steps 기준으로 양호한 수준 |
|
||||
| 저 NLL 토큰 비율 | 41% (NLL < 1) | 한국어 기본 문법/어휘 패턴 습득 완료 |
|
||||
| 고 NLL 토큰 비율 | 21% (NLL > 5) | 고유명사, 숫자, 외래어 등 어려운 토큰에서 개선 여지 |
|
||||
| 반복 퇴화 | 모든 낮은 온도에서 관찰 | 학습 단계에서는 정상; RLHF/지시 튜닝으로 해결 가능 |
|
||||
| 창작 능력 | T=1.2에서 유의미한 출력 | 기초적인 한국어 창작 능력 존재 |
|
||||
|
||||
### 다음 단계 제언
|
||||
|
||||
1. **반복 퇴화 분석**: Top-30 어려운 토큰들이 실제로 어떤 문맥에서 등장하는지 수집하여, 해당 도메인 데이터 보강 여부 결정
|
||||
2. **온도별 자동 평가 지표 도입**: BLEU, BERTScore, 반복률(n-gram repetition rate) 등 정량 지표와 함께 온도 최적화 자동화
|
||||
3. **지시 튜닝 데이터 구성**: "인공지능이란" 프롬프트 실패 사례를 참고하여, 설명문 형식의 instruction-following 데이터 우선 수집
|
||||
4. **프롬프트 엔지니어링**: 현재 베이스 모델 수준에서는 프롬프트 끝에 "설명:" 또는 "답:" 등의 유도 문구 추가로 출력 형식 제어 가능
|
||||
|
||||
---
|
||||
|
||||
*본 리포트는 korean_1b_fp8_run1 체크포인트 기준이며, 이후 추가 학습 또는 파인튜닝 후 동일 분석을 재실시하여 개선 여부를 추적할 것을 권장한다.*
|
||||
Reference in New Issue
Block a user