Выбор и настройка векторный поиск для рекомендаций
Как выбрать 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.