Масштабируемый и молниеносный поиск сходства с помощью векторной базы данных Milvus
изображение обложки
Введение
В этой статье мы рассмотрим некоторые интересные аспекты, связанные с векторными базами данных и поиском сходства в масштабе. В современном быстро развивающемся мире мы видим новые технологии, новые бизнесы, новые источники данных, и, следовательно, нам нужно постоянно использовать новые способы хранения, управления и использования этих данных для получения глубоких знаний. Структурированные табличные данные десятилетиями хранились в реляционных базах данных, и бизнес-аналитика процветала благодаря анализу и извлечению информации из таких данных. Однако, учитывая современный ландшафт данных, "более 80-90 % данных - это неструктурированная информация, такая как текст, видео, аудио, журналы веб-серверов, социальные сети и многое другое". Организации используют возможности машинного обучения и глубокого обучения, чтобы попытаться извлечь информацию из таких данных, поскольку традиционных методов, основанных на запросах, может быть недостаточно или даже невозможно. Существует огромный, неиспользованный потенциал для извлечения ценной информации из таких данных, и мы только начинаем!
"Поскольку большая часть данных в мире неструктурирована, возможность анализировать их и действовать на их основе открывает широкие возможности". - Майки Шульман, руководитель отдела ML, Kensho
Неструктурированные данные, как следует из названия, не имеют неявной структуры, подобно таблице со строками и столбцами (поэтому их называют табличными или структурированными данными). В отличие от структурированных данных, не существует простого способа хранить содержимое неструктурированных данных в реляционной базе данных. Существуют три основные проблемы, связанные с использованием неструктурированных данных для получения глубоких результатов:
- Хранение: Обычные реляционные базы данных хорошо подходят для хранения структурированных данных. Хотя для хранения таких данных можно использовать базы данных NoSQL, обработка таких данных для извлечения нужных представлений, необходимых для работы приложений искусственного интеллекта в масштабе, становится дополнительной накладной задачей.
- Представление: Компьютеры не понимают текст или изображения так, как мы. Они понимают только числа, и нам нужно преобразовать неструктурированные данные в какое-либо полезное числовое представление, обычно векторы или вкрапления.
- Запрос: Вы не можете напрямую запрашивать неструктурированные данные на основе определенных условных операторов, как это делает SQL для структурированных данных. Представьте себе простой пример: вы пытаетесь найти похожие туфли, получив фотографию вашей любимой пары обуви! Вы не можете использовать для поиска необработанные значения пикселей, а также представить структурированные характеристики, такие как форма, размер, стиль, цвет обуви и многое другое. А теперь представьте, что это нужно сделать для миллионов туфель!
Поэтому, чтобы компьютеры могли понимать, обрабатывать и представлять неструктурированные данные, мы обычно преобразуем их в плотные векторы, которые часто называют эмбеддингами.
рисунок 1
Существует множество методик, особенно с использованием глубокого обучения, включая конволюционные нейронные сети (CNN) для визуальных данных, таких как изображения, и трансформеры для текстовых данных, которые можно использовать для преобразования таких неструктурированных данных в эмбеддинги. В Zilliz есть отличная статья, рассказывающая о различных техниках встраивания!
Теперь хранить эти векторы встраивания недостаточно. Необходимо также иметь возможность запрашивать и находить похожие векторы. Почему вы спрашиваете? Большинство реальных приложений используют поиск сходства векторов для решений на основе искусственного интеллекта. Это и визуальный поиск (по изображениям) в Google, и системы рекомендаций в Netflix или Amazon, и текстовые поисковые системы в Google, и мультимодальный поиск, и дедупликация данных, и многое другое!
Хранение, управление и запрос векторов в масштабе - непростая задача. Для этого нужны специализированные инструменты, и векторные базы данных - самый эффективный инструмент для этой работы! В этой статье мы рассмотрим следующие аспекты:
- Векторы и поиск векторного сходства
- Что такое векторная база данных?
- Milvus - самая передовая в мире база данных векторов
- Выполнение визуального поиска изображений с помощью Milvus - пример использования
Давайте начнем!
Векторы и поиск векторного сходства
Ранее мы установили необходимость представления неструктурированных данных, таких как изображения и текст, в виде векторов, поскольку компьютеры могут понимать только числа. Обычно мы используем модели искусственного интеллекта, а точнее модели глубокого обучения, для преобразования неструктурированных данных в числовые векторы, которые могут быть считаны машинами. Как правило, эти векторы представляют собой список чисел с плавающей точкой, которые в совокупности отображают основной элемент (изображение, текст и т. д.).
Понимание векторов
В области обработки естественного языка (NLP) существует множество моделей встраивания слов, таких как Word2Vec, GloVe и FastText, которые помогают представить слова в виде числовых векторов. С течением времени появились модели трансформации, такие как BERT, которые можно использовать для изучения контекстных векторов встраивания и лучшего представления целых предложений и абзацев.
Аналогичным образом в области компьютерного зрения существуют такие модели, как конволюционные нейронные сети (CNN), которые могут помочь в обучении представлений на основе визуальных данных, таких как изображения и видео. С развитием трансформаторов у нас также появились трансформаторы зрения, которые могут работать лучше, чем обычные CNN.
рисунок 2
Преимущество таких векторов в том, что мы можем использовать их для решения реальных задач, таких как визуальный поиск, где вы обычно загружаете фотографию и получаете результаты поиска, включающие визуально похожие изображения. У Google это очень популярная функция в поисковой системе, как показано на следующем примере.
рисунок 3
Такие приложения работают с векторами данных и поиском векторного сходства. Если рассмотреть две точки в картезианском пространстве координат X-Y. Расстояние между двумя точками может быть вычислено как простое евклидово расстояние, представленное следующим уравнением.
рисунок 4
Если представить, что каждая точка данных - это вектор с D-мерностью, то для определения того, насколько близки друг к другу две точки данных, можно использовать евклидово расстояние или даже другие метрики расстояния, например расстояние Хэмминга или косинусоидальное расстояние. Это поможет составить представление о близости или сходстве, которое можно использовать в качестве количественной метрики для поиска похожих элементов, заданных эталонным элементом, используя их векторы.
Понятие векторного поиска сходства
Векторный поиск сходства, часто известный как поиск ближайших соседей (NN), - это процесс вычисления парного сходства (или расстояния) между эталонным элементом (для которого мы хотим найти похожие элементы) и коллекцией существующих элементов (обычно в базе данных) и возвращения лучших "k" ближайших соседей, которые являются лучшими "k" наиболее похожими элементами. Ключевым компонентом для вычисления этого сходства является метрика сходства, которая может представлять собой евклидово расстояние, внутреннее произведение, косинусное расстояние, расстояние Хэмминга и т. д. Чем меньше расстояние, тем более похожи векторы.
Проблема точного поиска ближайших соседей (NN) заключается в масштабируемости. Вам нужно вычислять N расстояний (при условии N существующих элементов) каждый раз, чтобы получить похожие элементы. Это может быть очень медленно, особенно если вы не храните и не индексируете данные где-нибудь (например, в базе данных векторов!). Чтобы ускорить вычисления, мы обычно используем приближенный поиск ближайших соседей, который часто называют ANN-поиском, в результате чего векторы сохраняются в индексе. Индекс помогает хранить эти векторы в интеллектуальном виде, что позволяет быстро находить "приблизительно" похожих соседей для элемента запроса. Типичные методологии индексирования ANN включают:
- Преобразование векторов: Включает в себя добавление дополнительных преобразований к векторам, таких как уменьшение размерности (например, PCA \ t-SNE), поворот и т. д.
- Кодирование векторов: Включает применение методов, основанных на структурах данных, таких как локально-чувствительное хеширование (LSH), квантование, деревья и т. д., которые помогают быстрее находить похожие элементы.
- Неисчерпывающие методы поиска: В основном используются для предотвращения исчерпывающего поиска и включают такие методы, как графы окрестностей, инвертированные индексы и т. д.
Таким образом, для создания любого приложения для поиска векторного сходства необходима база данных, которая поможет вам эффективно хранить, индексировать и запрашивать (искать) в масштабе. Векторные базы данных!
Что такое векторная база данных?
Учитывая, что теперь мы понимаем, как векторы могут использоваться для представления неструктурированных данных и как работает векторный поиск, мы можем объединить эти две концепции вместе, чтобы создать векторную базу данных.
Векторные базы данных - это масштабируемые платформы данных для хранения, индексирования и запроса по векторам встраивания, которые генерируются из неструктурированных данных (изображений, текста и т. д.) с помощью моделей глубокого обучения.
Обработка огромного количества векторов для поиска сходства (даже с использованием индексов) может быть очень дорогой. Несмотря на это, лучшие и наиболее продвинутые векторные базы данных должны позволять вам вставлять, индексировать и искать по миллионам или миллиардам целевых векторов, а также задавать алгоритм индексирования и метрику сходства по вашему выбору.
Векторные базы данных в основном должны удовлетворять следующим ключевым требованиям, предъявляемым к надежной системе управления базами данных для использования на предприятии:
- Масштабируемость: Векторные базы данных должны быть способны индексировать и выполнять приблизительный поиск ближайших соседей для миллиардов векторов встраивания.
- Надежность: Векторные базы данных должны быть способны справляться с внутренними сбоями без потери данных и с минимальным операционным воздействием, т.е. быть отказоустойчивыми.
- Быстродействие: Для векторных баз данных важны скорость запросов и записи. Для таких платформ, как Snapchat и Instagram, где в секунду могут загружаться сотни или тысячи новых изображений, скорость становится невероятно важным фактором.
Векторные базы данных не просто хранят векторы данных. Они также отвечают за использование эффективных структур данных для индексации этих векторов для быстрого поиска и поддержки операций CRUD (создание, чтение, обновление и удаление). Векторные базы данных также должны в идеале поддерживать фильтрацию по атрибутам, то есть фильтрацию на основе полей метаданных, которые обычно являются скалярными полями. Простым примером может быть поиск похожей обуви на основе векторов изображений для определенного бренда. Здесь бренд будет атрибутом, на основе которого будет производиться фильтрация.
рисунок 5
На рисунке выше показано, как в Milvus, векторной базе данных, о которой мы поговорим в ближайшее время, используется фильтрация по атрибутам. Milvus вводит понятие битовой маски в механизм фильтрации, чтобы сохранять похожие векторы с битовой маской 1 на основе удовлетворения определенных фильтров атрибутов. Подробнее об этом здесь.
Milvus - самая продвинутая в мире база данных векторов
Milvus - это платформа управления векторными базами данных с открытым исходным кодом, созданная специально для работы с векторными данными огромного объема и оптимизации операций машинного обучения (MLOps).
рисунок 6
Zilliz- организация, создавшая Milvus, самую передовую в мире векторную базу данных, для ускорения разработки фабрик данных следующего поколения. В настоящее время Milvus является дипломным проектом LF AI & Data Foundation и специализируется на управлении массивными неструктурированными массивами данных для хранения и поиска. Эффективность и надежность платформы упрощает процесс развертывания ИИ-моделей и MLOps в масштабе. Milvus находит широкое применение в таких областях, как открытие лекарств, компьютерное зрение, рекомендательные системы, чат-боты и многое другое.
Ключевые особенности Milvus
Milvus обладает множеством полезных функций и возможностей, таких как:
- Высочайшая скорость поиска в триллионе векторных наборов данных: Средняя задержка векторного поиска и извлечения измеряется в миллисекундах на триллионе векторных наборов данных.
- Упрощенное управление неструктурированными данными: Milvus имеет богатые API, разработанные для рабочих процессов в области науки о данных.
- Надежная, всегда включенная векторная база данных: Встроенные в Milvus функции репликации и отказоустойчивости/возврата обеспечивают постоянную непрерывность данных и приложений.
- Высокая масштабируемость и эластичность: Масштабируемость на уровне компонентов позволяет увеличивать и уменьшать масштаб по требованию.
- Гибридный поиск: Помимо векторов, Milvus поддерживает такие типы данных, как Boolean, String, целые числа, числа с плавающей точкой и другие. Milvus сочетает скалярную фильтрацию с мощным векторным поиском сходства (как показано в примере сходства обуви ранее).
- Унифицированная лямбда-структура: Milvus сочетает потоковую и пакетную обработку для хранения данных, чтобы сбалансировать своевременность и эффективность.
- Путешествие во времени: Milvus поддерживает временную шкалу для всех операций вставки и удаления данных. Это позволяет пользователям указывать временные метки в поиске, чтобы получить представление данных в определенный момент времени.
- Поддержка сообщества и признание в отрасли: Более 1 000 корпоративных пользователей, 10,5 тыс. с лишним звезд на GitHub и активное сообщество разработчиков с открытым исходным кодом - вы не одиноки, когда используете Milvus. Будучи проектом для выпускников LF AI & Data Foundation, Milvus имеет институциональную поддержку.
Существующие подходы к управлению и поиску векторных данных
Обычный способ создания системы ИИ на основе поиска векторного сходства заключается в использовании алгоритмов типа Approximate Nearest Neighbor Search (ANNS) в паре с библиотеками с открытым исходным кодом, такими как:
- Facebook AI Similarity Search (FAISS): Этот фреймворк обеспечивает эффективный поиск сходства и кластеризацию плотных векторов. Он содержит алгоритмы поиска в наборах векторов любого размера, вплоть до таких, которые, возможно, не поместятся в оперативной памяти. Поддерживаются такие возможности индексирования, как инвертированный мультииндекс и квантование по произведению
- Spotify's Annoy (Approximate Nearest Neighbors Oh Yeah): Этот фреймворк использует случайные проекции и строит дерево, чтобы обеспечить ANNS в масштабе для плотных векторов
- ScaNN (Scalable Nearest Neighbors) от Google: Этот фреймворк выполняет эффективный поиск векторного сходства в масштабе. Состоит из реализаций, включающих обрезку пространства поиска и квантование для поиска по максимальному внутреннему продукту (MIPS).
Хотя каждая из этих библиотек по-своему полезна, из-за ряда ограничений эти комбинации алгоритмов и библиотек не являются эквивалентом полноценной системы управления векторными данными, такой как Milvus. Сейчас мы обсудим некоторые из этих ограничений.
Ограничения существующих подходов
Существующие подходы, используемые для управления векторными данными, как обсуждалось в предыдущем разделе, имеют следующие ограничения:
- Гибкость: Существующие системы обычно хранят все данные в основной памяти, поэтому их нельзя легко запустить в распределенном режиме на нескольких машинах, и они плохо подходят для работы с массивными наборами данных.
- Динамическая обработка данных: Данные часто считаются статичными, когда поступают в существующие системы, что усложняет обработку динамических данных и делает невозможным поиск в режиме, близком к реальному времени.
- Расширенная обработка запросов: Большинство инструментов не поддерживают расширенную обработку запросов (например, фильтрацию атрибутов, гибридный поиск и многовекторные запросы), что очень важно для создания реальных поисковых систем, поддерживающих расширенную фильтрацию.
- Оптимизация гетерогенных вычислений: Немногие платформы предлагают оптимизации для гетерогенных системных архитектур как на CPU, так и на GPU (за исключением FAISS), что приводит к снижению эффективности.
Milvus пытается преодолеть все эти ограничения, и мы подробно обсудим это в следующем разделе.
Преимущество Milvus - понимание Knowhere
Milvus пытается преодолеть и успешно решить ограничения существующих систем, построенных на основе неэффективных алгоритмов управления векторными данными и поиска сходства, следующими способами:
- Повышает гибкость, предлагая поддержку различных интерфейсов приложений (включая SDK на Python, Java, Go, C++ и RESTful API).
- Поддерживает несколько типов векторных индексов (например, индексы на основе квантования и индексы на основе графов), а также расширенную обработку запросов.
- Milvus обрабатывает динамические векторные данные с помощью лог-структурированного дерева слияния (LSM-дерево), обеспечивая эффективную вставку и удаление данных, а также поиск в режиме реального времени.
- Milvus также обеспечивает оптимизацию для гетерогенных вычислительных архитектур на современных CPU и GPU, позволяя разработчикам адаптировать системы к конкретным сценариям, наборам данных и средам приложений.
Knowhere, движок векторного исполнения Milvus, представляет собой операционный интерфейс для доступа к сервисам на верхних уровнях системы и библиотекам поиска векторного сходства, таким как Faiss, Hnswlib, Annoy, на нижних уровнях системы. Кроме того, Knowhere отвечает за гетерогенные вычисления. Knowhere контролирует, на каком оборудовании (например, CPU или GPU) выполнять запросы на построение индексов и поиск. Именно так Knowhere получила свое название - знание того, где выполнять операции. В будущих версиях будет поддерживаться больше типов оборудования, включая DPU и TPU.
рисунок 7
Вычисления в Milvus в основном включают векторные и скалярные операции. Knowhere обрабатывает только операции над векторами в Milvus. На рисунке выше показана архитектура Knowhere в Milvus. Самый нижний слой - это системное оборудование. Поверх аппаратного обеспечения располагаются сторонние индексные библиотеки. Затем Knowhere взаимодействует с узлом индекса и узлом запроса на верхнем уровне через CGO. Knowhere не только расширяет функции Faiss, но и оптимизирует производительность, а также имеет ряд преимуществ, включая поддержку BitsetView, поддержку большего количества метрик сходства, поддержку набора инструкций AVX512, автоматический выбор SIMD-инструкций и другие оптимизации производительности. Подробности можно найти здесь.
Архитектура Milvus
На следующем рисунке показана общая архитектура платформы Milvus. Milvus отделяет поток данных от потока управления и разделена на четыре уровня, которые являются независимыми с точки зрения масштабируемости и аварийного восстановления.
рисунок 8
- Уровень доступа: Уровень доступа состоит из группы нестационарных прокси-серверов и служит в качестве переднего уровня системы и конечной точки для пользователей.
- Служба координатора: Служба координатора отвечает за управление узлами топологии кластера, балансировку нагрузки, генерацию временных меток, объявление данных и управление данными.
- Рабочие узлы: Рабочий узел, или узел исполнения, выполняет инструкции, выданные службой координатора, и команды языка манипулирования данными (DML), инициированные прокси. Рабочий узел в Milvus аналогичен узлу данных в Hadoop или региональному серверу в HBase.
- Хранение данных: Это краеугольный камень Milvus, отвечающий за сохранение данных. Слой хранения состоит из метахранилища, брокера журналов и хранилища объектов.
Более подробную информацию об архитектуре можно найти здесь!
Выполнение визуального поиска изображений с помощью Milvus - пример использования
Векторные базы данных с открытым исходным кодом, такие как Milvus, позволяют любому предприятию создать свою собственную систему визуального поиска изображений с минимальным количеством шагов. Разработчики могут использовать предварительно обученные модели искусственного интеллекта для преобразования собственных наборов данных изображений в векторы, а затем использовать Milvus для поиска похожих продуктов по изображениям. Давайте рассмотрим следующий пример разработки и создания такой системы.
рисунок 9
В этом рабочем процессе мы можем использовать фреймворк с открытым исходным кодом, например towhee, для использования предварительно обученной модели ResNet-50 и извлечения векторов из изображений, хранения и индексации этих векторов в Milvus, а также хранения отображения идентификаторов изображений на реальные изображения в базе данных MySQL. Как только данные будут проиндексированы, мы сможем с легкостью загружать любые новые изображения и выполнять поиск изображений в масштабе с помощью Milvus. На следующем рисунке показан пример визуального поиска изображений.
рисунок 10
Ознакомьтесь с подробным руководством, которое было размещено на GitHub благодаря Milvus.
Заключение
В этой статье мы рассмотрели достаточно много вопросов. Мы начали с проблем представления неструктурированных данных, использования векторов и поиска векторного сходства в масштабе с помощью Milvus, векторной базы данных с открытым исходным кодом. Мы подробно рассказали о структуре Milvus и ключевых компонентах, на которых она основана, а также о том, как решить реальную задачу - визуальный поиск изображений с помощью Milvus. Попробуйте и начните решать свои собственные реальные проблемы с помощью Milvus!
Понравилась статья? Свяжитесь со мной, чтобы обсудить ее подробнее или оставить отзыв!
Об авторе
Дипанджан (DJ) Саркар - ведущий специалист по науке о данных, эксперт Google Developer - Machine Learning, автор, консультант и советник по искусственному интеллекту. Связь: http://bit.ly/djs_linkedin
- Введение
- Векторы и поиск векторного сходства
- Что такое векторная база данных?
- Milvus - самая продвинутая в мире база данных векторов
- Выполнение визуального поиска изображений с помощью Milvus - пример использования
- Заключение
- Об авторе
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word