Вопрос проверяет понимание HNSW-индекса как алгоритма приблизительного поиска ближайших соседей, используемого в векторных базах данных для ускорения поиска.
HNSW (Hierarchical Navigable Small World) — это алгоритм для приблизительного поиска ближайших соседей (ANN), который строит многоуровневую графовую структуру. Он основан на идее "маленького мира" (small world), где каждый узел соединен с несколькими ближайшими соседями, а верхние уровни содержат меньше узлов и более длинные связи для быстрого перемещения по пространству.
Алгоритм создает иерархию графов: на самом верхнем уровне находятся несколько узлов с длинными связями, что позволяет быстро приблизиться к целевой области. При поиске алгоритм начинает с верхнего уровня и спускается вниз, на каждом уровне уточняя ближайших соседей. На нижнем уровне граф содержит все узлы с плотными связями, что обеспечивает высокую точность.
import hnswlib
import numpy as np
# Генерация случайных векторов
dim = 128
num_elements = 10000
# Инициализация индекса
p = hnswlib.Index(space='l2', dim=dim)
p.init_index(max_elements=num_elements, ef_construction=200, M=16)
# Добавление данных
data = np.random.rand(num_elements, dim).astype(np.float32)
p.add_items(data)
# Настройка параметров поиска
p.set_ef(50)
# Поиск 10 ближайших соседей для первого вектора
labels, distances = p.knn_query(data[0], k=10)
print(labels, distances)HNSW широко используется в векторных базах данных, таких как Milvus, Qdrant, Weaviate, и в библиотеках для ANN (например, hnswlib, FAISS). Он подходит для задач поиска изображений, рекомендательных систем, обработки естественного языка и других сценариев, где требуется быстрый поиск по векторным представлениям.
HNSW-индекс популярен благодаря балансу между скоростью и точностью, а также возможности работы с большими наборами данных. Его стоит применять в системах, где критична производительность поиска, например, в real-time рекомендациях или поиске дубликатов.