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

Azure AI Search admite un tipo binario empaquetado de Collection(Edm.Byte) para reducir aún más la huella 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, pero también puede agregar un campo binario a un índice en Azure Portal.

Los tipos de datos binarios están disponibles con carácter general a partir de la versión de API 2024-07-01 y se asignan a campos mediante las API Create Index o Create Or Update Index.

Sugerencia

Si está investigando la compatibilidad de vectores binarios con su superficie más pequeña, también puede considerar las características de cuantificación de vectores y reducción de almacenamiento en Azure AI Search. Las entradas son incrustaciones float32 o float16. La salida se almacena en un formato mucho menor. Para obtener más información, consulte Reducir el tamaño del vector a través de la cuantificación, los tipos de datos estrechos y las opciones de almacenamiento.

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 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 añadir un campo binario a un índice, configure una solicitud Create or Update Index utilizando la API REST o el portal Azure.

  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.

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.

  • Agregue un campo a la colección de campos y asígnele el nombre.
  • Establezca el tipo de datos en Collection(Edm.Byte).
  • Establezca vectorEncoding en packedBit para la codificación binaria.
  • Establezca dimensions en 1024. Especifique la dimensión de vector original (desempaquetada).
  • Establezca vectorSearchProfile en un perfil definido en el paso anterior.
  • Haga que el campo se pueda buscar.

La siguiente definición de campo es un ejemplo de las propiedades que debe establecer:

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

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.