Scorery oparte na modelu (LLM-as-judge)
G-Eval: rubryka oceniana przez model
Aktualizacja: 11 października 2026
Rubryka + łańcuch myślenia + wagi z logitów
G-Eval (Liu i in.) ocenia tekst według jawnie zdefiniowanego kryterium. Prompt zawiera definicję zadania, kryterium oceny, wymagany łańcuch myślenia oraz formularz wyjściowy. Zamiast czytać jedną ocenę, G-Eval waży prawdopodobieństwa tokenów ocen:
gdzie to logit tokenu odpowiadającego ocenie , a to liczba dozwolonych ocen (np. ). Wynik jest wartością oczekiwaną rozkładu ocen, nie pojedynczym rzutem.
Implementacja ważenia
from math import exp
def g_eval_score(logprobs: dict[int, float], scores: range) -> float:
probs = {s: exp(logprobs.get(s, float("-inf"))) for s in scores}
total = sum(probs.values())
return sum(s * p / total for s, p in probs.items())
print(g_eval_score({4: -0.2, 5: -0.9}, range(1, 6))) # ok. 4.3Co daje ważenie logitami
Rozkład logitów niesie informację, której nie ma w pojedynczej ocenie: jeśli model „waha się" między 4 a 5, G-Eval daje wynik pomiędzy — mniejsza wariancja niż przy losowaniu jednej etykiety. To szczególnie przydatne przy krótkich skalach, gdzie pojedyncza etykieta ma dużą wagę. Autorzy raportują wyższą korelację z ocenami ludzkimi niż warianty bez ważenia logitami na ocenianych zadaniach NLG.
Jak projektować rubrykę
- rozłączne poziomy — każda ocena musi mieć osobną definicję (np. „5: wszystkie wymagania spełnione", „3: główne wymaganie spełnione", „1: brak");
- kotwice — przykładowe odpowiedzi dla skrajnych ocen stabilizują sędziego;
- skala dopasowana do zjawiska — 1–3 wystarczy, gdy różnice są grube; 1–10 bywa hałaśliwe.
Pułapki
- dostęp do logitów — bez logprobów G-Eval degeneruje się do zwykłego LLM-as-judge: direct scoring; interfejsy zwracające sam tekst tego nie umożliwiają;
- tokenizacja liczb — ocena „10" może być jednym tokenem albo dwoma; mapuj tokeny na oceny jawnie;
- projekt rubryki — kryteria muszą być rozłączne i pokrywać pełną skalę, inaczej rozkład ocen się zniekształca.