Сравнение векторных баз данных, библиотек векторного поиска и плагинов векторного поиска
Привет - добро пожаловать на "Векторные базы данных 101"!
Всплеск популярности ChatGPT и других больших языковых моделей (LLM) привел к росту технологий векторного поиска, включающих специализированные векторные базы данных, такие как Milvus и Zilliz Cloud, наряду с библиотеками, такими как FAISS, и интегрированными плагинами векторного поиска в обычных базах данных.
В предыдущей статье мы рассмотрели основы векторных баз данных. В этом посте мы продолжим исследовать сложную сферу векторного поиска, сравнивая векторные базы данных, плагины векторного поиска и библиотеки векторного поиска.
Что такое векторный поиск?
Векторный поиск, также известный как поиск векторного сходства, - это техника извлечения топ-к результатов, которые наиболее похожи или семантически связаны с заданным вектором запроса среди обширной коллекции плотных векторных данных. Перед проведением поиска по сходству мы используем нейронные сети для преобразования неструктурированных данных, таких как текст, изображения, видео и аудио, в высокоразмерные числовые векторы, называемые векторами встраивания. После создания векторов встраивания векторные поисковые системы сравнивают пространственное расстояние между вектором запроса и векторами в векторных хранилищах. Чем ближе они находятся в пространстве, тем более похожи.
На рынке представлено множество технологий векторного поиска, включая библиотеки машинного обучения, такие как NumPy в Python, библиотеки векторного поиска, такие как FAISS, плагины векторного поиска, построенные на традиционных базах данных, и специализированные векторные базы данных, такие как Milvus и Zilliz Cloud.
Векторные базы данных и библиотеки векторного поиска
Специализированные векторные базы данных - не единственный способ поиска сходства. До появления векторных баз данных для векторного поиска использовалось множество библиотек векторного поиска, таких как FAISS, ScaNN и HNSW.
Библиотеки векторного поиска могут помочь вам быстро создать высокопроизводительный прототип системы векторного поиска. В качестве примера можно привести FAISS, разработанную компанией Meta с открытым исходным кодом и предназначенную для эффективного поиска сходства и плотной кластеризации векторов. FAISS может работать с коллекциями векторов любого размера, даже с теми, которые не могут быть полностью загружены в память. Кроме того, FAISS предлагает инструменты для оценки и настройки параметров. Несмотря на то, что FAISS написана на C++, она имеет интерфейс Python/NumPy.
Однако библиотеки векторного поиска - это всего лишь облегченные библиотеки ANN, а не управляемые решения, и они имеют ограниченную функциональность. Если ваш набор данных невелик и ограничен, этих библиотек может быть достаточно для обработки неструктурированных данных, даже для систем, работающих в производстве. Однако по мере увеличения объема массива данных и привлечения большего числа пользователей проблему масштабирования становится все сложнее решить. Кроме того, они не позволяют вносить изменения в индексные данные и не могут быть запрошены при импорте данных.
Векторные базы данных, напротив, являются более оптимальным решением для хранения и поиска неструктурированных данных. Они могут хранить и запрашивать миллионы и даже миллиарды векторов, одновременно предоставляя ответы в режиме реального времени, и обладают высокой масштабируемостью для удовлетворения растущих бизнес-потребностей пользователей.
Кроме того, векторные базы данных, такие как Milvus, обладают гораздо более удобными функциями для структурированных/полуструктурированных данных: облачность, многопользовательскость, масштабируемость и т. д. Эти особенности станут понятны по мере углубления в этот учебник.
Кроме того, они работают на совершенно другом уровне абстракции, чем библиотеки векторного поиска - векторные базы данных являются полноценными сервисами, в то время как библиотеки ANN предназначены для интеграции в разрабатываемое вами приложение. В этом смысле библиотеки ANN - это один из многих компонентов, на которых строятся векторные базы данных, подобно тому, как Elasticsearch строится на Apache Lucene.
В качестве примера того, почему эта абстракция так важна, давайте рассмотрим вставку нового элемента неструктурированных данных в векторную базу данных. Это очень просто в Milvus:
from pymilvus import Collectioncollection = Collection('book')mr = collection.insert(data)
Это действительно так просто - 3 строки кода. В таких библиотеках, как FAISS или ScaNN, к сожалению, нет простого способа сделать это, не пересоздавая вручную весь индекс в определенные контрольные точки. Даже если бы это было возможно, библиотекам векторного поиска все равно не хватает масштабируемости и многопользовательскости - двух наиболее важных характеристик векторных баз данных.
Векторные базы данных в сравнении с плагинами векторного поиска для традиционных баз данных
Отлично, теперь, когда мы определили разницу между библиотеками векторного поиска и векторными базами данных, давайте рассмотрим, чем векторные базы данных отличаются от плагинов векторного поиска.
Все большее количество традиционных реляционных баз данных и поисковых систем, таких как Clickhouse и Elasticsearch, включают в себя встроенные плагины векторного поиска. Elasticsearch 8.0, например, включает функции вставки векторов и поиска ANN, которые можно вызывать через конечные точки restful API. Проблема с плагинами векторного поиска должна быть ясна как день и ночь - эти решения не используют полностековый подход к управлению встраиванием и векторному поиску. Вместо этого плагины предназначены для расширения существующих архитектур, что делает их ограниченными и неоптимизированными. Разработка приложения для работы с неструктурированными данными на базе традиционной базы данных похожа на попытку вместить литиевые батареи и электромоторы в раму автомобиля, работающего на бензине, - не самая лучшая идея!
Чтобы проиллюстрировать, почему это так, давайте вернемся к списку функций, которые должны быть реализованы в векторной базе данных (из первого раздела). Плагинам для векторного поиска не хватает двух из этих функций - настраиваемости и удобных API/SDK. Я продолжу использовать движок ANN от Elasticsearch в качестве примера; другие плагины для векторного поиска работают очень похоже, поэтому я не буду слишком углубляться в детали. Elasticsearch поддерживает хранение векторов через тип поля данных dense_vector
и позволяет выполнять запросы через knnsearch endpoint
:
PUT index
{
"mappings": {
"properties": {
"image-vector": {
"type": "dense_vector",
"dims": 128,
"index": true,
"similarity": "l2_norm"
}
}
}
}
PUT index/_doc
{
"image-vector": [0.12, 1.34, ...]
}
GET index/_knn_search
{
"knn": {
"field": "image-vector",
"query_vector": [-0.5, 9.4, ...],
"k": 10,
"num_candidates": 100
}
}
Плагин ANN в Elasticsearch поддерживает только один алгоритм индексирования: Hierarchical Navigable Small Worlds, также известный как HNSW (мне нравится думать, что его создатель опередил Marvel, когда речь зашла о популяризации мультивселенной). Кроме того, в качестве метрики расстояния поддерживается только L2/евклидово расстояние. Это неплохое начало, но давайте сравним его с Milvus, полноценной векторной базой данных. Использование pymilvus
:
>>> field1 = FieldSchema(name='id', dtype=DataType.INT64, description='int64', is_primary=True)
>>> field2 = FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='embedding', dim=128, is_primary=False)
>>> schema = CollectionSchema(fields=[field1, field2], description='hello world collection')
>>> collection = Collection(name='my_collection', data=None, schema=schema)
>>> index_params = {
'index_type': 'IVF_FLAT',
'params': {'nlist': 1024},
"metric_type": 'L2'}
>>> collection.create_index('embedding', index_params)
>>> search_param = {
'data': vector,
'anns_field': 'embedding',
'param': {'metric_type': 'L2', 'params': {'nprobe': 16}},
'limit': 10,
'expr': 'id_field > 0'
}
>>> results = collection.search(**search_param)
Хотя и Elasticsearch, и Milvus имеют методы для создания индексов, вставки векторов встраивания и поиска ближайших соседей, из этих примеров ясно, что Milvus имеет более интуитивный API для векторного поиска (лучший пользовательский API) и более широкую поддержку векторных индексов + метрик расстояния (лучшая настраиваемость). В будущем Milvus также планирует поддерживать больше векторных индексов и разрешить запросы с помощью SQL-подобных операторов, что еще больше улучшит как настраиваемость, так и удобство использования.
Мы только что пропустили через себя довольно много контента. Этот раздел получился довольно длинным, поэтому для тех, кто пропустил его, вот краткое содержание: Milvus лучше плагинов для векторного поиска, потому что Milvus был создан с нуля как векторная база данных, что позволяет использовать более богатый набор функций и архитектуру, более подходящую для неструктурированных данных.
Как выбрать из различных технологий векторного поиска?
Не все векторные базы данных созданы одинаковыми; каждая из них обладает уникальными характеристиками, которые подходят для конкретных приложений. Библиотеки и плагины для векторного поиска удобны в использовании и идеально подходят для работы с небольшими производственными средами с миллионами векторов. Если объем ваших данных невелик и вам требуется лишь базовая функциональность векторного поиска, этих технологий вполне достаточно для вашего бизнеса.
Однако для предприятий с большим объемом данных, работающих с сотнями миллионов векторов и требующих отклика в режиме реального времени, лучше использовать специализированную векторную базу данных. Например, Milvus легко управляет миллиардами векторов, обеспечивая молниеносную скорость запросов и богатую функциональность. Более того, полностью управляемые решения, такие как Zilliz, оказываются еще более выгодными, освобождая вас от операционных проблем и позволяя сосредоточиться исключительно на основной деятельности.
Ознакомьтесь еще раз с курсами Vector Database 101
- Введение в неструктурированные данные
- Что такое векторная база данных?
- Сравнение векторных баз данных, библиотек векторного поиска и плагинов векторного поиска
- Введение в Milvus
- Быстрый старт Milvus
- Введение в векторный поиск по сходству
- Основы векторного индекса и инвертированный файловый индекс
- Скалярное квантование и квантование по продукту
- Иерархические перемещаемые малые миры (HNSW)
- Приближенные ближайшие соседи О да (ANNOY)
- Выбор правильного векторного индекса для вашего проекта
- DiskANN и алгоритм Вамана
- Что такое векторный поиск?
- Векторные базы данных и библиотеки векторного поиска
- Векторные базы данных в сравнении с плагинами векторного поиска для традиционных баз данных
- Как выбрать из различных технологий векторного поиска?
- Ознакомьтесь еще раз с курсами Vector Database 101
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