# 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 체크포인트 기준이며, 이후 추가 학습 또는 파인튜닝 후 동일 분석을 재실시하여 개선 여부를 추적할 것을 권장한다.*
