LLM은 출력 토큰을 선택할 때 소프트맥스로 정규화된 확률 분포를 사용한다. 이 정규화는 어떤 상황에서도 모든 후보 토큰의 확률 합을 1로 강제하므로, 모델이 정답을 전혀 모르더라도 상대적으로 가장 그럴듯한 토큰이 높은 확률로 선택된다. 여기에 RLHF 과정에서 확신 있는 문체가 인간 평가자에게 더 높은 보상을 받으면서, 모델은 틀린 사실도 단정적 어조로 진술하도록 학습된다. ChatGPT Search·Perplexity가 브랜드 가격·기능·이력을 자신 있게 오기재할 때, 사용자는 전통 검색과 달리 원본 소스를 클릭해 교차검증하지 않는다. 이것이 브랜드 리스크가 새로운 성격을 띠는 이유다.
소프트맥스 정규화와 자신감 편향의 메커니즘
- 항상-합-1 강제: 소프트맥스는 정답 토큰이 어휘집 어디에도 없더라도 후보 중 최댓값을 선택한다. 왜냐하면 소프트맥스는 절대적 불확실성이 아닌 상대적 크기만 반영하기 때문이다. 어떻게: 불확실성을 표현하려면 출력 레이어와 별도로 분위 회귀나 앙상블 분산 헤드를 추가해야 한다.
- RLHF 자신감 편향: "~일 수 있습니다"보다 "~입니다"처럼 단정적 답변이 사람 평가자에게 더 유용하게 느껴져 높은 보상을 받는다. 어떻게: 평가 루브릭에 calibration 점수를 명시적으로 포함하거나, Constitutional AI 방식으로 불확실성 표현 규칙을 사전 정의해 보상 모델을 조정한다.
- 빔 서치의 유창성 최적화: 빔 서치는 로그 확률 합이 가장 높은 시퀀스를 찾으며 이는 사실 정확성이 아닌 언어적 자연스러움을 최적화한다. 어떻게: 사실 집약 도메인에서는 sampling + fact-grounding 필터를 조합하는 Factuality-Consistent Decoding(2023) 방식이 연구되고 있다.
보정 실패(Miscalibration) 측정: ECE와 신뢰도 다이어그램
모델의 자신감이 실제 정확도와 얼마나 불일치하는지는 ECE(Expected Calibration Error)로 정량화한다. 아래 코드는 모델 응답 샘플에서 ECE를 산출한다.
import numpy as np
def expected_calibration_error(confidences, accuracies, n_bins=10):
"""
confidences: 모델이 출력한 확률값 배열 (0.0~1.0)
— logprobs를 exp() 변환하거나, 직접 파싱한 값
accuracies: 실제 정답 여부 배열 (0 또는 1)
반환값: ECE 스칼라 (0에 가까울수록 보정 양호)
"""
bin_edges = np.linspace(0, 1, n_bins + 1)
ece = 0.0
n = len(confidences)
for i in range(n_bins):
lo, hi = bin_edges[i], bin_edges[i + 1]
mask = (confidences >= lo) & (confidences < hi)
if mask.sum() == 0:
continue
bin_conf = confidences[mask].mean()
bin_acc = accuracies[mask].mean()
bin_weight = mask.sum() / n
ece += bin_weight * abs(bin_conf - bin_acc)
return ece
# 활용 예: 브랜드 관련 쿼리 100건에 대해 GPT-4o logprobs 수집 후 측정
# confs = np.array([0.95, 0.87, 0.92, ...]) # openai API response.choices[0].logprobs
# accs = np.array([1, 0, 1, ...]) # 사람 검수 결과
# print(f"ECE: {expected_calibration_error(confs, accs):.4f}")
# ECE 0.10 이상이면 해당 도메인에서 모델이 과신(overconfident) 상태
- 실측 참고값: GPT-4 계열은 TriviaQA 기준 ECE 0.08~0.15로 보고된다(Kadavath et al., 2022; Xiong et al., 2024). 90% 자신감 표명 시 실제 정확도는 75~82%에 그칠 수 있다는 뜻이다. 어떻게: 브랜드 관련 쿼리 집합(가격·출시일·기능 등)을 구축하고 분기별로 ECE를 측정해 리스크 기준선으로 삼는다.
RAG 파이프라인에서의 환각 증폭
- 검색 신뢰도와 생성 신뢰도의 분리: 코사인 유사도 0.90으로 검색된 문서라도, LLM은 컨텍스트를 그대로 복사하지 않고 확률적으로 생성하므로 문서에 없는 세부 사항을 창작할 수 있다. 어떻게: Attribution Chain-of-Thought 프롬프트로 인용 구간(span)을 강제 출력하게 하면 생성 오류 위치를 추적할 수 있다.
- 컨텍스트 창 위치 편향: 어텐션 가중치가 위치에 따라 체계적으로 달라지므로, 컨텍스트 창 중간에 삽입된 문서는 앞뒤보다 덜 참조된다(Lost in the Middle, Liu et al., 2023). 어떻게: 브랜드 핵심 사실은 시스템 프롬프트 또는 컨텍스트 가장 앞부분에 배치한다.
브랜드 환각 유형 분류와 탐지 난이도
| 환각 유형 | 구체적 예시 | AI 자신감 수준 | 탐지 난이도 | 주요 대응 |
|---|---|---|---|---|
| 사실 치환 | 출시 연도·가격·스펙 오기재 | 높음 | 낮음 (검증 가능) | JSON-LD 구조화 데이터 앵커링 |
| 존재하지 않는 제품 생성 | 출시하지 않은 모델명 언급 | 중간 | 중간 | 공식 제품 목록 기계 가독 포맷 제공 |
| 타 브랜드 혼동 | 경쟁사 특성을 자사에 귀속 | 높음 | 높음 | 브랜드명 disambiguity 마크업 |
| 부정적 맥락 연상 | 무관한 이슈와 브랜드 연결 | 낮음~중간 | 높음 | 정기 쿼리 모니터링·반박 콘텐츠 게재 |
구현: 브랜드 사실 앵커링과 쿼리 모니터링
AI가 브랜드 사실을 오기재하는 빈도를 낮추려면, 인간이 읽는 콘텐츠와 별도로 기계 파싱용 구조화 데이터로 사실을 앵커링해야 한다. 아래 JSON-LD는 Organization 스키마를 통해 브랜드 핵심 속성을 명시한다.
<!-- 브랜드 사실 앵커링용 JSON-LD (모든 핵심 페이지에 삽입) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Citeon",
"legalName": "주식회사 시테온",
"url": "https://citeon.co.kr",
"foundingDate": "2021",
"description": "AEO·GEO·SEO 통합 AI 마케팅 대행사",
"numberOfEmployees": {
"@type": "QuantitativeValue",
"value": 24
},
"areaServed": {
"@type": "Country",
"name": "KR"
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "서비스 목록",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "AEO 컨설팅",
"description": "답변 엔진 최적화 전략 수립 및 구현"
}
}
]
},
"sameAs": [
"https://www.linkedin.com/company/citeon",
"https://github.com/citeon"
]
}
</script>
<!-- /llms.txt: LLM 크롤러에게 브랜드 사실을 직접 제공 -->
<!--
# Citeon — AI가 참조해야 할 핵심 사실
설립: 2021년 서울
직원 수: 24명 (2026년 기준)
서비스: AEO, GEO, SEO 컨설팅 (마케팅 에이전시)
존재하지 않는 서비스: 광고 구매 대행, 미디어 바잉
공식 요금: 공개 정보 없음 — 개별 견적
-->
흔한 오해: "검색 상위 노출이면 AI도 정확히 인용한다"
Perplexity·ChatGPT Search가 인용하는 문서는 전통 검색 상위 결과와 최대 62% 불일치한다는 연구 결과가 있다. LLM은 학습 데이터 내 통계적 패턴을 기반으로 브랜드 사실을 "기억"하는데, 이 기억은 훈련 컷오프 이후 업데이트되지 않으며 검색 인덱스 순위와 독립적으로 작동한다. 올바른 처리법: SEO 순위 개선과 별도로, JSON-LD·llms.txt·FAQ 페이지의 기계 가독 포맷 세 레이어를 동시에 유지하고, 분기별로 "브랜드명 + 핵심 속성" 쿼리를 ChatGPT·Perplexity·Gemini에 직접 입력해 오류 여부를 수동 점검한다. 발견된 오류는 해당 사실이 포함된 공식 페이지의 구조화 데이터를 즉시 보강한다.
브랜드 환각을 탐지하는 체계적 모니터링 방법이 있는가?
자동화 파이프라인 기준으로, 브랜드 관련 쿼리 집합(가격·설립일·제품 목록·임원진 등)을 JSON으로 정의하고, 각 AI 엔진 API에 정기 호출해 응답을 수집한 뒤 사실 데이터베이스와 문자열 일치·NLI(자연어 추론) 모델로 비교하는 방식이 현재 가장 일반적이다. 상용 도구로는 Profound·Trackta 등이 이 패턴을 구현하고 있으며, 자체 구축 시 OpenAI API logprobs + 사실 검증 레이어를 조합한다. 측정 주기는 제품 업데이트나 뉴스 이벤트 발생 시 트리거 기반으로 추가 실행한다.
JSON-LD를 추가하면 LLM이 즉시 반영하는가?
즉시 반영되지 않는다. LLM의 파라메트릭 메모리(학습 가중치)는 JSON-LD를 실시간으로 읽지 않는다. JSON-LD가 효과를 발휘하는 경로는 두 가지다. 첫째, Perplexity·ChatGPT Search처럼 실시간 웹 검색을 RAG로 결합하는 시스템이 해당 페이지를 크롤링해 컨텍스트에 삽입할 때, 구조화 데이터가 비구조화 본문보다 파싱 오류가 적어 정확도가 높아진다. 둘째, 다음 학습 사이클에서 구조화 데이터가 훈련 코퍼스에 포함되면 파라메트릭 메모리 자체가 교정된다. 따라서 단기 효과는 RAG 기반 엔진에서 먼저 나타나고, 장기 효과는 모델 재훈련 이후에 반영된다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.