Przewodniki
Wycinki
Globalny odsetek może pozostawać stabilny, podczas gdy jedna część zestawu się załamuje. Wycinek to zadeklarowana część zestawu, mierzona osobno, dzięki czemu załamanie jest widoczne. Wycinkom towarzyszą dwie zasady dyscypliny, ponieważ przeglądanie wielu części zestawu to sposób, w jaki ewaluacja znajduje szum i nazywa go odkryciem.
Deklarowanie wycinków
Wycinek nazywa się w oloproof.yaml. Najczęstszy rodzaj odczytuje klucz z metadata każdego przypadku:
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"}}Wszystkie rodzaje wycinków akceptowane przez plik:
| Wycinek | Grupuje przypadki według | Wymaga |
|---|---|---|
| metadata.<key> | wartości tego klucza w metadata przypadku | klucza w przypadkach |
| relevant_position | miejsca, w którym pobrano pierwszy istotny fragment: top_k, beyond_top_k lub not_retrieved | systemu RAG i expected.relevant |
| context_truncated | tego, czy budżet tokenów usunął fragmenty z kontekstu | systemu RAG z token_budget |
| first_tool | narzędzia, które agent wywołał jako pierwsze | rekordu agent_trajectory/v1 |
| repeated_action | tego, czy agent powtórzył identyczne wywołanie | rekordu agent_trajectory/v1 |
| route | agentów, którzy przejmowali kontrolę, zapisanych jako triage>billing | rekordu agent_trajectory/v1, którego kroki podają swoich agentów |
| trajectory_length:4,8 | liczby kroków, pogrupowanej według zadeklarowanych granic | rekordu agent_trajectory/v1 |
| confidence:0.5 | wyniku, jaki model przypisał wierszowi, podzielonego według zadeklarowanych granic | bloku predictive: |
Nazwa, której plik nie rozpoznaje, jest odrzucana, zanim cokolwiek zostanie uruchomione:
Configuration error: unknown slice 'lang'; declare metadata.<key>, relevant_position, context_truncated, first_tool, repeated_action, route, trajectory_length:<bounds> or confidence:<bounds>Wycinki raportują i nigdy nie blokują
Uruchomienie wypisuje swoje wycinki pod osobnym nagłówkiem. Kandydat, który naprawił angielski i zepsuł francuski:
│ 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 │Tytuł tabeli brzmi Slices (exploratory; never gated) i jest to dosłowne. Globalny odsetek tego uruchomienia wynosił 77.5%, a jego bramka dopuściła wydanie, przy francuskim na poziomie jednej trzeciej tej wartości. Reguła wydania dla uruchomienia wskazuje metrykę globalną, a reguła ograniczona do wycinka pojedynczego uruchomienia jest odrzucana:
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 correctionTo pierwsza zasada. Zestaw podzielony na dziesięć sposobów ma dziesięć okazji, by przypadkiem wykazać różnicę, a bramka odczytująca wycinki blokowałaby wydania z powodu szumu. Wycinki służą do ustalenia, gdzie szukać.
Które wycinki się wyróżniają
Uruchomienie porządkuje też swoje wycinki względem własnego odsetka i oznacza te, które się różnią, stosując procedurę Benjaminiego-Yekutieliego, tak aby udział fałszywych oznaczeń pozostał kontrolowany niezależnie od tego, jak wycinki się pokrywają. Tabela wycinków w terminalu pokazuje każdy z nich w kolumnie BY mark — marked, not marked lub puste pole dla wycinka zbyt małego do testowania — wraz z wartością p, według której został uszeregowany. Są one też zapisywane w uruchomieniu i eksportowane w run.json jego pakietu:
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}Nieoznaczony wycinek nie jest wykazany jako zgodny z uruchomieniem; po prostu nie został oflagowany. Oznaczenie kieruje uwagę i nie dociera do żadnej bramki.
Liczebność
min_slice_support to najmniejsza liczba przypadków, jakiej wycinek potrzebuje, by otrzymać przedział. Poniżej niej oszacowanie jest pokazywane, a przedział wstrzymywany. Z projektu, który ustawił ją na 4:
│ metadata.topic=account │ answer_correct │ 100.0% │ │ 1 / 1 observed · 0 missing · 0 excluded · exploratory · support 1 │
│ │ │ │ │ < 4, no interval │Wartość domyślna to 30. Mały zestaw, który ją obniży, otrzymuje przedziały dla małych wycinków, a te przedziały są na tyle szerokie, że same o tym świadczą.
Blokowanie na podstawie wycinka w porównaniu
Tam, gdzie wycinek naprawdę nie może się pogorszyć, regułę porównania można ograniczyć do niego. Zakresem jest nazwa wycinka poprzedzona slice/, a reguła określa wymaganą liczebność, zanim odczyta jakiekolwiek dowody:
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]}Zakres zapisany bez prefiksu jest odrzucany:
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>Z prefiksem — powyższy kandydat wobec swojego punktu odniesienia:
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)To druga zasada. Reguła ograniczona do wycinka blokuje tylko wewnątrz wpisu families:, który wymienia reguły, których fałszywe porażki są kontrolowane łącznie. holm to korekta: reguła w rodzinie, która nie przechodzi, jest testowana ponownie na surowszym poziomie, dobranym do liczby reguł w rodzinie, tak aby trzy okazje do przypadkowej porażki nie sumowały się do trzykrotnego ryzyka. Przy poziomie ufności 0.95 i trzech regułach najsilniejsza porażka jest testowana ponownie na poziomie 0.05 / 3, następna na 0.05 / 2, a ostatnia na 0.05. Ponownie testowane są tylko porażki: zaliczenie nie jest odrzuceniem i nie wymaga korekty. Tutaj jedna reguła nie przeszła, została ponownie przetestowana na poziomie 0.01667 i francuski nadal nie przechodzi. Reguła globalna nie mogła rozstrzygnąć, a porada pod nią mówi, że więcej przypadków jedynie przesunęłoby ją w stronę FAIL.
Reguła wycinka poza jakąkolwiek rodziną jest odrzucana:
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 correctionCo dalej
- Reguły porównań opisuje rodzaje reguł, którym można nadać zakres.
- Ewaluacja RAG, Agenci i narzędzia oraz
Klasyfikatory i regresory korzystają z wycinków innych niż metadane.