Как вы калибруете LLM-судью под человеческие оценки?

Краткий тезис

Калибровка LLM-судьи — это процесс настройки промпта, параметров декодирования и, при необходимости, постобработки, чтобы оценки модели максимально совпадали с человеческими (human labels). Основной метод: собрать 200–500 размеченных человеком примеров, измерить согласие через Cohen’s Kappa или Spearman correlation, затем итеративно улучшать промпт (few-shot, rubric, chain-of-thought) и подбирать temperature (обычно 0). Для критических случаев применяют fine-tuning судьи на собранных данных или ансамбль нескольких LLM-судей.


1. Термин «LLM-судья» и зачем его калибровать

LLM-судья (LLM-as-a-judge) — это большая языковая модель, которой поручают оценивать качество ответов другой LLM (или той же) по заданным критериям: полезность, безопасность, соответствие фактам, стиль и т.д. Используется как дешёвая альтернатива человеческой оценке при разработке и мониторинге.

Зачем калибровать Без калибровки LLM-судья может:

  • быть слишком строгим или слишком снисходительным (bias);
  • путать критерии (например, оценивать длину вместо релевантности);
  • давать нестабильные результаты при изменении формулировки запроса.

Калибровка приводит оценки судьи в соответствие с золотым стандартом — оценками человека.


2. Сбор человеческих оценок (gold standard)

Для калибровки нужен датасет из 200–500 примеров, где каждый пример содержит:

  • запрос пользователя (prompt);
  • ответ модели (candidate);
  • оценку человека (обычно по шкале 1–5 или бинарно «хорошо/плохо»).

Правила сбора

  • Примеры должны покрывать типичные сценарии использования (разные темы, сложность, типы ошибок).
  • Каждый пример оценивают 2–3 аннотатора, затем согласие между ними проверяют через Fleiss’ Kappa (для >2 аннотаторов) или Cohen’s Kappa (для двух). Если согласие низкое (<0.6), инструкции для аннотаторов нужно уточнить.
  • Разметка может быть абсолютной (оценка ответа) или сравнительной (какой из двух ответов лучше). Для калибровки чаще используют абсолютную, так как она проще для судьи.

3. Метрики согласия между LLM-судьёй и человеком

После получения оценок от LLM-судьи (с начальным промптом) считаем метрики согласия.

3.1 Cohen’s Kappa (для категориальных шкал)

Учитывает случайное совпадение. Интерпретация:

  • < 0 — нет согласия;
  • 0–0.2 — слабое;
  • 0.21–0.4 — удовлетворительное;
  • 0.41–0.6 — среднее;
  • 0.61–0.8 — хорошее;
  • 0.81–1 — почти полное.

Формула (необязательно запоминать, но полезно понимать):

κ = (p_o - p_e) / (1 - p_e)

где p_o — наблюдаемая доля совпадений, p_e — ожидаемая доля случайных совпадений.

3.2 Spearman correlation (для порядковых шкал)

Измеряет монотонную связь между рангами оценок. Значения от -1 до 1. Для калибровки целевое >0.7.

3.3 Дополнительные метрики

  • Accuracy (доля точных совпадений) — проста, но не учитывает смещение.
  • F1-score для бинарных шкал.
  • Kendall’s Tau — альтернатива Spearman, более устойчива к выбросам.

Пример расчёта на Python

from sklearn.metrics import cohen_kappa_score, accuracy_score
from scipy.stats import spearmanr

human_scores = [5, 4, 3, 5, 2, 1, 4, 3]
llm_scores   = [5, 4, 2, 5, 3, 1, 4, 3]

kappa = cohen_kappa_score(human_scores, llm_scores)
acc = accuracy_score(human_scores, llm_scores)
rho, _ = spearmanr(human_scores, llm_scores)

print(f"Cohen's Kappa: {kappa:.3f}")
print(f"Accuracy: {acc:.3f}")
print(f"Spearman: {rho:.3f}")

4. Подбор промпта для LLM-судьи

Промпт — главный рычаг калибровки. Основные техники:

4.1 Чёткое определение критериев (rubric)

Включите в промпт шкалу с описанием каждого балла. Пример для оценки полезности (1–5):

Оцени полезность ответа по шкале:
1 – ответ не по теме или вреден
2 – частично релевантен, но неполный
3 – в целом полезен, но есть мелкие недостатки
4 – полезен, точен, хорошо структурирован
5 – исчерпывающий, идеально отвечает на запрос

4.2 Few-shot примеры

Добавьте 2–4 примера с правильными оценками (человеческими). Это задаёт «якорь» для судьи.

Пример 1:
Запрос: "Как приготовить яичницу?"
Ответ: "Разбей яйца на сковороду."
Оценка человека: 2 (слишком кратко, нет деталей)

4.3 Chain-of-Thought (CoT)

Попросите судью сначала объяснить, почему ответ хорош или плох, а потом поставить оценку. Это повышает согласие на 5–15%.

Сначала напиши краткий анализ ответа, затем поставь оценку в формате "Оценка: X".

4.4 Формат вывода

Фиксированный формат (JSON, только число) упрощает парсинг и уменьшает вариативность.

