Записки странствующего инженера
Чат — https://t.me/ruslandevchat
ЛС — @ruslanperesy
Post #198
413
Всем привет, сегодняшний пост о том, как оценивают качество RAG в enterprise-grade пайплайнах. Большинство разработчиков знают основы, но в этот раз вашему вниманию представлен разбор метрик, реально используемых для оценки производительности RAG систем по их составляющим. Спойлер: одной метрикой тут не обойтись.
Материалом поделились коллеги из Embedika.
Во-первых, метрики ранжирования, оценивающие релевантность чанков. Для них требуется эталонная разметка: для каждого запроса должно быть известно, какие чанки релевантны.
Возьмем
Показатель MRR критически важен, когда для ответа на вопрос достаточно найти хотя бы один точный фрагмент текста. Но есть минус: метрика игнорирует все релевантные чанки после первого. Если вам нужна именно доля релевантных чанков в выдаче, например, среди первых k, то используйте
Но она не учитывает порядок. Два варианта выдачи с одинаковым количеством релевантных чанков получат равную оценку, даже если в одном из них они стоят выше. Поэтому рассмотрим следующий класс – метрики с учетом порядка результатов.
Они штрафуют за низкое положение релевантных чанков. Простой пример –
где
Она нормирована, поэтому сравнима между разными запросами.
Но точность — не единственный критерий. Важно не упустить релевантные чанки, и с этим помогают метрики, оценивающие полноту поиска.
Эта метрика показывает, сколько полезной информации мы вообще достали из базы знаний.
Когда у нас есть датасет эталонных ответов, можно использовать классические метрики сравнения текстов.
Однако обе метрики плохо работают, если ответ корректный по смыслу, но сформулирован другими словами — совпадение n-грамм будет низким. Поэтому нужны метрики сравнения на уровне смысла, чтобы компенсировать ограничения n-граммных метрик. Они используют методы, оценивающие семантическую близость ответов.
Формулы для одного ответа:
Такой подход значительно устойчивее к перефразу.
Наконец, стоит упомянуть методы оценки генерации, если эталонов нет. Основное решение –
Отдельная LLM оценивает ответ по заданным критериям. В промпт закладываются: запрос, найденный контекст, сгенерированный ответ, критерии и шкала баллов. Модель проверяет релевантность, опору на контекст и наличие галлюцинаций. Этот метод особенно полезен, когда мы не можем сформулировать «правильный» ответ.
Оценка RAG — это совокупность метрик, каждая из которых закрывает свой класс ошибок. Выбор зависит от задачи и доступных данных.
Материалом поделились коллеги из Embedika.
Во-первых, метрики ранжирования, оценивающие релевантность чанков. Для них требуется эталонная разметка: для каждого запроса должно быть известно, какие чанки релевантны.
Возьмем
MRR (Mean Reciprocal Rank) — позиция первого релевантного чанка:RR = 1 / min{ i | r_i = 1 }Показатель MRR критически важен, когда для ответа на вопрос достаточно найти хотя бы один точный фрагмент текста. Но есть минус: метрика игнорирует все релевантные чанки после первого. Если вам нужна именно доля релевантных чанков в выдаче, например, среди первых k, то используйте
Precision@k:precision@k = (sum_{i=1..k} r_i) / kНо она не учитывает порядок. Два варианта выдачи с одинаковым количеством релевантных чанков получат равную оценку, даже если в одном из них они стоят выше. Поэтому рассмотрим следующий класс – метрики с учетом порядка результатов.
Они штрафуют за низкое положение релевантных чанков. Простой пример –
AP@k (Average Precision@k):AP@k = (1 / min(R, k)) × Σ(i=1..k) Precision@i × r_i,где
R — число релевантных чанков в эталонной разметке, а r_i равно 1, если чанк на позиции i релевантен. Используют также усреднение этой метрики по всем запросам MAP@k.nDCG@k (Normalized Discounted Cumulative Gain) — учитывает позицию каждого релевантного чанка через логарифмический штраф. Случай для простой (relevant / not relevant) бинарной релевантности:DCG@k = sum_{i=1..k} r_i / log2(i+1)nDCG@k (Normalized Discounted Cumulative Gain) = DCG@k / IDCG@k, где IDCG — идеальное ранжирование.Она нормирована, поэтому сравнима между разными запросами.
Но точность — не единственный критерий. Важно не упустить релевантные чанки, и с этим помогают метрики, оценивающие полноту поиска.
Recall@k — доля найденных релевантных чанков среди всех существующих:recall@k = sum_{i=1..k} r_i / sum_{i=1..N} r_iЭта метрика показывает, сколько полезной информации мы вообще достали из базы знаний.
Когда у нас есть датасет эталонных ответов, можно использовать классические метрики сравнения текстов.
BLEU — считает точность совпадения n-грамм (обычно от 1 до 4) между сгенерированным и эталонным ответом. Учитывает штраф за краткость.BLEU = BP * exp(sum w_n * ln p_n)ROUGE — работает с теми же n-граммами, но вычисляет precision, recall и F-меру.Однако обе метрики плохо работают, если ответ корректный по смыслу, но сформулирован другими словами — совпадение n-грамм будет низким. Поэтому нужны метрики сравнения на уровне смысла, чтобы компенсировать ограничения n-граммных метрик. Они используют методы, оценивающие семантическую близость ответов.
BERTScore — считает косинусную близость между токенами сгенерированного и эталонного ответов с использованием моделей-энкодеров.Формулы для одного ответа:
p_BERTScore = (1/|y_hat|) * sum_{i} max_{j} cos(E(y_hat_i), E(y_j))
r_BERTScore = (1/|y|) * sum_{j} max_{i} cos(E(y_j), E(y_hat_i))
F_BERTScore = 2 * p * r / (p + r)Такой подход значительно устойчивее к перефразу.
Наконец, стоит упомянуть методы оценки генерации, если эталонов нет. Основное решение –
LLM-as-a-judge.Отдельная LLM оценивает ответ по заданным критериям. В промпт закладываются: запрос, найденный контекст, сгенерированный ответ, критерии и шкала баллов. Модель проверяет релевантность, опору на контекст и наличие галлюцинаций. Этот метод особенно полезен, когда мы не можем сформулировать «правильный» ответ.
Оценка RAG — это совокупность метрик, каждая из которых закрывает свой класс ошибок. Выбор зависит от задачи и доступных данных.
- 👍 8
- 🔥 3
- 👀 2






