Что такое calibration для LLM и как её измерять (ECE)?

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

Calibration (калибровка) — это свойство модели, при котором её субъективная уверенность (confidence) в предсказании соответствует объективной точности (accuracy). Для LLM это критически важно, так как плохо откалиброванная модель может выдавать ложные факты с высокой уверенностью, что особенно опасно в агентных RAG-системах, принимающих решения на основе этих уверенностей. Основная метрика — Calibration Error|Expected Calibration Error (ECE) — средневзвешенное отклонение уверенности от точности по равномерным бинам. Калибровку улучшают простым temperature scaling.


1. Термин: Calibration (калибровка)

Калибровка модели — это мера того, насколько хорошо прогнозируемые вероятности соответствуют истинным частотам событий. Например, если модель говорит «уверен на 90%», то среди всех таких предсказаний ровно 90% должно быть верными. Для LLM калибровка обычно оценивается на уровне ответа в целом (верен / неверен) или на уровне токенов, хотя чаще используется первый подход: по запросу модель генерирует ответ и указывает свою confidence (например, максимальная вероятность среди токенов, или специальный токен уверенности).

В отличие от классических ML-моделей (логистическая регрессия, нейронные сети для классификации), где калибровка хорошо определена через softmax-вероятности, для генеративных LLM есть нюансы: они могут давать некалиброванные вероятности из-за авторегрессивной природы, длинных последовательностей и эффекта «miscalibration due to sequence length» (короткие ответы часто более уверенны, чем длинные, хотя не всегда точнее).


2. Почему калибровка важна для LLM и Agentic RAG

В Agentic RAG агент принимает решения: когда искать документы, когда закончить генерацию, какую цепочку действий выбрать. Если LLM даёт некалиброванные оценки уверенности (overconfident на неверных ответах), агент может:

  • не искать нужные документы (думая, что знает точно — но ошибается);
  • слишком рано завершить обработку с неверным ответом;
  • выбрать неправильный инструмент в мультиагентной системе.

Хорошо откалиброванная модель позволяет агенту корректно оценивать риск и доверять своему «сомнению», запуская механизмы верификации или уточнения. В Self-RAG (вопрос 10) именно калибровка уверенности позволяет решать, нужно ли делать ретрив или можно ответить из памяти.

Кроме того, для интерпретируемости — пользователь может полагаться на уверенность модели как на метрику качества ответа.


3. Как измерять: Expected Calibration Error (ECE)

ECE — самая популярная метрика калибровки для многоклассовой классификации. Для LLM её адаптируют: после генерации ответа бинарно оценивают правильность (1 — верно, 0 — неверно) и берут confidence как максимальную вероятность среди токенов последнего шага (или среднюю по всем токенам ответа).

Формула

ECE = Σ ( (n_b / N) * |acc(b) - conf(b)| )

Где:

  • разбиваем все предсказания на B равных бинов по значению confidence (например, 10 бинов: [0,0.1), [0.1,0.2), …, [0.9,1.0]);
  • для каждого бина b:
    • n_b — количество предсказаний в бине;
    • N — общее количество предсказаний;
    • acc(b) — доля правильных ответов в бине;
    • conf(b) — средняя confidence в бине (обычно средняя точка бина или среднее фактических confidence).

Чем меньше ECE, тем лучше калибровка. Идеальное значение — 0.


4. Пример расчёта ECE вручную

Пусть у нас есть 5 предсказаний LLM:

ЗапросConfidence (max logit softmax)Правильный?
10.85да
20.55нет
30.95нет
40.70да
50.30нет

Разобьём на 5 бинов: [0,0.2), [0.2,0.4), [0.4,0.6), [0.6,0.8), [0.8,1.0].

  • Бин [0,0.2): пусто, n=0.
  • Бин [0.2,0.4): confidence=0.30, правильный? нет → acc=0.0, conf=0.30, |acc-conf|=0.30.
  • Бин [0.4,0.6): confidence=0.55, правильный? нет → acc=0.0, conf=0.55, разница=0.55.
  • Бин [0.6,0.8): confidence=0.70, правильный? да → acc=1.0, conf=0.70, разница=0.30.
  • Бин [0.8,1.0): confidence=0.85 (да) и 0.95 (нет) → n=2, средняя conf = (0.85+0.95)/2=0.90, acc = 1/2=0.5, разница=0.40.

ECE = (1/5 * 0.30) + (1/5 * 0.55) + (1/5 * 0.30) + (2/5 * 0.40) = 0.06 + 0.11 + 0.06 + 0.16 = 0.39.

Высокое значение (0.39) указывает на плохую калибровку.


5. Другие метрики калибровки

Помимо ECE существуют:

  • MCE (Maximum Calibration Error) — максимальное абсолютное отклонение среди бинов. Полезно для задач, где опасен один перекалиброванный бин (например, в медицинских диагнозах).
  • Brier Score — среднеквадратичная ошибка между предсказанной вероятностью и истинным классом (для бинарного случая). Учитывает как калибровку, так и остроту (sharpness).
  • Reliability diagrams — график: по оси X — confidence bin, по оси Y — accuracy. Идеальная калибровка — диагональ. Визуально показывает, где модель пере- или недооценивает себя.
  • NLL (Negative Log-Likelihood) — хотя это не метрика калибровки напрямую, хорошо откалиброванные модели дают меньший NLL.

