Partager via


Affecter des types de données étroits à des champs vectoriels dans Recherche Azure AI

Un moyen facile pour réduire la taille de vecteur consiste à stoker des incorporations dans un format de données plus petit. La plupart des modèles d’incorporation génèrent des nombres à virgules flottantes de 32 bits mais, si vous quantifiez vos vecteurs ou si votre modèle d’incorporation le prend en charge en natif, il est possible que la génération soit float16, int16 ou int8, ce qui est sensiblement plus petit que float32. Vous pouvez héberger ces tailles de vecteur plus petites en attribuant un type de données étroit à un champ vectoriel. Dans l’index vectoriel, les types de données étroits consomment moins de stockage.

Les types de données sont affectés aux champs d’une définition d’index. Vous pouvez utiliser le portail Azure, les API REST de recherche, ou un package du Kit de développement logiciel (SDK) Azure qui fournit la fonctionnalité.

Prérequis

  • Modèle d’incorporation qui génère de petits formats de données, tels que text-embedding-3 ou les modèles d’incorporation Cohere V3.

Types de données étroits pris en charge

  1. Passez en revue les types de données utilisés par des champs vectoriels pour l’utilisation recommandée :

    • Collection(Edm.Single) Virgule flottante 32 bits (par défaut)
    • Collection(Edm.Half) Virgule flottante 16 bits (étroit)
    • Collection(Edm.Int16) Entier signé 16 bits (étroit)
    • Collection(Edm.SByte) Entier signé 8 bits (étroit)
    • Collection(Edm.Byte) Entier non signé 8 bits (uniquement autorisé avec des types de données binaires compressés)
  2. Dans la liste, déterminez le type de données valide pour la sortie de votre modèle d’intégration ou pour les vecteurs soumis à une quantification personnalisée.

    Le tableau suivant fournit des liens vers plusieurs modèles d'incorporation qui utilisent un type de données étroit (Collection(Edm.Half)) sans quantification supplémentaire. Vous pouvez caster de float32 vers float16 (en utilisant Collection(Edm.Half)) sans travail supplémentaire.

    Modèle d'intégration Sortie native Attribuer ce type dans Recherche Azure AI
    text-embedding-ada-002 Float32 Collection(Edm.Single) ou Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) ou Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) ou Collection(Edm.Half)
    Modèles d'intégration Cohere V3 avec int8 embedding_type Int8 Collection(Edm.SByte)

    D’autres types de données étroits peuvent être utilisés si votre modèle émet des incorporations dans le format de données plus petit, ou si vous avez une quantification personnalisée qui convertit des vecteurs vers un format plus petit.

  3. Assurez-vous de comprendre les compromis d’un type de données restreint. Collection(Edm.Half) contient moins d’informations, ce qui entraîne une résolution plus faible. Si vos données sont homogènes ou denses, la perte de détails ou de nuances supplémentaires pourrait conduire à des résultats inacceptables au moment de la requête, car moins de détails peuvent être utilisés pour distinguer les vecteurs proches.

Affecter le type de données

Définir et générer un index. Vous pouvez utiliser le Portail Azure, Créer ou mettre à jour un index (API REST) ou un package de Kit de développement logiciel (SDK) Azure pour cette étape.

Cette définition de champ utilise un type de données étroit, Collection(Edm.Half), qui peut accepter une incorporation float32 stockée en tant que valeur float16. Comme c’est le cas pour tous les champs vectoriels, dimensions et vectorSearchProfile sont définis. Les spécificités de vectorSearchProfile sont immatériaux pour le type de données.

Nous vous recommandons de définir retrievable et stored sur true si vous souhaitez vérifier visuellement les valeurs du champ. Lors d’une reconstruction ultérieure, vous pouvez remplacer ces propriétés par false pour les exigences de stockage réduites.

{
    "name": "nameEmbedding",
    "type": "Collection(Edm.Half)",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "synonymMaps": [],
    "dimensions": 1536,
    "vectorSearchProfile": "myHnswProfile"
}

Rappelez-vous que les champs vectoriels ne sont pas filtrables, triables ou facetables. Ils ne peuvent pas être utilisés comme clés et n’utilisent pas d’analyseurs ou de mappages de synonymes.

Utilisation d’un index de production

Les types de données sont affectés sur de nouveaux champs lorsqu’ils sont créés. Vous ne pouvez pas modifier le type de données d’un champ existant et vous ne pouvez pas supprimer un champ sans reconstruire l’index. Pour les index établis déjà en production, il est courant de contourner ce problème en créant de nouveaux champs avec les révisions souhaitées, puis en supprimant les champs obsolètes lors d’une reconstruction d’index planifiée.

Vérifier les résultats

  1. Vérifiez que le contenu du champ correspond au type de données. En supposant que le champ vectoriel est marqué comme retrievable, utilisez Explorateur de recherche ou Recherche - POST pour retourner le contenu du champ vectoriel.

  2. Pour vérifier la taille de l’index vectoriel, reportez-vous à la colonne de taille d’index vectoriel sur la page de gestion de recherche> index dans le portail Azure ou utilisez la GET Statistics (API REST) ou la méthode du KIT de développement logiciel (SDK) Azure équivalente pour obtenir la taille.

Remarque

Le type de données du champ est utilisé pour créer la structure physique des données. Si vous souhaitez modifier un type de données ultérieurement, supprimer et reconstruire l’index, ou créer un deuxième champ avec la nouvelle définition.