Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Квантизация продуктов (PQ) — это мощный метод в Azure Cosmos DB для виртуального ядра MongoDB, который значительно сжимает высокомерные векторные внедрения, используемые в векторном поиске. Это сжатие сокращает использование памяти и ускоряет поиск ближайших соседей, повышая эффективность больших векторных наборов данных. Хотя PQ предлагает преимущества для скорости и масштабирования, это может оказаться за счет точности.
Преимущества
- Сокращенное хранилище: PQ значительно снижает объем хранилища, необходимого для векторных индексов, по сравнению с векторами с полной точностью (float32), что приводит к значительной экономии затрат для больших наборов данных.
- Быстрый поиск: Работа с сжатыми векторами позволяет системе вычислять расстояния и находить потенциальные ближайшие соседи гораздо быстрее, чем с векторами полной точности.
- Улучшенная масштабируемость: Более низкие затраты на память позволяют масштабировать векторный поиск для обработки больших и более высоких размеров внедрения в кластер.
Принцип работы
Квантизация продукта разделяет пространство высокомерных векторов на несколько нижнемерных подпространств. Затем каждое подпространство квантуется независимо с помощью алгоритма кластеризации (обычно алгоритм k-средних). Центр каждого кластера представляет все векторы внутри него. Затем каждый исходный вектор представлен коротким кодом идентификаторов кластера, к которому он принадлежит в каждом подпространстве.
Использование квантизации продуктов
Чтобы создать векторный индекс с квантацией продукта, используйте createIndexes
команду с указанием cosmosSearchOptions
"compression": "pq"
и "kind" : "vector-diskann"
:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "<string_value>", // "COS", "L2"
"dimensions": <integer_value>, // Max 16,000
"compression": "pq",
"pqCompressedDims": <integer_value>, // Dimensions after compression (< original)
"pqSampleSize": <integer_value> // Samples for centroid generation
}
}
]
}
Поле | Тип | Описание |
---|---|---|
compression |
струна | Установите "pq" , чтобы включить квантизацию продукта. |
pqCompressedDims |
целое число | Измерения после сжатия PQ (должны быть меньше исходных измерений). Автоматически вычисляется, если пропущен. Диапазон: 1–8000. |
pqSampleSize |
целое число | Количество примеров векторов для обучения центроидов PQ. Более высокое значение означает лучшее качество, но более длительное время сборки. По умолчанию: 1000. Диапазон: 1000–100000. |
Замечание
В настоящее время квантизация продуктов поддерживается только с типом vector-diskann
индекса.
Замечание
Для получения наилучших результатов создайте индекс PQ после получения данных. Если коллекция пуста, система использует случайные векторы для начальных центроидов. Если количество документов меньше pqSampleSize
, обучающие данные заполняются случайными данными в диапазоне существующих векторных данных.
Настройка сжатых измерений
Если не указать pqCompressedDims
, он автоматически определяется на основе исходного вектора dimensions
:
Исходный диапазон измерений | pqCompressedDims |
---|---|
[0 - 32) | размеры / 2 |
[32 - 64) | 16 |
[64 - 128) | 32 |
[128 - 512) | 64 |
[512 - 1536) | 96 |
выше 1536 | 128 |
Создание индекса PQ
db.runCommand(
{
"createIndexes": "your_vector_collection",
"indexes": [
{
"key": { "v": "cosmosSearch" },
"name": "diskann_pq_index",
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "COS",
"dimensions": 1536,
"compression": "pq",
"pqCompressedDims": 96,
"pqSampleSize": 2000
}
}
]
} )
Улучшение поиска с помощью пересэмплинга
Сжатие PQ может привести к потере точности в вычислениях расстояния. Чтобы уменьшить это, Azure Cosmos DB для MongoDB (vCore) предлагает oversampling
параметр в операторе $search
.
Коэффициент oversampling
(число с плавающей запятой, минимум 1) указывает, на сколько больше векторов кандидатов следует извлекать из сжатого индекса, чем k
(число требуемых результатов). Эти дополнительные кандидаты используются для уточнения поиска с помощью исходных векторов полной точности, повышая окончательную верхнюю k
точность. Например, чтобы получить первые 10 (k
=10) наиболее похожих векторов, рекомендуется задать oversampling
значение, например 1.5 или 2.0. При этом "oversampling": 1.5
система сначала получит 15 кандидатов из индекса, а затем уточнит топ-10 с помощью данных полной точности.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
Этот фрагмент кода демонстрирует векторный поиск с помощью $search
оператора с квантацией продукта. Он получает queryVector
в качестве входных данных и выполняет поиск по полю v
. Запрос запрашивает 10 наиболее похожих документов (k: 10
), с коэффициентом oversampling
2.0, что позволяет получить 20 кандидатов, улучшая точность поиска по отношению к сжатому индексу.
db.your_vector_collection.aggregate([
{
$search: {
"cosmosSearch": {
"vector": [0.1, 0.5, 0.9, ...],
"path": "v",
"k": 10,
"oversampling": 2.0 // Retrieve 2 * 10 = 20 candidates for reranking
},
"returnStoredSource": true
}
}
])
Half-Precision и квантизация продуктов
И полупрецизионное сжатие, и квантование продукта (PQ) сжимают индексы векторов в Azure Cosmos DB для MongoDB (vCore), но они различаются по способу достижения сжатия и влиянию на поиск.
Функция | Half-Precision | Квантизация продуктов (PQ) |
---|---|---|
Метод сжатия | Уменьшает каждое векторное измерение до 16 бит. | Делит пространство векторов на подпространства и квантуизирует каждый. |
Максимальное количество измерений | До 4000 | До 16 000 |
Изменение точности | Небольшая потеря из-за нижней глубины бита. | Потенциально больший убыток, настраиваемый с помощью pqCompressedDims . |
Скорость поиска | Умеренное увеличение скорости из-за меньшего индекса. | Значительное увеличение скорости из-за сильно сжатых векторов. |
Время сборки индекса | Относительно быстро. | Может быть длиннее из-за центроидного обучения (pqSampleSize ). |
Поддержка индекса | HNSW, IVF. | DiskANN. |
Конфигурация | Просто включите compression: "half" . |
Дополнительные параметры: pqCompressedDims , pqSampleSize . |
Использование передискретизации | Помогает избежать незначительных потерь в точности. | Важно для восстановления точности после значительного сжатия. |
Идеальные варианты использования | Умеренное сокращение памяти, увеличенные размеры, допустимый компромисс в точности. | Большие наборы данных, высокая размерность, быстрый поиск с приоритетом, точность, управляемая с использованием избыточной выборки. |
Рекомендации по квантизации продуктов
-
Точность и сжатие: Более высокое сжатие PQ приводит к уменьшению индексов и более быстрому поиску, но вызывает потерю точности. Поэкспериментируйте с помощью
pqCompressedDims
иoversampling
, чтобы найти правильный баланс. -
Время сборки индекса: Создание индекса PQ может занять больше времени из-за процесса обучения центроидов, на который влияет
pqSampleSize
. - Распределение данных: PQ лучше всего работает, если векторные данные имеют четкую структуру кластера.