Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Квантизация продуктов (PQ) — это мощный метод в Azure DocumentDB, который значительно сжимает высокомерные векторные внедрения, используемые в векторном поиске. Это сжатие сокращает использование памяти и ускоряет поиск ближайших соседей, повышая эффективность больших векторных наборов данных. Хотя 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
}
}
]
}
| Поле | Тип | Description |
|---|---|---|
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 DocumentDB предоставляет параметр oversampling в операторе $search.
Коэффициент oversampling (тип float с минимальным значением 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 и квантизация продуктов
И индексы с половинной точностью Half-Precision, и продуктное квантование (PQ) сжимают индексы векторов в Azure DocumentDB, но различаются в том, как они достигают сжатия и влияют на поиск:
| Функция | половинная точность | Квантизация продуктов (PQ) |
|---|---|---|
| Метод сжатия | Уменьшает каждое векторное измерение до 16 бит. | Делит пространство векторов на подпространства и квантуизирует каждый. |
| Максимальное количество измерений | До 4000 | До 16 000 |
| Изменение точности | Небольшая потеря из-за нижней глубины бита. | Потенциально больший убыток, регулируемый с помощью pqCompressedDims. |
| Скорость поиска | Умеренное увеличение скорости из-за меньшего индекса. | Значительное увеличение скорости из-за сильно сжатых векторов. |
| Время сборки индекса | Относительно быстро. | Может быть длиннее из-за центроидного обучения (pqSampleSize). |
| Поддержка индекса | HNSW, IVF. | DiskANN. |
| Configuration | Просто включите compression: "half". |
Дополнительные параметры: pqCompressedDims, pqSampleSize. |
| Использование передискретизации | Помогает с незначительными потерями точности. | Важно для восстановления точности после высокого уровня сжатия. |
| Идеальные варианты использования | Умеренное сокращение памяти, увеличение размерности, допустимый компромисс с точностью. | Большие наборы данных, высокая размерность, приоритет быстрого поиска, управление точностью при помощи передискретизации. |
Рекомендации по квантизации продуктов
-
Противостояние точности и сжатия: Более высокое сжатие PQ приводит к уменьшению индексов и более быстрому поиску, но приводит к потере точности. Поэкспериментируйте с
pqCompressedDimsиoversampling, чтобы найти правильный баланс. -
Время сборки индекса: Создание индекса PQ может занять больше времени из-за процесса обучения центроидов, на который влияет
pqSampleSize. - Распределение данных: PQ лучше всего работает, если векторные данные имеют четкую структуру кластера.