Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Что такое индексирование векторов с половинной точностью?
Индексирование вектора с половинной точностью позволяет хранить и индексировать векторные внедрения с использованием 16-разрядных чисел с плавающей запятой вместо стандартных 32-разрядных с плавающей запятой. Эта оптимизация приводит к значительному сокращению затрат на использование памяти и хранилище, что делает его более возможным для работы с большими наборами данных и более высокими размерными векторами. Кроме того, оптимизируя плотность данных, она может способствовать повышению производительности запросов во многих сценариях векторного поиска.
Ключевые преимущества
- Поддержка повышенной размерности: С половинной точностью теперь можно индексировать векторы с размером до 4000 измерений (увеличение с предыдущего предела в 2000).
- Сокращение объема хранилища: Хранение векторов в 16-разрядном формате значительно уменьшает объем хранилища, необходимого по сравнению с векторами полной точности. Это может привести к значительной экономии затрат, особенно для крупномасштабных векторных баз данных.
- Настраиваемая производительность и точность: Чтобы точно настроить результаты поиска, мы предоставляем параметр переполнения во время выполнения запроса. Это позволяет контролировать компромисс между скоростью извлечения и потенциальным воздействием снижения точности.
Создание векторного индекса Half-Precision
При определении векторного индекса для коллекции можно включить сжатие с половинной точностью, указав "compression": "half" параметр в пределах коллекции cosmosSearchOptions.
db.runCommand({
"createIndexes": "<vector_collection_name>",
"indexes": [
{
"key": { "<vector_field_name>": "cosmosSearch" },
"name": "<index_name>",
"cosmosSearchOptions": {
"kind": "vector-hnsw", // or vector-ivf
"similarity": "cos",
"dimensions": integer_value, // max 4000
"compression": "half"
}
}
]
});
Улучшение поиска с помощью пересэмплирования
При запросе векторного индекса, используюющего сжатие половинной точности, можно использовать oversampling параметр на $search этапе агрегирования. Этот параметр помогает снизить потенциальную потерю точности, представленную 16-разрядным представлением.
Фактор oversampling позволяет получить больше потенциальных ближайших соседей из индекса половины точности, чем окончательное число результатов, которые требуется (k). Затем эти кандидаты сравниваются с использованием исходных векторов полной точности, чтобы обеспечить более высокую точность в окончательных ранжированных результатах.
Например, чтобы получить первые 10 (k=10) наиболее похожих векторов, рекомендуется задать oversampling значение, например 1.5 или 2.0. При этом "oversampling": 1.5 система сначала получит 15 кандидатов из индекса с половинной точностью, а затем уточнит топ-10 с помощью данных полной точности.
db.collection.aggregate([
{
"$search": {
"cosmosSearch": {
"vector": query_vector,
"path": path_to_property,
"k": num_results_to_return,
"oversampling": double_value
}
}
},
{
"$project": {
"similarityScore": { "$meta": "searchScore" },
"_id": 0
}
}
]);
Замечание
Фактор oversampling должен быть двойным с минимальным значением 1.0. Этот фактор относится только к векторным индексам, созданным с "compression": "half" помощью.
Half-Precision и квантизация продуктов
Как Half-Precision, так и квантизация продуктов (PQ) сжимают векторные индексы в Azure DocumentDB, но они отличаются тем, как они достигают сжатия и влияют на поиск:
| Функция | половинная точность | Квантизация продуктов (PQ) |
|---|---|---|
| Метод сжатия | Уменьшает каждое векторное измерение до 16 бит. | Делит пространство векторов на подпространства и квантуизирует каждый. |
| Максимальное количество измерений | До 4000 | До 16 000 |
| Изменение точности | Небольшая потеря из-за нижней глубины бита. | Потенциально больший убыток, регулируемый с помощью pqCompressedDims. |
| Скорость поиска | Умеренное увеличение скорости из-за меньшего индекса. | Значительное увеличение скорости из-за сильно сжатых векторов. |
| Время сборки индекса | Относительно быстро. | Может быть длиннее из-за центроидного обучения (pqSampleSize). |
| Поддержка индекса | HNSW, IVF. | DiskANN. |
| Configuration | Просто включите compression: "half". |
Дополнительные параметры: pqCompressedDims, pqSampleSize. |
| Использование передискретизации | Помогает с незначительными потерями точности. | Важно для восстановления точности после высокого уровня сжатия. |
| Идеальные варианты использования | Умеренное сокращение памяти, увеличение размерности, допустимый компромисс с точностью. | Большие наборы данных, высокая размерность, приоритет быстрого поиска, управление точностью при помощи передискретизации. |