Partager via


Tronquer des dimensions à l’aide de la compression MRL (préversion)

Important

Cette fonctionnalité est en préversion publique sous les conditions d’utilisation supplémentaires. L’API REST en préversion prend en charge cette fonctionnalité.

Exercice de la possibilité d’utiliser moins de dimensions sur les modèles text-embedding-3. Sur Azure OpenAI, les modèles text-embedding-3 sont réentraînés sur la technique Matryoshka Representation Learning (MRL) qui produit plusieurs représentations vectorielles à différents niveaux de compression. Cette approche produit des recherches plus rapides et réduit les coûts de stockage, avec une perte minimale d’informations sémantiques.

Dans Recherche Azure AI, MRL prend en charge les suppléments la quantification scalaire et binaire. Quand vous utilisez ces méthodes de quantification, vous pouvez aussi spécifier une propriété truncationDimension sur vos champs vectoriels pour réduire la dimensionnalité des incorporations de texte.

La compression multiniveau de MRL économise du stockage vectoriel et améliore les temps de réponse des requêtes pour les requêtes vectorielles basées sur des incorporations de texte. Dans Recherche Azure AI, la prise en charge de MRL est offerte seulement en combinaison avec une autre méthode de quantification. L’utilisation de la quantification binaire avec MRL permet une réduction maximale de la taille de l’index vectoriel. Pour obtenir une réduction maximale du stockage, utilisez la quantification binaire avec MRL et stored défini sur false.

Cette fonctionnalité est en version préliminaire. Elle est disponible dans 2024-09-01-preview et dans les packages du Kit de développement logiciel (SDK) bêta ciblant cette préversion de l’API.

Prérequis

  • Modèles text-embedding-3 tels que text-embedding-3-small ou text-embedding-3-large (contenu texte uniquement).

  • Nouveaux champs vectoriels de type Edm.Half ou Edm.Single (vous ne pouvez pas ajouter de compression MRL à un champ existant).

  • Algorithme Hierarchical Navigable Small World (HNSW) (pas de prise en charge du KNN exhaustif dans cet aperçu).

  • Quantification scalaire ou binaire. Les dimensions tronquées ne peuvent être définies que lorsque la quantification scalaire ou binaire est configurée. Nous vous recommandons la quantification binaire pour la compression MRL.

Clients pris en charge

Vous pouvez utiliser les API REST ou les packages bêta du Kit de développement logiciel (SDK) Azure pour implémenter la compression MRL.

Il n’existe actuellement aucun support pour le portail Azure ou Azure AI Foundry.

Comment utiliser des incorporations de texte étendues par MRL

MRL est une fonctionnalité intégrée au modèle d’incorporation de texte que vous utilisez déjà. Pour bénéficier de ces fonctionnalités dans Recherche Azure AI, procédez comme suit.

  1. Utilisez la créer ou mettre à jour un index (préversion) ou une API équivalente pour spécifier le schéma d’index.

  2. Ajouter des champs vectoriels à la définition d’index.

  3. Spécifiez un objet vectorSearch.compressions dans votre définition d’index.

  4. Incluez une méthode de quantification, scalaire ou binaire (recommandée).

  5. Incluez le paramètre truncationDimension défini sur 512, ou 256 si vous utilisez le modèle text-embedding-3-large.

  6. Spécifiez un profil vectoriel qui spécifie l’algorithme HNSW et l’objet de compression vectorielle.

  7. Affectez le profil vectoriel à un champ vectoriel de type Edm.Half ou Edm.Single dans la collection de champs.

Aucune modification des requêtes n’est nécessaire pour utiliser un modèle d’incorporation de texte compatible MRL. La vectorisation intégrée, les conversions de texte à requête au moment de la requête, le classement sémantique et d’autres fonctionnalités d’amélioration de la pertinence, comme le reclassement avec des vecteurs d’origine et le suréchantillonnage, ne sont pas affectés par la prise en charge de MRL.

L’indexation est plus lente en raison des étapes supplémentaires, mais les requêtes sont plus rapides.

Exemple de configuration de recherche vectorielle qui prend en charge MRL

L’exemple suivant illustre une configuration de recherche vectorielle qui répond aux exigences et aux recommandations de MRL.

truncationDimension est une propriété de compression. Il spécifie la quantité de réduction du graphique vectoriel en mémoire avec une méthode de compression telle que scalaire ou compression binaire. Nous vous recommandons d’utiliser 1 024 ou plus pour truncationDimension avec la quantification binaire. Une dimensionnalité inférieure à 1 000 dégrade la qualité des résultats de la recherche lors de l’utilisation de MRL et de la compression binaire.

{ 
  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "use-bq-with-mrl", 
        "compression": "use-mrl,use-bq", 
        "algorithm": "use-hnsw" 
      } 
    ],
    "algorithms": [
       {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
             "m": 4,
             "efConstruction": 400,
             "efSearch": 500,
             "metric": "cosine"
          }
       }
    ],
    "compressions": [ 
      { 
        "name": "use-mrl", 
        "kind": "truncation", 
        "rerankWithOriginalVectors": true, 
        "defaultOversampling": 10, 
        "truncationDimension": 1024
      }, 
      { 
        "name": "use-bq", 
        "kind": "binaryQuantization", 
        "rerankWithOriginalVectors": true,
        "defaultOversampling": 10
       } 
    ] 
  } 
} 

Voici un exemple de définition d’un champ vectoriel entièrement spécifié qui satisfait aux exigences de MRL.

Rappelez-vous que les champs vectoriels doivent être de type Edm.Half ou Edm.Single. Les champs vectoriels doivent avoir une propriété vectorSearchProfile qui détermine les paramètres d’algorithme et de compression. Les champs vectoriels ont une propriété dimensions utilisée afin de spécifier le nombre de dimensions pour le scoring et les résultats du classement. Sa valeur doit être la limite de dimensions du modèle que vous utilisez (1 536 pour text-embedding-3-small).

{
    "name": "text_vector",
    "type": "Collection(Edm.Single)",
    "searchable": true,
    "filterable": false,
    "retrievable": false,
    "stored": false,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "normalizer": null,
    "dimensions": 1536,
    "vectorSearchProfile": "use-bq-with-mrl",
    "vectorEncoding": null,
    "synonymMaps": []
}