+ 作るログイン
図を読み込んでいます…
1 / 15
RAG のすべて ― 基礎から現在の形、そして難しさまで / 全15章

RAG 12:評価 ― 「よさそう」を数字にする

発行
アニメモ公式
版
第1版
改訂
コマ
全15

RAG の評価を、検索と生成に分けて説明します。テストセット(質問・正解の答え・正解の資料)の作り方と、合成データの危うさ、recall@k・MRR・nDCG などの検索の物差し、faithfulness・answer relevancy などの生成の物差し、LLM に採点させるときのくせと人の確認、変更のたびの測り直しと本番の信号まで。

「デモでうまくいった」は評価ではない

RAG を作ると、まず自分で何問か試します。「有給は何日?」「経費の締め日は?」。どれもきちんと答えてくれて、「よし、できた」と思います。

でも、これは評価ではありません。自分で考えた質問は、答えを知っていて、資料と同じ言葉を使った素直な聞き方になりがちです。いわば、自分で作った問題を自分で解いて満点を取っているのと同じです。

本番の利用者は、略語を使い、誤字をし、資料に書かれていないことも聞きます。図の右の四角は本番の質問で、赤は答えが外れたものです。デモの3問には、この赤が1つも出てきません。

この第12章は、RAG の流れ(質問 → 探す → 集める → 読ませる → 答える)の全体を外から測る話です。どこか1か所の部品ではなく、「全体としてうまく動いているか」「どこが崩れているか」を数字で言えるようにします。

第3〜11章では、たくさんの工夫を見てきました。チャンクの大きさ、ハイブリッド検索、リランキング、質問の書き換え…。でも、測れなければ、どの工夫が効いたのかは分かりません。評価は、それらすべての土台です。

※この章は 2026年9月時点の情報をもとにしています。評価ツールの名前や物差しの定義は、版によって変わることがあります。

  • RAG のすべて 12 ― 評価
  • 1 / 15
  • 「デモでうまくいった」は評価ではない
  • デモ:自分で考えた3問
  • 本番:利用者の何百問
  • 答えを知っている・言い方も素直
  • 略語・誤字・資料に無い質問
  • 有給は何日?
  • 経費の締め日は?
  • 在宅勤務の申請は?
  • 赤い四角は「答えが外れた質問」。デモの3問には1つも出てこない
  • 自分で選んだ数問が通っても、本番の質問でどうなるかは分からない。

検索の評価と生成の評価を分ける

答えが間違っていたとします。原因は大きく2つに分かれます。

原因何が起きたか直す場所
検索の失敗答えの載った資料が、集めた資料に入っていなかったチャンク分割・埋め込み・検索・リランキング(第3〜7章)
生成の失敗資料はあったのに、読み違えた・無視した・資料に無いことを足したプロンプト・モデル・渡し方(第8章)

「答えが正しいか」だけを見ていると、この2つを区別できません。そこで、評価も検索の評価と生成の評価に分けます。

たとえるなら、料理がまずかったとき、「材料が悪かった」のか「料理人の腕が悪かった」のかを分けて考えるようなものです。材料が悪いのに料理人を替えても、おいしくはなりません。

図の上の2本の線が、それぞれの評価が見る範囲です。検索の評価は「正しい資料を集めたか」、生成の評価は「集めた資料どおりに答えたか」を見ます。

  • RAG のすべて 12 ― 評価
  • 2 / 15
  • 検索の評価と生成の評価を分ける
  • 検索の評価:正しい資料を集めたか
  • 生成の評価:資料どおりに答えたか
  • 集めた資料
  • 有給休暇の日数表
  • 質問
  • 検索
  • 休暇規程 第3条
  • LLM
  • 答え
  • 慶弔休暇について
  • 資料庫
  • 答えが外れたとき「資料が集まらなかった」のか「資料はあったのに読み違えた」のか
  • 原因が違えば、直す場所も違う(検索なら第4〜7章、生成なら第8章)
  • 答えだけ見ても、悪いのが検索か生成かは分からない。分けて測る。

テストセット:質問・正解・正解の資料の組

