Compartir a través de


Bases de datos vectoriales

Una base de datos vectorial almacena y administra los datos en forma de vectores, que son matrices numéricas de puntos de datos.

El uso de vectores permite realizar consultas y análisis complejos, ya que los vectores se pueden comparar y analizar mediante técnicas avanzadas, como la búsqueda de similitud de vectores, la cuantificación y la agrupación en clústeres. Las bases de datos tradicionales no son adecuadas para controlar los datos multidimensionales que son cada vez más comunes en el análisis de datos. Sin embargo, las bases de datos vectoriales están diseñadas para controlar datos dimensionales altos, como texto, imágenes y audio, representándolos como vectores. Las bases de datos vectoriales son útiles para tareas como el aprendizaje automático, el procesamiento del lenguaje natural y el reconocimiento de imágenes, donde el objetivo es identificar patrones o similitudes en grandes conjuntos de datos.

En este artículo se proporciona información general sobre las bases de datos vectoriales y se explica conceptualmente cómo puede usar un Eventhouse como base de datos vectorial en Inteligencia en tiempo real en Microsoft Fabric. Para obtener un ejemplo práctico, consulte Tutorial: Uso de una instancia de Eventhouse como base de datos vectorial.

Conceptos clave

Los siguientes conceptos clave se usan en las bases de datos vectoriales:

Similitud de vectores

La similitud de vectores es una medida de la diferencia (o similitud) de dos o más vectores. La búsqueda de similitud de vectores es una técnica que se usa para buscar vectores similares en un conjunto de datos. Los vectores se comparan mediante una métrica de distancia, como la distancia euclidiana o la similitud de coseno. Cuando más cerca estén dos vectores, más semejantes serán.

Inserciones

Las inserciones son una forma común de representar datos en un formato vectorial para su uso en bases de datos vectoriales. Una inserción es una representación matemática de un fragmento de datos, como una palabra, un documento de texto o una imagen, diseñada para capturar su significado semántico. Las inserciones se crean mediante algoritmos que analizan los datos y generan un conjunto de valores numéricos que representan sus características clave. Por ejemplo, una inserción para una palabra puede representar su significado, su contexto y su relación con otras palabras. El proceso de creación de inserciones es sencillo. Aunque se pueden crear mediante paquetes estándar de Python (por ejemplo, spaCy, sent2vec, Gensim), los modelos de lenguaje grande (LLM) generan inserciones de mayor calidad para la búsqueda de texto semántico. Por ejemplo, puede enviar texto a un modelo de inserción en Azure OpenAI y genera una representación vectorial que se puede almacenar para su análisis. Para más información, consulte Descripción de las incrustaciones en Azure OpenAI Service.

Flujo de trabajo general

Esquema de cómo insertar, almacenar y consultar texto almacenado como vectores.

El flujo de trabajo general para usar una base de datos vectorial es el siguiente:

  1. Insertar datos: convierta los datos en formato vectorial mediante un modelo de inserción. Por ejemplo, puede insertar datos de texto mediante un modelo de OpenAI.
  2. Almacenar vectores: almacene los vectores incrustados en una base de datos vectorial. Puede enviar los datos insertados a un centro de eventos para almacenar y administrar los vectores.
  3. Insertar consulta: convierta los datos de consulta en formato vectorial mediante el mismo modelo de inserción que se usa para insertar los datos almacenados.
  4. Vectores de consulta: use la búsqueda de similitud de vectores para buscar entradas en la base de datos que son similares a la consulta.

Centro de eventos como base de datos vectorial

Uno de los pilares de la búsqueda de similitud de vectores es la capacidad de almacenar, indexar y consultar datos vectoriales. Las instancias de Eventhouse proporcionan una solución para controlar y analizar grandes volúmenes de datos, especialmente en escenarios en los que se necesita análisis y exploración en tiempo real, lo que hace que sean una opción ideal para almacenar y buscar vectores.

Los siguientes componentes, permiten el uso de Evenhouse como base de datos vectorial:

  • El tipo de datos dinámico, que puede almacenar datos no estructurados, como matrices y bolsas de propiedades. Por lo tanto, se recomienda el tipo de datos para almacenar valores vectoriales. Puede aumentar aún más el valor de vector almacenando metadatos relacionados con el objeto original como columnas independientes de la tabla.
  • Tipo de codificación Vector16 diseñado para almacenar vectores de números de punto flotante en precisión de 16 bits, que usa Bfloat16 en lugar de los 64 bits predeterminados. Esta codificación se recomienda para almacenar inserciones de vectores de ML, ya que reduce los requisitos de almacenamiento en un factor de cuatro y acelera las funciones de procesamiento de vectores, como series_dot_product() y series_cosine_similarity() por orden de magnitud.
  • La función series_cosine_similarity, que puede realizar búsquedas de similitud vectorial sobre los vectores almacenados en Eventhouse.

Optimizado para escalado

Para obtener más información sobre cómo optimizar la búsqueda de similitud de vectores, lea el blog.

Para maximizar el rendimiento y los tiempos de búsqueda resultantes, siga estos pasos:

  1. Establezca la codificación de la columna de elementos integrados en Vector16, que es la codificación de 16 bits de los coeficientes de vectores (en lugar del valor predeterminado de 64 bits).
  2. Almacene la tabla de vectores de combinación en todos los nodos de clúster con al menos una partición por procesador; esto se realiza mediante los pasos siguientes:
    1. Limite el número de vectores de inserción por partición modificando ShardEngineMaxRowCount de la directiva de particionamiento. La directiva de particionamiento equilibra los datos de todos los nodos con varias extensiones por nodo para que la búsqueda pueda usar todos los procesadores disponibles.
    2. Cambie RowCountUpperBoundForMerge de la directiva de combinación. La directiva de combinación es necesaria para suprimir las extensiones de integración después de la ingesta.

Pasos de optimización de ejemplo

En el ejemplo siguiente, se define una tabla de vectores estáticos para almacenar vectores de tipo 1M. La directiva de combinación se define como Vector16 y las directivas de particionamiento y combinación se establecen para optimizar la tabla para la búsqueda de similitud de vectores. Para ello, supongamos que el clúster tiene 20 nodos y que cada uno tiene 16 procesadores. Las particiones de la tabla deben contener como máximo 1000000/(20*16)=3125 filas.

  1. Los siguientes comandos de KQL se ejecutan uno por uno para crear la tabla vacía y establecer las directivas necesarias y la codificación:

    .create table embedding_vectors(vector_id:long, vector:dynamic)                                  //  This is a sample selection of columns, you can add more columns
    
    .alter column embedding_vectors.vector policy encoding type = 'Vector16'                         // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing
    
    .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }'       // Balanced data on all nodes and, multiple extents per node so the search can use all processors 
    
    .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }'      // Suppress merging extents after ingestion
    
  2. Ingiera los datos en la tabla creada y definida en el paso anterior.

Paso siguiente