Concevez des Pipelines d'IA plus Intelligents avec des Vecteurs Typés et Multidimensionnels

2025-08-06T05:33:20.000ZHackernoon

CocoIndex a introduit un support complet pour les données vectorielles typées, englobant tout, des tableaux numériques de base aux vecteurs multidimensionnels complexes et profondément imbriqués. Cette amélioration est conçue pour faciliter l'intégration transparente avec des bases de données vectorielles hautes performances telles que Qdrant, permettant des flux de travail avancés d'indexation, d'intégration et de récupération à travers diverses modalités de données.

La plateforme prend désormais en charge une gamme de types de vecteurs avec de solides garanties de typage. Bien que CocoIndex puisse inférer automatiquement les types pour la plupart des flux de données, une spécification de type explicite est disponible pour les fonctions personnalisées, offrant un plus grand contrôle.

Types de Vecteurs Pris en Charge

  1. Vecteurs unidimensionnels : Ceux-ci représentent de simples séquences de nombres. CocoIndex prend en charge les dimensions dynamiques, où la longueur du vecteur peut varier, ou les dimensions fixes, telles que Vector[Float32, Literal[384]] pour un vecteur contenant toujours 384 éléments. En interne, ceux-ci peuvent correspondre à des tableaux NumPy (numpy.typing.NDArray[np.float32]) ou des listes Python (list[float]). Les types numériques pris en charge incluent les float et int natifs de Python, les alias de type CocoIndex (Float32, Float64, Int64 pour un contrôle précis de la taille en bits) et les types NumPy (numpy.float32, numpy.float64, numpy.int64).

  2. Vecteurs bidimensionnels (Multivecteurs) : Représentés comme Vector[Vector[Float32, Literal[3]], Literal[2]], ceux-ci signifient un vecteur composé d'autres vecteurs — par exemple, deux vecteurs, chacun avec trois éléments. Cette structure est idéale pour les scénarios nécessitant plusieurs intégrations par point de données, des représentations multi-vues ou des encodages par lots. Leur représentation Python sous-jacente est typiquement une liste imbriquée (list[list[float]]) ou un tableau NumPy multidimensionnel (numpy.typing.NDArray).

Comprendre les Vecteurs Multidimensionnels

Un vecteur multidimensionnel est fondamentalement un vecteur dont les éléments sont eux-mêmes des vecteurs, semblable à une matrice ou à une liste imbriquée. CocoIndex représente cette structure à l'aide de types Vector imbriqués, tels que Vector[Vector[T, N], M], où M désigne le nombre de vecteurs internes, chacun de dimension N. Bien que M et N puissent être dynamiques au sein de CocoIndex, certains systèmes cibles comme Qdrant peuvent exiger une dimension interne fixe (N). Ce concept est vital dans l'apprentissage profond et les applications multimodales, permettant des représentations de données plus riches, telles qu'une image comme une collection d'intégrations au niveau des patchs, un document comme des vecteurs au niveau des paragraphes, ou une session utilisateur comme une séquence de vecteurs comportementaux. CocoIndex prend en charge ces représentations complexes nativement, évitant le besoin d'aplatissement.

Applications des Intégrations Multivectorielles

