data-infra
Словарь ↗ANN-поиск (приближённый поиск ближайших соседей)
Приближённый поиск ближайших соседей (Approximate Nearest Neighbor, ANN) — алгоритмический подход, который используют почти все промышленные векторные базы данных, чтобы быстро отвечать на вопрос «какие сохранённые векторы наиболее похожи на этот вектор запроса?». Метод сознательно допускает небольшую, настраиваемую вероятность пропустить математически точные лучшие совпадения в обмен на прирост скорости на порядки. Альтернатива — точный поиск ближайших соседей (kNN) методом полного перебора — гарантирует идеальный результат, но масштабируется линейно с размером набора данных: поиск среди 10 миллионов векторов занимает примерно в 10 раз дольше, чем среди 1 миллиона. Алгоритмы ANN разрывают эту линейную зависимость. Почему это важно для разработчиков AI/SaaS: именно благодаря ANN-поиску продукты RAG и семантического поиска возвращают результаты за десятки миллисекунд, а не секунды — а это разница между удобным чат-интерфейсом и «сломанным» ощущением от продукта. Каждая крупная векторная база данных — Pinecone, Weaviate, Qdrant, Milvus, pgvector, Chroma — по сути является движком ANN-поиска, обёрнутым в слой управления данными. Как это работает: два доминирующих семейства ANN — графовые (HNSW, используется в большинстве современных систем) и кластерные (варианты IVF, применяемые в IVFFlat от pgvector и FAISS от Meta). Оба сужают пространство поиска перед прямым сравнением векторов: HNSW перемещается по заранее построенному графу близости, IVF сначала сужает поиск до ближайших центроидов кластеров. Качество ANN-системы измеряется через recall@k (какая доля истинных top-k ближайших соседей действительно была найдена) в сравнении с числом запросов в секунду, и каждый ANN-индекс предоставляет настройки для перемещения по этой кривой: проверять больше кандидатов ради лучшего recall ценой задержки, либо меньше — ради скорости. Большинство промышленных систем нацелены на recall 95%+, что на практике неотличимо от точного поиска для retrieval-augmented generation, поскольку LLM устойчива к тому, что иногда получает 6-й по релевантности фрагмент вместо 5-го. Практический пример: финтех-SaaS, строящий систему обнаружения мошенничества по схожести, сравнивает эмбеддинг каждой новой транзакции с 50 миллионами эмбеддингов исторических транзакций. Точный kNN занял бы ~4 секунды на один запрос — слишком медленно для потока одобрения платежей в реальном времени. Развёртывание ANN-индекса на базе HNSW сокращает это время до ~15 мс на запрос при recall 97%, позволяя проверке на мошенничество выполняться прямо во время оформления заказа без заметной задержки для добросовестных клиентов. Важно, что те 3% истинных ближайших соседей, которые ANN-индекс иногда пропускает, не влияют на результат продукта: система помечает транзакцию как подозрительную на основе агрегированного сигнала схожести по топ-20 совпадениям, а не по единственному точному совпадению, так что небольшой компромисс в точности незаметен на уровне бизнес-логики, а выигрыш в задержке — это именно то, что вообще делает возможной оценку мошенничества в реальном времени.
Похожие термины