Una nueva búsqueda que abre un mundo de posibilidades

Freepik nació con una misión simple, pero ambiciosa: ayudar a encontrar recursos visuales de la manera más fácil posible. Desde que comenzó esta aventura, hemos ido creciendo gracias a los comentarios de nuestros usuarios, creando contenido exclusivo y explorando nuevos territorios como las fotos, iconos (flaticon.es) y diapositivas (slidesgo.es). Nuestro sistema de búsqueda es el eje central de nuestra interfaz y la pieza clave de nuestro éxito. Cuando entrevistamos a nuestros usuarios siempre nos señalan lo importante que es para ellos que no dejemos de mejorar su experiencia de búsqueda. Si el buscador hace bien su trabajo, te puedes olvidar de él y centrarte en encontrar el contenido que buscas.

La última generación de nuestro buscador se basaba en textos. ¿Esto qué significa? Pues, que cada imagen está descrita por textos, en concreto, por un título y una serie de etiquetas. Para buscar contenido en nuestra página web simplemente tienes que escribir en el buscador lo que esperas encontrar, nosotros separamos las palabras de tu consulta y buscamos imágenes que contengan esos términos. Sencillo, ¿verdad?

Una década de mejoras

Con los años, los procesos de búsqueda se han vuelto cada vez más complejos y se ha dado más importancia a las palabras que funcionan bien con determinadas imágenes. Hemos lematizado estas palabras, es decir, hemos analizado su vocabulario y morfología y las hemos devuelto a su forma más básica (sin conjugar, en singular, unificando el género, etc.).

Las búsquedas de los usuarios se vieron enriquecidas con la información que daban las búsquedas posteriores a una búsqueda fallida. Tuvimos que hacer un esfuerzo extra para aprender a separar las palabras de ciertos idiomas, como el japonés, donde los límites no son tan obvios. Como nuestro objetivo es ofrecer a los usuarios la mejor experiencia posible, monitorizamos continuamente las etiquetas que son más populares en cada país y le damos prioridad, por ejemplo, a la etiqueta «asiático» para los usuarios de Japón. Durante los últimos 10 años hemos llevado a cabo una larga lista de mejoras que han aumentado nuestro principal KPI, el porcentaje de búsqueda que acaban en descarga (SDR).

Aunque, a pesar de nuestros esfuerzos, todavía había algunos resultados con los que no estábamos satisfechos.

La era de la IA

Normalmente, para llevar a cabo una gran mejora es necesario cambiar el enfoque. Tras años de estancamiento en la representación de textos e imágenes como embeddings  (ristras de números que representan un texto o una imagen), el 2020 trajo consigo un gran avance: el modelo CLIP de OpenAI. Con este modelo, tanto los textos como las imágenes compartían por fin el mismo espacio de embeddings. Por ejemplo, tanto el texto «perro» como la foto de un perro compartirían ahora el mismo embedding (una ristra de números) que los representaría en ese espacio. Ese embedding representaría el concepto «perro». 

Esto abrió la puerta a un mundo nuevo y lleno de posibilidades por las que estábamos muy emocionados.

Por ejemplo, si añadíamos un descodificador capaz de generar una descripción a partir de un embedding, bastaría con introducir una imagen para obtener automáticamente un título para esta.

Además, si era posible convertir un embedding de texto en representaciones visuales, podríamos construir un sistema que generase imágenes a partir de descripciones de texto. Eso es precisamente lo que hacen los novedosos generadores de imágenes basados en IA, como el que ofrecemos en Wepik. Pero no nos olvidemos de que donde primero queremos aplicar esta tecnología es en el motor de búsqueda. De esta manera, el texto se podría convertir en un embedding para luego buscar entre una colección de imágenes asociadas que tuvieran un embedding similar.

Un sistema de búsqueda basado en IA

