Skip to content

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:

WycinekGrupuje przypadki wedługWymaga
metadata.<key>wartości tego klucza w metadata przypadkuklucza w przypadkach
relevant_positionmiejsca, w którym pobrano pierwszy istotny fragment: top_k, beyond_top_k lub not_retrievedsystemu RAG i expected.relevant
context_truncatedtego, czy budżet tokenów usunął fragmenty z kontekstusystemu RAG z token_budget
first_toolnarzędzia, które agent wywołał jako pierwszerekordu agent_trajectory/v1
repeated_actiontego, czy agent powtórzył identyczne wywołanierekordu agent_trajectory/v1
routeagentów, którzy przejmowali kontrolę, zapisanych jako triage>billingrekordu agent_trajectory/v1, którego kroki podają swoich agentów
trajectory_length:4,8liczby kroków, pogrupowanej według zadeklarowanych granicrekordu agent_trajectory/v1
confidence:0.5wyniku, jaki model przypisał wierszowi, podzielonego według zadeklarowanych granicbloku 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 correction

To 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.yaml
Comparison 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 correction

Co dalej

Klasyfikatory i regresory korzystają z wycinków innych niż metadane.