6. Методы улучшения калибровки LLM

6.1 Temperature scaling

Простейший и эффективный постобработки: после обучения умножаем логиты на 1/T (T — температура). Оптимальное T подбирается на валидационном датасете минимизацией NLL (или ECE). T > 1 «смягчает» вероятности (делает менее уверенными), T < 1 «ужесточает».

6.2 Platt scaling

Логистическая регрессия поверх логитов: softmax(a * logit + b).

6.3 Isotonic regression

Непараметрический метод: подгоняем монотонную функцию на confidence. Требует больше данных и может переобучаться.

6.4 Внутренние методы обучения

  • Включение confidence penalty (штраф за слишком высокую уверенность) в loss-функцию.
  • Использование MC Dropout или Deep Ensembles — получение распределения уверенности путём множественных прогонов.
  • Для LLM специфичный: calibration-aware prompts (попросить модель оценить уверенность текстом, а не вероятностью) — но это не probability calibration.

7. Особенности калибровки для генерации текста

При оценке калибровки LLM возникает вопрос: что считать уверенностью и правильностью? Стандартный подход — Top-token confidence (вероятность первого токена) или sequence-level confidence (средняя логарифмическая вероятность ответа). Проблемы:

  • Повторяющиеся токены могут завышать уверенность.
  • Длина ответа искажает среднее.
  • Маловероятные правильные ответы (например, редкий факт, но верный) могут иметь низкий confidence.

Альтернатива: calibration on correctness of entire answer с бинарной оценкой (человеком или автоматически). Для этого нужен gold standard датасет с правильными ответами. Используют MMLU, TruthfulQA, Natural Questions и т.п.


8. Инструменты для расчёта ECE и визуализации

Популярные библиотеки:

Пример кода на Python (схематично):

import torch
from torch.utils.data import DataLoader
from transformers import AutoModelForCausalLM, AutoTokenizer

# загрузка модели, датасета (запросы, правильные ответы)
model = AutoModelForCausalLM.from_pretrained("...")
tokenizer = AutoTokenizer.from_pretrained("...")

def get_confidence_and_correctness(batch):
    inputs = tokenizer(batch["question"], return_tensors="pt", padding=True)
    with torch.no_grad():
        outputs = model(**inputs)
        logits = outputs.logits[:, -1, :]  # последний токен
        probs = torch.softmax(logits, dim=-1)
        # confidence = максимальная вероятность
        confidence, predicted_token = probs.max(dim=-1)
    # correct = 1 если декодированный token совпадает с правильным ответом
    correct = (predicted_token == batch["answer_token_id"]).float()
    return confidence, correct

# собираем confidence, correct для всего датасета
# разбиваем на бины, считаем ECE (пример реализации)
def ece(confidences, corrects, bins=10):
    bin_boundaries = torch.linspace(0, 1, bins+1)
    bin_indices = torch.bucketize(confidences, bin_boundaries, right=True) - 1
    bin_indices = bin_indices.clamp(0, bins-1)
    ece_val = 0.0
    for b in range(bins):
        mask = bin_indices == b
        if mask.sum() == 0:
            continue
        acc = corrects[mask].float().mean()
        conf = confidences[mask].float().mean()
        weight = mask.float().mean()
        ece_val += weight * (acc - conf).abs()
    return ece_val.item()

# построение reliability diagram
import matplotlib.pyplot as plt
# ...

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

Задача Оценить калибровку небольшой LLM (например, GPT-2 или TinyLlama) на датасете вопросов с известными ответами (например, первые 500 вопросов MMLU) до и после temperature scaling. Построить reliability diagram и сравнить ECE.

Инструменты Python, HuggingFace Transformers, PyTorch, Matplotlib, scikit-learn (для calibration_curve).

Шаги:

  1. Загрузить модель и токенизатор (например, distilgpt2).
  2. Загрузить датасет (MMLU через datasets).
  3. Для каждого вопроса: закодировать, получить логиты, взять confidence первого токена (или среднее по ответу), декодировать токен и сравнить с правильным ответом (бинарная метка: 1 если верно, 0 если нет).
  4. Рассчитать ECE (реализовать вручную или использовать torchmetrics).
  5. Построить reliability diagram (бин-accuracy vs бин-confidence).
  6. Подобрать оптимальную температуру T (через валидационную выборку) с минимизацией ECE или NLL.
  7. Применить temperature scaling к логитам (умножить на 1/T) и повторить расчёт ECE и график.
  8. Вывести сравнение ECE до/после и графики side-by-side.

Ожидаемый результат ECE уменьшается (например, с 0.25 до 0.05), reliability diagram приближается к диагонали. В отчёте указать найденную температуру и визуализации.


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

ВопросТема
487Калибровка в классических ML-моделях (логистическая регрессия, SVM)
5Оценка качества retrieval в RAG (связь: если retrieval плохой, уверенность LLM может быть некалиброванной)
10Self-RAG (использует уверенность для принятия решения о ретриве — напрямую зависит от калибровки)
2Lost in the middle (длинный контекст искажает уверенность модели, влияет на калибровку)
7Уменьшение latency (temperature scaling не добавляет latency, а повышение уверенности может ускорить принятие решений агентом)

Навигация