Phrase-to-Filter-Zuordnungen: Semantische Suche für Produktfilter
Dieser Artikel erklärt, wie wir Phrase-to-Filter-Zuordnungen generieren und erweitern, die unser Filterextraktionssystem antreiben. Diese Zuordnungen verbinden natürliche Sprachphrasen aus Suchanfragen mit strukturierten Produktfiltern.
Das Problem: Extrahieren von Filtern aus natürlicher Sprache
Wenn Benutzer nach „mini pc with 16gb ram“ suchen, müssen wir extrahieren:
-
Formfaktor: Mini PC
-
Arbeitsspeicher: 16
Aber Benutzer drücken dieselbe Absicht auf viele Arten aus:
-
"16gb ram mini pc"
-
"mini computer 16 gb memory"
-
"small pc 16gb"
-
"compact desktop with 16 gigs"
Wir brauchen ein System, das all diese Phrasenvarianten den korrekten Filterwerten zuordnet.
Zwei-Schritte-Prozess
Wir generieren Phrasenzuordnungen in zwei Schritten:
- Schritt 3a: Basisphrasen aus Produktmerkmalen mithilfe von Permutationen und merkmalspezifischen Regeln generieren
- Schritt 4: Mit semantischer Ähnlichkeit mithilfe von Embeddings erweitern
Dieser hybride Ansatz kombiniert regelbasierte Präzision mit semantischer Flexibilität.
Schritt 3a: Basisphrasengenerierung
Merkmalsmetadaten
Jedes Produktmerkmal besitzt Metadaten in der Merkmalssequenz:
-
Überschrift: Kategoriename (z. B. „Processing“ für Prozessorfunktionen)
-
Einheit: Maßeinheit (z. B. „GB“ für Arbeitsspeicher, „GHz“ für Frequenz)
Diese Metadaten steuern die Phrasengenerierung.
Permutationsbasierte Generierung
Für jeden Merkmalswert generieren wir alle Permutationen von:
-
Überschrift: "processor"
-
Merkmalschlüssel: "series"
-
Wert: "i5"
-
Einheit: (keine für series)
Dies erzeugt:
-
"processor series i5"
-
"series processor i5"
-
"i5 processor series"
-
"i5 series processor"
-
"processor i5"
-
"series i5"
-
"i5"
Alle Permutationen stellen sicher, dass wir Anfragen unabhängig von der Wortreihenfolge abgleichen.
Wert- + Einheiten-Kombinationen
Für Merkmale mit Einheiten (Arbeitsspeicher, Speicher, Frequenz) generieren wir sowohl Varianten mit als auch ohne Leerzeichen:
-
"16 gb" (mit Leerzeichen)
-
"16gb" (ohne Leerzeichen)
Diese werden mit anderen Komponenten kombiniert:
-
"16gb ram"
-
"ram 16gb"
-
"processor 16gb"
Port-Suffix-Regeln
Für Konnektivitätsmerkmale (USB, HDMI, DisplayPort) fügen wir Port-Suffixe hinzu:
-
"usb port"
-
"usb ports"
-
"2 usb ports"
-
"hdmi port"
Dies entspricht Anfragen wie „mini pc with 2 hdmi ports“.
Merkmalspezifische Regeln
Jeder Merkmalstyp hat eine eigene Phrasengenerierung:
Prozessorserie (i3, i5, N-Serie):
-
Kernprozessorbezeichnungen generieren Varianten: Herstellername, Kernmarke, kombinierte Formen
-
N-Serie-Prozessoren (N100 usw.) erzeugen ähnliche Kombinationsmuster
-
Jeder generiert mehrere Permutationen mit „processor“
Arbeitsspeicher:
-
Numerische Werte generieren sowohl Varianten mit als auch ohne Leerzeichen („16gb“, „16 gb“)
-
Automatisch ergänzt um die Qualifikatoren „ram“ und „memory“ („16gb memory“, „16 gb ram“)
SSD-Speicher:
-
Numerische Werte generieren GB-Varianten („512gb“, „512 gb“)
-
Generiert automatisch TB-Varianten für Werte ≥ 1024 (z. B. 1024GB → 1TB)
-
Automatisch ergänzt um die Qualifikatoren „ssd“ und „storage“ („512gb ssd“, „512 gb storage“)
Formfaktor:
-
Mini-PC → mehrere Varianten einschließlich der Form ohne Leerzeichen
-
All-in-One → „all in one“, „aio“, abgekürzte Formen
-
Thin Client → Varianten mit/ohne Leerzeichen
-
Industrie-PC → abgekürzte und vollständige Formen
Generation:
- Numerische Generationswerte werden zu: „12th gen“, „12th generation“, „gen 12“
Kerne:
-
2 → "dual core"
-
4 → "quad core"
-
6 → "hexa core"
-
8 → "octa core"
-
Alle generieren „[n] core processor“-Varianten
Ethernet:
-
"1000" → ["gigabit ethernet", "gbe", "1gbps"]
-
"2500" → ["2.5gbe", "2.5 gigabit", "2.5gbps"]
Betriebssystem:
-
"Windows 11" → ["windows", "windows 11", "win 11"]
-
"Ubuntu" → ["linux", "ubuntu"]
-
"FreeDOS" → ["freedos", "no os", "without os"]
Whitelist für eigenständige Werte
Nur bestimmte Merkmale erlauben die Übereinstimmung von eigenständigen Werten, um Fehlübereinstimmungen zu vermeiden:
-
Serie: „i3“, „i5“, „N100“ (aber keine einzelnen Buchstaben)
-
Prozessormodell: „N100“, „1335U“
-
Betriebssystem: „Windows“, „Linux“, „Ubuntu“
-
Generation: „12th“, „13th“, „14th“
-
Prozessormarke: „Intel“, „ARM“
Zum Beispiel sollte „2“ nicht mit „2 cores“ übereinstimmen, wenn die Anfrage „2 hdmi ports“ lautet. Die Längenprüfung verhindert, dass einzelne Buchstaben oder sehr kurze mehrdeutige Werte eigenständig abgeglichen werden. Merkmale mit expliziten Einheitenkomponenten wie Ethernet oder Ports erzeugen eigenständige Kombinationen nur dann, wenn sie mit ihrer Einheit qualifiziert sind.
Kollisionsvermeidung
Arbeitsspeicher- und Speicherwerte überlappen sich (beide haben 64, 128, 256 usw.). Schritt 4 erzwingt Wertebereichsregeln zur Disambiguierung:
-
≤ 64 GB: Hauptspeicher (RAM)
-
≥ 128 GB: SSD-Speicher
-
65-127-GB-Bereich: Übersprungen (mehrdeutig)
Phrasen mit expliziten Qualifikatoren („ram“/„memory“ oder „ssd“/„storage“) haben Vorrang vor dieser Regel und können jeden Wert abgleichen.
Darüber hinaus werden vage allgemeine Begriffe, die zu vielen unzusammenhängenden Filtern entsprechen, während der Kollisionsauflösung per Nachbearbeitung ausgeschlossen: Begriffe wie „connectivity“, „audio“, „display“, „processor“ und „physical“ erzeugen zu viel Mehrdeutigkeit über mehrere Facetten hinweg.
Schritt 4: Semantische Erweiterung
N-Gramm-Extraktion
Wir extrahieren häufige Phrasen aus echten Suchanfragen, von einzelnen Wörtern (1-Gramme wie „mini“) bis zu längeren Sequenzen (bis zu 6-Gramme wie „mini pc with 16gb ram ssd“). Nur Phrasen, die mindestens dreimal vorkommen, werden behalten. Dieser Filteransatz reduziert Rauschen und bewahrt gleichzeitig echte Sprachmuster der Benutzer.
Generierung von Filtersuchttexten
Für jeden Filterwert generieren wir Suchtexte:
Arbeitsspeicher: 16:
-
"16gb ram memory"
-
"16 main memory"
-
"main memory 16"
SSD-Speicher: 512:
-
"512gb storage ssd"
-
"512 ssd storage"
-
"ssd storage 512"
Diese Suchtexte repräsentieren den Filter im Embedding-Raum.
Embedding und Abgleich
Wir konvertieren sowohl Suchanfrage-Phrasen als auch Filtersuchttexte in Embeddings und berechnen dann die Kosinusähnlichkeit zwischen ihnen. Phrasen mit Ähnlichkeitswerten über einem konfigurierten Schwellenwert werden der Zuordnung dieses Filters hinzugefügt.
Manuelle Saatphrasen
Vor der Erweiterung fügen wir manuelle Saatphrasen mit hoher Konfidenz ein:
"Series:i5": [
"i5",
"core i5",
"intel i5",
"intel core i5",
"i5 processor",
"cpu i5",
]
Diese Saatphrasen repräsentieren Kernphrasen, von denen wir wissen, dass sie für jeden Filter korrekt sind. Indem wir sie mit maximalen Ähnlichkeitswerten aufnehmen, leiten sie den Erweiterungsalgorithmus an, verwandte Phrasen mit ähnlichen Bedeutungen zu finden. Diese Saatphrasen erhalten immer die Ähnlichkeit 1,0 und leiten die Erweiterung.
Inkrementelles Embedding
Wir cachen Embeddings sowohl für Phrasen als auch für Filtersuchttexte. Wenn neue Anfragen eintreffen:
- Vorhandene Embeddings laden
- Nur neue Phrasen embedden
- An den Cache anhängen
Dadurch wird vermieden, unveränderte Daten erneut zu embedden. Siehe Embedding-Strategie für Details.
Kollisionsauflösung
Nach Abschluss des Ähnlichkeitsabgleichs lösen wir Kollisionen zwischen Arbeitsspeicher- und Speicherfiltern auf:
Zahlenbasierte Disambiguierung:
-
Für mehrdeutige Phrasen mit Zahlen: Wenn der Wert der Phrase ≤ 64 ist, nur für Arbeitsspeicher behalten; wenn > 64, nur für Speicher
-
Dies verhindert, dass „16gb“ mit SSD-Speicherfiltern und „512gb“ mit Arbeitsspeicherfiltern übereinstimmt
Explizite Qualifikatoren haben Vorrang vor Regeln:
-
Phrasen mit Schlüsselwörtern „ram“, „memory“, „cpu“, „processor“ → nur Arbeitsspeicher
-
Phrasen mit Schlüsselwörtern „ssd“, „storage“, „disk“, „nvme“, „drive“ → nur Speicher
-
Beispiel: „processor 8gb“ wird trotz des numerischen Werts dem Arbeitsspeicher zugeordnet
Vage Begriffe:
- Verwerfe Phrasen wie „connectivity“, „audio“, „display“, die mehrere unzusammenhängende Filter abgleichen
Ausgabeformat
Das endgültige Mapping wird nach Ähnlichkeit (höchste zuerst) und dann nach Länge (kürzeste zuerst) sortiert:
{
"Main Memory:16": [
{"phrase": "16gb ram", "similarity": 1.0},
# ... (implementation details omitted)
Integration in die Filterextraktion
Diese Zuordnungen versorgen den Filterextraktionsalgorithmus:
- Anfrage kommt an: „mini pc with 16gb ram“
- Phrasen extrahieren: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
- Phrasen mithilfe der Zuordnungen Filtern zuordnen
- Filter zurückgeben:
{"Form Factor": ["Mini PC"], "Main Memory": ["16"]}
Siehe Filterextraktionsalgorithmus für Details.
Speicherung und Verteilung
Phrasenzuordnungen werden als JSON-Dateien gespeichert und systemweit verwendet:
-
Basiszuordnungsdatei: In Schritt 3a generiert, enthält regelbasierte Phrasen
-
Erweiterte Zuordnungsdatei: In Schritt 4 generiert, enthält semantische Erweiterungsergebnisse
Die erweiterten Zuordnungen werden verwendet von:
-
Abfrageseitengenerierung: Extrahiert Filter aus Abfragetext
-
Suchdienst: Echtzeit-Filterextraktions-API
-
Produktabgleich: Filtert Produkte nach extrahierten Filtern
Leistungsmerkmale
Basisgenerierung (Schritt 3a):
-
Die Verarbeitungszeit skaliert mit der Anzahl der Filterwerte
-
Generiert eine große Anzahl von Basisphrasenvarianten
-
Der Speicherverbrauch bleibt während der Generierung moderat
Semantische Erweiterung (Schritt 4):
-
Die Verarbeitungszeit skaliert mit dem Anfragevolumen und der Embedding-Größe
-
Die Ausgabe enthält deutlich mehr Phrasen als die Basisgenerierung
-
Die Speicheranforderungen steigen aufgrund der Speicherung von Embeddings
Die Erweiterung ist rechenintensiv (CPU-gebunden) aufgrund der Ähnlichkeitsberechnung. Die Verwendung von NumPy mit BLAS-Beschleunigung beschleunigt Matrixoperationen erheblich.
Integration in die SEO-Pipeline
Die Generierung von Phrasenzuordnungen ist Schritt 3a und 4 in der SEO-Pipeline:
- Schritt 0: Quelldaten embedden – Produkte, Teile, Artikel
- Schritt 1: Anfragen abrufen – GSC, Google Ads, Live, Algolia
- Schritt 2: Anfragen kombinieren – Alle Quellen zusammenführen
- Schritt 3a: Basisphrasenzuordnungen generieren ← Sie befinden sich hier
- Schritt 3b: Anfragen embedden – In Vektoren umwandeln
- Schritt 4: Phrasenzuordnungen erweitern ← Sie befinden sich hier
- Schritt 5: Anfragen clustern – Zu Seiten gruppieren
- Schritt 6: Produkte abgleichen – Anfrage-Produkt-Abgleich
- Schritt 7: Abfrageseiten erstellen – HTML generieren
- Schritt 8: Verwandte Suchanfragen generieren – Verwandte Anfragen finden
- Schritt 11: Zu Valkey migrieren – In den Suchdienst laden
Siehe SEO-Pipeline-Übersicht für den vollständigen Ablauf.
Warum zwei Schritte?
Basisgenerierung (Schritt 3a) bietet:
-
Präzision: Regelbasierte Phrasen entsprechen genau dem, was wir erwarten
-
Abdeckung: Permutationen stellen sicher, dass alle Wortreihenfolgen abgedeckt sind
-
Kontrolle: Merkmalspezifische Regeln verarbeiten Domänenwissen
Semantische Erweiterung (Schritt 4) bietet:
-
Flexibilität: Entdeckt Phrasen, die wir nicht erwartet haben
-
Echte Benutzersprache: Lernt aus tatsächlichen Suchanfragen
-
Synonyme: Findet äquivalente Phrasen („16 gigs“ für „16gb“)
Zusammen sorgen sie für ein Gleichgewicht zwischen Präzision und Recall (Vollständigkeit).
Referenzen
Technische Konzepte
-
Permutation - Wikipedia
-
Kosinusähnlichkeit - Wikipedia
-
N-Gramm - Wikipedia
-
NumPy - Offizielle Dokumentation
-
BLAS - Wikipedia
Modelldokumentation
-
all-mpnet-base-v2 - Hugging Face
-
Sentence Transformers - Offizielle Dokumentation
Verwandte Artikel
-
Embedding-Strategie – Wie wir Embeddings generieren
-
Filterextraktionsalgorithmus – Verwendung von Zuordnungen zur Filterextraktion
-
SEO-Pipeline-Übersicht – Vollständige Pipeline-Architektur
-
Anfrage-Clustering – Gruppierung ähnlicher Anfragen
-
Produktabgleich – Semantischer Abgleich
Zusammenfassung
Wir generieren Phrase-to-Filter-Zuordnungen in zwei Schritten:
Schritt 3a (Basisgenerierung):
-
Alle Permutationen von Überschrift, Schlüssel, Wert, Einheit generieren
-
Merkmalspezifische Regeln anwenden (Prozessorserie, Arbeitsspeicher, Speicher, Formfaktor)
-
Port-Suffixe für Konnektivitätsmerkmale hinzufügen
-
Whitelist für eigenständige Werte bestimmter Merkmale
-
Basissatz an Phrasen aus Regeln ausgeben
Schritt 4 (Semantische Erweiterung):
-
N-Gramm-Phrasen aus echten Suchanfragen extrahieren
-
Phrasen und Filtersuchttexte embedden
-
Phrasen mit Ähnlichkeitswerten über dem Schwellenwert abgleichen
-
Manuelle Saatphrasen einfügen, um die Erweiterung zu leiten
-
Arbeitsspeicher-/Speicher-Kollisionen auflösen
-
Erweiterten und disambiguierten Phrasensatz ausgeben
Das Ergebnis ist eine umfassende Zuordnung, die sowohl erwartete Phrasen (über Regeln) als auch unerwartete Variationen (über semantische Ähnlichkeit) verarbeitet. Diese Zuordnungen versorgen die Filterextraktion über Abfrageseiten, Suche und Produktabgleich hinweg.