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.
Cosmos DB en Fabric ahora ofrece una indexación y búsqueda de vectores eficaces. Esta característica está diseñada para controlar vectores multi modales y de alta dimensión, lo que permite una búsqueda vectorial eficaz y precisa a cualquier escala. Ahora puede almacenar vectores directamente en los documentos junto con los datos. Cada documento de la base de datos puede contener no solo datos tradicionales sin esquemas, sino también vectores de alta dimensionalidad multi modales como otras propiedades de los documentos. Esta coubicación de datos y vectores permite una indexación y búsqueda eficaces, ya que los vectores se almacenan en la misma unidad lógica que los datos que representan. Mantener los vectores y los datos juntos simplifica la administración de datos, las arquitecturas de aplicaciones de IA y la eficacia de las operaciones basadas en vectores.
Cosmos DB en Fabric ofrece la flexibilidad que ofrece al elegir el método de indexación de vectores:
Una búsqueda exacta de vecinos "plana" o k-más cercana (a veces denominada fuerza bruta) puede proporcionar un 100 % de recuperación de recuperación para búsquedas vectoriales más pequeñas y centradas. especialmente cuando se combina con filtros de consulta y claves de partición.
Índice plano cuantificado que comprime vectores mediante métodos de cuantificación basados en DiskANN para mejorar la eficacia de la búsqueda kNN.
DiskANN, un conjunto de algoritmos de indexación de vectores de última generación desarrollados por Microsoft Research para mejorar la eficacia de la búsqueda de vectores multi modal de alta precisión a cualquier escala.
La búsqueda vectorial en Cosmos DB se puede combinar con todos los demás filtros de consulta NoSQL admitidos e índices mediante WHERE cláusulas . Esta combinación permite que las búsquedas vectoriales sean los datos más relevantes para las aplicaciones.
Esta característica mejora las funcionalidades principales de Cosmos DB, lo que hace que sea más versátil para controlar los datos vectoriales y los requisitos de búsqueda en las aplicaciones de inteligencia artificial.
¿Qué es un almacén de vectores?
Un almacén de vectores o una base de datos vectorial es una base de datos diseñada para almacenar y administrar incrustaciones vectoriales, que son representaciones matemáticas de datos en un espacio dimensional. En este espacio, cada dimensión corresponde a una característica de los datos y es posible que se usen decenas de miles de dimensiones para representar datos sofisticados. La posición de un vector en este espacio representa sus características. Se pueden vectorizar palabras, frases o documentos completos e imágenes, audio y otros tipos de datos.
¿Cómo funciona un almacén de vectores?
En un almacén de vectores, los algoritmos de búsqueda vectorial se usan para indexar e insertar consultas. Algunos algoritmos de búsqueda de vectores bien conocidos incluyen el Hierarchical Navigable Small World (HNSW), el Inverted File (IVF), DiskANN, etc. La búsqueda vectorial es un método que ayuda a encontrar elementos similares en función de sus características de datos, en lugar de coincidencias exactas en un campo de propiedad. Esta técnica es útil en aplicaciones como la búsqueda de texto similar, la búsqueda de imágenes relacionadas, la realización de recomendaciones o incluso la detección de anomalías. Se utiliza para consultar las incrustaciones vectoriales de sus datos creadas mediante un modelo de aprendizaje automático utilizando una API de incrustaciones. Algunos ejemplos de API de inserción podrían ser Incrustaciones de OpenAI de Azure o Hugging Face en Azure. El vector de búsqueda mide la distancia entre los vectores de datos y el vector de consulta. Los vectores de datos más cercanos al vector de consulta son los más similares semánticamente.
En la base de datos vectorial integrada de Cosmos DB en Fabric, las incrustaciones se pueden almacenar, indexar y consultar junto con los datos originales. Este enfoque elimina el coste adicional de replicar datos en una base de datos de vectores pura independiente. Además, esta arquitectura reúne las inserciones vectoriales y los datos originales, lo que facilita aún más las operaciones de datos multimodales; también permite una mayor coherencia, escala y rendimiento de los datos.
Políticas de vector de contenedor
La realización de la búsqueda de vectores con Cosmos DB en Fabric requiere que defina una directiva de vectores para el contenedor. Esta directiva proporciona información esencial para que el motor de base de datos realice una búsqueda eficaz de similitud para los vectores encontrados en los documentos del contenedor. Esta configuración también informa a la directiva de indexación de vectores de la información necesaria, si decide especificar una. La siguiente información se incluye en la directiva de vectores contenida:
path: la propiedad que contiene el vector (obligatorio).datatype: el tipo de datos de la propiedad vectorial. Los tipos admitidos sonfloat32(valor predeterminado),int8yuint8.dimensions: La dimensionalidad o longitud de cada vector del camino. Todos los vectores de una ruta deben tener el mismo número de dimensiones. (valor predeterminado1536).distanceFunction: la métrica usada para calcular la distancia o similitud. Las métricas admitidas son:cosine, que tiene valores de $-1$ (menos similares) a $+1$ (más similares).dot product, que tiene valores de $-\infty$ (menos similares) a $+\infty$ (más similares).euclidean, que tiene valores de $0$ (más similares) a $+\infty$ (menos similares).
Nota:
Ninguna de las rutas de acceso únicas puede tener más de una directiva. Sin embargo, se pueden especificar varias directivas si todas tienen como destino una ruta de acceso diferente.
La directiva de vectores de contenedor se puede describir como objetos JSON. Estos son dos ejemplos de directivas de vectores de contenedor válidas:
Una directiva con una única trayectoria de vector
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
}
]
}
Una directiva con dos rutas de acceso vectoriales
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
},
{
"path": "/vector2",
"dataType": "int8",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
Para obtener más información y ejemplos de configuración de una directiva de vectores de contenedor, consulte ejemplos de directivas de indexación de vectores.
Directivas de indexación de vectores
Los índices vectoriales aumentan la eficacia al realizar búsquedas vectoriales mediante la función del sistema VectorDistance. Las búsquedas de vectores tienen menor latencia, mayor rendimiento y menor consumo de RU cuando se usa un índice vectorial. Puede especificar estos tipos de directivas de índice vectorial:
| Descripción | Dimensiones máximas | |
|---|---|---|
flat |
Almacena vectores en el mismo índice que otras propiedades indexadas. | 505 |
quantizedFlat |
Cuantifica (comprime) vectores antes de almacenarlos en el índice. Esta directiva puede mejorar la latencia y el rendimiento a costa de una pequeña cantidad de precisión. | 4096 |
diskANN |
Crea un índice basado en DiskANN para una búsqueda aproximada rápida y eficaz. | 4096 |
Nota:
Los quantizedFlat índices y diskANN requieren que se inserte al menos 1000 vectores . Este mínimo es garantizar la precisión del proceso de cuantificación. Si hay menos de 1,000 vectores, se ejecuta un escaneo completo en su lugar y resulta en mayores cargos de RU para una consulta de búsqueda vectorial.
Algunos puntos a tener en cuenta:
Los
flattipos de índice yquantizedFlatusan el índice de Cosmos DB para almacenar y leer cada vector durante una búsqueda de vectores. Las búsquedas vectoriales con un índice deflatson búsquedas por fuerza bruta y producen una precisión o recuperación del 100 %. Es decir, se garantiza que encuentren los vectores más similares en el conjunto de datos. Sin embargo, existe una limitación de dimensiones505para los vectores en un índice plano.El índice
quantizedFlatalmacena vectores cuantificados (comprimidos) en el índice. Las búsquedas de vectores con índicesquantizedFlattambién son búsquedas por fuerza bruta, pero su precisión podría ser ligeramente inferior al 100 %, ya que los vectores son cuantizados antes de agregarlos al índice. Sin embargo, las búsquedas vectoriales conquantized flatdeben tener una latencia menor, un mayor rendimiento y un menor costo de RU que el vector de búsqueda en un índiceflat. Este índice es una buena opción para escenarios más pequeños o escenarios en los que se usan filtros de consulta para restringir la búsqueda de vectores a un conjunto relativamente pequeño de vectores.quantizedFlatse recomienda cuando el número de vectores que se van a indexar es de aproximadamente 50 000 o menos por partición física. Sin embargo, esta recomendación es simplemente una guía general y se debe probar el rendimiento real, ya que cada escenario puede ser diferente.El índice
diskANNes un índice independiente definido específicamente para vectores que usan DiskANN, un conjunto de algoritmos de indexación de vectores de alto rendimiento desarrollados por Microsoft Research. Los índices diskANN pueden ofrecer algunas de las consultas de menor latencia, mayor rendimiento y costo de RU más bajo, a la vez que mantienen una alta precisión. En general, DiskANN es el más eficaz de todos los tipos de índice si hay más de 50 000 vectores por partición física.
Estos son ejemplos de directivas de índice vectorial válidas:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Importante
Ruta vectorial añadida en la excludedPaths sección de la política de indexación para garantizar un rendimiento optimizado para la inserción. No agregar la ruta vectorial a excludedPaths da como resultado una mayor carga de unidades de solicitud y latencia para las inserciones vectoriales.
Importante
Los caracteres comodín (*, []) no se admiten actualmente en la directiva de vectores o en el índice de vectores.
Realización de búsquedas vectoriales con consultas mediante VECTORDISTANCE
Una vez creado un contenedor con la directiva de vectores deseada e insertado los datos vectoriales en el contenedor, puede realizar una búsqueda de vectores mediante la función integrada VECTORDISTANCE en una consulta. Un ejemplo de una consulta NoSQL que proyecta la puntuación de similitud como alias score y se ordena en orden de más similar a menos similar:
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Importante
Use siempre una cláusula TOP N en la instrucción SELECT de una consulta. De lo contrario, la búsqueda vectorial intenta devolver muchos más resultados, lo que hace que la consulta coste más unidades de solicitud (RU) y tenga una latencia mayor de la necesaria.