RAGをもっと信頼できるものにする方法~評価編~【第3回】

2026.01.22
RAGをもっと信頼できるものにする方法~評価編~【第3回】

はじめに

MS開発部の松坂です。
RAG(検索+生成)の正しさを上げるには、どこが良くてどこが弱いのかを切り分けられることが重要です。
そのための診断ツールが RAGChecker です。

第3回(評価編)は、RAGCheckerが提案する評価の考え方(回答をクレーム=主張に分解し、検索と生成を別々に診断)に沿って、C#コードで診断パイプラインを組み立て、非エンジニアにも伝わる出力まで仕上げます。
RAGCheckerはGitHub上でOSSとして公開され、論文や実装ガイドも整備されています。必要に応じて公式パッケージでの実行にも切り替え可能です。

RAGCheckerとは

RAGCheckerは、回答を主張(claim)単位に分解して、Retriever(検索)とGenerator(生成)を別々に評価できるのが最大の特徴です。
全体のPrecision/Recall/F1に加え、Claim Recall / Context Precision(検索)
Faithfulness / Hallucination / Context Utilization(生成)などの指標を提供します。これにより、「検索が原因か/生成が原因か」を切り分け、改善の当て所が明確になります。さらに、人手評価との相関が高いことも報告されています。

評価データを用意する

RAGCheckerが期待する最小の入力は、1問ごとに以下です。
  • query(質問)
  • gt_answer(正解)
  • response(RAGの実際の回答)
  • retrieved_context(検索で拾ったチャンク配列:text / doc_id)
例:RAGChecker入力JSON(抜粋)
実務Tips:
  • doc_idに版情報を含めておくと、旧版ヒットが原因の誤答を特定しやすくなります。
  • 第2回でC#生成したgenerated_qas.json(question/answer)に、RAGの実行結果とretrieved_contextを結合して、この形式に整形します。入力仕様や具体例は公式/実践記事が参考になります

RAGCheckerの構成を4つの役割に分解してみる

RAGCheckerの実装や論文を追っていくと、 内部でやっていることは複雑そうに見えますが、役割ベースで見ると次の4段に整理できそうだと感じました。
  1. クレーム抽出(Claim Extraction)
    • 生成された回答文から、「事実として主張している文・断定表現」を抽出する
    • 評価の最小単位を「文章全体」ではなく「クレーム」に分解する工程
  2. 含意判定(Entailment Judgment)
    • 各クレームが、取得したドキュメントから裏付けられるかを判定する
    • 支持されているのか、矛盾しているのか、根拠不明なのかを見るフェーズ
  3. 指標計算(Metric Calculation)
    • 含意判定の結果をもとに、Faithfulness/Hallucination率/Coverageなどの評価指標を算出する
  4. 結果集約(Aggregation & Reporting)
    • クレーム単位の評価をまとめ、全体スコア/警告コメント/デバッグ用の内訳といった形で人が読める結果に落とす
こうして見ると、RAGCheckerは
「LLMを評価する仕組み」というより「評価パイプライン」に近い構造をしているように思えます。
今回のC#実装では、この4つの役割をそのままコード構造に反映しました。

