W ostatnim wpisie pokazaliśmy, dlaczego bazujemy na Qwenie i jak mierzymy. W tym pokażemy, dlaczego samo mierzenie to za mało.
Większość publicznych benchmarków jest skażona. MMLU i jego kuzyni pojawiają się w korpusach treningowych modeli na długo przed tym, zanim ktoś je uruchomi. Efekt? Model nie rozwiązuje zadania — przypomina sobie odpowiedź. Wynik wygląda imponująco, a w rzeczywistych warunkach model się sypie.
Dlaczego benchmarki kłamią
Problem nazywa się kontaminacją. Dane evaluacyjne przeciekają do treningu. Czasem jest to jawne — ktoś wrzucił zbiór testowy do korpusu. Czasem subtelne — model widział podobne pytania w innej formie. W obu przypadkach benchmark mierzy zapamiętywanie, nie zdolność.
To największy nierozwiązany problem ewaluacji LLM. I dopóki go nie rozwiążemy, wszystkie porównania modeli są podejrzane.
Probierz: dwie pieczenie na jednym ogniu
W Slayer AI Lab tworzymy dane treningowe od zera. To daje nam coś więcej niż korpus — daje kontrolę. Jeśli wiemy dokładnie, co weszło do treningu, możemy udowodnić, które dane NIGDY nie mogą trafić do ewaluacji.
Robiąc dane, dostajemy czysty eval za darmo. Logiczne.
Pierwsze ostrze: provenance (T1)
Każdy dataset w Probierzu ma etykietę: trening-only albo eval-only. Te dwie grupy nigdy się nie krzyżują. Nie ufamy deklaracji — mierzymy overlap n-gramowy tym samym narzędziem, którego używamy w micro-models.
To nie jest teoria. Wcześniejsza próba test_verification.jsonl vs seed_500 pokazała 90% skażonych itemów, średni overlap 0.84, 60% near-verbatim. Narzędzie złapało realny przeciek zanim ktokolwiek ogłosił benchmark.
Drugie ostrze: ślepa wymiana (T2)
Sam na siebie zawsze przeuczysz swój benchmark. Jeśli znasz test, optymalizujesz pod niego. Dlatego Probierz działa na zasadzie wymiany: jeden team buduje benchmark dla drugiego, drugi dla pierwszego. Nie znasz testu, który dostaniesz — więc nie możesz go ograć.
To ten sam mechanizm co ślepy audyt: niezależny ewaluator = ground truth.
Pułapka: benchmark spala się po ujawnieniu. Dlatego mamy commitment scheme (hash przed reveal), zestawy jednorazowe i rotację. Test jest używany raz, potem trafia do kategorii „znany" i nigdy więcej nie służy jako czysty eval.
Trzecie ostrze: bezlitosne, ale mierzalne (T3)
Za trudne = floor effect — wszyscy mają zero, nie ma sygnału. Za łatwe = sufit — wszyscy mają sto, też nie ma sygnału. Benchmark musi być na granicy.
W Probierzu stosujemy gradient trudności, dyskryminację itemów (IRT-style) i taksonomię awarii. Nie interesuje nas tylko accuracy. Interesuje nas, jak model pęka — szczególnie ciche błędy, które wyglądają na poprawne.
Kontrakt
Żaden benchmark nie wychodzi z Probierza bez trzech rzeczy:
Manifest provenance — udokumentowane źródło i etykieta trening/eval.
Audyt kontaminacji przeszedł — contamination_check.py pokazuje 0% skażonych.
Commitment przed wymianą — hash opublikowany, zestaw jednorazowy.
Inaczej benchmark mierzy zapamiętywanie, nie zdolność — i jest bezwartościowy.
Co dalej?
W następnym wpisie weźmiemy micro-models — małe polskie modele, które można uruchomić lokalnie, szybko i tanio. Pokażemy, jak testujemy je w Probierzu i dlaczego rozmiar nie zwalnia z odpowiedzialności.