Mapeos de Frase a Filtro: Búsqueda Semántica para Filtros de Producto
Este artículo explica cómo generamos y expandimos los mapeos de frase a filtro que impulsan nuestro sistema de extracción de filtros. Estos mapeos conectan frases en lenguaje natural provenientes de consultas de búsqueda con filtros de producto estructurados.
El Problema: Extraer Filtros del Lenguaje Natural
Cuando los usuarios buscan "mini pc with 16gb ram", necesitamos extraer:
-
Factor de Forma: Mini PC
-
Memoria Principal: 16
Pero los usuarios expresan la misma intención de muchas maneras:
-
"16gb ram mini pc"
-
"mini computer 16 gb memory"
-
"small pc 16gb"
-
"compact desktop with 16 gigs"
Necesitamos un sistema que mapee todas estas variaciones de frases a los valores de filtro correctos.
Proceso de Dos Pasos
Generamos los mapeos de frases en dos pasos:
- Paso 3a: Generar frases base a partir de las características del producto usando permutaciones y reglas específicas de cada característica
- Paso 4: Expandir con similitud semántica usando embeddings
Este enfoque híbrido combina la precisión basada en reglas con la flexibilidad semántica.
Paso 3a: Generación de Frases Base
Metadatos de Características
Cada característica del producto tiene metadatos en la secuencia de características:
-
Encabezado: Nombre de la categoría (ej., "Processing" para características de procesador)
-
Unidad: Unidad de medida (ej., "GB" para memoria, "GHz" para frecuencia)
Estos metadatos guían la generación de frases.
Generación Basada en Permutaciones
Para cada valor de característica, generamos todas las permutaciones de:
-
Encabezado: "processor"
-
Clave de característica: "series"
-
Valor: "i5"
-
Unidad: (ninguna para series)
Esto produce:
-
"processor series i5"
-
"series processor i5"
-
"i5 processor series"
-
"i5 series processor"
-
"processor i5"
-
"series i5"
-
"i5"
Todas las permutaciones aseguran que coincidamos con las consultas independientemente del orden de las palabras.
Combinaciones de Valor + Unidad
Para características con unidades (memoria, almacenamiento, frecuencia), generamos variantes con y sin espacio:
-
"16 gb" (con espacio)
-
"16gb" (sin espacio)
Estas se combinan con otros componentes:
-
"16gb ram"
-
"ram 16gb"
-
"processor 16gb"
Reglas de Sufijos para Puertos
Para características de conectividad (USB, HDMI, DisplayPort), añadimos sufijos de puerto:
-
"usb port"
-
"usb ports"
-
"2 usb ports"
-
"hdmi port"
Esto coincide con consultas como "mini pc with 2 hdmi ports".
Reglas Específicas por Característica
Cada tipo de característica tiene generación de frases personalizada:
Serie de Procesador (i3, i5, N-series):
-
Las designaciones de procesadores Core generan variantes: nombre del fabricante, marca del núcleo, formas combinadas
-
Los procesadores de la serie N (N100, etc.) crean patrones de combinación similares
-
Cada uno genera múltiples permutaciones con "processor"
Memoria Principal:
-
Los valores numéricos generan variantes de GB con y sin espacio ("16gb", "16 gb")
-
Se añaden automáticamente los calificadores "ram" y "memory" ("16gb memory", "16 gb ram")
Almacenamiento SSD:
-
Los valores numéricos generan variantes de GB ("512gb", "512 gb")
-
Genera variantes de TB automáticamente para valores ≥ 1024 (ej., 1024GB → 1TB)
-
Se añaden automáticamente los calificadores "ssd" y "storage" ("512gb ssd", "512 gb storage")
Factor de Forma:
-
Mini PC → múltiples variantes incluyendo la forma sin espacio
-
All-in-One → "all in one", "aio", formas abreviadas
-
Thin Client → variantes con/sin espacio
-
Industrial PC → formas abreviadas y completas
Generación:
- Los valores numéricos de generación se convierten en: "12th gen", "12th generation", "gen 12"
Núcleos:
-
2 → "dual core"
-
4 → "quad core"
-
6 → "hexa core"
-
8 → "octa core"
-
Todos generan variantes "[n] core processor"
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"]
Lista Blanca para Valores Independientes
Solo características específicas permiten la coincidencia de valores independientes para evitar falsas coincidencias:
-
Serie: "i3", "i5", "N100" (pero no letras individuales)
-
Modelo de Procesador: "N100", "1335U"
-
Sistema Operativo: "Windows", "Linux", "Ubuntu"
-
Generación: "12th", "13th", "14th"
-
Marca de Procesador: "Intel", "ARM"
Por ejemplo, "2" no debería coincidir con "2 cores" cuando la consulta es "2 hdmi ports". La verificación de longitud evita que letras individuales o valores muy cortos y ambiguos coincidan de forma independiente. Las características con componentes de unidad explícitos, como Ethernet o puertos, solo generan combinaciones independientes cuando se califican con su unidad.
Prevención de Colisiones
Los valores de memoria y almacenamiento se superponen (ambos tienen 64, 128, 256, etc.). El Paso 4 aplica reglas de rango de valores para desambiguar:
-
≤ 64 GB: Memoria Principal (RAM)
-
≥ 128 GB: Almacenamiento SSD
-
Rango 65-127 GB: Se omite (ambiguo)
Las frases con calificadores explícitos ("ram"/"memory" o "ssd"/"storage") anulan esta regla y pueden coincidir con cualquier valor.
Además, los términos generales vagos que coinciden con demasiados filtros no relacionados se excluyen durante la resolución de colisiones mediante posprocesamiento: términos como "connectivity", "audio", "display", "processor" y "physical" crean demasiada ambigüedad entre múltiples facetas.
Paso 4: Expansión Semántica
Extracción de N-gramas
Extraemos frases frecuentes de consultas de búsqueda reales, desde palabras individuales (1-gramas como "mini") hasta secuencias más largas (hasta 6-gramas como "mini pc with 16gb ram ssd"). Solo se conservan las frases que aparecen al menos 3 veces. Este enfoque de filtrado reduce el ruido mientras preserva los patrones genuinos del lenguaje del usuario.
Generación de Textos de Búsqueda de Filtros
Para cada valor de filtro, generamos textos de búsqueda:
Memoria Principal: 16:
-
"16gb ram memory"
-
"16 main memory"
-
"main memory 16"
Almacenamiento SSD: 512:
-
"512gb storage ssd"
-
"512 ssd storage"
-
"ssd storage 512"
Estos textos de búsqueda representan el filtro en el espacio de embeddings.
Embedding y Coincidencia
Convertimos tanto las frases de consulta como los textos de búsqueda de filtros en embeddings, y luego calculamos la similitud coseno entre ellos. Las frases con puntuaciones de similitud por encima de un umbral configurado se añaden al mapeo de ese filtro.
Frases Semilla Manuales
Inyectamos semillas manuales de alta confianza antes de la expansión:
"Series:i5": [
"i5",
"core i5",
"intel i5",
"intel core i5",
"i5 processor",
"cpu i5",
]
Estas semillas representan frases centrales que sabemos que son correctas para cada filtro. Al incluirlas con puntuaciones de similitud máximas, guían al algoritmo de expansión para encontrar frases relacionadas con significados similares. Estas semillas siempre obtienen similitud 1.0 y guían la expansión.
Embedding Incremental
Almacenamos en caché los embeddings tanto de las frases como de los textos de búsqueda de filtros. Cuando llegan nuevas consultas:
- Cargar los embeddings existentes
- Generar embeddings solo para las frases nuevas
- Añadirlos a la caché
Esto evita volver a generar embeddings de datos sin cambios. Consulta Embedding Strategy para más detalles.
Resolución de Colisiones
Después de completar la coincidencia por similitud, resolvemos las colisiones entre los filtros de Memoria y Almacenamiento:
Desambiguación basada en números:
-
Para frases ambiguas que contienen números: si la frase tiene un valor ≤ 64, conservarla solo para Memoria; si es > 64, conservarla solo para Almacenamiento
-
Esto evita que "16gb" coincida con filtros de Almacenamiento SSD y que "512gb" coincida con filtros de Memoria
Los calificadores explícitos anulan las reglas:
-
Frases con palabras clave "ram", "memory", "cpu", "processor" → solo Memoria
-
Frases con palabras clave "ssd", "storage", "disk", "nvme", "drive" → solo Almacenamiento
-
Ejemplo: "processor 8gb" se mapea a Memoria a pesar de ser numérico
Términos vagos:
- Descartar frases como "connectivity", "audio", "display" que coinciden con múltiples filtros no relacionados
Formato de Salida
Los mapeos finales se ordenan por similitud (primero la más alta) y luego por longitud (primero la más corta):
{
"Main Memory:16": [
{"phrase": "16gb ram", "similarity": 1.0},
# ... (detalles de implementación omitidos)
Integración con la Extracción de Filtros
Estos mapeos impulsan el algoritmo de extracción de filtros:
- Llega la consulta: "mini pc with 16gb ram"
- Extraer frases: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
- Coincidir frases con filtros usando los mapeos
- Devolver filtros:
{"Form Factor": ["Mini PC"], "Main Memory": ["16"]}
Consulta Filter Extraction Algorithm para más detalles.
Almacenamiento y Distribución
Los mapeos de frases se persisten como archivos JSON y se utilizan en todo el sistema:
-
Archivo de mapeos base: Generado en el Paso 3a, contiene frases basadas en reglas
-
Archivo de mapeos expandidos: Generado en el Paso 4, contiene los resultados de la expansión semántica
Los mapeos expandidos son utilizados por:
-
Generación de páginas de consulta: Extraer filtros del texto de la consulta
-
Servicio de búsqueda: API de extracción de filtros en tiempo real
-
Coincidencia de productos: Filtrar productos por los filtros extraídos
Características de Rendimiento
Generación Base (Paso 3a):
-
El tiempo de procesamiento escala con el número de valores de filtro
-
Genera una gran cantidad de variantes de frases base
-
El uso de memoria se mantiene moderado durante la generación
Expansión Semántica (Paso 4):
-
El tiempo de procesamiento escala con el volumen de consultas y el tamaño de los embeddings
-
La salida contiene significativamente más frases que la generación base
-
Los requisitos de memoria aumentan debido al almacenamiento de embeddings
La expansión está limitada por CPU debido al cálculo de similitud. Usar NumPy con aceleración BLAS acelera significativamente las operaciones matriciales.
Integración con el Pipeline de SEO
La generación de mapeos de frases son los Pasos 3a y 4 en el pipeline de SEO:
- Paso 0: Embed Source Data - Productos, piezas, artículos
- Paso 1: Fetch Queries - GSC, Google Ads, live, Algolia
- Paso 2: Combine Queries - Fusionar todas las fuentes
- Paso 3a: Generate Base Phrase Mappings ← Estás aquí
- Paso 3b: Embed Queries - Convertir a vectores
- Paso 4: Expand Phrase Mappings ← Estás aquí
- Paso 5: Cluster Queries - Agrupar en páginas
- Paso 6: Match Products - Coincidencia consulta-producto
- Paso 7: Build Query Pages - Generar HTML
- Paso 8: Generate Related Searches - Encontrar consultas relacionadas
- Paso 11: Migrate to Valkey - Cargar en el servicio de búsqueda
Consulta SEO Pipeline Overview para el flujo completo.
¿Por Qué Dos Pasos?
La generación base (Paso 3a) proporciona:
-
Precisión: Las frases basadas en reglas coinciden exactamente con lo que esperamos
-
Cobertura: Las permutaciones aseguran que todos los órdenes de palabras estén cubiertos
-
Control: Las reglas específicas por característica manejan el conocimiento del dominio
La expansión semántica (Paso 4) proporciona:
-
Flexibilidad: Descubre frases que no anticipamos
-
Lenguaje real del usuario: Aprende de consultas de búsqueda reales
-
Sinónimos: Encuentra frases equivalentes ("16 gigs" para "16gb")
Juntos, equilibran precisión y exhaustividad.
Referencias
Conceptos Técnicos
-
Permutation - Wikipedia
-
Cosine Similarity - Wikipedia
-
N-gram - Wikipedia
-
NumPy - Documentación oficial
-
BLAS - Wikipedia
Documentación de Modelos
-
all-mpnet-base-v2 - Hugging Face
-
Sentence Transformers - Documentación oficial
Artículos Relacionados
-
Embedding Strategy - Cómo generamos embeddings
-
Filter Extraction Algorithm - Usar mapeos para extraer filtros
-
SEO Pipeline Overview - Arquitectura completa del pipeline
-
Query Clustering - Agrupar consultas similares
-
Product Matching - Coincidencia semántica
Resumen
Generamos mapeos de frase a filtro en dos pasos:
Paso 3a (Generación Base):
-
Generar todas las permutaciones de encabezado, clave, valor, unidad
-
Aplicar reglas específicas por característica (serie de procesador, memoria, almacenamiento, factor de forma)
-
Añadir sufijos de puerto para características de conectividad
-
Lista blanca de valores independientes para características específicas
-
Generar el conjunto de frases base a partir de reglas
Paso 4 (Expansión Semántica):
-
Extraer frases n-grama de consultas de búsqueda reales
-
Generar embeddings de frases y textos de búsqueda de filtros
-
Coincidir frases con puntuaciones de similitud por encima del umbral
-
Inyectar frases semilla manuales para guiar la expansión
-
Resolver colisiones entre memoria y almacenamiento
-
Generar el conjunto de frases expandido y desambiguado
El resultado es un mapeo exhaustivo que maneja tanto frases esperadas (mediante reglas) como variaciones inesperadas (mediante similitud semántica). Estos mapeos impulsan la extracción de filtros en páginas de consulta, búsqueda y coincidencia de productos.