Индексирование двоичных векторов для поиска векторов

Поиск с использованием ИИ Azure поддерживает Collection(Edm.Byte) упакованный двоичный тип, чтобы уменьшить объем хранилища и памяти векторных данных. Этот тип данных можно использовать для выходных данных моделей, таких как модели бинарного встраивания Embed v3 от Cohere, или любой другой модели или процесса встраивания, который выводит векторы в виде двоичных байтов.

Существует три шага по настройке индекса для двоичных векторов:

  • Добавление алгоритма поиска вектора, указывающего расстояние Хамминга для сравнения двоичных векторов
  • Добавление профиля вектора, указывающего на алгоритм
  • Добавление поля вектора типа Collection(Edm.Byte) и назначение расстояния Хамминга

В этой статье используются REST API для иллюстрации, но вы также можете использовать Azure SDK или портал Azure для добавления двоичного поля в индекс. Вы назначаете двоичный тип данных полям с помощью индексов — создание или индексы — создание или обновление REST API.

Совет

Если вы изучаете поддержку двоичного вектора для его меньшего объема, вы также можете рассмотреть функции квантизации вектора и сокращения хранилища в Поиск с использованием ИИ Azure. Входные данные — эмбеддинги типа float32 или float16. Выходные данные хранятся в гораздо меньшем формате. Дополнительные сведения см. в разделе "Сжатие" с помощью двоичной или скалярной квантизации и назначения узких типов данных.

Необходимые условия

  • Знакомство с созданием индекса и добавлением полей векторов.

  • Двоичные векторы с одним битом на измерение, упакованные в значения uint8 с восемью битами на значение. Эти векторы можно получить с помощью моделей, которые непосредственно создают упакованные двоичные векторы или квантизируя в двоичные векторы в клиентском приложении во время индексирования и извлечения.

Ограничения

  • Нет поддержки портала Azure в мастере Import data.

  • Нет поддержки двоичных полей в навыке AML который используется для интегрированной векторизации моделей из каталога моделей Microsoft Foundry.

Добавление алгоритма поиска вектора и профиля вектора

Алгоритмы векторного поиска создают структуры навигации запросов во время индексирования. Для двоичных векторных полей система использует метрику расстояния Хамминга для сравнения векторов.

Чтобы настроить векторный поиск двоичных векторов, выполните приведенные далее действия.

  1. Настройте запрос индексов — создание или обновление (REST API).

  2. В схеме индекса добавьте раздел vectorSearch, указывающий профили и алгоритмы.

  3. Добавьте один или несколько алгоритмов поиска векторов , использующих метрику hammingсходства. Алгоритм иерархических навигационируемых небольших миров (HNSW) распространен, но вы также можете использовать расстояние Хэмминга с исчерпывающими K-Ближайшими соседями (KNN).

  4. Добавьте один или несколько профилей векторов, которые указывают алгоритм.

В следующем примере показана базовая vectorSearch конфигурация.

  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "myHnswProfile", 
        "algorithm": "myHnsw", 
        "compression": null, 
        "vectorizer": null 
      } 
    ], 
    "algorithms": [ 
      { 
        "name": "myHnsw", 
        "kind": "hnsw", 
        "hnswParameters": { 
          "metric": "hamming" 
        } 
      }, 
      { 
        "name": "myExhaustiveKnn", 
        "kind": "exhaustiveKnn", 
        "exhaustiveKnnParameters": { 
          "metric": "hamming" 
        } 
      } 
    ] 
  }

Добавление двоичного поля в индекс

Коллекция полей индекса должна содержать поле для ключа документа, векторных полей и других полей, необходимых для сценариев гибридного поиска.

Двоичные поля используют тип Collection(Edm.Byte) и содержат эмбеддинги в упакованной форме. Например, если исходное измерение внедрения имеет 1024значение, длина упакованного двоичного вектора равна ceiling(1024 / 8) = 128. Вы получите упакованную форму, установив свойство vectorEncoding для поля.

Чтобы добавить двоичное поле вектора в индекс:

  1. Добавьте поле в коллекцию полей и присвойте ему имя.

  2. Установите тип данных на Collection(Edm.Byte).

  3. vectorEncoding Установите значение packedBit для двоичного кодирования.

  4. Установите dimensions на 1024. Укажите исходную (распакованную) размерность вектора.

  5. Установите vectorSearchProfile на профиль, который вы задали на предыдущем шаге.

  6. Установите searchable на true.

Следующее определение поля является примером двоичного векторного поля в схеме индекса.

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]
  • Просмотрите репозиторий azure-search-vector-samples для комплексных рабочих процессов, включающих определение схемы, векторизацию, индексирование и запросы.

  • Просмотрите демонстрационный код векторного поиска для C#, Python и JavaScript.