Mappature Frase-Filtro: Ricerca Semantica per Filtri di Prodotto

Questo articolo spiega come generiamo ed espandiamo le mappature frase-filtro che alimentano il nostro sistema di estrazione dei filtri. Queste mappature collegano frasi in linguaggio naturale provenienti dalle query di ricerca a filtri di prodotto strutturati.

Il Problema: Estrarre Filtri dal Linguaggio Naturale

Quando gli utenti cercano "mini pc con 16gb di ram", dobbiamo estrarre:

  • Form Factor: Mini PC

  • Main Memory: 16

Ma gli utenti esprimono la stessa intenzione in molti modi:

  • "mini pc 16gb ram"

  • "mini computer 16 gb di memoria"

  • "piccolo pc 16gb"

  • "desktop compatto con 16 gigabyte"

Abbiamo bisogno di un sistema che mappi tutte queste variazioni di frase ai valori corretti del filtro.

Processo in Due Fasi

Generiamo le mappature delle frasi in due fasi:

  1. Step 3a: Genera frasi base dalle caratteristiche del prodotto usando permutazioni e regole specifiche per caratteristica
  2. Step 4: Espansione con similarità semantica usando embedding

Questo approccio ibrido combina la precisione basata su regole con la flessibilità semantica.

Step 3a: Generazione Frasi Base

Metadati della Caratteristica

Ogni caratteristica di prodotto ha metadati nella sequenza delle caratteristiche:

  • Heading: Nome della categoria (es. "Processing" per le caratteristiche del processore)

  • Unit: Unità di misura (es. "GB" per la memoria, "GHz" per la frequenza)

Questi metadati guidano la generazione delle frasi.

Generazione Basata su Permutazioni

Per ogni valore di caratteristica, generiamo tutte le permutazioni di:

  • Heading: "processor"

  • Feature key: "series"

  • Value: "i5"

  • Unit: (nessuna per la serie)

Questo produce:

  • "processor series i5"

  • "series processor i5"

  • "i5 processor series"

  • "i5 series processor"

  • "processor i5"

  • "series i5"

  • "i5"

Tutte le permutazioni assicurano di far corrispondere le query indipendentemente dall'ordine delle parole.

Combinazioni Valore + Unità

Per le caratteristiche con unità (memoria, storage, frequenza), generiamo sia varianti con spazio che senza:

  • "16 gb" (con spazio)

  • "16gb" (senza spazio)

Queste si combinano con altri componenti:

  • "16gb ram"

  • "ram 16gb"

  • "processor 16gb"

Regole Suffisso Porta

Per le caratteristiche di connettività (USB, HDMI, DisplayPort), aggiungiamo suffissi di porta:

  • "usb port"

  • "usb ports"

  • "2 usb ports"

  • "hdmi port"

Questo fa corrispondere query come "mini pc con 2 porte hdmi."

Regole Specifiche per Caratteristica

Ogni tipo di caratteristica ha una generazione di frasi personalizzata:

Serie Processore (i3, i5, N-series):

  • Le designazioni dei core del processore generano varianti: nome del produttore, marchio del core, forme combinate

  • I processori N-series (N100, ecc.) creano combinazioni di pattern simili

  • Ognuno genera più permutazioni con "processor"

Memoria Principale:

  • I valori numerici generano sia varianti GB con spazio che senza ("16gb", "16 gb")

  • Qualificatori "ram" e "memory" vengono aggiunti automaticamente ("16gb memory", "16 gb ram")

Storage SSD:

  • I valori numerici generano varianti GB ("512gb", "512 gb")

  • Genera automaticamente varianti TB per valori ≥ 1024 (es., 1024GB → 1TB)

  • Qualificatori "ssd" e "storage" vengono aggiunti automaticamente ("512gb ssd", "512 gb storage")

Form Factor:

  • Mini PC → più varianti incluso la forma senza spazio

  • All-in-One → "all in one", "aio", forme abbreviate

  • Thin Client → varianti con/senza spazio

  • Industrial PC → forme abbreviate e complete

Generazione:

  • I valori di generazione numerici diventano: "12th gen", "12th generation", "gen 12"

Core:

  • 2 → "dual core"

  • 4 → "quad core"

  • 6 → "hexa core"

  • 8 → "octa core"

  • Tutti generano varianti "processore [n] core"

Ethernet:

  • "1000" → ["gigabit ethernet", "gbe", "1gbps"]

  • "2500" → ["2.5gbe", "2.5 gigabit", "2.5gbps"]

Sistema Operativo:

  • "Windows 11" → ["windows", "windows 11", "win 11"]

  • "Ubuntu" → ["linux", "ubuntu"]

  • "FreeDOS" → ["freedos", "no os", "without os"]

Whitelist per Valori Autonomi

Solo caratteristiche specifiche consentono la corrispondenza autonoma del valore per prevenire corrispondenze errate:

  • Serie: "i3", "i5", "N100" (ma non singole lettere)

  • Modello Processore: "N100", "1335U"

  • Sistema Operativo: "Windows", "Linux", "Ubuntu"

  • Generazione: "12th", "13th", "14th"

  • Marchio Processore: "Intel", "ARM"

Ad esempio, "2" non dovrebbe corrispondere a "2 cores" quando la query è "2 porte hdmi." Il controllo della lunghezza impedisce a singole lettere o valori molto brevi e ambigui di essere abbinati in modo autonomo. Le caratteristiche con componenti unitari espliciti, come Ethernet o porte, generano combinazioni autonome solo quando qualificate con la loro unità.

Prevenzione Collisioni

I valori di memoria e storage si sovrappongono (entrambi hanno 64, 128, 256, ecc.). Lo Step 4 applica regole basate sugli intervalli di valori per disambiguare:

  • ≤ 64 GB: Memoria Principale (RAM)

  • ≥ 128 GB: Storage SSD

  • Intervallo 65-127 GB: Saltato (ambiguo)

Le frasi con qualificatori espliciti ("ram"/"memory" o "ssd"/"storage") sovrascrivono questa regola e possono corrispondere a qualsiasi valore.

Inoltre, termini generali vaghi che corrispondono a troppi filtri non correlati vengono esclusi durante la risoluzione delle collisioni tramite post-elaborazione: termini come "connettività", "audio", "display", "processore" e "fisico" creano troppa ambiguità tra più facet.

Step 4: Espansione Semantica

Estrazione N-gram

Estraiamo frasi frequenti da query di ricerca reali, che vanno da singole parole (1-gram come "mini") a sequenze più lunghe (fino a 6-gram come "mini pc con 16gb ram ssd"). Vengono mantenute solo le frasi che appaiono almeno 3 volte. Questo approccio di filtraggio riduce il rumore preservando i modelli linguistici genuini degli utenti.

Generazione Testo di Ricerca per Filtri

Per ogni valore di filtro, generiamo testi di ricerca:

Memoria Principale: 16:

  • "16gb ram memory"

  • "16 main memory"

  • "main memory 16"

Storage SSD: 512:

  • "512gb storage ssd"

  • "512 ssd storage"

  • "ssd storage 512"

Questi testi di ricerca rappresentano il filtro nello spazio degli embedding.

Embedding e Corrispondenza

Convertiamo sia le frasi delle query che i testi di ricerca dei filtri in embedding, quindi calcoliamo la similarità del coseno tra di essi. Le frasi con punteggi di similarità sopra una soglia configurata vengono aggiunte alla mappatura di quel filtro.

Frasi Seme Manuali

Iniettiamo semi manuali ad alta confidenza prima dell'espansione:

"Series:i5": [
    "i5",
    "core i5",
    "intel i5",
    "intel core i5",
    "i5 processor",
    "cpu i5",
]

Questi semi rappresentano frasi centrali che sappiamo essere corrette per ogni filtro. Includendoli con punteggi di similarità massimi, guidano l'algoritmo di espansione a trovare frasi correlate con significati simili.Questi semi ottengono sempre similarità 1.0 e guidano l'espansione.

Embedding Incrementale

Memorizziamo nella cache gli embedding sia per le frasi che per i testi di ricerca dei filtri. Quando arrivano nuove query:

  1. Carica gli embedding esistenti
  2. Genera embedding solo per le nuove frasi
  3. Aggiungi alla cache

Questo evita di rigenerare embedding per dati invariati. Vedi Embedding Strategy per i dettagli.

Risoluzione Collisioni

Dopo il completamento della corrispondenza per similarità, risolviamo le collisioni tra i filtri Memoria e Storage:

Disambiguazione basata su numero:

  • Per frasi ambigue contenenti numeri: se la frase ha valore ≤ 64, mantieni solo per Memoria; se > 64, mantieni solo per Storage

  • Questo impedisce a "16gb" di corrispondere a filtri Storage SSD e a "512gb" di corrispondere a filtri Memoria

I qualificatori espliciti sovrascrivono le regole:

  • Frasi con parole chiave "ram", "memory", "cpu", "processor" → Solo Memoria

  • Frasi con parole chiave "ssd", "storage", "disk", "nvme", "drive" → Solo Storage

  • Esempio: "processore 8gb" si mappa a Memoria nonostante sia numerico

Termini Vaghi:

  • Scarta frasi come "connettività", "audio", "display" che corrispondono a più filtri non correlati

Formato di Output

Le mappature finali sono ordinate per similarità (più alta prima), poi per lunghezza (più corta prima):

{
  "Main Memory:16": [
    {"phrase": "16gb ram", "similarity": 1.0},
# ... (dettagli implementativi omessi)

Integrazione con l'Estrazione Filtri

Queste mappature alimentano l'algoritmo di estrazione dei filtri:

  1. Arriva una query: "mini pc con 16gb di ram"
  2. Estrai frasi: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
  3. Abbina frasi ai filtri usando le mappature
  4. Restituisci filtri: {"Form Factor": ["Mini PC"], "Main Memory": ["16"]}

Vedi Algoritmo Estrazione Filtri per i dettagli.

Storage e Distribuzione

Le mappature di frasi sono memorizzate come file JSON e utilizzate in tutto il sistema:

  • File mappature base: Generato nello Step 3a, contiene frasi basate su regole

  • File mappature espanso: Generato nello Step 4, contiene i risultati dell'espansione semantica

Le mappature espanso sono utilizzate da:

  • Generazione pagine query: Estrae filtri dal testo della query

  • Servizio di ricerca: API di estrazione filtri in tempo reale

  • Corrispondenza prodotti: Filtra prodotti in base ai filtri estratti

Caratteristiche di Performance

Generazione Base (Step 3a):

  • Il tempo di elaborazione scala con il numero di valori dei filtri

  • Genera un gran numero di varianti di frasi base

  • L'uso della memoria rimane moderato durante la generazione

Espansione Semantica (Step 4):

  • Il tempo di elaborazione scala con il volume di query e la dimensione degli embedding

  • L'output contiene significativamente più frasi rispetto alla generazione base

  • I requisiti di memoria aumentano a causa dello storage degli embedding

L'espansione è limitata dalla CPU a causa del calcolo della similarità. Usare NumPy con accelerazione BLAS accelera significativamente le operazioni matriciali.

Integrazione con la Pipeline SEO

La generazione delle mappature di frasi è Step 3a e 4 nella pipeline SEO:

  1. Step 0: Embed Source Data - Prodotti, parti, articoli
  2. Step 1: Fetch Queries - GSC, Google Ads, live, Algolia
  3. Step 2: Combine Queries - Unisci tutte le fonti
  4. Step 3a: Genera Mappature Frasi Base ← Ti trovi qui
  5. Step 3b: Embed Queries - Converti in vettori
  6. Step 4: Espandi Mappature Frasi ← Ti trovi qui
  7. Step 5: Cluster Queries - Raggruppa in pagine
  8. Step 6: Match Products - Corrispondenza query-prodotto
  9. Step 7: Build Query Pages - Genera HTML
  10. Step 8: Generate Related Searches - Trova query correlate
  11. Step 11: Migrate to Valkey - Carica nel servizio di ricerca

Vedi Panoramica Pipeline SEO per il flusso completo.

Perché Due Step?

Generazione base (Step 3a) fornisce:

  • Precisione: Frasi basate su regole corrispondono esattamente a ciò che ci aspettiamo

  • Copertura: Le permutazioni assicurano che tutti gli ordini di parole siano coperti

  • Controllo: Regole specifiche per caratteristica gestiscono la conoscenza del dominio

Espansione semantica (Step 4) fornisce:

  • Flessibilità: Scopre frasi che non avevamo anticipato

  • Linguaggio utente reale: Impara dalle query di ricerca effettive

  • Sinonimi: Trova frasi equivalenti ("16 gigabyte" per "16gb")

Insieme, bilanciano precisione e recall.

Riferimenti

Concetti Tecnici

Documentazione Modelli

Articoli Correlati

Riepilogo

Generiamo le mappature frase-filtro in due step:

Step 3a (Generazione Base):

  • Genera tutte le permutazioni di heading, key, value, unit

  • Applica regole specifiche per caratteristica (serie processore, memoria, storage, form factor)

  • Aggiungi suffissi di porta per caratteristiche di connettività

  • Whitelist di valori autonomi per caratteristiche specifiche

  • Output set di frasi base da regole

Step 4 (Espansione Semantica):

  • Estrai frasi n-