Icono del sitio Javier Campos .es

Todo lo que aprendí gracias al Hackathon de Spain AI (reto NLP)

Creo que los hackathones son una oportunidad única para aprender e innovar.

Este año 2021 he participado en el reto de Procesamiento del Lenguaje Natural (NLP) del Hackathon de Spain AI. Quiero dar las gracias a Spain AI, a Zara Tech, al resto de patrocinadores y a todos los participantes por hacer posible este tipo de eventos. Espero poder participar en otro pronto 🙂

Escribo a continuación los experimentos que me han funcionado bien durante el hackathon, los que claramente no funcionaron y los no concluyentes.

No soy experto en análisis de datos ni NLP. Si alguien con más idea ve algo sin sentido (ie: los hiperparámetros usados) o si a alguien le sirve el contenido, por favor enviad feedback 🙂

 

El problema a resolver

«A partir de las descripciones de unos productos de Zara, genera sus nombres exactos».

Además, para cada producto podías enviar 10 nombres candidatos cada vez, pero ordenados por probabilidad de acierto, ya que: acertar en el primer nombre candidato suma 1 punto, acertar en el 2º suma 0,63, acertar en el 3º suma 0,5, acertar en el 4º suma 0,43… acertar en el 10º suma 0,29.

En total se podía participar 100 veces durante los meses del hackathon.

El enunciado completo está aquí.

 

Cosas que he aprendido en el hackathon

🤖 Estado del arte de las redes para generación de textos y generación de resúmenes. Antes del hackathon había jugado solo con redes RNN para generación de textos de juguete. Durante el hackathon he experimentado principalmente con transformers Bart, T5, Bert…

📦 Librerías. He jugado con pytorch por primera vez, he experimentado con las librerías Transformers, SimpleTransformers, y SentenceTransformers

☁️ Cloud: He usado por primera vez en AWS las GPU (instancias EC2 spot p3.2xlarge), pero he entrenado los modelos principalmente en Google Colab (contraté la versión Pro).

🔨 Otras herramientas: Weights & Biases (para comparar experimentos).

👚 Saber más sobre el dominio del problema. He aprendido sobre el catálogo de productos de Zara.

👀 Otras técnicas de análisis de datos y NLP. He aprendido técnicas de clusterización, limpieza de datos, Data Augmentation (sin buenos resultados), análisis de n-gramas (en el dataset de train, y en los productos de validación fallados y acertados).

📉 Custom loss functions, con algún intento de implementación con pytorch.

🧑‍🤝‍🧑 (próximamente) Buenas ideas, nuevas herramientas, nuevas técnicas, feedback, etc… gracias a las futuras charlas de los ganadores en Spain AI.

 

 

Resultados obtenidos

Conseguí una puntuación de 28, séptima posición. Muy lejos del podio 😀 pero muy contento por todo lo aprendido y por haber ido mejorando. Los ganadores harán próximamente un meetup en Spain AI hablando de su solución 🔝

 

Solución implementada que obtuvo mejor score

 

Experimentos no concluyentes

(Otros experimentos implementados después de obtener el score de 28, que no han conseguido mejorar el score, pero me gustaría investigar más).

Para hacer el clustering, he utilizado la librería «sentence-transformers» + KMeans de scikit-learn. Sentence-transformers para obtener un embedding de cada descripción de producto, con el modelo preentrenado ‘paraphrase-distilroberta-base-v1’. Con el método del codo he establecido el nº de clusters de KMean en 50 (también he probado con 25).

Después, para cada cluster he generado un identificador que resumiera el contenido del cluster. He usado primero BERTopic (resultado no representativo) y después finalmente la palabra más frecuente del cluster.

Gracias estos clusters, he separado de nuevo el dataset en Train y Eval, siguiendo varios criterios:

Con estos cambios, los resultados en eval han subido al 37%, pero no he podido mejorar el score en Test (25-27).

Quedó pendiente aplicar esta operación de redondeo y traducción a otras productos que tienen sus dimensiones en la descripción (mochilas, bolsos, monederos, frascos de gel/perfume, etc…).

Experimentos que no me han funcionado

 

 

Siguientes pasos

Si tuviera más tiempo para este proyecto, lo dedicaría a:

Lo siguiente que haré es ver los próximos meetups de Spain AI 📺, donde los ganadores contarán sus soluciones 🍿😃

 

Espero que esta info te sea de utilidad, al menos para animarte a participar en el próximo hackathon 😃 . Si te ha servido o si ves algo que cambiarías, por favor envía feedback. ¡Gracias!

Salir de la versión móvil