Mise en œuvre de la recherche sémantique : Construire une recherche de recettes avec Elasticsearch

Mise en œuvre de la recherche sémantique dans le contexte des sites de commerce électronique.

Vous débutez avec Elasticsearch ? Participez à notre webinaire Premiers pas avec Elasticsearch. Vous pouvez aussi démarrer un essai gratuit sur le cloud ou tester Elastic dès maintenant sur votre machine.

Introduction

De nombreux sites de commerce électronique souhaitent améliorer leur expérience en matière de recherche de recettes. La recherche sémantique, lorsqu'elle est appliquée correctement, permet aux clients de trouver rapidement les ingrédients nécessaires sur la base de requêtes plus naturelles, telles que "quelque chose pour la Saint-Valentin" ou "les repas de Thanksgiving."

Dans cet article, nous allons montrer comment utiliser Elasticsearch pour mettre en œuvre une recherche sémantique qui prend en charge de telles requêtes. Nous configurerons un index pour stocker le catalogue des ingrédients et des produits d'un supermarché et nous montrerons comment cet index peut être utilisé pour améliorer les recherches de recettes. Tout au long de cet article, nous expliquerons comment créer cette structure de données et appliquer des techniques de traitement du langage naturel pour fournir des résultats pertinents correspondant à l'intention du client.

Tout le code présenté dans cet article a été développé en Python et est disponible sur GitHub. Vous pouvez accéder au référentiel pour examiner le code source, faire les ajustements nécessaires et mettre en œuvre les solutions directement dans votre environnement de développement.

Pour commencer à mettre en œuvre la recherche sémantique, nous devons d'abord définir le modèle de langage naturel. Elastic fournit son propre modèle, ELSER, mais offre également un support pour l'intégration de modèles NLP provenant de divers fournisseurs, tels que Hugging Face. Cette flexibilité vous permet de choisir l'option qui répond le mieux à vos besoins.

Dans cet article, nous utiliserons ELSER, qui réduit la complexité du déploiement et de la gestion des modèles NLP. En outre, Elastic propose la fonction semantic_text, qui simplifie grandement le processus. Avec semantic_text, l'ensemble du processus de génération d'encarts devient simple et automatisé. Il vous suffit de définir un point d'inférence et de spécifier le champ qui recevra les embeddings dans votre mappage d'index. Lors de l'indexation des documents, des embeddings seront générés et automatiquement associés au champ spécifié.

Étapes de la configuration

Voici les étapes à suivre pour créer un index prenant en charge la recherche sémantique. En suivant ces instructions, vous aurez un index configuré et prêt pour les recherches sémantiques :

  1. Créer le point d'inférence.
  2. Créer l'index, en définissant le champ description comme semantic_text afin qu'il puisse recevoir les embeddings.
  3. Indexer les données dans l'index "grocery-catalog", qui stockera un catalogue de produits. Ce catalogue a été obtenu à partir d'un ensemble de données disponible ici.

Application de la recherche sémantique dans les supermarchés

Maintenant que l'index est alimenté par les données sur les produits de l'épicerie, nous testons et validons les requêtes afin d'améliorer les résultats de recherche à l'aide de la recherche sémantique. Notre objectif est de fournir une expérience de recherche plus intelligente qui comprend le contexte et l'intention de l'utilisateur, en fournissant des résultats plus pertinents et plus précis.

Sur la base du catalogue de produits, examinons comment la recherche sémantique peut transformer l'expérience de recherche dans les magasins d'alimentation en abordant les questions de vocabulaire et de contexte avec lesquelles la recherche lexicale traditionnelle a souvent du mal à composer.

1. Interprétation des intentions culinaires

Problème 01: Un client peut rechercher "seafood for grilling", mais un système de recherche lexicale peut ne pas comprendre entièrement l'intention qui sous-tend la requête. Il se peut qu'il ne parvienne pas à identifier tous les produits de la mer adaptés aux grillades et qu'il ne renvoie que les produits dont le titre contient le terme exact "seafood" ou "grill".

Dans un premier temps, nous effectuerons une recherche lexicale et analyserons les résultats. Ensuite, nous ferons la même chose avec une recherche sémantique, en comparant les résultats pour le même terme de recherche.

Recherche lexicale

Résultats :

Type de rechercheNomScore
LexiqueCrabe des neiges Bairdi d'Alaska de Northwest Fish10.453125
LexiqueM. Yoshida's, Sauce Original Gourmet7.2289705
LexiquePremium Seafood Variety Pack - 20 pièces7.1924105
LexiqueVivaneau rouge américain - entier, étêté, nettoyé6.998647
LexiquePinces de homard & Arms, Sustainable Wild Caught6.438654

