par Joel Bowen, Jacob Portes et Benjamin Chin
Chez Ibotta, notre mission est de rendre chaque achat gratifiant (Make Every Purchase Rewarding). Aider nos utilisateurs (que nous appelons des « Savers ») à trouver et à activer des offres pertinentes via notre application direct-to-consumer (D2C), notre extension de navigateur et notre site Web est un aspect essentiel de cette mission. Notre plateforme D2C aide des millions d'acheteurs à obtenir du cashback sur leurs achats quotidiens, qu'il s'agisse de profiter de promotions sur les produits d'épicerie, de cumuler des récompenses bonus ou de planifier leur prochain voyage. Grâce à l'Ibotta Performance Network (IPN), nous propulsons également des programmes de cashback en marque blanche pour certains des plus grands noms de la distribution, notamment Walmart et Dollar General, aidant ainsi plus de 2 600 marques à toucher plus de 200 millions de consommateurs avec des offres numériques à travers des écosystèmes partenaires.
En coulisses, nos équipes Data et Machine Learning alimentent des expériences cruciales telles que la détection de la fraude, les moteurs de recommandation d'offres et la pertinence de la recherche afin de rendre le parcours des Savers personnalisé et sécurisé. À mesure que nous nous développons, nous avons besoin de systèmes intelligents et pilotés par les données pour soutenir chaque interaction à chaque point de contact.
Sur l'ensemble du D2C et de l'IPN, la recherche joue un rôle central dans l'engagement et doit s'adapter à l'échelle de notre activité, à l'évolution du contenu des offres et aux attentes changeantes des Savers.
Dans cet article, nous allons vous expliquer comment nous avons considérablement amélioré notre expérience de recherche D2C : d'un projet de hackathon ambitieux à une fonctionnalité de production robuste qui profite aujourd'hui à des millions de Savers.
Le comportement de recherche des utilisateurs a évolué, passant de simples mots-clés à l'intégration du langage naturel, des fautes d'orthographe et des phrases conversationnelles. Les systèmes de recherche modernes doivent combler l'écart entre ce que les utilisateurs saisissent et ce qu'ils veulent réellement dire, en interprétant le contexte et les relations pour fournir des résultats pertinents, même lorsque les termes de la requête ne correspondent pas exactement au contenu.
Chez Ibotta, notre système de recherche interne d'origine avait parfois du mal à suivre l'évolution des attentes de nos Savers, et nous avons vu là une opportunité de l'améliorer.
Les principales opportunités que nous avons identifiées comprenaient :
Nous pensions que le système pouvait mieux s'adapter à l'évolution du contenu des offres, aux comportements de recherche et aux attentes changeantes des Savers. Nous y avons vu des opportunités d'accroître la valeur tant pour nos Savers que pour nos marques partenaires.
Remédier aux limites de notre ancien système de recherche a nécessité un effort ciblé. Cette initiative a pris un élan considérable lors d'un hackathon interne au cours duquel une équipe pluridisciplinaire, comprenant des membres des équipes Data, Engineering, Marketing Analytics et Machine Learning, s'est réunie autour de l'idée de concevoir un système de recherche alternatif moderne à l'aide de Databricks AI Search, une solution que certains membres avaient découverte lors du Databricks Data + AI Summit.
En seulement trois jours, notre équipe a développé un prototype fonctionnel qui fournissait des résultats de recherche sémantiquement pertinents. Voici comment nous y sommes parvenus :
Le projet du hackathon a remporté le premier prix, suscitant une forte adhésion interne et l'élan nécessaire pour transformer le prototype en un système de production. En quelques mois, et en étroite collaboration avec les ingénieurs et chercheurs de Databricks, nous avons transformé notre prototype en un système de recherche en production complet et robuste.
Le passage de la preuve de concept du hackathon à un système prêt pour la production a nécessité des itérations et des tests minutieux. Cette phase était essentielle non seulement pour l'intégration technique et l'optimisation des performances, mais aussi pour évaluer si les améliorations attendues du système se traduiraient par des changements positifs dans le comportement et l'engagement des Savers. Compte tenu du rôle essentiel de la recherche et de sa forte intégration dans nos systèmes internes, nous avons opté pour l'approche suivante : nous avons modifié un service interne clé qui appelait notre système de recherche d'origine, en remplaçant ces appels par des requêtes dirigées vers le point de terminaison Databricks AI Search, tout en intégrant des solutions de repli robustes et fluides vers l'ancien système.
La majeure partie de notre travail initial s'est concentrée sur la compréhension de :
Au cours du premier mois, nous avons effectué un test sur un faible pourcentage de nos Savers, qui n'a pas donné les résultats d'engagement espérés. L'engagement a diminué, en particulier chez nos Savers les plus actifs, comme en témoigne la baisse des clics, des déverrouillages (lorsque les Savers manifestent leur intérêt pour une offre) et des activations.
Cependant, la solution AI Search offrait des avantages significatifs, notamment :
Satisfaits des performances techniques sous-jacentes du système, nous avons vu dans sa plus grande flexibilité l'atout clé nécessaire pour améliorer de manière itérative la qualité des résultats de recherche et surmonter ces résultats d'engagement décevants.
Suite aux résultats de nos premiers tests, s'appuyer uniquement sur les tests A/B pour les itérations de recherche s'est avéré inefficace et peu pratique. Le nombre de variables influençant la qualité de la recherche était immense, notamment les modèles d'embedding, les combinaisons de textes, les paramètres de recherche hybride, les seuils des plus proches voisins approximatifs (ANN), les options de reranking, et bien d'autres encore.
Pour naviguer dans cette complexité et accélérer nos progrès, nous avons décidé de mettre en place un cadre d'évaluation robuste. Ce cadre devait être spécifiquement adapté à nos besoins métier et capable de prédire l'engagement réel des utilisateurs à partir de métriques de performance hors ligne (offline).
Notre cadre a été conçu autour d'un environnement d'évaluation synthétique qui suivait plus de 50 métriques en ligne (online) et hors ligne (offline). Hors ligne, nous surveillions les métriques standard de recherche d'information comme le Mean Reciprocal Rank (MRR) et la précision@k pour mesurer la pertinence. De manière cruciale, cela a été associé à des signaux d'engagement réels en ligne, tels que les déverrouillages d'offres et les taux de clics. Une décision clé a été de mettre en œuvre un LLM-as-a-judge. Cela nous a permis de labelliser les données et d'attribuer des scores de qualité aux paires requête-résultat en ligne ainsi qu'aux résultats hors ligne. Cette approche s'est avérée essentielle pour itérer rapidement sur la base de métriques fiables et pour collecter les données labellisées nécessaires au futur fine-tuning du modèle.
Tout au long de ce parcours, nous nous sommes appuyés sur plusieurs composants de la plateforme Databricks Data Intelligence, notamment :
Ce cadre robuste a considérablement augmenté notre vitesse d'itération et notre confiance. Nous avons réalisé plus de 30 itérations distinctes, en testant systématiquement les modifications majeures des variables de notre solution AI Search, notamment :
Le cadre d'évaluation a transformé notre processus de développement, nous permettant de prendre rapidement des décisions basées sur les données et de valider les améliorations potentielles en toute confiance avant de les proposer aux utilisateurs.
Après un premier test global qui a donné des résultats d'engagement décevants, nous nous sommes concentrés sur l'exploration des performances de modèles spécifiques identifiés comme prometteurs lors de notre évaluation hors ligne. Nous avons sélectionné deux modèles d'embedding tiers pour des tests en production, accessibles de manière sécurisée via AI Gateway. Nous avons mené des tests itératifs à court terme en production (durant quelques jours) avec ces modèles.
Satisfaits des premiers résultats, nous avons procédé à un test en production plus long et plus complet, comparant notre principal modèle tiers et sa configuration optimisée au système existant. Ce test a donné des résultats mitigés. Bien que nous ayons observé des améliorations globales des indicateurs d'engagement et éliminé avec succès les impacts négatifs constatés précédemment, ces gains sont restés modestes, de l'ordre de quelques points de pourcentage. Ces avantages incrémentiels n'étaient pas assez convaincants pour justifier pleinement le remplacement complet de notre expérience de recherche actuelle.
Plus préoccupant encore, l'analyse granulaire a révélé que si les performances s'aimélioraient considérablement pour certaines requêtes de recherche, d'autres donnaient de moins bons résultats par rapport à notre solution existante. Cette incohérence a posé un dilemme architectural majeur. Nous étions confrontés au choix peu attrayant soit d'implémenter un système complexe de répartition du trafic pour acheminer les requêtes en fonction des performances prévues (une approche qui nécessiterait de maintenir deux expériences de recherche distinctes et d'introduire une nouvelle couche complexe de gestion du routage basée sur des règles), soit d'accepter ces limites.
C'était un moment charnière. Bien que les résultats soient assez prometteurs pour continuer, nous avions besoin d'améliorations plus significatives pour justifier le remplacement complet de notre système de recherche interne. Cela nous a amenés à commencer le fine-tuning.
Bien que les modèles d'embedding tiers explorés précédemment aient montré un potentiel technique et de légères améliorations de l'engagement, ils présentaient également des limites critiques inacceptables pour une solution à long terme chez Ibotta. Celles-ci comprenaient :
La voie à suivre était clairement de fine-tuner un modèle spécifiquement adapté aux données d'Ibotta et aux besoins de nos Savers. Cela a été possible grâce aux millions d'interactions de recherche étiquetées que nous avions accumulées auprès de vrais utilisateurs via notre processus LLM-as-a-judge au sein de notre cadre d'évaluation personnalisé. Ces données de production de haute qualité sont devenues notre mine d'or pour l'entraînement.
Nous nous sommes ensuite lancés dans un processus de fine-tuning méthodique, en exploitant largement notre cadre d'évaluation hors ligne.
Les éléments clés étaient :
Après de nombreuses itérations et évaluations au sein du cadre, notre modèle fine-tuné le plus performant a dépassé notre meilleure référence tierce de 20 % lors de l'évaluation synthétique. Ces résultats hors ligne convaincants nous ont donné la confiance nécessaire pour accélérer notre prochain test en production.
La rigueur technique et le processus itératif ont porté leurs fruits. Nous avons conçu une solution de recherche spécifiquement optimisée pour le catalogue d'offres unique d'Ibotta et les modèles de comportement des utilisateurs, offrant des résultats qui ont dépassé nos attentes et la flexibilité nécessaire pour évoluer au rythme de notre activité. Sur la base de ces excellents résultats, nous avons accéléré la migration vers Databricks AI Search comme fondation de notre système de recherche en production.
Lors de notre test final en production, en utilisant notre propre modèle d'embedding fine-tuné, nous avons observé les améliorations suivantes :
Au-delà des gains pour les utilisateurs, le nouveau système a tenu ses promesses en matière de performances. Nous avons constaté une latence inférieure de 60 % sur notre système de recherche, attribuable aux performances des requêtes de AI Search et à la réduction de la surcharge du modèle fine-tuné.
En tirant parti de la flexibilité de cette nouvelle fondation, nous avons également développé des améliorations puissantes telles que la Query Transformation (enrichissement des requêtes vagues) et la Multi-Search (déploiement de termes génériques). La combinaison d'un modèle de base hautement pertinent, de performances système améliorées et d'optimisations intelligentes des requêtes a permis de créer une expérience de recherche plus intelligente, plus rapide et, en fin de compte, plus gratifiante.
L'un des défis des modèles d'embedding est leur compréhension limitée des mots-clés de niche, tels que les marques émergentes. Pour y remédier, nous avons construit une couche de transformation des requêtes qui enrichit dynamiquement les termes de recherche à la volée en fonction de règles prédéfinies.
Par exemple, si un utilisateur recherche une marque de yaourt émergente que le modèle d'embedding pourrait ne pas reconnaître, nous pouvons transformer la requête pour ajouter « yaourt grec » à côté du nom de la marque avant de l'envoyer à AI Search. Cela fournit au modèle d'embedding le contexte produit nécessaire tout en préservant le texte d'origine pour la recherche hybride.
Cette fonctionnalité fonctionne également main dans la main avec notre processus de fine-tuning. Les transformations réussies peuvent être utilisées pour générer des données d'entraînement ; par exemple, inclure le nom de la marque d'origine comme requête et les produits de yaourt pertinents comme résultats positifs dans un futur cycle d'entraînement aide le modèle à apprendre ces associations spécifiques.
Pour les recherches larges et génériques comme « bébé », AI Search peut initialement renvoyer un nombre limité de candidats, potentiellement filtrés davantage par le ciblage et la gestion du budget. Pour y remédier et accroître la diversité des résultats, nous avons développé une fonctionnalité de Multi-Search qui déploie un seul terme de recherche en plusieurs recherches connexes.
Au lieu de simplement chercher « bébé », notre système lance automatiquement des recherches parallèles pour des termes tels que « aliments pour bébé », « vêtements pour bébé », « médicaments pour bébé », « couches pour bébé », etc. En raison de la faible latence d'AI Search, nous pouvons exécuter plusieurs recherches en parallèle sans augmenter le temps de réponse global pour l'utilisateur. Cela permet d'obtenir un ensemble de résultats pertinents beaucoup plus large et diversifié pour les recherches de catégories étendues.
Suite au succès du test de production final et au déploiement complet de Databricks AI Search auprès de nos utilisateurs – offrant des résultats d'engagement positifs, une flexibilité accrue et des outils de recherche puissants comme Query Transformation et Multi-Search – ce projet a permis de tirer plusieurs leçons précieuses :
Avec notre modèle d'embedding fine-tuné désormais en production sur tous les canaux de vente directe aux consommateurs (D2C), nous prévoyons ensuite d'explorer le déploiement à l'échelle de cette solution sur le réseau Ibotta Performance Network (IPN). Cela permettrait d'offrir une meilleure découverte des offres à des millions d'acheteurs supplémentaires sur l'ensemble de notre réseau d'éditeurs. Alors que nous continuons à collecter des données étiquetées et à affiner nos modèles grâce à Databricks, nous pensons être bien positionnés pour faire évoluer l'expérience de recherche en fonction des besoins de nos partenaires et des attentes de leurs clients.
Ce parcours, d'un projet de hackathon à un système en production, a prouvé que réinventer rapidement une expérience produit de base est réalisable avec les bons outils et le bon accompagnement. Databricks a joué un rôle déterminant pour nous aider à aller vite, à réaliser un fine-tuning efficace et, en fin de compte, à rendre chaque recherche plus gratifiante pour nos Savers.
(Cet article de blog a été traduit à l'aide d'outils basés sur l'intelligence artificielle) Article original
Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.