Étant donné que les besoins de recherche peuvent différer selon les secteurs et varier de temps en temps, le comportement de classement par défaut n'est pas forcément optimal pour tous les besoins commerciaux. Pour résoudre ce problème, vous pouvez modifier le comportement de classement à l'aide du classement personnalisé.
Cette page explique comment utiliser une formule de classement personnalisée dans votre requête de recherche et comment l'ajuster. Cette fonctionnalité est disponible pour les données structurées, non structurées et de site Web.
Présentation
Le classement personnalisé vous permet de fournir une expression mathématique qui s'appuie sur un ensemble de signaux calculés par le modèle, tels que le score de pertinence sémantique et le score de similarité des mots clés, ainsi que sur des signaux basés sur les documents, tels qu'un champ personnalisé comme la distance ou l'âge du document.
Le classement personnalisé vous permet d'effectuer les opérations suivantes :
- Gagnez en visibilité : identifiez les signaux qui contribuent au classement final de vos résultats de recherche.
- Ajuster les signaux existants : ajustez la pondération de différents signaux tels que la similarité sémantique, la correspondance des mots clés ou la fraîcheur des documents.
- Intégrer la logique métier : ajoutez vos propres signaux personnalisés à partir des données de vos documents directement dans la formule de classement.
- Optimisez systématiquement : utilisez la bibliothèque Python Open Source pour découvrir de manière programmatique la formule de classement optimale.
Nécessité d'un classement personnalisé : un exemple
Prenons l'exemple d'une requête pour la chaîne suivante sur un site Web de réservation d'hôtels :
luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.
Supposons que les entrées suivantes soient récupérées :
- Hôtel A : "Hôtel de luxe de premier plan à Vancouver, avec vue sur l'aéroport." Il dispose d'une superbe piscine sur le toit. Les animaux de compagnie ne sont pas autorisés."
- Hôtel B : "Hôtel moderne et élégant situé dans le centre-ville de Vancouver. Animaux acceptés, chambres spacieuses. Il dispose d'une grande piscine intérieure et d'un centre de remise en forme."
- Hôtel C : "Un charmant hôtel-boutique acceptant les animaux de compagnie près de l'aquarium (à 10 minutes à pied du centre-ville). Il comprend une jolie cour avec jardin. Pas de piscine."
- Hôtel D : "Un complexe rustique emblématique. Réputé pour sa cuisine exquise et son service impeccable. Il comporte une piscine intérieure et un spa. Options acceptant les animaux de compagnie disponibles sur demande."
Tous les hôtels du catalogue incluent un champ distance_from_airport
en kilomètres (km).
Classement basé sur les embeddings
Le système de recherche convertit la requête en un seul embedding. Il compare ensuite cet embedding de requête aux embeddings de tous les hôtels de son catalogue. Les hôtels dont les embeddings sont numériquement les plus proches de l'embedding de la requête sont mieux classés.
Voici le classement probable d'une recherche de pertinence basée uniquement sur les embeddings :
Classement | Hôtel | Raison possible de ce classement |
---|---|---|
1 | Hôtel A | Correspondance sémantique très forte pour les termes "luxe", "aéroport" et "piscine sur le toit". La réponse "pas d'animaux" n'est pas souhaitable, mais les autres correspondances fortes dominent. |
2 | Hôtel B | Bonne correspondance sémantique pour "animaux acceptés" et "piscine". Cependant, "intérieur" au lieu de "sur le toit", "moderne" et "élégant" au lieu de "luxe", et "centre-ville" au lieu de "aéroport" la rendent moins pertinente que A. |
3 | Hôtel D | Forte correspondance sémantique pour "animaux acceptés" et "grande piscine", mais "intérieure" au lieu de "sur le toit" et "rustique" au lieu de "luxe" la rendent légèrement moins pertinente sémantiquement que A et D. |
4 | Hôtel C | L'attribut "Chiens admis" est un signal fort, mais les attributs "Pas de piscine" et "Boutique" réduisent considérablement la pertinence pour cette requête spécifique. |
Ce classement ne fournit pas les résultats les plus pertinents. L'hôtel A est classé en première position, même si de nombreux utilisateurs ne le préfèrent pas en raison de sa politique "Animaux non autorisés". L'hôtel D, qui correspond à de nombreux critères, est classé plus bas, car son statut"rustique" ne correspond pas nécessairement à "luxe", et la piscine "intérieure" est classée plus bas que les correspondances exactes "grande" et "extérieure".
Classement personnalisé
Supposons que vous ayez configuré l'expression de classement suivante pour cet exemple de scénario. Pour en savoir plus sur les composants de cette expression, consultez À propos de l'implémentation du classement personnalisé.
rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8
où distance_from_airport
est un champ récupérable dans le catalogue et c.distance_from_airport
sert de signal.
Dans le classement personnalisé, vous tenez compte de différents signaux qui influencent la pertinence d'un document. Vous créez ensuite une expression mathématique contenant ces signaux à l'aide d'une syntaxe valide. Dans cette expression, vous normalisez les signaux et ajoutez des pondérations à leurs scores dérivés. Le score personnalisé final est calculé et les documents sont classés.
Dans cet exemple, ce processus peut être expliqué comme suit :
Chaque hôtel reçoit un score de similarité sémantique et un score de similarité des mots clés. De plus, la distance depuis l'aéroport est un signal important dérivé du document.
La fonction de transformation du rang réciproque ou
rr()
est utilisée pour transformer tous les scores sur la même échelle.Un poids est attribué au score dérivé de chaque signal. La somme de tous les scores individuels devient le score de classement personnalisé pour chaque hôtel.
Les différents signaux pour chaque hôtel sont présentés dans le tableau suivant :
Hôtel | semantic_similarity_score |
keyword_similarity_score |
c.distance_from_airport |
Score de classement personnalisé | Classement personnalisé | Classement basé sur les embeddings |
---|---|---|---|---|---|---|
Hôtel A | 9 | 6.2 ("aéroport", "luxe", "piscine sur le toit") | 5.0 | 0.04879 | 2 | 1 |
Hôtel B | 7,5 | 5.6 ("animaux acceptés", "centre-ville", "piscine intérieure", "élégant") | 12,5 | 0.04691 | 3 | 2 |
Hôtel C | 5.0 | 3.4 ("animaux acceptés", "centre-ville") | 18 | 0.04525 | 4 | 4 |
Hôtel D | 8,0 | 4,5 ("piscine intérieure", "animaux acceptés", "rustique") | 1 | 0.04890 | 1 | 3 |
En comparant les deux méthodes de classement, le classement personnalisé offre un classement plus réfléchi qui correspond probablement mieux aux besoins d'un utilisateur qu'un classement basé uniquement sur les embeddings.
À propos de l'implémentation du classement personnalisé
Pour obtenir un classement personnalisé dans vos résultats de recherche, vous devez appeler la méthode search
en fournissant les champs suivants :
Backend d'expression de classement (
rankingExpressionBackend
) : ce champ indique le mécanisme de classement à utiliser parmi les suivants.RANK_BY_EMBEDDING
: il s'agit de la valeur par défaut lorsque ce champ n'est pas spécifié. Si vous choisissez cette option, les résultats sont classés selon une expression de classement prédéfinie, basée sur l'intégration ou la pertinence.RANK_BY_FORMULA
: cela remplace le classement par défaut et vous permet de fournir votre formule personnalisée dans le champrankingExpression
.
Expression de classement (
rankingExpression
) : ce champ contient une formule mathématique qui détermine le classement des documents récupérés.Pour
RANK_BY_EMBEDDING
, il s'agit d'un score de pertinence (double * relevanceScore
) ou d'un score basé sur l'embedding (double * dotProduct(embedding_field_path)
).Pour
RANK_BY_FORMULA
, il s'agit d'une expression sélectionnée qui combine plusieurs signaux pour calculer un nouveau score pour chaque résultat de recherche.
Signaux standards
Vertex AI Search propose différents signaux que vous pouvez utiliser pour formuler un classement personnalisé. Voici les signaux standards disponibles :
Nom du signal | Description |
---|---|
default_rank |
Classement par défaut du document, tel que déterminé par l'algorithme de classement VAIS standard |
semantic_similarity_score |
Score calculé en fonction des embeddings de requête et de contenu pour déterminer la similarité entre une requête de recherche et le contenu d'un document. Cette valeur est calculée à l'aide d'un algorithme Google propriétaire. |
relevance_score |
Score produit par un modèle de pertinence approfondie, qui gère les interactions complexes entre les requêtes et les documents. Le modèle détermine la signification et l'intention d'une requête dans le contexte du contenu. Cette valeur est calculée à l'aide d'un algorithme Google propriétaire. |
keyword_similarity_score |
Score qui met fortement l'accent sur la correspondance des mots clés. Ce signal utilise la fonction de classement Best Match 25 (BM25). |
document_age |
Âge du document en heures. Accepte les valeurs à virgule flottante. Par exemple, une valeur de 0,5 signifie 30 minutes, tandis que 50 signifie 2 jours et 2 heures. |
pctr_rank |
Il s'agit d'un classement indiquant les taux de conversion prévus, calculés à partir des données d'événements utilisateur. Ce signal utilise le taux de clics prédit (pCTR) pour évaluer la pertinence d'un résultat de recherche du point de vue de l'utilisateur. |
topicality_rank |
Il s'agit d'un classement indiquant l'ajustement de la similarité des mots clés calculé à l'aide d'un algorithme Google propriétaire. |
boosting_factor |
Combinaison de tous les boosts personnalisés que vous avez appliqués au document. |
En plus de ces champs, vous pouvez utiliser n'importe quel champ personnalisé d'un document marqué comme récupérable. Pour ce faire, ajoutez le préfixe c.
à leurs noms de champs. Par exemple, si vous avez un champ personnalisé nommé date_approved
, vous pouvez utiliser c.date_approved
comme signal personnalisé.
Les noms de signaux sont une combinaison de caractères alphabétiques et de traits de soulignement (_
). Voici une liste des noms réservés qui ne peuvent pas être utilisés comme noms de signaux : log
, exp
, rr
, is_nan
et fill_nan
.
Syntaxe des formules de classement
La formule de classement personnalisé est une expression mathématique qui comporte les composants suivants :
Nombres (
double
) : valeurs à virgule flottante positives ou négatives qui ajoutent une pondération à un signal ou à une expression.Signaux (
signal
) : noms des signaux listés dans la section Signaux disponibles.Opérateurs arithmétiques :
+
(addition) et*
(multiplication).Fonctions mathématiques :
log(expression)
: logarithme naturelexp(expression)
: exposant naturel
Chacune de ces expressions accepte un seul argument, qui est une expression écrite en termes de signal.
Exemples de fonctions valides :
exp(c.document_age)
etlog(keywordSimilarityScore * 0.2 + 1.0)
.Fonction de transformation du rang réciproque (
rr
) : cette fonction est exprimée sous la formerr(expression, k)
. Il trie d'abord les documents par valeur deexpression
dans l'ordre décroissant et leur attribue un rang. Il calcule ensuite la valeur finale à l'aide des expressions1 / (rank_i + k)
, oùrank_i
correspond à la position du document dans la liste triée à partir de 0 etk
est un nombre à virgule flottante positif que vous fournissez.La fonction
rr()
transforme tous les scores à la même échelle et élimine le besoin de normalisation supplémentaire.Fonctions de gestion des valeurs "Not a number" (NaN) :
is_nan(expression)
: lorsque l'expression est évaluée comme étant NaN, par exemple lorsqu'un signal est manquant pour un document,1
est renvoyé. Sinon,0
est renvoyé.fill_nan(arg_expression, fill_with_expression)
: siarg_expression
est une valeur NaN, renvoiefill_with_expression
. Sinon, renvoiearg_expression
. C'est essentiel pour traiter les documents qui peuvent manquer de certains signaux.
Exemples de formules de classement
Combinaison linéaire élémentaire :
semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
Formule complexe utilisant le classement réciproque et la gestion des valeurs NaN :
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
Formule complexe utilisant le rang réciproque, la fonction exponentielle et la gestion des valeurs NaN :
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
Personnaliser le classement à l'aide d'une formule de classement dans la recherche
Pour personnaliser le classement de vos documents dans les résultats de recherche, rédigez manuellement une formule et ajoutez-la à votre appel d'API search
.
Formulez une expression de classement.
obtenir des résultats de recherche ;
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \ -d '{ "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search", "query": "QUERY", "rankingExpression": "RANKING_EXPRESSION", "rankingExpressionBackend": "RANK_BY_FORMULA" }'
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google Cloud .APP_ID
: ID de l'application Vertex AI Search que vous souhaitez interroger.QUERY
: texte de la requête à rechercher.RANKING_EXPRESSION
: formule de classement personnalisée que vous pouvez écrire à l'aide des signaux disponibles avec une syntaxe de formule de classement valide.- Pour obtenir des exemples valides, consultez Exemples de formules de classement.
- Pour ajuster la formule de classement afin d'obtenir les meilleurs résultats, consultez Ajuster la formule de classement à l'aide de la bibliothèque Python.
Ajuster la formule de classement à l'aide de la bibliothèque Python
Pour les cas d'utilisation plus avancés, il peut être difficile de trouver les pondérations optimales pour votre formule. Pour surmonter ce problème, vous pouvez utiliser la bibliothèque Python de réglage du classement de Vertex AI Search, qui est un outil Open Source, et trouver une formule adaptée à votre cas d'utilisation.
Voici le workflow général :
- Préparez un ensemble de données de requêtes avec les libellés de référence correspondants. Ces libellés dorés peuvent être des champs d'identification uniques, tels que l'ID du document, qui peuvent vous aider à associer l'objet
SearchResult
dans la réponse de recherche. - Pour un ensemble de requêtes représentatives, appelez l'API
search
pour obtenir les signaux de classement disponibles pour tous les documents renvoyés. Vous trouverez cette information dans le champSearchResult.rankSignals
. Stockez ces données avec vos libellés de référence. Utilisez la bibliothèque Python pour entraîner un modèle de classement sur cet ensemble de données. Pour en savoir plus, consultez la bibliothèque Python Clearbox.
Convertissez la formule des résultats d'entraînement en expression de classement, que vous pourrez ensuite utiliser dans vos appels d'API.