VRAM 소모 없이 로컬 모델의 환각(Hallucination) 감지하기: 1.5B부터 120B 모델 테스트를 통해 배운 점
요약
본 기사는 VRAM 소모 없이 로컬 LLM의 환각(Hallucination)을 감지하는 새로운 방법을 제시합니다. 기존 방식인 Semantic Entropy는 GPU 자원과 지연 시간이 크지만, 저자들은 순수 CPU 기반의 결정론적 문자열 정규화와 Shannon entropy를 사용하여 효율적인 대안($Spanda / R_{sc}$)을 개발했습니다. 이 방법은 모델 크기별로 환각 감지 성능(AUROC)이 다르게 나타남을 보여줍니다.
핵심 포인트
- CPU 기반 $Spanda$ 지표로 GPU 자원 없이 환각 감지가 가능합니다.
- 7B~27B 모델에서 높은 AUROC를 보이며, 구조화된 작업에 유용합니다.
- 대형 모델(120B)은 '확신 모드 붕괴'를 겪으며 거짓 확신을 내놓습니다.
- 로컬 Ollama 환경에서 Python 스니펫으로 쉽게 구현할 수 있습니다.
안녕하세요, 여러분. 만약 Ollama를 통해 프로덕션 또는 개인 프로젝트에서 로컬 모델을 실행한다면, 아마도 환각 문제에 직면했을 것입니다. 즉, 추가 VRAM을 소모하거나 무거운 judge 모델을 위해 5초 동안 기다리지 않고 모델이 환각하고 있는지 어떻게 알 수 있을까요? 학계의 표준 접근 방식은 Semantic Entropy(작년 Oxford 팀의 Nature 논문에서 제시됨)입니다. 이 방법은 온도 0.7로 $K$개의 응답을 샘플링하여 DeBERTa와 같은 보조 NLI cross-encoder를 통해 동등한 의미끼리 클러스터링하고 엔트로피를 측정합니다. 엔트로피가 높으면 = 모델이 추측하고 있다는 뜻입니다. 로컬 환경에서의 문제는 무엇일까요? 45쌍의 비교를 cross-encoder로 실행하는 것은 GPU 메모리를 소모하고, 100ms 이상의 지연 시간(latency)을 추가하며, 소비자급 하드웨어에서 처리량(throughput)을 완전히 떨어뜨립니다. 저희는 다음과 같은 질문을 던졌습니다: 만약 신경망 자체를 완전히 제거하고 순전히 결정론적 문자열 정규화와 CPU 기반의 Shannon entropy만 사용한다면 어떨까? 저희는 pure CPU 환경에서 1.3 마이크로초(microseconds) 만에 실행되는 종속성 제로 Python 지표($Spanda / R_{sc}$)를 작성하여 GSM8K 및 TriviaQA 데이터셋을 사용하여 로컬 모델과 최첨단(frontier) 모델 티어 전반에 걸쳐 벤치마킹했습니다. 발견한 점은 다음과 같습니다: 작은 모델 (Qwen 1.5B): AUROC ~0.58 작은 모델들은 문자열 매칭에는 구문적으로 너무 느슨합니다. 올바른 답을 알고 있더라도, 실행마다 형식이 불규칙하게 되어 정확 일치(exact-match) 클러스터링이 깨집니다. 중간 크기 모델 (Mistral 7B): AUROC ~0.71 7B에서는 1.3µs 문자열 검사가 무거운 DeBERTa NLI 모델의 성능과 일치했습니다 (0.706 대 0.705). 내부 표현이 충분히 일관성을 갖게 되어 형식이 안정화됩니다. 큰 모델 (Qwen 27B): AUROC ~0.89 27B에서는 정확한 매칭이 지배적이었습니다 ($p = 1.89 imes 10^{-28}$). 모델이 답을 알 경우, 독립적인 확률적 경로(stochastic paths)를 거쳐도 항상 동일한 토큰을 출력합니다. 그렇지 않을 경우, 다양하고 잘못된 답변으로 진정으로 분기됩니다. 최첨단 함정 (120B): AUROC가 0.09로 급락했습니다. 여기 흥미로운 부분이 있습니다: 근거 없는 사실 기반의 상식 문제에서 120B 모델은 확신 모드 붕괴(Confident Mode Collapse)를 겪었습니다.
환각(Hallucination)을 일으킬 때, 5번의 실행 모두에서 엔트로피가 0인 완전히 동일한 오답을 내놓았습니다. 더 큰 모델들은 단순히 환각하는 것이 아니라—만장일치의 거짓된 확신과 함께 환각합니다. (그리고 문자열이 동일하기 때문에, 심지어 강력한 NLI(Natural Language Inference)도 여기서 실패했습니다). Ollama 사용자를 위한 실질적인 시사점은 다음과 같습니다: 구조화된 작업(수학, 코드, JSON 추출, SQL, 이산 QA 등)에 7B에서 27B 모델을 실행하는 경우, 복잡한 신경망 가드레일(neural guardrails)이 필요하지 않습니다. $T=0.7$로 5개의 경로를 샘플링하고 Python에서 정확 일치 엔트로피(exact-match entropy)를 측정하면 GPU 비용 없이 약 0.89 AUROC를 얻을 수 있습니다. 로컬 Ollama 인스턴스에서 테스트하려면 간단한 Python 스니펫입니다: bash pip install spnda ollama python import ollama from spnda import compute_spanda prompt = "What is the capital of Australia?" # 로컬 모델 응답에서 5개 경로 샘플링 responses = [ ollama.generate(model="mistral:7b", prompt=prompt, options={"temperature": 0.7})["response"] for _ in range (5) ] # CPU에서 제로 비용 엔트로피 확인 실행 (약 1.5 마이크로초 소요) result = compute_spanda(responses) print (f"Risk Score: {result.risk_score:.3f}") # 0 = 높은 확신, 1 = 높은 불확실성 모든 원본 다중 경로 생성 로그, 평가 스크립트 및 전체 작성 내용은 오픈 소스입니다: 심층 분석 글: https://liquidngas.substack.com/p/i-tried-to-make-semantic-entropy GitHub: https://github.com/nayakbhupen/Spnda submitted by /u/More_Slide5739 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기