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

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

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

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

В этой статье предполагается, что вы знакомы с созданием индекса в службе "Поиск ИИ Azure". Он использует REST API для иллюстрации каждого шага, но можно также добавить двоичное поле в индекс в портал Azure.

Типы двоичных данных обычно доступны начиная с API версии 2024-07-01 и назначаются полям с помощью API создания индекса или создания или обновления индекса .

Совет

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

Необходимые компоненты

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

Ограничения

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

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

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

  1. Чтобы добавить двоичное поле в индекс, настройте Create or Update Index запрос с помощью REST API или портал Azure.

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

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

  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 свойство в поле.

  • Добавьте поле в коллекцию полей и присвойте ему имя.
  • Задайте для типа Collection(Edm.Byte)данных значение .
  • packedBit Установите значение vectorEncoding для двоичного кодирования.
  • Задайте для параметра dimensions значение 1024. Укажите исходное (распаковаемое) векторное измерение.
  • Задайте vectorSearchProfile профиль, определенный на предыдущем шаге.
  • Сделайте поле доступным для поиска.

Следующее определение поля является примером свойств, которые необходимо задать.

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]

См. также

Примеры кода в репозитории azure-search-vector-samples демонстрируют комплексные рабочие процессы, включающие определение схемы, векторизацию, индексирование и запросы.

Существует демонстрационный код для Python, C# и JavaScript.