測るためには、まずテストセット(評価用の問題集)を用意します。1問ごとに、次の3つを組にします。

列例何に使うか
質問有給は何日もらえる?RAG に入力する
正解の答え勤続に応じて最大20日生成の採点に使う
正解の資料有給休暇の日数表(チャンクの ID=切った資料の1片ごとに振った番号)検索の採点に使う

正解の資料があれば、検索が集めた資料の中にそれが入っているかで、検索を採点できます。正解の答えがあれば、RAG の答えと比べて、生成を採点できます。

最初から何百問も要りません。数十問でも、あるとないとでは大違いです。大事なのは、毎回同じ問題で測ることです。問題を毎回変えると、数字が上がったのが改善のおかげなのか、問題が易しくなったからなのか、区別できません。

表は、スプレッドシートや JSON(プログラムが読みやすい決まった書式)の1ファイルで十分です。コードで書くなら、1問の形は次のとおりです。question が質問、goldAnswer が正解の答え、goldChunkIds が正解の資料の番号の一覧です(gold は「正解」の意味でよく使われる言葉です)。

ts
type TestCase = {
  question: string;
  goldAnswer: string;
  goldChunkIds: string[]; // 答えが載っているチャンク
};
  • RAG のすべて 12 ― 評価
  • 3 / 15
  • テストセット:質問・正解・正解の資料の組
  • 質問
  • 正解の答え
  • 正解の資料
  • 「有給は何日もらえる?」
  • 「勤続に応じて最大20日」
  • 有給休暇の日数表
  • → 生成を採点できる
  • → 検索を採点できる
  • 1問ずつ、この3つを組にして表にしておく。最初は数十問でもよい
  • 「毎回同じ問題で測る」ことが大事。問題が変わると、良くなったのか比べられない
  • 正解の資料があれば検索を、正解の答えがあれば生成を採点できる。

質問をどこから集めるか

テストセットの質問は、どこから持ってくればよいでしょうか。大きく3つあります。

集め方良い点危うい点
実際の質問ログ利用者の本当の聞き方が入る正解は人が付ける必要がある。個人情報に注意(第13章)
担当者に書いてもらう正解が確か資料の言葉どおりの素直な問いになりがち
LLM で合成する速く、大量に作れる資料の言い回しをなぞった易しい問いになりがち

LLM による合成は便利です。チャンクを1つ見せて「この資料で答えられる質問と、その答えを作って」と頼めば、正解の資料付きの問題がいくらでも作れます。

ただし、落とし穴があります。資料を見ながら作った質問は、資料と同じ言葉を使いがちです。「年次有給休暇の付与日数は?」のように。本物の利用者は「有休って何日あるんだっけ」と聞きます。同じ言葉を使った質問は検索が当てやすいので、点数が実力より高く出ます。また、複数の資料をまたぐ質問や、資料に答えが無い質問も、放っておくと作られません。

おすすめは、本物のログを中心にし、足りない種類を合成で補い、合成した問題も人が目を通すことです。「資料に答えが無い質問」も意図的に混ぜておくと、「見つからないと正直に言えるか」(第13章)も測れます。

  • RAG のすべて 12 ― 評価
  • 4 / 15
  • 質問をどこから集めるか
  • 実際の質問ログ
  • 利用者の本当の聞き方・誤字・略語が入る。正解は人が付ける
  • 本物の言い方
  • 担当者に書いてもらう
  • 正解が確か。ただし資料の言葉どおりの素直な問いになりがち
  • 資料をよく知る人
  • LLM で合成する
  • 速く大量に作れる。資料をなぞった易しい問いになりがち
  • 資料から質問を作らせる
  • 本物のログが一番。合成は量を補う道具で、答え合わせは人がする。

recall@k:正解が上位 k 件に入ったか

検索の評価の基本は recall@k(リコール・アット・ケー)です。recall は「再現率」と訳され、ここでは「必要なものをどれだけ取りこぼさずに拾えたか」の意味です。

