Tabla de contenidos

¿Qué es Neural Search?

En pocas palabras, la búsqueda neuronal es un nuevo enfoque para la recuperación de información. En lugar de indicarle a una máquina un conjunto de reglas para que entienda qué datos son qué, el Neural Search o «búsqueda neuronal» hace lo mismo con una red neural preentrenada. Esto significa que los desarrolladores no tienen que escribir cada pequeña regla, lo que les ahorra tiempo y dolores de cabeza, y el sistema se entrena para mejorar a medida que avanza.

¿Qué es Jina?

Jina es una aproximación a la búsqueda neural. Es nativo de la nube, por lo que puede desplegarse en contenedores, y ofrece una búsqueda de todo a todo. Texto-a-texto, imagen-a-imagen, vídeo-a-vídeo, o cualquier otra cosa que pueda alimentar.

Antecedentes

Las búsquedas son un gran negocio, que cada vez se hace más grande. Hace sólo unos años, buscar significaba escribir algo en un cuadro de texto (¡ah, aquellos embriagadores días de Yahoo! y Altavista). Ahora la búsqueda abarca texto, voz, música, fotos, vídeos, productos y mucho más. Justo antes del cambio de milenio había sólo 3,5 millones de búsquedas en Google al día.

Hoy en día (según el primer resultado del término de búsqueda 2020 google searches per day) esa cifra podría llegar a los 5.000 millones y seguir aumentando, más de 1.000 veces más. Eso por no hablar de los miles de millones de perfiles de Tinder, productos de Amazon y listas de reproducción de Spotify que buscan millones de personas cada día desde sus teléfonos, ordenadores y asistentes virtuales.

Basta con ver el crecimiento estratosférico de las consultas en Google, ¡y eso solo hasta 2012!

En resumen, la búsqueda es enorme. En este artículo, vamos a analizar el campeón actual de los métodos de búsqueda, la búsqueda simbólica, y el valiente aspirante, la búsqueda neural.

Nota: Este artículo está basado en un post de Han Xiao con su permiso. Consúltalo si quieres una introducción más técnica a la búsqueda neuronal.

Búsqueda simbólica: Las reglas son las reglas

Google es un enorme motor de búsqueda de uso general. Otras empresas no pueden simplemente adaptarlo a sus necesidades y conectarlo a sus sistemas. En su lugar, utilizan frameworks como Elastic y Apache Solr, sistemas de búsqueda simbólica que permiten a los desarrolladores escribir las reglas y crear conductos para buscar productos, personas, mensajes o lo que la empresa necesite.

Tomemos como ejemplo Shopify. Utilizan Elastic para indexar y buscar entre millones de productos en cientos de categorías. Esto no podría hacerse de forma inmediata o con un motor de búsqueda de propósito general como Google. Tienen que hacer uso de Elastic y escribir reglas y pipelines específicas para indexar, filtrar, ordenar y clasificar los productos por una variedad de criterios, y luego convertir estos datos en símbolos que el sistema pueda entender. De ahí el nombre de búsqueda simbólica. Aquí está Greats, una popular tienda de Shopify de zapatillas de deporte:

Tú y yo sabemos que si buscas zapatillas nike rojas quieres, bueno, zapatillas nike rojas. Sin embargo, esas son sólo palabras para un sistema de búsqueda típico. Claro, si las escribes, con suerte obtendrás lo que has pedido, pero ¿qué pasa si esas zapatillas están etiquetadas como deportivas? ¿O incluso etiquetadas como escarlata? En casos como éste, un desarrollador necesita escribir reglas:

  • El rojo es un color
  • Escarlata es un sinónimo de rojo
  • Nike es una marca
  • Las zapatillas son un tipo de calzado
  • Otro nombre para las zapatillas de deporte es zapatillas de deporte

O, expresado en JSON como pares clave-valor:

{
"color": "red",
"color_synonyms": ["scarlet"],
"brand": "nike",
"type": "sneaker",
"type_synonyms": ["trainers"],
"category": "footwear"
}

Cada uno de estos pares clave-valor puede considerarse un símbolo, de ahí el nombre de búsqueda simbólica. Cuando un usuario introduce una consulta de búsqueda, el sistema la descompone en símbolos y los compara con los símbolos de los productos de su base de datos.

¿Pero qué pasa si un usuario escribe nikke en lugar de nike, o busca shirts (con una s) en lugar de shirt? Hay muchas reglas en el lenguaje, y la gente las rompe todo el tiempo. Para conseguir símbolos eficaces (por ejemplo, saber que nikke significa realmente {«marca»: «nike«}), hay que definir muchas reglas y encadenarlas en una compleja cadena:

Inconvenientes de la búsqueda simbólica

Tienes que explicar cada pequeña cosa

Nuestro ejemplo de búsqueda anterior era el hombre de las zapatillas rojas de Nikke. ¿Pero qué pasa si nuestro buscador es británico? Un británico escribiría red nikke trainer man. Tendríamos que explicar a nuestro sistema que las zapatillas de deporte y las deportivas son lo mismo con nombres diferentes. ¿O qué pasa si alguien busca un bolso LV? Habría que decirle al sistema que LV significa Louis Vuitton.

Hacer eso para cada tipo de producto lleva una eternidad y siempre hay cosas que se quedan en el tintero. ¿Y si se quiere localizar para otros idiomas? Tendrás que volver a hacerlo todo de nuevo. Eso significa mucho trabajo, conocimiento y atención al detalle.

Es frágil

El texto es complicado: Como hemos explicado anteriormente, si un usuario escribe nikke rojo hombre zapatilla de deporte un sistema de búsqueda clásico tiene que reconocer que está buscando un rojo (color) Nike (marca con ortografía corregida) zapatilla de deporte (tipo) para los hombres (subtipo). Esto se hace interpretando la cadena de búsqueda y los detalles del producto a símbolos a través de pipelines, las cuales pueden tener problemas importantes.

  • Cada componente de la cadena tiene una salida que sirve de entrada al siguiente componente. Por lo tanto, un problema al principio del proceso puede romper todo el sistema.
  • Algunos componentes pueden tomar entradas de varios predecesores. Eso significa que hay que introducir más mecanismos para evitar que se bloqueen unos a otros
  • Es difícil mejorar la calidad general de la búsqueda. Si se mejoran uno o dos componentes, es posible que los resultados de la búsqueda no mejoren.
  • Si se quiere buscar en otro idioma, hay que reescribir todos los componentes dependientes del idioma en la cadena de producción, lo que aumenta el coste de mantenimiento.

Búsqueda neuronal: (pre)entrenar, no explicar

Una forma más sencilla sería un sistema de búsqueda entrenado con datos existentes. Si entrenas un sistema en suficientes escenarios diferentes de antemano (es decir, un modelo preentrenado), desarrolla una capacidad generalizada para encontrar resultados que coincidan con las entradas, ya sean GIFs de Tumblr, frases de Wikipedia o imágenes de Pokémon. Puedes conectar el modelo directamente a tu sistema y empezar a indexar y buscar de inmediato.

Aquí puedes ver el código:
from jina.flow import Flow
f = (Flow()
.add(name='my-encoder', image='jinaai/hub.examples.my_encoder',
volumes='./abc', yaml_path='hub/examples/my_encoder/my_encoder_ext.yml',
port_in=55555, port_out=55556)

De esta manera, no necesitas perder horas escribiendo reglas interminables para tu caso de uso. En su lugar, basta con incluir una línea en el código para descargar el modelo que quieras de una «tienda de aplicaciones» (como el próximo Jina Hub), y ponerte en marcha.

En comparación con la búsqueda simbólica, la búsqueda neural:

  • Elimina el frágil pipeline, haciendo que el sistema sea más resistente y escalable.
  • Encuentra una forma mejor de representar la semántica subyacente de los productos y las consultas de búsqueda.
  • Aprende sobre la marcha, por lo que mejora con el tiempo.

¿Funciona Jina, sin embargo?

Una búsqueda «funciona» si entiende y devuelve resultados de calidad para:

  • Consultas simples: Como la búsqueda de «rojo», «nike» o «zapatillas».
  • Consultas compuestas: Como «zapatillas nike rojas.

Si ni siquiera es capaz de hacer eso, no tiene sentido que compruebe cosas tan sofisticadas como la corrección ortográfica o la capacidad de trabajar en diferentes idiomas.

En fin, menos hablar y más buscar:

🇬🇧 nike

🇩🇪 nike schwarz (en un idioma diferente)

🇬🇧 addidsa (marca mal escrita)

🇬🇧 addidsa trosers (marca y categoría mal escritas)

🇬🇧 🇩🇪 kleider flowers (lenguas mixtas)

Así que, como puedes ver, ¡la búsqueda neuronal lo hace bastante bien!

Comparación entre la búsqueda simbólica y la neural

Entonces, ¿cómo se compara la búsqueda neuronal con el actual campeón, la búsqueda simbólica? Veamos los pros y los contras de cada una:

Diferencias entre búsqueda neuronal y búsqueda simbólica.
Diferencias entre búsqueda neuronal y búsqueda simbólica.

No estamos tratando de elegir entre el Equipo Simbólico y el Equipo Neural. Ambos enfoques tienen sus propias ventajas y se complementan bastante bien. Así que la mejor pregunta que podemos hacernos es: ¿cuál es el que mejor se adapta a tu caso de uso y tus necesidades?

Prueba Jina

No hay mejor manera de probar Jina que sumergirse y jugar con ella. Proporcionamos imágenes Docker preentrenadas y jinabox.js, un front-end fácil de usar para buscar texto, imágenes, audio o vídeo. No hay ningún ejemplo de búsqueda de productos (todavía), pero puedes buscar cosas más desenfadadas como tu Pokémon favorito o la Wikipedia.

Puedes encontrar más información sobre Jina en nuestro repositorio de GitHub:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *