Зачем человек, если есть автометрики
Автоматические метрики из прошлого урока закрывают многое — но упираются в две стены. Во-первых, субъективное качество: полезность, естественность, тон, тактичность — то, что определяется человеческим восприятием и плохо формализуется. Во-вторых, калибровка самих автометрик: LLM-судья и RAGAS нужно с чем-то сверять, чтобы верить их числам, — а сверяют с человеком. Человек — это ground truth, «золотой стандарт» оценки.
Но человеческая оценка дорога и медленна, поэтому её не льют на весь трафик. Роль human evaluation — точечный эталон:
- Калибровать автоматику. Разметить 200 примеров людьми, проверить, что LLM-судья с ними согласуется, — и дальше доверять судье на объёме.
- Оценивать то, что не формализуется. Финальное качество продукта, спорные кейсы, edge cases.
- Строить golden datasets. Человеческие оценки становятся эталонными ответами для offline-регрессий.
Правильная схема — не «или люди, или автоматика», а пирамида: люди размечают небольшой качественный эталон → на нём калибруется LLM-судья/метрики → откалиброванная автоматика масштабируется на весь трафик. Человек — вершина доверия, автоматика — рычаг масштаба. Этот урок — про то, как сделать вершину надёжной, иначе калибруешь по кривой линейке.
Процесс разметки и рубрика
Ключевая идея: надёжность оценки создаётся не оценщиками, а инструкцией. Спросишь «хороший ответ?» — получишь разброс мнений и мусор. Дашь чёткую рубрику — получишь воспроизводимые числа. Хорошая разметка держится на трёх опорах.
① Рубрика — самое важное. Оценщик не должен додумывать, что значит «хорошо». Рубрика задаёт:
- Конкретные критерии — оценивать по одному измерению за раз (правильность отдельно от тона), а не «общее впечатление».
- Определённую шкалу — что именно значит «1», «3», «5». Бинарная (да/нет) надёжнее шкалы 1–10, где «6 или 7?» — вечный спор.
- Примеры-якоря — образцы ответов для каждой оценки, чтобы выровнять понимание.
- Правила для спорных — что делать при неполном/пограничном ответе.
② Несколько оценщиков на пересекающихся примерах — иначе согласованность просто не измерить. ③ Agreement — проверка, что рубрика работает (следующий раздел). Часто добавляют формат парного сравнения (A/B: «какой ответ лучше?») — людям сравнивать надёжнее, чем ставить абсолютную оценку.
Человеку трудно стабильно сказать «этот ответ на 7 из 10», но легко — «ответ A лучше ответа B». Парные сравнения дают более согласованные данные и хорошо годятся для выбора между версиями промпта/модели. Если задача — «какая версия лучше», предпочитай pairwise-разметку абсолютным баллам.
Inter-rater agreement
Допустим, два человека разметили 100 ответов. Если они постоянно расходятся — оценки бессмысленны: это шум, а не сигнал о качестве. Inter-rater agreement (IRR) — метрика согласованности оценщиков. Она отвечает на вопрос: «можно ли вообще доверять этой разметке?»
Наивно считать просто «процент совпадений» — но он обманывает: если 90% ответов хорошие, два оценщика совпадут в ~90% случаев просто случайно, даже не глядя. Поэтому используют каппу Коэна (Cohen's kappa, κ) — она вычитает согласие, ожидаемое по случайности:
κ = (наблюдаемое согласие − случайное согласие) / (1 − случайное согласие) κ = 1.0 идеальное согласие κ ≈ 0 согласие на уровне случайности (разметка бесполезна) κ < 0 систематически расходятся (хуже случайности) Ориентиры (условны, зависят от задачи): 0.0–0.20 плохо · 0.21–0.40 слабо · 0.41–0.60 умеренно 0.61–0.80 хорошо · 0.81–1.00 почти идеально
Cohen's kappa — для двух оценщиков; для трёх и более — Fleiss' kappa. Смысл тот же: измеряем согласие сверх случайного.
from sklearn.metrics import cohen_kappa_score
# оценки двух разметчиков по 8 примерам (1 = хороший ответ, 0 = плохой)
rater_a = [1, 0, 1, 1, 0, 1, 0, 1]
rater_b = [1, 0, 1, 0, 0, 1, 0, 1]
kappa = cohen_kappa_score(rater_a, rater_b)
print(f"Cohen's kappa: {kappa:.2f}") # напр. 0.74 → хорошее согласие
# κ низкая? → проблема НЕ в оценщиках, а в РУБРИКЕ:
# критерий размыт, шкала неоднозначна, нет примеров-якорей
# → уточнить инструкцию, провести калибровку, переразметить
Главный вывод: если κ низкая, не вини «плохих разметчиков» — почти всегда виновата инструкция. Размытый критерий, шкала без определений, отсутствие якорей заставляют людей понимать задачу по-разному. Лечение: разобрать примеры расхождений вместе, уточнить рубрику, добавить якоря, провести калибровочную сессию — и переразметить. Agreement — это термометр качества твоей рубрики.
Когнитивные искажения и как их снижать
Даже с отличной рубрикой люди systematically ошибаются — не случайно, а предсказуемо, из-за когнитивных искажений. Если их не контролировать, разметка будет стабильно смещённой (высокий agreement, но неверный эталон). Основные искажения и противоядия:
| Искажение | В чём проявляется | Противоядие |
|---|---|---|
| Position bias | В A/B чаще выбирают тот, что показан первым | Рандомизировать порядок вариантов |
| Length bias | Длинный ответ кажется «качественнее» | Явно в рубрике: длина ≠ качество |
| Halo effect | Красивое форматирование → завышают содержание | Оценивать критерии раздельно |
| Anchoring | Первая оценка «якорит» следующие | Перемешивать примеры, паузы |
| Fatigue | К концу сессии оценки деградируют | Короткие сессии, контроль-примеры |
| Self/brand bias | Оценщик знает, где «наша» модель | Слепая оценка — скрыть источник |
Одна практика бьёт сразу несколько искажений: оценивай вслепую и в случайном порядке. Оценщик не должен знать, какая модель/версия/«чья» сгенерировала ответ, а порядок вариантов и примеров должен быть перемешан. Это снимает position bias, brand bias и частично anchoring. Плюс — контрольные примеры с известным ответом, вкраплённые в поток, чтобы ловить fatigue и халтуру.
Важная связка со следующим уроком: position bias, length bias, self-bias проявляются и у LLM-as-judge — модель-судья тоже чаще выбирает первый/длинный/«свой» ответ. Приёмы борьбы те же (рандомизация порядка, критерии раздельно). Поняв искажения на людях, ты будешь готов контролировать их у автоматического судьи.
Типичные ошибки
Расплывчатый вопрос без рубрики даёт несогласованный мусор. Нужны конкретные критерии, определённая шкала и примеры-якоря — иначе каждый оценивает своё.
С одним разметчиком нельзя измерить agreement — ты не знаешь, надёжна разметка или это личное мнение одного уставшего человека. Минимум два на пересекающейся выборке.
Считать среднюю оценку, когда оценщики не согласуются, — самообман. Сначала подними agreement (через рубрику), потом агрегируй. Низкая κ = числам верить нельзя.
Если оценщик видит, где «наша» модель или какой вариант первый, — искажения гарантированы. Всегда скрывай источник и рандомизируй порядок.
Шпаргалка
ЗАЧЕМ ЧЕЛОВЕК: субъективное качество (полезность/тон) + КАЛИБРОВКА автометрик
человек = ground truth. ПИРАМИДА: люди размечают эталон → калибруют
LLM-judge/метрики → автоматика масштабируется на весь трафик
ПРОЦЕСС (3 опоры):
① РУБРИКА (главное!): конкретные критерии (по одному) · определённая шкала
(бинарная надёжнее 1–10) · примеры-якоря · правила для спорных
② ОЦЕНЩИКИ ≥2 на пересекающихся примерах, независимо, вслепую
③ AGREEMENT: измерить согласованность → верить ли числам
A/B-сравнение надёжнее абсолютной оценки («A лучше B» > «7 из 10»)
INTER-RATER AGREEMENT:
«% совпадений» ОБМАНЫВАЕТ (случайное согласие при перекосе классов)
Cohen's kappa (2 оценщика) / Fleiss' kappa (3+): согласие СВЕРХ случайного
κ=1 идеал · κ≈0 бесполезно · 0.6–0.8 хорошо
низкая κ = диагноз РУБРИКИ, не людей → уточнить+калибровка+переразметить
ИСКАЖЕНИЯ → противоядия:
position (первый) → рандомизация порядка · length (длинный) → «длина≠качество»
halo (форматирование) → критерии раздельно · anchoring → перемешать
fatigue → короткие сессии+контроль-примеры · brand → СЛЕПАЯ оценка
ГЛАВНОЕ: слепая + рандомизированная оценка (бьёт сразу несколько)
⚠️ те же искажения есть у LLM-judge (следующий урок)
ГРАБЛИ: «хороший ли ответ?» без рубрики · 1 оценщик · верить числам при низкой κ ·
неслепая оценка
Практическое задание
Задание: организуй human evaluation
- Для агента из модулей 03–05 напиши рубрику оценки одного критерия (например, «полезность ответа»): шкала, определения каждого балла, 2 примера-якоря, правило для спорных.
- Возьми 10 ответов агента и оцени их сам дважды с интервалом (или попроси коллегу). Посчитай Cohen's kappa (
sklearn). Какая вышла согласованность? - Если κ низкая — найди по расхождениям, что в рубрике размыто. Уточни и переразметь. Выросла ли κ?
- Переформулируй задачу как парное сравнение (A vs B двух версий промпта). Стало ли оценивать легче и согласованнее? Почему?
- Пройдись по таблице искажений: какие из них угрожают именно твоей разметке? Как ты их снимешь в процессе (что конкретно рандомизируешь/скрываешь)?
- Спроектируй калибровку LLM-судьи: сколько примеров разметить людьми, чтобы проверить, согласуется ли с ними судья? Какой метрикой проверишь согласие человек↔судья?
- Со звёздочкой: вставь в поток разметки 2 контрольных примера с заранее известной оценкой и проверь, ловят ли они невнимательность/fatigue у оценщика.
Что дальше
Человеческая оценка — золотой стандарт, но она дорога и не масштабируется на весь трафик. Решение — LLM-as-judge: модель-судья, откалиброванная по человеческой разметке из этого урока. Следующий урок — как настроить судью, задать критерии и калибровать его, помня про унаследованные от людей искажения.