Перейти к содержанию

Агрегация оценок

Eval AI Library использует температурно-управляемую агрегацию вердиктов через обобщённое степенное среднее (Generalized Power Mean) -- оригинальный подход для объединения нескольких вердиктов в единую оценку метрики.

Проблема

При оценке ответов AI отдельные утверждения получают различные уровни вердиктов (fully, mostly, partial, minor, none). Простое усреднение может упустить важные нюансы -- единственная галлюцинация в идеальном ответе может быть критичной в медицине, но допустимой в повседневном разговоре. Нужен механизм, который позволяет гибко контролировать, насколько строго мы штрафуем за низкие оценки.

Решение: обобщённое степенное среднее

Функция score_agg() использует обобщённое степенное среднее с температурно-управляемой строгостью:

\[ M_p(x_1, ..., x_n) = \left(\frac{1}{n} \sum_{i=1}^{n} x_i^p\right)^{1/p} \]

Где p выводится из параметра температуры. При разных значениях p формула даёт разные типы средних -- от минимума до максимума.

Маппинг температуры

Температура контролирует строгость агрегации. Ниже приведено соответствие между температурой и поведением:

Температура Степень (p) Поведение Применение
0.1 -8.0 Близко к минимуму Критичные сферы (медицина, право)
0.3 -2.5 Ниже среднего арифметического Важная точность
0.5 1.0 Среднее арифметическое Общая оценка
0.7 4.6 Выше среднего арифметического Мягкая оценка
1.0 12.25 Близко к максимуму Творческие задачи

При температуре 0.1 даже один нулевой вердикт "обрушит" итоговую оценку почти до нуля. При температуре 1.0, наоборот, один провальный вердикт почти не повлияет на итоговую оценку, если остальные хорошие.

Как это работает

from eval_lib import score_agg

verdicts = [1.0, 0.9, 0.7, 0.0]  # fully, mostly, partial, none

# Strict: penalizes the "none" heavily
score_agg(verdicts, temperature=0.1)  # ≈ 0.05

# Balanced: arithmetic mean
score_agg(verdicts, temperature=0.5)  # ≈ 0.62

# Lenient: forgiving of the "none"
score_agg(verdicts, temperature=1.0)  # ≈ 0.95

Обратите внимание, как один и тот же набор вердиктов даёт совершенно разные итоговые оценки в зависимости от температуры. Это позволяет адаптировать строгость оценки под конкретный домен.

Параметры

def score_agg(
    scores: list[float],
    temperature: float = 0.5,
    penalty: float = 0.1,
    eps_for_neg_p: float = 1e-9
) -> float:
Параметр Тип По умолчанию Описание
scores list[float] обязательный Веса вердиктов (0.0-1.0)
temperature float 0.5 Строгость (0.1=строго, 1.0=мягко)
penalty float 0.1 Дополнительный штраф за нулевые оценки
eps_for_neg_p float 1e-9 Малое значение для предотвращения деления на ноль

Веса вердиктов

Все метрики, использующие агрегацию вердиктов, разделяют стандартный маппинг:

Вердикт Вес
fully 1.0
mostly 0.9
partial 0.7
minor 0.3
none 0.0

Уровень fully означает полное соответствие, mostly -- незначительные отклонения, partial -- частичное соответствие, minor -- минимальное, а none -- полное несоответствие.

Визуальное сравнение

Verdicts: [1.0, 0.9, 0.7, 0.3, 0.0]

t=0.1 (strict):   ████░░░░░░░░░░░░  0.08
t=0.3:             ████████░░░░░░░░  0.45
t=0.5 (balanced):  █████████░░░░░░░  0.58
t=0.7:             ███████████░░░░░  0.72
t=1.0 (lenient):   ██████████████░░  0.92

Практические рекомендации

Строгая температура (0.1-0.3)

Используйте для доменов, где любая ошибка критична:

  • Медицинский/Healthcare AI -- любая галлюцинация опасна для здоровья пациентов
  • Анализ юридических документов -- точность критична для юридических последствий
  • Финансовые расчёты -- ошибки имеют реальные финансовые последствия
  • Оценки безопасности -- любая уязвимость имеет значение

Сбалансированная температура (0.4-0.6)

Используйте для стандартных сценариев:

  • Общие Q&A-системы
  • Боты клиентской поддержки
  • Образовательный контент
  • Стандартные RAG-оценки

Мягкая температура (0.7-1.0)

Используйте для творческих и исследовательских задач:

  • Помощники для творческого письма
  • Инструменты для мозгового штурма
  • Боты для неформального общения
  • Исследовательский поиск

Использование температуры в метриках

# Strict evaluation for medical Q&A
metric = FaithfulnessMetric(
    model="gpt-4o",
    threshold=0.9,
    temperature=0.1  # Any unfaithful statement tanks the score
)

# Balanced evaluation for general assistant
metric = AnswerRelevancyMetric(
    model="gpt-4o",
    threshold=0.7,
    temperature=0.5  # Standard arithmetic mean
)

# Lenient evaluation for creative writing
metric = CustomEvalMetric(
    model="gpt-4o",
    threshold=0.6,
    name="CreativityScore",
    criteria="Evaluate creative writing quality",
    temperature=0.8  # Forgiving of individual weak areas
)