Как работает индекс HNSW и какие у него настройки?
- Что такое HNSW?
- Что такое ef_search и M?
HNSW строит многоуровневый граф близости векторов: на верхних уровнях мало точек и длинные связи, на нижних — все точки и короткие связи. Поиск начинается сверху и жадно спускается к ближайшим соседям — это быстро, но приближённо: часть настоящих ближайших может быть пропущена. Настройки: M (число связей у вершины — больше точность и память), ef_construction (тщательность построения — дольше индексация), ef_search (ширина поиска — точнее, но медленнее запрос).
- Компромисс: полнота (recall) против скорости и памяти
- ef_search можно менять на лету, M и ef_construction — только при построении
- Фильтрация по метаданным может резко снизить полноту — нужна поддержка фильтров в индексе
А ещё Полноту измеряют, сравнивая с точным перебором на выборке запросов
Подробно
Пример (pgvector):
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
SET hnsw.ef_search = 100;
Как подобрать:
- Взять выборку запросов, найти точных соседей перебором.
- Для разных ef_search измерить recall@10 и задержку.
- Выбрать минимальный ef_search с допустимой полнотой.
Альтернативы: IVF (кластеры, меньше памяти, нужна обучающая выборка), сжатие векторов (PQ) для очень больших объёмов.
Что хотят услышать
- Многоуровневый граф и жадный спуск.
- Параметры M, ef_construction, ef_search.
- Компромисс полноты, скорости и памяти.
- Измерение полноты против точного перебора.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Многоуровневый граф; ef_search — баланс полноты и скорости
- ✗HNSW всегда находит точных ближайших соседей при любых настройках
- ✗Плоский граф без уровней; ef_search задаётся только при построении
- ✗Увеличение M уменьшает и память, и время поиска
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.