Shikata Ga Nai

Private? There is no such things.

第43回:「検索部分」と「生成部分」を分けて評価しよう

Hello there, ('ω')ノ

「RAGの回答がイマイチ…でも、原因はどこ?」

RAG(検索拡張型生成)を使っていると、こんなモヤモヤを感じることはありませんか?

  • AIの回答がピンとこない
  • 出典はあるけど、なんか質問に合ってない
  • プロンプトを変えても改善しない…?

実はこれ、RAGの“検索部分”と“生成部分”が混在して評価されていることが原因かもしれません。

今回は、検索(Retrieval)と生成(Generation)を分けて評価する理由と方法について、わかりやすく解説します!


💡 RAGは「検索」と「生成」の2段構成!

RAGの仕組みをあらためて振り返ると…

  1. 検索部分(Retrieval)
     → 質問に関連する社内文書を探し出す(ベクトル検索)

  2. 生成部分(Generation)
     → 見つけた文書をもとに、自然な文章で回答を生成(LLM)

📌 つまり、「どこが良くて、どこが悪いか」を把握するには、この2つを別々にチェックする必要があるということです!


🔍 なぜ分けて評価すべきなのか?

評価しないと… 分けて評価すると…
「AIが変な回答したな…」で終わってしまう 検索ミスか、生成ミスかを切り分けられる
改善の方向性が見えない プロンプトを変えるべきか、データを直すべきか判断できる
精度の向上に限界がある それぞれの精度を最適化できるようになる

🧩 検索部分の評価方法(Retrieval)


✅ ① Context Recall(文脈の再現率)

  • 定義: 質問に答えるのに必要な情報が、検索結果に含まれているか?
  • チェック方法:
     → 検索されたチャンクに「正しい答え」が入っているかを人手で確認(またはragasで自動スコア)

✅ ② Context Precision(文脈の適合率)

  • 定義: 関係のないチャンクが混ざっていないか?
  • チェック方法:
     → ノイズが多すぎると、生成結果がブレやすくなる

✅ ③ チャンク設計の見直しポイント

  • チャンクが長すぎる → 関連部分がボヤける
  • チャンクが短すぎる → 必要な情報が分断される
  • チャンクにタイトルやタグ(メタ情報)がない → 検索の精度が下がる

✍️ 生成部分の評価方法(Generation)


✅ ① Faithfulness(忠実性)

  • 定義: 回答が検索文書に正確に基づいているか
  • → “それっぽいけど嘘”を防ぐ指標

✅ ② Answer Relevance(質問との関連性)

  • 定義: 回答が質問にちゃんと答えているか?
  • → 曖昧な質問でも、文脈を理解して答えているかチェック

✅ ③ 表現のわかりやすさ・簡潔さ

  • 過剰な専門用語がないか?
  • 回答が長すぎないか?
  • 結論から先に書かれているか?

➡ ここはプロンプト設計やLLMの選定がカギ!


🛠 分けて評価するためのステップ

ステップ 内容
① 質問と回答セットを準備 なるべく実際の業務に近い内容が◎
② 検索結果(コンテキスト)を記録 どのチャンクが使われたかを保存
③ 「検索評価」と「生成評価」に分ける それぞれ別のチェックリストやスコアで評価
④ 改善ポイントを整理 例:「検索チャンクに必要情報がない」→DBの見直し

📊 評価イメージ(例)

質問 Context Recall Faithfulness Relevance コメント
Q1 理想的!
Q2 検索がズレてる。DBに情報がない?
Q3 生成で“盛ってる”。プロンプト要改善
Q4 質問の解釈に失敗。入力の工夫が必要

✅ 評価に使えるツール

  • 🔹 ragas:検索・生成を分けたスコアが自動で出せる
  • 🔹 手動評価シート(Excel / Googleフォーム)
  • 🔹 langfuse, Heliconeなど:LLM出力のログ・分析ツールと連携可能

まとめ:分けて評価すれば、直す場所が見えてくる!

  • RAGの精度を高めるには、「検索の精度」と「生成の品質」をそれぞれ分けてチェックすることが大切
  • 検索に問題があるのか? 生成がズレているのか? を明確にするだけで、改善のスピードと効果が格段に上がる
  • 分けて評価する習慣が、継続的に“使えるRAG”を育てる第一歩!

Best regards, (^^ゞ