Твой ответ должен быть в формате JSON: {"score": <число>, "reason": "<строка>"}

5. Настройка параметров декодирования

5.1 Temperature

Для оценки temperature = 0 (или 0.0–0.1). Ненулевая температура вносит случайность, что снижает воспроизводимость и согласие.

5.2 Top-p, top-k

Обычно оставляют по умолчанию (1.0, 50) или выключают (top-p=1). При temperature=0 они не влияют.

5.3 Max tokens

Достаточно 100–200 токенов для оценки. Слишком большой лимит может привести к многословию и шуму.


6. Калибровка через пост-обработку

Если после настройки промпта смещение остаётся, можно применить коррекцию:

6.1 Platt scaling (для бинарных шкал)

Обучаем логистическую регрессию на парах (сырая оценка LLM → человеческая оценка). Позволяет перекалибровать вероятности.

6.2 Линейная коррекция (для непрерывных шкал)

Если LLM систематически завышает на 0.5 балла, вычитаем поправку: corrected = llm_score - bias.

6.3 Бакетинг (binning)

Группируем оценки в категории (например, 1–2 → плохо, 3–4 → средне, 5 → отлично) и считаем согласие уже на категориях.


7. Итеративный процесс калибровки

  1. Собрать gold standard (200–500 примеров).
  2. Запустить baseline (простой промпт без калибровки) → посчитать метрики.
  3. Проанализировать ошибки: где судья расходится с человеком? (например, завышает оценки длинным ответам).
  4. Изменить промпт: добавить рубрику, few-shot, CoT.
  5. Повторить оценку на том же датасете → метрики должны улучшиться.
  6. Проверить на отложенном датасете (100–200 примеров) — нет ли переобучения под конкретные примеры.
  7. Зафиксировать промпт и параметры. При изменении оцениваемой модели или домена — калибровать заново.

8. Продвинутые методы

8.1 Fine-tuning LLM-судьи

Если базовый промпт не даёт нужного согласия (Kappa < 0.6), можно дообучить небольшую модель (например, Llama 3 8B) на парах (запрос+ответ → оценка). Это требует больше данных (1000+ примеров), но даёт лучшее качество.

8.2 Ансамбль судей

Использовать несколько LLM (разных моделей или разных промптов) и усреднять их оценки. Повышает робастность, но увеличивает стоимость.

8.3 Калибровка с учётом уверенности

Попросить судью указать уверенность (например, «уверенность: 0.8»). Затем отбрасывать оценки с низкой уверенностью или взвешивать их.


9. Ограничения и подводные камни

  • Смещение в пользу собственных ответов (self-enhancement bias) — LLM-судья может выше оценивать ответы, сгенерированные той же моделью.
  • Чувствительность к порядку — если сравниваются два ответа, порядок их предъявления влияет на оценку.
  • Неспособность уловить тонкие ошибки — LLM-судья может пропускать фактические неточности, если они звучат правдоподобно.
  • Затраты — калибровка требует человеческой разметки, что дорого.
  • Дрейф — после обновления модели-судьи или изменения промпта калибровка может устареть.

10. Сравнение с альтернативами

МетодСтоимостьТочностьМасштабируемость
Человеческая оценкаВысокаяВысокаяНизкая
Автоматические метрики (BLEU, ROUGE)НизкаяНизкая (не ловят смысл)Высокая
LLM-судья (калиброванный)СредняяСредняя–высокаяВысокая
Fine-tuned LLM-судьяВысокая (обучение)ВысокаяВысокая

Пет-проект для закрепления

Задача Разработать калиброванного LLM-судью для оценки кратких ответов на вопросы по Python (шкала 1–5).

Инструменты Python, OpenAI API (или локальная модель через Ollama), библиотека scikit-learn, pandas.

Шаги:

  1. Собрать 300 пар (вопрос, ответ) из Stack Overflow или сгенерировать с помощью LLM.
  2. Попросить 2–3 друзей оценить ответы по шкале 1–5. Вычислить Fleiss’ Kappa — если <0.6, уточнить инструкции.
  3. Написать базовый промпт для GPT-4o-mini: «Оцени ответ от 1 до 5 по критериям: точность, полнота, ясность».
  4. Получить оценки судьи, посчитать Cohen’s Kappa и Spearman.
  5. Улучшить промпт: добавить рубрику с описанием каждого балла, 2 few-shot примера, CoT.
  6. Повторить шаг 4. Если Kappa < 0.7 — добавить ещё примеры или попробовать другую модель.
  7. Зафиксировать финальный промпт и параметры (temperature=0).
  8. Написать скрипт, который принимает вопрос и ответ, возвращает оценку и анализ.

Ожидаемый результат Рабочий скрипт с метриками согласия >0.7, документация промпта и процесса калибровки.


Связь с другими вопросами

ВопросТема
130Как вы оцениваете качество генерации в RAG?
131Какие метрики эвалюации LLM вы знаете?
133Как вы оцениваете безопасность ответов LLM?
134Что такое LLM-as-a-judge и какие у него ограничения?
135Как вы сравниваете две LLM на практике?

Навигация