Как вы оцениваете retrieval с учетом позиции (Position-aware metrics)?

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

Позиционно-чувствительные метрики (metrics|position-aware metrics) оценивают не только факт нахождения релевантных документов, но и их порядок в выдаче. Основные метрики — NDCG (Cumulative Gain) и MAP (Mean Average Precision). Они штрафуют систему, если релевантный документ оказывается на низкой позиции, и поощряют ранжирование наиболее релевантных документов в начале списка. В контексте RAG и RAG|Agentic RAG это критично, так как LLM или агент часто используют только top‑k результатов, и качество ответа напрямую зависит от того, насколько хорошо отсортированы первые позиции.


1. Термин: Position-aware metrics (позиционно-чувствительные метрики)

Position-aware metrics — это метрики оценки качества ранжирования, которые учитывают порядок (позицию) документов в выдаче retrieval‑системы. В отличие от метрик, игнорирующих позицию (например, Recall@k или Precision@k), они присваивают больший вес релевантным документам, оказавшимся на первых местах.

Зачем это нужно в RAG

  • LLM получает на вход ограниченное число чанков (обычно top‑3…top‑10). Если самый релевантный документ находится на 5‑м месте, а первые четыре — шум, ответ может быть неверным.
  • В RAG|Agentic RAG агент может делать несколько раундов поиска, но на каждом шаге он опирается на первые результаты. Плохое ранжирование снижает эффективность агента.
  • Позиционно‑чувствительные метрики позволяют точнее оценить, насколько retrieval «удобен» для downstream‑задачи.

2. Метрики, не учитывающие позицию (для контраста)

Прежде чем перейти к position‑aware, полезно вспомнить простые метрики:

МетрикаЧто измеряетНедостаток
Precision@kДоля релевантных среди top‑kНеважно, на каком месте релевантный документ
Recall@kДоля всех релевантных, попавших в top‑kНе штрафует за порядок
Hit Rate@kХотя бы один релевантный в top‑kЕщё грубее — не различает 1‑е и 10‑е место

Эти метрики полезны для быстрой проверки, но не отражают качество ранжирования. Например, если релевантный документ всегда на 10‑м месте, Recall@10 = 100%, но пользователь (или LLM) его не увидит.


3. Average Precision (AP) и Mean Average Precision (MAP)

Average Precision (AP) — метрика, которая усредняет Precision после каждого найденного релевантного документа, учитывая его позицию.

Формула

AP = (1 / R) * Σ_{k=1}^{K} (Precision@k * rel(k))

где:

  • R — общее количество релевантных документов в gold‑стандарте для данного запроса,
  • K — глубина выдачи (обычно K = 10 или 20),
  • rel(k) = 1, если документ на позиции k релевантен, иначе 0.

Пример: Запрос: «Как работает attention
Gold‑стандарт: 3 релевантных документа (R=3).
Выдача retrieval (первые 5 позиций):

  1. Документ A (релевантный)
  2. Документ B (нерелевантный)
  3. Документ C (релевантный)
  4. Документ D (нерелевантный)
  5. Документ E (релевантный)

Считаем Precision@k для каждой позиции, где есть релевантный:

  • k=1: Precision@1 = 1/1 = 1.0, rel=1 → вклад 1.0
  • k=3: Precision@3 = 2/3 ≈ 0.667, rel=1 → вклад 0.667
  • k=5: Precision@5 = 3/5 = 0.6, rel=1 → вклад 0.6

AP = (1/3) * (1.0 + 0.667 + 0.6) = (1/3) * 2.267 ≈ 0.756

Mean Average Precision (MAP) — среднее AP по всем запросам тестового набора.
MAP = (1 / Q) * Σ_{q=1}^{Q} AP(q)

Когда использовать MAP

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

4. NDCG (Normalized Discounted Cumulative Gain)

NDCG — более гибкая метрика, которая может работать с градуальной релевантностью (например, оценки 0,1,2,3). Она основана на идее «дисконтирования» (discount) — чем ниже позиция, тем меньше вклад документа.

Этапы расчёта

  1. Cumulative Gain (CG) — сумма релевантностей первых k документов:
    CG@k = Σ_{i=1}^{k} rel(i)

  2. Discounted Cumulative Gain (DCG) — штраф за позицию с помощью логарифмического дисконта:
    DCG@k = Σ_{i=1}^{k} (rel(i) / log₂(i+1))

    Часто используют формулу с rel(i) = 2^{rel(i)} - 1 для нелинейного усиления высоких оценок.

  3. Ideal DCG (IDCG) — DCG для идеального порядка (сначала самые релевантные).

  4. NDCG@k = DCG@k / IDCG@k

Пример (бинарная релевантность, оценки 0/1): Выдача: [1, 0, 1, 0, 1] (релевантность на позициях 1,3,5).
DCG@5 = 1/log₂(2) + 0/log₂(3) + 1/log₂(4) + 0/log₂(5) + 1/log₂(6)
= 1/1 + 0 + 1/2 + 0 + 1/2.585 ≈ 1 + 0.5 + 0.387 = 1.887
Идеальный порядок: [1,1,1,0,0] → IDCG@5 = 1/1 + 1/1.585 + 1/2 + 0 + 0 = 1 + 0.631 + 0.5 = 2.131
NDCG@5 = 1.887 / 2.131 ≈ 0.886

