Как вы измеряете и исправляете bias в LLM-as-Judge (self-enhancement, position, verbosity)?

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

LLM-as-Judge — это подход, при котором большая языковая модель (LLM) используется для оценки ответов другой модели или собственных ответов (self-judge). Однако LLM-судьи подвержены систематическим ошибкам (bias): self-enhancement bias (склонность завышать оценки собственным ответам), position bias (предпочтение ответов, расположенных в определённой позиции) и verbosity bias (предпочтение более длинных ответов). Измерение bias требует сравнения с золотым стандартом (human judgments) и расчёта метрик калибровки. Исправление включает swap-тесты, промпт-инжиниринг, ансамбль судей и калибровку через постобработку.


1. Термин: LLM-as-Judge

LLM-as-Judge — это метод, при котором LLM (например, GPT-4, Claude) выступает в роли оценщика качества ответов. Используется в RAG, agentic системах и fine-tuning для автоматической оценки без участия человека.

Почему возникает bias

  • LLM обучалась на данных, где есть неявные предпочтения (длинные ответы, определённый стиль).
  • Модель может «помнить» свои собственные ответы (self-enhancement).
  • Внимание модели неравномерно распределено по позициям в контексте (bias|position bias).

Термин «Bias» — систематическое отклонение оценок от истинных значений, не связанное со случайностью.


2. Self-enhancement bias

Self-enhancement bias — склонность LLM-судьи ставить более высокие оценки ответам, которые сгенерировала она сама (или модель из той же семьи), по сравнению с ответами других моделей.

Пример:

  • GPT-4 оценивает ответы: свой ответ получает 9/10, ответ Claude — 7/10, хотя оба объективно равны.

Измерение

  • Собрать датасет с парами ответов (свой vs чужой) и human judgments.
  • Посчитать среднюю разницу между оценками LLM и human для своих ответов.
  • Метрика: Self-enhancement score = средняя оценка LLM своих ответов минус средняя оценка human.

Исправление

  • Использовать анонимизацию (скрыть источник ответа).
  • Применять кросс-модельную оценку (модель A оценивает ответы модели B, и наоборот).
  • Добавлять в промпт инструкцию «не учитывай, кто автор ответа».

3. Position bias

Position bias — предпочтение ответа, расположенного на определённой позиции (например, первого или последнего) в списке кандидатов.

Пример:

  • При сравнении двух ответов LLM чаще выбирает первый, даже если второй объективно лучше.

Измерение

  • Swap-тест: поменять местами два ответа и проверить, изменилась ли оценка. Если bias есть, оценка сместится.
  • Метрика: Position bias rate = доля случаев, когда оценка изменилась после swap.

Исправление

  • Swap and average: оценить обе перестановки и усреднить результат.
  • Промпт-инжиниринг: явно указать «не обращай внимания на порядок».
  • Multiple judges: использовать несколько LLM с разными порядками и агрегировать.

4. Verbosity bias

Verbosity bias — предпочтение более длинных, многословных ответов, даже если они менее информативны.

Пример:

  • Ответ из 500 слов с повторениями получает 8/10, а лаконичный ответ из 100 слов — 6/10, хотя второй точнее.

Измерение

  • Построить корреляцию между длиной ответа (в токенах) и оценкой LLM на датасете с human judgments.
  • Если корреляция значимо выше, чем у human, — verbosity bias.

Исправление

  • Нормализация длины: в промпте указать «оценивай информативность, а не длину».
  • Post-hoc correction: вычесть из оценки компонент, зависящий от длины (линейная регрессия).
  • Использовать рубрики (rubrics) с критериями, не связанными с длиной.

5. Измерение bias: калибровка с human judgments

Калибровка — процесс сравнения оценок LLM-судьи с оценками человека на золотом стандарте (gold standard).

Шаги:

  1. Собрать датасет из 200–500 примеров (запрос, ответ, human score).
  2. Получить оценку LLM для каждого примера.
  3. Построить калибровочную кривую (x — human score, y — LLM score).
  4. Рассчитать метрики:
    • Mean Absolute Error (MAE) — среднее абсолютное отклонение.
    • Spearman correlation — согласованность ранжирования.
    • Bias per bin — средняя ошибка для разных диапазонов оценок.

