Compartir vía


Asignación de tipos de datos estrechos a campos vectoriales en Búsqueda de Azure AI

Una manera fácil de reducir el tamaño del vector es almacenar incrustaciones en un formato de datos más pequeño. La mayoría de los modelos de inserción generan números de punto flotante de 32 bits, pero si cuantifica los vectores, o si el modelo de inserción lo admite de forma nativa, la salida puede ser float16, int16 o int8, que es significativamente menor que float32. Puede acomodar estos tamaños de vector más pequeños asignando un tipo de datos estrecho a un campo vectorial. En el índice vectorial, los tipos de datos estrechos consumen menos almacenamiento.

Los tipos de datos se asignan a los campos de una definición de índice. Puede usar Azure Portal, las API REST de búsqueda o un paquete de Azure SDK que proporcione la característica.

Requisitos previos

  • Modelo de inserción que genera formatos de datos pequeños, como los modelos de inserción text-embedding-3 o Cohere V3.

Tipos de datos estrechos admitidos

  1. Revise los tipos de datos usados para los campos vectoriales para el uso recomendado:

    • Número de punto flotante de 32 bits Collection(Edm.Single) (valor predeterminado)
    • Collection(Edm.Half) Punto flotante de 16 bits (estrecho)
    • Collection(Edm.Int16) Entero con signo de 16 bits (estrecho)
    • Collection(Edm.SByte) Entero con signo de 8 bits (estrecho)
    • Collection(Edm.Byte) Entero sin signo de 8 bits (solo se permite con tipos de datos binarios empaquetados)
  2. En esa lista, determine qué tipo de datos es válido para la salida del modelo de inserción o para los vectores que se someten a la cuantificación personalizada.

    En la tabla siguiente se proporcionan vínculos a varios modelos de inserción que pueden usar un tipo de datos estrecho (Collection(Edm.Half)) sin cuantificación adicional. Puede convertir de float32 a float16 (mediante Collection(Edm.Half)) sin trabajo adicional.

    Modelo de inserción Salida nativa Asignación de este tipo en Azure AI Search
    text-embedding-ada-002 Float32 Collection(Edm.Single) o Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) o Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) o Collection(Edm.Half)
    Modelos de inserción de Cohere V3 con int8 embedding_type Int8 Collection(Edm.SByte)

    Se pueden usar otros tipos de datos estrechos si el modelo emite incrustaciones en el formato de datos más pequeño o si tiene una cuantificación personalizada que convierte vectores a un formato más pequeño.

  3. Asegúrese de comprender los inconvenientes de un tipo de datos estrecho. Collection(Edm.Half) tiene menos información, lo que da como resultado una resolución menor. Si los datos son homogéneos o densos, la pérdida de detalles o matices adicionales podría dar lugar a resultados inaceptables en el momento de la consulta, ya que hay menos detalles que se pueden usar para distinguir los vectores cercanos.

Asignación del tipo de datos

Defina y cree un índice. Puede usar Azure Portal, Crear o actualizar índice (API REST)o un paquete de Azure SDK para este paso.

Esta definición de campo usa un tipo de datos estrecho, Collection(Edm.Half), que puede aceptar una inserción float32 almacenada como un valor float16. Como es true para todos los campos vectoriales, se establecen dimensions y vectorSearchProfile. Los detalles de vectorSearchProfile son irrelevantes para el tipo de datos.

Se recomienda establecer retrievable y stored en true si desea comprobar visualmente los valores del campo. En una recompilación posterior, puede cambiar estas propiedades a false para conseguir unos requisitos de almacenamiento reducidos.

{
    "name": "nameEmbedding",
    "type": "Collection(Edm.Half)",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "synonymMaps": [],
    "dimensions": 1536,
    "vectorSearchProfile": "myHnswProfile"
}

Recuerde que los campos vectoriales no se pueden filtrar, ordenar ni mostrar. No se pueden usar como claves ni usan analizadores ni mapas de sinónimos.

Uso de un índice de producción

Los tipos de datos se asignan a los nuevos campos cuando se crean. No se puede cambiar el tipo de datos de un campo existente y no se puede quitar un campo sin volver a crear el índice. En el caso de los índices establecidos ya en producción, es habitual solucionar este problema mediante la creación de nuevos campos con las revisiones deseadas y, a continuación, la eliminación de los campos obsoletos durante una recompilación de índices planeada.

Comprobar los resultados

  1. Compruebe que el contenido del campo coincide con el tipo de datos. Suponiendo que el campo vectorial está marcado como retrievable, use el Explorador de búsqueda o Buscar POST para devolver el contenido del campo vectorial.

  2. Para comprobar el tamaño del índice vectorial, consulte la columna de tamaño del índice vectorial en la página Administración de búsquedas > Índices de Azure Portal o use el método GET Statistics (API REST) u otro equivalente del SDK de Azure para obtener el tamaño.

Nota:

El tipo de datos del campo se usa para crear la estructura de datos física. Si desea cambiar un tipo de datos más adelante, quite el índice y vuelva a crearlo o cree un segundo campo con la nueva definición.