¿Todavía no conoces Elasticsearch? Únete a nuestro webinar de los Primeros pasos con Elasticsearch. También puedes iniciar una prueba gratuita en el cloud o prueba Elastic en tu máquina ahora mismo.
Introducción
Muchos sitios web de comercio electrónico están interesados en mejorar su experiencia de búsqueda de recetas. La búsqueda semántica, cuando se aplica correctamente, permite a los clientes encontrar rápidamente los ingredientes necesarios basar en consultas más naturales, como "algo para Santo Valentín" o "comidas de Acción de Gracias".
En este artículo, demostraremos cómo usar Elasticsearch para implementar una búsqueda semántica que soporte este tipo de consultas. Configuraremos un índice para almacenar el catálogo de ingredientes y productos de un supermercado y demostraremos cómo este índice puede emplear para mejorar la búsqueda de recetas. A lo largo del artículo, explicaremos cómo crear esta estructura de datos y aplicar técnicas de procesamiento de lenguaje natural para proporcionar resultados relevantes alineados con la intención del cliente.
Todo el código presentado en este artículo fue desarrollado en Python y está disponible en GitHub. Puedes acceder al repositorio para revisar el código fuente, hacer ajustes según sea necesario e implementar las soluciones directamente en tu entorno de desarrollo.
Inicio de la implementación de la búsqueda semántica
Para empezar a implementar la búsqueda semántica, primero necesitamos definir el modelo del lenguaje natural. Elastic proporciona su propio modelo, ELSER, pero también ofrece soporte para integrar modelos de PLN de varios proveedores, como Hugging Face. Esta flexibilidad te permite elegir la opción que mejor se adapte a tus necesidades.
En este artículo, emplearemos ELSER, que reduce la complejidad de desplegar y gestionar modelos de PLN. Además, Elastic ofrece la función semantic_text , que simplifica mucho el proceso. Con semantic_text, todo el proceso de generación de incrustaciones se vuelve sencillo y automatizado. Simplemente necesitas definir un punto de inferencia y especificar el campo que recibirá las incrustaciones en tu mapeo de índice. Durante la indexación de documentos, se generarán incrustaciones que se asociarán automáticamente con el campo especificado.
Pasos de preparación
A continuación se muestran los pasos para crear un índice con soporte para búsqueda semántica. Siguiendo estas instrucciones, tendrás un índice configurado y listo para búsquedas semánticas:
- Crea el punto de inferencia.
- Crea el índice, configurando el campo de descripción como semantic_text para que pueda recibir las incrustaciones.
- Indexa los datos en el índice de catálogos de supermercados, que almacenará un catálogo de productos. Este catálogo se obtuvo a partir de un conjunto de datos disponible aquí.
Aplicación de la búsqueda semántica en supermercados
Ahora que tenemos el índice lleno de datos de productos de supermercados, estamos probando y validando consultas para mejorar los resultados de búsqueda usando búsqueda semántica. Nuestro objetivo es ofrecer una experiencia de búsqueda más inteligente que entienda el contexto y la intención del usuario, ofreciendo resultados más relevantes y precisos.
Desafíos resueltos por la búsqueda semántica
Basándonos en el catálogo de productos, exploremos cómo la búsqueda semántica puede transformar la experiencia de búsqueda en supermercados abordando cuestiones de vocabulario y contexto con las que la búsqueda léxica tradicional a menudo tiene dificultades.
1. Interpretación de intenciones culinarias
Problema 01: Un cliente puede buscar "marisco para asar", pero un sistema de búsqueda léxica puede no comprender completamente la intención detrás de la consulta. Podría no identificar todos los productos de marisco aptos para asar, devolviendo solo aquellos con el término exacto "marisco" o "parrilla" en el título del producto.
Primero, realizaremos una búsqueda léxica y analizaremos los resultados. Luego, haremos lo mismo con una búsqueda semántica, comparando los resultados del mismo término de búsqueda.
Consulta de búsqueda léxica
Resultados:
| Tipo de búsqueda | Nombre | Puntaje |
|---|---|---|
| Léxico | Pescado del Noroeste del Cangrejo de las Nieves Bairdi de Alaska | 10.453125 |
| Léxico | Salsa Gourmet original del señor Yoshida. | 7.2289705 |
| Léxico | Pack Premium de Mariscos - 20 piezas | 7.1924105 |
| Léxico | Pargo rojo americano - entero, de frente, limpiado | 6.998647 |
| Léxico | Pinzas y brazos de langosta, capturados en la naturaleza sostenible | 6.438654 |
La búsqueda léxica demostró algunos productos de marisco aptos para asar, como el pargo rojo americano y el cangrejo de nieve bairdi de Alaska de pesca del noroeste. Sin embargo, la búsqueda léxica devolvía productos menos relevantes en la parte superior de la lista, como la salsa Mr. Yoshida, que no es un producto de marisco sino una salsa de carne, lo que sugiere que el algoritmo léxico tuvo dificultades para comprender completamente el contexto de "para asar".
Solución de búsqueda semántica
Empleamos una consulta que combina el término "marisco" con contextos de preparación como "asar" para devolver una lista completa de opciones, como filetes de pescado, gambas y vieiras, que son ideales para asar a la parrilla, aunque las palabras "parrilla" o "marisco" no aparezcan directamente en el nombre del producto. Esto cerciora que los resultados de búsqueda se alineen más estrechamente con la intención del cliente.
Consulta búsqueda semántica:
| Tipo de búsqueda | Nombre | Puntaje |
|---|---|---|
| Semántica | Pescado branzino completamente de cabeza | 16.175909 |
| Semántica | Bacalao negro de Alaska (pez sable) | 15.855331 |
| Semántica | Pargo rojo americano - entero, de frente | 15.454779 |
| Semántica | Pescado del Noroeste del Cangrejo de las Nieves Bairdi de Alaska | 15.855331 |
| Semántica | Pargo rojo americano - entero, de frente | 15.3892355 |
La búsqueda semántica no solo devolvía productos directamente relacionados con el término "marisco", sino que también entendía el contexto de "asar", sacando pescado entero y filetes adecuados para asar. La clave aquí es la precisión de los resultados, que incluían opciones de pescado entero como branzino y bacalao negro de Alaska, ambos comúnmente usados para asar a la parrilla.
Problema 02 : Muchos clientes buscan soluciones rápidas y fáciles para cenar tras un largo día de trabajo, usando términos como "comidas fáciles entre semana". La búsqueda léxica tradicional puede no captar completamente el concepto de comidas rápidas, ya que a menudo se centra solo en productos que incluyen la palabra "easy" en su nombre.
Como hicimos en el problema anterior, comenzaremos realizando una búsqueda léxica. Luego de eso, aplicaremos una solución usando búsqueda semántica.
Consulta de búsqueda léxica
Resultados:
| Tipo de búsqueda | Nombre | Puntaje |
|---|---|---|
| Léxico | Etiquetas de dirección Avery Easy Peel, 4200 | 8.017723 |
| Léxico | Omeals Comidas de Emergencia/Portátiles con Autocalentamiento 32 | 6.592727 |
| Léxico | Pesquero costero atún amarillo en cubos | 5.836883 |
| Léxico | Espuma de 12 oz de súper peso | 5.8116536 |
| Léxico | Servilleta de Vanity Fair para el día a día, 2 capas, 110 | 5.752989 |
La búsqueda léxica devolvió resultados mucho menos relevantes, incluyendo elementos completamente ajenos a las comidas, como las etiquetas de dirección Avery Easy Peel y las servilletas cotidianas de Vanity Fair. Estos productos no satisfacen la necesidad del usuario de comidas rápidas. Aunque la búsqueda léxica sí devolvió un producto útil (Omeals Self Heating Emergency Meals), otros resultados, como servilletas y etiquetas, solo coincidían con las palabras "fácil" o "noche de semana" en sus descripciones, sin abordar realmente la intención del usuario de una solución de comida rápida.
Solución de búsqueda semántica
Implementamos una consulta que entiende la intención detrás de comidas rápidas y sencillas. Asocia productos que pueden preparar rápidamente, como carnes precocinadas, pasta congelada o kits de comida, aunque no incluyan explícitamente la palabra "fácil" en el nombre. Este enfoque garantiza que los clientes encuentren las opciones más adecuadas para cenas rápidas entre semana, atendiendo la necesidad de comodidad.
Consulta a la búsqueda semántica
Resultados:
| Tipo de búsqueda | Nombre | Puntaje |
|---|---|---|
| Semántica | Omeals Comidas de Emergencia/Portátiles con Autocalentamiento 32 | 14.610006 |
| Semántica | Nissin, Cup Noodles, Gambas, 2,5 oz | 13.751424 |
| Semántica | Mezcla de gofres y panqueques sin gluten de Namaste | 13.73376 |
| Semántica | Papa de Idaho, papa hashbrowns Golden Grill | 12.549422 |
| Semántica | Nissin, Fideos en Taza, Pollo, 24-Count | 12.034527 |
La búsqueda semántica devolvió productos claramente relacionados con comidas rápidas y convenientes, como fideos instantáneos (Cup Noodles), papa precocinadas y mezclas para panqueques, que son opciones típicas para cenas fáciles entre semana. Esto demuestra que la búsqueda semántica puede captar el concepto detrás de la frase "comidas fáciles entre semana", captando la intención del usuario de encontrar comidas rápidas y convenientes. Curiosamente, productos de otras categorías, como "refrescos", también pueden incluir cuando sea relevante en el contexto (por ejemplo, bebidas para acompañar las comidas).
2. Términos regionales y variaciones de vocabulario
Problema: Un cliente puede buscar "refresco", mientras que otro cliente podría usar "refresco" para el mismo producto. La búsqueda léxica tradicional no reconoce que ambos términos se refieren al mismo elemento.
Consulta de búsqueda léxica
Resultados:
| Tipo de búsqueda | Nombre | Puntaje |
|---|---|---|
| Léxico | Prime Hydration+ Sticks mezcla de bebidas electrolíticas | 14.492869 |
| Léxico | Capri Sun, 100% jugo, paquete variado | 12.340851 |
| Léxico | Bebida energética Joyburst, Frose Rose, 12 | 11.839179 |
| Léxico | Kellogg's Pop-Tarts, canela glaseada con azúcar moreno | 9.97788 |
| Léxico | Mini barras Kind, pack variado, 0,7 | 9.336912 |
La búsqueda léxica se centra en coincidencias exactas de palabras. Aunque devolvió productos como Prime Hydration y Capri Sun, la coincidencia directa con el término "pop" también llevó a resultados irrelevantes, como los Kellogg's Pop-Tarts, que son un tentempié y no una bebida. Esto pone de manifiesto cómo la búsqueda léxica puede ser menos efectiva cuando un término tiene múltiples significados o puede ser ambiguo.
Solución de búsqueda semántica
En consultas semánticas, podemos superar el problema de las variaciones de vocabulario que la búsqueda léxica no aborda. Al ampliar los términos de búsqueda, podemos obtener resultados basados en el significado contextual, proporcionando respuestas más relevantes y completas.
Consulta:
Resultados:
| Tipo de búsqueda | Nombre | Puntaje |
|---|---|---|
| Semántica | Variedad de refrescos Prebióticos de 12 oz de Olipop | 14.776867 |
| Semántica | Bai Antioxidant Cocofusion, Pack de variedades, 18 | 14.663253 |
| Semántica | Bebida energética Monster, Zero Ultra, 24 | 14.486348 |
| Semántica | Joyburst Variedad de Energía, 12 fl oz | 14.007214 |
| Semántica | Bebida energética Joyburst, Frose Rose, 12 | 13.641038 |
La búsqueda semántica devuelve productos que coinciden directamente con el concepto de "pop" como sinónimo de "refresco" (como Olipop Prebiotics Soda), aunque el término exacto "pop" no esté presente en el nombre del producto. La búsqueda entendió la intención del usuario — una bebida refrescante y baja en azúcar — y pudo devolver productos relevantes, incluyendo opciones como refrescos prebióticos (Olipop) y bebidas energéticas sin azúcar (Monster Energy Drink).
Conclusión
La implementación de la búsqueda semántica en el contexto de supermercados demostró ser muy eficaz para entender consultas complejas como "marisco para asar" y "comidas fáciles entre semana". Este enfoque nos permitió interpretar la intención del usuario con mayor precisión, devolviendo productos altamente relevantes.
Al usar Elasticsearch y simplificar el proceso con ELSER, pudimos aplicar la búsqueda semántica de forma rápida y eficiente, mejorando significativamente los resultados y proporcionando una experiencia de compra más ágil y dirigida. Esto no solo optimizó el proceso de búsqueda, sino que también aumentó la relevancia de los resultados ofrecidos a los clientes.
Referencias
Modelo ELSER:
https://www.elastic.co/guide/en/elasticsearch/reference/current/put-inference-api.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/infer-service-elser.html
Texto semántico:
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html
Conjunto de datos:
https://www.kaggle.com/datasets/bhavikjikadara/grocery-store-dataset?select=grocerydataset.csv
Búsqueda semántica:
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search-semantic-text.html




