Те же данные, тот же запрос — но другая стратегия поиска. Перетащите точку запроса, настройте nprobeи нажмите «Запустить поиск», чтобы увидеть, как « IVF » пропускает большую часть данных.
nprobe »: они подсвечиваются. Все остальные кластеры полностью пропускаются.Компромисс: чем больше nprobe → больше просканированных кластеров → более высокая точность извлечения, но более медленная работа. Меньший nprobe → быстрее, но вы можете пропустить истинных соседей, находящихся в непросканированных кластерах. Попробуйте установить nprobe = 1 и перетащить запрос к границе кластера, чтобы увидеть падение коэффициента полноты.
IVF (Inverted File) — это индекс ближайших соседей, основанный на кластеризации. При построении алгоритм k-means разбивает все векторы на nlist кластеры, каждый из которых представлен своим центроидом. При выполнении запроса алгоритм поиска сначала сравнивает запрос только с центроидами, выбирает ближайшие nprobe кластеров и сканирует только векторы внутри них — пропуская всё остальное.
Milvus Поставляется с несколькими вариантами алгоритма « IVF », в которых точность достигается за счёт увеличения потребления памяти: IVF_FLAT хранит исходные векторы (наибольшая точность), IVF_SQ8 сжимает каждое измерение до одного байта (примерно в 4 раза меньше памяти, небольшая потеря точности), и IVF_PQ применяет квантование произведения для значительно более высокой степени сжатия с большей потерей точности.
nlist (время построения): количество кластеров метода k-средних. Обычной отправной точкой является значение « 4 × sqrt(N) » для N векторов. Большее количество кластеров означает, что каждый из них меньше — сканирование происходит быстрее, но проход по центроидам требует больше ресурсов, а граничные эффекты усиливаются.nprobe (время запроса): количество кластеров, которые нужно просканировать за один запрос. Это основной регулятор, влияющий на соотношение «коэффициент восстановления/задержка» — именно этим управляет ползунок выше. Начните примерно с nlist / 16 и увеличивайте значение, пока точность поиска не достигнет заданного уровня.IVF быстро собирается, имеет небольшую нагрузку на память сверх объёма векторов и прост для анализа — но при одинаковом целевом показателе recall индекс « HNSW » обычно быстрее отвечает на запросы в памяти. Выбирайте « IVF », если вы часто перестраиваете индексы (важна скорость сборки), если память ограничена (IVF_SQ8/IVF_PQ), или если вам нужно предсказуемое и настраиваемое поведение сканирования. Выбирайте HNSW для минимальной задержки запросов в памяти, а DiskANN — когда векторы больше не помещаются в RAM вообще.
Все три кластеризуют векторы одинаково; они различаются способом хранения векторов внутри кластеров. « IVF_FLAT » сохраняет исходные векторы с плавающей запятой (наилучший показатель recall). « IVF_SQ8 » квантует каждое измерение до 8 бит, сокращая объем памяти примерно в 4 раза с небольшой потерей показателя recall. « IVF_PQ » заменяет векторы короткими кодами с квантованием по произведению, обеспечивая максимальное сжатие и наибольшую потерю показателя recall.
Общее эмпирическое правило: « nlist » = 4 × sqrt(N) для N векторов, затем настраивайте « nprobe » во время запроса. Большее значение « nprobe » сканирует больше кластеров: чем выше recall, тем выше задержка. Начните примерно с « nlist » /16 и увеличивайте значение, пока recall на выделенном наборе запросов не достигнет заданного значения.
Из-за границ кластеров. Если запрос попадает вблизи края кластера, некоторые из его истинных соседей могут находиться в соседнем кластере, который не входил в число просканированных кластеров « nprobe ». Это можно увидеть на визуализации, перетащив точку запроса вблизи границы с показателем « nprobe » = 1.
При одинаковой точности извлечения алгоритм « HNSW » обычно быстрее при поиске в памяти, но использует больше памяти и собирается медленнее. Алгоритм « IVF » собирается быстро и хорошо сочетается с квантованием (SQ8/PQ), когда памяти мало. Для наборов данных, которые полностью выходят за пределы RAM, вместо этого рассмотрите использование DiskANN.
Узнайте больше: ознакомьтесь с документацией по параметрам индекса в «IVF_FLAT » или просмотрите раздел «Index Explained» для получения полного руководства по принятию решений.
Посмотрите, как шаг за шагом происходит поиск по многослойному графу — от «скачков по магистрали» до «локальных прогулок».
Посмотрите, как PQ-in-RAM + full-vectors-on-SSD позволяет выполнять поиск в наборах данных объемом в миллиарды записей на ноутбуке.
Перетащите точку запроса и переключайтесь между режимами « L2 », «Cosine» и « IP », чтобы увидеть, как меняется понятие «ближайший».