13 diciembre 2018

Data Augmentation en Datahack Sur

Con esa sesión la academia en Big Data y Analytics Datahack en su delegación en Sevilla pone fin al ciclo de jueves que desde principio de noviembre nos ha regalado con clases magistrales de algunos de los profesionales y, a la vez, profesores en los masters que ofrece.

Esta semana Francisco Rodríguez, data scientist en Telefóncia I + D y profesor que tendremos en el módulo de Machine Learning en los próximos meses nos habló de la Data Augmentation.


data augmentation datahack
En su presentación nos ofreció casos reales en los que ha trabajado y para los cuales tuvo que "crear" un método pues, no contaba con suficientes datos para poder llevarlo a cabo, y de esta manera nos explicó la ayuda que la data augmentación ofrece..., o que, traducido al español significa aumentar datos.

¿En qué consiste? Pues en una metodología, dentro de los aprendizajes de Machine Learning, y en concreto los de aprendizaje supervisado, en los que se necesitan más datos de los que disponemos para crear un modelo. Ejemplo: podria ser el caso de reconocimiento de fotos para que entrenar al modelo con pares de imágenes etiquetadas según un concepto; Y claro, no siempre disponemos de cientos de miles de datos que nos de esta información, luego tenemos que "inventar" o "crear" esos datos con las variaciones, ruido, calidades y distorsiones que en la vida real pudieran producirse.

En realidad esto es más común de lo que pudiéramos pensar, porque solo las grandes empresas con bases de datos de millones de imágenes puede hacer, Google Maps - Street View, para calles, por ejemplo, disponen de esta posibilidad.
Francisco también nos comentó otros recursos como Imagenet que dispone de más de 14 millones de fotos etiquetadas, pero aún así no es suficiente
.
Por otra parte podemos recurrir, en caso de reconocimiento de textos, a aquellos documentos que han sido traducidos con el mismo contenido a varios idiomas, sería el caso de los que la UE pone a disposición en su portal. Google usa Neural Machine Translation para este otro tipo de casos.

En definitiva y si hay que dar una definición exacta, Data Augmentation es crear datos sintéticos a partir de datos que ya tenemos.

Estrategias.

Nos explicó dos, una basada en transformaciones, en el caso de fotos, por ejemplo la de un gato, hacer cambios a aquellas fotografías con distintos niveles de zoon, color, luz, giros, etc; de esta manera a fuerza de entrenar la modelo se crearían esos algoritmos que permitan aprenderlo.

Otra estrategia seria hacer clasificaciones trabajando con datos que venga con fuentes diferentes (cámaras profesionales o cámaras para móviles), y esto es muy importante también si pensamos en crear un modelo que va a a trabajar con teléfonos móviles, en tal caso tenemos que tener mucho cuidado de que las fotos no vengan de cámaras profesionales.

Lo ideal sería hacer fotos con el mismo móvil con el que queremos crear el modelo.

Como ejemplo de su trabajo nos puso tres casos, un trabajo que le encargaron a su equipo para detectar matrículas de coches, usaron un formato de caja grande a caja pequeña, es decir, primero detectar en el vehículo la zona donde está la matrícula, luego, en ella, cajas pequeñas como serían cada uno de los dígitos que la componen y sus letras, para ello construyeron muchos datos para entrenar el modelo a la manera "frankestein" ya que consistía en crear muchas matrículas para el dataset de entrenamiento construidas con partes de otras matrículas (dígitos y letras).

Y por otra parte, usando la data augmentation para crear otras matrículas combinando letras y números usando la misma tipografía que tiene las matrículas, pero con variaciones añadiendo ruido como manchas, rayas, ligeros cambios de posición, alturas, etc. Cuando probaron el modelo con datos reales llegaron a un acierto entre el 90 y 97% según el sistema que emplearon.

Detector de matrículas con data augmentation
Detector de matrículas con data augmentation

Otro de los trabajos en los que ha puesto en practica sus conocimientos fue la corrección de errores ortográficos, y ya que no existe una base de datos de los mismos, crearon pares de frases, como por ejemplo nombres y apellidos emparejándolas con otros nombres y apellidos que tenían las mismas letras pero con ligeros errores o aquellos errores comunes que los lingüistas están acostumbrados a detectar. Fue interesante esta prueba porque para casos en los que cambiaba una sola letra, el modelo llegaba a muy buenos aciertos, pero, incluso en los casos en los que metía mucho ruido, por ejemplo cambiar no solo varias letras sino poner letras de un nombre entremetidos en los apellidos, etc, el modelo se esforzaba en ofrecer un nombre muy parecido al original verdadero, en dichos casos era lógico que el "ruido era excesivo". En otros casos el modelo se equivocaba porque se forzaba a traducir un nombre, como Antoni en catalán y lo devolvía como Antonio en español. Todo este tipo de casos nos da una muestra de todas las variables que tenemos que tener en cuenta. A pesar de todo, el grado de acierto se llegó entre el 84% y 89 %

Como no existe un data set de errores de personas, pero lo que se puede hacer combinaciones con los errores que normalmente se cometen.
De un nombre correcto, se crea el -> augmented -> (incorrecto) para cada elemento generar otro.

Un último ejemplo que puso, pero en el que no ha trabajado fue la clasificación de curriculums, ya que, normalmente éstos están divididos en los mismos aparatos de siempre, datos personales, formación, experiencia, etc. Pues bien, se crearon datos cortando estas partes y creando otros curriculums con ellas también para crear más datos de entrenamiento.

Y bien, ya tenemos los datos que nos faltaban para tener cientos de decenas de miles (por lo menos) con los que trabajar nuestro modelo, ¿Donde se mente y qué cantidad? Nos podemos preguntar y de hecho, una compañera del master hizo. Francisco contestó: -"pues en el set de entrenamiento, nunca en el set de validación y tampoco en el Test Set donde se prueba el modelo final elegido". Tiene su lógica, es más es conveniente probar con seres humanos incluso los errores que comete en comparación con los cometidos con este tipo de datos por el modelo.

Conjuntos de datos para validar el modelo
Conjuntos de datos para validar el modelo

Es decir, si normalmente para un entrenamiento de machine learning con data real tenemos tres partes en los datos, con la data augmentation tendremos cuatro tipos de datos con los que trabajar. y en cuanto a cantidades y porcentajes, no quiso dar una cantidad fija, simplemente tener en cuenta que si en el validación tenemos 5 datos, si uno está mal, ya tenemos el 20% del modelo invalidado, es una exageración, claro, pero si, a partir de mil datos reales para las partes de validación y test, ya podemos meter con tranquilidad todos los datos "creados" en el set de entrenamiento.

Francisco también nos habló de los distintos problemas que podemos tener, como son el Overfiting, es decir que el modelo memorice las respuestas, pero no aprenda ante casos nuevos; el Underfitting. cuando ha sido tan débil el altgorismo que ni siquiera puede clasificar una vez que se "saca de la caja" y el Data Mismatch, en el que los datos "aumentados" son tan diferentes de los datos reales que resulta inútil usarlo.
También nos puso ejemplo de sus trabajos como matrículas "machacadas" que eran imposibles reconocerse o aquellas matriculas que nos se detectaban porque algunas tenía una sombra superior, estudiando estos errores, pero solo una pequeña parte, por supuesto, decidieron reducir y cambiar la forma en que se generaban las matriculas añadiendo a éstas sombra, pero no hicieron lo mismo con las matrículas rotas o deformadas, porque sería llevar el modelo con ruido a un extremo excesivo. Todo tiene su medida.

De hecho para optimizar el trabajo dio una serie de consejos.

  1. Evitar traer suposiciones o sesgos, como por ejemplo no pensar que aún existen en circulación coches con matrículas antiguas, es decir la letra de la provincia seguida de número, cosa que no pensaron.
  2. Actuar con Ideas simples, y actuar rápido. Ejemplo no implementar los errores de matriculas "machadas", por su complejidad en abordarlo, coste excesivo y bajo porcentaje en los errores.
  3. Metodología correcta. Como puede ser el uso ponderado de los datos en cada set, el proceso de etiquetado, etc.
  4. Hacer análisis error. Usar humanos para confirmar que algunos errores son inevitables, o corregir en la medida de lo posible, como dijo antes, los segos o detectar como mejor los datos aumentados.

Finalizó su exposición, con otros casos como la Red neuronal, Las Generative Adversarial Networks,  o el llamado Generative adversarial networks (GANs) que aunque salía del tema de la exposición, personalmente sentía mucha atracción, como es el ejemplo de generar imágenes de personas automáticamente, llegando a extremos en los que podríamos dudar, efectivamente que es la foto de una persona que realmente existe. o convertir y transformar incluso vídeos como puede ser un caballo corriendo convertido en una cebra, hasta el punto que incluso los detalles del fondo son modificados por la máquina, como puede ser cambiar la hierba verde por pasto seco de la sabana.



Pues lo dicho, con muchas ganas de volver a ver a Francisco como profesor el master de Datahack y seguir aprendiendo de su experiencia profesional. Y aunque las sesiones abiertas al público en general se han acabado por ahora, podéis escribir a su correo y manteneros informados de otros meetups que pudiera organizarse para el próximo curso.
Artículo: Red neuronal creando caras de personas.