La recherche lexicale a permis de trouver des produits de la mer adaptés à la cuisson au gril, tels que le vivaneau rouge américain et le crabe des neiges Bairdi de Northwest Fish Alaskan. Yoshida, qui n'est pas un produit de la mer mais une sauce pour la viande, ce qui suggère que l'algorithme lexical a eu du mal à comprendre le contexte de "pour les grillades."

Solution de recherche sémantique

Nous utilisons une requête qui combine le terme "seafood" avec des contextes de préparation tels que "grilling" pour obtenir une liste complète d'options, telles que les filets de poisson, les crevettes et les coquilles Saint-Jacques, qui sont idéales pour les grillades, même si les mots "grill" ou "seafood" n'apparaissent pas directement dans le nom du produit. Cela garantit que les résultats de la recherche correspondent mieux à l'intention du client.

Recherche sémantique de requêtes :

Type de rechercheNomScore
SémantiqueBranzino entier étêté et nettoyé16.175909
SémantiqueMorue noire d'Alaska (morue charbonnière)15.855331
SémantiqueVivaneau rouge américain - entier, avec tête15.454779
SémantiqueCrabe des neiges Bairdi d'Alaska de Northwest Fish15.855331
SémantiqueVivaneau rouge américain - entier, avec tête15.3892355

La recherche sémantique a permis non seulement de trouver des produits directement liés au terme "seafood,", mais aussi de comprendre le contexte de "grilling," et de trouver des poissons entiers et des filets adaptés à la cuisson sur le gril. L'essentiel ici est la précision des résultats, qui incluent des poissons entiers tels que le branzino et le cabillaud noir d'Alaska, tous deux couramment utilisés pour les grillades.

Problème 02 : De nombreux clients recherchent des solutions rapides et faciles pour dîner après une longue journée de travail, en utilisant des termes tels que "easy weeknight meals." La recherche lexicale traditionnelle peut ne pas saisir pleinement le concept de repas rapide, en se concentrant souvent sur les produits dont le nom contient le mot "easy".

Comme dans le problème précédent, nous commencerons par effectuer une recherche lexicale. Ensuite, nous appliquerons une solution utilisant la recherche sémantique.

Recherche lexicale

Résultats :

Type de rechercheNomScore
LexiqueÉtiquettes d'adresse Avery Easy Peel, 4200 pièces8.017723
LexiqueRepas autochauffés d'urgence/portables 326.592727
LexiquePoke de thon à nageoires jaunes en cubes de Coastal Seafood5.836883
LexiqueHefty Super Weight 12 oz Foam5.8116536
LexiqueServiette de table Vanity Fair Everyday, 2 plis, 110 unités5.752989

La recherche lexicale a donné des résultats beaucoup moins pertinents, notamment des articles n'ayant aucun rapport avec les repas, tels que les étiquettes d'adresse Avery Easy Peel et les serviettes Vanity Fair Everyday Napkins. Ces produits ne répondent pas aux besoins des utilisateurs en matière de repas rapides. Si la recherche lexicale a permis de trouver un produit utile (Omeals Self Heating Emergency Meals), d'autres résultats, comme les serviettes et les étiquettes, ne correspondaient qu'aux mots "easy" ou "weeknight" dans leurs descriptions, sans vraiment répondre à l'intention de l'utilisateur de trouver une solution de repas rapide.

Solution de recherche sémantique

Nous avons mis en œuvre une requête qui comprend l'intention derrière les repas rapides et faciles. Il associe les produits qui peuvent être préparés rapidement, tels que les viandes précuites, les pâtes surgelées ou les kits repas, même s'ils ne comportent pas explicitement le mot "easy" dans leur nom. Cette approche permet aux clients de trouver les options les plus appropriées pour des dîners rapides en semaine, répondant ainsi à leur besoin de commodité.

Recherche sémantique

Résultats :

Type de rechercheNomScore
SémantiqueRepas autochauffés d'urgence/portables 3214.610006
SémantiqueNissin, Cup Noodles, Crevettes, 2.5 oz13.751424
SémantiqueMélange pour gaufres sans gluten Namaste & Mélange pour crêpes13.73376
SémantiqueIdaho Spuds, pommes de terre rissolées Golden Grill12.549422
SémantiqueNissin, nouilles en coupe, poulet, 24 pièces12.034527

