Ajuste de los índices vectoriales para insertar cargas de trabajo
Las aplicaciones de inteligencia artificial que almacenan incrustaciones necesitan índices vectoriales para realizar búsquedas de similitud eficaces. Los índices vectoriales son un tipo de índice especializado que acelera las consultas mediante la función del VectorDistance sistema. La selección del tipo de índice vectorial correcto para la carga de trabajo afecta a la latencia de consulta, la precisión y el consumo de RU. En esta unidad se enseña a elegir y configurar índices vectoriales como parte de la estrategia general de indexación, centrándose en los criterios de selección e integración con otros tipos de índice.
Nota:
En el módulo anterior de esta ruta de aprendizaje se describe la creación de contenedores con directivas de vectores, selección de funciones de distancia y sintaxis de consulta de búsqueda vectorial con detalle. Esta unidad se centra en seleccionar el tipo de índice vectorial correcto para la carga de trabajo e integrar índices vectoriales en una directiva de indexación completa.
Descripción de los índices vectoriales en la directiva de indexación
Los índices vectoriales funcionan junto con los índices espaciales, compuestos y intervalos dentro de la misma directiva de indexación. Aunque otros tipos de índice admiten el filtrado y la ordenación de propiedades, los índices vectoriales aceleran específicamente las consultas de similitud que buscan elementos con incrustaciones más cercanas a un vector de consulta.
Para poder agregar un índice vectorial, debe definir una directiva de vectores para el contenedor que especifique las propiedades de inserción. La directiva de vector incluye la ruta, el tipo de datos, las dimensiones y la función de distancia para cada propiedad de incrustación. A continuación, el índice vectorial hace referencia a estas rutas de acceso para crear estructuras de datos optimizadas para la búsqueda de similitud.
En el ejemplo siguiente se muestra cómo encajan los índices vectoriales dentro de una directiva de indexación completa:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{ "path": "/category/?" },
{ "path": "/createdDate/?" },
{ "path": "/documentType/?" }
],
"excludedPaths": [
{ "path": "/*" },
{ "path": "/embedding/*" }
],
"compositeIndexes": [
[
{ "path": "/category", "order": "ascending" },
{ "path": "/createdDate", "order": "descending" }
]
],
"vectorIndexes": [
{ "path": "/embedding", "type": "diskANN" }
]
}
Esta directiva muestra varios principios importantes. La ruta de acceso de inserción se excluye explícitamente de includedPaths para evitar la indexación de intervalos de la matriz de inserción. La vectorIndexes sección define un índice diskANN para la propiedad de inserción. Los índices de rango y compuesto admiten filtros de metadatos que pueden reducir los resultados antes o junto con la búsqueda vectorial.
Selección del tipo de índice vectorial adecuado
Azure Cosmos DB ofrece tres tipos de índice vectorial, cada uno optimizado para diferentes tamaños de conjunto de datos y requisitos de precisión. Comprender las ventajas y desventajas le ayuda a seleccionar el tipo adecuado para la aplicación de inteligencia artificial.
Índice plano para conjuntos de datos pequeños
El índice plano realiza la búsqueda de K vecino más próximo por fuerza bruta, comparando el vector de consulta con cada vector indexado. Este enfoque garantiza una precisión de 100% porque evalúa todos los vectores sin aproximación.
Cuándo usar índices planos:
- Conjuntos de datos pequeños en los que el recuento de vectores por partición física es modesto
- Escenarios en los que los filtros de consulta reducen significativamente el espacio de búsqueda antes de la comparación de vectores
- Aplicaciones que requieren una precisión garantizada en la que los resultados aproximados no son aceptables
Limitaciones:
- Máximo de 505 dimensiones por vector
- Mayor latencia y consumo de RU para grandes conjuntos de datos porque se comparan todos los vectores
Los índices planos funcionan bien para las aplicaciones en las que los filtros de metadatos limitan el candidato establecido en un tamaño manejable antes de la comparación de vectores. Por ejemplo, si los usuarios siempre filtran por categoría y cada categoría tiene solo unos cientos de documentos, los índices planos proporcionan resultados precisos de forma eficaz.
Índice QuantizedFlat para conjuntos de datos medianos
El índice quantizedFlat comprime los vectores mediante la cuantificación antes de almacenarlos en el índice. La cuantificación reduce los requisitos de almacenamiento y mejora el rendimiento de las consultas a costa de una ligera reducción de precisión.
Cuándo usar índices quantizedFlat:
- Conjuntos de datos medianos con aproximadamente 1000 a 50 000 vectores por partición física
- Aplicaciones en las que una ligera reducción de precisión es aceptable para mejorar el rendimiento
- Escenarios que combinan filtros de metadatos con búsqueda de vectores para reducir los conjuntos candidatos
Características:
- Admite hasta 4096 dimensiones
- Realiza la búsqueda por fuerza bruta en vectores cuantificados
- Menor latencia y costo de RU que los índices planos para niveles de precisión comparables
- Requiere al menos 1000 vectores antes de que el índice sea efectivo.
El índice quantizedFlat equilibra la precisión con respecto al rendimiento. Las búsquedas vectoriales devuelven resultados que suelen ser los mismos que los índices planos, pero ocasionalmente la cuantificación provoca pequeñas diferencias en los resultados clasificados.
Índice DiskANN para grandes conjuntos de datos
El índice diskANN usa algoritmos vecinos más cercanos aproximados desarrollados por Microsoft Research. DiskANN crea estructuras de datos especializadas que permiten la búsqueda rápida de vectores sin comparar con cada vector.
Cuándo usar índices diskANN:
- Conjuntos de datos grandes con más de 50 000 vectores por partición física
- Aplicaciones que requieren la latencia de consulta más baja posible a escala
- Cargas de trabajo donde la eficiencia de RU es crítica
Características:
- Admite hasta 4096 dimensiones
- Menor latencia y costo de RU para la búsqueda de vectores a gran escala
- Mantiene una alta precisión al usar algoritmos de aproximación del vecino más cercano
- Requiere al menos 1000 vectores antes de que el índice sea efectivo.
DiskANN es la opción recomendada para las aplicaciones de inteligencia artificial de producción con colecciones de inserción grandes. El algoritmo proporciona una recuperación alta y reduce considerablemente los costos de consulta en comparación con los enfoques de fuerza bruta.
Descripción de los requisitos mínimos de vectores
Los índices quantizedFlat y diskANN requieren al menos 1000 vectores antes de que el índice entre en vigor. Este mínimo garantiza la cuantificación precisa y la construcción del grafo durante la creación del índice. Cuando existen menos de 1000 vectores, Azure Cosmos DB vuelve a los exámenes por fuerza bruta, lo que podría dar lugar a cargos de RU mayores de lo esperado.
Planee este comportamiento durante la carga de datos inicial. Si estás empezando con un pequeño conjunto de datos que crece con el tiempo, las consultas realizan búsquedas exhaustivas hasta que se alcance el umbral de 1,000 vectores. En el caso de las aplicaciones que comienzan pequeñas, considere la posibilidad de usar inicialmente un índice plano y migrar a quantizedFlat o diskANN a medida que crece el conjunto de datos.
Ajuste de los parámetros de índice vectorial
Los índices quantizedFlat y diskANN aceptan parámetros opcionales que permiten optimizar el equilibrio entre la precisión y el rendimiento.
quantizationByteSize: Controla la cantidad de compresión que se aplica a los vectores. Los valores más grandes conservan más información, lo que mejora la precisión, pero aumenta el almacenamiento y reduce potencialmente el rendimiento. El sistema determina dinámicamente el valor predeterminado. Los valores válidos oscilan entre 1 y 512 bytes.
indexingSearchListSize (solo diskANN): Controla cuántos vectores se evalúan durante la construcción del índice. Los valores más altos mejoran la calidad del índice (y, por tanto, la precisión de la consulta), pero aumentan el tiempo necesario para compilar el índice y agregar nuevos vectores. El valor predeterminado es 100, con valores válidos comprendidos entre 10 y 500.
La mayoría de las aplicaciones funcionan bien con parámetros predeterminados. Considere ajustar solo si observa problemas de precisión en producción o necesita optimizar para objetivos de latencia específicos. En el ejemplo siguiente se muestra un índice vectorial con parámetros personalizados:
{
"vectorIndexes": [
{
"path": "/embedding",
"type": "diskANN",
"quantizationByteSize": 64,
"indexingSearchListSize": 150
}
]
}
Exclusión de inserciones de los índices de intervalo
La inclusión de matrices consume un almacenamiento significativo cuando se integra en índices de intervalo sin proporcionar beneficios de consulta. Las búsquedas vectoriales usan índices vectoriales, no índices de intervalo, para buscar incrustaciones similares. Excluya siempre las rutas de incrustación de la indexación por rangos para reducir los costos de almacenamiento y la sobrecarga de escritura.
Al usar la estrategia de indexación selectiva (excluyendo /* por defecto), simplemente no incluya la ruta de incrustación en includedPaths. Al usar la estrategia de indexación predeterminada (incluido /*), agregue explícitamente la ruta de acceso de inserción a excludedPaths:
{
"excludedPaths": [
{ "path": "/\"_etag\"/?" },
{ "path": "/embedding/*" }
]
}
En el caso de los documentos con varias propiedades de inserción (quizás diferentes modelos o representaciones de texto diferentes), excluya cada ruta de acceso de inserción individualmente.
Vector de coordenadas e índices de metadatos
La recuperación eficaz de inteligencia artificial suele combinar la búsqueda de similitud vectorial con filtros de metadatos. Un usuario podría buscar documentos similares a una consulta dentro de una categoría o intervalo de fechas específico. Puede diseñar la directiva de indexación para que los índices compuestos y de rango admitan los filtros de metadatos usados junto con la búsqueda vectorial.
Esta coordinación permite el filtrado previo que reduce el espacio de búsqueda vectorial. Cuando Azure Cosmos DB evalúa una consulta como "buscar los 10 documentos más similares en la categoría X", primero identifica los documentos de la categoría X mediante el índice de intervalo y, a continuación, realiza la comparación vectorial solo en esos documentos. Este enfoque puede reducir drásticamente el consumo de RU en comparación con la búsqueda de todas las incrustaciones y el filtrado posterior.
La siguiente directiva de indexación admite metadatos combinados y búsqueda de vectores:
{
"indexingMode": "consistent",
"includedPaths": [
{ "path": "/category/?" },
{ "path": "/department/?" },
{ "path": "/createdDate/?" },
{ "path": "/documentType/?" }
],
"excludedPaths": [
{ "path": "/*" }
],
"compositeIndexes": [
[
{ "path": "/category", "order": "ascending" },
{ "path": "/createdDate", "order": "descending" }
]
],
"vectorIndexes": [
{ "path": "/embedding", "type": "diskANN" }
]
}
Esta directiva indexa las propiedades de metadatos usadas en filtros, a la vez que excluye propiedades innecesarias. El índice compuesto admite consultas que filtran por categoría y ordenan por fecha. El índice de vectores diskANN permite una búsqueda eficaz de similitud. Juntos, estos índices admiten consultas que filtran por metadatos y, a continuación, clasifican los resultados por similitud semántica.
Planear la inmutabilidad de la política de vectores
Las directivas de vectores, que definen las propiedades de inserción disponibles para la indexación de vectores, no se pueden modificar después de la creación del contenedor. Esta inmutabilidad significa que debe planear cuidadosamente durante el diseño:
Dimensiones: Elija dimensiones que coincidan con el modelo de inserción. Si tiene previsto cambiar los modelos, asegúrese de que el nuevo modelo genera la misma salida dimensional o crea un nuevo contenedor.
Tipos de datos: Seleccione el tipo de datos adecuado (
float32,float16,int8ouint8) en función de los requisitos de precisión y almacenamiento. Usarfloat16reduce el almacenamiento en un 50% en comparación confloat32con un impacto mínimo en la precisión en la mayoría de los modelos.Función Distance: Elija la función de distancia que coincida con la forma en que se entrenó el modelo de inserción. La mayoría de los modelos de inserción de texto usan la similitud de coseno.
Si cambian los requisitos, como actualizar a un modelo con más dimensiones, debe crear un nuevo contenedor con la directiva de vectores actualizada y migrar los datos.