検索は、資料を「関係ありそうな順」に並べて返します。LLM に渡すのは、そのうち上位 k 件だけです(k は 3〜10 くらいがよく使われます)。recall@k は、「正解の資料のうち、上位 k 件に入った割合」です。

図の例では、正解の資料は2つ(2位と5位)です。k=3 なら、上位3件に入った正解は2位の1つだけ。recall@3 は 1/2 です。

なぜこれが大事なのでしょうか。上位 k 件に入らなかった資料は、LLM から見えません。どれだけ賢い LLM でも、見ていない資料に基づいて答えることはできません。recall@k が低いなら、生成をいくら直しても無駄です。

テストセットの全問で recall@k を計算し、平均を取れば、検索の実力が1つの数字になります。たとえば3問で 1、1/2、0 なら、平均は 1/2 です。

下のコードは、1行目で検索結果の上位 k 件を取り出し、2行目で「正解の資料のうち、その中に入っているものの数 ÷ 正解の資料の数」を返しています。

ts
function recallAtK(results: string[], gold: string[], k: number) {
  const top = new Set(results.slice(0, k));
  return gold.filter((id) => top.has(id)).length / gold.length;
}
  • RAG のすべて 12 ― 評価
  • 5 / 15
  • recall@k:正解が上位 k 件に入ったか
  • 1位
  • 福利厚生の概要
  • recall@3 = 1 / 2
  • 2位
  • 有給休暇の日数表(正解)
  • 正解の資料2つのうち、 上位3件に入ったのは1つ
  • 3位
  • 慶弔休暇について
  • k=3
  • 4位
  • 勤怠システムの使い方
  • 質問:「有給は何日?」
  • 5位
  • 休暇規程 第3条(正解)
  • LLM に渡すのは上位 k 件だけ。その中に正解が入っていなければ答えようがない。

k を増やせば拾える。でも余計な資料も増える

では k を大きくすればよいのでしょうか。図で k=5 にすると、5位の正解も入り、recall@5 は 2/2 になりました。

ところが、渡した5件のうち、関係あるのは2件だけです。この「渡した資料のうち、関係あるものの割合」を precision@k(プレシジョン。「適合率」と訳される)と呼びます。ここでは 2/5 です。

物差し意味たとえ
recall必要なものを取りこぼしていないか網の目を細かくして、魚を逃さない
precision余計なものが混ざっていないかゴミが網に入らない

この2つは綱引きの関係です。k を増やすと recall は上がりやすいけれど、precision は下がりやすい。余計な資料が増えると、LLM の読む量(お金と時間)が増え、関係ない資料に引っ張られて答えがぶれることもあります(第8章)。

実務では「recall を十分に高くした上で、リランキング(第7章)で上位を良いものにする」という組み合わせがよく取られます。まず広く拾い、次に絞るのです。

  • RAG のすべて 12 ― 評価
  • 6 / 15
  • k を増やせば拾える。でも余計な資料も増える
  • 1位
  • 福利厚生の概要
  • recall@5 = 2 / 2
  • 2位
  • 有給休暇の日数表(正解)
  • precision@5 = 2 / 5 渡した5件のうち3件は関係ない
  • 3位
  • 慶弔休暇について
  • 4位
  • 勤怠システムの使い方
  • 質問:「有給は何日?」
  • 5位
  • 休暇規程 第3条(正解)
  • k=5
  • recall(取りこぼさない)と precision(混ぜない)は綱引きになる。

順位も見る:MRR と nDCG

recall@k は「入ったかどうか」しか見ません。でも、正解が 1位にあるのか、5位にあるのかでも違いがあります。上のほうにあるほうが、LLM は見つけやすく、k を小さくしても入ります。

そこで、順位も点数に入れる物差しがあります。

物差し考え方図の例
MRR(平均逆順位)最初の正解が何位か。1位なら1、2位なら1/2、3位なら1/3。全問で平均最初の正解が2位なので 1/2
nDCG正解ごとに点を付け、下の順位ほど割り引いて合計。理想の並びで割って 0〜1 にする2位と5位の正解。5位のほうは大きく割り引かれる

