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.
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 una instancia de Eventhouse como base de datos vectorial en Real-Time Intelligence en Microsoft Fabric. Para ver ejemplos prácticos, consulte Tutorial: Usar un Eventhouse como una base de datos vectorial con embeddings de LLM y Tutorial: Usar un Eventhouse como una base de datos vectorial con embeddings de SLM.
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, que captura 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. 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, que captura 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. Eventhouse admite dos métodos para generar incrustaciones directamente en KQL:
complemento ai_embeddings: llama a un punto de conexión de OpenAI externo Azure para generar incrustaciones mediante modelos de lenguaje grande (LLM). Este método genera las incrustaciones de mayor calidad y es más adecuada para cargas de trabajo de búsqueda semántica de producción.
slm_embeddings_fl():ejecuta modelos de lenguaje pequeños (SLAM) localmente dentro del espacio aislado de Kusto Python, generando inserciones sin ningún punto de conexión externo. Este método no requiere ningún recurso de Azure OpenAI y no conlleva ningún costo por incrustación.
Para obtener más información sobre las incrustaciones en Azure OpenAI, consulte Descripción de las incrustaciones en Azure OpenAI Service.
Elegir un método de inserción
Use la tabla siguiente para elegir el método que mejor se adapte a su escenario:
| Consideración | complemento ai_embeddings (LLM) | slm_embeddings_fl() (SLM) |
|---|---|---|
| Calidad del modelo | Máxima calidad; usa modelos de Azure OpenAI, como text-embedding-3-large |
Buena calidad; usa SLA de código abierto, como harrier-v1-270m, jina-v2-smally e5-small-v2 |
| Dependencia externa | Requiere un recurso de OpenAI Azure con un modelo de inserción implementado | Ninguno; Los modelos se ejecutan localmente en el espacio aislado de Python |
| Costo | Precios por solicitud en función del uso de Azure OpenAI | Sin costo por inserción |
| Rendimiento | Sujeto a los límites de velocidad de Azure OpenAI; requiere lógica de procesamiento por lotes y de reintento | Limitado solo por los recursos de computación del clúster; escala de forma natural con el tamaño del clúster |
| Setup | Requiere Azure implementación de OpenAI, configuración de directivas de llamada e configuración de identidades | Requiere tener habilitado el complemento de Python y los artefactos SLM cargados en un lakehouse |
| Longitud máxima del contexto | Depende del modelo implementado (por ejemplo, 8 192 tokens para text-embedding-3-large) |
Hasta 32 768 tokens con harrier-v1-270m, 8 192 con jina-v2-small y 512 con e5-small-v2 |
| Mejor para | Búsqueda semántica de producción en la que la calidad de inserción es la prioridad más alta | Flujos de trabajo sensibles a la privacidad, creación rápida de prototipos, generación de incrustaciones por lotes a gran escala o escenarios sin acceso a Azure OpenAI |
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.
- 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 porque reduce los requisitos de almacenamiento en un factor de cuatro y acelera significativamente las funciones de procesamiento de vectores, como series_dot_product() y series_cosine_similarity(). - 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. Esta configuración distribuye los datos en todos los recursos informáticos disponibles para búsquedas más rápidas.
- 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.