Zaprojektowałem test na LLM-as-a-judge. Najtrudniejsze było zdefiniować poprawną recenzję.
Pilotaż z trzema modelami, dwoma domenami i trzema tierami ground truth. Jak zmierzyć jakość recenzji AI, gdy nie ma jednej poprawnej odpowiedzi.
W wpisie o testowaniu promptów opisałem trzy podejścia do ewaluacji generatywnych outputów: ręczna ocena, proxy przez parsowanie i LLM-as-a-judge. Trzecie zostawiłem z adnotacją “pozostaje pomysłem dopóki nie zweryfikuję jego wiarygodności.”
Postanowiłem zweryfikować. Nie ręcznie na kilku przykładach - jako kontrolowany eksperyment z trzema modelami, dwoma domenami i mierzalnym ground truth.
Problem i dane
Żeby zmierzyć czy LLM-as-a-judge jest wiarygodny, trzeba najpierw zdefiniować co znaczy “poprawna recenzja”. Recenzja kodu czy tekstu nie jest binarna - nie ma jednego prawidłowego werdyktu. Potrzebowałem referencji - ground truth - zanim w ogóle mógłbym porównywać recenzentów.
Dwie ścieżki: stworzyć dane samemu albo znaleźć zewnętrzne datasety.
Tworzenie własnych danych oznacza generowanie błędów w kodzie i tekście, ręczne adnotowanie każdego z nich, budowanie zestawu od zera. Pełna kontrola nad tym co testujesz. Ale też dużo dłubania - zarówno wygenerowanie realistycznych błędów jak i ich rzetelne opisanie.
Zewnętrzne datasety rozwiązują problem czasu, ale wprowadzają nowy: muszą pasować. Trzy kryteria: konkretne modele AI jako autorzy materiału (żeby mierzyć self-review), ludzkie adnotacje błędów (żeby mieć referencję) i dwie domeny - kod i tekst.
Postawiłem na dane zewnętrzne:
- Defects4CodeLLM - kod wygenerowany przez GPT-4 i GPT-3.5, z ludzkimi adnotacjami błędów (semantyczne + syntaktyczne).
- ReaLMistake - odpowiedzi na zadania rozumowania wygenerowane przez GPT-4 i Llama 2, z ludzkimi adnotacjami. Oba zestawy mają to czego potrzebuję: znany autor, opisane błędy, ludzka referencja.
- HumanEval - zadania programistyczne z unit testami. Odpaliłem na nich Claude, zebrałem te które failują. Obiektywne ale wąskie - test mówi czy kod działa, ale nie czy jest wydajny i napisany klarownie.
Brakowało próbek Claude w domenie tekstu. Wygenerowałem je osobno: Claude odpowiada na pytania z ReaLMistake, potem GPT-4o i Gemini niezależnie oceniają czy odpowiedź zawiera błąd. Obaj sędziowie muszą się zgodzić = ground truth.
Z pięciu próbek trzy okazały się bezbłędne według obu sędziów - wyłączyłem je z benchmarku bo nie da się scorować recenzji gdy nie ma czego szukać. To też pozytywny sygnał: Claude na tych zadaniach popełniał mniej błędów niż GPT-4 czy Llama.
3 tiery ground truth
Nie ma jednego ground truth który pokrywa wszystkie próbki, wszystkie modele i obie domeny. Zamiast szukać idealnego źródła, rozbiłem referencję na trzy tiery - każdy mówi “tu jest błąd” w inny sposób:
| Tier | Źródło | Co daje | Ograniczenie |
|---|---|---|---|
| Tier 1: ludzkie adnotacje | Defects4CodeLLM, ReaLMistake | Ekspert opisał co jest błędem i dlaczego | Pokrywa GPT i Llama, nie Claude |
| Tier 2: unit testy | HumanEval | Obiektywne pass/fail | Mówi CZY jest błąd, nie jak go opisać |
| Tier 3: konsensus modeli | Claude content samples | Obaj sędziowie muszą się zgodzić | Sędziowie mogą dzielić ślepe punkty |
Nawet razem nie spełniają kryteriów akademickiego badania. Ale dają trzy niezależne perspektywy na ten sam problem - i to więcej niż większość porównań LLM, które opierają się na jednej.
Design eksperymentu
Trzy zmienne do zbadania:
-
Kto recenzuje (self vs cross) - Claude Opus 4.6, GPT-4o i Gemini 2.5 Pro. Gemini nigdy nie jest autorem materiału - czysta grupa kontrolna, zawsze cross-review. Claude i GPT mają zarówno self-review jak i cross-review.
-
Jak recenzuje (setup) - dwa skrajne poziomy. Level 0 - zero-shot:
- materiał
- “review this and share your assessment”
Level 2 - pełny structured setup:
- rola eksperta (senior staff engineer / senior editor)
- 3-pass process (strukturalny → linia po linii → holistyczny)
- domain-specific checklista
- lista typowych błędów AI
- format JSON
- kalibracja anty-false-positive
-
Co recenzuje (domena) - kod i tekst (zadania rozumowania). Dwie domeny dają kontrolę - jeśli wzorzec pojawia się w obu, to nie artefakt jednego typu materiału.
Self-review mierzę na poziomie vendora, nie konkretnego modelu. GPT-4o recenzujący kod od GPT-3.5 = “self” (oba OpenAI). To uproszczenie - wracam do tego w ograniczeniach.
| Źródło | Domena | Autor | Próbek | Ground truth |
|---|---|---|---|---|
| Defects4CodeLLM | kod | GPT-4 | 5 | Tier 1 |
| Defects4CodeLLM | kod | GPT-3.5 | 5 | Tier 1 |
| HumanEval | kod | Claude | 5 | Tier 2 |
| ReaLMistake | tekst | GPT-4 | 5 | Tier 1 |
| ReaLMistake | tekst | Llama 2 | 5 | Tier 1 |
| Claude on ReaLMistake | tekst | Claude | 2 (z 5) | Tier 3 |
Łącznie: 27 próbek × 3 recenzentów × 2 poziomy = 162 recenzje.
Ograniczenia
To jest pilotaż, nie recenzowane badanie naukowe. Dlaczego:
- 5 próbek na źródło danych. Za mało na istotność statystyczną. Przy pięciu próbkach zobaczę wyraźne wzorce ale nie oddzielę ich od szumu. Jeśli różnica między self a cross wyniesie 3% - nie wiem czy to sygnał czy przypadek.
- Self-review = vendor-level. GPT-4o recenzujący GPT-3.5 to nie to samo co model recenzujący swój własny output. Self-bias w literaturze dotyczy recenzji WŁASNEJ pracy. Tu mierzę pokrewny efekt - ale to proxy, nie dokładny pomiar. Z drugiej strony - w praktyce często właśnie tak wygląda weryfikacja: jeden model generuje, inny (nawet od tego samego vendora) sprawdza.
- Scorer ma potencjalny bias. Recenzje scoruje Claude Haiku - porównuje je z ground truth i przyznaje punkty. Haiku jest produktem Anthropic. Może inaczej traktować recenzje napisane przez Claude niż przez GPT. Tego nie kontroluję.
- Brak pośrednich leveli. Skok z “review this” do pełnego skilla z rolą, checklistą i 3-pass to duża odległość. Nie wiem co konkretnie daje efekt - rola? format? checklista? Wszystko naraz? To pytanie na Fazę 2.
Ten eksperyment może pokazać gdzie szukać. Nie może udowodnić.
Kiedy wyniki coś znaczą
Uznam wzorce za znaczące gdy:
- Różnice między warunkami są duże - 15%+ detection rate, nie 2-3%. Przy 5 próbkach na źródło jeden trafiony lub nietrafiony błąd to już 20% różnicy - próg 15% to minimum przy którym wzorzec nie jest artefaktem pojedynczej próbki
- Kierunek jest spójny w obu domenach (kod i tekst wskazują to samo)
- Gemini (kontrola) zachowuje się inaczej niż pary self-review
Uznam że potrzebuję więcej danych gdy:
- Różnice są małe i niespójne między domenami
- Tier 1 i Tier 3 dają sprzeczne sygnały o tym samym recenzencie
Wyniki opisałem w osobnej notatce. Metodologia albo je udźwignie, albo pokaże że pięć próbek to za mało żeby powiedzieć cokolwiek poza anegdotą.
W newsletterze rozwijam tego rodzaju tematy głębiej. Zapisz się.