Revenir au contenu principal
Technologie

Rendre chaque recherche gratifiante : comment Ibotta a transformé la découverte d'offres avec Databricks

par Joel Bowen, Jacob Portes et Benjamin Chin

  • Ibotta a modernisé son expérience de recherche grâce à Databricks AI Search, passant d'un prototype de hackathon à un système en production.
  • La nouvelle solution a permis d'augmenter les déverrouillages d'offres de près de 15 %, d'accroître l'engagement envers les bonus et de réduire les recherches sans résultat de plus de 70 %.
  • Un framework d'évaluation personnalisé et des modèles d'embedding affinés ont permis une itération rapide, une plus grande pertinence et une expérience plus enrichissante pour des millions d'utilisateurs.

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.

Nous pensions que notre système de recherche pouvait mieux s'adapter à nos 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 :

  • Améliorer la pertinence sémantique : se concentrer sur la compréhension de l'intention des Savers plutôt que sur la correspondance exacte des mots-clés pour leur proposer les bonnes offres.
  • Renforcer la compréhension : interpréter toutes les nuances et le contexte des requêtes des utilisateurs pour fournir des résultats plus complets et réellement pertinents.
  • Accroître la flexibilité : intégrer plus rapidement de nouveaux types d'offres et s'adapter aux habitudes de recherche changeantes des Savers pour que l'expérience de découverte reste gratifiante.
  • Stimuler la découvrabilité : nous voulions des outils plus robustes pour garantir que certains types d'offres ou promotions clés soient systématiquement visibles sur un large éventail de requêtes de recherche pertinentes.
  • Accélérer l'itération et l'optimisation : permettre des améliorations plus rapides et plus percutantes de l'expérience de recherche grâce à des ajustements en temps réel et au réglage des performances.

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.

Du hackathon à la production : réimaginer la recherche avec Databricks

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 :

  1. Collecter le contenu des offres à partir de plusieurs sources dans notre catalogue Databricks
  2. Créer un point de terminaison et un index AI Search avec le SDK Python
  3. Utiliser des points de terminaison d'embedding pay-per-token avec cinq modèles différents (BGE large, GTE large, GTE small, un modèle open source multilingue et un modèle spécifique à la langue espagnole)
  4. Connecter le tout à notre site Web pour une démonstration en direct

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.

De la preuve de concept à la production

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 :

  • La meilleure façon de tirer parti du produit AI Search pour notre cas d'usage
  • La sélection du modèle le plus performant grâce à une évaluation empirique
  • Le test des limites de l'utilisation pay-per-token
  • Les mécanismes d'authentification
  • L'utilisation du point de terminaison du plan de données (data plane) pour éviter la limitation du débit (rate limiting)
  • La transition vers un point de terminaison de service de modèle provisionné pour gérer nos exigences de débit

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 :

  • Des temps de réponse plus rapides
  • Un modèle mental plus simple
  • Une plus grande flexibilité dans la manière d'indexer les données
  • De nouvelles capacités pour ajuster les seuils et modifier le texte d'embedding

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.

Bâtir un cadre d'évaluation

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 :

  • Databricks AI Search : utilisé pour générer des résultats de recherche de haute précision et sémantiquement riches pour les tests d'évaluation.
  • Patterns MLflow et LLM-as-a-judge : ont fourni les patterns pour évaluer les sorties des modèles et implémenter notre processus d'étiquetage des données.
  • Points de terminaison Model Serving : déploiement efficace des modèles directement depuis notre catalogue.
  • AI Gateway : pour sécuriser et gouverner notre accès aux modèles tiers via API.
  • Unity Catalog : a assuré l'organisation, la gestion et la gouvernance de tous les ensembles de données utilisés dans le cadre d'évaluation.

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 :

  • Différents modèles d'embedding (fondationnels, open-weights et tiers via API)
  • Diverses combinaisons de textes pour alimenter les modèles
  • Différents modes de requête (ANN vs hybride)
  • Le test de différentes colonnes pour la recherche textuelle hybride
  • L'ajustement des seuils de similarité vectorielle
  • L'expérimentation d'index distincts pour différents types d'offres

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.

La recherche du meilleur modèle prêt à l'emploi

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.

