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:

  1. Schritt 3a: Basisphrasen aus Produktmerkmalen mithilfe von Permutationen und merkmalspezifischen Regeln generieren
  2. 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:

  1. Vorhandene Embeddings laden
  2. Nur neue Phrasen embedden
  3. 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:

  1. Anfrage kommt an: „mini pc with 16gb ram“
  2. Phrasen extrahieren: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
  3. Phrasen mithilfe der Zuordnungen Filtern zuordnen
  4. 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:

  1. Schritt 0: Quelldaten embedden – Produkte, Teile, Artikel
  2. Schritt 1: Anfragen abrufen – GSC, Google Ads, Live, Algolia
  3. Schritt 2: Anfragen kombinieren – Alle Quellen zusammenführen
  4. Schritt 3a: Basisphrasenzuordnungen generieren ← Sie befinden sich hier
  5. Schritt 3b: Anfragen embedden – In Vektoren umwandeln
  6. Schritt 4: Phrasenzuordnungen erweitern ← Sie befinden sich hier
  7. Schritt 5: Anfragen clustern – Zu Seiten gruppieren
  8. Schritt 6: Produkte abgleichen – Anfrage-Produkt-Abgleich
  9. Schritt 7: Abfrageseiten erstellen – HTML generieren
  10. Schritt 8: Verwandte Suchanfragen generieren – Verwandte Anfragen finden
  11. 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

Modelldokumentation

Verwandte Artikel

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.


← Zurück zum Dokumentationsindex