LLM 환각 해독: 언어 모델 오류에 대한 심층 탐구
소개
기업과 빅테크 기업들이 대규모 언어 모델(LLMs)을 사용해 더 나은 제품을 만들면서, 신뢰할 수 있는 솔루션을 제공하는 데 있어 이들의 책임을 이해하는 것이 중요합니다. 중요한 문제는 이러한 모델들이 때때로 확신에 찬 듯하지만 잘못된 정보를 생성하여, 사용자가 출력이 정확하다고 잘못 믿게 만든다는 점입니다. 이 문제는 환각으로 알려져 있습니다.
데이터 과학자인 Morena는 Zilliz가 주최한 최근 Unstructured Data Meetup에서 LLM 환각에 대한 통찰력 있는 발표를 진행하며, 환각의 개념, 환각의 유형, 그것이 어떻게 해로울 수 있는지, 왜 발생하는지, 그리고 가장 중요하게는 이러한 환각을 어떻게 탐지할 수 있는지를 깊이 있게 설명했습니다.
환각이란 무엇인가요?
환각은 모든 형태의 언어 모델이 생성하는 거짓되거나 모순되는 출력입니다. 간단히 말해, 사실적으로 부정확하거나, 말이 되지 않거나, 입력 맥락 에 충실하지 않은 콘텐츠 입니다.
예를 들어, Llama3에 복잡한 질문을 해보겠습니다: State Software의 공동 창립자들이 JSON에 대해 논의했던 다른 이름은 무엇이었나요?
Llama3의 답변은 아래와 같습니다:
예시 질문에 대한 Llama3의 답변
반면 실제 논의는 다소 다릅니다:
JSON에 관한 Wikipedia 페이지의 답변
Llama 3-8B는 환각의 전형적인 예를 보여줍니다. 언어 모델이 제공할 수 있는 다양한 유형의 환각을 살펴보겠습니다.
다양한 유형의 환각
환각에는 내재적 환각과 외재적 환각이라는 두 가지 주요 범주가 있습니다.
내재적 환각
내재적 환각은 제공된 원본 정보와 대조되는 경향이 있습니다. 거대하고 복잡한 독해 시험 문제를 풀기 위해 서두르고 있는 자신을 상상해 보세요. 정보를 잘못 이해하여 일부 질문에 부정확하게 답할 수도 있습니다. 마찬가지로, LLM은 방대한 텍스트 코퍼스처럼 데이터가 매우 비정형적일 때 자주 환각을 일으키는 경향이 있습니다.
외재적 환각
외재적 환각은 LLM이 제공된 원본 데이터와 대조해 검증할 수 없는 정보를 생성할 때 발생하며, 종종 조작된 세부 정보로 이어집니다. 외재적 환각을 효과적으로 관리하려면, LLM이 작업을 완료하는 데 주어진 정보만 사용하도록 프롬프트를 작성하세요. 이 접근 방식은 검색 증강 생성(RAG) 파이프라인에서 특히 유용합니다. Laurie Voss는 Zilliz Unstructured Data Meetup에서 이 관행을 강조하며, 정확성을 유지하는 데 있어 그 중요성을 부각했습니다.
아래는 외재적 환각을 다루기 위한 프롬프트 예시입니다.
prompt = f"""Only using the Context Provided to you and not any outside knowledge, Answer the user query.
Context: {Wikipedia_Page_Content}
Query: Summarize me this Page"""
# Rather than just
prompt = f"""Summarize me this Page
{Wikipedia_Page_Content}"""
내재적 환각과 외재적 환각의 예
LLM 환각의 문제점
처음에는 해롭지 않거나 심지어 유머러스해 보일 수 있는 환각은 법률 및 의료와 같은 산업에서 LLM을 배포할 때 중대한 과제를 야기합니다. 이러한 분야에서는 Generative AI 모델이 생성한 정보의 정확성이 긍정적인 결과를 보장하는 데 매우 중요합니다. 이러한 모델이 부정확한 출력을 생성하면 잘못된 법적 결정이나 환자 치료의 훼손과 같은 심각한 결과로 이어질 수 있으며, 잠재적으로 생명을 위험에 빠뜨릴 수 있습니다.
또한 특정 산업에 미치는 영향을 넘어, LLM이 생성한 환각은 광범위한 사회적 함의를 가질 수 있습니다. 이는 신뢰할 수 있는 정보 출처에 대한 신뢰를 약화시키고 대중 사이에 광범위한 혼란과 불신을 초래합니다. 이러한 신뢰의 침식은 선거와 같은 중요한 사건 동안 특히 해로울 수 있습니다.
예를 들어, 선거 기간 동안 LLM이 후보자, 투표 절차 또는 선거 결과에 대해 퍼뜨리는 잘못된 정보는 민주적 절차에 상당한 영향을 미칠 수 있습니다. 허위 정보는 유권자에게 어디서 언제 투표해야 하는지에 대해 오도할 수 있으며, 잠재적으로 투표율을 억제하고 선거 결과에 영향을 미칠 수 있습니다. 더욱이, 잘못된 정보는 긴장을 고조시켜 사회적 불안과 심지어 폭력으로 이어질 수 있으며, 이는 선거 부정에 대한 근거 없는 주장이 시위와 대립을 촉발한 사례에서 볼 수 있습니다.
LLM은 왜 환각을 일으키는가?
LLM에는 객관적 진실이라는 개념이 없습니다. 그 출력은 행렬 곱셈 및 softmax 함수와 같은 복잡한 수학적 연산에 의해 결정되며, 이는 앞선 토큰을 기반으로 시퀀스의 각 토큰에 대한 확률을 계산합니다. 이러한 확률은 LLM이 생성하는 시퀀스를 좌우하지만, 무엇이 이러한 확률에 영향을 미칠까요?
주어진 문자열에 대한 토큰 확률
학습 데이터의 모순되거나 잘못된 정보
Foundation 모델은 Wikipedia 페이지, subreddits, tweets, Stack Overflow 및 MathOverflow 스레드, GitHub repositories, 그리고 수많은 기타 인터넷 소스를 포함한 방대한 양의 비정형 데이터로 학습됩니다. 이러한 학습은 모델이 처음부터 의미 있는 출력을 생성하도록 보장하는 것을 목표로 하지 않습니다. 대신 텐서로 저장된 기초 지식을 구축하고 일관된 출력을 생성합니다.
그러나 인터넷에서 발견되는 모든 데이터가 정확한 것은 아닙니다. 특정 subreddits나 tweets에서 나온 것과 같은 잘못된 정보와 오해의 소지가 있는 콘텐츠는 학습 중 모델에 영향을 미칠 수 있습니다. 이 문제는 모델의 가중치에 불일치를 초래하고 왜곡된 확률 분포를 발생시켜, 궁극적으로 출력에서 환각을 일으킬 수 있습니다.
작업의 복잡성
작업의 성격 또한 LLM이 허위이거나 무의미한 출력을 생성하기 쉬운지 여부에 영향을 미칩니다. 간단한 질문에 답하는 것과 같은 단순한 작업은 환각으로 이어질 가능성이 낮습니다. 그러나 LLM은 긴 텍스트 구절을 요약하거나 markdown 형식으로 제공된 표 형식 데이터를 분석하는 것과 같은 더 복잡한 작업에 직면하면 어려움을 겪고 매우 무의미한 출력을 생성할 수 있습니다.
단순 작업 vs. 복잡한 작업
환각 탐지
LLM 환각을 탐지하기 위해 여러 방법론이 사용됩니다: 자기 평가, 참조 기반 탐지, 불확실성 기반 탐지, 일관성 기반 탐지. 이러한 방법론 중 일부를 자세히 살펴보겠습니다.
환각 탐지 방법
자기 평가
자가 평가는 LLM이 자신의 출력을 평가하는 과정으로, 환각이 종종 모델 내부에서 비롯된다는 점을 고려하면 처음에는 직관에 반하는 것처럼 보일 수 있습니다. 그러나 응답의 품질을 평가하는 일은 본질적으로 응답 자체를 생성하는 일보다 쉽기 때문에 이 방법은 여전히 가치가 있습니다. 답변 평가와 같은 단순한 작업은 복잡한 질의에 대한 응답 생성과 같은 더 복잡한 작업보다 환각이 발생할 가능성이 낮습니다. 이는 LLM이 응답의 정확성과 일관성을 가늠하는 능력이 완전히 새로운 정보를 정확하게 생성하는 능력보다 덜 어렵기 때문입니다.
또한 자가 평가를 참조 기반 또는 일관성 기반 접근 방식과 같은 다른 탐지 방법과 통합하면 LLM이 자신의 출력을 종합적으로 평가하는 능력이 향상됩니다. 이러한 결합된 접근 방식은 잠재적 환각을 효과적으로 식별하고 완화하는 모델의 역량을 강화하여, 생성된 콘텐츠의 전반적인 신뢰성과 신빙성을 향상시킵니다.
LLM이 스스로를 평가하는 기본 워크플로
참조 기반 방법
참조 기반 방법론은 생성된 출력의 일관성을 제공된 참조와 비교하여 평가하므로, Retrieval Augmented Generation(RAG)을 활용하는 프로덕션 환경과 요약과 같은 작업에서 특히 유용합니다.
소스 지식을 참조로 제공하면 LLM이 주어진 참조와 밀접하게 일치하는 출력을 생성할 수 있습니다. 파리에 관한 Wikipedia 페이지를 요약하는 작업을 생각해 보세요. 참조 기반 방법을 사용하면 LLM은 정확성과 일관성을 보장하기 위해 원본 콘텐츠와 비교 평가되는 요약을 생성할 수 있습니다.
BERTScore 또는 ROUGEScore와 같은 성능 지표는 특정 작업에서 LLM 성능을 평가하는 데 일반적으로 사용됩니다. 이러한 지표는 생성된 출력이 참조와 얼마나 잘 일치하는지에 대한 정량적 척도를 제공합니다. 또한 자가 평가 계층을 통합하면 참조 기반 평가 방법의 신뢰성과 효과가 더욱 향상됩니다.
컨텍스트 기반 검색을 위한 체계적인 워크플로
불확실성 기반 방법
이전에 LLM이 잘못된 출력을 자신 있게 생성하는 것을 관찰했던 것을 기억하시나요? 그런데 환각에 관해서는 표면 아래에서 항상 그런 것은 아닙니다. 환각은 어떤 토큰이 "최선의" 실제 정답 토큰보다 약간 더 높은 순위로 매겨지는 불확실한 확률 분포로 인해 발생할 수 있으며, 이는 잘못된 출력 생성으로 이어집니다.
토큰 확률을 분석하려면 Hugging Face class methods를 활용할 수 있습니다. 이러한 방법을 통해 토큰 생성과 관련된 확률을 검토할 수 있으며, 모델이 어떻게 결정을 내리는지에 대한 통찰을 제공하고 환각이 발생하는 사례를 잠재적으로 식별할 수 있습니다.
from transformers import GPT2Tokenizer, AutoModelForCausalLM
import numpy as np
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer.pad_token_id = tokenizer.eos_token_id
inputs = tokenizer(["Today is"], return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
transition_scores = model.compute_transition_scores(
outputs.sequences, outputs.scores, normalize_logits=True
)
input_length = inputs.input_ids.shape[1]
generated_tokens = outputs.sequences[:, input_length:]
for tok, score in zip(generated_tokens[0], transition_scores[0]):
# | token | token string | logits | probability
print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.4f} | {np.exp(score.numpy()):.2%}")
# Expected output:
#| 262 | the | -1.4136 | 24.33%
#| 1110 | day | -2.6089 | 7.36%
#| 618 | when | -2.0096 | 13.40%
#| 356 | we | -1.8593 | 15.58%
#| 460 | can | -2.5083 | 8.14%
이 방법은 logprobs를 통해 gpt-4와 같은 폐쇄형 소스 모델에서도 시도해 볼 수 있습니다.
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Hello!"}
],
logprobs=True,
top_logprobs=2
)
print(completion.choices[0].logprobs)
logprobs의 출력은 아래 JSON과 같습니다.
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1702685778,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello!"
},
"logprobs": {
"content": [
{
"token": "Hello",
"logprob": -0.31725305,
"bytes": [72, 101, 108, 108, 111],
"top_logprobs": [
{
"token": "Hello",
"logprob": -0.31725305,
"bytes": [72, 101, 108, 108, 111]
},
{
"token": "Hi",
"logprob": -1.3190403,
"bytes": [72, 105]
}
]
},
{
"token": "!",
"logprob": -0.02380986,
"bytes": [
33
],
"top_logprobs": [
{
"token": "!",
"logprob": -0.02380986,
"bytes": [33]
} ]
}, "finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 2,
"completion_tokens": 2,
"total_tokens": 4
},
"system_fingerprint": null
}
일관성 기반 탐지
일관성 기반 탐지는 LLM 환각을 식별하기 위한 간단하지만 효과적인 방법입니다. 이 접근 방식은 동일한 질문을 LLM에 여러 번 질의하고 그 응답을 비교하는 것을 포함합니다. 반복된 질의에서 일관된 출력은 환각 가능성이 낮음을 나타내는 반면, 일관되지 않은 응답은 잠재적인 문제를 시사합니다.
아래는 Morena가 강연 중 공유한 예시로, 그는 LLM에 세 가지 질문을 반복해서 물었습니다.
ronaldo_prompt = "Give me three facts about Cristiano Ronaldo."
toaster_prompt = "Give me an absurd fact about toasters."
seinfeld_prompt = "In what episode of Seinfeld did Kramer buy a giant hat?"
프롬프트 설정:
ronaldo_passages = []
for i in range(3):
prompt = ronaldo_prompt
result = chat_gpt_prompt(prompt).choices[0]-message.content
ronaldo passages.append(result)
toaster_passages = []
for i in range(3):
prompt = toaster_prompt
result = chat_gpt_prompt(prompt).choices[0].message.content
toaster_passages.append(result)
seinfeld_passages = []
for i in range(3):
prompt = seinfeld_prompt
result = chat_gpt_prompt(prompt).choices[0].message.content
seinfeld_passages.append(result)
이 예시에서 LLM 학습 데이터에 정보가 깊이 내재된 Cristiano Ronaldo에 대해 질의하면 환각 위험이 최소화된 일관된 출력이 나오는 경향이 있습니다. 이러한 일관성은 잘 정립된 주제에 대해 정확한 응답을 생성하는 모델의 신뢰성을 보여줍니다.
Cristiano Ronaldo에 대해 LLM이 생성한 답변
그러나 Seinfeld 구절의 경우 Kramer가 “Giant Hat”을 산 적이 없기 때문에 상황이 다릅니다.
Giant Hat에 대해 LLM이 생성한 답변
결론
더 많은 기업이 프로덕션 애플리케이션에 대규모 언어 모델(LLM)을 사용함에 따라, 그 과제를 지속적으로 해결하는 것이 중요합니다. 환각은 방치될 경우 점점 더 해로운 영향을 미칠 수 있습니다. 우리는 그 기원, 유발 요인, 탐지 전략을 이해함으로써 그 영향을 최소화할 수 있습니다.
이 글에서는 환각의 개념과 잠재적 유발 요인을 살펴보았습니다. 또한 환각을 탐지하기 위한 네 가지 실용적인 방법, 즉 자기 평가, 참조 기반 방법, 불확실성 기반 방법, 일관성 기반 탐지를 소개했습니다. 이러한 방법은 다양한 사용 사례에 맞게 적용될 수 있으며, 환각 탐지의 정밀도를 높이기 위해 결합될 수 있습니다.
다양한 환각 탐지 방법 비교
이러한 접근 방식을 구현하면 LLM 및 기타 생성형 AI 기술을 책임감 있게 배포할 수 있으며, 사회에 미치는 긍정적인 영향을 극대화할 수 있습니다.
계속 읽기

DeepSeek-OCR Explained: Optical Compression for Scalable Long-Context and RAG Systems
Discover how DeepSeek-OCR uses visual tokens and Contexts Optical Compression to boost long-context LLM efficiency and reshape RAG performance.

Zilliz Cloud Update: Tiered Storage, Business Critical Plan, Cross-Region Backup, and Pricing Changes
This release offers a rebuilt tiered storage with lower costs, a new Business Critical plan for enhanced security, and pricing updates, among other features.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.


