RAG · Retrieval-augmented generation · урок 8 · 14 мин

Метрики ранжирования: precision@k, recall@k, MRR, NDCG

Ranking metrics: precision@k, recall@k, MRR, NDCG

ТемыRAGEvalsПоиск и embeddings

Зачем

После урока ты посчитаешь на бумаге precision@k, recall@k, MRR и NDCG для одной выдачи и объяснишь, какую метрику выбрать для поиска chunks, а какую для поиска tools. На собеседовании это звучит как «what's your recall at k?», а на работе — как язык, на котором спорят о любом изменении поиска.

Что меряем и что нужно заранее

Метрики ранжирования оценивают список, который вернул поиск: есть ли в нём нужное и как высоко. В RAG (retrieval-augmented generation, генерация с опорой на найденные документы) это список chunks (кусков документов) после retrieval (выборки) или rerank (пересортировки точной моделью). Для любой из метрик нужен golden set (набор вопросов, где для каждого заранее известно, какие chunks релевантны, то есть действительно нужны для ответа). Без разметки считать нечего.

Обозначения: top-k — первые k результатов; релевантный — нужный по разметке.

Один пример на весь урок

Вопрос: «комиссия за досрочное погашение автокредита». По разметке в корпусе три релевантных chunk:

Поиск вернул top-5: 1 — G, 2 — мусор, 3 — T, 4 — мусор, 5 — мусор. Chunk F в top-5 не попал.

Precision@k и recall@k

Precision@k (точность в первых k) — доля релевантных среди top-k. В top-5 два релевантных: precision@5 = 2 / 5 = 0,4. В top-3 те же два: precision@3 = 2 / 3 ≈ 0,67.

Recall@k (полнота в первых k) — доля всех релевантных, попавших в top-k. Всего релевантных три, в top-5 два: recall@5 = 2 / 3 ≈ 0,67. Для recall нужно знать все релевантные chunks в корпусе — это самая дорогая часть разметки.

Пара, которую легко спутать: precision — сколько из пойманного верно; recall — сколько из существующего поймано. Обе метрики не видят порядка внутри top-k: если поменять местами G и мусор на 2-м месте, они не изменятся.

Ещё ловушка precision@k: её потолок зависит от числа релевантных. Если на вопрос в корпусе ровно один нужный chunk, precision@5 не может быть выше 1 / 5 = 0,2 даже у идеального поиска. Поэтому для RAG, где на вопрос обычно 1–3 нужных chunk, precision@k с большим k почти ничего не говорит, а recall@k и ранговые метрики говорят.

MRR: где первый верный

Reciprocal rank (обратный ранг) — 1, делённое на позицию первого релевантного результата; если релевантного нет — 0. Здесь первый релевантный (G) на 1-м месте: RR = 1 / 1 = 1. MRR (mean reciprocal rank, средний обратный ранг) — среднее RR по всем вопросам набора. Пусть во втором вопросе первый релевантный на 2-м месте (RR = 0,5), а в третьем в top-5 релевантных нет (RR = 0): MRR = (1 + 0,5 + 0) / 3 = 0,5.

MRR смотрит только на первый верный результат и не замечает остальных. И он зависит от того, что считать релевантным. Если для вопроса о цифре нужен только T, то RR = 1 / 3 ≈ 0,33: первым стоит полезный, но не отвечающий chunk.

NDCG: порядок и степень полезности

DCG (discounted cumulative gain, накопленная польза со скидкой) учитывает и оценку релевантности, и позицию: польза каждого результата делится на log2(позиция + 1). На 1-м месте делитель 1, на 3-м — 2, на 5-м — около 2,58. Чем ниже, тем меньше вклад.

Наша выдача — оценки по позициям [1, 0, 2, 0, 0]:

DCG@5 = 1 / log2(2) + 2 / log2(4) = 1 / 1 + 2 / 2 = 2,0.

IDCG — DCG идеальной выдачи: все релевантные из разметки, по убыванию оценки, включая F, которого поиск не нашёл. Идеал [2, 1, 1, 0, 0]: 2 / 1 + 1 / 1,585 + 1 / 2 ≈ 3,13.

NDCG@5 (нормированный DCG) = DCG / IDCG = 2,0 / 3,13 ≈ 0,64. Идеальная выдача даёт 1,0, поэтому вопросы можно сравнивать и усреднять.