言葉で計算してみます。MRR(Mean Reciprocal Rank。逆順位=「1÷順位」の平均)は、3問で最初の正解がそれぞれ1位・2位・4位なら、1、1/2、1/4 の平均で約 0.58 です。nDCG(正規化した割引累積利得)は、図の例なら、2位の正解を約0.63点、5位の正解を約0.39点と、下にあるほど割り引いて足し(約1.02)、正解2つが1位・2位に並んだ理想の場合の点(約1.63)で割って、約0.62 になります。

MRR は「1つ正解が見つかれば十分」な質問に向いています。nDCG は、「とても関係ある/少し関係ある」のように段階で採点したい場合や、複数の正解がある場合に向いています。

数式を覚える必要はありません。「上位に正解があるほど点が高い」とだけ押さえておけば十分です。計算は評価用のライブラリが行ってくれます。

  • RAG のすべて 12 ― 評価
  • 7 / 15
  • 順位も見る:MRR と nDCG
  • 1位
  • 福利厚生の概要
  • MRR:最初の正解が2位 → 1/2
  • 2位
  • 有給休暇の日数表(正解)
  • 1位なら1、2位なら1/2、3位なら1/3。 全問の平均を取る
  • 3位
  • 慶弔休暇について
  • nDCG:上の正解ほど重く数える
  • 4位
  • 勤怠システムの使い方
  • 下の順位の正解は割り引く。 「ちょっと関係ある」も段階で採点できる
  • 5位
  • 休暇規程 第3条(正解)
  • 正解が1位か5位かで、LLM の読みやすさは変わる。順位も点数に入れる。

生成の評価①:答えは資料に基づいているか

次は生成の評価です。いちばん大事なのは、答えが、渡した資料に基づいているかです。これを faithfulness(忠実さ)や groundedness(根拠のあること)と呼びます。

測り方の考え方はこうです。

手順やること
1答えを、1つずつの主張に分ける(「入社半年で10日」「最大20日」「繰り越しは無制限」)
2主張ごとに、渡した資料で裏付けられるかを確かめる
3裏付けられた主張の割合を点数にする(図では 2/3)

「繰り越しは無制限」は、資料のどこにも書かれていません。LLM が一般常識から付け足したか、作ってしまったのでしょう。これがハルシネーション(第0章で見た、もっともらしい作り話)の芽です。

注意したいのは、faithfulness は「資料どおりか」を見る物差しで、「事実として正しいか」ではないことです。資料が古ければ、資料どおりの答えも間違いになります。正しさを見るには、正解の答えと比べる評価(answer correctness などと呼ばれます)を別に行います。

主張への分解や照合は、人がやると大変なので、たいてい LLM にやらせます。その話は少し後で見ます。

  • RAG のすべて 12 ― 評価
  • 8 / 15
  • 生成の評価①:答えは資料に基づいているか
  • 答え:「入社半年で10日、最大20日。 繰り越しは無制限です」
  • 渡した資料:有給休暇の日数表
  • 入社6か月で10日
  • 以後、勤続に応じて加算
  • 入社半年で10日
  • 上限は20日
  • 最大20日
  • 繰り越しは無制限(資料に無い)
  • 忠実さ(faithfulness)= 2 / 3
  • 資料に無い主張が1つ混ざった。これがハルシネーションの芽
  • 主張への分解と照合は、たいてい LLM にやらせる(あとで見る LLM-as-a-judge)
  • 答えを主張に分け、資料で裏付けられる主張の割合を見る(忠実さ)。

4つの物差し(RAGAS などの評価ツール)

RAG の評価用には、オープンソースの道具がいくつもあります。よく知られたものの1つが RAGAS で、2023年に論文とともに公開されました。RAGAS で有名になった物差しを4つ紹介します(版によって名前や計算方法が変わることがあります)。

物差し見る側意味
context precision検索集めた資料のうち、役に立つものが上位にあるか。余計なものが少ないか
context recall検索正解の答えに必要な情報が、集めた資料に揃っているか
faithfulness生成答えの主張が、集めた資料で裏付けられているか
answer relevancy生成答えが質問にちゃんと答えているか(はぐらかしていないか)

