Поделиться через


Векторные базы данных

Векторная база данных хранит и управляет данными в виде векторов, которые являются числовыми массивами точек данных.

Использование векторов позволяет выполнять сложные запросы и анализы, так как можно сравнивать и анализировать векторы с помощью расширенных методов, таких как поиск сходства векторов, квантизация и кластеризация. Традиционные базы данных не хорошо подходят для обработки высокомерных данных, которые становятся все более распространенными в аналитике данных. Однако векторные базы данных предназначены для обработки высокомерных данных, таких как текст, изображения и звук, путем представления их в виде векторов. Векторные базы данных полезны для таких задач, как машинное обучение, обработка естественного языка и распознавание изображений, где цель заключается в определении шаблонов или сходств в больших наборах данных.

В этой статье приведены некоторые сведения о векторных базах данных и объясняется, как можно использовать eventhouse в качестве векторной базы данных в аналитике в реальном времени в Microsoft Fabric. Практический пример см. в руководстве . Использование eventhouse в качестве векторной базы данных.

Основные понятия

Следующие основные понятия используются в векторных базах данных:

Сходство векторов

Сходство векторов — это мера того, как разные (или аналогичные) два или более векторов. Поиск сходства векторов — это метод, используемый для поиска аналогичных векторов в наборе данных. Вы сравниваете векторы по метрикам расстояния, например Евклидово расстояние или косинусное сходство. Чем ближе два вектора, тем больше они похожи.

Внедрение

Внедрение — это распространенный способ представления данных в векторном формате для использования в векторных базах данных. Внедрение — это математическое представление фрагмента данных, например слова, текстового документа или изображения, которое предназначено для захвата его семантического значения. Вы создаете внедрения с помощью алгоритмов, которые анализируют данные и создают набор числовых значений, представляющих свои ключевые функции. Например, векторное представление слова может отражать его значение, контекст и связь с другими словами. Процесс создания эмбеддингов прост. Хотя их можно создать с помощью стандартных пакетов Python (например, spacy, sent2vec, Gensim), крупные языковые модели (LLM) создают высококачественные внедрения для семантического поиска текста. Например, можно отправить текст в модель внедрения в Azure OpenAI и создать векторное представление, которое можно хранить для анализа. Для получения дополнительной информации см. Понимание встраиваний в службе Azure OpenAI.

Общий рабочий процесс

Схематика внедрения, хранения и запроса текста, хранящегося в виде векторов.

Общий рабочий процесс для использования векторной базы данных выглядит следующим образом:

  1. Внедрение данных: преобразование данных в векторный формат с помощью модели внедрения. Например, можно внедрить текстовые данные с помощью модели OpenAI.
  2. Сохраните векторы: сохраните внедренные векторы в базе данных векторов. Внедренные данные можно отправлять в хранилище событий для хранения векторов и управления ими.
  3. Внедрение запроса. Преобразование данных запроса в векторный формат с помощью той же модели внедрения, используемой для внедрения хранимых данных.
  4. Векторы запросов: используйте поиск сходства векторов для поиска записей в базе данных, аналогичной запросу.

Eventhouse в качестве векторной базы данных

В основе поиска сходства векторов лежит способность хранить, индексировать и запрашивать векторные данные. Центры событий предоставляют решение для обработки и анализа больших объемов данных, особенно в сценариях, требующих аналитики и изучения в режиме реального времени. Эта возможность делает Eventhouse отличным выбором для хранения и поиска векторов.

Следующие компоненты Eventhouse позволяют использовать его в качестве векторной базы данных:

  • Динамический тип данных, который может хранить неструктурированные данные, такие как массивы и пакеты свойств. Используйте этот тип данных для хранения векторных значений. Можно дополнительно увеличить векторное значение, сохраняя метаданные, связанные с исходным объектом, в виде отдельных столбцов в таблице.
  • Тип Vector16, предназначенный для хранения векторов чисел с плавающей запятой в 16-разрядной точности. Эта кодировка использует Bfloat16 вместо 64 бит по умолчанию. Используйте эту кодировку для хранения векторных представлений машинного обучения, так как она снижает требования к хранилищу в 4 раза и ускоряет обработку векторных функций, таких как series_dot_product() и series_cosine_similarity() на порядки.
  • Функция series_cosine_similarity , которую можно использовать для выполнения поиска сходства векторов поверх векторов, хранящихся в eventhouse.

Оптимизация для масштабирования

Дополнительные сведения об оптимизации поиска сходства векторов см. в блоге.

Чтобы повысить производительность и итоговое время поиска, выполните следующие действия.

  1. Задайте для кодирования столбца внедрения значение Vector16, 16-разрядная кодировка коэффициентов векторов (вместо 64-разрядной версии по умолчанию).
  2. Сохраните таблицу векторов встраивания на всех узлах кластера, но не менее одного сегмента на процессор. Для этого выполните следующие действия.
    1. Ограничить количество векторов встраивания на сегмент путем изменения ShardEngineMaxRowCountполитики сегментирования. Политика шардирования балансирует данные на всех узлах с несколькими экстентами на узел, чтобы поиск мог использовать все доступные процессоры.
    2. Измените RowCountUpperBoundForMergeмерджинговой политики слияния. Политика слияния необходима для предотвращения объединения экстентов после приема данных.

Примеры действий по оптимизации

В следующем примере вы определяете статическую таблицу векторов для хранения векторов 1M. Вы определяете политику внедрения как Vector16 и задаете политики сегментирования и объединения для оптимизации таблицы для поиска сходства векторов. В этом примере предположим, что кластер имеет 20 узлов, а каждый узел имеет 16 процессоров. Сегменты таблицы должны содержать не более 1 000 000/(20*16)=3125 строк.

  1. Выполните следующие команды KQL по одному, чтобы создать пустую таблицу и задать необходимые политики и кодировку:

    .create table embedding_vectors(vector_id:long, vector:dynamic)                                  //  This is a sample selection of columns, you can add more columns
    
    .alter column embedding_vectors.vector policy encoding type = 'Vector16'                         // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing
    
    .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }'       // Balanced data on all nodes and, multiple extents per node so the search can use all processors 
    
    .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }'      // Suppress merging extents after ingestion
    
  2. Загрузите данные в таблицу, созданную и определенную на предыдущем шаге.

Следующий шаг