{
  "title": "Hybrid Search für E-Commerce mit Pinecone und LLMs",
  "excerpt": "Erfahren Sie, wie Sie ein leistungsstarkes Hybrid-Suchsystem für E-Commerce-Anwendungen aufbauen, indem Sie traditionelle Information-Retrieval-Methoden mit Machine-Learning-Modellen wie Language Models (LLMs) und Pinecone, einer verwalteten Vektordatenbank, kombinieren. Entdecken Sie die Vorteile der Hybrid-Suche für den E-Commerce, darunter verbesserte Suchrelevanz, Personalisierung, Umgang mit Long-Tail-Anfragen und einfacheres Infrastrukturmanagement.",
  "content_html": "<p>Die Suche nach relevanten Produkten ist ein entscheidender Bestandteil einer E-Commerce-Website. Schnelle und präzise Suchergebnisse können den Unterschied zwischen hoher Nutzerzufriedenheit und Nutzerfrustration ausmachen. Mit den jüngsten Fortschritten im Bereich des natürlichen Sprachverstehens und der Vektorsuch-Technologien sind verbesserte Suchsysteme zugänglicher und effizienter geworden, was zu besseren Nutzererlebnissen und höheren Konversionsraten führt.</p><p>In diesem Blogbeitrag zeigen wir, wie man ein Hybrid-Suchsystem für den E-Commerce mit Pinecone, einer hochleistungsfähigen Vektorsuchmaschine, und fein abgestimmten domänenspezifischen Sprachmodellen implementiert. Am Ende dieses Beitrags werden Sie nicht nur ein fundiertes Verständnis der Hybrid-Suche haben, sondern auch eine praktische Schritt-für-Schritt-Anleitung zur Implementierung.</p><h2>Was ist Hybrid Search?</h2><p><img src=\"/assets/images/pinecone_hybrid_index.jpg\" alt=\"Pinecone Hybrid Index\" class=\"post-img\" width=\"2360\" height=\"921\" /><br><span class=\"post-img-caption\">Überblick über einen einfachen Pinecone Hybrid Index</span></p><p>Bevor wir in die Implementierung eintauchen, wollen wir kurz verstehen, was Hybrid-Suche bedeutet. Hybrid-Suche ist ein Ansatz, der die Stärken der traditionellen Suche (Sparse-Vektor-Suche) und der Vektorsuche (Dense-Vektor-Suche) kombiniert, um eine bessere Suchleistung über ein breites Spektrum von Domänen zu erzielen.</p><p>Die Dense-Vektor-Suche extrahiert hochwertige Vektor-Embeddings aus Textdaten und führt eine Ähnlichkeitssuche durch, um relevante Dokumente zu finden. Sie hat jedoch oft Schwierigkeiten mit domänenfremden Daten, wenn sie nicht auf domänenspezifischen Datensätzen fein abgestimmt wurde.</p><p>Die traditionelle Suche hingegen verwendet Sparse-Vektor-Darstellungen wie Term Frequency-Inverse Document Frequency (TF-IDF) oder BM25 und erfordert kein domänenspezifisches Fine-Tuning. Obwohl sie neue Domänen verarbeiten kann, ist ihre Leistung durch die Unfähigkeit begrenzt, semantische Beziehungen zwischen Wörtern zu verstehen, und ihr fehlt die Intelligenz des Dense Retrieval.</p><p>Die Hybrid-Suche versucht, die Schwächen beider Ansätze zu mildern, indem sie diese in einem einzigen System kombiniert und dabei das Leistungspotenzial der Dense-Vektor-Suche und die Zero-Shot-Anpassungsfähigkeit der traditionellen Suche nutzt.</p><p>Nachdem wir nun ein grundlegendes Verständnis der Hybrid-Suche haben, tauchen wir in die Implementierung ein.</p><h2>Aufbau eines Hybrid-Suchsystems</h2><p>Wir werden die folgenden Schritte zur Implementierung eines Hybrid-Suchsystems behandeln:</p><ol><li>Nutzung domänenspezifischer Sprachmodelle</li><li>Erstellen von Sparse- und Dense-Vektoren</li><li>Einrichten von Pinecone</li><li>Implementierung der Hybrid-Such-Pipeline</li><li>Abfragen erstellen und Parameter anpassen</li></ol><h3>1. Nutzung domänenspezifischer Sprachmodelle</h3><p>In den letzten Jahren sind groß angelegte vortrainierte Sprachmodelle wie OpenAI's GPT und Cohere für eine Vielzahl von Aufgaben, einschließlich natürlichem Sprachverstehen und -generierung, immer beliebter geworden. Diese Modelle können auf domänenspezifischen Daten fein abgestimmt werden, um ihre Leistung zu verbessern und sich an spezifische Aufgaben anzupassen, wie z. B. die Produktsuche im E-Commerce.</p><p>In unserem Beispiel verwenden wir ein fein abgestimmtes domänenspezifisches Sprachmodell, um Dense-Vektor-Embeddings für Produkte und Anfragen zu generieren. Sie können jedoch auch andere Modelle wählen oder sogar eigene benutzerdefinierte Embeddings basierend auf Ihrer spezifischen Domäne erstellen.</p><pre><code class=\"language-python\">import torch\nfrom transformers import AutoTokenizer, AutoModel\n\n# Load a pre-trained domain-specific language model\nmodel_name = \"your-domain-specific-model\"\ntokenizer = AutoTokenizer.from_pretrained(model_name)\nmodel = AutoModel.from_pretrained(model_name)\n\n# Generate dense vector embeddings for a product description\ntext = \"Nike Air Max sports shoes for men\"\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()</code></pre><h3>2. Erstellen von Sparse- und Dense-Vektoren</h3><p>Die Hybrid-Suche erfordert sowohl Sparse- als auch Dense-Vektor-Darstellungen für unsere E-Commerce-Daten. Wir beschreiben nun, wie diese Vektoren generiert werden.</p><h4>Sparse-Vektoren</h4><p>Sparse-Vektor-Darstellungen wie TF-IDF oder BM25 können mit Standard-Textverarbeitungstechniken wie Tokenisierung, Stoppwortentfernung und Stemming erstellt werden. Ein Beispiel für die Generierung von Sparse-Vektoren kann mithilfe einer Vokabularmatrix erreicht werden.</p><pre><code class=\"language-python\"># This function generates sparse vector representations of a list of product descriptions\ndef generate_sparse_vectors(text):\n    '''Generates sparse vector representations for a list of product descriptions\n\n    Args:\n        text (list): A list of product descriptions\n\n    Returns:\n        sparse_vector (dict): A dictionary of indices and values\n    '''\n    sparse_vector = bm25.encode_queries(text)\n    return sparse_vector\n\nfrom pinecone_text.sparse import BM25Encoder\n\n# Create the BM25 encoder and fit the data\nbm25 = BM25Encoder()\nbm25.fit(new_df.full_data)\n\n# Create the sparse vectors\nsparse_vectors = []\nfor product_description in product_descriptions:\n    sparse_vectors.append(generate_sparse_vectors(text=product_description))</code></pre><h4>Dense-Vektoren</h4><p>Dense-Vektor-Darstellungen können mit vortrainierten oder benutzerdefinierten domänenspezifischen Sprachmodellen generiert werden. In unserem vorherigen Beispiel haben wir ein domänenspezifisches Sprachmodell verwendet, um Dense-Vektor-Embeddings für eine Produktbeschreibung zu generieren.</p><pre><code class=\"language-python\">def generate_dense_vector(text):\n    '''Generates dense vector embeddings for a list of product descriptions\n\n    Args:\n        text (list): A list of product descriptions\n\n    Returns:\n        dense_embedding (np.array): A numpy array of dense vector embeddings\n    '''\n    # Tokenize the text and convert to PyTorch tensors\n    inputs = tokenizer(text, return_tensors=\"pt\")\n    # Generate the embeddings with the pre-trained model\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# Generate dense vector embeddings for a list of product descriptions\ndense_vectors = []\nfor product_description in product_descriptions:\n    dense_vectors.append(generate_dense_vector(text=product_description))</code></pre><h3>3. Einrichten von Pinecone</h3><p>Pinecone ist eine hochleistungsfähige Vektorsuchmaschine, die Hybrid-Suche unterstützt. Sie ermöglicht die Erstellung eines einzigen Index für sowohl Sparse- als auch Dense-Vektoren und verarbeitet nahtlos Suchanfragen über verschiedene Datenmodalitäten.</p><p>Um Pinecone zu verwenden, müssen Sie sich für ein Konto anmelden, den Pinecone-Client installieren und Ihren API-Schlüssel und Ihre Umgebung einrichten.</p><pre><code class=\"language-python\"># Create a Pinecone hybrid search index\nimport pinecone\n\npinecone.init(\n    api_key=\"YOUR_API_KEY\",  # app.pinecone.io\n    environment=\"YOUR_ENV\"  # find next to api key in console\n)\n\n# Create a Pinecone hybrid search index\nindex_name = \"ecommerce-hybrid-search\"\npinecone.create_index(\n    index_name = index_name,\n    dimension = MODEL_DIMENSION,  # dimensionality of dense model\n    metric = \"dotproduct\"\n)\n# connect to the index\nindex = pinecone.Index(index_name=index_name)\n# view index stats\nindex.describe_index_stats()</code></pre><h3>4. Implementierung der Hybrid-Such-Pipeline</h3><p>Mit unseren generierten Sparse- und Dense-Vektoren und dem eingerichteten Pinecone können wir nun eine Hybrid-Such-Pipeline aufbauen. Diese Pipeline umfasst die folgenden Schritte:</p><ol><li>Produktdaten zum Pinecone-Index hinzufügen</li><li>Ergebnisse mit Sparse- und Dense-Vektoren abrufen</li></ol><pre><code class=\"language-python\">def add_product_data_to_index(product_ids, sparse_vectors, dense_vectors, metadata=None):\n    \"\"\"Upserts product data to the Pinecone index.\n\n    Args:\n        product_ids (`list` of `str`): Product IDs.\n        sparse_vectors (`list` of `list` of `float`): Sparse vectors.\n        dense_vectors (`list` of `list` of `float`): Dense vectors.\n        metadata (`list` of `list` of `str`): Optional metadata.\n\n    Returns:\n        None\n    \"\"\"\n    batch_size = 32\n\n    # Loop through the product IDs in batches.\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        # Upsert the vectors into the Pinecone index.\n        index.upsert(vectors=vectors)\n\nadd_product_data_to_index(product_ids, sparse_vectors, dense_vectors)</code></pre><p>Nachdem unsere Daten indiziert sind, können wir Hybrid-Suchanfragen durchführen.</p><h3>5. Abfragen erstellen und Parameter anpassen</h3><p><img src=\"/assets/images/pinecone_hybrid_query.jpg\" alt=\"Pinecone Hybrid Query\" class=\"post-img\" width=\"2360\" height=\"892\" /><br><span class=\"post-img-caption\">Überblick über eine einfache Pinecone Hybrid-Abfrage</span></p><p>Um Hybrid-Suchanfragen zu erstellen, entwickeln wir eine Funktion, die eine Anfrage, die Anzahl der Top-Ergebnisse und einen Alpha-Parameter entgegennimmt, um die Gewichtung zwischen Dense- und Sparse-Vektor-Suchscores zu steuern.</p><pre><code class=\"language-python\">def hybrid_scale(dense, sparse, alpha: float):\n    \"\"\"Hybrid vector scaling using a convex combination\n\n    alpha * dense + (1 - alpha) * sparse\n\n    Args:\n        dense: Array of floats representing\n        sparse: a dict of `indices` and `values`\n        alpha: float between 0 and 1 where 0 == sparse only\n               and 1 == dense only\n    \"\"\"\n    if alpha < 0 or alpha > 1:\n        raise ValueError(\"Alpha must be between 0 and 1\")\n    # scale sparse and dense vectors to create hybrid search vecs\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    # Generate sparse query vector\n    sparse_query_vector = generate_sparse_vector(query)\n\n    # Generate dense query vector\n    dense_query_vector = generate_dense_vector(query)\n\n    # Calculate hybrid query vector\n    dense_query_vector, sparse_query_vector = hybrid_scale(dense_query_vector, sparse_query_vector, alpha)\n\n    # Search products using 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</code></pre><p>Wir können diese Funktion dann verwenden, um relevante Produkte in unserem E-Commerce-Datensatz zu suchen.</p><pre><code class=\"language-python\">query = \"running shoes for women\"\nresults = search_products(query, top_k=5)\n\nfor result in results:\n    print(result['id'], result['metadata']['product_name'], result['score'])</code></pre><p>Das Experimentieren mit verschiedenen Werten für den Alpha-Parameter hilft Ihnen, das optimale Gleichgewicht zwischen Sparse- und Dense-Vektor-Suche für Ihre spezifische Domäne zu finden.</p><h2>Fazit</h2><p>In diesem Blogbeitrag haben wir gezeigt, wie man ein Hybrid-Suchsystem für den E-Commerce mit Pinecone und domänenspezifischen Sprachmodellen aufbaut. Die Hybrid-Suche ermöglicht es uns, die Stärken der traditionellen Suche und der Vektorsuche zu kombinieren, was die Suchleistung und Anpassungsfähigkeit über verschiedene Domänen hinweg verbessert.</p><p>Indem Sie die in diesem Beitrag bereitgestellten Schritte und Code-Snippets befolgen, können Sie Ihr eigenes Hybrid-Suchsystem implementieren, das auf die spezifischen Anforderungen Ihrer E-Commerce-Website zugeschnitten ist. Beginnen Sie noch heute mit der Erkundung von Pinecone und verbessern Sie Ihr E-Commerce-Sucherlebnis!</p><h2>Referenzen</h2><ul><li><a href=\"https://colab.research.google.com/github/pinecone-io/examples/blob/master/search/hybrid-search/ecommerce-search/ecommerce-search.ipynb\">Ecommerce Search using Hybrid Search Techniques in Pinecone (Google Colab Notebook)</a>: Ein praktischer Leitfaden zur Implementierung der E-Commerce-Suche mit Pinecones Hybrid-Suchtechniken.</li><li><a href=\"https://docs.pinecone.io/docs/ecommerce-search\">Pinecone Ecommerce Search Documentation</a>: Offizielle Pinecone-Dokumentation zum Aufbau von E-Commerce-Suchsystemen.</li><li><a href=\"https://colab.research.google.com/github/pinecone-io/examples/blob/master/pinecone/sparse/bm25/bm25-vector-generation.ipynb\">BM25 Vector Generation using Pinecone (Google Colab Notebook)</a>: Ein Leitfaden zur Generierung von BM25 Sparse-Vektoren mit Pinecone.</li><li><a href=\"https://github.com/pinecone-io/pinecone-text\">Pinecone Text Repository on GitHub</a>: Eine Sammlung von Textverarbeitungs- und Vektorgenerierungsressourcen mit Pinecone.</li><li><a href=\"https://www.pinecone.io/learn/hybrid-search-intro/\">Introduction to Hybrid Search on Pinecone's Website</a>: Ein Überblick über die Hybrid-Suche, ihre Vorteile und Anwendungsfälle im Kontext der Pinecone-Funktionen.</li></ul>",
  "source_hash": "sha256:f09363badfd4924a9411fd2609843f051dfe9d9075b8e2234d98f12960ae9336",
  "model": "claude-sonnet-4-6",
  "generated_at": "2026-05-08T19:45:02.682936+00:00"
}