Mi primera misión cuando llegué a Freepik consistió precisamente en explorar y mejorar el modelo CLIP para sustituir el motor de búsqueda que había en ese momento. Para ponernos en contexto, los usuarios de Freepik tienen preferencias implícitas cuando buscan contenido. Por ejemplo, los usuarios de Asia esperan encontrar a personas asiáticas en las imágenes que busquen sin tener que especificarlo. CLIP había sido entrenado con textos e imágenes sacadas de internet sin filtrar, así que era necesario perfeccionarlo para atender de forma adecuada las necesidades de nuestros usuarios.

Nuestra primera tarea fue establecer una métrica que llamamos SSET (Self Search Error by Text o Error de autobúsqueda por texto en español) para medir el éxito de un modelo de aprendizaje máquina al realizar búsquedas. Es una manera de ver cómo de efectivas son las búsquedas que hacen los usuarios, a la vez que nos ayuda a comparar el rendimiento de varios motores de búsqueda. Gracias a ella podíamos saber lo cerca que estaba una imagen de ser el primer resultado cuando la buscábamos por su propio título y, a partir de ahí, mejorar nuestro modelo. Comprobamos que un SSET más bajo se correlacionaba con una mayor calidad en los resultados de búsqueda, es decir, un SSET bajo indicaba un gran éxito en los resultados devueltos en la búsqueda. 

Utilizamos esta nueva métrica para evaluar el modelo CLIP estándar y detectamos algunos puntos débiles. Por ejemplo, el modelo funcionaba muy bien en inglés, era correcto en español y portugués, pero era nefasto en idiomas como el japonés o el coreano. Las búsquedas complejas no presentaban ningún problema, sin embargo, las más simples parecían resistirse. También mostraba resultados que contenían las palabras de búsqueda escritas dentro de las propias imágenes. En gran parte, todo esto se solucionó al entrenar el modelo con nuestros datos durante más tiempo.

Afinado de modelos

Comenzamos a entrenar varios modelos con CLIP y luego probamos con los magníficos modelos OpenCLIP. Entrenamos estos modelos con los textos que los usuarios habían escrito para buscar una imagen que habían descargado y nos sirvieron para mejorar el rendimiento en todos los idiomas que tenemos disponibles. En resumen, las palabras asociadas a una descarga exitosa eran nuestra mejor opción para entrenar el modelo.

El próximo paso era entrenar el modelo utilizando imágenes y sus correspondientes títulos. Esto supuso una mejora en las búsquedas en inglés, pero también mejoró los resultados de otros idiomas.

Fue entonces cuando llevamos a cabo el primer test real y probamos el nuevo motor de búsqueda con el 5 % del tráfico de Freepik. No fue nada mal, ya que las búsquedas más complejas devolvían magníficos resultados. Pero aunque habíamos conseguido grandes avances, éramos conscientes de que el motor de búsqueda todavía tenía margen de mejora respecto a las búsquedas cortas. 

La calidad de los resultados aumentó al añadir más información a las búsquedas como, por ejemplo, el país del usuario, la época del año o la cantidad total de imágenes, entre otras. Siempre que teníamos un modelo con el que nos sentíamos satisfechos, lo probábamos con un test AB sobre el tráfico real. Tras varios meses y cientos de entrenamientos, llegamos al punto en el que el nuevo motor de búsqueda había superado en rendimiento al motor de búsqueda anterior, salvo en los casos de las búsquedas que consistían en una sola palabra.

Hacia una búsqueda multilingüe

Hicimos unos ajustes y adoptamos el modelo XLM-Roberta que proporciona OpenCLIP. XLM-Roberta es un modelo que ha sido entrenado con decenas de idiomas e hizo que nuestra primera capa de ajustes fuera redundante. Fue una sorpresa descubrir que el entrenamiento con títulos estaba mejorando exclusivamente el soporte de idiomas y no las búsquedas en sí.

La capacidad de resolver búsquedas en decenas de idiomas era la ventaja más competitiva que ofrecía este nuevo modelo. Eso significaba que Freepik acababa de abrir una puerta hacia el éxito mundial.

La experiencia del usuario mejora si localizamos el contenido

Las búsquedas que se hacen a nivel mundial son muy similares, pero lo que esperamos como resultado puede variar considerablemente en función de nuestra ubicación. Teníamos que hacer algo al respecto, así que añadimos los países como señales en las búsquedas para que todas las personas de cualquier parte del mundo obtuvieran resultados acordes con su ubicación. Esto supuso un cambio muy relevante en búsquedas como «Día de la Independencia», «mujer», «comida» o «bandera». 

Algunos de los resultados que obtenemos al buscar «Día de la Independencia» desde EEUU y desde la India.

Las búsquedas experimentaron un salto de calidad prometedor, pero pronto nos dimos cuenta de que las búsquedas no habían mejorado en los países de los que apenas teníamos información. Entonces, tomamos la decisión de dividir los continentes en subcontinentes de acuerdo con la división subregional de la ONU e incorporar estos datos como señales y los resultados mejoraron considerablemente.

Hay ciertas búsquedas que claramente van a devolver resultados distintos según el país como «mapa» o «bandera». Sin duda, estos casos fueron los que más se beneficiaron de este cambio, muy por encima de la mejora media.

Búsquedas sin resultados: nuevas oportunidades para rescatarlas

El antiguo sistema de búsqueda se basaba en utilizar las palabras de los títulos y etiquetas asociadas a cada imagen. En concreto, cada imagen estaba representada por varias palabras y la tarea del buscador consistía en encontrar las imágenes etiquetadas con todas las palabras de la consulta. Pero los idiomas son muy ricos y cada uno tiene miles de sinónimos y metáforas, así que cuando hablamos de palabras, las posibilidades son infinitas. Además, una imagen puede ser descrita de muchas maneras distintas.

No era para nada inusual encontrar búsquedas perfectamente válidas que estaban compuestas por una combinación concreta de palabras tan específica que no había ninguna imagen etiquetada de tal forma. En este caso, la búsqueda devolvía 0 resultados, incluso en casos en los que sí había imágenes relevantes que ofrecer de nuestro catálogo. Ocurría algo parecido cuando un usuario cometía un error de escritura en una consulta.

Estas búsquedas que no obtenían resultados suponían el 5 % del total de búsquedas. La primera aplicación del nuevo motor de búsqueda con IA fue intentar rescatar estas búsquedas, ¡y vaya si lo hizo! ¿Un error tipográfico? No te preocupes, el nuevo modelo es capaz de entenderte. ¿Una búsqueda compleja que incluye una metáfora? La IA se encarga de todo. El nuevo sistema estuvo a la altura del desafío y tras unos ajustes experimentamos un aumento de las descargas totales de un 1 %.

La importancia de la relevancia

 

El revolucionario sistema CLIP lo cambió todo al vencer al sistema de búsqueda existente cuando abordaba las consultas más difíciles y largas. Pero, a pesar de su complejidad y potencia, este nuevo motor de búsqueda no era capaz de superar al antiguo en las búsquedas más sencillas. Por lo que se ve, la gente prefiere ser, ya que, un tercio de nuestras búsquedas están formadas por una única palabra.

El funcionamiento básico de CLIP es sencillo. Su arquitectura empareja con precisión las imágenes con sus descripciones, pero ¿qué ocurre si tienes una inmensa cantidad de fotos y todas tienen el mismo título? Nuestro catálogo tiene más de 7 millones de «fondos». ¿Cómo sabemos cuáles son los más relevantes para un usuario que busca «fondo»? El sistema CLIP no muestra los resultados en ningún orden concreto cuando hay varias imágenes que coinciden con esa búsqueda. Sin embargo, el orden en el que se muestran los resultados es crucial para el usuario.

Nos pusimos a trabajar en ello. En primer lugar, necesitábamos saber cómo de popular era una imagen en una búsqueda determinada. No íbamos a hacerlo más complicado de lo que era y buscamos una solución sencilla: podríamos considerar el número de descargas de una imagen como una variable proxy para medir la popularidad. 

Luego, necesitábamos una métrica de evaluación y escogimos el coeficiente de correlación de Spearman. Básicamente, con esta métrica podemos medir la correlación entre dos ordenaciones y ver si la ordenación que devuelve la búsqueda es similar la ordenación óptima. Si la correlación se acerca a 1, significa que los resultados de una búsqueda están ordenados de una forma muy similar a la óptima. En nuestro caso, el orden óptimo se calcula con base en los datos históricos de descargas para una búsqueda. También usamos otra métrica llamada Normalized Discounted Cumulative Gain (nDCG).

En el ejemplo anterior, la primera columna muestra la ordenación óptima y la segunda la que nos devuelve el modelo. Podemos confrontar las posiciones de cada imagen en cada ordenación y representarlas en una gráfica, como hemos hecho más abajo. El coeficiente de Spearman no es más que el coeficiente de correlación que resulta de esa confrontación.

El coeficiente de Spearman del ejemplo anterior es 0,257. Si el modelo fuese perfecto y generase un rango igual que el rango óptimo, el coeficiente sería 1. Cuanto más se acerque a 1 el valor de Spearman, mejor será la correlación entre la posición óptima y la posición según el modelo.

En este punto ya teníamos dos ingredientes esenciales para llevar a cabo cualquier proyecto de aprendizaje automático: una señal que perfeccionar y optimizar (las descargas), y una métrica de evaluación que midiese la eficacia con la que el modelo la capta (el coeficiente de Spearman). Era el momento de pasar al entrenamiento de modelos.

Aprendiendo la relevancia

Tuvimos que modificar la función de pérdida de CLIP para que pudiera aprender la relevancia de las imágenes. La función de pérdida por defecto considera que todos los pares de imagen-título de un mismo lote corresponden a entidades distintas e intenta separarlos.

Veamos cómo actúa la función de perdida por defecto cuando tenemos varias imágenes que encajan con la misma búsqueda dentro de un lote. 

Observamos que cinco búsquedas acabaron en descarga. La matriz de la derecha representa la relación entre las búsquedas y las imágenes que CLIP consideraría en su función de pérdida.  El valor 0 indica que la imagen no está relacionada con el texto, mientras que el valor 1 indica que sí lo está. Imagina que es un juego de emparejar cartas, una columna representa los textos y la otra representa las imágenes. Cada vez que las unes correctamente, haces una pareja.

No hace falta profundizar mucho para darnos cuenta de que la señal es confusa, ya que la matriz indica que cada imagen de coche rojo solo se asocia a la búsqueda «coche rojo» una sola vez. Esta información es contradictoria, pues todos ellos son coches rojos. Una solución sería modificar la matriz para representar en ella la proporción que tiene cada imagen de «coche rojo» y el número de descargas de cada imagen podría servir para calcular dicha proporción.

Si aplicamos esta información, observamos que uno de los coches ha sido descargado el doble de veces que los demás, así que, tiene el doble de peso respecto a la búsqueda «coche rojo». Con esta modificación, el modelo CLIP comenzó a aprender la relevancia de las imágenes. Otra acción determinante fue montar los lotes con sumo cuidado, ya que el modelo solo podría aprender la relevancia si varias imágenes de la misma búsqueda coincidían en un lote. Es decir, el modelo solo puede unir las piezas del puzzle si tiene varias imágenes relacionadas con la búsqueda con las que poder trabajar.

Pero estos casos no se dan tan a menudo cuando tienes millones de búsquedas distintas. La función de mezcla se modificó para asegurarnos de que la cantidad deseada de imágenes que pertenecen a la misma búsqueda se juntara en un lote. Observa el antes y el después de este cambio y cómo mejoró la relevancia para la búsqueda «queso»:

