Sobes.tech
Назад к вопросам
Middle — Senior
10

Какие гиперпараметры HNSW важны (M, efConstruction, efSearch)?

Компании, где спрашивали
GravityField
AntiFraud Lab

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

HNSW настраивают через параметры, которые напрямую влияют на качество поиска, скорость построения индекса и потребление памяти. Обычно важно понимать компромисс: чем выше точность, тем больше память и время. На собеседовании ждут объяснение роли M, efConstruction и efSearch и умение выбрать их под задачу.

Определение:

HNSW (Hierarchical Navigable Small World) — это графовый алгоритм приблизительного поиска ближайших соседей.
M задаёт, сколько связей у вершины хранится в графе: больше связей обычно улучшает качество поиска, но увеличивает память и время построения.
efConstruction управляет качеством построения индекса: чем он выше, тем лучше граф, но медленнее индексация.
efSearch управляет качеством во время поиска: чем он выше, тем точнее результат, но медленнее запрос.

Пример использования:

Например, для векторного поиска по каталогу товаров можно выбрать умеренный M, чтобы не раздувать память, высокий efConstruction при офлайн-построении индекса и средний efSearch для онлайн-запросов, чтобы удержать баланс между latency и recall.

# Пример параметров HNSW векторного индекса
index_params = {
    "M": 16,
    "efConstruction": 200,
    "efSearch": 64
}

# Логика настройки:
# - M=16: умеренная связность графа
# - efConstruction=200: качественнее строим индекс
# - efSearch=64: достаточно хороший поиск при приемлемой задержке

Пояснение кода:

В примере показан типичный набор настроек, который часто используют как стартовую точку.
M=16 означает, что у каждой точки будет ограниченное число связей, что снижает расход памяти.
efConstruction=200 делает построение индекса более тщательным, поэтому итоговый граф обычно лучше подходит для поиска.
efSearch=64 задаёт размер поискового "фронта": поиск проверяет больше кандидатов и повышает recall, но отвечает медленнее.

Ключевые моменты:

  • M — влияет на плотность графа, память и качество поиска.
  • efConstruction — влияет на качество индекса и время его построения.
  • efSearch — влияет на точность/recall и latency запросов.
  • Обычно efConstruction ставят выше, чем efSearch, потому что индекс строится один раз, а ищут много раз.
  • Увеличение всех трёх параметров чаще повышает качество, но всегда стоит дороже по ресурсам.
  • Подбор параметров — это практический баланс между recall, задержкой и памятью под конкретную нагрузку.