Назад к подготовке

Выбор и настройка векторный поиск для рекомендаций

Как выбрать FAISS, HNSW-based CPU индекс, Redis, Qdrant или Elasticsearch для поиска ближайших embedding? Какие параметры и метрики смотреть?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

Выбор зависит от latency, recall, масштаба, update pattern, фильтров, memory cost и того, кто будет поддерживать инфраструктуру. Проверять нужно recall@K против exact search, p95 latency, build/update time, memory и downstream candidate coverage.

Полный разбор

Сначала формулируется access pattern: сколько vectors, какой K, какой QPS, нужны ли filters, как часто обновляются embeddings, нужна ли persistence, GPU или CPU, batch search или online запросы. FAISS силен для high-performance ANN и GPU/batch сценариев. HNSW на CPU часто удобен для low-latency retrieval. Vector DB вроде Qdrant добавляют persistence, filters и operational API. Redis хорош, если уже используется как low-latency store. Elasticsearch полезен, когда vector search надо смешать с text search и фильтрами.

Сравнивать нужно эмпирически. Берем exact nearest-neighbor sample как baseline и меряем recall@K, p95/p99 latency, memory, build time, update cost и degradation при фильтрах. Для рекомендаций отдельно смотрим candidate coverage и downstream ranking/online metrics, потому что ANN recall сам по себе не гарантирует хороший продукт.

Для HNSW важны M, efConstruction и efSearch: они двигают trade-off memory/build time/recall/latency. Distance metric должна соответствовать обучению embedding: cosine для normalized vectors, dot product или L2 - если так задан objective.

Теория

Vector-store выбор - это компромисс между качеством поиска, скоростью, памятью, обновлениями и операционной простотой.

Типичные ошибки

  • Выбрать библиотеку без benchmark на своих embeddings.
  • Смотреть только recall и забыть p95 latency и memory.
  • Игнорировать filters и частоту обновлений.

Как отвечать на собеседовании

  • Скажите, как построите exact-search baseline для оценки recall@K.
  • Назовите efSearch как online ручку recall/latency для HNSW.