コード例(C#)

上記4つの役割をそのままコード構造に反映しました。

①クレーム抽出:回答を“検証可能な主張”へ分割

回答文を意味のある主張に分割します(※JSON固定で返させ、後続処理を安定化)。

②含意判定:クレーム×チャンクで“裏付くか”を判定

各クレームに対して、取得チャンクが**entail(裏付く)/contradict(矛盾)/unknown(根拠なし)**のどれかを返します。 ポイント
  • rationale(根拠説明)も保持しておくと、失敗例レビューやレポート説明責任に使えます。
  • 並列実行でAPIコスト/レイテンシをコントロール。
また、判定ラベルのパースは厳密一致がおすすめです。
例(Bugfix):”Enabled” ではなく “entailed” に正規化して比較する関数へ。

③指標計算:検索・生成を“別々に”見える化

  • 生成側
    • Faithfulness:クレームのうち根拠で裏付けられた割合
    • HallucinationRate:unknownのみのクレーム割合(裏付け不在)
  • 検索側
    • ContextPrecision:取得チャンクのうち有効(entail(状況によりcontradictも含める))な割合
    • ClaimRecall(本稿実装の扱い):応答クレームの裏付け率(=faithfulnessと同義に運用)

④ 結果を集約して返す(1問ごと+全体サマリ)

実行ループでは、質問ごとの診断(Details)と全体サマリ(Summary)を構築します。

いったん「RAGCheckerの出力はこんな感じ」(例)

公式RAGCheckerが返すイメージに寄せると、全体/Retriever/Generator/事例の4層で見るのが分かりやすいです。 RAGCheckerは概ね以下の3層で結果を返します:
  1. 全体:Precision, Recall, F1(クレーム単位)
  2. Retriever:Claim Recall(必要主張の取りこぼし率)、Context Precision(ノイズ混入度)
  3. Generator:Faithfulness(根拠への忠実性)、Hallucination(根拠なき主張)、Context Utilization(根拠の使い方) など
    これらの定義・指標は公式と実装ガイドに整理されています。
結果の見方の参考例:
  • Claim Recallが低い×Faithfulness高い→ 検索が弱く、生成は“与えられた根拠には忠実”。検索強化が解
  • Hallucinationが高い→ 生成が根拠を無視/誤解。生成側のプロンプトやガードレールが解。
  • Context Precisionが低い→ ノイズ多く生成が混乱。チャンク分割/インデックス/フィルタの見直しが解。
(※指標の命名・数式の詳細は論文・リポジトリ参照) https://arxiv.org/abs/2408.08067
※本稿のC#実装(自作評価)はRAGCheckerの思想に沿って近い指標を出します。公式のRAGCheckerを使う場合は、同等の入力JSONをCLIやPython APIに渡して実行します。

(おまけ)LLMによる総合評価を自動生成する

非エンジニア向けに「良かった点/課題/リスク/推奨アクション(短期・中期)」まで一括でまとめた要約レポートを返すと、意思決定が速くなります。
第1回で触れた「冒頭スコア(例:正しさ80%)」の根拠作りにも使えます。 想定される出力(イメージ)

まとめ

第1回から第3回までを通して、RAGの品質を高めるためのサイクル 「測る → 直す → 伝える」 を実務で回すための具体策を紹介しました。

  • RAGCheckerの考え方(クレーム単位の評価 & 検索と生成の切り分け)に沿うと、 どこから直すべきか(検索か、生成か)が一目で分かり、改善の優先順位が明確になります。
  • 本記事のC#実装パイプラインでは、 回答からのクレーム抽出 → 含意判定(チャンク照合) → 指標計算 → 結果集約までを自動化。 JSON固定・低温度・自己修復の方針により、評価処理の安定性も高めています。
  • 仕上げにLLMで総合評価レポートを生成すれば、 非エンジニアにも伝わる「読み物」として共有可能。 現場の意思決定に直結する〈良かった点/課題/推奨アクション/優先度〉をワンパッケージで配布できます。
  • 公式のRAGCheckerを使う場合は、同等の入力JSONを CLIPython APIに渡すだけ。LlamaIndex連携も整備されており、 既存RAGの出力から評価形式へ変換する導入が容易です。

ここからは、まずは小さく始めて、効果を確認しながら広げていくのがおすすめです。

次のアクション(スモールスタート)

  1. 評価セットの拡充: 第2回のExpertGenQA(C#実装)で、想定質問のバリエーションと難易度を増やす (スタイル:ルール適用/シナリオ/用語解説を1~2問ずつ追加)。
  2. 評価の定期運用: 週次またはリリースごとにRAGChecker相当の評価を回し、 Claim Recall/Context Precision/Faithfulness/Hallucinationをダッシュボード化。
  3. 改善の反映: 指標に基づき、検索(インデックス/チャンク/再ランク/版管理)、 生成(根拠引用必須・不確実時の応答方針)の順で着手。改善後に再評価。
  4. 要約レポートの配布: LLMで総合評価(JSON)を生成し、非エンジニア向けに 「結論 → 影響 → 推奨アクション(短期/中期)」の順で共有。

参考

以上、最後までご愛読いただき
ありがとうございました。

お問い合わせは、
以下のフォームへご連絡ください。

お問い合わせ

PAGETOP