Partager via


Recherche hybride dans Azure Cosmos DB for NoSQL (préversion)

Azure Cosmos DB for NoSQL prend maintenant en charge une fonctionnalité puissante de recherche hybride qui combine la recherche vectorielle avec un scoring de recherche en texte intégral (BM25) en utilisant la fonction de fusion de classement réciproque (RRF).

Remarque

La recherche en texte intégral et hybride est en préversion anticipée et risque de ne pas être disponible dans toutes les régions.

La recherche hybride tire parti des puissances des méthodes de recherche traditionnelles basées sur le mot clé et sur le vecteur pour fournir des résultats de la recherche plus pertinents et exacts. La recherche hybride est facile à réaliser dans Azure Cosmos DB for NoSQL en raison de la possibilité de stocker des métadonnées et des vecteurs au sein du même document.

La recherche hybride dans Azure Cosmos DB for NoSQL intègre deux méthodologies de recherche distinctes :

  • Recherche vectorielle : utilise les modèles Machine Learning pour comprendre la signification sémantique des requêtes et des documents. Les résultats de la recherche sont ainsi plus nuancés et sensibles au contexte, ce qui est particulièrement utile pour les requêtes complexes où il est possible que la recherche par mot clé traditionnelle soit peu satisfaisante.
  • Recherche en texte intégral (BM25) : algorithme bien ancré qui permet d’effectuer un scoring des documents en fonction de la présence et de la fréquence de mots et de termes. BM25 est particulièrement efficace pour les recherches simples par mot clé, ce qui fournit une ligne de base robuste pour la pertinence de recherche.

Les résultats de la recherche vectorielle et de la recherche en texte intégral sont ensuite combinés en utilisation la fonction de fusion de classement réciproque (RRF). RRF est une méthode d’agrégation de classement qui fusionne les classements à partir de plusieurs algorithmes de recherche pour produire un seul classement unifié. Elle veille à ce que les résultats de la recherche finaux profitent des puissances des deux approches de recherche et offre plusieurs avantages.

  • Pertinence améliorée : la combinaison de la compréhension sémantique à la correspondance de mot clé permet à la recherche hybride de fournir d’autres résultats pertinents pour un large éventail de requêtes.
  • Exactitude améliorée : la fonction RRF veille à ce que les résultats les plus pertinents des deux méthodes de recherche soient prioritaires.
  • Polyvalence : convient à divers cas d’utilisation, notamment la Génération augmentée de récupération (RAG), pour améliorer les réponses générées par un grand modèle de langage (LLM) ancré sur vos propres données.
  1. Activez la recherche vectorielle dans la fonctionnalité Azure Cosmos DB for NoSQL.
  2. Activez la fonctionnalité en préversion de recherche en texte intégral et hybride pour NoSQL.
  3. Créez un conteneur avec une stratégie vectorielle, une stratégie de texte intégral, un index vecteur et un index de texte intégral.
  4. Insérez vos données avec des propriétés de texte et vectorielles.
  5. Exécutez des requêtes hybrides sur les données.

Important

Actuellement, les stratégies vectorielles et les index vectoriels sont immuables après la création. Pour apporter des modifications, créez une collection.

Exemple de stratégie vectorielle

{
   "vectorEmbeddings": [
       {
           "path":"/vector",
           "dataType":"float32",
           "distanceFunction":"cosine",
           "dimensions":3
       },

}

Exemple de stratégie de texte intégral

{
    "defaultLanguage": "en-US",
    "fullTextPaths": [
        {
            "path": "/text",
            "language": "en-US"
        }
    ]
}

Exemple de stratégie d’indexation avec les index en texte intégral et vectoriels

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
        {
            "path": "/vector/*"
        }
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector",
            "type": "DiskANN"
        }
    ]
}

Requêtes de recherche hybrides

Les requêtes de recherche hybride peuvent être exécutées en tirant parti de la fonction système RRF dans une clause ORDER BY RANK qui inclut une fonction VectorDistance et FullTextScore. Par exemple, une requête paramétrable pour trouver les k principaux résultats les plus pertinents ressemblera à ce qui suit :

SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))

Supposons que vous avez un document ayant des incorporations vectorielles stockées dans chaque document de la propriété c.vector et des données texte contenues dans la propriété c.text. Vous pouvez écrire la requête comme ce qui suit pour obtenir les 10 documents les plus pertinents en utilisant la recherche hybride :

SELECT TOP 10 * 
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])