Теперь поставим reranker, и он переставит выдачу: [T, G, мусор, мусор, мусор]. DCG = 2 / 1 + 1 / 1,585 ≈ 2,63, NDCG ≈ 0,84. Precision@5 осталась 0,4, recall@5 — 0,67. Улучшение увидел только NDCG — это и есть его смысл.

Метрика До rerank После rerank Что видит
precision@5 0,4 0,4 долю верных в top-k
recall@5 0,67 0,67 долю найденного из всех верных
RR (любой релевантный) 1 1 место первого верного
NDCG@5 0,64 0,84 порядок и степень полезности

Какую метрику выбрать

Решение зависит от того, что делает следующий шаг с выдачей.

Ещё два правила. Метрики считают по каждому вопросу и усредняют по набору, а отчитываются по срезам: язык, тип вопроса. И k в отчёте совпадает с k в системе: мерить recall@50, а отдавать модели 5 chunks — значит мерить не то.

Ragas называет Context Precision метрику, которая ближе всего к average precision: precision считается на каждой позиции, где стоит релевантный chunk, и усредняется. Поэтому мусор на 1-м месте штрафуется сильнее, чем на 5-м.

Схема

Термины · Key terms

relevant
релевантный: нужный для ответа по разметке
top-k
первые k результатов выдачи
precision@k
доля релевантных среди первых k
recall@k
доля всех релевантных, попавших в первые k
reciprocal rank
1 / позиция первого релевантного, или 0
MRR (mean reciprocal rank)
средний обратный ранг по всем вопросам
graded relevance
оценка полезности по шкале, а не «да или нет»
DCG
сумма полезности со скидкой log2(позиция + 1)
IDCG
DCG идеальной выдачи
NDCG
DCG / IDCG, от 0 до 1
average precision
среднее precision на позициях релевантных результатов

Сделай сам

Top-5 выдачи: [нет, да, нет, да, нет], всего релевантных документов в корпусе — 3. Посчитай на бумаге precision@5, recall@5 и reciprocal rank. Если останется минута, посчитай NDCG@5 при бинарной релевантности (да = 1, нет = 0).

Обсуди с тьютором: покажи четыре числа с вычислением и спроси, какая из метрик изменится, если поменять местами 1-й и 2-й результаты, а какая нет — и почему.

Проверь себя · ответ под вопросом

1Почему для поиска tools главная метрика — recall@k, а не precision@k?
Tool, который не попал в top-k, модель не увидит и не сможет вызвать — это провал, который ничем не исправить. Лишний tool в top-k модель обычно отсеет сама. Поэтому сначала гарантируем, что нужный tool в выдаче, а лишние держим в разумных пределах.
2Чем MRR отличается от recall@k?
MRR смотрит только на позицию первого релевантного результата и награждает, если он высоко. Recall@k считает, какая доля всех релевантных попала в top-k, и не смотрит на порядок. Для одного верного ответа важнее MRR, для набора нужных chunks в context — recall@k.
3NDCG награждает верный chunk на первом месте сильнее, чем на пятом. Когда это важно для RAG, а когда почти нет?
Важно, когда используются только первые 1–3 результата или выдачу читает человек сверху вниз. Почти не важно, когда все top-k кладутся в context и модель читает их целиком — тогда главное recall@k. Но и там слишком длинный context с нужным chunk глубоко внизу может ухудшить ответ, поэтому порядок проверяют замером.

Interview questions · US / UK

1Define precision at k, recall at k, MRR and NDCG, and say when you'd use each.
Strong answer: precision@k = relevant in top-k / k; recall@k = relevant in top-k / all relevant; MRR = mean of 1/rank of first relevant; NDCG = graded, position-discounted gain over the ideal; recall@k when all top-k go to the model, MRR/NDCG when order matters.
2Your reranker didn't change recall@20 at all. Did it do nothing?
Strong answer: recall@k is order-blind within k; look at NDCG, MRR or recall@5 at the cut actually passed to the model; also check answer quality downstream; measure on the same golden set and slices.
3Scenario: an agent picks among 5,000 tools via search. Which retrieval metric do you put on the dashboard, and why?
Strong answer: recall@k at the k shown to the model, because a hidden tool can never be called; separately, did the model call the right tool among those shown; track precision to control context cost; per-domain slices.

Ключевые фразы · Say it aloud

Материалы