Поделиться через


Индексирование векторов в полудлинной точности в Azure DocumentDB

Что такое индексирование векторов с половинной точностью?

Индексирование вектора с половинной точностью позволяет хранить и индексировать векторные внедрения с использованием 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.
Использование передискретизации Помогает с незначительными потерями точности. Важно для восстановления точности после высокого уровня сжатия.
Идеальные варианты использования Умеренное сокращение памяти, увеличение размерности, допустимый компромисс с точностью. Большие наборы данных, высокая размерность, приоритет быстрого поиска, управление точностью при помощи передискретизации.

Следующий шаг