Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure AI Search admite la cuantificación escalar y binaria para reducir el tamaño de los vectores en un índice de búsqueda. Se recomienda la cuantificación porque reduce tanto la memoria como el almacenamiento en disco para las inserciones float16 y float32. Para desplazar los efectos de la compresión con pérdida de información, puede agregar sobremuestreo y corrección.
Para usar la cuantificación integrada, siga estos pasos:
- Comience con campos vectoriales y una
vectorSearchconfiguración para un índice - Adición de
vectorSearch.compressions - Agregue una configuración
scalarQuantizationobinaryQuantizationy asígnele un nombre. - Establecimiento de propiedades opcionales para mitigar los efectos de la indexación con pérdida de información
- Crear un nuevo perfil de vector que use la configuración denominada
- Creación de un nuevo campo de vector con el nuevo perfil de vector
- Cargar el índice con datos float32 o float16 que se cuantifican durante la indexación con la configuración definida
- Opcionalmente, consulte los datos cuantificados mediante el parámetro oversampling. Si el campo vectorial no especifica el sobremuestreo en su definición, puede agregarlo en el momento de la consulta.
Sugerencia
Búsqueda de Azure AI: Reducir los costos de vector hasta el 92,5 % con nuevas técnicas de compresión compara las estrategias de compresión y explica el ahorro en el almacenamiento y los costos. También incluye métricas para medir la relevancia en función de la ganancia acumulativa con descuento normalizado (NDCG), lo que demuestra que puede comprimir los datos sin sacrificar la calidad de la búsqueda.
Requisitos previos
-
Campos vectoriales en un índice de búsqueda, con una
vectorSearchconfiguración que especifica el algoritmo Jerárquico Navegable de Mundos Pequeños (HNSW) o el algoritmo K-Nearest Neighbor (KNN) exhaustivo, así como un nuevo perfil vectorial.
Técnicas de cuantificación admitidas
La cuantificación se aplica a los campos vectoriales que reciben vectores de tipo float. En los ejemplos de este artículo, el tipo de datos del campo es Collection(Edm.Single) para incrustaciones entrantes float32, pero también se admite float16. Cuando los vectores se reciben en un campo con compresión configurada, el motor realiza la cuantificación para reducir la superficie de los datos vectoriales en la memoria y en el disco.
Se admiten dos tipos de cuantificación:
La cuantificación escalar comprime los valores float en tipos de datos más estrechos. Ai Search admite actualmente int8, que es de 8 bits, lo que reduce el tamaño del índice vectorial cuatro veces.
La cuantificación binaria convierte los floats en bits binarios, que ocupa 1 bit. Esto da como resultado un tamaño de índice vectorial reducido hasta 28 veces menor.
Nota:
Aunque los servicios gratuitos admiten la cuantificación, no muestran el ahorro de almacenamiento completo debido a la cuota de almacenamiento limitada.
Funcionamiento de la cuantificación escalar en Azure AI Search
La cuantificación escalar reduce la resolución de cada número dentro de cada inserción de vectores. En lugar de describir cada número como un número de coma flotante de 16 o 32 bits, utiliza un número entero de 8 bits. Identifica un rango de números (normalmente mínimo y máximo del percentil 99) y los divide en un número finito de niveles o grupos, asignando a cada grupo un identificador. En la cuantificación escalar de 8 bits, hay 2^8 o 256 rangos posibles.
Cada componente del vector se asigna al valor representativo más cercano dentro de este conjunto de niveles de cuantificación en un proceso similar a redondear un número real al entero más cercano. En el vector cuantificado de 8 bits, el número de identificador se sitúa en lugar del valor original. Después de la cuantificación, cada vector se representa mediante una matriz de identificadores para los contenedores a los que pertenecen sus componentes. Estos vectores cuantificados requieren muchos menos bits para almacenarse en comparación con el vector original, lo que reduce los requisitos de almacenamiento y la huella de memoria.
Funcionamiento de la cuantificación binaria en Azure AI Search
La cuantificación binaria comprime vectores de alta dimensión mediante la representación de cada componente como un solo bit, ya sea 0 o 1. Este método reduce drásticamente la superficie de memoria y acelera las operaciones de comparación de vectores, que son cruciales para las tareas de búsqueda y recuperación. Las pruebas comparativas muestran una reducción del 96 % en el tamaño del índice vectorial.
Es especialmente eficaz para las incrustaciones con dimensiones mayores que 1024. Para dimensiones más pequeñas, se recomienda probar la calidad de la cuantificación binaria o probar escalar en su lugar. Además, hemos encontrado que la cuantificación binaria funciona muy bien cuando las incrustaciones se centran alrededor de cero. Los modelos de inserción más populares ofrecidos por OpenAI, Cohere y Mistral se centran alrededor de cero.
Técnicas de revaluación de puntuaciones admitidas
La recalificación es una técnica opcional que se usa para mitigar la pérdida de información debido a la cuantización de vectores. Durante la ejecución de la consulta, usa sobremuestreo para recoger vectores adicionales e información complementaria para volver a puntuar los resultados iniciales encontrados por la consulta. La información complementaria son vectores originales de precisión completa sin comprimir, o para el caso de la cuantificación binaria, tiene la opción de volver a evaluar usando los candidatos de documentos cuantificados binarios frente al vector de consulta.
Solo los grafos HNSW permiten reasignar puntuaciones. KNN exhaustivo no admite el reescalamiento porque, por definición, todos los vectores se examinan en el momento de la consulta, lo que hace que el sobremuestreo sea irrelevante.
Las opciones de reevaluación se especifican en el índice, pero puede invocar la reevaluación en el momento de la consulta al agregar el parámetro de consulta de sobremuestreo.
| Objeto | Propiedades |
|---|---|
| Index | Agregue RescoringOptions a la sección compresión de vectores. En los ejemplos de este artículo se usa RescoringOptions. |
| Query | Agregue oversampling a las definiciones de RawVectorQuery o VectorizableTextQuery. Agregar oversampling invoca la recalificación en el momento de la consulta. |
Nota:
Los nombres de parámetros de recorción han cambiado en las últimas versiones. Si usa una API de versión preliminar anterior, revise las instrucciones de actualización para solucionar los cambios importantes.
El proceso general para la reevaluación de puntuaciones es:
- La consulta vectorial se ejecuta en campos vectoriales comprimidos.
- La consulta vectorial devuelve los k principales candidatos sobremuestreados.
- Se vuelven a puntuar los candidatos k sobremuestreados utilizando los vectores originales sin comprimir para la cuantificación escalar o el producto dot de la cuantificación binaria.
- Después de la corrección, los resultados se ajustan para que los más relevantes aparezcan primero.
El sobremuestreo para vectores cuantificados escalares requiere la disponibilidad de los vectores de precisión completa originales. El sobremuestreo de vectores cuánticos binarios puede usar vectores de precisión completa (preserveOriginals) o el producto de punto del vector binario (discardOriginals). Si está optimizando el almacenamiento de vectores, asegúrese de mantener todos los vectores de precisión en el índice si los necesita con fines de corrección. Para obtener más información, consulte Eliminación de instancias de vector opcionales del almacenamiento.
Agregar "compresión" a un índice de búsqueda
En esta sección se explica cómo especificar una vectorsSearch.compressions sección en el índice. En el ejemplo siguiente se muestra una definición de índice parcial con una colección de campos que incluye un campo vectorial.
El ejemplo de compresión incluye tanto scalarQuantization como binaryQuantization. Puede especificar tantas configuraciones de compresión como necesite y, a continuación, asignar las que desee a un perfil de vector.
vectorSearch.Compressions La sintaxis de varía entre las API REST estables y en versión preliminar, con la versión preliminar agregando más opciones para la optimización del almacenamiento, además de cambios en la sintaxis existente. La compatibilidad con versiones anteriores se conserva a través de asignaciones de API internas, pero se recomienda adoptar las propiedades más recientes en el código que tiene como destino 2024-11-01-preview y versiones futuras.
Use la API de REST Crear índice o Crear o actualizar índice para configurar las opciones de compresión.
POST https://[servicename].search.windows.net/indexes?api-version=2025-09-01
{
"name": "my-index",
"description": "This is a description of this index",
"fields": [
{ "name": "Id", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
{ "name": "content", "type": "Edm.String", "retrievable": true, "searchable": true },
{ "name": "vectorContent", "type": "Collection(Edm.Single)", "retrievable": false, "searchable": true, "dimensions": 1536,"vectorSearchProfile": "vector-profile-1"},
],
"vectorSearch": {
"profiles": [
{
"name": "vector-profile-1",
"algorithm": "use-hnsw",
"compression": "use-scalar"
}
],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": { },
"exhaustiveKnnParameters": null
}
],
"compressions": [
{
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
},
"name": "mySQ8",
"kind": "scalarQuantization",
"rescoringOptions": {
"enableRescoring": true,
"defaultOversampling": 10,
"rescoreStorageMethod": "preserveOriginals"
},
"truncationDimension": 2
},
{
"name": "myBQC",
"kind": "binaryQuantization",
"rescoringOptions": {
"enableRescoring": true,
"defaultOversampling": 10,
"rescoreStorageMethod": "discardOriginals"
},
"truncationDimension": 2
}
]
},
}
Puntos clave:
kinddebe establecerse enscalarQuantizationobinaryQuantization.rescoringOptionsson una colección de propiedades que se usan para compensar la compresión con pérdida de información mediante la revaloración de los resultados de la consulta mediante los vectores de precisión completa originales que existen antes de la cuantificación. Para que funcione la corrección, debe tener la instancia de vector que proporciona este contenido. EstablecerrescoreStorageMethodendiscardOriginalsimpide que useenableRescoringodefaultOversampling. Para obtener más información sobre el almacenamiento vectorial, consulte Eliminar instancias de vector opcionales del almacenamiento."rescoreStorageMethod": "preserveOriginals"reevalúa los resultados de búsqueda vectorial con los vectores originales de precisión completa, lo que puede resultar en ajustes en la puntuación y el ranking de búsqueda, promoviendo las coincidencias más relevantes según lo determinado por el paso de reevaluación. Para la cuantificación binaria, puede establecerrescoreStorageMethodendiscardOriginalspara reducir aún más el almacenamiento, sin reducir la calidad. Los vectores originales no son necesarios para la cuantificación binaria.defaultOversamplingconsidera un conjunto más amplio de resultados potenciales para compensar la reducción de la información de la cuantificación. La fórmula para los posibles resultados consta de laken la consulta, con un multiplicador de sobremuestreo. Por ejemplo, si la consulta especifica unakde 5 y el sobremuestreo es 20, la consulta solicita eficazmente 100 documentos para su uso en la reclasificación, utilizando el vector sin comprimir original para ese propósito. Solo se devuelven los mejoreskresultados reclasificados. Esta propiedad es opcional. El valor predeterminado es 4.quantizedDataTypees opcional y solo se aplica a la cuantificación escalar. Si lo agrega, se debe establecer enint8. Este es el único tipo de datos primitivo admitido para la cuantificación escalar en este momento. El valor predeterminado esint8.truncationDimensionaprovecha las capacidades inherentes de los modelos de incrustación de texto-3 para "codificar información en diferentes niveles de granularidad y permite una única incrustación que se adapta a las limitaciones computacionales de las tareas posteriores" (vea Matryoshka Representation Learning). Puede usar dimensiones truncadas con o sin opciones de corrección. Para más información sobre cómo se implementa esta característica en Azure AI Search, consulte Truncar dimensiones mediante la compresión de MRL.
Adición del algoritmo de búsqueda vectorial
Puede usar el algoritmo HNSW o eKNN en la API REST 2024-11-01-preview o posterior. Para la versión estable, use solo HNSW. Si quiere realizar la corrección, debe elegir HNSW.
"vectorSearch": {
"profiles": [ ],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"compressions": [ <see previous section>]
}
Creación y asignación de un nuevo perfil de vector
Para usar una nueva configuración de cuantificación, debe crear un nuevo perfil de vector. La creación de un nuevo perfil de vector es necesaria para crear índices comprimidos en memoria. Tu nuevo perfil usa HNSW.
En la misma definición de índice, cree un nuevo perfil de vector y agregue una propiedad de compresión y un algoritmo. Estos son dos perfiles, uno para cada enfoque de cuantificación.
"vectorSearch": { "profiles": [ { "name": "vector-profile-hnsw-scalar", "compression": "use-scalar", "algorithm": "use-hnsw", "vectorizer": null }, { "name": "vector-profile-hnsw-binary", "compression": "use-binary", "algorithm": "use-hnsw", "vectorizer": null } ], "algorithms": [ <see previous section> ], "compressions": [ <see previous section> ] }Asigne un perfil de vector a un nuevo campo vectorial. El tipo de datos del campo es float32 o float16.
En Azure AI Search, los equivalentes en el Modelo de Datos de Entidades (EDM) de los tipos float32 y float16 son
Collection(Edm.Single)yCollection(Edm.Half), respectivamente.{ "name": "vectorContent", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-profile-hnsw-scalar", }Cargue el índice mediante indexers para la indexación de modelos pull, o APIs para la indexación de modelos push.
Consulta de un campo vectorial cuantificado mediante el sobremuestreo
La sintaxis de consulta para un campo vectorial comprimido o cuantificado es la misma que para los campos vectoriales no comprimidos, a menos que desee invalidar los parámetros asociados con el sobremuestreo y la corrección. Puede agregar un oversampling parámetro para invocar el sobremuestreo y la recalificación en el momento de la consulta.
Usa Buscar Documentos para la solicitud.
Recuerde que la definición de compresión de vectores en el índice tiene configuración para enableRescoring, rescoreStorageMethod, y defaultOversampling para mitigar los efectos de la compresión perdida. Puede invalidar los valores predeterminados para variar el comportamiento en el momento de la consulta. Por ejemplo, si defaultOversampling es 10,0, puede cambiarlo a otra cosa en la solicitud de consulta.
Puede establecer el parámetro de sobremuestreo incluso si el índice no tiene explícitamente opciones de corrección o definición de defaultOversampling. Proporcionar oversampling en tiempo de consulta invalida la configuración de índice para esa consulta y ejecuta la consulta con un valor efectivo enableRescoring como true.
POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2025-09-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [8, 2, 3, 4, 3, 5, 2, 1],
"fields": "myvector",
"oversampling": 12.0,
"k": 5
}
]
}
Puntos clave:
El sobremuestreo se aplica a los campos vectoriales que se someten a la compresión vectorial, según la asignación del perfil de vector.
El sobremuestreo de la consulta invalida el valor
defaultOversamplingen el índice o invoca el sobremuestreo y la corrección en el momento de la consulta, incluso si la configuración de compresión del índice no ha especificado opciones de sobremuestreo o de nueva clasificación.