10 Применений векторного поиска для глубокого понимания ваших данных и моделей
Художественная интерпретация векторного поиска для исследования данных. Изображение создано DALLE-3.
По мере того, как большие языковые модели захлебываются миром, векторные поисковые системы плывут на их волне. Векторные базы данных являются основой систем долгосрочной памяти для больших языковых моделей.
Эффективно находя соответствующую информацию для передачи в качестве контекста модели, векторные поисковые системы могут предоставлять актуальную информацию, выходящую за пределы обучающей выборки, и улучшать качество выходных данных модели без донастройки. Этот процесс, часто называемый усиленным поколением посредством поиска (RAG), выдвинул ранее эзотерическую алгоритмическую задачу поиска приближенного ближайшего соседа (ANN) на передний план!
Средь всей этой суматохи можно было бы проститься с мыслью, что векторные поисковые системы неотделимы от больших языковых моделей. Но история на самом деле намного богаче. Векторный поиск имеет множество мощных применений, которые выходят далеко за рамки улучшения усиленного поколения для больших языковых моделей!
В этой статье я покажу вам десять моих любимых областей применения векторного поиска для понимания данных, изучения данных, интерпретации моделей и многого другого.
В том же духе естественным продолжением поиска изображений по сходству является поиск наиболее похожих изображений в наборе данных по отношению к внешнему изображению. Это может быть изображение из вашей локальной файловой системы или изображение из интернета!
Чтобы выполнить обратный поиск изображений, создайте векторный индекс для набора данных, как в примере поиска изображений по сходству. Главное отличие заключается в том, что при выполнении запуска вычисляется вложение для запросов изображений, а затем выполняется запрос векторной базы данных с использованием этого вектора.
Для получения дополнительной информации и рабочего кода нажмите здесь.
Поиск похожих объектов
Поиск похожих объектов для овец в наборе данных COCO-2017 на валидационном наборе данных (ЛИЦЕНЗИЯ). Изображение любезно предоставлено автором.
Если вы хотите более подробно изучить содержимое изображений, то поиск похожих объектов или “заплатка” может быть тем, что вам нужно. Один из примеров – это идентификация лиц, где у вас есть одно изображение с интересующим вас человеком, и вы хотите найти все экземпляры этого человека в вашем наборе данных.
Человек может занимать только малые участки каждого изображения, поэтому вложения для всего изображения, в котором они находятся, могут сильно зависеть от другого содержимого на этих изображениях. Например, на изображении может присутствовать несколько людей.
Лучшим решением будет рассматривать каждый обнаруженный патч объекта как отдельную сущность и вычислять вложение для каждого из них. Затем создайте векторный индекс с этими вложениями патчей и выполните поиск похожести по патчу человека, которого вы хотите идентифицировать. В качестве отправной точки вы можете попробовать использовать модель ResNet.
Два нюанса:
В векторном индексе вам нужно хранить метаданные, которые сопоставляют каждый патч соответствующему изображению в наборе данных.
Вам потребуется запустить модель обнаружения объектов для генерации этих патчей обнаружения перед созданием индекса. Вам также может захотеться вычислять вложения патчей только для определенных классов объектов, таких как человек, а не других – стул, стол и т. д.
Для получения дополнительной информации и рабочего кода нажмите здесь.
Надежный поиск документов OCR
Поиск по нечеткому/семантическому соответствию текстовых блоков, созданных движком OCR Tesseract на страницах моей диссертации. Вложения, вычисленные с использованием модели GTE-base. Изображение любезно предоставлено автором.
Оптическое распознавание символов (OCR) – это техника, которая позволяет преобразовать в цифровой формат документы, такие как рукописные заметки, старые статьи из журналов, медицинские записи и те письма любви, что хранятся в вашем шкафу. OCR-движки, такие как Tesseract и PaddleOCR, работают путем идентификации отдельных символов и знаков на изображениях и создания непрерывных “блоков” текста – подобно абзацам.
После получения такого текста вы можете выполнять традиционные поиск по ключевым словам в предсказанных блоках текста, как показано здесь. Однако этот метод поиска подвержен ошибкам в одном символе. Если OCR-движок ошибочно распознает “l” как “1”, поиск по ключевому слову “control” не удастся (ирония, правда?).
Мы можем преодолеть эту проблему, используя поиск по векторам! Встраивайте блоки текста с помощью модели встраивания текста, такой как GTE-base из библиотеки Hugging Face’s Sentence Transformers и создавайте векторный индекс. Затем мы можем выполнять нечеткий и/или семантический поиск по нашим цифровым документам, встраивая поисковый текст и делая запрос к индексу. В общем, блоки текста в этих документах аналогичны патчам обнаружения объектов в поиске похожих объектов!
Для получения дополнительной информации и рабочего кода смотрите здесь.
Семантический поиск
Семантический поиск изображений с использованием естественного языка на наборе данных COCO 2017 для проверки. Изображение предоставлено автором.
С помощью мультимодельных моделей мы можем расширить понятие семантического поиска от текста к изображениям. Модели, такие как CLIP, OpenCLIP и MetaCLIP, были обучены находить общие представления изображений и их подписей, так что вектор встраивания для изображения с изображением собаки будет очень похож на вектор встраивания для текстового набора символов “фотография собаки”.
Это означает, что разумным (т.е. “разрешенным”) является создание векторного индекса из встраиваний CLIP для изображений в наборе данных, а затем выполнять запрос поиска векторов в этой векторной базе данных, где вектор запроса – это встраивание CLIP текстового набора символов.
💡Рассматривая отдельные кадры видео как изображения и добавляя встраивание каждого кадра в векторный индекс, вы также можете выполнять семантический поиск в видео!
Для получения дополнительной информации и рабочего кода смотрите здесь.
Кросс-модальный поиск
Кросс-модальное извлечение изображений, соответствующих входному аудиофайлу поезда. Реализовано с использованием ImageBind с векторным индексом Qdrant, на наборе данных COCO 2017 для проверки. Видео предоставлено автором.
В некотором смысле, семантический поиск по набору данных изображений является формой кросс-модального поиска. Одним из способов представления этого является поиск изображений, соответствующих текстовому запросу. С помощью моделей, таких как ImageBind, мы можем пойти дальше!
ImageBind встраивает данные из шести различных модальностей в одно встраивание: изображения, текст, аудио, глубина, термальное изображение и инерционная измерительная единица (IMU). Это означает, что мы можем создать векторный индекс для данных в любой из этих модальностей и запросить этот индекс с помощью образца из любой другой модальности. Например, мы можем взять аудиофрагмент с звуком автомобильного гудка и найти все изображения автомобилей!
Для получения дополнительной информации и рабочего кода смотрите здесь.
Исследование воспринимаемой схожести
Очень важной частью истории о поиске векторов, о которой мы только вскользь упомянули, является модель. Векторы в нашем векторном индексе – это встраивания из модели. Эти встраивания могут быть конечным результатом настроенной модели встраивания или скрытыми или скрытыми репрезентациями из модели, обученной на другой задаче, например, классификации.
Вне зависимости от этого, модель, которую мы используем для вставки наших образцов, может оказывать существенное влияние на то, какие образцы считаются наиболее похожими на какие другие образцы. Модель CLIP захватывает семантические концепции, но испытывает трудности в представлении структурной информации внутри изображений. Модель ResNet, с другой стороны, очень хорошо представляет сходство в структуре и компоновке, действуя на уровне пикселей и патчей. Затем есть модели встраивания, такие как DreamSim, которые стремятся преодолеть разрыв и захватить промежуточное сходство – выравнивание модели представления с тем, что воспринимается людьми.
Векторный поиск предоставляет нам способ исследования того, как модель “видит” мир. Создавая отдельный векторный индекс для каждой интересующей нас модели (на тех же данных), мы быстро можем развить интуицию о том, как различные модели представляют данные внутри себя, так сказать.
Вот пример, иллюстрирующий поиск сходства с помощью встраивания моделей CLIP, ResNet и DreamSim для одного и того же запроса на наборе данных NIGHTS:
Поиск сходства с помощью встраивания ResNet50 на изображении из набора данных NIGHTS (изображения, созданные в рамках проекта Stable Diffusion — MIT RAIL LICENSE). Модели ResNet оперируют на уровне пикселей и патчей. Поэтому полученные изображения структурно похожи на запрос, но не всегда являются семантически схожими.Поиск сходства с помощью встраивания CLIP на том же изображении запроса. Модели CLIP учитывают основную семантику изображений, но не их компоновку.Поиск сходства с помощью встраивания DreamSim на том же изображении запроса. DreamSim стремится сбалансировать промежуточное сходство между семантическими и структурными характеристиками.
Для получения дополнительной информации и рабочего кода смотрите здесь.
Сравнение представлений моделей
Эвристическое сравнение представлений моделей ResNet50 и CLIP набора данных NIGHTS. Встраивания ResNet уменьшены до 2D с использованием UMAP. Выбрав точку на диаграмме встраивания и выделив близлежащие образцы, мы можем увидеть, как ResNet захватывает композиционное и палитровое сходство, а не семантическое сходство. Запустив векторный поиск на выбранном образце с помощью встроенных CLIP, мы видим, что большинство образцов согласно CLIP не локализованы согласно ResNet.
Мы можем получить новые инсайты в различия между двумя моделями, объединяя векторный поиск и техники сокращения размерности, такие как uniform manifold approximation (UMAP). Вот как:
Векторные представления каждой модели содержат информацию о том, как модель представляет данные. С использованием UMAP (или t-SNE или PCA) мы можем сгенерировать представления векторных представлений модели1 с более низкой размерностью (2D или 3D). При этом мы некоторую детализацию, но, надеюсь, сохраняем некоторую информацию о том, какие образцы воспринимаются как похожие на другие образцы. То, что мы получаем, – это возможность визуализации этих данных.
Используя визуализацию векторных представлений модели1 в качестве фона, мы можем выбрать точку на этом графике и выполнить поиск по вектору на этом образце относительно векторных представлений модели2. Таким образом, вы можете увидеть, где находятся извлеченные точки визуализации 2D!
В приведенном выше примере используется тот же набор данных NIGHTS, что и в последнем разделе, с визуализацией векторных представлений ResNet, которые отражают больше композиционной и структурной сходности, и выполнением поиска похожих элементов с помощью векторных представлений CLIP (семантические).
Интерполяция концепций
Интерполяция между концепциями “хаски” и “чихуахуа” с использованием векторных представлений CLIP на наборе данных Oxford-IIIT Pet
Мы подходим к концу десяти приложений, но к счастью, я сохранил несколько из лучших на последок. До сих пор мы работали только с векторными представлениями – индекс вектора заполняется векторными представлениями, и векторы запроса также являются векторными представлениями. Но иногда в пространстве векторных представлений есть дополнительная структура, которую мы можем использовать для более динамичного взаимодействия с нашими данными.
Один пример такого динамичного взаимодействия – это то, что я называю “интерполяцией концепций”. Вот как это работает: возьмите набор изображений и сгенерируйте индекс векторов с помощью мультимодельной модели (текст и изображение). Выберите две текстовые подсказки, например, “солнечно” и “дождливо”, которые представляют концепции, и установите значение alpha в диапазоне от 0 до 1. Мы можем сгенерировать векторные представления для каждого текстового концепта и добавить эти векторы в линейной комбинации, определенной alpha. Затем мы нормализуем вектор и используем его в качестве запроса к нашему индексу векторных представлений изображений.
Поскольку мы линейно интерполируем между векторными представлениями для двух текстовых подсказок (концепций), мы в очень свободном смысле интерполируем сами концепции! Мы можем динамически изменять значение alpha и запрашивать нашу векторную базу данных каждый раз при взаимодействии.
💡Эта идея интерполяции концепций является экспериментальной (читайте: не всегда хорошо определенной операцией). Я нахожу, что она работает лучше, когда текстовые подсказки имеют концептуальное отношение, а набор данных достаточно разнообразен, чтобы иметь разные результаты для разных положений на спектре интерполяции.
Для получения дополнительной информации и рабочего кода см. здесь.
Трансвазальное пространство концепций
Пересечение пространства “концепций” перемещение в направлении различных текстовых подсказок через их векторные представления, иллюстрация для тестового набора данных COCO 2017. Изображения и текст, обрамленные моделью CLIP. Изображение с любезного согласия автора.
Последнее, но не менее важное – это то, что я называю “трансвазальным пространством концепций”. Как и в случае с интерполяцией концепций, начните с набора изображений и сгенерируйте векторные представления с помощью мультимодельной модели, такой как CLIP. Затем выберите изображение из набора данных. Это изображение будет вашей отправной точкой, из которой вы будете “пересекать” пространство концепций.
Затем вы можете определить направление, в котором вы хотите двигаться, предоставив текстовую строку в качестве замены для концепции. Установите величину “шага”, который вы хотите сделать в этом направлении, и вектор векторного представления этой текстовой строки (с мультипликативным коэффициентом) будет добавлен к векторному представлению исходного изображения. Вектор «назначения» будет использоваться для запроса в базу данных векторов. Вы можете добавить произвольное количество концепций в произвольных количествах и следить за обновлением набора извлеченных изображений в реальном времени.
Как и в случае с “интерполяцией концепции”, это не всегда строго определенный процесс. Однако я считаю его завораживающим и достаточно эффективным, если коэффициент, применяемый к векторам текста, достаточно высок, чтобы они были достаточно учтены.
Дополнительную информацию и рабочий код смотрите здесь.
Заключение
Векторные поисковые движки – это невероятно мощные инструменты. Конечно, они являются звездами лучшего шоу в городе, RAG-time. Но векторные базы данных гораздо более универсальны. Они обеспечивают глубокое понимание данных, дают представление о том, как модели представляют эти данные, и открывают новые возможности для взаимодействия с данными.
Векторные базы данных не ограничены LLM. Они полезны в любых случаях, когда используются векторные представления, которые находятся на пересечении модели и данных. Чем более строго мы понимаем структуру пространств вложений, тем более динамичным и всеобъемлющим станет взаимодействие с данными и моделями, поддерживаемое векторным поиском.
Если вам понравилась эта публикация, вам также может быть интересно посмотреть следующие публикации, использующие поиск по векторам: