Mejorando la búsqueda de productos con Machine Learning

Michel Helal
PeYa Tech
Published in
8 min readNov 28, 2022

--

De camino a casa al término de la jornada, una persona que vive en una ciudad cualquiera de Latinoamérica realiza la compra de la semana en el supermercado más cercano. Frecuentemente ésta persona deberá recurrir a un empleado que la ayude a encontrar algún ítem de su lista entre las góndolas abarrotadas de productos.

Otra persona, esta vez usuaria de PedidosYa, realiza estas mismas compras desde la comodidad de su hogar. El problema al que se enfrentará, intentando buscar alguno de los productos que necesita entre los miles disponibles, será idéntico. Lo que cambiará es que “el ayudante” ahora no será un ser humano, sino un buscador.

La frecuencia con la que se repite esta historia en la App de PedidosYa queda de manifiesto si observamos que, de todas las compras de supermercado que se hacen, el 30 % de las mismas son a través del buscador. Hablando en números absolutos, el último mes (desde la fecha de publicación de este post) en nuestra App se han registrado cerca de 30 millones de búsquedas.

En anteriores entradas del blog PedidosYa Tech(1,2) les contamos acerca de cómo el equipo de Search Relevance optimiza los Rankings en beneficio de todo el ecosistema de PedidosYa. En este nuevo post les contamos cómo trabajamos en hacer del buscador de PedidosYa, el mejor aliado para nuestros usuarios.

PedidosYa Market: el desafío de buscar en un supermercado virtual

Cuando un usuario escribe una consulta, el buscador debe colocar los elementos más relevantes en las primeras posiciones, en otras palabras debe tener una alta precision. Por otro lado, es importante devolver un número mínimo de productos que aseguren diversidad pues los gustos de los usuarios son variados, dicho de otra forma, el buscador debe tener un alto recall.

Anteriormente, el buscador de productos en mercados de PedidosYa se basaba principalmente en análisis sintáctico. Este popular método otorga importancia a los resultados de búsqueda que tengan coincidencias exactas con lo que los usuarios escriben. A menudo para tener algo de flexibilidad se incluye una cláusula de Fuzzy Match, que admite coincidencias entre palabras aún si algunos caracteres no coinciden. Es muy simple de implementar pero presenta algunos inconvenientes como veremos más adelante.

El enfoque puramente sintáctico tiene algunas desventajas, ilustramos gráficamente algunas de las que nos encontramos en el Market de PedidosYa (Fig 1):

Fig 1. Principales problemas que encontramos en el buscador del Markets en PedidosYa

La primera imagen a la izquierda muestra que cuando el término buscado es poco frecuente o muy específico corremos el riesgo de que el buscador directamente no devuelva nada (recall = 0) . Esto se traduce en una experiencia poco feliz para el cliente, que podría subsanar devolviendo por ejemplo productos relacionados o similares.

En la imagen central vemos el resultado de utilizar Fuzzy Match de forma no controlada. Hay palabras de un idioma que sintácticamente están muy cerca, ej: entraña — entradas, pero semánticamente no tienen nada que ver. El riesgo al usarlo es que podemos estar devolviendo resultados inesperados, y poco relacionados con lo que se busca.

Finalmente en la tercera imagen a la derecha podemos constatar las dificultades que aparecen para mostrar resultados relevantes en las primeras posiciones. (alta precision) . Un usuario buscando “leche” esperaría encontrar seguramente “1 litro de leche” o una “leche descremada”, pero un buscador con enfoque puramente sintáctico es incapaz de capturar esta intención.

Un problema, distintas soluciones

Tener una alta precision es quizás el reto más desafiante y uno de los principales objetivos cuando se construye un buscador . Para tal fin los motores de búsqueda más extendidos en la industria (ej: Elasticsearch, OpenSearch , Apache Solr, Vespa) cuentan por defecto con un modelo basado en estadística de términos (Okapi BM25) y además con un lenguaje simbólico para consultas. Pero a menudo estas características no son suficientes para capturar la intención de búsqueda del usuario.

Distintos enfoques se han propuesto para dotar a los motores de búsqueda de la suficiente inteligencia para capturar esta intención. Hoy en día son muy populares los que se basan en la creación de espacios de embeddings. Los embeddings son espacios vectoriales en los cuales quedan codificadas palabras, párrafos y hasta documentos enteros.

Una aplicación de estos embeddings es crear bases de datos con sinónimos para búsquedas. Cuando un usuario busca algún producto, de no encontrar nada podría probarse con alguna de las queries alternativas para ver si hay suerte. Los sinónimos semánticos también son útiles para capturar y corregir typos, así como también para mejorar la calidad de los resultados.

Otra técnica más extrema, que está ganando fuerza con el auge del deep learning se conoce como Neural Search. En ella, tanto la consulta del usuario como los productos disponibles se codifican en vectores en el espacio de embeddings, y luego podemos utilizar herramientas matemáticas clásicas para traer los resultados más cercanos. La promesa es que estos resultados serán más relevantes dado que la codificación en espacios vectoriales con alta dimensión logra capturar mucho más acerca del contenido semántico tanto de las consultas como de los ítems buscados.

Inshop Search en PedidosYa : un enfoque híbrido

El enfoque que dimos a nuestra solución combina técnicas variadas para atacar los desafíos que planteamos más arriba desde una perspectiva híbrida, la cual ha demostrado ser a lo largo de la historia de los buscadores, la mejor alternativa(3).

Cuando el usuario ingresa una consulta en un Market, esta pasa por tres etapas antes de llegar a la base de datos (Fig. 2):

Fig 2. El flujo de una consulta de productos en la app de PedidosYa

Query understanding

El enfoque de esta etapa es entender más acerca del significado de lo que él usuario escribe. El proceso incluye:

  • Category Inference: calcular a qué categorías dentro de las definidas por el Market es más probable que la búsqueda de usuario pertenezca. Para esto utilizamos un modelo probabilístico basado en las categorías de los productos elegidos luego de cada búsqueda.
  • Entity recognition: conocer si el usuario está buscando una marca específica puede mejorar la experiencia tanto para usuarios como para partners. Utilizamos para este fin programación basada en reglas y una base de datos propia con las brands de los proveedores.
  • Ambiguity resolution: cada lenguaje tiene sus particularidades y el castellano no es una excepción. Por ejemplo en la búsqueda “agua con gas” el término “con” es muy importante y no debiera tener buen score de match con un producto “agua sin gas”, por más que los términos “agua” y “gas” estén presentes. Este paso también se realiza de forma programática.

Query enrichment

La etapa de query enrichment es donde agregamos contenido a la query original del usuario utilizando el conocimiento que nos proveen los datos.

Basándonos en un paper de Mihahlo Grovic y sus colaboradores de Yahoo(4) generamos un espacio de embeddings con las búsquedas de los usuarios mediante una técnica conocida como query2vec (Fig. 3). La idea subyacente es que las búsquedas de usuarios que seleccionaron un mismo producto están semánticamente relacionadas y podemos utilizarlas como sinónimos.

Fig 3. Esquema de query2vec. Entrenamos los modelos con el algoritmo de aprendizaje que propone word2vec. Las búsquedas similares quedan juntas en el espacio de embeddings

El proceso híbrido se completa mediante una serie de sinónimos que combinan reglas manuales, técnicas estadísticas y de Natural Language Processing . Se incorporan de esta manera hasta 10 sinónimos semánticos para cada query de usuario:

  • 7 generados por Machine Learning (query2vec)
  • 3 mediante un proceso mixto que toma en cuenta: popularidad de los productos elegidos, la tendencia reciente y también aportes de expertos de negocios locales.

Lejos de ser caprichoso, este split 7–3 fue el que mostró mejores resultados de precision y recall luego de varias iteraciones en las cuales se probaron distintas combinaciones. A modo de ejemplo, para la búsqueda “agua” obtenemos los sinónimos: {“agua mineralizada sin gas”, “agua mineralizada con gas”, “agua de mesa sin gas”, “agua mineral”, “agua sin gas”, “agua con gas”, “soda”, “bidon de agua”, “agua mineral 1.5l”, “agua sin gas 600ml”}

Query reformulation

Finalmente con la información que obtuvimos en las etapas 1 y 2 reformulamos la consulta utilizando el lenguaje DSL específico de la base de datos dedicada OpenSearch. En esta etapa aplicamos un proceso de estratificación según la categoría de la query (Fig 4). Buscamos generar virtualmente el efecto “góndola” , es decir tener los productos agrupados para hacer su inspección visual más intuitiva. La reformulación también utiliza los sinónimos de forma inteligente buscando coincidencias exactas para tener alta precision pero luego relajando la condición para no incurrir en un bajo recall.

Fig 4. Proceso de query reformulation. Los sinónimos son ponderados poniendo los más específicos primero. El proceso está clusterizado y se repite para cada categoría. Finalmente el output queda estratificado por categorías.

Los productos son ordenados según la popularidad de su categoría de forma decreciente. Como un ejemplo tangible del efecto que genera la categorización en la experiencia del usuario veamos cómo quedan agrupados los productos de la búsqueda “agua” dentro de un PedidosYa Market en Buenos Aires:

Fig 5. El efecto “góndola” generado por la estratificación en categorías mejora la experiencia de browsing.

En la Fig. 5 podemos ver claramente como los productos se ordenan en “góndolas” , donde primero encontramos las aguas, luego las aguas saborizadas, luego aguas tónicas (cat: refrescos) y finalmente otros productos que contienen la palabra agua pero no pertenecen a estas categorías.

Conclusión y perspectivas a futuro

Combinar Machine Learning con técnicas tradicionales en nuestro buscador potenció el entendimiento de la intención de compra de nuestros usuarios. Esto a su vez aumentó la relevancia de los productos devueltos ante cada búsqueda, mejorando la experiencia sustancialmente.

Al realizar un A/B test en Argentina contra nuestra estrategia de control, usando en variación estas nuevas features, obtuvimos mejoras sustanciales. Logramos un aumento de la tasa de conversión (a.k.a. CVR) del 2.49% y logramos bajar en un 15% la posición del producto seleccionado en la lista de resultados luego de cada búsqueda (lo que es equivalente a aumentar la precision de la respuesta del buscador para que nuestros usuarios puedan encontrar con facilidad los productos de su interés), por mencionar las más importantes.

Con la nueva versión mejoramos la experiencia del usuario y logramos impacto en el negocio. Pero aún queda camino por recorrer. Un buscador siempre es perfectible y estamos ávidos de explorar nuevos horizontes. Esto no se limita a la incorporación de nuevas técnicas como Neural Search, sino que incluye también estrechar lazos de cooperación con los expertos de los Markets en los quince países donde hoy PedidosYa tiene presencia en Latinoamérica.

Referencias:

  1. Peya Tech en Medium — En busca de la mejor estrategia de Ranking: experimentación y confirmación dinámica
  2. Ranking: conciliador entre los intereses del usuario y las necesidades de los comercios.
  3. Deep learning for search. Tommaso Teofili
  4. Scalable Semantic Matching of Queries to Ads in Sponsored Search Advertising. Mihajlo Grbovic et al.

--

--

Michel Helal
PeYa Tech

I am a Lead Data Scientist at PedidosYa, specialized in search and relevance IA initiatives. I have background in Physics, but I am curious about everything.