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
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト