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


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

Внимание

Типы двоичных данных доступны в общедоступной предварительной версии в разделе "Дополнительные условия использования". REST API 2024-05-01-preview и более поздних предварительных версий предоставляют новый тип данных.

Начиная с REST API 2024-05-01-preview, поиск ИИ Azure поддерживает упакованный двоичный тип Collection(Edm.Byte) для дальнейшего уменьшения объема хранилища и памяти векторных данных. Этот тип данных можно использовать для выходных данных из таких моделей, как внедрение двоичных моделей Cohere версии 3.

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

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

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

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

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

Ограничения

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

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

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

  1. Чтобы добавить двоичное поле в индекс, настройте Create or Update Index запрос с помощью REST API 2024-05-01-preview или портал 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 свойство в поле.

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

Минимальное определение коллекции полей должно выглядеть примерно так:

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

См. также

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

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