sts_eval: Easy Evaluation of Semantic Textual Similarity for Neural Language Models

Check on Github

This is a small framework aimed to make easy the evaluation of Language Models with the STS Benchmark as well as other task-specific evaluation datasets. With it you can compare different models, or versions of the same model improved by fine-tuning. The framework currently use STSBenchmark, the Spanish portion of STS2017 and an example of a custom evaluation dataset.

The framework wraps models from different sources and runs the selected evaluation with them, producing a standarized JSON output.

Models can be sourced from:

Main Goal: Extension to other evaluation datasets

The main goal of this framework is to help in the evaluation of Language Models for other context-specific tasks.

Evaluation Results on current datasets

Check this notebook for the current results of evaluating several LMs on the standard datasets and in the context-specific example. This results closely resembles the ones published in PapersWithCode and SBERT Pretrained Models

STSBenchmark

STS-es Spanish to Spanish Semantic Textual Similarity

Check on Github

ai_denv: a development environment for AI / ML / Tensorflow / Pytorch projects

Check at Gihub

Goal

Have a containerized development environment for projects that use some of the most common libraries and utilities for AI, ML, etc. This makes possible to have an independent and upgradable environment that can be shared between projects or server.

This is an initial point that may be adapted to specific needs. Check the Dockerfile to see what will be installed. By default installs GPU support for most libraries as it’s based on GPU enabled Tensorflow image. Packages for R are commented but you can uncomment them.

New software installed in the container will be lost as it runs as a ephemeral container. If you will use it, add to the Dockerfile and rebuild.

Usage

  • Build the docker image docker build -t ai:latest .
  • Create or move to you project directory. You may want to create any directory used by the container. It will create them but will be owned by root.
  • Run the environment:
    • Use ./denv.sh to run a shell in the environment
    • Use ./denv_jupyter.sh to run a jupyter notebook server within the environment

COVID-19 en México y su impacto en el mercado laboral

Todos sentimos incertidumbre ante la pandemia. Lo primero es la salud de nuestros seres queridos y la nuestra. Hacemos lo que está en nuestras manos para cuidarnos. Y después viene la incertidumbre económica y laboral. En una recesión como la que tememos enfrente aumentan los riesgos para todos. Y muchas personas, desafortunadamente, ya lo están padeciendo.

En una situación así la información es decisiva a comprender y actuar. En OCCMundial lanzamos el Termómetro Laboral para dar a conocer los datos y la información que hemos recopilado y analizado, que consideramos puede ser valiosa para personas y empresas en este momento. Así mismo quiero ampliar aquí algunas de las cosas que hemos encontrado en el grupo de Estrategia de Datos e Inteligencia Artificial hasta la semana del 20 de Abril. Hay que resaltar que esta información toma como base el comportamiento de las empresas que publican con nosotros. En nuestros estudios hemos encontrado que dada nuestra posición como líderes en el mercado de publicación de vacantes en línea en México estos datos son bastante representativos de la actividad laboral general en el país.

La creación de vacantes nuevas ha caído 54% desde el inicio de la cuarentena

Tomamos como fecha de inicio de la cuarentena el 16 de Marzo, día que en muchas instituciones y empresas comenzamos a hacer home office. El gobierno la comenzó oficialmente hasta una semana después pero los efectos se pudieron ver desde esta semana. Hay que considerar que la semana del 6 de Abril fue la Semana Santa y normalmente se ve una menor actividad. La diferencia en el promedio semanal de vacantes creadas antes y después del inicio de la cuarentena es de 54%.

El tamaño de las barras corresponde a la cantidad de vacantes creadas en cada semana. En azul antes de la cuarentena, en naranja a partir de la cuarentena.

Por estados, es en Quintana Roo donde hay mayor disminución en creación de vacantes, seguido de CDMX, Chiapas y Nuevo León.

El sector turístico parece ser el mas afectado (mas adelante lo podemos ver por categoría y sector), y por lo mismo el estado más afectado es Quintana Roo donde vemos que se han creado en promedio 68% menos vacantes por semana. En la Ciudad de México también ha disminuido mucho la creación de oferta laboral, 58% menos. Nuevo León, Estado de México y Jalisco, los estados en los que normalmente hay una mayor oferta laboral, la creación de vacantes ha disminuido entre 48% y 55%

Diferencia en el promedio semanal de creación de vacantes a raíz de la cuarentena. El renglón “Otro” corresponde a vacantes que no especifican un estado, son en el extranjero.

Aquí vale la pena notar que la ubicación marcada como “Otro” corresponde a vacantes que no especifican un estado en México, o que son en el extranjero. Esto es muchas veces usado por las empresas para especificar que se puede hacer trabajo remoto o home office. De hecho, hemos detectado también un incremento muy grande en las postulaciones de candidatos que buscan opciones de trabajo en casa. Este tipo de vacantes son las que han tenido una menor disminución.

Por sector industrial y categoría de la vacante lo relacionado a turismo es lo mas afectado

En cuanto a sector de las empresas que publican vacantes la mas afectada sin duda es Turismo (han bajado 82% sus contrataciones) y algunos sectores industriales como Calzado y Textiles, y Comunicación y Artes gráficas. En cuanto a categorías de vacante también vemos que las relacionadas a Deportes, Turismo y Arte y diseño han bajado más que otras, como Tecnologías de Información o Salud que presentan menor disminución.

(La diferencia entre Sector Industrial y Categoría de Vacantes es que la primera se refiere al tipo de empresa que está publicando una vacante y la segunda al tipo de trabajo al que se refiere la vacante. Por ejemplo, una vacante en un hotel que busca un gerente administrativo sería sector Turismo y categoría Administrativo)

Esto es a grandes rasgos lo que hemos encontrado en cuanto al cambio en la creación de vacantes desde que inició la cuarentena. Espero que esta información pueda ser de utilidad.

Datos de COVID-19 por Estado en México

Tratando de ayudar a quien le puedan ser útiles estos datos ya que los formatos en que Secretaría de Salud los ha estado publicando no son los mejores para análisis y visualización.

Los siguientes datos son “semioficiales” ya que son extraídos del mapa de México en el sitio del Sistema Nacional de Vigilancia Epidemiológica. Los datos son almacenados tal como se extraen del mapa y luego son procesados para generar archivos en un formato similar a los publicados en el repositorio de Johns Hopkins.

  • Reporte diario contiene un archivo CSV por día con los números a la fecha, por estado, con las siguientes columnas:
    • Casos probables
    • Casos confirmados
    • Casos descartados
    • Fallecimientos
  • Series de Tiempo contiene archivos CSV con datos agregados en forma de series de tiempo (un día por columna) por cada Estado, para cada una de las categorías:
  • Series de Tiempo con datos adicionales contiene archivos equivalentes a los mencionados arriba pero con tres días anteriores agregados del repositorio de @wallyqs. Los datos scrapeados por este proyecto los voy a mantener en el directorio original.
  • Datos originales contiene una copia de los datos tal como fueron extraídos del mapa. La última versión del archivo se guarda con ‘latest’ y las versiones anteriores se pueden acceder mediante commits anteriores. Hasta el 2020-04-05 se guardaba un archivo con timestamp: el nombre es un timestamp del momento de la extracción.

Los datos son extraídos automáticamente 2 veces al día esperando tener los mas actualizados lo antes posible.

Repositorio en Github

Directorio de repositorios de datos sobre COVID-19 en México

Estoy manteniendo este directorio de recursos y datos sobre COVID-19 en México con el fin de apoyar a quienes quieren usarlos para análisis, visualización o simplemente para aprender. Hasta el día de ayer, 13 de Abril, los datos oficiales se estaban publicando en documentos PDF en tablas y en un mapa por estados, lo que dificultaba su aprovechamiento. Se han dado muchos esfuerzos ciudadanos de almacenar, curar y procesar estos datos y es el tipo de información que estoy agregando en este directorio.

Repositorio en Github pages.

Comparación de Modelos de Lenguaje en Español con fines de Clasificación

Read this post in English

Recientemente hemos visto un enorme incremento en el uso de técnicas de Procesamiento de Lenguaje Natural (NLP) pero en los próximos meses y años estaremos viendo su aprovechamiento en tareas y aplicaciones, y su gran potencial será evidente. Como menciona Sebastian Ruder en su blog, estamos viviendo el momento ImageNet de NLP. Parece que cada semana hay uno o varios equipos de investigadores que publican nuevos y mejores Modelos de Lenguaje implementados con deep learning.

