Как осуществляется финальная фильтрация кандидатов с помощью реранкера
Что проверяют
Понимаете ли вы многоступенчатое ранжирование: зачем нужен отдельный дорогой этап поверх отбора и где его граница по задержке. «Кандидаты» здесь это объекты, найденные на этапе отбора (документы, товары, чанки для RAG), а не люди. Следом спрашивают, как выбрать размер K и чем cross-encoder отличается от bi-encoder.
Как отвечать
Опишите воронку:
- отбор (retrieval): быстрые методы по миллионам объектов: BM25, ANN-поиск по эмбеддингам (HNSW в FAISS, pgvector, Qdrant). На выходе сотни или тысячи кандидатов, цель этапа это recall;
- ранжирование: градиентный бустинг, например LightGBM с целевой функцией
lambdarankили CatBoost, на признаках запроса, объекта и пользователя; - реранкер: тяжёлая модель на топ-50…200. Чаще всего cross-encoder: запрос и документ подаются в трансформер вместе, и модель видит их взаимодействие. Он точнее bi-encoder, но заранее ничего не посчитать, и стоимость растёт линейно по K;
- финальные правила: порог по скору, дедупликация, фильтры доступности и уже просмотренного, разнообразие (MMR), бизнес-ограничения.
Минимальный код:
from sentence_transformers import CrossEncoder
model = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-6-v2")
scores = model.predict([(query, d) for d in docs], batch_size=32)
top = [docs[i] for i in scores.argsort()[::-1][:10]]Качество оценивайте метриками ранжирования: NDCG@k и MRR, а Recall@k отбора считайте потолком для реранкера. Затем онлайн через A/B-тест. Про задержку скажите явно: реранкер часто съедает большую часть бюджета ответа, поэтому K подбирают по кривой «качество против p99».
Где спотыкаются
Считают, что реранкер исправит плохой отбор. Если нужного документа нет в топ-K, никакая модель его не поднимет, поэтому сначала меряют recall отбора.
Оценивают реранкер через accuracy или F1 по порогу. Для ранжирования важен порядок выдачи, это NDCG и MRR.
Обучают на кликах без поправки на позицию. Модель учится повторять старую выдачу: верхние позиции кликают просто потому, что они сверху.