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.
Démarrer la mise en œuvre de la recherche sémantique
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 :
- Créer le point d'inférence.
- Créer l'index, en définissant le champ description comme semantic_text afin qu'il puisse recevoir les embeddings.
- 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.
Défis résolus par la recherche sémantique
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 recherche | Nom | Score |
|---|---|---|
| Lexique | Crabe des neiges Bairdi d'Alaska de Northwest Fish | 10.453125 |
| Lexique | M. Yoshida's, Sauce Original Gourmet | 7.2289705 |
| Lexique | Premium Seafood Variety Pack - 20 pièces | 7.1924105 |
| Lexique | Vivaneau rouge américain - entier, étêté, nettoyé | 6.998647 |
| Lexique | Pinces de homard & Arms, Sustainable Wild Caught | 6.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 recherche | Nom | Score |
|---|---|---|
| Sémantique | Branzino entier étêté et nettoyé | 16.175909 |
| Sémantique | Morue noire d'Alaska (morue charbonnière) | 15.855331 |
| Sémantique | Vivaneau rouge américain - entier, avec tête | 15.454779 |
| Sémantique | Crabe des neiges Bairdi d'Alaska de Northwest Fish | 15.855331 |
| Sémantique | Vivaneau rouge américain - entier, avec tête | 15.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 recherche | Nom | Score |
|---|---|---|
| Lexique | Étiquettes d'adresse Avery Easy Peel, 4200 pièces | 8.017723 |
| Lexique | Repas autochauffés d'urgence/portables 32 | 6.592727 |
| Lexique | Poke de thon à nageoires jaunes en cubes de Coastal Seafood | 5.836883 |
| Lexique | Hefty Super Weight 12 oz Foam | 5.8116536 |
| Lexique | Serviette de table Vanity Fair Everyday, 2 plis, 110 unités | 5.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 recherche | Nom | Score |
|---|---|---|
| Sémantique | Repas autochauffés d'urgence/portables 32 | 14.610006 |
| Sémantique | Nissin, Cup Noodles, Crevettes, 2.5 oz | 13.751424 |
| Sémantique | Mélange pour gaufres sans gluten Namaste & Mélange pour crêpes | 13.73376 |
| Sémantique | Idaho Spuds, pommes de terre rissolées Golden Grill | 12.549422 |
| Sémantique | Nissin, nouilles en coupe, poulet, 24 pièces | 12.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 recherche | Nom | Score |
|---|---|---|
| Lexique | Prime Hydration+ Sticks Mélange pour boisson à base d'électrolytes | 14.492869 |
| Lexique | Capri Sun, 100% Jus, Variety Pack | 12.340851 |
| Lexique | Boisson énergétique Joyburst, Frose Rose, 12 | 11.839179 |
| Lexique | Pop-Tarts de Kellogg, givrés sucre brun cannelle | 9.97788 |
| Lexique | Mini barres Kind, emballage varié, 0.7 | 9.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 recherche | Nom | Score |
|---|---|---|
| Sémantique | Olipop 12 oz Soda Prébiotique Variété | 14.776867 |
| Sémantique | Cocofusion antioxydante Bai, paquet de variétés, 18 | 14.663253 |
| Sémantique | Boisson énergétique Monster, Zéro Ultra, 24 | 14.486348 |
| Sémantique | Joyburst Energy Variété, 12 fl oz | 14.007214 |
| Sémantique | Boisson énergétique Joyburst, Frose Rose, 12 | 13.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




