{
  "title": "Recherche Hybride pour le Commerce Électronique avec Pinecone et les LLM",
  "excerpt": "Apprenez à construire un système de recherche hybride puissant pour les applications de commerce électronique en combinant des méthodes traditionnelles de recherche d'informations avec des modèles d'apprentissage automatique comme les modèles de langage (LLM) et Pinecone, une base de données vectorielles gérée. Découvrez les avantages de la recherche hybride pour le commerce électronique, notamment une meilleure pertinence des résultats, la personnalisation, la gestion des requêtes longues et une gestion d'infrastructure simplifiée.",
  "content_html": "<p>Rechercher et trouver des produits pertinents est un élément essentiel d'un site de commerce électronique. Fournir des résultats de recherche rapides et précis peut faire la différence entre une grande satisfaction utilisateur et une frustration. Grâce aux récentes avancées en compréhension du langage naturel et en recherche vectorielle, les systèmes de recherche améliorés sont devenus plus accessibles et efficaces, conduisant à de meilleures expériences utilisateur et à des taux de conversion améliorés.</p>\n<p>Dans cet article de blog, nous explorerons comment implémenter un système de recherche hybride pour le commerce électronique en utilisant Pinecone, un moteur de recherche vectorielle haute performance, et des modèles de langage spécifiques au domaine finement ajustés. À la fin de cet article, vous aurez non seulement une solide compréhension de la recherche hybride, mais aussi un guide pratique étape par étape pour l'implémenter.</p>\n<h2>Qu'est-ce que la Recherche Hybride ?</h2>\n<p><img src=\"/assets/images/pinecone_hybrid_index.jpg\" alt=\"Index Hybride Pinecone\" class=\"post-img\" width=\"2360\" height=\"921\" /></p>\n<span class=\"post-img-caption\">Vue d'ensemble d'un index hybride Pinecone simple</span>\n<p>Avant de plonger dans l'implémentation, comprenons rapidement ce que signifie la recherche hybride. La recherche hybride est une approche qui combine les forces de la recherche traditionnelle (recherche vectorielle sparse) et de la recherche vectorielle (recherche vectorielle dense) pour obtenir de meilleures performances de recherche dans un large éventail de domaines.</p>\n<p>La recherche vectorielle dense extrait des embeddings vectoriels de haute qualité à partir de données textuelles et effectue une recherche de similarité pour trouver des documents pertinents. Cependant, elle a souvent du mal avec les données hors domaine lorsqu'elle n'est pas ajustée sur des ensembles de données spécifiques au domaine.</p>\n<p>D'autre part, la recherche traditionnelle utilise des représentations vectorielles sparses, comme la fréquence de terme-fréquence inverse de document (TF-IDF) ou BM25, et ne nécessite aucun ajustement spécifique au domaine. Bien qu'elle puisse traiter de nouveaux domaines, ses performances sont limitées par son incapacité à comprendre les relations sémantiques entre les mots et manque de l'intelligence de la récupération dense.</p>\n<p>La recherche hybride tente d'atténuer les faiblesses des deux approches en les combinant dans un seul système, exploitant le potentiel de performance de la recherche vectorielle dense et l'adaptabilité zéro-shot de la recherche traditionnelle.</p>\n<p>Maintenant que nous avons une compréhension de base de la recherche hybride, plongeons dans son implémentation.</p>\n<h2>Construction d'un Système de Recherche Hybride</h2>\n<p>Nous couvrirons les étapes suivantes pour implémenter un système de recherche hybride :</p>\n<ol>\n<li>Exploitation des Modèles de Langage Spécifiques au Domaine</li>\n<li>Création de Vecteurs Sparses et Denses</li>\n<li>Configuration de Pinecone</li>\n<li>Implémentation du Pipeline de Recherche Hybride</li>\n<li>Effectuer des Requêtes et Ajuster les Paramètres</li>\n</ol>\n<h3>1. Exploitation des Modèles de Langage Spécifiques au Domaine</h3>\n<p>Ces dernières années, les modèles de langage pré-entraînés à grande échelle comme GPT d'OpenAI et Cohere sont devenus de plus en plus populaires pour diverses tâches, y compris la compréhension et la génération de langage naturel. Ces modèles peuvent être ajustés sur des données spécifiques au domaine pour améliorer leurs performances et s'adapter à des tâches spécifiques, comme la recherche de produits dans le commerce électronique.</p>\n<p>Dans notre exemple, nous utiliserons un modèle de langage spécifique au domaine finement ajusté pour générer des embeddings vectoriels denses pour les produits et les requêtes. Cependant, vous pouvez choisir d'autres modèles ou même créer vos propres embeddings personnalisés en fonction de votre domaine spécifique.</p>\n<pre><code class=\"language-python\">import torch\nfrom transformers import AutoTokenizer, AutoModel\n\n# Charger un modèle de langage spécifique au domaine pré-entraîné\nmodel_name = \"votre-modèle-spécifique-au-domaine\"\ntokenizer = AutoTokenizer.from_pretrained(model_name)\nmodel = AutoModel.from_pretrained(model_name)\n\n# Générer des embeddings vectoriels denses pour une description de produit\ntext = \"Chaussures de sport Nike Air Max pour hommes\"\ninputs = tokenizer(text, return_tensors=\"pt\")\nwith torch.no_grad():\n    outputs = model(**inputs)\n    dense_embedding = outputs.last_hidden_state.mean(dim=1).numpy()\n</code></pre>\n<h3>2. Création de Vecteurs Sparses et Denses</h3>\n<p>La recherche hybride nécessite à la fois des représentations vectorielles sparses et denses pour nos données de commerce électronique. Nous allons maintenant décrire comment générer ces vecteurs.</p>\n<h4>Vecteurs Sparses</h4>\n<p>Les représentations vectorielles sparses, comme TF-IDF ou BM25, peuvent être créées en utilisant des techniques standard de traitement de texte, telles que la tokenisation, la suppression des mots vides et la racinisation. Un exemple de génération de vecteurs sparses peut être réalisé en utilisant une matrice de vocabulaire.</p>\n<pre><code class=\"language-python\"># Cette fonction génère des représentations vectorielles sparses d'une liste de descriptions de produits\ndef generate_sparse_vectors(text):\n    '''Génère des représentations vectorielles sparses pour une liste de descriptions de produits\n\n    Args:\n        text (list): Une liste de descriptions de produits\n\n    Returns:\n        sparse_vector (dict): Un dictionnaire d'indices et de valeurs\n    '''\n    sparse_vector = bm25.encode_queries(text)\n    return sparse_vector\n\nfrom pinecone_text.sparse import BM25Encoder\n\n# Créer l'encodeur BM25 et ajuster les données\nbm25 = BM25Encoder()\nbm25.fit(new_df.full_data)\n\n# Créer les vecteurs sparses\nsparse_vectors = []\nfor product_description in product_descriptions:\n    sparse_vectors.append(generate_sparse_vectors(text=product_description))\n</code></pre>\n<h4>Vecteurs Denses</h4>\n<p>Les représentations vectorielles denses peuvent être générées en utilisant des modèles de langage pré-entraînés ou personnalisés spécifiques au domaine. Dans notre exemple précédent, nous avons utilisé un modèle de langage spécifique au domaine pour générer des embeddings vectoriels denses pour une description de produit.</p>\n<pre><code class=\"language-python\">def generate_dense_vector(text):\n    '''Génère des embeddings vectoriels denses pour une liste de descriptions de produits\n\n    Args:\n        text (list): Une liste de descriptions de produits\n\n    Returns:\n        dense_embedding (np.array): Un tableau numpy d'embeddings vectoriels denses\n    '''\n    # Tokeniser le texte et le convertir en tenseurs PyTorch\n    inputs = tokenizer(text, return_tensors=\"pt\")\n    # Générer les embeddings avec le modèle pré-entraîné\n    with torch.no_grad():\n        outputs = model(**inputs)\n        dense_vector = outputs.last_hidden_state.mean(dim=1).numpy()\n    return dense_vector\n\n# Générer des embeddings vectoriels denses pour une liste de descriptions de produits\ndense_vectors = []\nfor product_description in product_descriptions:\n    dense_vectors.append(generate_dense_vector(text=product_description))\n</code></pre>\n<h3>3. Configuration de Pinecone</h3>\n<p>Pinecone est un moteur de recherche vectorielle haute performance qui prend en charge la recherche hybride. Il permet la création d'un seul index pour les vecteurs sparses et denses et gère de manière transparente les requêtes de recherche à travers différentes modalités de données.</p>\n<p>Pour utiliser Pinecone, vous devrez vous inscrire pour un compte, installer le client Pinecone et configurer votre clé API et votre environnement.</p>\n<pre><code class=\"language-python\"># Créer un index de recherche hybride Pinecone\nimport pinecone\n\npinecone.init(\n    api_key=\"VOTRE_CLE_API\",  # app.pinecone.io\n    environment=\"VOTRE_ENVIRONNEMENT\"  # trouver à côté de la clé API dans la console\n)\n\n# Créer un index de recherche hybride Pinecone\nindex_name = \"recherche-hybride-ecommerce\"\npinecone.create_index(\n    index_name = index_name,\n    dimension = DIMENSION_MODELE,  # dimensionnalité du modèle dense\n    metric = \"dotproduct\"\n)\n# se connecter à l'index\nindex = pinecone.Index(index_name=index_name)\n# voir les statistiques de l'index\nindex.describe_index_stats()\n</code></pre>\n<h3>4. Implémentation du Pipeline de Recherche Hybride</h3>\n<p>Avec nos vecteurs sparses et denses générés et Pinecone configuré, nous pouvons maintenant construire un pipeline de recherche hybride. Ce pipeline comprend les étapes suivantes :</p>\n<ol>\n<li>Ajout des données de produit à l'index Pinecone</li>\n<li>Récupération des résultats en utilisant à la fois les vecteurs sparses et denses</li>\n</ol>\n<pre><code class=\"language-python\">def add_product_data_to_index(product_ids, sparse_vectors, dense_vectors, metadata=None):\n    \"\"\"Insère les données de produit dans l'index Pinecone.\n\n    Args:\n        product_ids (`list` de `str`): Identifiants des produits.\n        sparse_vectors (`list` de `list` de `float`): Vecteurs sparses.\n        dense_vectors (`list` de `list` de `float`): Vecteurs denses.\n        metadata (`list` de `list` de `str`): Métadonnées optionnelles.\n\n    Returns:\n        None\n    \"\"\"\n    batch_size = 32\n\n    # Parcourir les identifiants de produits par lots.\n    for i in range(0, len(product_ids), batch_size):\n        i_end = min(i + batch_size, len(product_ids))\n        ids = product_ids[i:i_end]\n        sparse_batch = sparse_vectors[i:i_end]\n        dense_batch = dense_vectors[i:i_end]\n        meta_batch = metadata[i:i_end] if metadata else []\n\n        vectors = []\n        for _id, sparse, dense, meta in zip(ids, sparse_batch, dense_batch, meta_batch):\n            vectors.append({\n                'id': _id,\n                'sparse_values': sparse,\n                'values': dense,\n                'metadata': meta\n            })\n\n        # Insérer les vecteurs dans l'index Pinecone.\n        index.upsert(vectors=vectors)\n\nadd_product_data_to_index(product_ids, sparse_vectors, dense_vectors)\n</code></pre>\n<p>Maintenant que nos données sont indexées, nous pouvons effectuer des requêtes de recherche hybride.</p>\n<h3>5. Effectuer des Requêtes et Ajuster les Paramètres</h3>\n<p><img src=\"/assets/images/pinecone_hybrid_query.jpg\" alt=\"Requête Hybride Pinecone\" class=\"post-img\" width=\"2360\" height=\"892\" /></p>\n<span class=\"post-img-caption\">Vue d'ensemble d'une requête hybride Pinecone simple</span>\n<p>Pour effectuer des requêtes de recherche hybride, nous allons créer une fonction qui prend une requête, le nombre de meilleurs résultats et un paramètre alpha pour contrôler la pondération entre les scores de recherche vectorielle dense et sparse.</p>\n<pre><code class=\"language-python\">def hybrid_scale(dense, sparse, alpha: float):\n    \"\"\"Mise à l'échelle vectorielle hybride utilisant une combinaison convexe\n\n    alpha * dense + (1 - alpha) * sparse\n\n    Args:\n        dense: Tableau de flottants représentant\n        sparse: un dictionnaire d'`indices` et de `valeurs`\n        alpha: flottant entre 0 et 1 où 0 == seulement sparse\n               et 1 == seulement dense\n    \"\"\"\n    if alpha < 0 or alpha > 1:\n        raise ValueError(\"Alpha doit être compris entre 0 et 1\")\n    # Mettre à l'échelle les vecteurs sparses et denses pour créer des vecteurs de recherche hybrides\n    hsparse = {\n        'indices': sparse['indices'],\n        'values':  [v * (1 - alpha) for v in sparse['values']]\n    }\n    hdense = [v * alpha for v in dense]\n    return hdense, hsparse\n\ndef search_products(query, top_k=10, alpha=0.5):\n    # Générer le vecteur de requête sparse\n    sparse_query_vector = generate_sparse_vector(query)\n\n    # Générer le vecteur de requête dense\n    dense_query_vector = generate_dense_vector(query)\n\n    # Calculer le vecteur de requête hybride\n    dense_query_vector, sparse_query_vector = hybrid_scale(dense_query_vector, sparse_query_vector, alpha)\n\n    # Rechercher des produits en utilisant Pinecone\n    results = index.query(\n        vector=dense_query_vector,\n        sparse_vector=sparse_query_vector,\n        top_k=top_k\n    )\n\n    return results\n</code></pre>\n<p>Nous pouvons ensuite utiliser cette fonction pour rechercher des produits pertinents dans notre ensemble de données de commerce électronique.</p>\n<pre><code class=\"language-python\">query = \"chaussures de course pour femmes\"\nresults = search_products(query, top_k=5)\n\nfor result in results:\n    print(result['id'], result['metadata']['product_name'], result['score'])\n</code></pre>\n<p>Expérimenter avec différentes valeurs du paramètre alpha vous aidera à trouver l'équilibre optimal entre la recherche vectorielle sparse et dense pour votre domaine spécifique.</p>\n<h2>Conclusion</h2>\n<p>Dans cet article de blog, nous avons montré comment construire un système de recherche hybride pour le commerce électronique en utilisant Pinecone et des modèles de langage spécifiques au domaine. La recherche hybride nous permet de combiner les forces de la recherche traditionnelle et de la recherche vectorielle, améliorant ainsi les performances de recherche et l'adaptabilité à travers divers domaines.</p>\n<p>En suivant les étapes et les extraits de code fournis dans cet article, vous pouvez implémenter votre propre système de recherche hybride adapté aux exigences spécifiques de votre site de commerce électronique. Commencez à explorer Pinecone et améliorez votre expérience de recherche de commerce électronique dès aujourd'hui !</p>\n<h2>Références</h2>\n<ul>\n<li><a href=\"https://colab.research.google.com/github/pinecone-io/examples/blob/master/search/hybrid-search/ecommerce-search/ecommerce-search.ipynb\">Recherche E-commerce utilisant des Techniques de Recherche Hybride dans Pinecone (Carnet Google Colab)</a> : Un guide pratique montrant l'implémentation de la recherche e-commerce en utilisant les techniques de recherche hybride de Pinecone.</li>\n<li><a href=\"https://docs.pinecone.io/docs/ecommerce-search\">Documentation de Recherche E-commerce Pinecone</a> : Documentation officielle de Pinecone pour la construction de systèmes de recherche e-commerce.</li>\n<li><a href=\"https://colab.research.google.com/github/pinecone-io/examples/blob/master/pinecone/sparse/bm25/bm25-vector-generation.ipynb\">Génération de Vecteurs BM25 en utilisant Pinecone (Carnet Google Colab)</a> : Un guide pour générer des vecteurs sparses BM25 en utilisant Pinecone.</li>\n<li><a href=\"https://github.com/pinecone-io/pinecone-text\">Dépôt Texte Pinecone sur GitHub</a> : Une collection de ressources de traitement de texte et de génération de vecteurs utilisant Pinecone.</li>\n<li><a href=\"https://www.pinecone.io/learn/hybrid-search-intro/\">Introduction à la Recherche Hybride sur le Site Web de Pinecone</a> : Un aperçu de la recherche hybride, de ses avantages et de ses cas d'utilisation dans le contexte des capacités de Pinecone.</li>\n</ul>",
  "source_hash": "sha256:e66aaa4db1667d84e791217c8e94d2c0fb0ed99f7181b65b37a84e72ae3181ef",
  "model": "deepseek/deepseek-v4-flash",
  "generated_at": "2026-08-07T08:07:09.411558+00:00"
}