answer relevancy は、faithfulness とは別物です。「休暇規程は全部で12条あります」という答えは、資料どおりで faithfulness は満点かもしれません。でも「有給は何日?」への答えにはなっていません。

4つを並べると、「どこが崩れたか」を場所で言えるようになります。たとえば faithfulness は高いのに context recall が低いなら、「LLM は資料に忠実だが、そもそも資料が足りていない」。直すべきは検索です。

同じような物差しは、他の評価ツールや、各社のクラウドの評価機能にも用意されています。名前が少しずつ違うので、何を測っているかの定義を必ず読んでから使いましょう。

  • RAG のすべて 12 ― 評価
  • 9 / 15
  • 4つの物差し(RAGAS などの評価ツール)
  • context precision
  • context recall
  • 集めた資料に余計なものが少ないか
  • 答えに要る情報が資料に揃っているか
  • faithfulness
  • answer relevancy
  • 答えが資料に裏付けられているか
  • 答えが質問に答えているか
  • 上の段は「検索(集めた資料)」、下の段は「生成(答え)」の物差し
  • 例:faithfulness は高いのに context recall が低い → 資料が足りず、答えが薄い
  • 資料の側を2つ、答えの側を2つ。どこが崩れたかを場所で言える。

LLM に採点させる(LLM-as-a-judge)

faithfulness や answer relevancy を、何百問ぶん人が採点するのは大変です。そこで、別の LLM に採点させる方法が広く使われています。これを LLM-as-a-judge(審査員としての LLM)と呼びます。

やり方は単純です。審査員役の LLM に、質問・資料・答えを見せ、採点の基準と出力の形を指示します。

あなたは採点者です。次の基準で、答えを1〜5で採点してください。
・資料に書かれていない内容を含むなら減点する
・質問に答えていなければ減点する
出力は JSON で {"score": 数字, "reason": "理由を1文で"} とする。

質問:…
資料:…
答え:…

上の指示は、採点の基準を2つ示し、点数(score)と理由(reason)を JSON という決まった書式で返させています。書式を決めておくと、プログラムで点数を集計できます。

理由も一緒に書かせるのがコツです。点数だけだと、なぜ低いのか分かりません。理由があれば、人が読んで「審査員の判断がおかしい」ことにも気づけます。

LLM-as-a-judge がよく使われるようになったのは、2023年の研究で、強い LLM の判定が人の好みとかなりよく一致することが示されたのがきっかけの1つです。ただし、同じ研究でくせも指摘されました。次のページで見ます。

  • RAG のすべて 12 ― 評価
  • 10 / 15
  • LLM に採点させる(LLM-as-a-judge)
  • 質問+資料+答え
  • 審査員の LLM
  • 4 / 5 + 理由
  • 基準:資料に書かれていない内容を含むなら減点。質問に答えていなければ減点。
  • 出力:1〜5の点数と、その理由を1文で。
  • 人が全部読むのは無理。採点の基準を書いて、別の LLM に採点させる。

審査員の LLM にもくせがある

LLM-as-a-judge には、よく知られたくせ(バイアス)があります。2023年の研究(MT-Bench という LLM 向けの問題集と、人が2つの答えを見比べて投票する Chatbot Arena というサイトを扱った論文)で整理されたものを中心に紹介します。

くせ内容打ち消し方
位置のくせ2つの答えを比べると、先に(または後に)見せたほうをひいきする順番を入れ替えて2回採点し、食い違えば引き分けにする
長さのくせ長くて丁寧そうな答えをひいきする「長さは評価しない」と基準に書く。基準を具体的にする
自分びいき自分(や同じ系統のモデル)が書いたような文をひいきする答えを作ったモデルと別の系統のモデルで採点する

さらに、審査員はあいまいな基準ほどぶれます。「良い答えか」ではなく、「資料に無い主張を含むか(はい/いいえ)」のように、具体的で、答えが決まりやすい問いに分けて聞くほど安定します。

