Визуализируйте обратный поиск изображений с помощью Feder
Обратный поиск изображений — одно из самых распространенных применений векторного поиска или приближенного поиска ближайших соседей. Когда пользователь загружает изображение в поисковую систему, возвращается набор похожих изображений. В ходе этого процесса создаются индексы, чтобы ускорить поиск по большим наборам данных, особенно по наборам данных масштаба миллиардов или даже триллионов.
В предыдущем блоге мы рассказали, как визуализировать приближенный поиск ближайших соседей с помощью Feder на примере визуализации индекса HNSW. В этой статье мы возьмем пример обратного поиска изображений и продолжим объяснять, как можно использовать Feder для визуализации процесса построения индекса и поиска. В этой статье мы используем индекс IVF_FLAT, поскольку он является наиболее часто используемым индексом в приложениях обратного поиска изображений.
Как визуализировать обратный поиск изображений с помощью Feder
Feder создан на JavaScript. Чтобы использовать Feder для визуализации, вам сначала нужно построить индекс и сохранить файл индекса из Faiss или Hnswlib. Затем Feder анализирует загруженный файл, чтобы получить информацию об индексе, и готовится к визуализации. Во время поиска векторного сходства вам нужно предоставить целевой вектор и конфигурацию параметров поиска. Затем Feder визуализирует для вас весь процесс поиска.
Узнайте больше о том, как использовать Feder, прочитав руководство пользователя Feder.
Пример использования визуализации поиска с индексом IVF_FLAT
В этом примере использования мы используем VOC 2012, классический набор данных изображений для ML, содержащий более 17 000 изображений.
Сначала мы используем Towhee, open-source ML pipeline, чтобы закодировать изображения в наборе данных VOC 2012 в векторы. Затем мы строим индекс IVF_FLAT с помощью Faiss и сохраняем файл индекса. Наконец, используем Feder для визуализации.
Построение индекса IVF_Flat
Индексы создаются для ускорения процесса поиска. Можно провести аналогию со словарем. Все слова организованы на основе их начальных букв. Точнее, слова с одинаковыми начальными буквами сгруппированы вместе. И мы все знаем, что количество записей под каждой начальной буквой неодинаково. У нас больше слов, начинающихся с буквы "E", чем слов, начинающихся с "Z". При поиске слова мы можем быстро перейти к разделу, который содержит только слова с той же начальной буквой. Это помогает значительно повысить скорость поиска.
Аналогично, индекс IVF_FLAT делит векторы в векторном пространстве на разные кластеры на основе векторного расстояния. Векторы, расположенные близко друг к другу, с большей вероятностью попадут в один и тот же кластер. При этом векторы не обязательно равномерно распределены в каждом кластере. Поэтому каждый кластер содержит разное количество векторов.
В этом примере использования мы использовали Faiss для построения индекса IVF_FLAT по 17 000 изображениям в наборе данных VOC 2012, с nlist равным 256. 17 000 векторов изображений разделены на 256 кластеров на основе метода кластеризации K-means.
С помощью Feder вы можете визуализировать кластеризацию многомерного векторного пространства в 2D-представлении. Feder поддерживает просмотр деталей каждого кластера, обеспечивая при этом интерактивный пользовательский опыт. Чтобы лучше понять индекс IVF_FLAT, вы можете нажать на один из кластеров в Feder, после чего увидите максимум девять изображений, представленных векторами внутри этого кластера.
Грубый поиск
Когда вы вводите целевое изображение и преобразуете его в целевой вектор для обратного поиска изображений, система сначала вычисляет расстояние между целевым вектором и центроидом каждого кластера, чтобы найти ближайшие кластеры.
В этом сценарии использования nlist равно 256, что означает, что всё векторное пространство разделено на 265 кластерных единиц. Поэтому в процессе грубого поиска система сравнивает расстояние между целевым вектором и 256 центроидами кластеров.
В индексах IVF векторы кластеризуются на основе их относительного расстояния друг до друга. Это означает, что ближайшие соседи целевого вектора с высокой вероятностью расположены в его ближайших кластерах. Мы можем управлять количеством кластерных единиц для запроса с помощью параметра nprobe. В этом сценарии использования nprobe равно 8, что означает, что система будет искать ближайшего соседа целевого вектора в пределах восьми самых близких кластеров.
Скриншот ниже представляет собой подробный вид ближайших кластеров. В cluster-186 (восьмом ближайшем кластере к целевому вектору) видно, что он содержит некоторые векторы изображений автомобилей. Хотя автомобили совсем не похожи на самолёт на нашем целевом изображении, изображения в cluster-186 и целевое изображение действительно имеют некоторое сходство, поскольку автомобильные трассы на изображениях cluster-186 очень похожи на взлётно-посадочную полосу аэропорта на целевом изображении. В гораздо более близком кластере, cluster-96, видно, что он содержит изображения самолётов в небе.
Грубый поиск.
Кластеры в этом сценарии использования демонстрируют, что во время embedding модель машинного обучения точно извлекает признаки, включая самолёт, взлётно-посадочную полосу и небо на целевом изображении. Затем она разделяет векторы в векторном пространстве на основе этих признаков. Cluster-186 имеет общий признак "взлётно-посадочная полоса", тогда как cluster-96 имеет общий признак "самолёт".
Точный поиск
После грубого поиска мы можем закрепить несколько кластеров nprobe для точного поиска. На этом этапе система сравнивает расстояние между целевым вектором и всеми векторами в кластерах nprobe. Затем topK ближайших векторов возвращаются в качестве итоговых результатов.
В этом сценарии использования система вычисляет расстояние между целевым вектором и в общей сложности 742 векторами в 8 кластерах в процессе точного поиска.
Feder предоставляет два режима визуализации для процесса точного поиска. Один режим — это визуализация на основе расстояния между кластером и вектором. Другой — режим проекции для уменьшения размерности.
На скриншоте ниже разные кластеры показаны разными цветами. Белый круг в центре представляет целевой вектор. С помощью Feder вы можете увидеть расстояние между каждым вектором и целевым вектором более ясно и наглядно. Вы можете нажать на каждый вектор, чтобы увидеть более подробную информацию, например его расстояние до целевого вектора, изображение, которое он представляет, и т. д.
Точный поиск.
Скриншот ниже — это режим проекции для уменьшения размерности. Как и прежде, разные кластеры показаны разными цветами. В настоящее время мы поддерживаем только UMAP, один из самых популярных методов уменьшения размерности. Больше методов проекции будет поддерживаться в будущих выпусках Feder.
Точный поиск.
Анализ производительности поиска
При поиске без индекса системе необходимо вычислить расстояние между целевым вектором и всеми 17 000 векторами в базе данных. Однако, напротив, если мы создадим индекс IVF_FLAT, эффективность поиска значительно повысится, поскольку объем вычислений существенно сокращается (системе нужно вычислить расстояние только между целевым вектором и 256 центроидами кластеров при грубом поиске и 742 векторами при точном поиске).
Также благодаря визуализации Feder мы поймем, что значение параметров построения индекса влияет на то, как делится векторное пространство. Параметр nprobe можно использовать для достижения компромисса между эффективностью и точностью поиска. Чем выше значение nprobe, тем шире область поиска и тем точнее результаты. Но, соответственно, эффективность поиска будет снижаться по мере увеличения объема вычислений.
Что дальше
- Попробуйте Attu, чтобы управлять вашей векторной базой данных с простотой в один клик.
- Узнайте, как визуализировать поиск ближайшего соседа с помощью Feder.
Читать далее

Top 10 Context Engineering Techniques You Should Know for Production RAG
A practical guide to context engineering for production LLM systems, covering RAG, context processing, memory, agents, and multimodal context.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.



