Indexar vectores binarios para la búsqueda de vectores

Búsqueda de Azure AI admite el tipo binario empaquetado Collection(Edm.Byte) para reducir aún más la superficie de almacenamiento y memoria de los datos vectoriales. Puede usar este tipo de datos para la salida de los modelos, como los modelos de inserción binaria de Cohere v3 o cualquier otro modelo de inserción o proceso que genera vectores como bytes binarios.

Hay tres pasos para configurar un índice para vectores binarios:

  • Agregar un algoritmo de búsqueda vectorial que especifica distancia de Hamming para la comparación de vectores binarios
  • Agregar un perfil de vector que apunte al algoritmo
  • Agregar un campo vectorial de tipo Collection(Edm.Byte) y asignar la distancia de Hamming

En este artículo se usan las API REST para la ilustración, pero también puede usar un SDK de Azure o el portal de Azure para agregar un campo binario a un índice. Puede asignar el tipo de datos binario a los campos mediante las API REST Indexes - Create or Indexes - Create Or Update .

Propina

Si estás investigando la compatibilidad de vectores binarios por su huella más pequeña, también podrías considerar las características de cuantificación de vectores y reducción de almacenamiento en Búsqueda de Azure AI. Las entradas son incrustaciones float32 o float16. El resultado se almacena en un formato considerablemente más reducido. Para obtener más información, consulte Comprimir mediante cuantificación binaria o escalar y Asignación de tipos de datos estrechos.

Requisitos previos

  • Familiaridad con la creación de un índice y la adición de campos vectoriales.

  • Vectores binarios, con un bit por dimensión, empaquetados en valores uint8 con ocho bits por valor. Puede obtener estos vectores mediante modelos que generan directamente vectores binarios empaquetados o cuantificando vectores en vectores binarios en la aplicación cliente durante la indexación y recuperación.

Limitaciones

  • No hay soporte para el portal de Azure en el asistente Importar datos.

  • No se admiten campos binarios en la aptitud AML que se usa para la vectorización integrada de modelos del catálogo de modelos Microsoft Foundry.

Agregar un algoritmo de búsqueda vectorial y un perfil de vector

Los algoritmos de búsqueda vectorial crean las estructuras de navegación de consulta durante la indexación. En el caso de los campos vectoriales binarios, el sistema usa la métrica de distancia hamming para realizar comparaciones vectoriales.

Para configurar la búsqueda de vectores para vectores binarios:

  1. Configura una solicitud Índices: Crear o Actualizar (REST API).

  2. En el esquema de índice, agregue una vectorSearch sección que especifique perfiles y algoritmos.

  3. Agregue uno o varios algoritmos de búsqueda vectorial que usen una métrica de similitud de hamming. El algoritmo Jerárquico de Pequeños Mundos Navegables (HNSW) es común, pero también puede usar la distancia de Hamming con K-Vecinos Más Cercanos (KNN) exhaustivos.

  4. Agregue uno o varios perfiles vectoriales que especifiquen el algoritmo.

En el ejemplo siguiente se muestra una configuración básica 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" 
        } 
      } 
    ] 
  }

Agregar un campo binario a un índice

La colección fields de un índice debe incluir un campo para la clave del documento, los campos vectoriales y cualquier otro campo que necesite para escenarios de búsqueda híbrida.

Los campos binarios usan el Collection(Edm.Byte) tipo y contienen incrustaciones en formulario empaquetado. Por ejemplo, si la dimensión de inserción original es 1024, la longitud del vector binario empaquetado es ceiling(1024 / 8) = 128. Para obtener la forma empaquetada, establezca la propiedad vectorEncoding en el campo.

Para agregar un campo de vector binario a un índice:

  1. Agregue un campo a la colección fields y asígnele un nombre.

  2. Establezca el tipo de datos en Collection(Edm.Byte).

  3. vectorEncoding Establézcalo packedBit en para la codificación binaria.

  4. Establezca dimensions en 1024. Especifique la dimensión de vector original (desempaquetada).

  5. Establezca vectorSearchProfile en un perfil definido en el paso anterior.

  6. Establezca searchable en true.

La siguiente definición de campo es un ejemplo de un campo vectorial binario en un esquema de índice.

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]
  • Revise el repositorio azure-search-vector-samples para flujos de trabajo de un extremo a otro que incluyen definición de esquema, vectorización, indexación y consultas.

  • Revise el código de demostración de búsqueda vectorial de C#, Python y JavaScript.