Fine-tuning : personnaliser le comportement du modèle

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 :

  1. L'impossibilité d'entraîner des modèles d'embedding tiers sur notre catalogue d'offres propriétaire
  2. La difficulté de faire évoluer les modèles en fonction des changements de l'activité et du contenu
  3. L'incertitude quant à la disponibilité à long terme des modèles d'embedding des fournisseurs externes
  4. La nécessité d'établir et de gérer de nouvelles relations commerciales externes
  5. Les appels réseau vers ces fournisseurs n'étaient pas aussi performants que les modèles auto-hébergés

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 :

  1. Infrastructure : nous avons utilisé AI Runtime avec des A10 dans un environnement serverless, et Databricks ML Runtime pour un balayage sophistiqué des hyperparamètres.
  2. Sélection du modèle : nous avons sélectionné un modèle de la famille BGE plutôt que GTE, qui a démontré de meilleures performances dans nos évaluations hors ligne et s'est avéré plus efficace à entraîner.
  3. Dataset engineering : nous avons construit de nombreux ensembles de données d'entraînement, y compris en générant des données d'entraînement synthétiques, pour finalement opter pour :
    • Un résultat positif (une correspondance de qualité vérifiée à partir de recherches réelles)
    • ~10 exemples négatifs par positif, combinant :
      • 3 à 4 « hard negatives » (étiquetés par LLM, correspondances inappropriées vérifiées par l'homme)
      • Des « in-batch negatives » (échantillonnage de résultats issus de termes de recherche non liés)
  4. Optimisation des hyperparamètres : nous avons systématiquement balayé des éléments tels que le taux d'apprentissage, la taille de batch, la durée et les stratégies d'échantillonnage négatif pour trouver les configurations optimales.

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.

Une recherche qui génère des résultats — et du chiffre d'affaires

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 :

  • 14,8 % de déverrouillages d'offres en plus dans la recherche.
    Cela mesure le nombre d'utilisateurs qui sélectionnent des offres à partir des résultats de recherche, ce qui indique une amélioration de la qualité et de la pertinence des résultats. L'augmentation des déverrouillages est un indicateur clé des utilisations d'offres et des revenus en aval.
  • Une augmentation de 6 % des utilisateurs engagés.
    Cela montre qu'une part plus importante d'utilisateurs trouvent de la valeur et entreprennent des actions significatives au sein de l'expérience de recherche, contribuant ainsi à l'amélioration de la conversion, de la rétention et de la valeur à vie.
  • Une augmentation de 15 % de l'engagement sur les bonus.
    Cela reflète une meilleure mise en avant des contenus à forte valeur ajoutée sponsorisés par les marques, ce qui se traduit directement par de meilleures performances et un meilleur ROI pour nos partenaires marques et distributeurs.
  • Une baisse de 72,6 % des recherches sans résultat.
    Cette réduction significative se traduit par moins d'expériences frustrantes et une amélioration majeure de la couverture de la recherche sémantique.
  • 60,9 % d'utilisateurs en moins confrontés à des recherches ne donnant aucun résultat.
    Cela souligne l'étendue de l'impact, montrant qu'une grande partie de notre base d'utilisateurs trouve désormais systématiquement des résultats, ce qui améliore l'expérience globale.

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.

Query Transformation

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.

Multi-Search

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.

Leçons apprises

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 :

  1. Commencez par un proof of concept : L'approche initiale de type hackathon nous a permis de valider rapidement le concept de base avec un investissement initial minimal.
  2. Mesurez ce qui compte pour vous : Notre framework d'évaluation sur mesure de 50 métriques a été crucial ; il nous a donné la certitude que les améliorations observées hors ligne se traduiraient par un impact commercial, nous évitant ainsi de multiplier les tests en direct tant que les solutions n'étaient pas réellement prometteuses.
  3. Ne passez pas directement au fine-tuning : Nous avons appris l'importance d'évaluer de manière approfondie les modèles prêts à l'emploi et d'épuiser ces options avant d'investir dans l'effort plus important requis pour le fine-tuning.
  4. Collectez les données tôt : Commencer à étiqueter les données dès notre deuxième expérience a permis de garantir qu'un jeu de données propriétaire et riche soit prêt lorsque le fine-tuning est devenu nécessaire.
  5. La collaboration accélère les progrès : Un partenariat étroit avec les ingénieurs et chercheurs de Databricks, partageant des informations sur AI Search, les modèles d'embedding, les patterns LLM-as-a-judge et les approches de fine-tuning, a considérablement accéléré nos progrès.
  6. Reconnaissez l'impact cumulatif : Chaque optimisation individuelle, même apparemment mineure, a contribué de manière significative à la transformation globale de notre expérience de recherche.

Et ensuite ?

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

Recevez les derniers articles dans votre boîte mail

Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.