HNSW (Hierarchical Navigable Small World) — graph-based ANN algorithm, самый популярный для vector DB. Строит multi-layer graph: top layer — sparse, bottom — dense. Search: greedy descent от top до bottom. O(log N) complexity. Used в Qdrant, Pinecone, Weaviate, pgvector (opt-in). Parameters: M (connections per node, 16-64), ef_construction (build quality), ef (search quality).
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
# pgvector HNSW
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
-- Query tuning
SET hnsw.ef_search = 100; -- runtime param
SELECT * FROM docs ORDER BY embedding <=> query_vec LIMIT 5;HNSW (Hierarchical Navigable Small World) индекс представляет собой эффективную структуру данных для выполнения поиска ближайших соседей (ANN) в многомерных векторных пространствах. Он обеспечивает высокую скорость поиска и низкую вычислительную сложность, что делает его идеальным для работы с большими наборами данных, например, в задачах обработки изображений или текстов.
Основное преимущество HNSW заключается в его способности поддерживать баланс между точностью и производительностью. Структура HNSW позволяет пользователю настраивать параметры, такие как максимальное количество соседей и уровень графа, что дает возможность оптимизировать алгоритм под конкретные задачи.
HNSW индекс строится на основе графовой структуры, где каждый узел представляет собой вектор, а ребра соединяют узлы, которые являются ближайшими соседями. Алгоритм состоит из двух основных этапов: построение графа и поиск ближайших соседей.
На этапе построения графа создаются несколько уровней, где каждый уровень содержит подмножество узлов. Для добавления нового узла алгоритм выбирает случайный уровень и соединяет его с ближайшими соседями. Это позволяет поддерживать высокую плотность связи между узлами на каждом уровне, что существенно ускоряет процесс поиска.
Поиск начинается с верхнего уровня графа и плавно спускается вниз. На каждом уровне осуществляется локальный поиск, который позволяет быстро находить ближайшие узлы. После достижения нижнего уровня, алгоритм применяет точный поиск, чтобы определить наиболее близкие векторы.
Эффективность HNSW можно продемонстрировать на практике. Например, для создания HNSW индекса с использованием библиотеки nmslib, можно использовать следующий код:
import nmslib
# Создаем HNSW индекс
index = nmslib.init(method='hnsw', space='l2')
# Добавляем векторы в индекс
index.addDataPointBatch(data)
# Строим индекс
index.createIndex({'post': 2}, print_progress=True)HNSW индекс обладает рядом значительных преимуществ, которые делают его популярным выбором для ANN:
Тем не менее, у HNSW есть и свои недостатки:
В заключение, HNSW индекс является мощным инструментом для поиска ближайших соседей в многомерных векторных пространствах, предлагая высокую производительность и точность. При правильной настройке и использовании он может существенно улучшить эффективность обработки данных в различных приложениях.
HNSW: best recall + speed, но all в RAM. IVF: cheaper RAM (centroids + buckets), slower recall. Для huge datasets (>100M) — IVF + re-ranking.
Prefilter может cut graph connectivity. Качественные vector DB (Qdrant, Weaviate) имеют filter-aware HNSW. pgvector 2024 добавил index filtering.
DiskANN — SSD-based ANN. 10× cheaper memory, 2-3× slower. Для billion-scale. Milvus, MyScale поддерживают.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.