Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure Cosmos DB для NoSQL теперь предлагает эффективное индексирование и поиск векторов. Эта функция предназначена для обработки много модальных, высокомерных векторов, обеспечивая эффективный и точный поиск векторов в любом масштабе. Теперь вы можете хранить векторы непосредственно в документах вместе с данными. Каждый документ в базе данных может содержать не только традиционные данные без схемы, но и многофакторные высокомерные векторы в качестве других свойств документов. Это совместное размещение данных и векторов позволяет эффективно индексировать и выполнять поиск, так как векторы хранятся в той же логической единице, что и данные, которые они представляют. Объединение векторов и данных упрощает управление данными, архитектуры приложений ИИ и эффективность операций на основе векторов.
Azure Cosmos DB для NoSQL обеспечивает гибкость, позволяя выбрать метод индексирования векторов:
- Плоский или поиск k-ближайших соседей, точный метод поиска (иногда называемый полным перебором), может обеспечить полный охват при небольших векторных поисках. особенно при сочетании с фильтрами запросов и ключами секционирования.
- Квантизованный плоский индекс, который сжимает векторы с помощью методов квантизации на основе DiskANN для повышения эффективности поиска kNN.
- DiskANN, набор алгоритмов индексирования векторов, разработанных Корпорацией Майкрософт 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 для NoSQL.
- На левой панели в разделе "Параметры" выберите "Компоненты".
- Выберите векторный поиск ДЛЯ API NoSQL.
- Ознакомьтесь с описанием функции, чтобы убедиться, что вы хотите включить ее.
- Выберите "Включить", чтобы включить векторный поиск в Azure Cosmos DB для NoSQL.
Совет
Кроме того, используйте Azure CLI для обновления возможностей учетной записи для поддержки поиска векторов NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Запрос на регистрацию автоматически одобряется, но может потребоваться 15 минут для вступления в силу.
Политики вектора контейнеров
Для выполнения векторного поиска с помощью Azure Cosmos DB для NoSQL требуется определить политику вектора для контейнера. Это предоставляет важную информацию для ядра СУБД для эффективного поиска векторов, найденных в документах контейнера. Это также предоставляет необходимые сведения для политики индексирования векторов, если вы решите её указать. Следующие сведения включаются в содержащуюся векторную политику:
-
path: путь свойства, содержащий векторы (обязательный). -
datatype: тип данных свойства вектора. Поддерживаемые типы:float32(по умолчанию)int8иuint8. -
dimensions: размерность или длина каждого вектора в пути. Все векторы в пути должны иметь одинаковое количество измерений. Значение по умолчанию —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должен иметь более низкую задержку, более высокую пропускную способность и более низкую стоимость 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/?"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Внимание
Символы подстановочных карточек (*, []) и векторные пути, вложенные внутри массивов, в настоящее время не поддерживаются в политике векторов или векторном индексе.
Выполнение векторного поиска с помощью запросов VectorDistance
После создания контейнера с требуемой политикой вектора и вставки в контейнер векторных данных можно выполнить поиск вектора с помощью системной функции VectorDistance в запросе. В следующем примере показан запрос NoSQL, который проектирует оценку сходства в качестве псевдонима SimilarityScoreи сортирует по порядку наиболее похожих на наименее похожий:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Внимание
Всегда используйте условие TOP N в инструкции SELECT запроса. В противном случае векторный поиск пытается вернуть гораздо больше результатов, что требует большего количества RUs и приводит к более высокой задержке, чем необходимо.
Текущие ограничения
Индексирование и поиск векторов в Azure Cosmos DB для NoSQL имеет некоторые ограничения.
-
quantizedFlatиdiskANNиндексы требуют индексирования по крайней мере 1000 векторов, чтобы убедиться, что квантизация является точной. Если индексируется менее 1000 векторов, то вместо этого используется полное сканирование, и плата за ресурсы может быть выше. - Векторы, индексированные с типом
flatиндекса, могут быть не более 505 измерений. Векторы, индексированные с типомquantizedFlatиндекса,DiskANNмогут быть не более 4096 измерений. - Скорость вставки векторов должна быть ограничена. Очень большая загрузка (более 5 млн [векторов]) может потребовать больше времени на построение индекса.
- Функция поиска векторов в настоящее время не поддерживается в существующих контейнерах. Чтобы использовать его, необходимо создать новый контейнер, а политику внедрения вектора на уровне контейнера необходимо указать.
- Базы данных общей пропускной способности не поддерживаются.
- В настоящее время индексирование векторов и поиск не поддерживается в учетных записях с общей пропускной способностью.
- После включения векторного индексирования и поиска в контейнере его нельзя отключить.
Связанный контент
- DiskANN + Azure Cosmos DB — видео Microsoft Mechanics
- .NET. Как индексировать и запрашивать векторные данные
- Python — как индексировать и запрашивать векторные данные
- Java — как индексировать и запрашивать векторные данные
- Системная функция VectorDistance
- Обзор векторного индекса
- Политики векторного индекса
- Примеры политики индексирования векторов
- Интеграции: