Construya Pipelines de IA Más Inteligentes con Vectores Tipados y Multidimensionales

Hackernoon

CocoIndex ha introducido un soporte integral para datos vectoriales tipados, abarcando desde arrays numéricos básicos hasta vectores multidimensionales complejos y profundamente anidados. Esta mejora está diseñada para facilitar la integración perfecta con bases de datos vectoriales de alto rendimiento como Qdrant, permitiendo flujos de trabajo avanzados de indexación, incrustación y recuperación en diversas modalidades de datos.

La plataforma ahora admite una variedad de tipos de vectores con sólidas garantías de tipado. Si bien CocoIndex puede inferir automáticamente los tipos para la mayoría de los flujos de datos, la especificación explícita de tipos está disponible para funciones personalizadas, lo que proporciona un mayor control.

Tipos de Vectores Soportados

  1. Vectores unidimensionales: Estos representan secuencias simples de números. CocoIndex admite dimensiones dinámicas, donde la longitud del vector puede variar, o dimensiones fijas, como Vector[Float32, Literal[384]] para un vector que siempre contiene 384 elementos. Internamente, estos pueden corresponder a arrays NumPy (numpy.typing.NDArray[np.float32]) o listas de Python (list[float]). Los tipos de números soportados incluyen float e int nativos de Python, alias de tipo CocoIndex (Float32, Float64, Int64 para un control preciso del tamaño de bits), y tipos NumPy (numpy.float32, numpy.float64, numpy.int64).

  2. Vectores bidimensionales (Multivectores): Representados como Vector[Vector[Float32, Literal[3]], Literal[2]], estos significan un vector compuesto por otros vectores —por ejemplo, dos vectores, cada uno con tres elementos. Esta estructura es ideal para escenarios que requieren múltiples incrustaciones por punto de datos, representaciones multivista o codificaciones por lotes. Su representación subyacente en Python es típicamente una lista anidada (list[list[float]]) o un array NumPy multidimensional (numpy.typing.NDArray).

Comprendiendo los Vectores Multidimensionales

Un vector multidimensional es fundamentalmente un vector cuyos elementos son a su vez vectores, similar a una matriz o una lista anidada. CocoIndex representa esta estructura utilizando tipos Vector anidados, como Vector[Vector[T, N], M], donde M denota el número de vectores internos, cada uno de dimensión N. Si bien M y N pueden ser dinámicos dentro de CocoIndex, ciertos sistemas de destino como Qdrant pueden requerir una dimensión interna fija (N). Este concepto es vital en el aprendizaje profundo y las aplicaciones multimodales, permitiendo representaciones de datos más ricas, como una imagen como una colección de incrustaciones a nivel de parche, un documento como vectores a nivel de párrafo, o una sesión de usuario como una secuencia de vectores de comportamiento. CocoIndex soporta estas representaciones complejas de forma nativa, evitando la necesidad de aplanamiento.

Aplicaciones de las Incrustaciones Multivectoriales

Las incrustaciones multivectoriales son particularmente beneficiosas en varios casos de uso avanzados:

  • Visión: Incrustaciones de Parches: En visión por computador, un Vision Transformer (ViT) podría generar múltiples vectores para una imagen, uno para cada parche (ej., 196 parches, cada uno con una incrustación de 768 dimensiones). Esto permite la coincidencia de características locales y la recuperación sensible a la región, representado como Vector[Vector[Float32, Literal[768]]].

  • Texto: Documento con Párrafos: Para documentos largos, dividirlos en vectores a nivel de párrafo o frase (ej., 10 vectores de párrafo de 384 dimensiones cada uno) preserva mejor el contexto y la estructura que promediar todos los vectores. Esto permite buscar dentro de subpartes de un documento, recuperar documentos basados en un solo párrafo relevante e implementar búsquedas jerárquicas. Esto puede tiparse como Vector[Vector[Float32, Literal[384]]].

  • Comportamiento del Usuario: Sesiones o Series Temporales: Una sesión de usuario puede modelarse como una secuencia de acciones o estados, donde cada paso es un vector (ej., 20 pasos, cada uno un vector de 16 dimensiones). Esto es valioso en secuencias de clics de comercio electrónico, series temporales financieras o análisis de UX para interacciones de múltiples pasos, representado como Vector[Vector[Float32, Literal[16]]].

  • Científico y Biomédico: Incrustaciones Multivista: Entidades complejas como moléculas o proteínas pueden tener múltiples conformaciones o modalidades de medición. Representar estas como múltiples vectores (ej., 5 vistas diferentes, cada una de 128 dimensiones) permite comparaciones exhaustivas a través de sus espacios latentes, tipado como Vector[Vector[Float32, Literal[128]]].

Beneficios sobre los Vectores Planos

Si bien es posible aplanar un multivector (ej., convertir [[1,2,3],[4,5,6]] a [1,2,3,4,5,6]), hacerlo resulta en la pérdida de límites semánticos. Los verdaderos multivectores preservan el significado de cada subvector, permitiendo la coincidencia y consulta a nivel de subvector. Bases de datos vectoriales como Qdrant pueden aprovechar esto puntuando a través de múltiples incrustaciones, identificando la mejor coincidencia de un conjunto de vectores relacionados (ej., el parche de imagen más cercano o el párrafo relevante). Crucialmente, el vector interno puede mantener una dimensión fija incluso si la dimensión externa varía, un requisito común para la indexación eficiente de vectores en la mayoría de las bases de datos.

Mapeo de Tipos de CocoIndex a Qdrant

Qdrant, una base de datos vectorial ampliamente utilizada, soporta tanto vectores densos como multivectores. CocoIndex mapea inteligentemente sus tipos de vectores a formatos compatibles con Qdrant:

  • Un Vector[Float32, Literal[N]] de CocoIndex se mapea a un Vector Denso de Qdrant.

  • Un Vector[Vector[Float32, Literal[N]]] de CocoIndex se mapea a un MultiVector de Qdrant.

  • Cualquier otro tipo de vector, o vectores con dimensiones dinámicas no soportadas por Qdrant, se almacenan como parte de la carga útil JSON de Qdrant.

Qdrant requiere específicamente que los vectores tengan una dimensión fija para la indexación. CocoIndex detecta automáticamente las formas de los vectores y gestiona este mapeo, asegurando la compatibilidad.

Descripción General del Modelo de Datos de CocoIndex

Dentro de CocoIndex, los datos se organizan en filas y campos. Cada fila corresponde a un punto de Qdrant. Un campo puede ser un vector nombrado, si cumple con las restricciones de vector de Qdrant, o puede ser parte de la carga útil para tipos no conformes. Este enfoque híbrido ofrece la flexibilidad de los metadatos estructurados combinada con el poder de la búsqueda vectorial.

Al admitir vectores profundamente tipados e incrustaciones multidimensionales, CocoIndex proporciona estructura y claridad semántica a los pipelines de datos vectoriales. Su sistema de tipado garantiza compatibilidad, depurabilidad y corrección a escala, ya sea indexando imágenes, texto, audio o representaciones de grafos abstractas.