Como practicantes de Machine Learning e Inteligencia Artificial nuestro trabajo es crear aplicaciones de “mundo real” considerando tanto los últimos avances en las áreas de investigación como las implicaciones prácticas de su implementación con el fin de resolver necesidades de negocio. Tal vez no usemos el modelo más reciente, o el más grande, o el que actualmente es estado del arte tan pronto como sea publicado en Github o Tensorflow hub, sino que usemos uno que sea mas simple de implementar, más rápido y/o más ligero, y esperemos hasta el momento en que usar uno mas complejo tenga sentido para las tareas específicas de nuestro negocio. Dicho esto, es útil tener un método que nos permita evaluar rápida y fácilmente modelos para nuestras tareas específicas. Además algunos de los resultados de esas evaluaciones se pueden considerar guías generales del desempeño de los modelos, con la esperanza de que puedan ser generalizados a otras tareas.

He estado trabajando en un método como el descrito arriba y quiero compartir algunos resultados que he encontrado de la comparación de varios Modelos Neuronales de Lenguaje que Google ha puesto a disposición de la comunidad en Tensorflow Hub. Hay pocos recursos disponibles en español en comparación a otros idiomas por lo que espero que esto contribuya a quien lo pueda necesitar. Los resultados más importantes que he encontrado son:

  • Los modelos NNLM entrenados en español tienen un mejor desempeño que los mismos modelos entrenados en inglés.
  • La versión normalizada de estos modelos tiene un mejor desempeño que los modelos no normalizados.
  • En general los modelos de 50 y 128 dimensiones tienen un desempeño similar. Sin embargo parece que la optimización de hiperparámetros puede beneficiar más al modelo de 128 dimensiones.

Todos los detalles y resultados están disponibles en este repositorio de Github. Espero poder agregar a la comparación otros modelos mas recientes basados en Transformers próximamente.

Comparing Neural Language Models for Classification, in Spanish

Leer este post en español

We are seeing a huge increase in the use of Natural Language Processing techniques, but there is still even a bigger potential that will be harnessed in the upcoming months and years. As Sebastian Ruder has said we are living NLP’s ImageNet moment. It seems that new and better Language Models are coming from research teams every week from the deep learning community.

As Machine Learning & Artificial Intelligence practitioners our jobs is to create real world applications considering both latest advances and practical implementation issues to solve business needs. Maybe we will not use the latest, biggest, state-of-the-art model as soon as it’s out on Github or Tensorflow Hub but rather use some other easier to implement, faster and/or lighter model until using a more complex model makes sense. Saying this, it’s helpful to have a method that enables us faster and easier evaluation of models for our specific business tasks. Also some results can be considered as general guidelines on the performance of the models hoping those can be generalized to other tasks.

I’ve been working on such a method and I’ll like to share what I’ve found from comparing several models based on the Neural-Network Language Model made available by Google at Tensorflow Hub focusing on Spanish. There are fewer resources for Spanish than other languages so I hope this may help. Most important results I found:

  • NNLM models trained in Spanish have a better performance than those trained in English.
  • Normalized models have better performance than non-normalized models.
  • In general 50 and 128 dimensions model performed similarly although it seems that hyperparameter optimization may improve both models, specially the later.

Please look at this Github repository for details and full results. I hope to be able to add more results with other models.

MeLi Data Challenge 2019 – Multiclass Classification in Keras

The MercadoLibre Data Challenge 2019 was a great competition Kaggle’s style with an awsome prize consisting on tickets (and accomodation & air tickets) to Khipu Latin American conference on Artificial Intelligence.

I gave it a try implementing several ideas I already had in my head. First I tried a standard BERT embeddings classifier which proved harder to implement in Keras with all the current changes that have been going on with Tensorflow 2.0. Next I tried a Multi Layer Perceptron (MLP) fed with fixed BERT precalculated sentence embeddings. These two approaches didn’t traveled too far but may be interesting starting points to try in the future.

Finally a simpler model gave me the best results I could get, with a Balanced Accuracy Score of 0.87, which put me in the 45st place in the leaderboard. The model uses a Tensorflow Hub Keras layer fine tunned from Neural Probabilistic Language Model described here, followed by a MLP, trained with Adam and Sparse Categorical Crossentropy loss. Check the Github repository for details and code.

Some interesting findings:

  • The language model that I used was spanish based but performed almost equally well in portuguese (nnlm-es-128dim-with-normalization)
  • I got slightly better results by training the same model separetly on both languages and merging the results. But a single model trained on the whole dataset perfomed almost as well

The kind guys at MercadoLibre did a kickstart workshop and gave away a model that uses ULMFiT and reaches also 0.87. I think it’s very interesting that my model, using a different approach reaches a very similar result, and that’s why I’m pretty happy with it despite being very far from the first places!