Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Векторная база данных хранит и управляет данными в виде векторов, которые являются числовыми массивами точек данных.
Использование векторов позволяет выполнять сложные запросы и анализы, так как можно сравнивать и анализировать векторы с помощью расширенных методов, таких как поиск сходства векторов, квантизация и кластеризация. Традиционные базы данных не хорошо подходят для обработки высокомерных данных, которые становятся все более распространенными в аналитике данных. Однако векторные базы данных предназначены для обработки высокомерных данных, таких как текст, изображения и звук, путем представления их в виде векторов. Векторные базы данных полезны для таких задач, как машинное обучение, обработка естественного языка и распознавание изображений, где цель заключается в определении шаблонов или сходств в больших наборах данных.
В этой статье приведены некоторые сведения о векторных базах данных и объясняется, как можно использовать eventhouse в качестве векторной базы данных в аналитике в реальном времени в Microsoft Fabric. Практический пример см. в руководстве . Использование eventhouse в качестве векторной базы данных.
Основные понятия
Следующие основные понятия используются в векторных базах данных:
Сходство векторов
Сходство векторов — это мера того, как разные (или аналогичные) два или более векторов. Поиск сходства векторов — это метод, используемый для поиска аналогичных векторов в наборе данных. Вы сравниваете векторы по метрикам расстояния, например Евклидово расстояние или косинусное сходство. Чем ближе два вектора, тем больше они похожи.
Внедрение
Внедрение — это распространенный способ представления данных в векторном формате для использования в векторных базах данных. Внедрение — это математическое представление фрагмента данных, например слова, текстового документа или изображения, которое предназначено для захвата его семантического значения. Вы создаете внедрения с помощью алгоритмов, которые анализируют данные и создают набор числовых значений, представляющих свои ключевые функции. Например, векторное представление слова может отражать его значение, контекст и связь с другими словами. Процесс создания эмбеддингов прост. Хотя их можно создать с помощью стандартных пакетов Python (например, spacy, sent2vec, Gensim), крупные языковые модели (LLM) создают высококачественные внедрения для семантического поиска текста. Например, можно отправить текст в модель внедрения в Azure OpenAI и создать векторное представление, которое можно хранить для анализа. Для получения дополнительной информации см. Понимание встраиваний в службе Azure OpenAI.
Общий рабочий процесс
Общий рабочий процесс для использования векторной базы данных выглядит следующим образом:
- Внедрение данных: преобразование данных в векторный формат с помощью модели внедрения. Например, можно внедрить текстовые данные с помощью модели OpenAI.
- Сохраните векторы: сохраните внедренные векторы в базе данных векторов. Внедренные данные можно отправлять в хранилище событий для хранения векторов и управления ими.
- Внедрение запроса. Преобразование данных запроса в векторный формат с помощью той же модели внедрения, используемой для внедрения хранимых данных.
- Векторы запросов: используйте поиск сходства векторов для поиска записей в базе данных, аналогичной запросу.
Eventhouse в качестве векторной базы данных
В основе поиска сходства векторов лежит способность хранить, индексировать и запрашивать векторные данные. Центры событий предоставляют решение для обработки и анализа больших объемов данных, особенно в сценариях, требующих аналитики и изучения в режиме реального времени. Эта возможность делает Eventhouse отличным выбором для хранения и поиска векторов.
Следующие компоненты Eventhouse позволяют использовать его в качестве векторной базы данных:
- Динамический тип данных, который может хранить неструктурированные данные, такие как массивы и пакеты свойств. Используйте этот тип данных для хранения векторных значений. Можно дополнительно увеличить векторное значение, сохраняя метаданные, связанные с исходным объектом, в виде отдельных столбцов в таблице.
- Тип
Vector16, предназначенный для хранения векторов чисел с плавающей запятой в 16-разрядной точности. Эта кодировка используетBfloat16вместо 64 бит по умолчанию. Используйте эту кодировку для хранения векторных представлений машинного обучения, так как она снижает требования к хранилищу в 4 раза и ускоряет обработку векторных функций, таких как series_dot_product() и series_cosine_similarity() на порядки. - Функция series_cosine_similarity , которую можно использовать для выполнения поиска сходства векторов поверх векторов, хранящихся в eventhouse.
Оптимизация для масштабирования
Дополнительные сведения об оптимизации поиска сходства векторов см. в блоге.
Чтобы повысить производительность и итоговое время поиска, выполните следующие действия.
- Задайте для кодирования столбца внедрения значение Vector16, 16-разрядная кодировка коэффициентов векторов (вместо 64-разрядной версии по умолчанию).
- Сохраните таблицу векторов встраивания на всех узлах кластера, но не менее одного сегмента на процессор. Для этого выполните следующие действия.
- Ограничить количество векторов встраивания на сегмент путем изменения ShardEngineMaxRowCountполитики сегментирования. Политика шардирования балансирует данные на всех узлах с несколькими экстентами на узел, чтобы поиск мог использовать все доступные процессоры.
- Измените RowCountUpperBoundForMergeмерджинговой политики слияния. Политика слияния необходима для предотвращения объединения экстентов после приема данных.
Примеры действий по оптимизации
В следующем примере вы определяете статическую таблицу векторов для хранения векторов 1M. Вы определяете политику внедрения как Vector16 и задаете политики сегментирования и объединения для оптимизации таблицы для поиска сходства векторов. В этом примере предположим, что кластер имеет 20 узлов, а каждый узел имеет 16 процессоров. Сегменты таблицы должны содержать не более 1 000 000/(20*16)=3125 строк.
Выполните следующие команды 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Загрузите данные в таблицу, созданную и определенную на предыдущем шаге.