왜 JEV는 스키마를 벗어난 답을 '만들 수 없는가' — 환각과 타입 에러가 수학적으로 불가능한 이유
LLM은 유효성 검증을 출력을 만든 뒤에 수행합니다. 문자열 생성 → JSON 강제 → 파싱 → 검증의 각 단계마다 스키마와 어긋난 값이 끼어들 수 있어, 타입 에러가 구조적으로 가능한 상태로 남습니다.
JEV는 순서를 뒤집습니다. 고를 수 있는 답을 미리 목록으로 정해두고, 그 목록 안에서만 하나를 고릅니다 — 목록에 없는 답은 아예 낼 수 없습니다. 이렇게 '가능한 답의 집합'을 스키마에 먼저 정의해 두는 방식이라, 생성이 아니라 선택·평가에 가깝습니다.
| 단계 | 기존 LLM | JEV |
|---|---|---|
| 동작 방식 | 문자열을 자유 생성 | 정의된 집합에서 선택 |
| 출력 공간 | 사실상 무한(모든 문자열) | 스키마로 사전 확정 |
| 검증 | 생성 후 파싱·검증 필요 | 불필요 (구조상 항상 유효) |
| 스키마 밖 값 | 지어낼 수 있음(환각) | 표현 자체가 불가능 |
💡 핵심은 출력 공간이 스키마로 사전 확정된다는 점입니다. 후보 집합에 없는 값은 고를 수 없으므로, 스키마 밖의 값을 내는 일이 원천적으로 불가능합니다.
💡 "출력이 맞는지 확인"하는 방어 코드가 없어진다는 건, 버그가 숨을 자리가 그만큼 줄어든다는 뜻입니다.
타입은 안전해졌습니다. 그런데 왜 빠르기까지 한 걸까요? 2-2강에서는 병렬 샘플링의 원리를 파고듭니다. 토큰을 하나씩 만드는 자기회귀 대신, 모든 출력을 단일 쿼리로 한 번에 뽑아내는 방식이 어떻게 40–200배의 속도 차이를 만드는지 살펴봅니다.