⚠️ Nota: La idea original de este proyecto surgió gracias al canal Soumil Shah, por lo que doy crédito y recomiendo ver su serie de vídeos sobre Elastic Search Aquí.
El repositorio con el resultado final puede ser consultado en Github.
Índice
- Post 1 - Introducción: Aquí
- Post 2 - Recolección de los datos: Aquí
- Post 3 - Limpieza y almacenamiento de los datos: Aquí
- Post 4 - Desarrollo de la API (🚧 Trabajando en ello...)
- Post 5 - Desarrollo del cliente Web (🚧 Trabajando en ello...)
Introducción
A través de los diferentes posts vamos a desarrollar un sitio web full-stack que nos permitirá buscar vídeos de una manera rápida y obtener resultados coherentes con el texto ingresado. En la siguiente imagen se puede ver el resultado final del front-end funcional:
Stack tecnológico
A continuación se presenta el listado de los lenguajes de programación y herramientas que usaremos en los diferentes pots:
⚠️ Nota: Las definiciones se presentan de manera sencilla, con el fin de facilitar el entendimiento del proyecto a realizar, para más información recomiendo ver los sitios web / documentación oficial de los lenguajes / herramientas.
Go / Golang: Mediante este lenguaje de programación haremos uso del paquete youtubescraper para obtener la url, miniatura, título, descripción y tags de vídeos publicados en la plataforma Youtube.
Python: Este lenguaje será utilizado para hacer una limpieza sencilla de los datos, insertar los datos en open search y desarrollar los endpoints de la API que será consultada por el front-end.
Open search: Es el motor de búsquedas y análisis que nos permitirá almacenar los datos y realizar búsquedas semánticas, lo cual se explicará más adelante. Más información.
Sentence transformers: Este paquete de python nos permitirá transformar los vídeos y las búsquedas en vectores, los cuales serán usados para encontrar vídeos similares semánticamente a las búsquedas realizadas por los usuarios. Más información.
React: Es la librería que utilizaremos para el desarrollo del front-end, lo que nos permitirá dividir responsabilidades entre componentes.
¿Por qué vamos a utilizar Open Search y Sentence Transformers?
La funcionalidad más importante del sitio web a desarrollar es la búsqueda de vídeos a partir de textos. Si bien, podríamos utilizar cualquier otra base de datos como Postgres o MongoDB para almacenar los datos y buscar el texto ingresado por el usuario en el título, descripción y tags de los diferentes vídeos para obtener los resultados, esto podría no arrojar resultados precisos en muchos escenarios, como en los siguientes dos ejemplos:
Un error de digitación: En caso de hacer una búsqueda exacta del texto ingresado por el usuario, una frase con un error como "Crate web sites" (Falta la e en Create) podría no obtener resultados a pesar de que en la base de datos existan cientos o miles de registros con la frase "Create web sites".
Una búsqueda por significado: Un usuario podría realizar una búsqueda como "I don´t know which new video game i should buy", claramente, podemos inferir que lo que desea encontrar son recomendaciones de videojuegos, pero una base de datos "convencional" podría no encontrar resultados para su búsqueda debido a que no hay textos similares en los títulos, descripciones o tags de ningún vídeo.
Como los dos ejemplos anteriores, existen muchos más, por ejemplo, las búsquedas en diferentes lenguajes. Como solución, la "libería" sentence transformers ofrece diferentes modelos de inteligencia artificial entrenados con millones o billones de datos para extraer los significados de textos a un vector de longitud fija y que, según el modelo escogido, pueden soportar más de 50 lenguajes diferentes. Más información.
A partir del vector generado por sentence transformers se pueden aplicar algoritmos como el coseno de similitud o K-NN que permiten encontrar vectores similares, y, por tanto, vídeos similares a la semántica / "significado" del texto ingresado. Es justo aquí donde Open Search ofrece una gran ventaja, ya que cuenta con un plugin del algoritmo K-NN que nos permitirá realizar búsquedas rápidas y acertadas de manera sencilla.
Final
Con esto se concluye esta primer parte, que solamente sirve como contextualización, te invito a continuar con la siguiente.
Referencias
Para consultar las referencias dirigirse a cada uno de los enlaces que aparencen dentro o al final de los diferentes párrafos.
Top comments (0)