추가 토큰 없이 LLM의 멀티홉 환각(Multi-hop Hallucinations)을 잡아내는 방법
요약
LLM이 여러 사실을 조합하는 과정에서 발생하는 멀티홉 환각 문제를 해결하기 위해, 행렬 연산을 활용한 검증 방식을 제안합니다. 추가적인 토큰 비용 없이 수학적 증명 경로를 통해 모델의 추론 결과가 사실인지 검증할 수 있습니다.
핵심 포인트
- 멀티홉 추론 시 단계가 늘어날수록 LLM의 정확도가 급격히 하락함
- 기존의 재확인(Self-check) 방식은 높은 토큰 비용과 낮은 정밀도 문제를 가짐
- 관계 데이터를 불리언 행렬로 변환하여 행렬 곱셈으로 추론을 검증 가능
- grounded-reasoning 라이브러리를 통해 비용 효율적인 검증 구현 가능
LLM은 보통 사실 관계 자체에서 실패하지 않습니다. 사실을 '조합(composing)'하는 과정에서 실패합니다.
모델에게 "Alice의 부모는 누구인가요?"라고 물으면 신뢰할 수 있는 답변을 내놓습니다. 하지만 "Alice가 Dave의 조상인가요?"라고 물으면 — 이는 세 개의 부모 관계 사실을 사슬처럼 연결해야 하는 결론입니다 — 정확도가 낭떠러지처럼 떨어집니다. 다음은 공개적인 친족 추론 벤치마크인 CLUTRR에서 구성 단계(composition steps) 수에 따라 측정된 DeepSeek의 결과입니다:
hop: 2 3 4 5 6 7 8
DeepSeek: 83% 42% 25% 25% 42% 17% 8%
2단계(two hops)에서는 83%이지만, 8단계(eight hops)에서는 8%에 불과합니다. 그리고 이러한 실패는 단순히 "모르겠습니다"라고 수줍게 답하는 것이 아닙니다. 모델은 존재하지 않는 친척 관계를 자신 있게 지어냅니다(fabricates).
일반적인 해결책들은 모두 동일한 문제를 가지고 있습니다. 바로 더 많은 LLM을 사용하여 LLM과 싸우려 한다는 점입니다. 모델에게 스스로 재확인(double-check)하도록 요청하면 두 번째 호출에 대한 비용을 지불해야 하며 — 제가 측정했을 때 토큰이 +110% 증가했습니다 — 그럼에도 불구하고 여전히 환각을 일으킵니다 (재확인 시 정밀도(precision) 34%). 다섯 개의 사고 사슬(chains-of-thought)을 샘플링하여 투표(vote)하게 하면, 보장된 결과도 없이 통계적 개선을 위해 비용을 5배로 늘리게 됩니다.
이 특정 작업을 위해 더 오래되고 저렴한 도구가 있습니다.
관계는 행렬(Matrices)입니다
만약 당신의 사실이 트리플(triples) — (alice, parent, bob) — 형태라면, 각 관계는 사실이 성립할 때만 R[i][j] = 1이 되는 불리언 행렬(boolean matrix) R이 됩니다. 그러면 다음과 같습니다:
- 조합(Composition)은 행렬 곱셈입니다. "조부모(Grandparent)"는 말 그대로
R_parent · R_parent입니다. - 이행적 폐쇄(Transitive closure)는 거듭제곱의 합입니다. "조상(Ancestor)"은
Σ R_parentᵏ입니다. - 주장은 경로가 존재할 때만 참입니다 — 그리고 당신은 그 경로를 증거(proof)로 반환할 수 있습니다.
이것은 새로운 수학이 아닙니다 (도달 가능성(reachability), Katz index, Neumann series 등 수십 년 된 개념들입니다). 핵심은 이것을 LLM에 결합했을 때 얻을 수 있는 이점입니다. 즉, 사실 관계에 증명 경로가 존재할 때만 멀티홉 주장을 수락하는 검증기(verifier)를 갖게 되는 것입니다. 이 검증기는 감언이설에 속아 지어낸 관계를 수락할 수 없으며, 모델 토큰 비용이 전혀 들지 않고, "예"라고 답할 때는 그 근거를 보여줍니다.
보장된 검증을 위한 10줄의 코드
pip install grounded-reasoning
from grounded_reasoning import GroundedReasoner
gr = GroundedReasoner()
...
전형적인 통합 방식은 사후 필터(post-filter) 방식입니다. 즉, LLM이 관계적 주장(relational claims)을 생성하면, 증거 경로(evidence path)가 존재하는 주장만이 사용자에게 전달됩니다.
llm_claims = [("alice", "carol", "parent"), # 참인 합성 (true composition)
("alice", "zed", "parent")] # 날조됨 (fabricated)
...
실제 DeepSeek 실행 결과(제공된 단일 홉(one-hop) 사실을 바탕으로 한 48개의 멀티홉(multi-hop) 질문, 두 개의 시드(seeds) 사용)를 측정했을 때, 가공된 수십 개의 이름과 함께 원시 멀티홉 정밀도(raw multi-hop precision)는 33~38%였습니다. 필터 적용 후에는 정밀도 100%, 정답 누락 0건을 기록했습니다. 이는 필터가 실제 경로가 있는 주장을 절대 거부하지 않음을 입증합니다. 이 포스트 상단에 있는 동일한 CLUTRR 차트에서, 근거 기반 솔버(grounded solver)는 2홉에서 10홉까지 약 100%의 평탄한 성능을 유지합니다.
이 저장소(repo)에서 제가 본 가장 낮은 원시 정밀도는, 의도적으로 상식에 반하는 온톨로지(ontology)를 사용하여 더 밀도가 높게 구성된 경우에서 나타났습니다. 이는 동일한 계층 구조 내에 역전되거나 직관에 어긋나는 "is-a" 관계를 층층이 쌓아 올려, 모델이 이미 알고 있다고 생각하는 지식을 강제로 넘어서게 만든 경우입니다. 해당 사례에서 원시 정밀도는 **31%**까지 떨어졌으며, 106개의 날조된 엣지(edges)가 발견되었습니다. 필터는 106개 중 106개를 모두 잡아냈으며, 이번에도 정답 주장의 누락은 없었습니다.
모순(contradictions)을 탐지하는 기능도 무료로 제공됩니다. 만약 관계가 계층 구조(is-a, part-of, causes)여야 하는데 주장된 사실에 순환(cycle)이 포함되어 있다면, 이는 무언가 잘못되었다는 증거이며 라이브러리는 해당 순환을 사용자에게 전달합니다.
gr2 = GroundedReasoner()
gr2.add_facts([("cat", "is_a", "mammal"),
("mammal", "is_a", "animal"),
...
"하지만 저는 지식 베이스(knowledge base)가 없는데요"
맞는 말입니다. 대부분의 사람들은 가지고 있지 않죠. 두 가지 해결책이 있으며, 모두 구현되어 있습니다:
LLM 자체의 사실(facts)을 역이용하세요. 모델은 복합적인 구성(composition)보다는 원자적인 단일 홉(one-hop) 사실에 대해 훨씬 더 신뢰할 수 있습니다. 따라서 다음과 같이 수행합니다: 모델에게 단일 홉 사실을 묻고, 로컬에서 폐쇄(closure)를 구축한 뒤, 모델이 제시한 멀티홉(multi-hop) 주장 중 모델 자신의 폐쇄와 모순되는 모든 주장을 거부하십시오. 자기 모순(Self-contradiction)이 바로 환각(hallucination) 신호입니다. DeepSeek을 사용한 실제 분류(taxonomy) 작업에서, 이 방법은 외부 지식을 전혀 사용하지 않고도 정밀도(precision)를 78%에서 100%로 끌어올렸습니다. 이는 재현율(recall) 측면에서 발생하는 비용에 대해 입증된 양방향 경계(two-sided bound)를 가지며, 문서화된 실패 조건(모델의 원자적 사실 자체가 신뢰할 수 없는
- 일반적인 추론기가 아닙니다. 이 도구는 그래프(graph)를 바탕으로 관계적/이행적 주장(relational/transitive claims)을 검증합니다. 독립적인 사실 오류(예: "에펠탑은 로마에 있다")에 대해서는 아무런 역할을 하지 않으며, 이는 별개의 문제입니다.
- 새로운 수학이 아닙니다. 도달 가능성(Reachability), Katz, conformal prediction, Horn logic 등은 모두 고전적인 개념입니다. 이 연구의 기여는 이를 패키징한 방식에 있습니다. 즉, 통합 정리(unification theorem: fuzzy-diffusion 관점, 연산자(operator) 관점, spectral 관점이 수치적 오차 없이 증명 가능한 동일한 연산자라는 점), 실제 LLM에서의 토큰 비용 대비 측정된 보장(guarantees), 그리고 no-KB / noisy-KB 모드를 제공하는 것입니다.
- 제공된 그래프의 품질만큼만 유효합니다. 만약 그래프가 틀렸다면, 강력한 보장(hard guarantee)은 세상이 아닌 그래프에 대해 적용될 뿐입니다. conformal mode는 정확히 이 문제를 완화해주며, 다른 어떤 방식도 이를 수행하지 못합니다.
제 말을 그대로 믿지 마세요
검증 도구의 핵심은 그 제작자를 신뢰할 필요가 없어야 한다는 점입니다. 이 포스트의 모든 수치는 오프라인에서 확인할 수 있습니다:
git clone https://github.com/ALEXaquarius/grounded-reasoning
cd grounded-reasoning && pip install -e ".[dev]"
pytest tests/ # 116개의 테스트, API 키 불필요 — 수치적 검증 포함
...
또는 Colab 퀵스타트를 실행해 보세요. 약 30초 내에 정리(theorem) 검증을 실시간으로 수행합니다.
해당 리포지토리(MIT 라이선스)는 라이브러리, OpenAI/Anthropic function-calling 도구, 그리고 MCP 서버를 제공하므로, 에이전트가 다른 도구와 마찬가지로 verify_relation을 호출할 수 있습니다: https://github.com/ALEXaquarius/grounded-reasoning
만약 경로가 없는 주장을 가드(guard)가 수락하거나, 경로가 있는 주장을 거부하는 사례를 찾아낼 수 있다면, 그것은 핵심 정리를 거짓으로 증명하는 것이 될 것이며, 저는 그런 사례를 꼭 보고 싶습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기