Embedding-Strategie: all-mpnet-base-v2 für semantische Suche
Dieser Artikel erklärt, wie wir das all-mpnet-base-v2 Sentence-Transformer-Modell verwenden, um die semantische Suche in unserer SEO-Pipeline zu ermöglichen.
Das Problem: Abfragen mit Produkten abgleichen
Wenn Nutzer nach "Mini-PC" oder "kleinem Computer" suchen, meinen sie dasselbe, obwohl keine Schlüsselwörter übereinstimmen. Herkömmliches Keyword-Matching versagt hier. Wir benötigen semantische Embeddings – dichte Vektordarstellungen, die die Bedeutung und nicht nur die Wörter erfassen.
Unsere SEO-Pipeline verarbeitet über 65.000 Suchanfragen und muss:
-
Ähnliche Anfragen für Query-Seiten zusammenfassen
-
Anfragen basierend auf der Bedeutung mit Produkten abgleichen
-
Verwandte Suchanfragen finden
-
Phrasen-zu-Filter-Zuordnungen erweitern
Das Modell: all-mpnet-base-v2
Wir verwenden all-mpnet-base-v2, ein Sentence-Transformer-Modell, das:
-
768-dimensionale Vektoren ausgibt
-
Auf über 1 Milliarde Satzpaaren trainiert wurde
-
Sequenzen mit bis zu 384 Tokens verarbeitet
Das Modell bildet Text auf einen dichten Vektorraum ab, in dem semantisch ähnlicher Text eine hohe Kosinusähnlichkeit aufweist.
Wie wir es verwenden
1. Einbetten von Abfragen
Wir betten alle Suchanfragen in 768-dimensionale Vektoren ein:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-mpnet-base-v2")
embeddings = model.encode(queries)
Jede Anfrage wird zu einem 768-Float-Vektor (3.072 Bytes). Für 65.000 Anfragen sind das ~190 MB an Embeddings.
2. Clustern von Abfragen
Wir clustern Anfragen nach Ähnlichkeit:
-
Wähle die Top 1.000 Anfragen nach Traffic als Cluster-Zentren aus
-
Berechne die Kosinusähnlichkeit zwischen allen 65.000 Anfragen und diesen 1.000 Zentren
-
Anfragen mit einer Ähnlichkeit ≥ 0,85 schließen sich diesem Cluster an
-
Nicht geclusterte Anfragen werden zu Einzel-Clustern
Dies erstellt Query-Seiten, auf denen jede Seite einen Cluster ähnlicher Suchanfragen repräsentiert.
Siehe Query-Clustering-Algorithmus für Details.
3. Abgleichen von Produkten
Wir betten Produktnamen und -merkmale ein und gleichen dann Anfragen mit Produkten mithilfe der Kosinusähnlichkeit ab. Produkte mit der höchsten Ähnlichkeit zur Anfrage erscheinen auf dieser Query-Seite.
Siehe Produkt-Matching-Algorithmus für Details.
4. Erweitern von Phrasen-Zuordnungen
Wir verwenden Embeddings, um ähnliche Phrasen für die Filterextraktion zu finden. Wenn beispielsweise "Mini-PC" einem Größenfilter zugeordnet ist, können wir feststellen, dass "kleiner Computer" dies ebenfalls sollte.
Siehe Phrasen-Zuordnungs-Erweiterung für Details.
Speicherung: NumPy-Arrays
Wir speichern Embeddings als NumPy .npy-Dateien:
import numpy as np
# Speichern
np.save("embeddings.npy", embeddings)
# Laden (Memory-Mapped)
embeddings = np.load("embeddings.npy", mmap_mode='r')
Warum NumPy?
-
Schnelles Laden mit Memory Mapping
-
Native Array-Operationen für Ähnlichkeitsberechnungen
-
Kompaktes Binärformat (~190 MB für 65.000 Anfragen)
Inkrementelles Einbetten
Wir betten nicht jedes Mal alle Anfragen neu ein. Unser inkrementelles Embedding:
- Lädt vorhandene Embeddings
- Vergleicht Anfrageschlüssel (Text + Metadaten)
- Bettet nur neue/geänderte Anfragen ein
- Hängt sie an das bestehende Array an
Dies reduziert die Verarbeitungszeit erheblich, wenn sich nur wenige Anfragen ändern.
Multi-Server-Architektur
Embeddings werden auf mehreren Servern verwendet:
- Batch-Pipeline: Erzeugt Embeddings aus Anfragen und Produkten
- Suchdienst: Lädt Embeddings für die API für verwandte Suchen
- Haupt-Webserver: Verwendet Embeddings für Produkt-Matching
Die Speicherung variiert je nach Server:
-
NumPy-Dateien: Batch-Pipeline (schneller lokaler Zugriff)
-
Valkey RediSearch: Suchdienst (Vektor-Ähnlichkeitssuche)
Siehe Suchdienst-Architektur für Details zur Valkey-Integration.
Integration in die SEO-Pipeline
Die Embeddings treiben mehrere Pipelineschritte an:
- Schritt 0: Quelldaten einbetten - Produkte, Teile, Artikel
- Schritt 3b: Anfragen einbetten - Alle Suchanfragen
- Schritt 4: Phrasen-Zuordnungen erweitern - Ähnliche Phrasen finden
- Schritt 5: Anfragen clustern - In Query-Seiten gruppieren
- Schritt 6: Produkte abgleichen - Query-Produkt-Matching
- Schritt 8: Verwandte Suchen generieren - Verwandte Anfragen finden
Siehe SEO-Pipeline-Überblick für den vollständigen Ablauf.
Referenzen
Modelldokumentation
-
all-mpnet-base-v2 Model Card - Hugging Face
-
Sentence Transformers Dokumentation - Offizielle Dokumentation
-
Sentence Transformers Paper - Reimers & Gurevych, 2019
Technische Konzepte
-
Word Embeddings - Wikipedia
-
Kosinusähnlichkeit - Wikipedia
-
NumPy Memory-Mapped Files - NumPy-Dokumentation
Verwandte Artikel
-
SEO-Pipeline-Überblick - Komplette Pipeline-Architektur
-
Query-Clustering-Algorithmus - Wie wir 65.000 Anfragen clustern
-
Suchdienst-Architektur - Valkey RediSearch-Integration
-
Produkt-Matching-Algorithmus - Semantisches Matching
-
Phrasen-Zuordnungs-Erweiterung - Verwenden von Embeddings für Filter
Zusammenfassung
Wir verwenden all-mpnet-base-v2, um Text in 768-dimensionale Vektoren umzuwandeln, die die semantische Bedeutung erfassen. Diese Embeddings treiben unsere gesamte SEO-Pipeline an:
-
Query-Clustering: Gruppierung von 65.000 Anfragen in Seiten mithilfe eines Ähnlichkeitsschwellenwerts von 0,85
-
Produkt-Matching: Semantisches Abgleichen von Anfragen mit Produkten
-
Verwandte Suchen: Finden ähnlicher Anfragen für die Navigation
-
Phrasen-Erweiterung: Entdecken neuer Filterphrasen
Embeddings werden als NumPy-Arrays für schnelles Laden gespeichert und inkrementell verarbeitet, um das erneute Einbetten unveränderter Daten zu vermeiden. Dieselben Embeddings werden über mehrere Server hinweg via NumPy-Dateien und Valkey RediSearch verwendet.