Бөлісу құралы:


Векторный поиск в Azure Cosmos DB для NoSQL (предварительная версия)

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

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

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

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

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

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

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

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

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

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

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

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

Регистрация в функции предварительного просмотра векторного поиска

Поиск вектора для Azure Cosmos DB для NoSQL требует предварительной версии регистрации компонентов на странице функций Azure Cosmos DB. Выполните следующие действия, чтобы зарегистрировать:

  1. Перейдите на страницу ресурсов Azure Cosmos DB для NoSQL.

  2. В меню "Параметры" выберите область "Компоненты".

  3. Выберите "Векторный поиск в Azure Cosmos DB для NoSQL".

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

  5. Нажмите кнопку "Включить", чтобы зарегистрировать в предварительной версии.

Примечание.

Запрос на регистрацию будет автоматически утвержден, однако может потребоваться несколько минут для принятия в силу.

Примечание.

DiskANN доступен в ранней предварительной версии и требует заполнения этой формы. Вы будете обращаться к члену команды Azure Cosmos DB, когда ресурс был подключен для использования индекса DiskANN.

Совет

Кроме того, используйте Azure CLI для обновления возможностей учетной записи для поддержки поиска векторов NoSQL.

az cosmosdb update \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --capabilities EnableNoSQLVectorSearch

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

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

  • Path: свойство, содержащее вектор (обязательный).
  • "datatype": тип данных свойства vector (по умолчанию Float32). 
  • "измерения": размерность или длина каждого вектора в пути. Все векторы в пути должны иметь одинаковое количество измерений. (по умолчанию 1536).
  • "distanceFunction": метрика, используемая для вычисления расстояния или сходства. Поддерживаемые метрики:
    • cosine, который имеет значения от -1 (наименее похожий) на +1 (наиболее похожий).
    • dot product, который имеет значения от -inf (наименее похожий) на +inf (наиболее похожий).
    • euclidean, который имеет значения от 0 (наиболее похожие) на +inf) (наименее похожий).

Примечание.

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

Политика вектора контейнера может быть описана как объекты 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 векторов, выполняется полная проверка вместо этого и приведет к повышению затрат на ЕЗ для запроса векторного поиска.

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

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

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

  • Индекс diskANN — это отдельный индекс, определенный специально для векторов с помощью DiskANN, набора алгоритмов индексирования векторов высокой производительности, разработанных Microsoft Research. Индексы DiskANN могут предложить некоторые из самых низких задержек, максимальной пропускной способности и наименьшей стоимости запросов ЕЗ, сохраняя высокую точность. Однако, поскольку DiskANN является приблизительным ближайшим индексом соседей (ANN), точность может быть ниже quantizedFlat или flat. DiskANN доступен в ранней предварительной версии и требует заполнения этой формы.

Внимание

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

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

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

Внимание

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

Внимание

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

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

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

SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Текущие ограничения и ограничения

Индексирование и поиск векторов в Azure Cosmos DB для NoSQL имеет некоторые ограничения, в то время как на ранних этапах общедоступной предварительной версии.

  • Можно указать по крайней мере один тип индекса на путь в политике векторного индекса.
  • Можно указать не более одного типа индекса DiskANN для каждого контейнера.
  • Индексирование векторов поддерживается только в новых контейнерах.
  • Векторы, индексированные с типом flat индекса, могут быть не более 505 измерений. Векторы, индексированные с типом quantizedFlat индекса, DiskANN могут быть не более 4096 измерений.
  • quantizedFlat использует тот же метод квантизации, что и DiskANN и не настраивается в настоящее время.
  • В настоящее время общие базы данных пропускной способности не могут использовать функцию предварительного просмотра векторного поиска.
  • Скорость приема должна быть ограничена при использовании ранней предварительной версии DiskANN.
  • В настоящее время в предварительной версии поиск векторов не поддерживается в учетных записях с аналитическим хранилищем, общей пропускной способностью, общей пропускной способностью, управляемыми клиентом ключами, непрерывным резервным копированием, Аналитика Службы хранилища и всеми версиями и каналом изменений.

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