Преимущества NDCG

  • Поддерживает многоуровневую релевантность (например, «идеально», «хорошо», «плохо»).
  • Нормализован (от 0 до 1), что позволяет усреднять по запросам с разным числом релевантных документов.
  • Широко используется в соревнованиях по ранжированию (TREC, NDCG@10).

5. Сравнение MAP и NDCG

ХарактеристикаMAPNDCG
Тип релевантностиБинарнаяБинарная или градуальная
Учёт позицииДа (через Precision@k)Да (логарифмический дисконт)
НормализацияПо числу релевантных (R)По идеальному порядку (IDCG)
Чувствительность к началу спискаВысокая (первые позиции дают большой вклад)Высокая (дисконт быстро растёт)
Популярность в RAGЧасто используется в научных работахСтандарт для оценки ранжирования

Когда что выбирать

  • Если у вас только бинарные метки (релевантен/не релевантен) и важно покрытие всех релевантных документов — используйте MAP.
  • Если у вас есть оценки релевантности (например, от 0 до 3) или вы хотите более тонкий штраф за порядок — используйте NDCG.
  • Для быстрой валидации в RAG‑пайплайне часто берут NDCG@k (k = 5 или 10).

6. Практические аспекты вычисления

Реализация на Python (библиотека sklearn):

from sklearn.metrics import ndcg_score, average_precision_score
import numpy as np

# Пример: 3 запроса, 5 документов, бинарная релевантность
y_true = np.array([[1, 0, 1, 0, 0],   # запрос 1: релевантны 1 и 3
                   [0, 1, 0, 1, 0],   # запрос 2: релевантны 2 и 4
                   [1, 1, 0, 0, 0]])  # запрос 3: релевантны 1 и 2

# Предсказанные релевантности (scores) — чем выше, тем лучше позиция
y_score = np.array([[0.9, 0.3, 0.8, 0.2, 0.1],
                    [0.2, 0.9, 0.4, 0.7, 0.3],
                    [0.8, 0.7, 0.5, 0.4, 0.2]])

# NDCG@5
ndcg = ndcg_score(y_true, y_score, k=5)
print(f"NDCG@5: {ndcg:.4f}")  # ≈ 0.882

# MAP (average_precision_score ожидает бинарные метки и scores)
ap_list = []
for i in range(y_true.shape[0]):
    ap = average_precision_score(y_true[i], y_score[i])
    ap_list.append(ap)
map_score = np.mean(ap_list)
print(f"MAP: {map_score:.4f}")  # ≈ 0.833

Важные замечания

  • Для NDCG y_true может содержать небинарные оценки (например, 0,1,2).
  • В RAG‑экспериментах gold‑стандарт часто создаётся вручную или с помощью LLM‑асессора.
  • Метрики считаются на уровне запросов, затем усредняются.

7. Связь с Agentic RAG

В Agentic RAG агент может выполнять несколько шагов retrieval, переформулировать запросы и комбинировать результаты. Позиционно‑чувствительные метрики здесь особенно важны:

  • Multi‑step retrieval: на каждом шаге агент берёт top‑k документов. Если на первом шаге релевантный документ оказался на 10‑м месте, агент может его пропустить.
  • Re‑ranking: после первичного поиска часто применяется re‑ranker (например, cross‑encoder). Оценка re‑ranker’а также требует position‑aware метрик.
  • Evaluation of agent trajectories: можно измерять NDCG на каждом шаге или финальный NDCG после всех итераций.

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

Задача Реализовать пайплайн оценки retrieval с position‑aware метриками для небольшого корпуса документов.

Инструменты

  • Python, scikit-learn, numpy, pandas
  • Векторная БД (FAISS или Chroma) для retrieval
  • Датасет: например, fiqa (Financial Question Answering) или любой QA‑датасет с размеченными релевантными документами.

Шаги:

  1. Загрузите датасет с запросами и списком релевантных документов (gold‑стандарт).
  2. Постройте индекс эмбеддингов (используйте sentence-transformers).
  3. Для каждого запроса выполните retrieval (top‑10).
  4. Рассчитайте Precision@k, Recall@k, MAP@10, NDCG@10.
  5. Сравните метрики для разных моделей эмбеддингов (например, all‑MiniLM‑L6‑v2 vs bge‑large‑en).
  6. Визуализируйте распределение позиций релевантных документов (гистограмма).

Ожидаемый результат

  • Таблица с метриками для каждой модели.
  • Вывод: какая модель даёт лучшее ранжирование (по NDCG и MAP).
  • Понимание, как позиция влияет на итоговое качество retrieval.

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

ВопросТема
5Как вы оцениваете качество retrieval'а в RAG-системе?
6Какие метрики вы используете для оценки генерации (faithfulness, answer relevance)?
10Что такое Self-RAG и когда его использовать?
378Как вы оцениваете качество retrieval без учёта позиции?
380Как вы оцениваете качество re‑ranking в RAG?
381Как вы оцениваете качество Agentic RAG в целом?

10. Навигация


Навигация