Se encontró que hay un tradeoff entre la relevancia y la precisión. Cuantas más imágenes que pertenecen a la misma búsqueda se meten en un lote, menos conceptos se contrastan por lote. De esta manera, el modelo aprende a diferenciar perfectamente entre los distintos «coches rojos», pero también es menos discriminatorio con conceptos diferentes. La solución pasaba por hacer lotes más grandes y entrenar el modelo durante más tiempo. Para superar este reto, aumentamos nuestra capacidad de cómputo como nunca lo habíamos hecho antes. 

Un miembro del equipo de Search descubrió una manera sorprendente de mejorar la relevancia: escalar los embeddings de las imágenes para que fuesen proporcionales a su relevancia global. Pero esto se merece su propia entrada aparte en el blog.

Evaluación del impacto en el servicio 

Aunque sabemos que todavía hay margen de mejora y quedan problemas que solucionar, ya estamos viendo los frutos de nuestro trabajo: la IA ha impulsado las capacidades del sistema de búsqueda y todavía hay mucho potencial por explotar. La probabilidad de éxito de una búsqueda es aproximadamente un 5 % mayor que antes para los usuarios registrados. Estamos experimentando un aumento del 84 % en las diferentes búsquedas diarias que acaban en descarga y un aumento del 43 % en la cantidad de recursos distintos que se descargan cada día, aumentando la utilidad efectiva de nuestro catálogo. Estas mejoras han abierto nuevas puertas a los usuarios, ya que ahora pueden acceder al contenido relevante que antes era imposible de encontrar.

Conclusión

La misión de Freepik consiste en facilitar la búsqueda de recursos gráficos y, tras 10 años perfeccionando constantemente un motor de búsqueda de gran calidad, optamos por un cambio más disruptivo y recurrimos a la inteligencia artificial. El equipo desarrolló las métricas SSET, entrenó modelos CLIP con nuestros propios datos y adoptó los modelos XLM-Roberta que permiten su uso con idiomas de todo el mundo. Mejoramos el sistema para que aprendiese la relevancia de las imágenes y tras modificar la función de perdida, aumentar el tamaño de los lotes y escalar los embeddings, ¿cuál fue el resultado? Un aumento del 5 % en la probabilidad de que una búsqueda acabe en descarga. Esto sí que es dar un paso (o cinco) adelante en la búsqueda de imágenes. En definitiva, la inteligencia artificial nos ha ayudado a desarrollar una tecnología de búsqueda innovadora y que mira al futuro.

Y esto solo es el principio. Tenemos todavía muchos retos por delante y estamos dispuestos a llevarlos todos a cabo. Estas son algunas de las mejoras que tenemos pendientes:

  • El sistema todavía no consigue distinguir muy bien ciudades que son visualmente parecidas. Piensa, por ejemplo, en imágenes de Granada y Málaga y lo complicado que puede ser diferenciarlas. Necesitamos incorporar la información del etiquetado para responder a estas consultas de la mejor manera posible.
  • Buscar por imagen: los usuarios usarán una imagen suya en la búsqueda y obtendrán otras parecidas de nuestra colección.
  • El historial de búsqueda del usuario no se está teniendo en cuenta. Sin duda, cuanto más conozcamos al usuario, mejor podremos ayudarle a encontrar lo que busca. Lo plantearemos de manera que el usuario pueda decidir si quiere activar esta opción de búsqueda personalizada o no.
  • Reordenación de resultados de búsqueda: hoy en día, ofrecemos el contenido que más se asemeja al texto de búsqueda, pero el usuario quiere diversidad en los resultados. En este caso, dejar de mostrar resultados similares a los ya mostrados puede suponer una mejora. Un modelo de reordenación nos puede ayudar en esta tarea.

Las mejoras y retos que presenta la inteligencia artificial no han hecho más que empezar y nos haría mucha ilusión de que nos acompañases en todo este viaje. ¿Te animas? Visita nuestro blog para estar al tanto de todas las novedades.