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


Индексные векторные данные в Cosmos DB в Microsoft Fabric (предварительная версия)

Это важно

Эта функция доступна в предварительной версии.

Cosmos DB в Microsoft Fabric теперь предлагает эффективное индексирование и поиск векторов. Эта функция предназначена для обработки много модальных, высокомерных векторов, обеспечивая эффективный и точный поиск векторов в любом масштабе. Теперь вы можете хранить векторы непосредственно в документах вместе с данными. Каждый документ в базе данных может содержать не только традиционные данные без схемы, но и многофакторные высокомерные векторы в качестве других свойств документов. Это совместное размещение данных и векторов позволяет эффективно индексировать и выполнять поиск, так как векторы хранятся в той же логической единице, что и данные, которые они представляют. Объединение векторов и данных упрощает управление данными, архитектуры приложений ИИ и эффективность операций на основе векторов.

Cosmos DB в Fabric обеспечивает гибкость в выборе метода индексирования векторов:

  • Точный поиск "плоских" или к-ближайших соседей (иногда называемый методом подбора) может обеспечить 100% отзыв для небольших, ориентированных векторных поисков. особенно при сочетании с фильтрами запросов и ключами секционирования.

  • Квантизованный плоский индекс, который сжимает векторы с помощью методов квантизации на основе DiskANN для повышения эффективности поиска kNN.

  • DiskANN, набор алгоритмов индексирования векторов, разработанных Корпорацией Майкрософт Research для повышения эффективности много модального поиска векторов с высокой точностью в любом масштабе.

Векторный поиск в Cosmos DB можно объединить со всеми другими поддерживаемыми фильтрами запросов NoSQL и индексами с помощью WHERE предложений. Это сочетание позволяет поиску векторов быть наиболее релевантными данными для приложений.

Эта функция улучшает основные возможности Cosmos DB, что делает его более универсальным для обработки векторных данных и требований к поиску в приложениях ИИ.

Что такое хранилище векторов?

Векторное хранилище или векторная база данных — это база данных, предназначенная для хранения и управления векторными встраиваниями, которые являются математическими представлениями данных в высокоразмерном пространстве. В этом пространстве каждое измерение соответствует признаку данных, а для представления сложных данных можно использовать десятки тысяч измерений. Позиция вектора в этом пространстве представляет свои характеристики. Слова, фразы или целые документы, изображения, аудио и другие типы данных могут быть векторизированы.

Как работает векторное хранилище?

В векторном хранилище алгоритмы поиска векторов используются для индексирования и обработки эмбеддингов запросов. Некоторые известные алгоритмы поиска векторов включают иерархический навигационно-небольшой мир (HNSW), инвертированные файлы (IVF), DiskANN и т. д. Векторный поиск — это метод, который помогает находить аналогичные элементы на основе их характеристик данных, а не по точным совпадениям в поле свойства. Этот метод полезен в таких приложениях, как поиск аналогичного текста, поиск связанных изображений, рекомендации или даже обнаружение аномалий. Он используется для запроса векторных представлений вашего набора данных, созданных при помощи модели машинного обучения с использованием API для представлений. Примерами API встраиваний являются Azure OpenAI Embeddings или Hugging Face на Azure. Векторный поиск измеряет расстояние между векторами данных и вектором запроса. Векторы данных, близкие к вектору запросов, являются наиболее похожими семантикой.

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

Политики вектора контейнеров

Для выполнения векторного поиска с помощью Cosmos DB в Fabric необходимо определить политику вектора для контейнера. Эта политика предоставляет важную информацию для ядра СУБД для эффективного поиска векторов, найденных в документах контейнера. Эта конфигурация также сообщает политике индексирования векторов необходимых сведений, если вы решите указать ее. Следующие сведения включаются в содержащуюся векторную политику:

  • path: свойство, содержащее вектор (обязательный).

  • datatype: тип данных свойства вектора. Поддерживаемые типы: float32 (по умолчанию) int8и uint8.

  • dimensions: размерность или длина каждого вектора в пути. Все векторы в пути должны иметь одинаковое количество измерений. (по умолчанию 1536).

  • distanceFunction: метрика, используемая для вычисления расстояния или сходства. Поддерживаемые метрики:

    • cosine, который имеет значения от $-1$ (наименее похожий) на $+1$ (наиболее похожий).

    • dot product, который имеет значения от $-\infty$ (наименее похожий) на $+\infty$ (наиболее похожий).

    • euclidean, который имеет значения от $0$ (наиболее похожие) на $+\infty$ (наименее похожий).

Замечание

Каждый уникальный путь может иметь не более одной политики. Однако можно указать несколько политик, если все они нацелены на другой путь.

Политика вектора контейнера может быть описана как объекты JSON. Ниже приведены два примера допустимых политик вектора контейнера:

Политика с одним векторным путем

