G-Eval a fost propus în lucrarea „G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment” (Yang Liu și coautori, 2023). Metricile bazate pe referințe, precum BLEU și ROUGE, au corelație relativ mică cu judecata umană la sarcini creative; G-Eval folosește un LLM cu chain-of-thought și un format de completare a unui formular pentru a nota textul după criterii.
Rezultatul raportat în lucrare: cu GPT-4, G-Eval obține o corelație Spearman de 0,514 cu evaluările umane pe sarcina de rezumare, peste metodele anterioare. Autorii semnalează și un risc: evaluatorii bazați pe LLM pot favoriza textele generate de LLM.
În DeepEval, metrica GEval primește un criteria sau o listă evaluation_steps (nu ambele) și lista evaluation_params cu câmpurile cazului de test evaluate. Dacă dai doar criteriul, pașii sunt generați automat. DeepEval aplică ponderarea cu probabilitățile tokenilor când modelul judecător expune logprobs; scorul este normalizat între 0 și 1.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
criteria |
Descrierea criteriului în limbaj natural. Exclusiv cu evaluation_steps. |
evaluation_steps |
Pașii expliciți pe care îi urmează judecătorul; dau scoruri mai controlabile decât pașii generați automat. |
evaluation_params |
Câmpurile evaluate, de exemplu SingleTurnParams.ACTUAL_OUTPUT și SingleTurnParams.EXPECTED_OUTPUT. Include doar câmpurile menționate în criteriu. |
Ponderarea cu probabilități |
Scorul final este media scorurilor posibile ponderată cu probabilitatea fiecăruia; reduce variația și scorurile întregi repetate. |
threshold |
Pragul minim de trecere în DeepEval (implicit 0,5). |
Exemple practice și scenarii reale
Exemplul 1: Factualitate față de răspunsul așteptat (DeepEval)
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCase, SingleTurnParams
factualitate = GEval(
name="Factualitate",
evaluation_steps=[
"Verifică dacă faptele din 'actual output' contrazic faptele din 'expected output'.",
"Penalizează omiterea detaliilor importante.",
"Formulările vagi sau diferențele de stil sunt acceptabile.",
],
evaluation_params=[SingleTurnParams.ACTUAL_OUTPUT, SingleTurnParams.EXPECTED_OUTPUT],
)
caz = LLMTestCase(
input="Care este portul implicit pentru Redis?",
actual_output="Redis ascultă implicit pe portul 6379.",
expected_output="6379",
)
factualitate.measure(caz)
print(factualitate.score, factualitate.reason)
Exemplul 2: G-Eval în Promptfoo
assert:
- type: g-eval
value: Răspunsul este coerent și nu se contrazice
Greșeli frecvente și capcane
- Dai în DeepEval atât
criteria, cât șievaluation_steps. Documentația cere doar unul dintre ele. - Formulezi criterii vagi („spune dacă răspunsul e bun”). Scorurile variază mult între rulări; descrie concret ce se penalizează.
- Prezinți G-Eval ca echivalent al unui expert uman. Corelația raportată în lucrare este moderată (0,514 Spearman la rezumare), iar judecătorul poate favoriza textele generate de LLM.