Compartir a través de


Búsqueda de vectores en Azure Cosmos DB para NoSQL (versión preliminar)

SE APLICA A: NoSQL

Azure Cosmos DB para NoSQL ahora ofrece indexación de vectores y búsqueda en versión preliminar. Esta característica está diseñada para controlar vectores 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. Esto significa que cada documento de la base de datos puede contener no solo datos tradicionales sin esquemas, sino también vectores de alta dimensión 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. Esto 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 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 de alta precisión a cualquier escala.

Más información sobre la indexación de vectores aquí

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 cláusulas WHERE. Esto permite que las búsquedas vectoriales sean 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 los mundos pequeños navegables jerárquicos (HNSW), archivo invertido (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 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.

Inscribirse en la característica de vista previa de búsqueda vectorial

La búsqueda vectorial de Azure Cosmos DB para NoSQL requiere el registro de características en versión preliminar en la página Características de Azure Cosmos DB. Siga los pasos siguientes para registrarse:

  1. Vaya a la página de recursos de Azure Cosmos DB for NoSQL.

  2. Seleccione el panel "Características" en el elemento de menú "Configuración".

  3. Seleccione "Vector de búsqueda en Azure Cosmos DB for NoSQL".

  4. Lea la descripción de la característica para confirmar que desea inscribirse en la versión preliminar.

  5. Seleccione "Habilitar" para inscribirse en la versión preliminar.

Nota:

La solicitud de registro será autoaprobada, pero puede tardar varios minutos en surtir efecto.

Nota:

DiskANN está disponible en versión preliminar "validada" anticipada y requiere rellenar este formulario. Un miembro del equipo de Azure Cosmos DB se pondrá en contacto con usted cuando el recurso se haya incorporado para usar el índice DiskANN.

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 propiedad que contiene el vector (obligatorio).
  • “datatype”: el tipo de datos de la propiedad vectorial (valor predeterminado Float32). 
  • “dimensions”: longitud de cada vector en la ruta de acceso (valor predeterminado 1536) Todos los vectores de una ruta de acceso deben tener el mismo número de dimensiones. (valor predeterminado 1536).
  • "distanceFunction": La métrica usada para calcular la distancia/similitud. Las métricas admitidas son:
    • coseno, que tiene valores de -1 (menos similares) a +1 (más similares).
    • dotproduct, que tiene valores de -inf (menos simialr) a +inf (más similar).
    • euclideano, que tiene valores de 0 (más similares) a +inf) (menos similares).

Nota:

Cada ruta de acceso única puede tener como máximo una directiva. Sin embargo, se pueden especificar varias directivas siempre que tengan 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 ruta de acceso de vector único

{
    "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 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 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

Algunos puntos a tener en cuenta:

  • Los tipos de índice flat y quantizedFlat usan el índice de Azure Cosmos DB para almacenar y leer cada vector al realizar un vector de búsqueda. Las búsquedas vectoriales con un índice de flat son 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 de 505 dimensiones para vectores en un índice plano.

  • El índice quantizedFlat almacena vectores cuantificados (comprimidos) en el índice. El vector de búsqueda con quantizedFlat índice también son búsquedas por fuerza bruta, pero su precisión podría ser ligeramente inferior al 100 %, ya que los vectores se cuantifican antes de agregar al índice. Sin embargo, las búsquedas vectoriales con quantized flat deben tener una latencia menor, un mayor rendimiento y un menor costo de RU que el vector de búsqueda en un índice flat. 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. quantizedFlat debe usarse cuando haya al menos 1000 vectores y menos de 100 000 vectores en el contenedor.

  • El índice diskANN es 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. Sin embargo, dado que DiskANN es un índice aproximado de vecinos más cercanos (ANN), la precisión puede ser menor que quantizedFlat o flat. DiskANN está disponible en versión preliminar "validada" anticipada y requiere rellenar este formulario.

Estos son ejemplos de directivas de índice vectorial válidas:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        }
    ]
}
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        },
        {
            "path": "/vector2",
            "type": "DiskANN"
        }
    ]
}

Nota:

Los índices Quantized Flat 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 examen completo en su lugar y provocará mayores cargos de RU para una consulta de búsqueda vectorial.

Importante

En este momento, en la vista previa de vector de búsqueda no se usan caracteres comodín ni ruta de acceso anidadas en la ruta de acceso de la directiva de vectores. Actualmente no se admiten las operaciones de reemplazo en la directiva 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 distancia de vectores en una consulta. A continuación se muestra un ejemplo de una consulta NoSQL que proyecta la puntuación de similitud como alias SimilarityScore y se ordena en orden de más similar al similar al menos similar:

SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Límites y restricciones actuales

La indexación y búsqueda de vectores en Azure Cosmos DB para NoSQL tiene algunas limitaciones, mientras que en las primeras fases de la versión preliminar pública.

  • Puede especificar, como máximo, un tipo de índice por ruta de acceso en la directiva de índice de vectores.
  • Puede especificar, como máximo, un tipo de índice DiskANN por contenedor.
  • La indexación de vectores solo se admite en nuevos contenedores.
  • Los vectores indexados con el tipo de índice flat pueden ser como máximo 505 dimensiones. Los vectores indexados con el tipo de índice quantizedFlat o DiskANN pueden ser como máximo 4096 dimensiones.
  • quantizedFlat utiliza el mismo método de cuantificación que DiskANN y no se puede configurar en este momento.
  • Las bases de datos de rendimiento compartido no pueden usar la característica de vista previa de búsqueda vectorial en este momento.
  • La tasa de ingesta debe estar limitada mientras se usa una versión preliminar temprana de DiskANN.

Paso siguiente