VRAM 소모 없이 로컬 모델의 환각 탐지하기: 1.5B에서 120B 모델 테스트 결과
Detecting hallucinations in local models without eating VRAM: What we learned testing 1.5B to 120B models
핵심 요약
VRAM을 쓰지 않고 CPU에서 결정론적 문자열 정규화로 로컬 LLM의 환각을 탐지하는 경량 기법 'Spanda'를 소개합니다.
- Spanda 기법 — CPU에서 1.3마이크로초 만에 작동하는 제로 의존성 파이썬 환각 탐지 메트릭임.
- 모델 크기별 성능 — 7B~27B 모델에서는 효과적이나, 120B 모델에서는 '확신에 찬 환각'으로 인해 탐지 성능이 급락함.
- 실용적 활용 — 구조화된 작업에서 5개 경로 샘플링과 정확 일치 엔트로피 측정만으로도 높은 탐지 정확도를 보임.
- 오픈 소스 공개 — 평가 스크립트와 전체 연구 내용을 깃허브와 서브스택에 공개함.
다들 안녕,
Ollama로 로컬 모델 돌리면서 프로덕션이나 개인 프로젝트 하는 사람들은 다들 환각(hallucination) 문제 때문에 골치 아팠을 거야. 무거운 판정 모델(judge model) 돌리느라 VRAM 다 잡아먹거나 5초씩 기다리는 짓 안 하고, 모델이 구라치는지 바로 알 방법 없을까?
학계에서 쓰는 표준 방식은 Semantic Entropy야 (작년에 옥스퍼드 팀이 Nature에 낸 논문). temperature 0.7로 응답 $K$개를 뽑은 다음에, DeBERTa 같은 NLI 크로스 인코더에 넣어서 의미가 같은 것끼리 묶고 엔트로피를 재는 거지. 엔트로피가 높다? 그럼 모델이 그냥 찍고 있다는 뜻이야.
근데 로컬 환경에서 이게 문제인 게 뭐냐, 크로스 인코더로 쌍 비교 45번씩 돌리면 GPU 메모리 다 터지고, 레이턴시 100ms 넘게 추가되고, 일반 소비자용 하드웨어에서는 처리량(throughput)이 그냥 박살 나거든.
그래서 우리가 궁금해진 거지: 신경망 다 빼버리고 그냥 CPU에서 결정론적 문자열 정규화(deterministic string normalization)랑 섀넌 엔트로피만 쓰면 어떨까?
그래서 의존성 제로인 파이썬 메트릭(Spanda / $R_{sc}$)을 만들었어. 순수 CPU에서 1.3 마이크로초 만에 돌아가고(GPU 사용량 0), GSM8K랑 TriviaQA로 로컬 모델부터 대형 모델까지 벤치마크를 돌려봤지.
결과는 이래:
-
소형 모델 (Qwen 1.5B): AUROC ~0.58 소형 모델은 문법적으로 너무 엉망이라 문자열 매칭이 안 돼. 정답을 알아도 실행할 때마다 포맷을 제멋대로 바꿔버려서 정확한 클러스터링이 안 됨.
-
중형 모델 (Mistral 7B): AUROC ~0.71 7B급부터는 1.3µs짜리 문자열 체크가 무거운 DeBERTa NLI 모델이랑 성능이 똑같았어 (0.706 vs 0.705). 내부 표현이 일관성 있게 잡히면서 포맷팅도 안정화되는 거지.
-
대형 모델 (Qwen 27B): AUROC ~0.89 27B급에서는 정확한 매칭이 압도적이었어 ($p = 1.89 \times 10^{-28}$). 모델이 정답을 알면 독립적인 확률적 경로를 타도 똑같은 토큰을 뱉어내. 모르면? 그때는 진짜로 제각각인 오답을 뱉고.
-
프론티어 모델의 함정 (120B): AUROC 0.09로 폭락 이게 진짜 골 때리는 부분인데, 근거 없는 사실 관계 질문에서 120B 모델은 **확신에 찬 모드 붕괴(Confident Mode Collapse)**를 일으켰어. 환각을 일으킬 때 5번 실행 내내 똑같은 오답을 뱉으면서 엔트로피가 0이 나온 거야. 모델이 커지니까 환각을 하는 게 아니라, 다 같이 짜고 치는 것처럼 뻔뻔하게 틀린 답을 내놓는 거지. (문자열이 똑같으니까 무거운 NLI도 여기서 다 털림).
Ollama 유저들을 위한 실전 팁:
7B에서 27B 모델로 구조화된 작업(수학, 코드, JSON 추출, SQL, 객관식 QA)을 돌리고 있다면, 무거운 신경망 가드레일은 필요 없어. $T=0.7$에서 경로 5개 뽑아서 파이썬으로 정확도 기반 엔트로피만 재도 GPU 비용 0으로 AUROC 0.89 정도는 뽑아낼 수 있어.
로컬 Ollama 인스턴스에서 바로 테스트해 볼 수 있는 파이썬 코드:
bash
pip
install spnda ollama
pythonimport ollama
from spnda import compute_spanda
prompt = "What is the capital of Australia?"