{
  "vectorEmbeddings": [
    {
      "path": "/vector1",
      "dataType": "float32",
      "distanceFunction": "cosine",
      "dimensions": 1536
    }
  ]
}

Политика с двумя векторными путями

{
  "vectorEmbeddings": [
    {
      "path": "/vector1",
      "dataType": "float32",
      "distanceFunction": "cosine",
      "dimensions": 1536
    },
    {
      "path": "/vector2",
      "dataType": "int8",
      "distanceFunction": "dotproduct",
      "dimensions": 100
    }
  ]
}

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

Политики индексирования векторов

Индексы векторов повышают эффективность при выполнении векторного поиска с помощью системной VectorDistance функции. Векторы поиска имеют более низкую задержку, более высокую пропускную способность и меньшее потребление единиц запросов при использовании векторного индекса. Эти типы политик индексов векторов можно указать:

Описание Максимальные размеры
flat Сохраняет векторы в том же индексе, что и другие индексированные свойства. 505
quantizedFlat Квантизует (сжимает) векторы перед хранением в индексе. Эта политика может повысить задержку и пропускную способность за счет небольшого количества точности. 4096
diskANN Создает индекс на основе DiskANN для быстрого и эффективного поиска. 4096

Замечание

Для индексов quantizedFlat и diskANN требуется вставить как минимум 1000 векторов. Это минимальное значение — обеспечить точность процесса квантизации. Если количество векторов меньше 1000, выполняется полное сканирование, которое приводит к увеличению затрат на RU для запроса векторного поиска.

Несколько моментов, которые следует отметить:

  • flat и quantizedFlat типы индексов используют индекс Cosmos DB для хранения и чтения каждого вектора во время векторного поиска. Векторные поиски с индексом flat — это поиски методом перебора, обеспечивающие 100% точность или полноту. То есть они гарантированно находят наиболее похожие векторы в наборе данных. Однако существует ограничение 505 размеров векторов на плоском индексе.

  • Индекс quantizedFlat сохраняет квантованные (сжатые) векторы в индексе. Векторный поиск с использованием quantizedFlat индекса также является поиском методом прямого перебора, однако его точность может быть немного меньше 100%, так как векторы квантуируются перед добавлением в индекс. Однако поиск векторов с quantized flat должен иметь более низкую задержку, более высокую пропускную способность и более низкую стоимость RU по сравнению с векторными поисками по индексу flat. Этот индекс является хорошим вариантом для небольших сценариев или сценариев, в которых вы используете фильтры запросов для сузки векторного поиска до относительно небольшого набора векторов. quantizedFlat рекомендуется, если число векторов для индексирования составляет около 50 000 или меньше на физическую секцию. Однако эта рекомендация является просто общим руководством, и фактические показатели производительности должны быть проверены, так как каждый сценарий может отличаться.

  • Индекс diskANN — это отдельный индекс, определенный специально для векторов с помощью DiskANN, набора алгоритмов индексирования векторов высокой производительности, разработанных Microsoft Research. Индексы DiskANN могут предложить самые низкие задержки, высокую пропускную способность и наименьшую стоимость запросов по RU, сохраняя высокую точность. Как правило, DiskANN является наиболее эффективной из всех типов индексов, если на физическую секцию приходится более 50 000 векторов.

Ниже приведены примеры допустимых политик векторного индекса:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/_etag/?"
    },
    {
      "path": "/vector1/*"
    }
  ],
  "vectorIndexes": [
    {
      "path": "/vector1",
      "type": "diskANN"
    }
  ]
}
{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/_etag/?"
    },
    {
      "path": "/vector1/*",
    },
    {
      "path": "/vector2/*",
    }
  ],
  "vectorIndexes": [
    {
      "path": "/vector1",
      "type": "quantizedFlat"
    },
    {
      "path": "/vector2",
      "type": "diskANN"
    }
  ]
}

Это важно

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

Это важно

Подстановочные символы (*, []) в настоящее время не поддерживаются в политике или индексе векторов.

Выполнение векторного поиска с помощью запросов VECTORDISTANCE

После создания контейнера с требуемой политикой вектора и вставки в контейнер векторных данных можно выполнять векторный поиск с помощью встроенной VECTORDISTANCE функции в запросе. Пример запроса NoSQL, который проектирует оценку сходства в качестве псевдонима scoreи сортирует по порядку наиболее похожих на наименее похожие:

SELECT TOP 10
  c.title,
  VECTORDISTANCE(c.contentVector, [1,2,3]) AS score 
FROM
  container c
ORDER BY
  VECTORDISTANCE(c.contentVector, [1,2,3])   

Это важно

Всегда используйте условие TOP N в инструкции SELECT запроса. В противном случае векторный поиск пытается вернуть гораздо больше результатов, что приводит к тому, что запрос будет стоить больше единиц запросов (ЕЗ) и имеет более высокую задержку, чем необходимо.