Пример кода (Python):

import numpy as np
from sklearn.metrics import mean_absolute_error, spearmanr

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

mae = mean_absolute_error(human_scores, llm_scores)
corr, _ = spearmanr(human_scores, llm_scores)

print(f"MAE: {mae:.2f}, Spearman: {corr:.2f}")

Интерпретация

  • MAE < 0.5 — хорошо.
  • Spearman > 0.8 — высокая согласованность.
  • Если bias систематический (например, LLM завышает на 1 балл), можно применить калибровочную коррекцию: corrected_score = llm_score - bias.

6. Исправление bias: методы

6.1 Swap-тест и усреднение (position bias)

  • Для каждой пары ответов оценить два порядка: (A, B) и (B, A).
  • Итоговая оценка = среднее двух оценок.

6.2 Промпт-инжиниринг

  • Добавить анти-bias инструкции: «Не отдавай предпочтение длинным ответам», «Не учитывай порядок».
  • Использовать chain-of-thought (CoT) перед оценкой: «Сначала проанализируй каждый ответ по критериям, затем поставь оценку».

6.3 Ансамбль судей (multiple judges)

  • Использовать несколько разных LLM (GPT-4, Claude, Llama) и усреднять их оценки.
  • Это снижает variance и уменьшает специфичный для модели bias.

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

  • Обучить простую модель (линейную регрессию) на золотом стандарте, чтобы предсказывать human score по LLM score и дополнительным признакам (длина, позиция, автор).
  • Применять коррекцию: final_score = model.predict(features).

6.5 Rubric-based evaluation

  • Заранее определить критерии (точность, полнота, стиль) и просить LLM оценивать по каждому отдельно, затем агрегировать.
  • Это уменьшает влияние поверхностных bias.

7. Инструменты для измерения и исправления bias

ИнструментНазначение
LangSmithТрекинг оценок, A/B тесты, визуализация bias
DeepEvalВстроенные метрики bias, swap-тесты
RAGASОценка faithfulness, но можно адаптировать для judge bias
Custom scriptsPython + pandas + scikit-learn для калибровки

Пример pipeline измерения bias

import pandas as pd
from sklearn.linear_model import LinearRegression

# Загружаем золотой стандарт
df = pd.read_csv('human_judgments.csv')
# Получаем LLM оценки
df['llm_score'] = get_llm_scores(df['query'], df['answer'])
# Вычисляем bias как разницу
df['bias'] = df['llm_score'] - df['human_score']
# Средний bias
mean_bias = df['bias'].mean()
print(f"Mean bias: {mean_bias:.2f}")

# Коррекция: обучаем регрессию
X = df[['llm_score', 'answer_length', 'position']]
y = df['human_score']
model = LinearRegression().fit(X, y)
df['corrected_score'] = model.predict(X)

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

Задача Разработать систему оценки ответов RAG-агента с детекцией и коррекцией position bias.

Инструменты Python, LangChain, OpenAI API, pandas, scikit-learn.

Шаги:

  1. Сгенерировать 100 запросов и по 2 ответа на каждый (от разных моделей).
  2. Получить human оценки (можно самому или через краудсорсинг).
  3. Реализовать LLM-as-Judge (GPT-4) с промптом без анти-bias инструкций.
  4. Провести swap-тест: для каждой пары оценить (A,B) и (B,A). Вычислить position bias rate.
  5. Применить коррекцию: усреднить оценки по двум порядкам.
  6. Сравнить MAE и Spearman до и после коррекции.
  7. Добавить второй judge (Claude) и ансамбль — улучшится ли калибровка?

Ожидаемый результат Отчёт с метриками bias, кодом коррекции и выводом о снижении MAE на 20–30%.


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

ВопросТема
340Что такое Agentic RAG и как он отличается от классического RAG?
341Как спроектировать multi-agent систему для оценки ответов?
342Как вы оцениваете качество работы AI-агента в целом?
344Как деплоить LLM-as-Judge в production?
345Как обеспечить согласованность оценок между разными судьями?
5Как оценивать качество retrieval в RAG?

10. Навигация


Навигация