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 Cosmos DB for NoSQL 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.
Azure Cosmos DB para NoSQL ofrece flexibilidad al permitirle 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 coincidencia 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.
Para más información sobre la indexación de vectores, consulte Índices vectoriales.
La búsqueda vectorial en Azure Cosmos DB se puede combinar con todos los demás filtros y índices de consulta NoSQL de Azure Cosmos DB compatibles mediante WHERE cláusulas . Esto permite que las búsquedas vectoriales proporcionen los datos más relevantes para las aplicaciones.
Esta característica mejora las funcionalidades principales de Azure Cosmos DB, por lo que es 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 base de datos vectoriales es una base de datos diseñada para almacenar y administrar incrustaciones de vectores, que son representaciones matemáticas de datos en un espacio de alta dimensión. 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. Entre algunos algoritmos de vector de búsqueda conocidos se incluyen pequeño mundo navegable jerarquizado (HNSW), archivo invertido (IVF) y DiskANN. 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 Azure Cosmos DB para NoSQL, 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.
Habilitar la función de indexación de vectores y búsqueda
Para habilitar esta característica para Azure Cosmos DB para NoSQL, siga estos pasos:
- Vaya a la página de recursos de Azure Cosmos DB para NoSQL.
- En el panel izquierdo, en Configuración, seleccione Características.
- Seleccione Búsqueda de vectores para NoSQL API.
- Lea la descripción de la característica para confirmar que desea habilitarla.
- Seleccione Habilitar para activar la búsqueda de vectores en Azure Cosmos DB para NoSQL.
Sugerencia
Como alternativa, use la CLI de Azure para actualizar las funcionalidades de la cuenta para admitir la búsqueda de vectores NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
La solicitud de registro se aprobó automáticamente, pero puede tardar 15 minutos en surtir efecto.
Directivas de vectores de contenedor
Para realizar la búsqueda de vectores con Azure Cosmos DB para NoSQL, es necesario definir una directiva de vectores para el contenedor. Esto 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. Esto 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 ruta de propiedad que contiene los vectores (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 de la ruta de acceso. Todos los vectores de una ruta deben tener el mismo número de dimensiones. El valor predeterminado es1536. -
distanceFunction: la métrica usada para calcular la distancia o similitud. Las métricas admitidas son:- coseno (valor predeterminado), que tiene valores de -1 (menos similares) a +1 (más similares).
- producto de punto, que tiene valores de -inf (menos similar) a +inf (más similar).
- euclideano, que tiene valores de 0 (más similares) a +inf (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
}
]
}
Directivas de indexación de vectores
Los índices vectoriales aumentan la eficacia al realizar búsquedas vectoriales mediante la función del VectorDistance sistema. Las búsquedas de vectores tienen menor latencia, mayor rendimiento y menor consumo de RU cuando se usa un índice vectorial. Puede especificar los siguientes tipos de directivas de índice vectorial:
| Tipo | 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. Esto 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. Así se garantiza la precisión del proceso de cuantificación. Si hay menos de 1000 vectores, se ejecuta un escaneo completo en su lugar, lo que conduce a mayores cargos de RU para una consulta de búsqueda vectorial.
Algunos puntos que se deben tener en cuenta:
Los
flattipos de índice yquantizedFlatusan el índice de Azure Cosmos DB para almacenar y leer cada vector al realizar 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 se encuentren los vectores más similares en el conjunto de datos. Sin embargo, hay una limitación de505dimensiones para vectores de 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. Esta es una buena opción para escenarios más pequeños o escenarios en los que se usan filtros de consulta para restringir el vector de búsqueda 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, esto es solo una guía general y el rendimiento real debe probarse, 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/?"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Importante
Los caracteres comodín (*, []) y las rutas de acceso vectoriales anidadas dentro de matrices 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 que haya creado un contenedor con la directiva de vector deseada e insertado los datos vectoriales en el contenedor, puede realizar una búsqueda de vectores mediante la función del sistema VectorDistance en una consulta. En el ejemplo siguiente se muestra una consulta NoSQL que proyecta la puntuación de similitud como alias SimilarityScorey se ordena en orden de la mayoría de las similares a las menos similares:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM 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, el vector de búsqueda intenta devolver muchos más resultados y la consulta costará más RU y tendrá una mayor latencia de lo necesario.
Limitaciones actuales
La indexación de vectores y la búsqueda en Azure Cosmos DB for NoSQL tiene algunas limitaciones.
-
quantizedFlatydiskANNlos índices requieren que se indicen al menos 1000 vectores para asegurarse de que la cuantificación es precisa. Si se indexan menos de 1000 vectores, se usa un escaneo completo en su lugar y los cargos de RU podrían ser mayores. - Los vectores indexados con el tipo de índice
flatpueden ser como máximo 505 dimensiones. Los vectores indexados con el tipo de índicequantizedFlatoDiskANNpueden ser como máximo 4096 dimensiones. - La tasa de inserciones vectoriales debe ser limitada. La ingesta muy grande (más de 5 millones de vectores) puede requerir más tiempo de compilación del índice.
- La característica de búsqueda vectorial no se admite actualmente en los contenedores existentes. Para usarla, se debe crear un nuevo contenedor y se debe especificar la directiva de inserción de vectores de nivel de contenedor.
- Las bases de datos de rendimiento compartido no son compatibles.
- En este momento, la indexación de vectores y la búsqueda no se admiten en cuentas con rendimiento compartido.
- Una vez habilitada la indexación de vectores y la búsqueda en un contenedor, no se puede deshabilitar.
Contenido relacionado
- DiskANN + Azure Cosmos DB: vídeo de Microsoft Mechanics
- .NET: indexación y consulta de datos vectoriales
- Python: indexación y consulta de datos vectoriales
- Java: indexación y consulta de datos vectoriales
- Función del sistema VectorDistance
- Introducción al índice de vectores
- Directivas del índice de vectores
- Ejemplos de directivas de indexación de vectores
- Integraciones: