La recherche produit reste un enjeu majeur pour les équipes produit et commerce en ligne : des clients qui trouvent rapidement ce qu'ils cherchent convertissent mieux, reviennent plus souvent et ont une meilleure expérience. Pourtant, intégrer des embeddings sémantiques pour rendre la recherche plus intelligente est souvent perçu comme coûteux — tant en ressources cloud (GPU) qu'en complexité d'ingénierie. J'ai travaillé avec des PME et des startups qui voulaient franchir le pas sans exploser leur budget : voici une méthode pragmatique pour y parvenir.

Pourquoi les embeddings sémantiques ? (et quand ils sont vraiment utiles)

Avant de parler coûts et architecture, clarifions l'apport des embeddings. Contrairement aux recherches basées sur mots-clés (BM25, TF-IDF), les embeddings capturent le sens : synonymes, reformulations, contexte produit — et donc de meilleures correspondances quand les utilisateurs écrivent mal ou ne connaissent pas les termes exacts. Pour des catalogues riches (descripteurs produits longs, variations linguistiques, recommandations), c'est un vrai levier.

Cependant, si votre catalogue est minuscule ou si vos recherches sont principalement des SKU/identifiants, la valeur ajoutée des embeddings sera limitée. Mon conseil : commencer par mesurer précisément le besoin à l'aide d'un petit POC.

Stratégie pour un déploiement rentable

Voici la stratégie que j'ai appliquée avec plusieurs équipes produit pour limiter les coûts tout en obtenant un gain mesurable :

  • Hybridisez : combinez BM25 (ou un moteur texte classique) pour les correspondances exactes et rapides, et un moteur vectoriel pour les recherches sémantiques et la rerank.
  • Pré-calcul des embeddings : calculez les embeddings du catalogue hors ligne. Les coûts d'inférence disparaissent pour les documents statiques ou peu volatils.
  • Quantification & réduction de dimension : appliquez PCA ou Product Quantization (PQ) pour réduire la taille des vecteurs sans trop perdre en qualité.
  • Approximate Nearest Neighbors (ANN) : utilisez FAISS, HNSW ou un service vectoriel (Qdrant, Milvus, Weaviate, Pinecone) pour rechercher rapidement sans GPU.
  • Mise en cache : cachez les résultats populaires et les embeddings de sessions fréquentes pour limiter les appels.

Choix de modèles : open-source vs API commerciale

Le choix du modèle d'embeddings a un impact direct sur le coût. J'ai constaté deux approches valables :

  • Open-source : sentence-transformers (par ex. all-MiniLM) offre un excellent compromis qualité/coût et fonctionne sur CPU ou instances CPU-optimisées. Pour des volumes modérés, ça suffit souvent.
  • API commerciale : OpenAI, Anthropic ou Cohere proposent des embeddings de haute qualité et une simplicité d'intégration, mais le coût par requête peut grimper si vous calculez des embeddings à la volée.

Mon astuce : pour les champs statiques (titre, description, attributs), générer les embeddings en batch avec un modèle open-source sur une instance spot/à bas coût. Réserver les API payantes pour des cas dynamiques ou des expérimentations où la qualité supérieure est nécessaire.

Architecture économique recommandée

Voici une architecture que j'ai implémentée plusieurs fois et qui garde les coûts maîtrisés :

  • Ingestion/catalogue : pipeline ETL qui nettoie les données et génère les embeddings en batch (cron). Stockage des embeddings dans un vector store.
  • Moteur de recherche hybride : un moteur texte (Elasticsearch/Opensearch) pour BM25 + un vector search (FAISS/Qdrant) pour ANN.
  • Orchestration en infra serverless ou petites instances : fonctions pour les requêtes utilisateurs, mises en cache, et un service de reranking.
  • Monitoring & A/B testing : mesurer pertinence, latence et coût d'inférence pour ajuster.
ComposantOption économiqueOption haute-perf
Génération d'embeddingsall-MiniLM (sentence-transformers) sur CPUOpenAI embeddings / GPU inference
Vector storeFAISS (self-hosted) ou Qdrant sur petites instancesPinecone / Milvus managé avec GPU
Moteur texteElasticsearch / OpenSearch (petit cluster)Solutions managées scalables
RerankingHybrid BM25 + ANNDeep reranker en production

Techniques d'optimisation qui réduisent les coûts significativement

Quelques techniques concrètes que j'utilise systématiquement :

  • Batching : calculer les embeddings en lots et utiliser des instances spot pour réduire le coût CPU/GPU.
  • PQ & int8 : la quantification permet de diviser la mémoire nécessaire par 4 ou 8, donc moins d'instances et moins d'I/O.
  • Sharding adapté : éviter d'over-provisionner le vector store en sharding excessif — commencer petit et scaler horizontalement selon métriques.
  • TTL et rafraîchissement incrémental : ne regénérer que les nouveaux produits ou ceux modifiés.
  • Hybrid rerank léger : utiliser BM25 pour filtrer ~200 résultats et reranker par embeddings sur ce sous-ensemble — c'est rapide et économique.

Évaluer qualité et coût : métriques à suivre

Pour savoir si l'investissement vaut le coup, suivez :

  • CTR et taux de conversion des recherches (avant/après)
  • Temps moyen pour trouver un produit / taux de rebond sur résultats de recherche
  • Latence p95 des requêtes de recherche
  • Coût par 1k requêtes (inférence + stockage + infra)
  • Qualité algorithme : MRR (Mean Reciprocal Rank), MAP sur jeux de tests annotés

Dans un projet récent, nous avons réduit la latence p95 de 400ms à 120ms en combinant BM25 + ANN et en pré-calculant les embeddings, tout en restant sous le budget d'hébergement initial.

Aspects organisationnels et gouvernance

Ne négligez pas les conséquences opérationnelles :

  • Data ownership : qui valide les champs utilisés pour former les embeddings ? Assurez-vous que les attributs produits sensibles ne fuient pas.
  • Tests A/B : lancer des expériences progressive roll-out pour comparer résultats et UX.
  • Observabilité : logs d'erreur, métriques de pertinence et alerting coût/latence.
  • Politique de confidentialité : si vous envoyez des textes utilisateurs à un service tiers, vérifiez conformité RGPD.

Exemples d'outils et configurations économiques

Pour vous donner des points de départ concrets :

  • Embeddings : sentence-transformers/all-MiniLM-L6-v2 — très bon ratio qualité/latence sur CPU
  • Vector search : FAISS (IVF + PQ) self-hosted sur une VM CPU, ou Qdrant géré si vous voulez du support
  • Moteur texte : OpenSearch petit cluster (2-3 nœuds)
  • Orchestration : AWS Lambda / Azure Functions pour endpoints, Cloud Run pour microservices

En pratique, pour un catalogue de 200k produits, l'approche ci-dessus permet de tenir sur quelques instances CPU cloud (coût mensuel raisonnable), avec une latence utilisateur sous la seconde. Tout dépend évidemment du trafic — mais ces recettes s'appliquent pour monter progressivement.

Quelques pièges à éviter

  • Ne pas pré-calculer les embeddings pour le catalogue.
  • Penser qu'il faut du GPU pour tout : beaucoup de modèles optimisés fonctionnent très bien sur CPU.
  • Lancer une refonte totale du search sans expérimenter : commencer par un reranking hybride sur un segment pilote.
  • Ignorer le coût stockage des vecteurs non quantifiés — la mémoire peut devenir le goulot d'étranglement.

Si vous voulez, je peux partager un petit guide opérationnel avec des commandes FAISS, un exemple de pipeline de génération d'embeddings en batch, et un check-list pour tester un A/B test de recherche. Dites-moi la taille de votre catalogue et votre stack actuelle (Elasticsearch, base SQL, etc.), et je vous propose un plan adapté.