La recherche sémantique a permis de trouver des produits clairement liés à des repas rapides et pratiques, tels que des nouilles instantanées (Cup Noodles), des pommes de terre précuites et des préparations pour crêpes, qui sont des choix typiques pour les dîners faciles en semaine. Cela démontre que la recherche sémantique peut saisir le concept derrière l'expression "easy weeknight meals," capturant l'intention de l'utilisateur de trouver des repas rapides et pratiques. Il est intéressant de noter que des produits appartenant à d'autres catégories, telles que "soda," peuvent également être inclus lorsqu'ils sont pertinents dans le contexte (par exemple, les boissons accompagnant les repas).

2. Termes régionaux et variations de vocabulaire

Problème: un client peut rechercher "soda," alors qu'un autre client peut utiliser "pop" pour le même produit. La recherche lexicale traditionnelle ne tient pas compte du fait que les deux termes renvoient au même élément.

Recherche lexicale

Résultats :

Type de rechercheNomScore
LexiquePrime Hydration+ Sticks Mélange pour boisson à base d'électrolytes14.492869
LexiqueCapri Sun, 100% Jus, Variety Pack12.340851
LexiqueBoisson énergétique Joyburst, Frose Rose, 1211.839179
LexiquePop-Tarts de Kellogg, givrés sucre brun cannelle9.97788
LexiqueMini barres Kind, emballage varié, 0.79.336912

La recherche lexicale se concentre sur les correspondances exactes entre les mots. Si des produits comme Prime Hydration et Capri Sun sont apparus, la correspondance directe avec le terme "pop" a également donné lieu à des résultats non pertinents, tels que Kellogg's Pop-Tarts, qui est un en-cas et non une boisson. Cela montre que la recherche lexicale peut être moins efficace lorsqu'un terme a plusieurs significations ou peut être ambigu.

Solution de recherche sémantique

Les requêtes sémantiques permettent de résoudre le problème des variations de vocabulaire que la recherche lexicale ne parvient pas à résoudre. En élargissant les termes de recherche, nous sommes en mesure d'obtenir des résultats basés sur la signification contextuelle, ce qui permet de fournir des réponses plus pertinentes et plus complètes.

Requête :

Résultats :

Type de rechercheNomScore
SémantiqueOlipop 12 oz Soda Prébiotique Variété14.776867
SémantiqueCocofusion antioxydante Bai, paquet de variétés, 1814.663253
SémantiqueBoisson énergétique Monster, Zéro Ultra, 2414.486348
SémantiqueJoyburst Energy Variété, 12 fl oz14.007214
SémantiqueBoisson énergétique Joyburst, Frose Rose, 1213.641038

La recherche sémantique renvoie des produits qui correspondent directement au concept de "pop" en tant que synonyme de "soda" (comme Olipop Prebiotics Soda), même si le terme exact "pop" n'est pas présent dans le nom du produit. La recherche a compris l'intention de l'utilisateur - une boisson rafraîchissante à faible teneur en sucre - et a pu renvoyer des produits pertinents, y compris des options telles que des sodas prébiotiques (Olipop) et des boissons énergisantes sans sucre (Monster Energy Drink).

Conclusion

La mise en œuvre de la recherche sémantique dans le contexte des magasins d'alimentation s'est avérée très efficace pour comprendre des requêtes complexes telles que "fruits de mer à griller" et "repas faciles à préparer en semaine." Cette approche nous a permis d'interpréter plus précisément les intentions des utilisateurs et de leur renvoyer des produits très pertinents.

En utilisant Elasticsearch et en simplifiant le processus avec ELSER, nous avons pu appliquer la recherche sémantique rapidement et efficacement, ce qui a permis d'améliorer considérablement les résultats de recherche et d'offrir une expérience d'achat plus souple et plus ciblée. Cela a permis non seulement d'optimiser le processus de recherche, mais aussi d'accroître la pertinence des résultats proposés aux clients.

Références

Modèle ELSER :

https://www.elastic.co/guide/en/elasticsearch/reference/current/put-inference-api.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/infer-service-elser.html

Texte sémantique :

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html

Ensemble de données :

https://www.kaggle.com/datasets/bhavikjikadara/grocery-store-dataset?select=GroceryDataset.csv

Recherche sémantique :

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search-semantic-text.html

Pour aller plus loin

Prêt à créer des expériences de recherche d'exception ?

Une recherche suffisamment avancée ne se fait pas avec les efforts d'une seule personne. Elasticsearch est alimenté par des data scientists, des ML ops, des ingénieurs et bien d'autres qui sont tout aussi passionnés par la recherche que vous. Mettons-nous en relation et travaillons ensemble pour construire l'expérience de recherche magique qui vous permettra d'obtenir les résultats que vous souhaitez.

Jugez-en par vous-même