Configurer le scoring de pertinence BM25

Dans cet article, découvrez comment configurer l’algorithme de scoring de pertinence BM25 utilisé par Recherche Azure AI pour les requêtes de recherche en texte intégral. Il explique également comment activer BM25 sur les services de recherche plus anciens.

BM25 s’applique aux :

  • Requêtes qui utilisent le paramètre search pour la recherche en texte intégral, sur les champs de texte ayant une attribution searchable.
  • Le scoring est limité à searchFields, ou à tous les champs searchable si searchFields est Null.

Le moteur de recherche utilise BM25 pour calculer un @searchScore pour chaque correspondance dans une requête donnée. Les documents correspondants sont classés par leur score de recherche, avec les meilleurs résultats retournés dans la réponse de requête. Il est possible d’obtenir des variation de score dans les résultats, même à partir de la même requête s’exécutant sur le même index de recherche, mais généralement ces variations sont petites et ne modifient pas le classement global des résultats.

BM25 se sert de valeurs par défaut pour pondérer la fréquence des termes et la longueur des documents. Vous pouvez personnaliser ces propriétés si les valeurs par défaut ne conviennent pas à votre contenu. Les modifications de configuration s’appliquant aux index de façon individuelle, vous pouvez adapter le scoring de pertinence en fonction des caractéristiques de chaque index.

Algorithme de scoring par défaut

Selon l’âge de votre service de recherche, Recherche Azure AI prend en charge deux algorithmes de scoring pour une requête de recherche en texte intégral :

  • Algorithme OKapi BM25 (après le 15 juillet 2020)
  • Algorithme de similarité classique (avant le 15 juillet 2020)

Le classement BM25 est la valeur par défaut, car il a tendance à produire des classements de recherche mieux alignés sur les attentes des utilisateurs. Il inclut des paramètres permettant d'ajuster les résultats en fonction de facteurs tels que la taille du document. Pour les services de recherche créés après juillet 2020, BM25 est le seul algorithme de scoring utilisé. Si vous essayez de définir la « similarité » sur ClassicSimilarity pour un nouveau service, une erreur HTTP 400 est retournée, car cet algorithme n’est pas pris en charge par le service.

Pour les services plus anciens, la similarité classique demeure l’algorithme par défaut. Les services plus anciens peuvent être mis à niveau vers BM25 en fonction de l’index. Lorsque vous passez d’un modèle classique à BM25, attendez-vous à constater quelques différences dans le tri des résultats de la recherche.

Définir les paramètres BM25

Le classement BM25 fournit deux paramètres pour régler le calcul du score de pertinence.

  1. Utilisez une requête Créer ou mettre à jour l’index pour définir les paramètres BM25 :

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2024-07-01&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Si l’index est en ligne, ajoutez le paramètre URI allowIndexDowntime=true à la requête, illustré dans l’exemple précédent.

    Étant donné que Recherche Azure AI n’autorise pas les mises à jour d’un index actif, vous devez mettre l’index hors connexion afin que les paramètres puissent être ajoutés. L’indexation et les demandes de requête échouent pendant que l’index est hors connexion. La durée de la panne est la durée nécessaire à la mise à jour de l’index, généralement pas plus de plusieurs secondes. Une fois la mise à jour terminée, l’index revient automatiquement.

  3. Définissez "b" et "k1" sur des valeurs personnalisées, puis envoyez la requête.

    Propriété Type Description
    k1 number Contrôle la fonction de mise à l’échelle entre la fréquence de chaque terme correspondant et le score de pertinence final d’une paire document-requête. Les valeurs se situent généralement entre 0,0 et 3,0, la valeur par défaut étant 1,2.

    Une valeur 0.0 représente un « modèle binaire », où la contribution d’un terme correspondant unique est la même pour tous les documents correspondants, quel que soit le nombre de fois où ce terme apparaît dans le texte. Les valeurs k1 plus volumineuses permettent au score de continuer à augmenter à mesure que d’autres instances du même terme sont trouvées dans le document.

    L’utilisation d’une valeur k1 plus volumineuse est importante dans les cas où plusieurs termes sont inclus dans une requête de recherche. Dans ce cas, il est préférable de privilégier les documents qui correspondent à plusieurs termes de la requête, plutôt que ceux qui ne correspondent qu’à un seul terme, plusieurs fois. Par exemple, lors de l’interrogation pour les termes « Apollo Spaceflight », vous pouvez souhaiter diminuer le score d’un article sur la mythologie grecque qui contient le terme « Apollo » plusieurs dizaines de fois mais ne mentionne pas « Spaceflight », par rapport à un autre article qui mentionne explicitement à la fois « Apollo » et « Spaceflight » quelques fois seulement.
    b number Contrôle la manière dont la longueur d’un document affecte le score de pertinence. Les valeurs sont comprises entre 0 et 1, la valeur par défaut étant 0,75.

    Une valeur 0,0 signifie que la longueur du document n’influence pas le score. La valeur 1,0 signifie que l’effet de la fréquence de terme sur le score de pertinence est normalisé par la longueur du document.

    La normalisation de la fréquence du terme par la longueur du document est utile dans les cas où vous voulez pénaliser les documents plus longs. Dans certains cas, des documents plus longs (par exemple, un roman entier) sont davantage susceptibles de contenir de nombreux termes non pertinents, par rapport à des documents plus courts.

Activer le scoring BM25 sur les services plus anciens

Si vous exécutez un service de recherche qui a été créé entre mars 2014 et le 15 juillet 2020, vous pouvez activer BM25 en définissant une propriété « similarity » sur les nouveaux index. La propriété est exposée uniquement sur les nouveaux index. Par conséquent, si vous souhaitez BM25 sur un index existant, vous devez supprimer et reconstruire l’index avec une propriété de « similarité » définie sur Microsoft.Azure.Search.BM25Similarity.

Une fois qu’il existe un index avec une propriété de « similarité », vous pouvez basculer entre BM25Similarity ou ClassicSimilarity.

Les liens suivants décrivent la propriété Similarity dans les kits de développement logiciel (SDK) Azure.

Bibliothèque cliente Propriété de similarité
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python propriété de similarité sur SearchIndex

Exemple REST

Vous pouvez également utiliser l’API REST. L’exemple suivant crée un nouvel index avec la propriété « Similarity » définie sur BM25 :

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2024-07-01
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Voir aussi