ガイド
スライス
全体の割合が安定しているあいだに、スイートの一部が崩れていることがあります。スライスとは、スイートのうち宣言された一部分を単独で測定するものであり、それによってその崩れが見えるようになります。スライスには 2 つの規律が伴います。スイートの多くの部分を眺めることこそ、評価がノイズを見つけてそれを発見と呼んでしまう経路だからです。
スライスの宣言
スライスは oloproof.yaml で指定します。一般的な種類は、各ケースの metadata からキーを読みます。
slices: [metadata.lang, metadata.topic]
min_slice_support: 30{"id": "c000", "input": {"lang": "en", "topic": "billing", "hard": false, "n": 0}, "expected": {"label": "yes"}, "metadata": {"lang": "en", "topic": "billing"}}ファイルが受け付けるスライスの種類は次のとおりです。
| スライス | ケースをグループ化する基準 | 必要なもの |
|---|---|---|
| metadata.<key> | ケースの metadata におけるそのキーの値 | ケースにそのキーがあること |
| relevant_position | 最初の関連パッセージが取得された位置: top_k、beyond_top_k、not_retrieved | RAG システムと expected.relevant |
| context_truncated | トークン予算によってコンテキストからパッセージが落とされたかどうか | token_budget を持つ RAG システム |
| first_tool | エージェントが最初に呼び出したツール | agent_trajectory/v1 レコード |
| repeated_action | エージェントが同一の呼び出しを繰り返したかどうか | agent_trajectory/v1 レコード |
| route | 制御を持ったエージェント。triage>billing のように書きます | ステップがエージェントを名指しする agent_trajectory/v1 レコード |
| trajectory_length:4,8 | ステップ数。宣言した境界で区切ります | agent_trajectory/v1 レコード |
| confidence:0.5 | モデルがその行に付けたスコア。宣言した境界で帯に分けます | predictive: ブロック |
ファイルが認識しない名前は、何かを実行する前に拒否されます。
Configuration error: unknown slice 'lang'; declare metadata.<key>, relevant_position, context_truncated, first_tool, repeated_action, route, trajectory_length:<bounds> or confidence:<bounds>スライスは報告するだけで、ゲートにはならない
実行は、スライスを独自の見出しの下に表示します。英語を修正してフランス語を壊した候補の例です。
│ metadata.lang=de │ ok │ 100.0% │ [95.4%, 100.0%] │ 80 / 80 observed · 0 missing · 0 excluded · exploratory · support 80 │
│ metadata.lang=en │ ok │ 100.0% │ [95.4%, 100.0%] │ 80 / 80 observed · 0 missing · 0 excluded · exploratory · support 80 │
│ metadata.lang=fr │ ok │ 32.5% │ [22.4%, 43.9%] │ 26 / 80 observed · 0 missing · 0 excluded · exploratory · support 80 │
│ metadata.topic=account │ ok │ 88.3% │ [81.2%, 93.5%] │ 106 / 120 observed · 0 missing · 0 excluded · exploratory · support 120 │
│ metadata.topic=billing │ ok │ 66.7% │ [57.4%, 75.1%] │ 80 / 120 observed · 0 missing · 0 excluded · exploratory · support 120 │表のタイトルは Slices (exploratory; never gated) であり、文字どおりの意味です。この実行の全体の割合は 77.5% で、ゲートはリリースを許可しました。フランス語はその 3 分の 1 程度だったにもかかわらずです。実行に対するリリースルールは全体のメトリクスを指定するものであり、単一の実行のスライスに範囲を限定したルールは拒否されます。
Configuration error: release rule 'fr-floor' targets slice/metadata.lang=fr; a run's slice results are exploratory, and only a comparison rule gates a slice, inside a family with a correctionこれが 1 つ目の規律です。10 通りに切り分けたスイートには、偶然によって差が現れる機会が 10 回あり、スライスを読むゲートはノイズによってリリースをブロックしてしまいます。スライスは、どこを見るべきかを見つけるためのものです。
どのスライスが際立っているか
実行は、スライスを実行自身の割合と比べて順位付けし、異なるものに印を付けます。Benjamini-Yekutieli 法を使うため、スライスがどのように重なっていても、誤った印の割合は制御されたままです。ターミナルのスライス表では、各スライスが BY mark 列に marked、not marked、あるいは検定するには薄すぎるスライスでは空欄として、順位付けに使われた p 値とともに示されます。これらは実行にも保存され、そのバンドルの run.json にエクスポートされます。
jq -c '.run.slice_metrics[] | {scope, estimate, fdr_marked, fdr_p_value}' .oloproof/bundles/RUN_ID/run.json{"scope":"slice/metadata.lang=de","estimate":1.0,"fdr_marked":true,"fdr_p_value":0.0001}
{"scope":"slice/metadata.lang=en","estimate":1.0,"fdr_marked":true,"fdr_p_value":0.0001}
{"scope":"slice/metadata.lang=fr","estimate":0.325,"fdr_marked":true,"fdr_p_value":0.0001}
{"scope":"slice/metadata.topic=account","estimate":0.8833333333333333,"fdr_marked":true,"fdr_p_value":0.0037003540039062493}
{"scope":"slice/metadata.topic=billing","estimate":0.6666666666666666,"fdr_marked":true,"fdr_p_value":0.008582189941406249}印の付いていないスライスは、実行と一致することが示されたわけではなく、単にフラグが立てられていないだけです。印は注意を向けさせるものであり、どのゲートにも届きません。
サポート
min_slice_support は、スライスが区間を得るために必要な最小のケース数です。それを下回ると、推定値は表示され、区間は出されません。これを 4 に設定したプロジェクトの例です。
│ metadata.topic=account │ answer_correct │ 100.0% │ │ 1 / 1 observed · 0 missing · 0 excluded · exploratory · support 1 │
│ │ │ │ │ < 4, no interval │デフォルトは 30 です。これを下げた小さなスイートは薄いスライスにも区間を得ますが、それらの区間は、それ自体がそのことを物語るほど広くなります。
比較の中でスライスをゲートにする
スライスがどうしても後退してはならない場合、比較ルールの範囲をそのスライスに限定できます。範囲はスライスの名前に slice/ を前置したものであり、ルールは、エビデンスを読む前に必要なサポートを宣言します。
version: 1
rules:
- {id: overall, metric: ok, kind: non_inferiority, margin: 0.05}
- {id: fr-not-worse, metric: ok, kind: non_inferiority, margin: 0.05, scope: slice/metadata.lang=fr, min_support: 30}
- {id: en-not-worse, metric: ok, kind: non_inferiority, margin: 0.05, scope: slice/metadata.lang=en, min_support: 30}
- {id: de-not-worse, metric: ok, kind: non_inferiority, margin: 0.05, scope: slice/metadata.lang=de, min_support: 30}
families:
- {id: languages, correction: holm, rules: [fr-not-worse, en-not-worse, de-not-worse]}前置なしで書くと、その範囲は拒否されます。
Configuration error: rule 'fr-not-worse' has unknown scope 'metadata.lang=fr'; a comparison rule decides on the global scope or on slice/<name>=<value>前置を付けて、上の候補をそのベースラインと比較した結果です。
oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yamlComparison sha256:cd2693b505e645919d397e8d7a87eaf0a841ab0c11c0b95484912363381b72e0 of run_01M3C46CYA163JSMSA5QZ6KAZA against run_01M3C46B3PSNP1ZTC8X05AG0GE · 240 paired cases
ok: -5.0 points [-15.2, +4.9] · 240 paired · 0 missing · 0 excluded
ok [slice/metadata.lang=de]: +8.8 points [-0.5, +21.5] · 80 paired · 0 missing · 0 excluded · exploratory · support 80
ok [slice/metadata.lang=en]: +18.8 points [+7.0, +34.4] · 80 paired · 0 missing · 0 excluded · exploratory · support 80
ok [slice/metadata.lang=fr]: -42.5 points [-60.3, -26.8] · 80 paired · 0 missing · 0 excluded · exploratory · support 80
ok [slice/metadata.topic=account]: +7.5 points [+0.9, +17.1] · 120 paired · 0 missing · 0 excluded · exploratory · support 120
ok [slice/metadata.topic=billing]: -17.5 points [-35.0, -0.1] · 120 paired · 0 missing · 0 excluded · exploratory · support 120
Decisions
overall ok non-inferiority, margin 5.0 points INSUFFICIENT_EVIDENCE interval_overlaps_margin
no sample size would make this PASS: the difference itself (-5.0 points) is outside the margin, so more cases would move it toward FAIL
fr-not-worse ok non-inferiority, margin 5.0 points FAIL upper_bound_below_margin
en-not-worse ok non-inferiority, margin 5.0 points PASS lower_bound_above_margin
de-not-worse ok non-inferiority, margin 5.0 points PASS lower_bound_above_margin
Family languages: Holm over 3 rules; adjusted levels 0.01667
Gate: BLOCK (exit 1)これが 2 つ目の規律です。スライスに範囲を限定したルールは families: のエントリの中でのみゲートになります。このエントリには、誤った失敗をまとめて制御するルールを列挙します。holm は補正法です。ファミリー内で失敗したルールは、ファミリーが持つルールの数に応じて決まる、より厳しい水準で再検定されます。そのため偶然に失敗する機会が 3 回あっても、リスクが 3 倍に積み上がることはありません。信頼水準 0.95、ルール 3 つの場合、最も強い失敗は 0.05 / 3、次は 0.05 / 2、最後は 0.05 で再検定されます。再検定されるのは失敗だけです。合格は棄却ではないので、補正は必要ありません。ここでは 1 つのルールが失敗し、0.01667 で再検定され、フランス語はやはり失敗します。全体のルールは判定できず、その下の助言は、ケースを増やしても FAIL の方向に動くだけだと述べています。
どのファミリーにも属さないスライスのルールは拒否されます。
Configuration error: slice rule 'fr-not-worse' belongs to no family; slice rules multiply the chances of a false FAIL, so they gate only inside a family with a correction次に読むページ
- 比較ルール では、範囲を設定できるルールの種類を説明しています。
- RAG の評価、エージェントとツール、分類器と回帰器 では、metadata 以外のスライスを使います。