そして最後は人です。テストセットの一部(数十問)を人が採点し、審査員の点とどれだけ一致するかを確かめます。一致が低いうちは、審査員の点で判断してはいけません。基準の書き方を直すか、別のモデルを試します。審査員そのものも、評価の対象なのです。

  • RAG のすべて 12 ― 評価
  • 11 / 15
  • 審査員の LLM にもくせがある
  • よく知られたくせ
  • 打ち消し方
  • 先に見せた答えをひいきする
  • 順番を入れ替えて2回採点
  • 長い答えをひいきする
  • 基準を具体的に書く
  • 自分に似た文をひいきする
  • 答えと別の系統のモデルで採点
  • 最後は人:数十問を人が採点し、審査員の点とどれだけ一致するかを見る
  • 一致が低いうちは、審査員の点を信じて判断しない
  • くせを知って打ち消し、ときどき人の採点と突き合わせて確かめる。

何かを変えたら、同じテストで測り直す

評価の本当の出番は、何かを変えるときです。チャンクの大きさを変える、埋め込みモデルを替える、プロンプトを書き直す、LLM を新しい版にする。そのたびに、同じテストセットで測り直して、前後の数字を並べます。

図の例(数字は説明用)では、チャンクを大きくしたら、recall@5 は上がりました。答えの載った部分がチャンクに含まれやすくなったからです。ところが faithfulness は下がり、時間も延びました。長い資料の中で、LLM が関係ない部分に引っ張られたのかもしれません。

1つの数字だけを見ていたら、「検索が良くなったから採用」と決めていたでしょう。複数の物差しを並べて見ることで、改善と引き換えに何かを失っていないか分かります。

これをソフトウェアの回帰テスト(直したせいで、前は動いていたものが壊れていないかを確かめるテスト)のように、CI(プログラムを変えるたびに自動でテストを走らせる仕組み)に組み込んでおくと安心です。

下のコードは、テストセットを読み込み、1問ずつ検索して recall@5 を足し合わせ、問題数で割って平均を出します。平均が 0.8 を下回ったらエラーにして、変更を止めます(0.8 は例です)。

ts
const cases: TestCase[] = loadTestSet("eval/questions.json");
let hit = 0;
for (const c of cases) {
  const results = await search(c.question, { k: 5 });
  hit += recallAtK(results.map((r) => r.chunkId), c.goldChunkIds, 5);
}
const recall = hit / cases.length;
if (recall < 0.8) throw new Error(`recall@5 が下がった: ${recall}`);

LLM の答えは毎回少し変わることがあるので、生成の評価は何回か回して平均を見るか、変化の小さい設定で測ります。

  • RAG のすべて 12 ― 評価
  • 12 / 15
  • 何かを変えたら、同じテストで測り直す
  • 例:チャンクを 500字 → 1000字 にした(数字は説明用)
  • 物差し
  • 変更前 → 変更後
  • recall@5(検索)
  • 0.78 → 0.86 上がった
  • faithfulness(生成)
  • 0.92 → 0.84 下がった
  • 1問あたりの時間
  • 2.1秒 → 2.9秒 遅くなった
  • 検索は良くなったのに、長い資料を読み違える答えが増えた。1つの数字だけでは分からない
  • テストを CI に入れて、変更のたびに自動で走らせると事故に気づける
  • チャンクの大きさ・モデル・プロンプト。変えるたびに前後の数字を並べる。

本番の信号も集める

テストセットは、どうしても「過去に想定した質問」です。本番では、想定しなかった聞き方が必ず来ます。そこで、本番の利用者の反応も信号として集めます。

信号何が分かるか
良い/悪いボタン利用者の満足。ただし押す人は少ない
出典が開かれたか答えを確かめたい人がいる。開いた直後に閉じたなら、的外れの資料だったかもしれない
すぐ言い直したか最初の答えが役に立たなかった可能性が高い
「見つかりません」の割合資料が足りない分野、または検索が弱い分野が見える

注意したいのは、押されなかった=良かった、ではないことです。黙って去った人のほうが多いかもしれません。信号は「ここを見に行くべき」という手がかりで、正解ではありません。

