Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Векторная база данных хранит и управляет данными в виде векторов, которые являются числовыми массивами точек данных.
Традиционные базы данных не хорошо подходят для обработки высокомерных данных, которые становятся все более распространенными в аналитике данных. Однако векторные базы данных предназначены для обработки высокомерных данных, таких как текст, изображения и звук, путем представления их в виде векторов. Векторные базы данных полезны для таких задач, как машинное обучение, обработка естественного языка и распознавание изображений, где цель заключается в определении шаблонов или сходств в больших наборах данных.
В этой статье приводятся общие сведения о векторных базах данных и на концептуальном уровне объясняется, как можно использовать Eventhouse в качестве векторной базы данных в Real-Time Intelligence в Microsoft Fabric. Практические примеры см. в руководстве: использование Eventhouse в качестве векторной базы данных с эмбеддингами LLM и руководстве: использование Eventhouse в качестве векторной базы данных с эмбеддингами SLM.
Основные понятия
Следующие основные понятия используются в векторных базах данных:
Сходство векторов
Сходство векторов — это мера того, как разные (или аналогичные) два или более векторов. Поиск сходства векторов — это метод, используемый для поиска аналогичных векторов в наборе данных. Вы сравниваете векторы по метрикам расстояния, например Евклидово расстояние или косинусное сходство. Чем ближе два вектора, тем больше они похожи.
Внедрение
Внедрение — это распространенный способ представления данных в векторном формате для использования в векторных базах данных. Внедрение — это математическое представление фрагмента данных, например слова, текстового документа или изображения, которое фиксирует его семантический смысл. Вы создаете внедрения с помощью алгоритмов, которые анализируют данные и создают набор числовых значений, представляющих свои ключевые функции. Например, векторное представление слова может отражать его значение, контекст и связь с другими словами. Внедрение — это распространенный способ представления данных в векторном формате для использования в векторных базах данных. Внедрение — это математическое представление фрагмента данных, например слова, текстового документа или изображения, которое фиксирует его семантический смысл. Вы создаете внедрения с помощью алгоритмов, которые анализируют данные и создают набор числовых значений, представляющих свои ключевые функции. Например, векторное представление слова может отражать его значение, контекст и связь с другими словами. Eventhouse поддерживает два метода для генерации эмбеддингов прямо в KQL:
плагин ai_embeddings: вызывает внешнюю конечную точку Azure OpenAI для генерации эмбеддингов с использованием больших языковых моделей (LLM). Этот метод создает высококачественные внедрения и лучше подходит для рабочих нагрузок семантического поиска.
slm_embeddings_fl(): выполняет небольшие языковые модели (SLM) локально в песочнице Kusto Python, создавая внедрения без какой-либо внешней конечной точки. Этот метод не требует ресурса Azure OpenAI и не влечет платы за каждый эмбеддинг.
Дополнительные сведения о внедрении в Azure OpenAI см. в разделе "Общие сведения о внедрении" в Служба Azure OpenAI.
Выбор метода внедрения
Используйте следующую таблицу, чтобы выбрать метод, который лучше всего подходит для вашего сценария:
| Соображение | плагин ai_embeddings (LLM) | slm_embeddings_fl() (SLM) |
|---|---|---|
| Качество модели | Высокое качество; использует такие модели Azure OpenAI, какtext-embedding-3-large |
Хорошее качество; используются SLM с открытым исходным кодом, например harrier-v1-270m, jina-v2-small и e5-small-v2 |
| Внешняя зависимость | Требуется ресурс Azure OpenAI с развернутой моделью эмбеддингов | Ни один; Модели выполняются локально в песочнице Python |
| Cost | Цены на запросы на основе использования Azure OpenAI | Без затрат на внедрение |
| Пропускная способность | Подчиняется лимитам скорости Azure OpenAI; требуется пакетная обработка и логика повторных попыток | Ограничено только вычислительными ресурсами кластера; Масштабируется естественным образом с размером кластера |
| Setup | Требуются развертывание Azure OpenAI, настройка политики callout и настройка идентификации | Требуется включенный плагин Python и загруженные в lakehouse артефакты SLM |
| Максимальная длина контекста | Зависит от развернутой модели (например, 8 192 токенов для text-embedding-3-large) |
До 32 768 токенов с harrier-v1-270m, 8 192 с jina-v2-small и 512 с e5-small-v2 |
| лучше всего подходит для | Семантический поиск в рабочей среде, где качество внедрения является главным приоритетом | Рабочие процессы с повышенными требованиями к конфиденциальности, быстрое прототипирование, пакетное создание эмбеддингов в больших объёмах или сценарии без доступа к Azure OpenAI |
Общий рабочий процесс
Общий рабочий процесс для использования векторной базы данных выглядит следующим образом:
- Внедрение данных: преобразование данных в векторный формат с помощью модели внедрения.
- Сохраните векторы: сохраните внедренные векторы в базе данных векторов. Внедренные данные можно отправлять в хранилище событий для хранения векторов и управления ими.
- Внедрение запроса. Преобразование данных запроса в векторный формат с помощью той же модели внедрения, используемой для внедрения хранимых данных.
- Векторы запросов: используйте поиск сходства векторов для поиска записей в базе данных, аналогичной запросу.
Eventhouse в качестве векторной базы данных
В основе поиска сходства векторов лежит способность хранить, индексировать и запрашивать векторные данные. Центры событий предоставляют решение для обработки и анализа больших объемов данных, особенно в сценариях, требующих аналитики и изучения в режиме реального времени. Эта возможность делает Eventhouse отличным выбором для хранения и поиска векторов.
Следующие компоненты Eventhouse позволяют использовать его в качестве векторной базы данных:
- Динамический тип данных, который может хранить неструктурированные данные, такие как массивы и пакеты свойств. Используйте этот тип данных для хранения векторных значений. Можно дополнительно увеличить векторное значение, сохраняя метаданные, связанные с исходным объектом, в виде отдельных столбцов в таблице.
- Тип
Vector16, предназначенный для хранения векторов чисел с плавающей запятой в 16-разрядной точности. Эта кодировка используетBfloat16вместо 64 бит по умолчанию. Используйте эту кодировку для хранения векторных эмбеддингов, поскольку она сокращает требования к объёму хранилища в четыре раза и значительно ускоряет функции обработки векторов, такие как 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Загрузите данные в таблицу, созданную и определенную на предыдущем шаге.