RAG · Retrieval-augmented generation · урок 8 · 14 мин
Метрики ранжирования: precision@k, recall@k, MRR, NDCG
Ranking metrics: precision@k, recall@k, MRR, NDCG
Зачем
После урока ты посчитаешь на бумаге 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:
- T — таблица тарифа с цифрой, самый нужный (оценка 2);
- G — общие условия досрочного погашения (оценка 1);
- F — вопрос-ответ о досрочке (оценка 1).
Поиск вернул 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 | порядок и степень полезности |
Какую метрику выбрать
Решение зависит от того, что делает следующий шаг с выдачей.
- Все top-k идут в context модели (всё, что она видит в запросе). Модель читает их все, и главное — чтобы нужное вообще там было: смотрим recall@k. Так Anthropic мерила contextual retrieval: доля промахов в top-20, то есть 1 − recall@20.
- Используются только первые 1–3 результата или выдачу видит человек, который читает сверху. Тогда порядок решает всё: NDCG или MRR.
- Нужен один верный ответ (одна политика, один tool). MRR: насколько высоко первый верный.
- Поиск tools (функций агента) среди тысяч описаний. Главная метрика — recall@k: tool, который не попал в top-k, модель не сможет вызвать никогда. Лишний tool в top-5 — меньшая беда, модель выберет из пяти. Precision при этом не игнорируют совсем: десятки лишних описаний тратят context и путают модель.
Ещё два правила. Метрики считают по каждому вопросу и усредняют по набору, а отчитываются по срезам: язык, тип вопроса. И 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?
2Чем MRR отличается от recall@k?
3NDCG награждает верный chunk на первом месте сильнее, чем на пятом. Когда это важно для RAG, а когда почти нет?
Interview questions · US / UK
1Define precision at k, recall at k, MRR and NDCG, and say when you'd use each.
2Your reranker didn't change recall@20 at all. Did it do nothing?
3Scenario: an agent picks among 5,000 tools via search. Which retrieval metric do you put on the dashboard, and why?
Ключевые фразы · Say it aloud
- Recall at k is order-blind inside the top krecall@k не видит порядка внутри top-k
- MRR only looks at the first relevant resultMRR смотрит только на первый верный
- NDCG rewards putting the most useful result firstNDCG награждает самое полезное наверху
- A tool that isn't retrieved can never be calledtool, которого нет в выдаче, не вызовут никогда
- Measure at the same k you pass to the modelмерить при том же k, что идёт в модель
Материалы
- Discounted cumulative gain — Wikipedia — формулы DCG, IDCG, NDCG и разобранный пример на шести позициях (8 мин)
- Mean reciprocal rank — Wikipedia — определение и пример на трёх запросах (3 мин)
- Evaluation measures (information retrieval) — Wikipedia — precision@k, recall, R-precision, average precision (10 мин)
- Ragas — Context Precision — как эта логика выглядит в библиотеке оценки RAG (5 мин)