UQLM: LLM의 환각(hallucination)을 탐지하는 불확실성 정량화 도구 (feat. CVS Health)

UQLM 소개

CVS Health가 오픈소스로 공개한 UQLM(Uncertainty Quantification for Language Models)은 대규모 언어 모델(LLM)의 환각(hallucination)을 탐지하기 위한 Python 라이브러리입니다. 이 도구는 다양한 불확실성 정량화 기법을 활용하여 LLM의 출력에 대한 신뢰도를 평가할 수 있도록 지원합니다. 특히 의료, 금융, 법률 등 고신뢰성이 요구되는 분야에서 LLM을 활용하고자 하는 개발자들에게 유용할 것으로 기대합니다.

대규모 언어 모델(LLM)은 다양한 분야에서 활용되고 있지만, 때때로 사실과 다른 정보를 생성하는 환각(hallucination) 문제가 발생합니다. 이러한 문제는 특히 의료, 금융, 법률 등 정확성이 중요한 분야에서 심각한 결과를 초래할 수 있습니다. UQLM은 이러한 환각 문제를 해결하기 위해 개발된 도구로, 다양한 불확실성 정량화 기법을 통해 LLM의 출력에 대한 신뢰도를 평가합니다. 이를 통해 LLM의 출력이 얼마나 신뢰할 수 있는지를 정량적으로 판단할 수 있습니다.

UQLM의 주요 기능 소개

UQLM(Uncertainty Quantification for Language Models)은 LangChain 등 기존의 LLM 워크플로우와 쉽게 통합할 수 있으며, Apache-2.0 라이선스로 공개되어 자유롭게 활용 및 수정이 가능합니다. 또한, 대규모 언어 모델(LLM)의 환각(hallucination)을 탐지하기 위해 다양한 불확실성 정량화(uncertainty quantification, UQ) 기법을 제공합니다. 이러한 기법들은 각각의 응답에 대해 신뢰도를 평가하며, Black-Box, White-Box, LLM-as-a-Judge, Ensemble 와 같은 총 4가지의 스코어러(Scorer)를 제공합니다.

각 스코어러의 특징과 작동 방식을 상세히 정리하면 다음과 같습니다:

Black-Box 스코어러(Scorer)

Black-Box Scorer는 동일한 프롬프트에 대해 여러 개의 응답을 생성하고, 이들 간의 의미적 일관성을 분석하여 불확실성을 측정합니다. 대표적으로 Semantic Negentropy 기법을 활용하여, 응답 간 유사성이 낮을수록 불확실성이 높다고 판단합니다. 이 방식은 모델의 내부 구조에 접근할 필요 없이, 출력값만으로 평가가 가능하다는 장점이 있습니다. 따라서 외부 API 형태로 제공되는 LLM에도 쉽게 적용할 수 있습니다. 단점으로는 반복 생성을 통해 평가해야 하므로 시간과 비용이 상대적으로 많이 듭니다.

White-Box 스코어러(Scorer)

White-Box Scorer는 LLM의 내부 토큰 확률 정보를 활용하여 출력에 대한 신뢰도를 정량화합니다. 대표 기법으로는 응답 전체의 평균 토큰 확률을 계산하는 LNTP와, 가장 낮은 토큰 확률을 사용하는 MTP가 있습니다. 이 방식은 별도의 생성 없이 빠르게 평가할 수 있어 비용 효율성이 높습니다. 다만, 모델이 토큰 확률 정보를 제공해야 적용 가능하므로, OpenAI API 등 일부 서비스에는 사용이 제한될 수 있습니다. 내부 로직 기반 평가를 통해 보다 세밀한 판단이 가능한 것이 특징입니다.

LLM-as-a-Judge 스코어러(Scorer)

LLM-as-a-Judge Scorer는 다른 LLM을 심판(judge)으로 활용하여, 주어진 응답이 얼마나 신뢰할 수 있는지를 평가합니다. 질문과 응답을 함께 입력하여, 해당 LLM이 응답의 정확도에 대해 0~1 사이의 점수를 부여합니다. 보통 "정확함(1)", "불확실함(0.5)", "부정확함(0)"의 스케일을 사용합니다. 이는 사람의 수작업 평가를 자동화할 수 있는 장점이 있으나, 평가 모델의 편향이나 한계에 영향을 받을 수 있습니다. 추가적인 LLM 호출이 필요하므로 비용 면에서는 고려가 필요합니다.

Ensemble 스코어러(Scorer)

Ensemble Scorer는 앞서 설명한 세 가지 Scorer의 결과를 통합하여 종합적인 불확실성 평가를 제공합니다. 각 스코어러의 결과에 가중치를 부여하거나, 조건에 따라 조합하는 방식으로 작동합니다. 이를 통해 개별 스코어러의 약점을 보완하고, 보다 정밀한 판단이 가능합니다. 사용자는 도메인이나 업무 특성에 따라 최적의 가중치를 설정할 수 있습니다. 다만 초기 설정과 실험이 필요하기 때문에, 복잡도는 가장 높은 방식입니다.

UQLM의 사용 방법

UQLM은 PyPI를 통해 설치할 수 있으며, Langchain 등과 쉽게 통합하여 사용할 수 있습니다. 예를 들어, BlackBoxUQ를 사용하여 환각을 탐지하는 코드는 다음과 같습니다:

from langchain_google_vertexai import ChatVertexAI
llm = ChatVertexAI(model='gemini-pro')

from uqlm import BlackBoxUQ
bbuq = BlackBoxUQ(llm=llm, scorers=["semantic_negentropy"], use_best=True)

results = await bbuq.generate_and_score(prompts=prompts, num_responses=5)
results.to_df()

이 외에도 다양한 예제 노트북이 제공되어 있어, 각 스코어러의 사용 방법을 쉽게 익힐 수 있습니다. UQLM의 다양한 예시들은 다음 링크에서 확인할 수 있습니다:

라이선스

UQLM 프로젝트는 Apache 2.0 라이선스로 공개되어 있습니다. 상업적 사용을 포함하여 자유롭게 사용할 수 있으며, 별도의 제약 사항은 없습니다.

:github: UQLM GitHub 저장소

:books: UQLM 공식 문서 사이트

:scroll: UQLM 관련 논문




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: