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 |
1つ以上の 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
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト