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.
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 puede comparar y analizar vectores 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 se están volviendo 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 incrustaciones 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 puede crearlos 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 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
El flujo de trabajo general para usar una base de datos vectorial es el siguiente:
- 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.
- 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.
- 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.
- 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
En el núcleo de la búsqueda de similitud vectorial 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. Esta funcionalidad hace que Eventhouse sea una excelente opción para almacenar y buscar vectores.
Los siguientes componentes de Eventhouse permiten usarlo como base de datos vectorial:
- El tipo de datos dinámico, que puede almacenar datos no estructurados, como matrices y bolsas de propiedades. Use este 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
Vector16diseñado para almacenar vectores de números de punto flotante en precisión de 16 bits. Esta codificación utilizaBfloat16en lugar de los 64 bits predeterminados. Use esta codificación para almacenar incrustaciones de vectores de ML porque 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 usar para realizar búsquedas de similitud vectorial sobre los vectores almacenados en Eventhouse.
Optimizar para escalabilidad
Para obtener más información sobre cómo optimizar la búsqueda de similitud de vectores, consulte el blog.
Para maximizar el rendimiento y los tiempos de búsqueda resultantes, siga estos pasos:
- 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).
- Almacene la tabla de vectores de inserción en todos los nodos del clúster con al menos una partición por procesador. Para realizar este objetivo, siga estos pasos:
- 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.
- Cambie el RowCountUpperBoundForMerge de la política de combinación. La directiva de combinación es necesaria para evitar la fusión de segmentos después de la ingestión.
Pasos de optimización de ejemplo
En el ejemplo siguiente, se define una tabla de vectores estáticos para almacenar vectores 1M. Defina la directiva de inserción como Vector16 y establezca las directivas de particionamiento y combinación para optimizar la tabla para la búsqueda de similitud de vectores. En este ejemplo, supongamos que el clúster tiene 20 nodos y que cada nodo tiene 16 procesadores. Las particiones de la tabla deben contener como máximo 1000 000/(20*16)=3 125 filas.
Ejecute los siguientes comandos KQL uno por uno para crear la tabla vacía y establecer las directivas y la codificación necesarias:
.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 ingestionIngiera los datos en la tabla creada y definida en el paso anterior.