Compartir a través de


Indexación de vectores binarios para el vector de búsqueda

A partir de la API de REST 2024-05-01-preview, Búsqueda de Azure AI admite un tipo binario empaquetado de 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 modelos como Modelos de inserción binaria v3 de Cohere.

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

  • Agregar un algoritmo de vector de búsqueda que especifica distancia de Hamming para la comparación de vectores binarios
  • Agregar un perfil de vector que apunte al algoritmo
  • Adición del perfil de vector a la definición de campo binario

En este artículo se da por supuesto que está familiarizado con la creación de un índice en Búsqueda de Azure AI. Usa las API de REST para ilustrar cada paso. También puede agregar un tipo de campo binario a un índice en Azure Portal.

Requisitos previos

  • Vectores binarios, con 1 bit por dimensión, empaquetados en valores uint8 con 8 bits por valor. Estos se pueden obtener mediante modelos que generan directamente vectores "binarios empaquetados" o cuantificando vectores en vectores binarios del lado cliente durante la indexación y la búsqueda.

Limitaciones

  • No se admite la compresión escalar ni la vectorización integrada.
  • No se admite Azure Portal en el Asistente para importación y vectorización de datos.
  • No se admiten campos binarios en la Aptitud AML que se usa para la vectorización integrada de modelos en el catálogo de modelos de Inteligencia artificial de Azure Studio.

Adición de un algoritmo de vector de búsqueda y un perfil de vector

Los algoritmos de vector de búsqueda se usan para crear estructuras de navegación de consulta durante la indexación. Para los campos de vectores binarios, las comparaciones vectoriales se realizan con la métrica de distancia de Hamming.

  1. Para agregar un campo binario a un índice, configure una solicitud de Create or Update Index mediante la API de REST 2024-05-01-preview o Azure Portal.

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

  3. Agregue uno o varios algoritmos de vector de búsqueda que tengan una métrica de similitud de hamming. Es habitual usar mundos pequeños jerárquicos navegables (HNSW), pero también se puede usar la distancia de Hamming con vecinos más próximos a K exhaustivos.

  4. Agregue uno o varios perfiles vectoriales que especifiquen el algoritmo. No se puede especificar la compresión escalar ni un vectorizador en esta versión preliminar.

En el siguiente ejemplo 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" 
        } 
      } 
    ] 
  }

Adición de un campo binario a un índice

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

Los campos binarios son de tipo Collection(Edm.Byte) y contienen inserciones en formato 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 el formulario empaquetado, establezca la propiedad vectorEncoding en el campo.

  1. Agregue un campo a la colección de campos y asígnele el nombre.
  2. Establezca el tipo de datos en Collection(Edm.Byte).
  3. Establezca vectorEncoding en packedBit 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.

La definición mínima de una colección de campos debe ser similar al siguiente ejemplo:

  "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" 
    } 
  ]

Consulte también

Los ejemplos de código del repositorio azure-search-vector-samples muestran flujos de trabajo de un extremo a otro que incluyen definición de esquema, vectorización, indexación y consultas.

Hay código de demostración para Python, C# y JavaScript.