中文翻译暂不可用,显示俄语原文。
Как вы калибруете retrieval confidence для threshold-based filtering?
Краткий тезис
Retrieval confidence — это rating|числовая оценка (score), которую поисковая система присваивает каждому найденному документу, показывая, насколько он релевантен запросу. Threshold-based filtering отсекает документы с confidence ниже заданного порога. Проблема в том, что сырые scores (например, cosine similarity) не являются вероятностями и плохо калиброваны: score 0.7 не означает «70% вероятность релевантности». Калибровка через Platt scaling или isotonic regression преобразует scores в калиброванные вероятности, что позволяет выбирать осмысленный порог (например, 0.5) и улучшает downstream-качество RAG.
1. Термины: retrieval confidence, threshold-based filtering, калибровка
Retrieval confidence — это score, который retrieval-модель (например, на основе косинусного расстояния между эмбеддингами запроса и документа) возвращает для каждого кандидата. Чем выше score, тем «увереннее» модель в релевантности.
Threshold-based filtering — простейший способ отбора документов: оставить только те, чей confidence превышает фиксированный порог (например, 0.6). Это дешевле, чем реранжирование, но критично зависит от качества scores.
Калибровка (calibration) — процесс преобразования сырых scores в вероятности, которые можно интерпретировать как P(relevant | score). Хорошо калиброванная модель: если она говорит «вероятность 0.8», то в 80% случаев документ действительно релевантен.
Platt scaling — метод калибровки, при котором на scores обучается логистическая регрессия (сигмоида). Подходит, когда распределение scores имеет монотонную связь с логарифмом шансов.
Isotonic regression — непараметрический метод, который строит монотонно возрастающую кусочно-линейную функцию. Не требует предположения о форме связи, но склонен к переобучению на малых данных.
2. Почему сырые scores не подходят для пороговой фильтрации
Большинство retrieval-моделей (cosine similarity, dot product, L2 distance) выдают scores, которые:
- не нормированы на [0,1];
- зависят от конкретной модели и датасета;
- не отражают истинную вероятность релевантности.
Пример: cosine similarity = 0.75 для одной модели может соответствовать 90% релевантных документов, а для другой — только 40%. Если установить порог 0.7, в первом случае отсечётся слишком мало, во втором — слишком много.
Последствия для RAG:
- False positives (нерелевантные документы с высоким score) загрязняют контекст LLM, снижая faithfulness.
- False negatives (релевантные документы с низким score) приводят к пропуску нужной информации, ухудшая answer relevance.
3. Методы калибровки: Platt scaling и isotonic regression
3.1 Platt scaling
Идея: обучить логистическую регрессию на парах (score, label), где label = 1, если документ релевантен, и 0 иначе. Полученная сигмоида преобразует score в калиброванную вероятность:
[ P(y=1 | s) = \frac{1}{1 + \exp(A \cdot s + B)} ]
Параметры A и B находятся минимизацией log-loss на validation set.
Когда использовать:
- Scores имеют примерно монотонную связь с логарифмом шансов.
- Мало данных (Platt scaling устойчивее к переобучению).
- Scores распределены нормально или близко к нормальному.
Пример кода (scikit-learn):
from sklearn.linear_model import LogisticRegression
from sklearn.calibration import CalibratedClassifierCV
# Допустим, у нас есть scores и бинарные метки релевантности
scores_train = ... # (n_samples, 1) или (n_samples,)
labels_train = ... # 0/1
# Обучаем Platt scaling (логистическая регрессия на одном признаке)
calibrator = LogisticRegression(C=1e10, solver='lbfgs') # C большое = почти без регуляризации
calibrator.fit(scores_train.reshape(-1, 1), labels_train)
# Применяем к новым scores
calibrated_probs = calibrator.predict_proba(scores_test.reshape(-1, 1))[:, 1]
3.2 Isotonic regression
Идея: построить монотонно возрастающую кусочно-линейную функцию, которая минимизирует среднеквадратичную ошибку между предсказаниями и метками.
Когда использовать:
- Много данных (isotonic regression легко переобучается при <1000 точек).
- Связь между score и вероятностью немонотонна (редко, но бывает).
- Нет уверенности в форме зависимости.
Пример кода:
from sklearn.isotonic import IsotonicRegression
iso_reg = IsotonicRegression(out_of_bounds='clip')
iso_reg.fit(scores_train, labels_train)
calibrated_probs = iso_reg.transform(scores_test)
3.3 Сравнение методов
| Характеристика | Platt scaling | Isotonic regression |
|---|---|---|
| Параметрический | Да (2 параметра) | Нет (кусочно-линейная) |
| Устойчивость к переобучению | Высокая | Низкая |
| Требования к данным | Мало данных | Много данных (>1000) |
| Предположения | Монотонная логит-линейная связь | Только монотонность |
| Интерпретируемость | Простая формула | Сложнее |
4. Оценка качества калибровки
4.1 Reliability diagram (калибровочная кривая)
По оси X — предсказанные вероятности (разбиты на бины), по оси Y — доля истинно релевантных документов в бине. Идеальная калибровка — диагональ y=x.
4.2 Expected Calibration Error (ECE)
Средневзвешенное отклонение от диагонали:
[ ECE = \sum_{m=1}^{M} \frac{|B_m|}{n} \left| [text](/wiki/text){accuracy}(B_m) - [text](/wiki/text){confidence}(B_m) \right| ]
где (B_m) — m-й бин, (|B_m|) — число примеров в бине, n — всего примеров.
Интерпретация:
- ECE < 0.05 — отличная калибровка.
- ECE 0.05–0.10 — приемлемо.
- ECE > 0.10 — нужна калибровка.
4.3 Log-loss (кросс-энтропия)
Чем ниже log-loss, тем лучше калибровка (при фиксированной дискриминационной способности).
5. Процесс калибровки для threshold-based filtering
-
Сбор validation set:
- Берём запросы из тестового/валидационного набора.
- Для каждого запроса ранжируем документы с помощью retrieval.
- Размечаем релевантность (бинарно: 1 — релевантен, 0 — нет). Можно использовать LLM-as-judge или человеческую разметку.
-
Обучение калибратора:
- Используем scores и метки релевантности.
- Выбираем метод (Platt или isotonic) в зависимости от объёма данных.
- Обучаем на validation set (не на train, чтобы избежать утечки).
-
Выбор порога:
- После калибровки scores становятся вероятностями.
- Строим precision-recall curve или ROC curve на validation set.
- Выбираем порог, максимизирующий F1-score или минимизирующий false positive rate при заданном recall.
- Пример: порог 0.5 означает, что оставляем документы, которые с вероятностью >50% релевантны.
-
Валидация на тестовом наборе:
- Проверяем, что порог даёт приемлемое качество на отложенных данных.
- Измеряем downstream-метрики RAG (faithfulness, answer relevance).
6. Особенности для Agentic RAG
В Agentic RAG агент может динамически решать, какие документы использовать. Калиброванный confidence помогает:
- Filtering: отсеивать шумные документы до передачи в контекст.
- Adaptive retrieval: если confidence всех документов низок, агент может решить переформулировать запрос или выполнить дополнительный поиск.
- Multi-step reasoning: агент может ранжировать шаги по уверенности.
Пример: агент получает 5 документов с калиброванными вероятностями [0.9, 0.7, 0.4, 0.3, 0.1]. При пороге 0.5 он оставляет первые два. Если ни один не превышает 0.5, агент инициирует новый поиск.
7. Альтернативы и дополнения
- LLM-as-judge для реранжирования: вместо калибровки можно использовать LLM для оценки релевантности каждого документа (дорого, но точнее).
- Обучение отдельного классификатора релевантности: на эмбеддингах запроса и документа (cross-encoder). Это даёт сразу калиброванные вероятности, если использовать log-loss.
- Temperature scaling: простой вариант Platt scaling с одним параметром (A=1/T, B=0). Менее гибкий, но стабильный.
8. Практические советы
- Не калибруйте на train set — будет переоценка качества.
- Используйте стратификацию при разбиении validation set, чтобы сохранить распределение релевантных/нерелевантных.
- Для малых данных (сотни примеров) предпочитайте Platt scaling с сильной регуляризацией (C=1).
- Для больших данных (тысячи+) isotonic regression может дать лучшую калибровку.
- Проверяйте калибровку отдельно для разных типов запросов (фактологические vs. генеративные) — распределение scores может отличаться.
- После калибровки порог можно выбирать не по вероятности, а по процентилю (например, оставлять top-20% по калиброванному score) — это устойчивее к дрейфу данных.
Пет-проект для закрепления
Задача: Реализовать систему калибровки retrieval confidence для небольшого RAG-приложения (например, Q&A по документации библиотеки).
Инструменты: Python, sentence-transformers, FAISS, scikit-learn, matplotlib.
Шаги:
- Соберите датасет: 200–500 запросов, для каждого вручную отметьте релевантные чанки (можно попросить коллег или использовать LLM для разметки).
- Запустите retrieval (например, all-MiniLM-L6-v2), получите scores для top-10 чанков на запрос.
- Разделите данные на train/validation (80/20).
- Обучите Platt scaling и isotonic regression на train.
- Постройте reliability diagrams для сырых scores и для каждого метода калибровки на validation.
- Выберите порог по F1-score на validation.
- Интегрируйте калиброванный фильтр в RAG-пайплайн и сравните ответы LLM (например, GPT-4o-mini) с/без фильтрации.
Ожидаемый результат: Вы увидите, что после калибровки порог 0.5 даёт осмысленное отсечение, а ECE снижается с 0.15 до <0.05. Ответы LLM станут более точными (меньше галлюцинаций из-за нерелевантных документов).
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 5 | Метрики retrieval (HR, MRR, Recall) — калибровка улучшает эти метрики при пороговой фильтрации |
| 7 | Threshold-based filtering снижает latency за счёт отбрасывания лишних документов; калибровка делает фильтр эффективнее |
| 9 | При обновлении документов распределение scores может меняться, требуется перекалибровка |
| 10 | Self-RAG использует confidence для принятия решений о необходимости поиска; калибровка критична |
| 1 | В архитектуре нужно предусмотреть модуль калибровки и выбора порога |
| 3 | Размер чанков влияет на scores и их калибровку (мелкие чанки дают более шумные scores) |
Навигация
- Предыдущий: 374
- Следующий: 376
- Индекс: 00. Индекс разборов