
생성형 AI의 가장 고질적인 문제인 환각(Hallucination)은 기업용 LLM 서비스 도입의 최대 걸림돌입니다. 단순히 "답변이 그럴듯하다"는 주관적 판단을 넘어, 시스템을 신뢰하기 위해서는 정량적 측정 지표(Quantitative Metrics)가 필수적입니다. 본 포스팅에서는 파이썬을 활용해 LLM의 환각을 측정하는 7가지 핵심 방법을 다루며, 기존 언어 모델 평가지표와의 차이를 분석하여 실무적인 해결책을 제시합니다.
1. 왜 기존 NLP 지표(ROUGE, BLEU)로는 환각을 잡을 수 없는가?
과거 번역이나 요약에 사용되던 BLEU나 ROUGE 지표는 텍스트 간의 n-gram 유사도에만 집중합니다. 하지만 LLM의 환각은 "문장 구조는 완벽하지만 사실 관계(Factuality)가 틀린" 경우가 많습니다. 따라서 단순한 자구 일치도가 아닌, 지식 베이스(External Knowledge) 또는 논리적 일관성(Faithfulness)을 검증하는 새로운 설계 방식이 필요합니다.
2. 환각 측정 방식별 핵심 지표 및 특징 비교
환각은 발생 유형에 따라 측정 방식이 달라집니다. 다음 표는 실무에서 가장 빈번하게 사용되는 평가지표 간의 차이를 요약한 것입니다.
| 지표 분류 | 주요 측정 지표 | 핵심 측정 원리 | 장점 및 차별점 |
|---|---|---|---|
| 지식 기반 (Reference-based) | FactScore, HALU-Eval | 신뢰할 수 있는 소스와의 사실 관계 비교 | 정확한 사실 검증 가능 |
| 모델 기반 (Model-based) | LLM-as-a-Judge (GPT-4) | 상위 모델을 검수자로 활용하여 논리 판단 | 인간의 판단과 유사한 유연성 |
| 논리 기반 (Entailment) | NLI (Q2, NLI-score) | 전제(Context)와 결론 간의 함의 관계 분석 | RAG 시스템에서 필수적인 충실도 검증 |
| 확률 기반 (Uncertainty) | Self-Consistency, Entropy | 모델 출력의 확률적 일관성 측정 | 정답 데이터 없이도 신뢰도 추정 가능 |
3. 실전 환각 측정을 위한 7가지 파이썬 구현 및 Metric 설계 방법
현업 개발자가 파이썬 환경에서 즉시 파이프라인에 통합할 수 있는 환각 평가 지표 설계 방법들입니다.
Example 1: NLI(Natural Language Inference)를 이용한 Faithfulness 측정
제공된 컨텍스트와 생성된 답변 사이의 논리적 모순을 검출하여 환각을 해결합니다.
from transformers import pipeline
# 1. NLI 모델 로드 (Cross-Encoder)
nli_model = pipeline("text-classification", model="cross-encoder/nli-deberta-v3-base")
def evaluate_faithfulness(context, response):
# 전제(Context)와 가설(Response) 사이의 관계 추론
result = nli_model([{"text": context, "text_pair": response}])[0]
# 'entailment' 확률이 높을수록 환각이 적음
# 'contradiction' 확률이 높으면 환각 발생으로 간주
return result['label'], result['score']
# 사용 예시
context = "이순신 장군은 임진왜란 당시 거북선을 활용해 승리했습니다."
response = "이순신 장군은 을지문덕과 함께 거북선을 설계했습니다." # 환각
print(evaluate_faithfulness(context, response))
Example 2: Self-Consistency를 활용한 확률적 환각 감지
동일한 질문에 대해 여러 번 생성한 결과가 서로 다를 경우 환각 가능성이 높다고 판단하는 방법입니다.
from collections import Counter
def calculate_consistency_score(responses):
# 여러 응답 간의 최빈값(Majority Vote) 비율 계산
counts = Counter(responses)
most_common_count = counts.most_common(1)[0][1]
# 일관성 점수 = 최빈 응답 수 / 전체 생성 수
consistency = most_common_count / len(responses)
return consistency
# 모델에 temperature를 높여 5번 생성 후 결과 비교
sample_responses = ["1592년입니다.", "1592년에 발생했습니다.", "1598년입니다.", "1592년입니다.", "1592년."]
print(f"Consistency Score: {calculate_consistency_score(sample_responses)}")
Example 3: Q2(Query-based Question Generation) Metric 설계
답변에서 질문을 생성하고, 그 질문에 대해 원본 컨텍스트에서 다시 정답을 찾아 일치 여부를 확인하는 복합 방법입니다.
# 1. 생성된 답변에서 핵심 개체(Entity) 추출
# 2. 해당 개체를 정답으로 하는 질문(QG) 생성
# 3. 원본 컨텍스트에서 해당 질문에 대한 답변 추출(QA)
# 4. 추출된 답변과 1번의 개체가 일치하는지 비교 (F1 Score)
def calculate_q2_score(extracted_ans, source_ans):
# 단순 문자열 매칭 또는 Semantic Similarity 사용
return 1.0 if extracted_ans == source_ans else 0.0
Example 4: LLM-as-a-Judge 지표 설계 (Prompt Engineering)
GPT-4와 같은 고성능 모델에게 구체적인 평가 척도(Rubric)를 부여하여 정량화된 점수를 받는 방법입니다.
EVALUATION_PROMPT = """
당신은 엄격한 팩트 체크 전문가입니다.
[Context]와 [Response]를 비교하여 환각 유무를 1~5점으로 평가하세요.
점수 기준:
- 5점: 모든 내용이 Context에 기반하며 사실과 일치함.
- 1점: Context에 없는 내용이거나 논리적으로 모순됨.
반드시 JSON 형식 {"score": n, "reason": "..."}으로 답변하세요.
"""
# 랭체인(LangChain) 등의 프레임워크와 결합하여 자동화 가능
Example 5: FactScore 스타일의 원자적 사실(Atomic Facts) 분해 측정
# 문장을 최소 단위의 지식(Atomic Facts)으로 쪼갬
facts = [
"이순신은 장군이다.",
"그는 임진왜란에 참전했다.",
"그는 거북선을 만들었다." # 이 중 틀린 지식의 비율을 정량화
]
def fact_score(validated_facts_count, total_facts_count):
return validated_facts_count / total_facts_count
Example 6: Rouge-L과 임베딩 유사도(BERTScore)의 하이브리드 설계
단순 일치도와 의미적 유사도를 결합하여 텍스트 변형에 의한 오판을 해결합니다.
from bert_score import score
def hybrid_evaluation(ref, gen):
P, R, F1 = score([gen], [ref], lang="ko", verbose=False)
# BERTScore F1과 ROUGE-L의 가중 평균 사용
return F1.item()
Example 7: 정답 부재(No-answer) 감지율 지표
모델이 모르는 내용에 대해 "모른다"고 답변하는 능력을 정량화하여 근거 없는 답변(환각)을 방지하는 방법입니다.
def evaluate_refusal_rate(responses, expected_unknown_queries):
# 정답을 알 수 없는 질문에 대해 적절히 답변을 거부했는지 확인
refusal_keywords = ["모릅니다", "정보가 없습니다", "제공되지 않았습니다"]
# ... 키워드 매칭 로직 구현
4. 성공적인 Evaluation Metric 구축을 위한 3단계 전략
- 멀티 레이어 검증: 단일 지표에 의존하지 말고, NLI 점수와 LLM-as-a-Judge 점수를 가중 평균하여 사용하십시오.
- 골든 데이터셋(Golden Dataset) 구축: 환각이 포함된 사례와 포함되지 않은 사례를 최소 100개 이상 확보하여 지표의 신뢰도를 먼저 검증하세요.
- 실시간 모니터링 연동: 평가 지표를 MLflow나 Weights & Biases와 연동하여 모델 업데이트 시 환각 점수의 추이를 추적해야 합니다.
5. 결론: 환각 제어는 측정에서 시작된다
LLM의 환각은 완벽히 제거할 수 없는 '확률적 특성'에 가깝습니다. 하지만 정교하게 설계된 Evaluation Metric은 시스템의 취약점을 노출시키고, 프롬프트 엔지니어링이나 RAG 최적화의 방향성을 제시하는 나침반이 됩니다. 오늘 살펴본 7가지 방법과 지표 설계 기술을 통해, 사용자에게 신뢰받는 안전한 AI 서비스를 구축하시기 바랍니다.