Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Что такое индексирование векторов с половинной точностью?
Индексирование вектора с половинной точностью позволяет хранить и индексировать векторные внедрения с использованием 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, но они отличаются тем, как они достигают сжатия и влияют на поиск:
| Feature | половинная точность | Квантизация продуктов (PQ) |
|---|---|---|
| Метод сжатия | Уменьшает каждое векторное измерение до 16 бит. | Делит пространство векторов на подпространства и квантуизирует каждый. |
| Максимальное количество измерений | До 4000 | До 16 000 |
| Изменение точности | Небольшая потеря из-за нижней глубины бита. | Потенциально больший убыток, регулируемый с помощью pqCompressedDims. |
| Скорость поиска | Умеренное увеличение скорости из-за меньшего индекса. | Значительное увеличение скорости из-за сильно сжатых векторов. |
| Время сборки индекса | Относительно быстро. | Может быть длиннее из-за центроидного обучения (pqSampleSize). |
| Поддержка индекса | HNSW, IVF. | DiskANN. |
| Configuration | Просто включите compression: "half". |
Дополнительные параметры: pqCompressedDims, pqSampleSize. |
| Использование передискретизации | Помогает с незначительными потерями точности. | Важно для восстановления точности после высокого уровня сжатия. |
| Идеальные варианты использования | Умеренное сокращение памяти, увеличение размерности, допустимый компромисс с точностью. | Большие наборы данных, высокая размерность, приоритет быстрого поиска, управление точностью при помощи передискретизации. |