Scorery deterministyczne
Accuracy, exact match i F1 — kiedy wystarczą
Aktualizacja: 11 października 2026
Exact match — najostrzejsza miara
Exact match (EM) przyznaje 1 wyłącznie za pełną zgodność wyjścia z referencją po ustalonej normalizacji:
Normalizacja to najważniejsza decyzja: usuwanie nadmiarowych spacji, ujednolicenie wielkości liter, kanonizacja liczb („2025" vs „2 025"). Dwie ekipy z różną normalizacją dostaną różne wyniki na tych samych odpowiedziach — zawsze dokumentuj normalizację.
Accuracy — średnia EM po zbiorze
Dla zbioru próbek accuracy to średnia wskaźników poprawności:
W zadaniach wielokrotnego wyboru accuracy to po prostu odsetek poprawnych odpowiedzi — scorer opisany na karcie Accuracy (wielokrotny wybór). Pamiętaj o poziomie przypadku: przy 4 opcjach losowy model ma około 25% accuracy, więc 30% to sygnał, nie sukces.
F1 — gdy granice odpowiedzi są miękkie
Gdy odpowiedź to zbiór tokenów lub etykiet (ekstrakcja encji, zbiór kroków), wymaganie pełnej zgodności bywa zbyt surowe. F1 łączy harmonicznie precyzję i recall:
def f1(tp: int, fp: int, fn: int) -> float:
p = tp / (tp + fp) if tp + fp else 0.0
r = tp / (tp + fn) if tp + fn else 0.0
return 2 * p * r / (p + r) if p + r else 0.0
# Przykład: 3 trafione tokeny, 1 nadmiarowy, 1 pominięty
print(f1(tp=3, fp=1, fn=1)) # 0.75Przy wielu klasach używa się agregatów: micro (sumuj TP/FP/FN po klasach, potem wzór) lub macro (średnia F1 z klas — każda klasa waży tyle samo). Szczegóły i pułapki tokenizacji na karcie F1.
Kiedy wystarczą
EM i accuracy wystarczą, gdy poprawna odpowiedź ma jedną kanoniczną formę: MCQ, klasyfikacja, ekstrakcja pojedynczego faktu. F1 wybieraj, gdy liczy się częściowa zgodność zbiorów. Gdy liczy się znaczenie, a nie forma — przejdź do BERTScore lub LLM-as-judge: direct scoring.