cvs-health/uqlm
[JMLR 2026] UQLM: A Python package for LLM hallucination detection using uncertainty quantification
📚 UQLM이란 무엇인가요?
UQLM (Uncertainty Quantification for Language Models)은 대규모 언어 모델(LLM)이 환각(사실과 다르거나 근거 없는 진술)을 일으킬 가능성을 감지하도록 돕는 Python 라이브러리입니다. 각 LLM 응답에 **신뢰도 점수(0-1)**를 부여하며, 점수가 높을수록 모델이 더 신뢰할 수 있음을 의미합니다.
🎯 핵심 아이디어
LLM은 유창한 텍스트를 생성하는 데 뛰어나지만, 틀린 내용을 자신 있게 말할 수 있습니다. UQLM은 이를 불확실성 문제로 다룹니다. 모델이 불확실하다면 신뢰도 점수는 낮아야 합니다. 이 라이브러리는 몇 가지 최첨단 불확실성 정량화(UQ) 기술을 구현하고 이를 사용하기 쉬운 클래스로 래핑합니다.
🧩 주요 구성 요소 (클래스)
| 클래스 | 기능 | 일반적인 사용 사례 |
|---|---|---|
BlackBoxUQ |
동일한 프롬프트에 대해 여러 응답을 생성하고 일관성을 측정합니다. 생성된 텍스트만 필요하므로 모든 LLM에서 작동합니다. | LLM에 저렴하게 액세스할 수 있고 추가 API 호출을 감당할 수 있을 때. |
WhiteBoxUQ |
모델의 토큰 수준 확률(예: 최소 토큰 확률, 시퀀스 확률)을 사용하여 단일 생성 결과를 점수화합니다. 토큰 확률을 반환하는 LLM이 필요합니다. | 제공자가 토큰 확률 데이터(예: Gemini, OpenAI “logprobs”)를 노출할 때 빠르고 저렴한 점수화. |
LLMPanel |
하나 이상의 LLM을 *저지(판사)*로 사용하여 원래 응답을 읽고 신뢰도 등급을 출력합니다. 프롬프트를 통해 완전히 사용자 정의할 수 있습니다. | “모델 기반 저지” 접근 방식을 원하거나 여러 LLM의 의견을 결합하고 싶을 때. |
UQEnsemble |
여러 스코어러(블랙박스, 화이트박스, 저지)를 가중 평균을 통해 결합합니다. 그대로 사용하거나 작은 레이블 세트에서 튜닝하여 최적의 가중치를 학습할 수 있습니다. | 견고하고 프로덕션 준비가 완료된 불확실성 추정기를 구축할 때. |
LongTextUQ |
긴 답변을 개별 클레임으로 나누어 각각 점수를 매기고, 신뢰도가 낮은 클레임을 삭제하여 답변을 정제할 수 있습니다. | 클레임 수준의 신뢰성이 필요한 긴 형식의 생성(기사, 보고서). |
CodeGenUQ |
코드 생성에 특화되어 있으며, 코드를 실행하지 않고 토큰 확률과 기능적 등가성 스코어러를 모두 사용하여 기능적 정확성을 예측합니다. | 생성된 코드 조각의 정확성을 평가할 때. |
⚙️ 사용 방법 (빠른 예제)
from langchain_openai import ChatOpenAI
from uqlm import BlackBoxUQ
# 1️⃣ LangChain 호환 LLM 선택
llm = ChatOpenAI(model="gpt-4o-mini")
# 2️⃣ 스코어러 생성 – 여기서는 "semantic_negentropy" 블랙박스 스코어러를 요청
bbuq = BlackBoxUQ(llm=llm, scorers=["semantic_negentropy"], use_best=True)
# 3️⃣ 프롬프트 목록에서 실행(프롬프트당 5회 생성)하고 pandas와 유사한 테이블 가져오기
results = await bbuq.generate_and_score(prompts=["What is the capital of France?"],
num_responses=5)
print(results.to_df())
반환된 테이블에는 생성된 텍스트, 신뢰도 점수, 그리고 (use_best=True인 경우) 불확실성이 가장 낮은 응답이 포함됩니다.
📊 스코어러 유형 (작동 원리)
| 카테고리 | 스코어러 예시 | 측정 내용 |
|---|---|---|
| 블랙박스 (일관성 기반) | semantic_negentropy, non_contradiction, entailment |
여러 생성 결과가 서로 얼마나 일치하는지. |
| 화이트박스 (토큰 확률 기반) | min_probability, sequence_probability, top-k_negentropy |
모델 자체 확률 분포에서 직접적인 통계적 신뢰도. |
| LLM 저지 | Categorical, Continuous, Likert, Panel | 별도의 LLM이 답변을 읽고 진실성을 판단. |
| 앙상블 | 위 스코어러들의 가중 평균 | 강점을 결합; 검증 세트에서 튜닝 가능. |
| 긴 텍스트 (클레임 수준) | entailment, graph-based, LUQ |
각 클레임/문장 점수화; 신뢰도 낮은 클레임 삭제 가능. |
| 코드 생성 | functional_equivalence_rate |
생성된 코드가 의도한 기능과 일치하는지 추정. |
📦 설치 및 시작하기
pip install uqlm # PyPI에서 최신 릴리스 가져오기
이 라이브러리는 **Python 3.10+**가 필요하며 LangChain 채팅 모델 인터페이스를 따르는 모든 LLM에서 작동합니다.
📚 문서 및 학습 리소스
- 전체 문서: https://cvs-health.github.io/uqlm/latest/index.html – API 참조, 튜토리얼 및 문제 해결.
- 예제 노트북: GitHub의
examples/폴더 – 모든 스코어러 유형, 앙상블 튜닝 및 긴 텍스트 정제 포함. - Discord 커뮤니티: 질문 및 협업을 위한 공개 Discord 서버.
🏆 UQLM을 사용해야 할 때
- 다운스트림 파이프라인을 위해 응답별 자동 신뢰도 점수가 필요한 경우(예: 사용자에게 표시하기 전에 LLM 답변 필터링).
- 환각이 허용되지 않는 고위험 도메인(의료, 금융, 법률)에서 작업하는 경우.
- 자체 불확실성 로직을 작성하지 않고도 LangChain 호환 LLM과 함께 작동하는 플러그 앤 플레이 솔루션을 원하는 경우.
📖 인용
연구에서 UQLM을 사용하는 경우 JMLR 소프트웨어 논문을 인용하십시오:
@article{JMLR:v27:25-1557,
author = {Dylan Bouchard and Mohit Singh Chauhan and David Skarbrev ...},
title = {UQLM: Uncertainty Quantification for Language Models},
journal = {Journal of Machine Learning Research},
year = {2024},
volume = {27},
pages = {1--...},
url = {https://www.jmlr.org/papers/v27/25-1557.html}
}
요약
UQLM = LLM의 불확실성을 측정하고 대응할 수 있게 해주는 즉시 사용 가능한 툴박스입니다. 저렴한 일관성 검사부터 정교한 앙상블 및 클레임 수준의 정제까지 검증된 다양한 기술을 제공합니다. pip으로 설치하고 지연 시간/비용 제약에 맞는 스코어러 클래스를 선택하면 모든 생성된 답변에 대해 0-1의 신뢰도 점수를 얻을 수 있습니다.
관련
- Dispatch
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트