いちばん大事な使い方は、悪い信号が付いた質問を、正解を付けてテストセットに足すことです。こうして、テストセットは本番に合わせて育っていきます。評価は一度作って終わりではなく、回し続ける仕組みです。

本番の質問を保存するときは、個人情報や見せてはいけない内容が混ざります。保存の仕方は第13章で見ます。

  • RAG のすべて 12 ― 評価
  • 13 / 15
  • 本番の信号も集める
  • 集めた資料
  • 答え+出典
  • 有給休暇の日数表
  • 質問
  • 検索
  • 休暇規程 第3条
  • LLM
  • 答え
  • 慶弔休暇について
  • 良い/悪いボタン
  • 出典が開かれたか
  • すぐ言い直したか
  • 「無い」の割合
  • 悪い評価や言い直しが付いた質問は、正解を付けてテストセットに足す
  • ボタンを押す人は少ない。押されなかった=良かった、とは限らない
  • テストセットは過去の質問。本番の反応が、次に足すべき問題を教えてくれる。

よくある落とし穴

評価まわりで、よく見かける失敗を並べます。

落とし穴なぜまずいかどうするか
目で見て「良くなった気がする」数問の印象は、全体の傾向と違うことが多い小さくてもテストセットを先に作る
合成した易しい問題だけで測る資料と同じ言葉の質問は当たりやすく、点が高く出る本物のログを中心にする
審査員の点をそのまま信じるくせがあり、基準があいまいだとぶれる人の採点と突き合わせる
平均点だけを見る大きく外れた少数の質問に、大事な問題が隠れている点の低い問題を実際に読む
資料を更新したのに正解を直さない古い正解で採点し、正しい答えを減点してしまうテストセットにも版を付けて管理する

他の章とのつながりも確かめておきます。検索の物差し(recall・MRR)が低いなら、第3章(チャンク分割)から第7章(リランキング)、第9章(質問を直す)を見直します。生成の物差し(faithfulness)が低いなら、第8章(プロンプトと生成)です。第14章では、評価そのものがなぜ難しいのかも改めて考えます。

  • RAG のすべて 12 ― 評価
  • 14 / 15
  • よくある落とし穴
  • テストセットを作らず、目で見て「良くなった気がする」で進める
  • 合成した易しい問題だけで高得点を出して安心する
  • 審査員の LLM の点を、人と突き合わせずに信じる
  • 平均点だけ見て、大きく外れた質問を読まない
  • 資料が更新されたのに、正解の答えを直していない
  • 測れない改善は改善ではない。まず小さなテストセットを作ってから直す。

まとめ:分けて・同じ問題で・何度も測る

この章で見たことをまとめます。

項目内容
なぜ測るかデモの数問では本番の実力は分からない。測れないと改善が効いたか言えない
分け方検索の評価(正しい資料を集めたか)と生成の評価(資料どおりに答えたか)
テストセット質問・正解の答え・正解の資料の組。本物のログ中心、合成は補助
検索の物差しrecall@k・precision@k・MRR・nDCG
生成の物差しfaithfulness(忠実さ)・answer relevancy(質問に答えているか)
採点LLM-as-a-judge。くせを打ち消し、人の採点と突き合わせる
回し方変更のたびに同じテストで測り直す。本番の信号から問題を足す

評価は地味ですが、ここが無いと、この本で見てきたどの工夫も「効いたのか分からない」ままになります。

次の第13章では、作った RAG を本番で動かし続けるための話、つまり資料の鮮度、権限、攻撃への備え、速さとお金を見ていきます。

  • RAG のすべて 12 ― 評価
  • 15 / 15
  • まとめ:分けて・同じ問題で・何度も測る
  • テストセット
  • 質問・正解の答え・正解の資料の組。本物のログから
  • 検索の評価
  • recall@k・precision・MRR・nDCG
  • 生成の評価
  • faithfulness・answer relevancy
  • 採点する人
  • LLM-as-a-judge + 人の確認
  • 回すこと
  • 変更のたびに測り直す。本番の信号で問題を足す
  • 評価ができて初めて、他の章の工夫が「効いたか」を言える。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]