Les intégrations multivectorielles sont particulièrement bénéfiques dans plusieurs cas d'utilisation avancés :

  • Vision : Intégrations de Patchs : En vision par ordinateur, un Vision Transformer (ViT) pourrait produire plusieurs vecteurs pour une image, un pour chaque patch (ex : 196 patchs, chacun avec une intégration de 768 dimensions). Cela permet la correspondance de caractéristiques locales et la récupération sensible à la région, représenté comme Vector[Vector[Float32, Literal[768]]].
  • Texte : Document avec Paragraphes : Pour les documents longs, les diviser en vecteurs au niveau du paragraphe ou de la phrase (ex : 10 vecteurs de paragraphe de 384 dimensions chacun) préserve mieux le contexte et la structure que de faire la moyenne de tous les vecteurs. Cela permet de rechercher dans des sous-parties d'un document, de récupérer des documents basés sur un seul paragraphe pertinent et de mettre en œuvre une recherche hiérarchique. Cela peut être typé comme Vector[Vector[Float32, Literal[384]]].
  • Comportement Utilisateur : Sessions ou Séries Temporelles : Une session utilisateur peut être modélisée comme une séquence d'actions ou d'états, où chaque étape est un vecteur (ex : 20 étapes, chacune un vecteur de 16 dimensions). Ceci est précieux dans les séquences de clics e-commerce, les séries temporelles financières ou l'analyse UX pour les interactions multi-étapes, représenté comme Vector[Vector[Float32, Literal[16]]].
  • Scientifique & Biomédical : Intégrations Multi-vues : Des entités complexes comme les molécules ou les protéines peuvent avoir plusieurs conformations ou modalités de mesure. Les représenter comme plusieurs vecteurs (ex : 5 vues différentes, chacune de 128 dimensions) permet des comparaisons complètes à travers leurs espaces latents, typé comme Vector[Vector[Float32, Literal[128]]].

Avantages sur les Vecteurs Plats

Bien qu'il soit possible d'aplatir un multivecteur (par exemple, convertir [[1,2,3],[4,5,6]] en [1,2,3,4,5,6]), cela entraîne une perte de frontières sémantiques. Les vrais multivecteurs préservent le sens de chaque sous-vecteur, permettant la correspondance et l'interrogation au niveau du sous-vecteur. Les bases de données vectorielles comme Qdrant peuvent en tirer parti en scorant à travers plusieurs intégrations, identifiant la meilleure correspondance à partir d'un ensemble de vecteurs liés (par exemple, le patch d'image le plus proche ou le paragraphe pertinent). Il est crucial que le vecteur interne puisse maintenir une dimension fixe même si la dimension externe varie, une exigence courante pour l'indexation vectorielle efficace dans la plupart des bases de données.

Mappage des Types CocoIndex vers Qdrant

Qdrant, une base de données vectorielle largement utilisée, prend en charge les vecteurs denses et les multivecteurs. CocoIndex mappe intelligemment ses types de vecteurs vers des formats compatibles Qdrant :

  • Un Vector[Float32, Literal[N]] de CocoIndex est mappé à un Vecteur Dense Qdrant.
  • Un Vector[Vector[Float32, Literal[N]]] de CocoIndex est mappé à un MultiVector Qdrant.
  • Tout autre type de vecteur, ou les vecteurs avec des dimensions dynamiques non prises en charge par Qdrant, sont stockés dans la charge utile JSON de Qdrant.

Qdrant exige spécifiquement que les vecteurs aient une dimension fixe pour l'indexation. CocoIndex détecte automatiquement les formes des vecteurs et gère ce mappage, assurant la compatibilité.

Vue d'Ensemble du Modèle de Données CocoIndex

Au sein de CocoIndex, les données sont organisées en lignes et en champs. Chaque ligne correspond à un point Qdrant. Un champ peut être un vecteur nommé, s'il respecte les contraintes de vecteur de Qdrant, ou il peut faire partie de la charge utile pour les types non conformes. Cette approche hybride offre la flexibilité des métadonnées structurées combinée à la puissance de la recherche vectorielle.

En prenant en charge les vecteurs profondément typés et les intégrations multidimensionnelles, CocoIndex apporte structure et clarté sémantique aux pipelines de données vectorielles. Son système de typage assure la compatibilité, la débogabilité et la correction à l'échelle, qu'il s'agisse d'indexer des images, du texte, de l'audio ou des représentations graphiques abstraites.

Concevez des Pipelines d'IA plus Intelligents avec des Vecteurs Typés et Multidimensionnels - OmegaNext Actualités IA