Поиск векторов в 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. Выполните следующие действия, чтобы зарегистрировать:
- Перейдите на страницу ресурсов Azure Cosmos DB для NoSQL.
- В меню "Параметры" выберите область "Компоненты".
- Выберите функцию "Векторный поиск в Azure Cosmos DB для NoSQL".
- Ознакомьтесь с описанием функции, чтобы подтвердить ее включение.
- Выберите "Включить", чтобы включить векторную индексирование и возможность поиска.
Примечание.
Запрос на регистрацию будет автоматически утвержден; однако для полной активации учетной записи может потребоваться 15 минут.
Совет
Кроме того, используйте 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
рекомендуется, если число векторов для индексирования составляет около 50 000 или меньше на физическую секцию. Однако это просто общее руководство, и фактические показатели производительности должны быть проверены, так как каждый сценарий может отличаться.Индекс
diskANN
— это отдельный индекс, определенный специально для векторов с помощью DiskANN, набора алгоритмов индексирования векторов высокой производительности, разработанных Microsoft Research. Индексы DiskANN могут предложить некоторые из самых низких задержек, максимальной пропускной способности и наименьшей стоимости запросов ЕЗ, сохраняя высокую точность. Как правило, 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"
}
]
}
Внимание
Векторный путь, добавленный в раздел "исключенныеPaths" политики индексирования, чтобы обеспечить оптимизированную производительность для вставки. Не добавляя векторный путь к "исключеннымPaths", будет взиматься более высокая плата за единицу запросов и задержку для вставок векторов.
Внимание
Символы подстановочных карточек (*, []) в настоящее время не поддерживаются в политике векторов или векторном индексе.
Выполнение векторного поиска с помощью запросов 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
инструкции запроса. В противном случае векторный поиск попытается вернуть гораздо больше результатов, и запрос будет стоить больше единиц запросов и иметь более высокую задержку, чем необходимо.
Текущие ограничения
Индексирование и поиск векторов в Azure Cosmos DB для NoSQL имеет некоторые ограничения.
quantizedFlat
иdiskANN
индексы требуют индексирования по крайней мере 1000 векторов, чтобы убедиться, что квантизация является точной. Если индексируются менее 1000 векторов, то вместо этого используется полная проверка, а плата за ЕЗ может быть выше.- Векторы, индексированные с типом
flat
индекса, могут быть не более 505 измерений. Векторы, индексированные с типомquantizedFlat
индекса,DiskANN
могут быть не более 4096 измерений. - Индекс
quantizedFlat
использует тот же метод квантизации, что и DiskANN. - Скорость вставки векторов должна быть ограничена. Очень большое прием (более 5 млн векторов) может потребовать дополнительного времени сборки индекса.
- Базы данных общей пропускной способности не поддерживаются.
- В настоящее время индексирование векторов и поиск не поддерживается в учетных записях с аналитическим хранилищем (и Synapse Link) и общей пропускной способностью.
- После включения индексирования векторов и поиска в контейнере его нельзя отключить.
Следующий шаг
- DiskANN + Azure Cosmos DB — видео Microsoft Mechanics
- .NET — практическое руководство по индексу и векторным данным запросов
- Python — практическое руководство по индексу и векторным данным запросов
- Java — практическое руководство по индексу и векторным данным запросов
- Системная функция VectorDistance
- Обзор векторного индекса
- Политики векторного индекса
- Управление индексом
- Интеграции: