G-Eval¶
G-Eval -- это современный фреймворк оценки, использующий рассуждение по цепочке (Chain-of-Thought, CoT) и вероятностно-взвешенный скоринг для высокоточных оценок. Основан на научной работе G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment.
G-Eval отличается от других метрик статистическим подходом к оценке: вместо одного вызова LLM он делает множество сэмплов с высокой температурой и использует вероятности токенов для взвешивания каждой оценки. Это делает результаты более стабильными и лучше коррелирующими с человеческими оценками.
Как это работает¶
graph TD
A[Критерии] --> B["1. Генерация шагов (CoT)"]
B --> C[2. N сэмплов оценки]
C --> D[3. Извлечение вероятностей]
D --> E["4. Взвешенный score: Σ p(s) × s"]
E --> F[5. Объяснение]
F --> G["Итоговый score 0.0–1.0"] Алгоритм работает в пять этапов:
- Генерация шагов через CoT (CoT Step Generation) -- автоматически генерирует детальные шаги оценки из ваших критериев. LLM "рассуждает вслух", формулируя, как именно следует оценивать контент. Это ключевое отличие от простого промптинга -- CoT-рассуждение повышает качество оценки.
- Множественная выборка (Multi-Sampling) -- делает N оценок с высокой температурой (по умолчанию 2.0) для получения разнообразных ответов. Каждая оценка -- это независимый "мнение" модели.
- Извлечение вероятностей (Probability Weighting) -- для каждого сэмпла извлекает вероятности токенов, соответствующих оценке. Более "уверенные" ответы модели получают больший вес.
- Финальная оценка (Final Score) -- вычисляет вероятностно-взвешенное среднее по всем сэмплам. Формула: \(\sum p(s_i) \times s_i\), где \(p(s_i)\) -- вероятность оценки \(s_i\).
- Объяснение (Explanation) -- генерирует человекочитаемое пояснение на основе шагов оценки.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | обязательный | Любая модель: "gpt-4o", "anthropic:claude-3-5-sonnet-latest", "google:gemini-2.0-flash", "ollama:llama3" или CustomLLMClient |
threshold | float | обязательный | Минимальный балл для прохождения теста |
criteria | str | обязательный | Что оценивать |
evaluation_steps | list[str] | None | Кастомные шаги оценки (автогенерируются, если не указаны) |
n_samples | int | 20 | Количество сэмплов оценки |
sampling_temperature | float | 2.0 | Температура для сэмплирования (высокая = разнообразнее) |
Параметр n_samples напрямую влияет на стоимость и точность. Большее количество сэмплов даёт более стабильные результаты, но увеличивает расходы пропорционально. Параметр sampling_temperature влияет на разнообразие оценок: высокая температура (2.0) генерирует широкий спектр оценок, что улучшает статистическую репрезентативность.
Использование¶
Базовое использование¶
from eval_lib import GEval, EvalTestCase, evaluate
import asyncio
metric = GEval(
model="gpt-4o",
threshold=0.7,
criteria="Evaluate the coherence and logical flow of the text.",
n_samples=20
)
test_case = EvalTestCase(
input="Write a summary of climate change.",
actual_output="Climate change refers to long-term shifts in temperatures and weather patterns. Human activities have been the main driver since the 1800s, primarily due to burning fossil fuels. This produces greenhouse gases that trap heat in the atmosphere, leading to global warming."
)
results = asyncio.run(evaluate([test_case], [metric]))
С кастомными шагами оценки¶
metric = GEval(
model="gpt-4o",
threshold=0.7,
criteria="Evaluate the quality of a product description for an e-commerce listing.",
evaluation_steps=[
"Check if key product features are mentioned",
"Assess clarity and readability for a general audience",
"Verify the description highlights unique selling points",
"Check for appropriate length (not too short, not too long)",
"Assess persuasiveness and call-to-action"
],
n_samples=15,
sampling_temperature=1.5
)
В этом примере n_samples снижен до 15, а sampling_temperature -- до 1.5, что уменьшает стоимость при сохранении разумной точности.
G-Eval vs Custom Metric¶
| Характеристика | G-Eval | Custom Metric |
|---|---|---|
| Метод скоринга | Вероятностно-взвешенная выборка | Агрегация вердиктов |
| Количество сэмплов | N сэмплов (по умолчанию 20) | Одна оценка |
| Температура | Высокая (2.0) для разнообразия | Настраиваемая (0.1-1.0) |
| Точность | Выше (статистический подход) | Хорошая (на основе вердиктов) |
| Стоимость | Выше (2 + N вызовов API) | Ниже (1-2 вызова API) |
| Лучше для | Критичные оценки, бенчмарки | Общие задачи, экономия бюджета |
Когда выбрать G-Eval:
- Вам нужна максимально точная и стабильная оценка.
- Вы проводите бенчмарк или сравнительное тестирование моделей.
- Результаты будут использоваться для принятия важных решений (выбор модели, запуск в продакшн).
- Бюджет на API не является ограничением.
Когда выбрать Custom Metric:
- Вам нужна быстрая и экономичная оценка.
- Вы запускаете оценку часто (CI/CD, регрессионное тестирование).
- Точность одной оценки достаточна для ваших целей.
- Вы оцениваете большой объём тест-кейсов и бюджет ограничен.
Стоимость¶
2 + n_samples вызовов LLM API на одну оценку. При настройках по умолчанию (n_samples=20) это 22 вызова API.
Оптимизация стоимости
Снизьте n_samples до 5-10 для более быстрых и дешёвых оценок при сохранении разумной точности. Используйте полные 20 сэмплов для критичных бенчмарков.
Интерпретация результатов¶
Оценки G-Eval, как правило, более стабильны и надёжны, чем оценки на основе одного вызова, благодаря статистическому характеру вероятностно-взвешенного сэмплирования:
| Балл | Интерпретация |
|---|---|
| 0.9-1.0 | Отлично -- критерии выполнены в полном объёме |
| 0.7-0.9 | Хорошо -- большинство критериев выполнено, незначительные пробелы |
| 0.5-0.7 | Удовлетворительно -- критерии выполнены частично |
| 0.3-0.5 | Ниже среднего -- значительные пробелы |
| 0.0-0.3 | Плохо -- критерии не выполнены |
Практические советы¶
- Начните с n_samples=5 для прототипирования, увеличивайте до 15-20 для финальных оценок.
- Задавайте шаги оценки явно для продакшн-систем -- это исключает вариативность автогенерации CoT-шагов.
- G-Eval лучше всего работает с GPT-4 и моделями, поддерживающими возврат вероятностей токенов (logprobs).
- Для экономии запускайте G-Eval только на подмножестве тест-кейсов, а для массовой оценки используйте Custom Metric.
- Сравнивайте результаты G-Eval с человеческими оценками на небольшом наборе данных, чтобы убедиться в корректности критериев.