🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Сравнение векторных баз данных, библиотек векторного поиска и плагинов векторного поиска

Сравнение векторных баз данных, библиотек векторного поиска и плагинов векторного поиска

  • Engineering
November 09, 2023
Frank Liu

Привет - добро пожаловать на "Векторные базы данных 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

  1. Введение в неструктурированные данные
  2. Что такое векторная база данных?
  3. Сравнение векторных баз данных, библиотек векторного поиска и плагинов векторного поиска
  4. Введение в Milvus
  5. Быстрый старт Milvus
  6. Введение в векторный поиск по сходству
  7. Основы векторного индекса и инвертированный файловый индекс
  8. Скалярное квантование и квантование по продукту
  9. Иерархические перемещаемые малые миры (HNSW)
  10. Приближенные ближайшие соседи О да (ANNOY)
  11. Выбор правильного векторного индекса для вашего проекта
  12. DiskANN и алгоритм Вамана

Like the article? Spread the word

Продолжить чтение