Can AI boost tradition?

Tradition, from latin tradere, to transmit, is the act of sharing a behavior or belief from generation to generation. And as such, this heritage becomes part of our ourselves, our identity.

Innovation, in contrast, is the introduction of new ideas, of new ways or approaches that change how things were done before. This new approaches are often seen as a threat to tradition, as the adoption of new methods or behaviors tends to change the way that things were done, the tradition.

However, do things always need to be this way? Can innovation be used to leverage and spread tradition among society?

Donostia. 2021

Bertso, doinu and neurri a glimpse of the basque tradition

Among the various treasures basque culture has manged to keep alive are bertsoak, improvised verses with rhyme that are sung following a doinu, a melody, that has to match with certain neurri, or verse length.

This bertsos are typically sung in front of an audience, and, the bertsolaris, the basque rhyme singers, sing about different topics which are provided by the moderator, gaijartzaile, while they interact with the rest of bertsolaris (in a rather acid way) in pursue of the public’s applause.

How does this look like? Well lets take a look of how a modern bertso saio looks like lets take a look to the following video.

Deep Learning

Did you notice that the base used by both of the bertsolari is the same? This base is called doinu(a). Doinus are transmitted from generation to generation, and it is very important for bertsolaris to know them well, because they need to use the doinu suggested by the gaijartzaile (moderator) or the other bertsolaris to sing their bertsoz.

Can we improvise over the improvisation?

Bertsos are like rap, and rap battles happen on the fly, there is no script to follow. This means the abbility of the bertsolari to improvise becomes the cornerstone of the bertso. However, the base, the doinu, is already known by everyone, it is something fixed, rigid.

Which is a pity, isn’t it? If improvisation is part of the great art of the bertsolari… Why not provide an improvised doinu so that the bertso experience becomes even more challenging and unique?

With these thoughts in mind, and with the newly adquiered Deep Learning skillset, @jperezvisaires and @klopetx had an instant match in our mind. If there was anything that could create doinus by itself… that would be a Generative Adversarial Network.

Could bertsolarism be revolutionized with the use of AI?

Well… maybe not that much, but it was worth a try.

GANS where technology and tradition (could) meet

With the insightful courses we had during our SaturdayAI lessons, we learned about the latest innovations on the field of Deep Learning, such as the different architectures, (convolutional, recurrent, autoencoder…) as well as the different uses such as reinforcement learning and generative adversarial networks. The question at this point was, could the magic of generative adversarial networks be used to create new doinus? If so, what did we need for that purpose?

Data! Of course.

Gathering the data

Fortunately for us (and for the basque culture) there exists an entity, Bertsozale Elkartea, who has a webpage that includes all the known doinus, around 3000, with their meta-data included. It is in basque, but just in case you wanted to give it a look.

And well… you know what they say right?
It’s easier to ask for forgiveness than to get permission…
So… We scrapped the web (thank you bertsozale for your work, and sorry for overloading your servers and getting your data wihout formally asking permission).

First we downloaded the metadata of the doinus. We made a selection of the most used ones considering the number of syllables and type, and we donwloaded the ‘Zortziko/Txiki’ ones that had 7 syllables in the first berse followed by 6 in the second which decreased the list of doinus to around 200.

Midi format

“But wait a minute, donwload what exactly?”

Fortunately for us, we had the chance to download the doinus in either mp3 or midi formats.

“Midi? What’s that? I know about mp3 but midi reminds me of how french people names the mid day…”

MIDI (Musical Instrument Digital Interface) is a technological standard used to transfer up to 16 information channels. It transfers messages of events that include musical notation, tone and speed among other things. Basically, this files explain what notes are played, when, for how long and how loud.

Deep Learning

Example of a midi.

Feeding our little generative monster

Once the data was ready, we just needed to feed the GAN.

And our experience of using midi directly for the GAN is perfectly summarized by the following poem:

We used the midi as input
Well, at least we tried
we faced some problems
and hence, gave up.

You know, everyone uses Deep Learning with images, why should we do otherwise?

So, instead of using midis directly, we created images with them, cause, due to the nature of the midi files, it is quite simple to visualize/represent them as images.

Once at the more comfortable image domain it was easier to work with the problem, as there is much more content dealing with images and convolutional neural networks.

GAN structure

Let’s take a breath for a second. We started talking about how well GANs are supposed to work in the creation of new unheared soinus, but what are GANs exactly?

GANs were introduced by Goodfellow et. al. and are essentially two separate models that are trained together with an opposed purpose. One of the models, the generator, generates new data samples from a random seed; the second model, the discriminator, tries to tell whether the data is original (real) or if it was created by the generative model (fake). Due to their behavior, they are typicall compared to a counterfeiter and a cop. The counterfeiter keeps improving the quality of the works while the cop gets better at detecting which ones are real or faked.

Deep Learning

The structure of a GAN fed with doinus.

Basically, during the training process, the counterfeiter should get much better at creating new data (in this case images of new possible doinus) while the cop should improve at the detection of fake doinus, forcing the improvement of the counterfeiter. At some point, the generative model should be good enough at creating doinus that it would become absolutely impossible for the discriminative model to discern among real or fake doinus, meaning we have a model capable of creating good enough doinus.

Deep Learning

MiliaGAN, the generator part of the GAN.

Easy peasy lemon squeezy isn’t it?

SPOILER: Nothing went as expected.

Round 1: If what one has to say is not better than silence…

We started to feed our monster (well, monsters actually).
We waited until the training converged.
And we freaked out with the resulting doinus.

Deep Learning

Yep, this is not a mistakenly black image, its a “shy” midi with no notes.

Yes, an empty midi. Apparently our GAN was so smart that it preferred to remain silent instead of saying something worse than silence… It went full Simon & Garfunkel and published its own version of the Sound of Silence.


The images we were trying to create were really sparse, with lots of zeroes and only some ones on the notes being played. The generator initially learnt that by switching all the pixels off, it could trick the dumb discriminator at the beginning. However, during training, at some point, even the dumbest of discriminators was able to detect that a blank image was not a real doinu, which meant that all the efforts made by the generator to produce blank images from noise were now worthless. The generator was not able to adapt fast enough to trick the new discriminator and the training diverged.

To solve the problem of sparse images, we took the argmax of all the columns, esentially turning a 128×1024 image into a a 1×1024 vector. This was possible because the doinus only play one note at a time.

Lesson: Ensure you synthesize your data as much as possible, make life easy for your neural network.

Round 2: Damn it! Who cares about mixing different doinus?

Initially, we wanted the generator to focus on creating one type of doinu only; the most popular doinu: zortziko txikia. We only had about 180 usable samples of this kind of doinu, and it soon became apparent that training GANs requires a substantial amount of data just to get barely passable results. So instead of focusing on a small fraction of the doinus, we decided to take all the database in the end. This meant jumbling all kind of different doinus together, but got us a dataset of around 2700 samples; still really small for GAN training, but worth a shot.

Yeap, the whole database with the different neurris, rhymes etc.

In addition, we reduced the resolution of the images so that they were less sparse, in order to avoid the problem of the shy gan.

And we reduced the midi resolution even more. We needed to simplify if we wanted to make some kind of progress.

And, surprisingly, the magic happened.

Lessons learned

So, what have we learned after the creation of our little monster, the MiliaGAN?

  • The amount of data needed to properly train a GAN is a lot more than we had available, bigger datasets give better results in this kind of networks. Few-shot learning in GANs is a key point being worked on in the academic community right now.
  • Time is key in training GANs, if the training is stable and there aren’t any divergences, the results keep improving with training time, sometimes getting pretty good results as the training goes on.
  • Simplify the data to be generated and fed to the neural networks as much as possible. Make life easier for your neural networks. Sparse matrices are the devil and should be condensed into a vector if possible, as neural networks love to give outputs full of zeroes if this are available to them.

Final remarks

The MiliaGAN project has been a great chance to learn DeepLearning techniques, and Generative Adversarial Networks in particular. It has only been possible thanks to the help from the AI Saturdays crew, who have created an ideal environment to learn about AI, boost the creation of a great community and the development of new projects and ideas. And, of course, to the rest of Fellows, that have helped and shared their thoughts. We are very grateful to all of you for making MiliaGAN possible. Thank you for creating this great community!

On the personal side, this project has been both challenging and a great source of fun. It combines two key aspects of our identity, our culture and our geekness. It is, additionally, the first time that  Jon and Kerman join forces in a crazy technological project (not first time for crazy projects, but this is not the place for this discussion).

Will MiliaGAN revolutionize the world of bertsolarism? We frankly doubt it, but hey, if someone ever asks, we had fun and we learned.

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) a la vez que se realizan proyectos de impacto social (#ai4good). Si quieres aprender más sobre este proyecto (y otros) únete a nuestra comunidad en o aprende a crear los tuyos en nuestro programa AI Saturdays.

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!


Detección de datos de facturas manuales

La Paz. Deep Learning. 2021


La declaración de facturas es uno de los deberes que tienen un porcentaje de la población boliviana, ya sean contribuyentes dependientes o independientes. Si bien es posible importar los datos de una factura electrónica por medio del escaneo de un código QR. El realizar dicha transcripción de una factura manual llega a ser más complicado, lento y moroso, a la hora de transcribir el número de NIT, el número de autorización y el número de factura de cada una. Especialmente para personas que no son muy familiarizadas con sistemas computacionales, siendo este una parte importante de la población adulta en Bolivia.


Figura 1. Imágenes de una Factura Manual


Figura 2. Imágenes de una Factura Manual y una Factura Digital

Es por ello, que el presente proyecto es un prototipo de un sistema de reconocimiento óptico de caracteres que identifique los valores previamente mencionados. Y por consiguiente permita al usuario exportar dicha información en un archivo CSV o XLSX, para su fácil importación en la plataforma de declaración de facturas SIAT (Sistema Integrado de Administración Tributaria).

Figura 3. Pantalla principal de la plataforma SIAT, para la importación de datos de facturación.

Figura 4. Botón de importación de archivos xls o xlsx.

Descripción del problema

El problema identificado es la cantidad de tiempo que se invierte a la hora de transcribir la información de cada una de las facturas manuales; tanto a personas con tiempo limitado por múltiples actividades personales o profesionales, como a personas con poca habilidad computacional.


El proyecto busca facilitar la detección de los datos más largos de facturas manuales, siendo estos el número de NIT de la empresa, el número de autorización, y el número de factura. Para su posterior exportación en formatos CSV o XLSX para su posterior importación en la página de Mis Facturas del SIAT (Sistema Integrado de Administración Tributaria).

Selección del modelo


Se utiliza CRAFT (Character-Region Awareness For Text detection) [1], esto debido a que nos permite localizar las regiones de caracteres individuales y vincular los caracteres detectados a una instancia de texto. Se podría haber utilizado Tesseract el cual es un módulo de ORC pero falla en textos con curvas y formas irregulares en ciertos tipos de fuentes.


Figura 5. Ilustración esquemática de la Arquitectura del modelo CRAFT

La arquitectura se basa en la red neuronal convolucional CNN, VGG-16 [2], es esencialmente para la extracción de características que se utiliza para codificar la entrada de la red en una determinada representación de características y el segmento de decodificación de la red CRAFT.

Figura 6. Modelo de la CNN VGG-16.

Técnicas implementadas

Las técnicas implementadas por el modelo CRAFT son las básicas para la detección de caracteres, como ser: cortes, rotaciones y/o también variaciones de colores.

Figura 7. Procedimiento de división de caracteres para lograr anotaciones a nivel de caracteres a partir de anotaciones a nivel de palabra: 1) Se recorta la imagen a nivel de palabra; 2) Se predice la puntuación de la región; 3) Se aplica el algoritmo watershed; 4) Se obtienen los cuadros delimitadores de caracteres; 5) Se desempaquetan los cuadros delimitadores de caracteres.

Evaluación de modelos

Al ser un modelo pre-entrenado de KERAS-OCR, con el modelo de CRAFT [3]. Podemos ver su eficacia con respecto a otros modelos similares para la detección de caracteres:


Figura 8. Comparativa de diferentes modelos, donde se utilizaron los dataset ICDAR y MSRA-TD500. Dónde: P es la Precisión, R es Recall, H es la H-mean y FPS los cuadros analizados por segundo [4].

Análisis de resultados

Una vez importada la imagen de la factura, se obtienen todos los valores que son detectados en la misma. Por lo que cortamos la imagen en dos, para tener solamente la parte derecha; donde se encuentran los datos que intentamos recopilar. Ya que como se ve en la Figura 9, la cantidad de datos es excesiva.

Figura 9. Detección de caracteres de una factura manual.

Una vez tenemos todos los datos detectados y convertidos en tipo STRING, en un dataframe creado con Pandas. Comparamos cada una de las columnas, buscando el texto deseado. Por tal motivo, comparamos la cantidad de caracteres que tiene el NIT del proveedor (de 8 a 10 caracteres), el Número de autorización (14 a 16 caracteres) y el Número de factura (4 a 6 caracteres). Por lo que, hallamos tras la búsqueda de columnas el valor deseado.

Figura 10. Detección de valores deseados, transformación a un dataframe con Pandas y conversión de los datos a STRING para su posterior comparación.

Finalmente, guardamos estos valores en un dataframe creado, con la misma distribución que pide el sistema de mis facturas de la plataforma SIAT. Y exportamos en CSV, o XLSX. Y como se ve en la figura 11.

Figura 11. Exportación de datos generados a los archivos CSV y XLSX.


Por medio de este prototipo, se puede identificar los valores más relevantes y complicados de transcribir para la mayoría de las personas que realizan su declaración de facturas. Además, que el importarlos desde una foto o imagen escaneada reduce drásticamente el tiempo de transcripción de datos. Lo que sería de mucha ayuda para personas no muy familiarizadas con las computadoras, como un buen porcentaje de adultos mayores en el país.

Si bien, muchos datos son identificados. El mayor problema reside en la calidad de la imagen tomada, ya que si esta no tiene una buena nitidez o tamaño llega a tener problemas con la identificación de algunos caracteres. Y que para trabajos futuros se podría intentar solventar con un entrenamiento más personalizado y no basándose en uno pre entrenado.

A su vez, el realizar una GUI (Interfaz gráfica de usuario), ayudaría bastante en poder llevar a este prototipo a ser más amigable con el usuario. Y por ende, facilita la importación de imágenes o facturas escaneadas para su reconocimiento de caracteres y exportación final.



[1] “PyTorch: Scene Text Detection and Recognition by CRAFT and a Four-Stage Network | by Nikita Saxena | Towards Data Science.” (accessed Jul. 13, 2021).

[2] M. ul Hassan, “VGG16-Convolutional Network for Classification and Detection,” en l{\’\i}nea].[consulta 10 abril 2019]. Dispon. en https//neurohive. io/en/popular-networks/vgg16, 2018.

[3] F. Morales, “keras-ocr — keras_ocr documentation,” 2021, Accessed: 13-Jul-2021. [Online]. Available:

[4] Y. Baek, B. Lee, D. Han, S. Yun, and H. Lee, “Character region awareness for text detection,” in Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, 2019, pp. 9365–9374.

Este proyecto fue elaborado por:

  • Albert Martínez Alegría
  • Alvaro Alanoca Huaycho
  • Belinda Alcón Sullcani
  • Rodrigo Aliaga

Para el programa Saturdays.AI La Paz.

Presentación del proyecto: DemoDay


En el siguiente repositorio se encuentra el código usado para desarrollar esa aplicación:

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) a la vez que se realizan proyectos de impacto social (#ai4good).

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más sobre este proyecto (y otros) únete a nuestra comunidad en o aprende a crear los tuyos en nuestro programa AI Saturdays.

PCR test

Detección de COVID-19 en imágenes de rayos X con Machine learning

La Paz. Deep Learning. 2021


La COVID-19 es la enfermedad causada por el nuevo coronavirus conocido como SARS-CoV-2. La OMS tuvo noticia por primera vez de la existencia de este nuevo virus el 31 de diciembre de 2019, al ser informada de un grupo de casos de «neumonía vírica» que se habían declarado en Wuhan (República Popular China).

Se llama SARS-CoV-2, por las siglas:

  • “SARS” porque puede producir un “Síndrome Respiratorio Agudo Grave” (siglas en inglés: Severe Acute Respiratory Syndrome, SARS).
  • “CoV” porque es un coronavirus.
  • “2” porque ya existió un virus parecido en 2002–2003 que producía también SARS.




Las PCR (siglas en inglés de “Reacción en Cadena de la Polimersa”), son un tipo de pruebas de diagnóstico que se llevan utilizando durante años en diferentes crisis de salud pública relacionadas con enfermedades infecciosas. Estas pruebas se están usando desde los primeros días del estallido de la pandemia de coronavirus en España. Sin embargo, los test rápidos se han incorporado recientemente y, como su nombre indica, son más rápidos y sencillos. Ambos sirven para comprobar si una persona está infectada o no por el Covid-19.

PCR test

Prueba de antígeno. Esta prueba para la COVID-19 detecta ciertas proteínas en el virus. Se usa un hisopo para tomar una muestra de fluido de la nariz, y las pruebas de antígeno pueden dar resultados en minutos.

Test antígeno

Los escáneres o las radiografías producen una imagen de los órganos y estructuras (corazón, pulmones y vías respiratorias) del tórax. Pueden detectar bloqueos, inflamación y exceso de líquido.

  • Las radiografías utilizan una pequeña cantidad de radiación para producir una imagen en dos dimensiones. Por lo general, las realiza un radiólogo en el hospital mediante un equipo fijo, pero también se pueden hacer con una máquina portátil.
  • La tomografía computarizada (TC) utiliza una computadora para fusionar varias radiografías tomadas desde diferentes ángulos y producir así una imagen bidimensional que se puede convertir en una imagen tridimensional. Requiere de un equipo muy especializado y la realiza en el hospital un radiólogo especialista.

Se pueden realizar en un hospital o en otros centros sanitarios, como la consulta de un médico o una clínica.


Dado que hay kits de prueba de COVID-19 son de acceso limitado para la población en general, debemos confiar en otras medidas de diagnóstico.


En el campo de la medicina se utilizan con frecuencia radiografías y tomografías computarizadas para diagnosticar neumonía, inflamación pulmonar, abscesos y / o ganglios linfáticos agrandados. Dado que COVID-19 ataca las células epiteliales que recubren nuestro tracto respiratorio, podemos usar rayos X para analizar la salud de los pulmones de un paciente.

Una gran mayoría de los hospitales tienen máquinas de imágenes de rayos X, se plantea la siguiente pregunta: ¿Cómo se podría detectar COVID-19 en imágenes de rayos X?, sin los kits de prueba dedicados.


  • Recopilar las entradas del modelo en datasets para el entrenamiento, pruebas y validación.
  • Desarrollar un modelo de diagnóstico del covid a través de imágenes de rayos X usando deep learning, con un porcentaje de confiabilidad aceptable.
  • Evaluar los resultados del modelo a través de la matriz de confusión.


Para el desarrollo del modelo se ha utilizado un dataset del repositorio de kaggle que tiene un total de 5.856 imágenes, se ha usado radiografías de pacientes que tenían neumonía porque estos pacientes tienen una alta probabilidad de tener covid-19.


Para la construcción del modelo se utilizó Redes Neuronales Convolucionales, porque son redes neuronales diseñadas y ampliamente usadas para trabajar con imágenes.

Las redes convolucionales contienen varias hidden layers, las cuales se encargan de detectar líneas, curvas y así con las convoluciones se permitirá detectar formas más complejas como siluetas, rostros, etc.

Las herramientas utilizadas son: Tensorflow y keras. Tensorflow es una plataforma de código abierto usada para aprendizaje automático compuesta por un conjunto de herramientas, librerías y recursos que facilitan el trabajo en el desarrollo e implementación de soluciones con inteligencia artificial (IA). Keras es una librería, actualmente es API de alto nivel que proporcionan interfaces que simplifican el trabajo en el desarrollo de aplicaciones con IA, a partir de la versión 2.0 keras ya viene integrada dentro de Tensorflow.


Debido a que es una pequeña prueba de concepto de clasificación de imágenes para un curso introductorio a Deep Learning, se ha subido las imágenes del dataset a una carpeta de google drive y el desarrollo del modelo se utilizó los servicios de colab.research de Google.

Las imágenes fueron ajustadas a un tamaño de 500×500, para poder entrenar, en la siguiente imagen se observa una radiografía de un paciente normal.


Con la integración de Keras con Tensorflow, se tienen nuevas clases como “ImageDataGenerator” que facilitan la carga de imágenes:

Las imágenes fueron divididas en 3 grupos: entrenamiento, pruebas y validación.

El modelo de clasificación se puede observar en la siguiente gráfica:


Para realizar la evaluación se ha utilizado la matriz de confusión:

Donde se puede observar que el modelo ha identificado:

  • Para personas que estaban sanas y que el modelo predijo como personas sanas fueron 175 casos de verdaderos negativos (VN).
  • Para personas que estaban enfermas y que el modelo predijo como personas enfermas fueron 384 casos de verdaderos positivos (VP).
  • Para personas que estaban enfermas y que el modelo predijo como personas sanas fueron 59 casos de falsos negativos (FN).
  • Para personas que estaban sanas y que el modelo predijo como personas enfermas fueron 6 casos de falsos positivos (FP).

Con estos datos podemos calcular los siguientes indicadores:

Exactitud = (VP + VN) / (VP + VN + FN + FP)

Exactitud = (175 + 384) / (175 + 384 + 59 + 6)

Exactitud = 0,8958

La exactitud es la cantidad de predicciones que fueron positivas que fueron correctas y se llegó a un valor de 89,58%

Precisión = VP / (VP + FP)

Precisión = 384 / (384 + 6)

Precisión = 0,9846

La precisión es el porcentaje de casos positivos detectados llegó a un valor de 98,46%

Sensibilidad = VP / (VP + FN)

Sensibilidad = 384 / (384 + 59)

Sensibilidad = 0,8668

La sensibilidad es la proporción de casos positivos correctamente identificados llegó a un valor de 86,68%

Especificidad = VN / (VN + FN)

Especificidad = 175 / (175 + 59)

Especificidad = 0,7478

La especificidad trata de la cantidad de casos negativos correctamente identificados llegó a un valor de 74,78%.


Del proceso de desarrollo del modelo, de acuerdo a las librerías de Keras y Tensorflow pudimos llegar a una precisión del 89,59 %.

Con los resultados obtenidos podemos observar en la figura que el valor de la precisión se mantuvo por encima del 80%, el valor de la pérdida fue inferior al 20 %.

machine learning results

Presentación del proyecto: DemoDay

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) a la vez que se realizan proyectos de impacto social (#ai4good). Si quieres aprender más sobre este proyecto (y otros) únete a nuestra comunidad en o aprende a crear los tuyos en nuestro programa AI Saturdays.

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!


res.txt machine learning

res.txt: Resumen y traducción de texto con Machine Learning

res.txt machine learning

La Paz. 2021


El resumen de texto es el proceso de extraer la información más importante de un texto fuente para producir una versión abreviada para un usuario. Los seres humanos llevamos a cabo la tarea de resumen, ya que tenemos la capacidad de comprender el significado de un documento y extraer características destacadas para resumir los documentos utilizando nuestras propias palabras. Sin embargo, los métodos automáticos para el resumen de texto son cruciales en el mundo actual, donde hay falta de trabajadores y de tiempo para interpretar los datos.

Figura 1:  Cantidad de datos generados de manera anual


internet languages

Figura 2: Idiomas predominantes en internet

Hoy en día, con el constante crecimiento de la información el estar actualizados en cualquier tema es una necesidad. Pero las fuentes de información usualmente son extensas y poseen una gran cantidad de texto pero lo más importante es que la información está en inglés.


Desarrollar una aplicación que pueda ayudar a la comprensión de un documento de texto en inglés y acorte el tiempo de comprensión de un texto largo.

Solución propuesta

Hacer la aplicación en base a métodos de DeepLearning enfocados a attention mechanism. Estas técnicas imitan la atención cognitiva. Esto provoca la mejora en las partes más importantes de los datos de entrada y desvanece el resto.


CNN Daily Mail es un conjunto de datos de más de 300 mil artículos en inglés escritos por periodistas en CNN y en Daily Mail. El tamaño del conjunto de datos es de 1.27 GiB en la versión actual, esta admite el resumen extractivo y abstracto, aunque la versión original se creó para la lectura y comprensión automática y la respuesta a preguntas abstractas. Los datos se pueden usar para entrenar un modelo para el resumen abstracto y extractivo

Modelo de DL

Figura 3: Esquema BART

BART es una arquitectura que se basa tanto en BERT y GPT, BART utiliza la arquitectura de transformer seq2seq estándar pero, después de GPT, que modificamos las funciones de activación de ReLU a GeLU. La arquitectura está estrechamente relacionada con BERT, con las siguientes diferencias:

  1. Cada capa del decodificador, además, realiza una atención cruzada sobre la capa oculta final del codificador (como en el modelo de secuencia a secuencia del transformador)
  2. BERT utiliza una feed-forward network antes de la predicción de palabras, lo que BART no hace.

Entonces en pocas palabras usa la comprensión de texto o input de BERT y GPT para el output o la generación de palabras.

Para trabajar con este modelo se lo hizo mediante el modelo base que nos provee HuggingFace.

HuggingFace es una plataforma Open Source que se enfoca en NLP, nos ayuda a construir, entrenar e implementar modelos que son estado del arte. En este caso nos ayudó a construir el modelo y con el dataset.

Entrenamiento del modelo

El proyecto fue realizado en base a los modelos provistos por la página de Hugging Face, la cual posee una gran colección tanto de modelos como de datasets para tareas de NLP (Procesamiento de Lenguaje Natural). De todas las opciones se seleccionó el modelo de sumarización abstractiva BART.

El código hace uso de las librerías “datasets” y “transformers” de HuggingFace, además de nltk para realizar la evaluación.

# Imported libraries
from datasets import load_dataset, load_metric
from transformers import AutoTokenizer
from transformers import AutoModelForSeq2SeqLM,
DataCollatorForSeq2Seq, Seq2SeqTrainingArguments, Seq2SeqTrainer
import nltk
import numpy as np
from transformers import pipeline

Para realizar el fine tuning se hizo uso del dataset “cnn_dailymail”, para la evaluación se utilizó la métrica “rouge”, y el modelo base que se usó fue “facebook/bart-base”.

raw_datasets = load_dataset(“cnn_dailymail”, “3.0.0”)
metric = load_metric(“rouge”)
model_checkpoint = “facebook/bart-base”

Se cargaron un tokenizer y un modelo haciendo referencia al modelo base seleccionado.

tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)

Del dataset “cnn_dailymail” se extrajeron los elementos que se encuentran bajo las etiquetas de “article” y “highlights” como datos de entrada y salida respectivamente.

max_input_length = 512
max_target_length = 128
def preprocess_function(examples):
inputs = [doc for doc in examples[“article”]] model_inputs = tokenizer(inputs, max_length=max_input_length, truncation=True)
# Setup the tokenizer for targets
with tokenizer.as_target_tokenizer():
labels = tokenizer(examples[“highlights”], max_length=max_target_length,
model_inputs[“labels”] = labels[“input_ids”] return model_inputstokenized_datasets =, batched=True)

Antes de entrenar el modelo se realiza la configuración de hiperparámetros.

batch_size = 4
args = Seq2SeqTrainingArguments(
evaluation_strategy = “epoch”,

Se crea una función para realizar el cómputo de métricas haciendo uso de rouge score.

def compute_metrics(eval_pred):
predictions, labels = eval_pred
decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)
# Replace -100 in the labels as we can’t decode them.
labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)

# Rouge expects a newline after each sentence
decoded_preds = [“\n”.join(nltk.sent_tokenize(pred.strip())) for pred in decoded_preds]decoded_labels = [“\n”.join(nltk.sent_tokenize(label.strip())) for label in decoded_labels]

result = metric.compute(predictions=decoded_preds, references=decoded_labels, use_stemmer=True)
# Extract a few results
result = {key: value.mid.fmeasure * 100 for key, value in result.items()}

# Add mean generated length
prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in predictions]result[“gen_len”] = np.mean(prediction_lens)

return {k: round(v, 4) for k, v in result.items()}

Una vez inicializado el modelo, definidos los hiperparámetros, datasets, tokenizer y métricas creamos un Trainer.

trainer = Seq2SeqTrainer(

Descargamos punkt tokenizer que nos permite transformar un texto por oraciones.‘punkt’)

Finalmente realizamos el entrenamiento y la evaluación



Figura 4: Pérdida a lo largo del entrenamiento

Una vez finalizada la fase de entrenamiento podemos observar la pérdida a lo largo del entrenamiento realizado en el dataset “train”.

Si bien se muestran buenos resultados, se pueden mejorar haciendo mejor sintonización y tiempos de entrenamiento con el modelo.

Los resultados obtenidos al evaluar el modelo entrenado con la métrica rouge score fueron los siguientes:

eval_loss: 1.5510817766189575

eval_rouge1: 46.8771

eval_rouge2: 23.5647

eval_rougeL: 39.6525

eval_rougeLsum: 43.3625

eval_gen_len: 17.8154


Se logró realizar una aplicación que resume y traduce el texto dado, se vio que los resultados obtenidos son óptimos para la tarea.

Se usó dos modelos para hacer la aplicación, el primer modelo es el que se entrenó de resumen este modelo ya esta en huggingface , para la parte de traducción se usó un modelo ya entrenado de huggingface. (

Trabajo Futuro

Mejorar los tiempos de inferencia que tienen los modelos al usar servicios en la nube.

Expandir los tipos de entradas que pueda tener, puesto que ahora solo soporta texto puro. (txt, docx)


Sergio Flores. —

Anna Montevilla. —

Koichi Sato. —

Josmar Suarez. —


¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) a la vez que se realizan proyectos para el bien (#ai4good). Los talleres que realizamos forman parte del programa AI 4 Schools para que cualquier persona “aprenda haciendo” IA sin importar su especialidad o nivel de partida.

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en este link o visítanos en nuestra web ¡te esperamos!


Detección de fatiga en conductores de vehículos mediante Inteligencia Artificial

La Paz. Deep Learning. 2021

Las herramientas de visión artificial han demostrado vez tras vez el gran potencial que posee en sus distintas áreas de aplicación. Una de estas está justamente relacionada con los vehículos y sus conductores. Abarcando desde movilidades autónomas hasta herramientas de uso personal el espectro es muy amplio. Por ello, en este texto se explica la implementación de un detector de fatiga en conductores mediante Inteligencia Artificial utilizando OpenCV y Dlib.


Los accidentes de tránsito son una de las principales causas de muerte en ciudadanos de todos los países. Estos se pueden clasificar de acuerdo a sus causas. Se calcula que entre un 20% y un 30% de los accidentes se deben a conductores que conducen con fatiga. Si bien la fatiga al conducir es un riesgo evitable, lastimosamente, muchos conductores no toman las precauciones necesarias cuando conducen por periodos prolongados de tiempo. Por lo tanto, los conductores con fatiga pueden beneficiarse de un sistema de Inteligencia Artificial que los alerte al momento de perder la atención.


Diseñar un sistema para detectar la fatiga en conductores.


Se seleccionó un modelo de visión artificial pre entrenado basado en la librería cv2 de OpenCV y dlib para detección facial.


  • OpenCV: La biblioteca libre de visión artificial que se está usando para obtener la imagen del conductor.
  • Dlib face landmarks: Son 68 puntos que se colocan sobre el rostro detectado para la identificación de facciones faciales, en este caso los ojos.
  • NumPy: Esta biblioteca se está usando para el cálculo de la proporción de abertura de los ojos, mediante álgebra lineal y el posicionamiento de los puntos faciales de los ojos.


El sistema construido hace uso de un modelo pre entrenado de detección facial. Con ayuda de las bibliotecas previamente mencionadas se realiza un procedimiento como sigue:

  1. Se carga el modelo detector y predictor que son los que detectan el rostro del conductor así como los 68 puntos faciales.
  2. Una función lineal detecta la proporción de aspecto en los ojos midiendo distancias entre los puntos oculares.
  3. Según el valor que se obtenga en esta proporción el programa se ramifica según el estado que considere correspondiente (despierto, cansado o dormido). Para que se considere la transición de un estado a otro debe haber una permanencia en ese estado durante un periodo de tiempo.
  4. El sistema indica en pantalla el estado identificado, este es el paso donde podría activarse o no una alarma.
  5. Este procedimiento se realiza fotograma a fotograma para tener una predicción constante del estado de fatiga de la persona.


Como se utilizó un modelo pre entrenado los resultados obtenidos por el detector facial y de los puntos de referencia del rostro son buenos.

Sin embargo, los resultados que obtuvimos en la detección del estado de fatiga son más bien fluctuantes. En ocasiones el sistema es poco sensible y no detecta estados con los ojos cerrados o, por el contrario, el sistema es pronto para indicar un estado posiblemente falso. Las razones que podrían causar este problema incluyen la calidad del video y el enfoque exclusivo en los ojos del conductor (cuando podrían tomarse en consideración otros factores como la boca).


El proyecto ha desarrollado un sistema funcional capaz de detectar la fatiga en conductores de vehículos. La consistencia en estas detecciones no es buena así que se proponen algunas sugerencias: Aplicar operaciones de erosión y dilatación para reducir el ruido en la captura de video, implementar un sistema que detecte la proporción de abertura de la boca para aumentar la consistencia, y modificar los umbrales de detección para ajustarse a las necesidades de cada conductor.


Carlos Claure –

Raquel Calle –

Liders Limpias –

Alejandro Carrasco. –


Presentación del proyecto: DemoDay

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) mediante cursos y programas intensivos donde se realizan proyectos para el bien (#ai4good).

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!Saturdays.AI

Raquel Calle


Raquel Calle



Saturdays.AI is an impact-focused organization on a mission to empower diverse individuals to learn Artificial Intelligence in a collaborative and project-based way, beyond the conventional path of traditional education.

FindPet: Identificación de mascotas perdidas con Inteligencia Artificial

La Paz. Deep Learning. 2021

En este artículo utilizaremos técnicas de Inteligencia Artificial para encontrar mascotas perdidas. Aquellas personas que han perdido a una mascota por diferentes motivos saben que aunque muchas regresan a sus dueños un gran porcentaje no logra el reencuentro. Unas 420,000 mascotas, entre perros y gatos principalmente, se pierden anualmente en el Perú y son muy pocas las que son encontradas o devueltas a sus dueños, debido a que es muy difícil identificarlas.

La identificación de mascotas por lo general se hace a través de plaquitas metálicas colgadas en su cuello, con su nombre y el teléfono del propietario. Otros optan por insertarles un chip bajo la piel y algunos pocos, por lo costoso, prefieren los GPS e, incluso, tatuarlas. Ante la pérdida de sus mascotas, las personas optan por buscarlas mediante carteles pegados en postes, a través de redes sociales, anuncios en medios de comunicación u ofreciendo recompensas en dinero o con entradas a conciertos o partidos de fútbol. Es por ello, que el objetivo de este proyecto es poder ayudar a las personas a encontrar a sus mascotas perdidas mediante Inteligencia Artificial y Deep Learning para la identificación de sus mascotas de manera rápida, precisa y económica.


Diariamente, se calcula que se extravían aproximadamente entre 30 y 40 animales domésticos, entre perros y gatos, solamente en Lima. Sin embargo, se estima que esta cifra puede ser mayor, no solo al contabilizar el resto de las ciudades de Perú, sino también porque muchas personas no saben cómo o dónde pueden reportar la pérdida o extravío de su mascota. Muy pocas mascotas son encontradas o retornadas con sus dueños, debido a que es difícil poder identificarlas y hacer el rastreo correcto. Como consecuencia de ello, muchas de las mascotas terminan como animales callejeros causando sobrepoblación que terminan contaminando la ciudad con sus heces y los parásitos que son expulsados a través de estas.


Desarrollar una aplicación que ayude a las personas a reportar y encontrar mascotas perdidas de manera rápida usando Inteligencia Artificial con técnicas de Deep Learning.


Se utilizaron datasets existentes y de acceso libre, para la clasificación de razas se utilizaron los datasets de Stanford que contiene imágenes de 120 razas de perros de todo el mundo y Thudogs que contiene 130 razas de perros junto con los bounding boxes de todo el cuerpo y la cabeza del perro en cada imagen; mientras que para la identificación de mascotas se utilizó Flickr que contiene sólo los rostros del perro y está dividido por nombre del perro perteneciendo solo a dos tipos de raza: pugs y huskies.

Proceso de Identificación de Mascotas

El proceso de identificación de mascotas perdidas mediante Inteligencia Artificial consta de cuatro fases como se muestra en la siguiente figura, a continuación se detalla cada una de ellas.

  • FASE GRUESA: Clasificación de Razas

En esta fase, ingresa la imagen de un perro perdido o encontrado y se evalúa con el modelo de clasificación de razas y como output se obtiene el top N de razas a la que pertenece el perro, esto sirve como input para la fase media donde solo ingresarán las imágenes que se tenga en base de perros encontrados o perdidos que se tenga de estas “N” razas.

  • FASE MEDIA: Detección de Rostro

En esta fase, se tiene como input la imagen del perro encontrado y el resultado de la clasificación de esta imagen obteniendo las imágenes de top N de las razas, para ser evaluados por el modelo de detección de rostros, en este caso yolo v5, obteniendo como output los bounding boxes del rostro del perro para cada imagen.

  • FASE FINA: Identificación de la mascota

En esta fase, ingresa como input las imágenes del perro encontrado o perdido junto con las imágenes del top N ya recortadas el rostro utilizando los bounding boxes obtenidos de la fase media, para hacer el entrenamiento del modelo de identificación de rostro.


Finalmente, para hacer una decisión más precisa utilizamos decisión supervisada con parámetros como la edad y el género del perro, para poder acotar y tener más precisión para identificar al perro correcto.


Para la construcción del modelo de clasificación de razas e identificación de mascotas se utilizó Redes Neuronales Convolucionales, específicamene Inception v3 y Xception, ya que que se trata de un problema de clasificación de imágenes con N posibles salidas, donde N es el número de razas o número de nombres de perros, en el caso del dataset de Stanford N tiene un valor de 120 , para Thudogs 130 y Flickr 42. Para la construcción del modelo de detección de rostro de la mascota se usó Yolo v5.

  • Inception v3

Inception-v3 es una arquitectura de red neuronal convolucional de la familia Inception que realiza varias mejoras, incluido el uso de Label Smoothing, convoluciones factorizadas 7 x 7 y el uso de un clasificador auxiliar para propagar información de etiquetas en la parte inferior de la red, junto con el uso de batch normalización para capas en la cabecera lateral.

A continuación, se muestra el diagrama de arquitectura de Inception v3:

  • Xception

Xception significa “xtreme inception”. Esta arquitectura replantea la forma en que vemos las redes neuronales, en particular las redes convolucionales. Y, como sugiere el nombre, lleva los principios de Inception al extremo.

En una red convolucional tradicional, las capas convolucionales buscan correlaciones tanto en el espacio como en la profundidad. En Inception, comenzamos a separar los dos ligeramente. Usamos convoluciones 1×1 para proyectar la entrada original en varios espacios de entrada más pequeños y separados, y de cada uno de esos espacios de entrada usamos un tipo diferente de filtro para transformar esos bloques de datos 3D más pequeños. Xception lleva esto un paso más allá. En lugar de dividir los datos de entrada en varios fragmentos comprimidos, asigna las correlaciones espaciales para cada canal de salida por separado y luego realiza una convolución en profundidad 1×1 para capturar la correlación entre canales.

A continuación, se presenta el diagrama de arquitectura de Xception, donde los datos pasan primero por el flujo de entrada, luego por el flujo medio que se repite ocho veces y finalmente por el flujo de salida. Tenga en cuenta que todas las capas de convolución y convolución separable van seguidas de la normalización por lotes.

  • Yolo v5

Yolo v5 es un modelo de detección de objetos, y su primera versión oficial fue lanzada por Ultralytics. Como YOLO v5 es un detector de objetos de una sola etapa, tiene tres partes importantes como cualquier otro detector de objetos de una sola etapa.

  • Model Backbone: se utiliza principalmente para extraer características importantes de la imagen de entrada dada. En YOLO v5, las CSP — Cross Stage Partial Networks se utilizan como backbone para extraer una gran cantidad de características informativas de una imagen de entrada.
  • Model Neck: se utiliza principalmente para generar pirámides de características. Las pirámides de características ayudan a los modelos a generalizarse bien en la escala de objetos. Ayuda a identificar el mismo objeto con diferentes tamaños y escalas. Las pirámides de características son muy útiles y ayudan a los modelos a funcionar bien con datos invisibles. Hay otros modelos que utilizan diferentes tipos de técnicas de pirámide de características como FPN, BiFPN, PANet, etc.
  • Model Head: se utiliza principalmente para realizar la parte de detección final. Aplicó anchor boxes en features y genera vectores de salida finales con probabilidades de clase, objectness scores, y bounding boxes.

A continuación se muestra el diagrama de arquitectura de Yolo v5:


  • FASE GRUESA: Clasificación de Razas
  • FASE MEDIA: Detección de Rostro
  • FASE FINA: Identificación de la mascota

Conclusiones y Recomendaciones

  • En la fase gruesa de clasificación de razas, se concluye que el modelo más óptimo es Inception v3 con un accuracy de 83.35% usando el dataset de Stanford y 78.28% para el de Thudogs.
  • En la fase media de detección de rostros, se probó únicamente el modelo Yolo v5 obteniendo un MAP de 98.5%.
  • En la fase fina de identificación de rostros, se concluye que el modelo más óptimo es Xception con un accuracy de 67.5% para el dataset de Flickr una vez realizado el data augmentation.
  • El uso de modelos de deep learning en la identificación de mascotas perdidas disminuirá el tiempo de retorno de la mascota a su hogar, permitiendo hacer el rastreo correcto.
  • En la fase fina se recomienda probar GAN’s para data augmentation.
  • En la fase gruesa, se sugiere combinar los datasets de Stanford y Thudogs, y probar los modelos desarrollados.
  • En la fase gruesa, se recomienda crear un dataset propio para identificación.
  • En la fase media, se sugiere probar nuevos modelos adicionales a yolo v5.


  • Dog Identification using Biometrics and Neural Networks

  • Dog Breed Identification Using Deep Learning

  • Yolo v5

Train Custom Data · ultralytics/yolov5 Wiki? This guide explains how to train your own custom dataset with YOLOv5 ?. UPDATED 25 July 2021. Clone this repo…

Presentación del proyecto: DemoDay

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) mediante cursos y programas intensivos donde se realizan proyectos para el bien (#ai4good).

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!Saturdays.AI


Mishel Carrion Lopez



Saturdays.AI is an impact-focused organization on a mission to empower diverse individuals to learn Artificial Intelligence in a collaborative and project-based way, beyond the conventional path of traditional education.

Detección Temprana de Incendios en Áreas Forestales con Inteligencia Artificial- Parte I

Quito. 2021

¿Sabes cuántas hectáreas se queman cada año por causa de incendios forestales? ¿Sabías que producto de esto muchas especies dejan su hábitat en busca de un nuevo hogar?¿Me creerías si te dijera que podemos utilizar la tecnología sobre todo la Inteligencia Artificial para disminuir el impacto de los incendios forestales? En este artículo, utilizaremos la Inteligencia Artificial para detectar de forma temprana incendios en áreas forestales.

Yoal igual que tú estaba un poco escéptico al inicio, pero déjame contarte cómo el ser humano puede ayudarse de la tecnología para frenar estos atentados contra la madre naturaleza. Por eso te invito a leer nuestra idea de cómo detectar incendios desde sus etapas muy tempranas para poder frenarlos y así evitar grandes desastres. ¿Te imaginas un mundo donde podamos minimizar este tipo de incendios forestales? Pues aquí colocamos casi todo lo que necesitas para llevar a cabo este proyecto y te conviertas en un defensor de la Pachamama.

Primero pasos

La idea del proyecto para detectar incendios forestales mediante Inteligencia Artificial comenzó una tarde en el taller que llevábamos en Saturday AI y con los compañeros: Luis Marcelo Viteri Aguilar, Danilo Josue Erazo Quinaluisa, Jonathan Alejandro Zambrano Mejía y Wilfredo Martel; decidimos hacer frente a esta problemática.

Idea General

La idea del proyecto de Detección Temprana de Incendios Forestales es utilizar la Inteligencia Artificial con ayuda de un Dron compuesto con un GPS y una cámara para que escaneen áreas forestales y en caso de detectar incendio envíen la alarma a un servidor principal que se encargará de notificar a los bomberos y comunidades aledañas informándoles con una foto del sector, la posición en un mapa y el porcentaje de estimación con la finalidad de evitar que se propague el incendio y arrase con la flora y fauna del sector.

Esquema del funcionamiento


Enel 2020, más de 5.5 millones de hectáreas fueron devastadas por incendios forestales a nivel mundial teniendo un gran impacto sobre la flora y fauna salvaje que habitaba en esta área.

En Ecuador, en el mismo año se perdieron aproximadamente 23.462 hectáreas y debido a la estructura montañosa de los lugares es complicado para los bomberos llegar a tiempo. El fuego devastador devoró todo a sus alrededores y tuvieron que pasar en el mejor de los casos semanas para mitigar el incendio y en el peor de los casos meses.

Ante este alarmante problema con impacto social y ambiental se pensaron soluciones que ayuden a detectar a tiempo los incendios forestales, es entonces cómo surge la idea de fusionar la Inteligencia Artificial (de ahora en adelante I.A.) con un dron para la detección temprana de incendios en las áreas forestales de nuestro país. La idea consiste en entrenar un modelo de I.A. (detectar fuego en cualquier superficie) que interactúe con el dron el cual dispondrá de una cámara y un GPS, por lo tanto, en tiempo real se sabrá la posición del incendio y enviará una alarma a los bomberos para su mitigación.

Fase de Ejecución

Para llevar a cabo la ejecución de este grandioso prototipo, que desde ya se observa a la distancia los beneficios, se realizó en cinco fases:

  1. Fase de recolección de datos (dataset)
  2. Investigación previa de modelo Pre-entrenados de I.A.
  3. Reentrenamiento y Validación del modelo
  4. Deployment del modelo
  5. Desarrollo de un sitio Web para presentación del Prototipo

Antes de continuar se aclara que la fase de integración con el dron, el servidor, notificación a las comunidades y bomberos queda pendiente para la segunda parte de este artículo.

1. Fase de recolección de datos e Investigación de modelos para Clasificación de Imágenes

Esta fase se enfocó en la recolección de imágenes de incendios forestales ocasionados alrededor del mundo y en nuestro país. Se logró obtener un total de 250 MB de información la cual se empleará como entrada para el aprendizaje de nuestro modelo.

Una vez ya obtenido el dataset, como una tarea en paralelo se realizó una investigación de modelos de I.A. clasificadores de imágenes y el que escogimos debido a su efectividad fue Yolo v5. Esto a la vez significa que se tiene que realizar un proceso de anotación que consiste en dar las coordenadas del segmento a caracterizar dentro de una imagen.

En otras palabras, explicaremos lo que implica en nuestro dataset el utilizar Yolo v5:

1. Se debe anotar o indicar los segmentos a aprender dentro de la imagen. En nuestro caso son poner las coordenadas donde hay fuego y de esta manera la herramienta Yolo V5 pueda aprender y obtener patrones de diferenciación. Para saber más sobre el proceso de anotación de Yolo v5 se recomienda echar una lectura a este enlace para despejar sus dudas.

2. Para el proceso de anotación se utilizó una herramienta de mucha ayuda llamada HyperLabel que la encontramos en enlace.

3. Una vez que se obtuvo las anotaciones, que básicamente es un archivo xml que hace alusión a la imagen con sus coordenadas, se procede a generar un archivo para el formato de Yolo v5. Para este proceso se siguió el código github ai-coodiantor.

Con estos pasos ya ejecutados, se tiene preparado el entrenamiento personalizado con nuestro propio dataset.

2. Reentrenamiento y Validación del modelo

Para la parte de entrenamiento del modelo ya pre-entrenado se utilizó Google Colab Pro con GPU v100 y un tiempo estimado de 12 horas para su finalización. Al finalizar el proceso se obtuvo como resultado del entrenamiento un modelo de inferencia con extensión .pt. En nuestro caso, nuestro archivo que servirá de insumo para inferir sobre imágenes de prueba. Antes de avanzar hay que aclarar que este modelo una vez que pase todas las pruebas, se pondrá en un dron mediante una placa Nvidia Jetson TX2 para su procesamiento en tiempo real, en donde cuando se detecte algún indicio de incendio forestal se proceda a enviar la alarma a instituciones tales como: Bomberos, Comunidades aledañas etc.

A continuación, en la Ilustración 2 se muestra el código que se utilizó para entrenar el modelo de detección de incendios.

Modelo de entrenamiento de Yolov5

3. Deployment del modelo

Una vez que se obtuvo el modelo se procedió a realizar un pequeño aplicativo en Python utilizando Flask como servidor de aplicaciones. Es decir, en Flask se tendrá una API que recibirá la imagen a inferir y el modelo nos retornará el resultado y la sección donde se ha detectado el incendio en la foto con su respectivo porcentaje de predicción. A continuación, en la Ilustración 3 se muestra el código que realiza la descripción previa.

Enlace del código.

A continuación, en la Ilustración 4 se muestra la prueba del modelo usando Postman.

Resultado de la Inferencia del modelo entrenado

4. Desarrollo de un sitio Web para presentación del Prototipo

Para nuestro prototipo se desarrolló una Landing Page que permite cargar una imagen la cual será enviada al servidor para su procesamiento para que una vez terminada la inferencia de la imagen, los resultados se envíen al cliente con las posiciones de donde se ha detectado el incendio y el porcentaje de predicción.

Las herramientas utilizadas para la página web son:

1. Angular 2+

2. Angular Material

Por otro lado, para pintar los resultados de la inferencia se utilizó canvas para posteriormente dibujar las coordenadas dentro de la imagen cargada. Vale la pena mencionar que, al momento de pintar las coordenadas debido a que las dimensiones no son las mismas se tuvo que adecuar de tal manera que todas tengan las mismas dimensiones. A continuación, en la Ilustración 5 se muestra el código.

Función de transformación de las coordenadas de yolo v5 al frontal

Finalmente, en la siguiente ilustración se muestra la Landing Page y los resultados del modelo.

Landing page para presentación del demoday
Inferencia del modelo sobre una imagen de prueba

5. Resultado del Entrenamiento

Los resultados obtenidos durante el entrenamiento son muy alentadores a pesar de haber trabajado con un dataset no tan grande. Se ha alcanzado un porcentaje de predicción del 71% lo cual es aceptable. Además, se tiene que las pruebas realizadas con imágenes con incendios forestales, se pudo detectar el incendio absolutamente en todas. Estas imágenes contenían incendios a la luz del sol, faltaría realizar pruebas con imágenes que contengan incendios forestales nocturnos.

Matriz de confusión

En la Figura 1, se muestra el desempeño de nuestro algoritmo con una predicción del 71% de acierto.

Matriz de confusión

Curva de Precisión de Recuperación (PR)

La curva PR se la utilizó para la evaluación de rendimiento de nuestro modelo. En la Figura se observa que el AP(Promedio de Precisión) es de 0.5, un nivel de precisión normal para empezar. Para conocimiento general, si este valor se acerque más a 1 será mucho mejor el nivel de precisión de nuestro modelo.

Curva PR del modelo tuneado


  • Se requiere un mayor poder computacional para entrenar modelos que tardan más de 12 horas en terminar el proceso de aprendizaje y los mismos tengan un buen porcentaje de confianza en la predicción.
  • El modelo tiene un tiempo corto de respuesta para la inferencia y esto es útil una vez que esté montado en el dron para la vigilancia de los bosques.
  • Después de realizar varios experimentos con el modelo se ve un potencial enorme que se puede explotar para detección de incendios de todo tipo.

“Nunca se alcanza la verdad total, ni nunca se está totalmente alejado de ella”. Aristóteles (384 AC-322 AC)


En el siguiente repositorio se encuentra el código usado para desarrollar esa aplicación:

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) mediante cursos y programas intensivos donde se realizan proyectos para el bien (#ai4good).

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!Saturdays.AI


Wilfredo Martel

I am a very curious and sometimes an intrepid person. I love learning and build new things.



Saturdays.AI is an impact-focused organization on a mission to empower diverse individuals to learn Artificial Intelligence in a collaborative and project-based way, beyond the conventional path of traditional education.

DETECTAA-AI: Inteligencia Artificial en el diagnóstico presuntivo de trastornos del desarrollo en niños

Quito. 2021

Utilizamos la Inteligencia Artificial para ayudarnos a realizar el diagnóstico presuntivo de trastornos en niños en edad escolar.

Saturdays.AI es una iniciativa a nivel global, cuyo principio es promover escenarios para la democratización del aprendizaje de la Inteligencia Artificial para todos y de forma ubicua. Democratizar, significa facilitar el acceso a todos los ciudadanos que deseen alcanzar una formación pertinente, relevante y de calidad, en cualquiera de los niveles educativos o profesionales. Por ese motivo, el equipo de investigación y desarrollo, conformado por: {Andrea Mariana EscobarDanny AguirreLuis Chamba ErasMarco ChiluizaPaúl Quezada}, decidió participar en la Tercera Edición del Saturdays AI Quito, que de manera inédita, ubicua y flexible, se desarrolló de manera virtual.

En la primera sesión, se desarrolló la lluvia de ideas, con el objetivo de identificar la línea de investigación base, sobre el cual se desarrollaría el proyecto, sobre todo que tenga un impacto social y relacionado con los objetivos-metas de la Agenda 2030.

Originalmente se propuso el tema “Chatbot para la gestión de emociones de niños autistas”, obteniendo el primer árbol de problemas (Fig. 1), luego, se puso en marcha la estrategia de búsqueda de literatura que permita definir el alcance a la propuesta, se encontró 27 artículos científicos vinculados a esa línea base (ver Tabla 1).

Figura 1. Árbol de problemas inicial.

La literatura científica permitió conocer y comprender lo que se ha hecho y lo que se puede hacer en temas con el autismo, con ello se concluyó que el tema es muy amplio y con mucho futuro de trabajo para proyectos vinculados a la parte informática con un fin social. Además, se identificó que no existe un conjunto de datos de acceso libre que sirva como punto de partida para el tema planteado.

Otro punto clave, fue hacer búsquedas en grupos afines al tema del autismo, tanto en redes sociales como en la Web, con ello se observó que es un tema muy delicado y complejo, desde el punto de vista de los que conviven con el autismo, o los que no lo hacemos. Posiblemente es un tema que no ha tenido una visibilidad y democratización que permita, definir políticas para apoyar y educar a todos los que nos relacionamos con personas con autismo, sea de manera directa o indirecta. Con esto, se necesitó acudir con los profesionales o especialistas en campo, para despejar muchas dudas surgidas por la exploración preliminar, y con ello ver la viabilidad de la propuesta.

En el camino surgieron nuevas pistas, se encontró un conjunto de datos en Kaggle (, relacionado con el autismo, que ha sido utilizado para construir algunos modelos que permiten por medio de la visión por computador predecir por medio de una fotografía si un niño tiene o no autismo. Con ello, cambió la perspectiva del proyecto, de pasar de las emociones (sin un conjunto de datos) al reconocimiento facial (con un conjunto de datos) en el mismo ámbito del autismo.

Para seguir en línea de conocer la opinión profesional sobre la propuesta, se realizó dos entrevistas, la primera con la especialista Amparito Morales, a la cual, se le presentó nuestra nueva idea, de que por medio de la tecnología se podía ayudar a mejorar en los diagnósticos en el área del autismo, inicialmente, se tuvo resistencia en el uso de la tecnología, pero eso fue bueno, porque permitió como equipo, convencer a la profesional de la utilidad real en escenario como en los grandes colegios o escuelas, en dónde el trabajo de los pocos especialistas (Departamento de Consejería Estudiantil (DECE)) puede ser apoyado por una herramienta que apoye en las tareas de automatización, en este caso, reconociendo cuáles de los niños por medio de una fotografía podría tener su atención prioritaria en la detección temprana del autismo.

De la primera entrevista surgió la segunda, con la reconocida investigadora Catalina López, pionera en el Ecuador por su enfoque senso-perceptivo para identificar los perfiles de autismo de acuerdo a la idiosincrasia de un país.

Actualmente, se encuentra terminando una herramienta de tamizaje orientado para niños y adolescentes de 4 a 17 años (características para alerta al diagnóstico clínico), además, durante la entrevista, Catalina López, validó la idea del proyecto, agregándole nuevas ideas vinculadas con las tecnologías, y que han surgido de sus investigaciones, como por ejemplo, realidad virtual para aplicar las herramientas de tamizaje, automatización de la herramienta de tamizaje considerando la protección de datos, privacidad, anonimato, confidencialidad, código de ética bajo principios mundiales, consentimiento informado, entre otros.

Finalmente, la investigadora propuso que un chatbot mediante la interacción sea por voz o texto, permitiría identificar patrones de comportamiento y el tema de emociones. Esta entrevista, fijó el trabajo o líneas futuras que se derivan del proyecto, centrándo el tema de reconocimiento fácil y una herramienta de tamizaje (Fig. 3), como el límite para la propuesta final del proyecto DETECTAA-AI, con la que se trabajó en el Saturdays AI.

Figura 2. Entrevista con Catalina López, Especialista en Perturbaciones de la Comunicación Humana de la Universidad Andina Simón Bolívar.
Figura 3. Lluvia de ideas del modelo inicial del proyecto DETECTAA-AI.


Los trastornos del desarrollo, técnicamente conocidos como trastornos del neurodesarrollo, son trastornos con base neurológica que pueden afectar la adquisición, retención o aplicación de habilidades específicas o conjuntos de información. Consisten en alteraciones en la atención, la memoria, la percepción, el lenguaje, la resolución de problemas o la interacción social. Estos trastornos pueden ser leves y fácilmente abordables con intervenciones conductuales y educativas o más graves, de modo que los niños afectados requieran un apoyo educativo particular. Entre los trastornos del neurodesarrollo tenemos: trastorno de déficit de atención/hiperactividad, trastornos del espectro autista, dificultades del aprendizaje, como la dislexia y las deficiencias en otras áreas académicas, discapacidad intelectual, síndrome de Rett.

El autismo es un trastorno neurológico complejo que generalmente dura toda la vida. Es parte de un grupo de trastornos conocidos como trastornos del espectro autista (TEA). Actualmente se diagnostica con autismo a 1 de cada 68 individuos y a 1 de cada 42 niños varones, haciéndolo más común que los casos de cáncer, diabetes y SIDA pediátricos combinados. Se presenta en cualquier grupo racial, étnico y social, y es cuatro veces más frecuente en los niños que en las niñas. El autismo daña la capacidad de una persona para comunicarse y relacionarse con otros. También, está asociado con rutinas y comportamientos repetitivos, tales como arreglar objetos obsesivamente o seguir rutinas muy específicas. Los síntomas pueden oscilar desde leves hasta muy severos” [1].

El autismo en Ecuador

De acuerdo a la especialista Catalina López, se tiene los siguientes avances:

A nivel mundial se estima que el 1% puede estar dentro del TEA, según la Organización Mundial de la Salud, en 2018 se reportaron 1.521 en Ecuador, y aproximadamente un 13,75% se tiene diagnósticos erróneos.

¿Cuál es el problema?

El personal que labora en los departamentos de consejería estudiantil de las unidades educativas (DECE) debe realizar evaluaciones para determinar los alumnos que pudiesen presentar problemas de comportamiento. Debido a la gran cantidad de estudiantes asignados a cada profesional de estos departamentos, el proceso de evaluación consume la mayor cantidad de tiempo disponible por este personal, dejando muy pocos recursos para profundizar el diagnóstico y apoyo a los niños que realmente presentan trastornos del desarrollo. En la Fig. 4 se observa el árbol de problemas, que se lo obtuvo, previa lluvia de ideas, lectura de la literatura y luego de las entrevistas.

Figura 4. Árbol de problemas relacionados con el proyecto DETECTAA-AI.

¿Cómo lo pensamos resolver?

Se desarrollará una aplicación Web formada por dos componentes (Fig. 3).

El primer componente ayudará a predecir qué estudiantes pueden o no tener el TEA basado en una imagen fotográfica (tipo tamaño carné) por medio de visión por computador. Los rasgos que se determinen dependen de las bases de datos disponibles. En una primera fase se utilizará la base de datos disponible en Kaggle ( para detección facial de TEA, considerando definir un proceso de entrenamiento del sistema que permita detectar nuevos factores de comportamiento a medida que se disponga de bases de imágenes adicionales.

Técnicamente, el tamizaje corresponde a la aplicación de un test o procedimiento a personas “asintomáticas”, con el objetivo de separarlos en dos grupos; aquellos que tienen una condición que podría beneficiarse de una intervención temprana; y aquellos que no.

El segundo componente realizará un tamizaje, usando el test MCHAT, y que sea la base para en el futuro implementar el procesamiento de lenguaje natural (chatbot de preguntas y respuestas).

¿Cómo se vincula el proyecto con los objetivos de desarrollo sustentables?

Se vincula con dos objetivos:

Primero, con el de Salud y bienestar (ODS 3), meta: reforzar la capacidad de todos los países, en particular los países en desarrollo, en materia de alerta temprana, reducción de riesgos y gestión de los riesgos para la salud nacional y mundial.

Segundo, con la Reducción de las desigualdades (ODS 10), meta: el avance en la reducción de la desigualdad, tanto dentro de los países como entre ellos, ha sido desigual. Todavía se debe dar más peso a la opinión de los países en desarrollo en los foros decisorios de las instituciones económicas y financieras internacionales. Además, si bien las remesas pueden ser un medio de supervivencia para las familias y las comunidades de los trabajadores migrantes internacionales en sus países de origen, el elevado costo de transferir dinero sigue reduciendo los beneficios.

¿Cuál es la hipótesis del proyecto?

El uso de la Inteligencia Artificial permitirá crear un prototipo que permita apoyar al diagnóstico presuntivo de trastornos del desarrollo en niños de edad escolar.

¿Cuál es la población objetivo?

  • Niños de 0 a 12 años
  • Padres, madres, cuidadores
  • Educadores
  • Especialistas de los DECE
  • Investigadores

¿Qué nos dice la literatura científica sobre proyectos relacionados con el reconocimiento facial?

La literatura científica que soporta nuestro proyecto se resume en la Tabla 2.

¿Qué es la visión por computador?

Es un campo de la Inteligencia Artificial enfocado a que las computadoras puedan extraer información a partir de imágenes, ofreciendo soluciones a problemas del mundo real (Fig. 5).

Figura 5. El reconocimiento facial puede ayudar a mejorar los diagnósticos, foto derecha, niño sin TEA, niño de la izquierda niño con TEA.

¿Qué áreas del conocimiento se vinculan?

  • Ciencias de la Salud (Salud Mental).
  • Ciencias de la Computación (Inteligencia Artificial, Visión por Computador).


La metodología que se utilizó fue Desing Thinking, en la Fig. 6 se observa un resumen de cada una de las etapas desarrolladas.

Figura 6. Descripción de cada una de las etapas de la metodología de acuerdo con el proyecto DETECTAA-AI.

En la Fig. 7, se tiene un lienzo de trabajo proporcionado por, para poner en marcha los principios de la metodología Desing Thinking. En este enlace Web, se observa el diseño completo del proyecto.

Figura 7. Idea general del proyecto, Mapeo de actores vinculados con el proyecto, definir los clientes o interesados en el proyecto, futuros beneficiarios, Declaración de la idea, Factores positivos, oportunidades, problemas y soluciones.



La arquitectura del proyecto está dividida en una aplicación de Frontend y una aplicación de Backend (ver Fig. 8). El Frontend, desarrollado con Flask (Framework de Python), contiene todas las interfaces con las cuales el usuario final interactúa. Esta, a su vez, se conecta mediante un endpoint al Backend. En el Backend se encuentra una API, desarrollada con Flask, que contiene un modelo de Deep Learning entrenado con librerías de TensorFlow y un conjunto de imágenes obtenidas desde Kaggle. El Frontend también interactúa con un modelo entrenado en Teachable Machine (una plataforma de Google para entrenar modelos de machine learning de forma rápida y fácil).

Figura 8. Arquitectura propuesta para DETECTAA-AI.

Enlaces Web a las API y a la aplicación de DETECTAA-AI:

Flujo de trabajo de DETECTAA-AI

Los resultados obtenidos para el primer caso (niño con TEA) son bastante favorables, ya que tanto los modelos como el cuestionario dan un porcentaje alto de detección de TEA en la persona evaluada, tal como se muestra en la Fig. 9.

Figura 9. Flujo de trabajo, caso 1.

Los resultados del segundo caso (niña sin TEA), presentan porcentajes aceptables en el diagnóstico de TEA. Tal como muestra la Fig. 10, los resultados obtenidos fueron: Teachable Machine: 100%, TensorFlow: 85.28% y M-Chat: Riesgo Bajo.

Figura 10. Flujo de trabajo, caso 2.

En el tercer caso (niño sin TEA) los resultados obtenidos de los modelos y M-chat reflejan resultados diferentes, ya que los modelos de machine learning devuelven diagnósticos acertados en cuanto a la prueba realizada, sin embargo, el M-chat retorna un Riesgo alto de tener un diagnóstico de TEA, como se muestra en la Fig. 11.

Figura 11. Flujo de trabajo, caso 3.


Con el desarrollo del proyecto DETECTAA-AI se llegó a las siguientes conclusiones:

  • Es posible detectar indicios de TEA en las personas mediante el uso de modelos de inteligencia artificial.
  • Para que un modelo tenga una tasa de confiabilidad más alta, es necesario una mayor cantidad de imágenes de entrenamiento y mejor procesamiento de esa información.
  • Los algoritmos de inteligencia artificial sirven como un apoyo a los profesionales de la salud, más no como un reemplazo.
  • Es necesario un vínculo entre la academia, estado, empresas, gremios, sociedades, para que estas iniciativas se puedan poner en marcha de acuerdo al contexto Ecuatoriano.
  • Combinar la investigación científica a procesos profesionales, permite construir prototipos escalables en el tiempo.
  • El prototipo DETECTAA-AI, debe usarse con fines académicos y de investigación, como ejemplo de prueba de concepto, y no para ofrecerla como herramienta de diagnóstico final, ya que se necesita un equipo de profesionales que aporten en la detección del TEA.

Líneas futuras

  • Implementar la herramienta de tamizaje con NLP, de tipo de preguntas y respuestas, utilizando el cuestionario propuesto por la Dra. Catalina López en el contexto Ecuatoriano, considerando la privacidad, protección de datos, entre otros.
  • Obtener una base de datos propia de imágenes en el contexto de Ecuador, para realizar pruebas al prototipo DETECTAA-AI.
  • Es recomendable aumentar una tercera herramienta de detección de TEA por NLP, el cual permita detectar presencia de tea mediante el análisis de patrones en la voz de la persona que se requiera diagnosticar.
  • Concientizar a la población que la tecnología puede ser un apoyo muy importante en el contexto de la Salud.

Recursos del proyecto DETECTAA-AI



Presentación del proyecto: DemoDay

¡Más inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) mediante cursos y programas intensivos donde se realizan proyectos para el bien (#ai4good).

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!Saturdays.AI

Public domain.


Luis Chamba-Eras

Profesor e investigador de la Universidad Nacional de Loja. Investigación en Inteligencia Artificial en Educación.



Saturdays.AI is an impact-focused organization on a mission to empower diverse individuals to learn Artificial Intelligence in a collaborative and project-based way, beyond the conventional path of traditional education.

Clasificación de idiomas originarios de Bolivia con Machine Learning

La Paz. 2021

Usamos técnicas de Machine Learning para la clasificación de idiomas.

Bolivia lucha para que no desaparezcan los idiomas indígenas, sin embargo, es aún muy complicado acceder a recursos que ayuden la asimilación y aprendizaje de los mismos. Es por ello que planteamos crear una herramienta con Machine Learning para la clasificación de idiomas, que si bien es una tarea sencilla es elemental para realizar tareas más complejas como la traducción automática, el análisis de sentimientos, conversión de habla a texto, texto a habla, etc. Este modelo de clasificación se creó usando herramientas de NLP (procesamiento de lenguaje natural) y ML (aprendizaje automático), obteniendo una precisión superior al 99%.

Desde 2006 Bolivia es líder en la defensa y reivindicación de los pueblos y las culturas indígenas en su territorio y en el mundo.

“Hoy en día, las 36 lenguas originarias en Bolivia son idiomas oficiales. En Bolivia se tiene que hablar y enseñar inicialmente un idioma originario” [1].

Pero todo esté trabajo ¿realmente tiene resultados positivos en la asimilación y aprendizaje de las lenguas originarias en Bolivia?.

Descripción del problema

Si bien en nuestro país se lucha porque no desaparezcan estos idiomas indígenas es aún muy complicado acceder a recursos que ayuden la asimilación y aprendizaje de los mismos.
Sin embargo, actualmente se puede usar la tecnología como un aliado para solucionar este problema y la detección de idiomas es un punto inicial y primordial para crear herramientas de traducción automática de texto, de conversión de texto a voz, voz a texto, voz a voz, entre muchas otras aplicaciones.


Crear una herramienta con Machine Learning capaz de identificar y clasificar idiomas originarios de Bolivia, para agilizar tareas relacionadas como la traducción, recuperación de la información, etc.

Límites y alcances

LÍMITES: Debido a la dificultad de conseguir un conjunto de datos suficientemente grande de los idiomas más hablados en Bolivia (quechua, guaraní, aymara), solo nos centramos en el idioma quechua.

ALCANCES: La herramienta de identificación, en una primera etapa, será capaz de clasificar el idioma de frases ya sea como quechua o español.


Para la clasificación de idiomas mediante Machine Learning se utilizó una metodología iterativa incremental, que conlleva las siguientes fases:

Figura 1. Metodología (Dataiku)

Captura de datos

Posterior a la creación del dataset nos dimos cuenta que éste estaba desbalanceado porque el número de frases en quechua duplicaban el de español, por esa razón decidimos balancear los datos agregando frases de español obtenidos de un dataset de Kaggle.

Figura 2. Captura de datos (Imagen extraída de un sitio web)


En esta etapa se realizaron diversas formas de pre-procesamiento, desde la ingeniería de características (feature engineering) hasta la vectorización. Las cuales se describen a continuación.

Limpieza de caracteres irrelevantes

Las frases en español de Kaggle tenían caracteres de otros idiomas e irrelevantes para la clasificación, es por ello que antes de unir con el dataset que se tenía se pasó a realizar una limpieza de todos esos caracteres de las frases de Kaggle. Una vez unido el dataset aún se tenían caracteres que no aportaban información como: dígitos, signos de puntuación, etc. y por tanto se realizó una limpieza de estos caracteres.

Técnicas implementadas

En base a la información del dataset se pudo notar que había un dato mal tabulado y se realizó la imputación de datos por valores nulos. Por otro lado, como el dataset cuenta con solo un feature y el target, no se tuvo la necesidad de reducir las dimensiones.

Análisis de los features

Cada idioma tiene sus propias reglas gramaticales y el idioma Quechua no es ajeno a eso, por ende se investigó las reglas de este idioma y se pudo notar ciertas características interesantes que lo diferencian de otros idiomas, por mencionar algunas:

  1. El alfabeto quechua cuenta con 28 consonantes (algunas consonantes son diferentes al de español como: ch’, chh, qh, p’) y 3 vocales (a, i, u)
  2. Las consonantes del quechua se clasifican según el modo de articulación, algunas de estas son:
  • Oclusivas (p, t, k, q)
  • Aspiradas (ph, th, chh, kh, qh)
  • Glotalizadas (p’, t’, ch’, k’, q’)
  • Semiconsonantes (w, y)

3. Para diferenciar el género de una persona se usan las palabras: warmi y qhari

4. La interrogación en el quechua se realiza agregando a la palabra el sufijo -chu.

Estas y muchas más características de la gramática Quechua, así como la gramática del Español fueron tomadas en cuenta para realizar las gráficas, las cuales nos permiten corroborar estas diferencias entre las reglas gramaticales en el dataset.

Uno de los gráficos que realizamos fue la frecuencia de las vocales por idioma en el dataset (Figura 3). La frecuencia de las vocales fueron calculadas según el número de caracteres de cada frase.

Figura 3. Frecuencia de vocales (Elaboración propia)

Otras gráficas que realizamos fueron la frecuencia de las consonantes como: K, H, M, R (Figura 4) y caracteres especiales como: á, é, í, ó, ú, ä, ü, ‘ (Figura 4), según el idioma.

Figura 4. Histograma de caracteres (Elaboración propia)

Estas gráficas nos permitieron aclarar algunas dudas sobre las diferencias gramaticales entre el idioma Español y Quechua, y representaron un punto clave para realizar el pre-procesamiento de los datos.

Por las diferencias de algunas letras y caracteres utilizados para cada idioma, además de ciertos sufijos o prefijos propios, numeración y demás características, decidimos vectorizar las frases según el modelo n-gram de caracteres. Para capturar características importantes en ambos idiomas delimitamos el modelo n-gram de 1 a 5, esto por temas de rendimiento y también porque consideramos que este número nos permite abstraer aquellas características gramaticales que citamos anteriormente.

Figura 5: Pre-procesamiento y vectorización de los features (Elaboración propia)

Además de vectorizar las frases según la frecuencia de caracteres únicos que tiene cada frase se aplicó la frecuencia TF-IDF, medida estadística que evalúa cuán relevante es un término para un documento en una colección. En este caso cada término es representado por cada carácter y el documento es representado por la frase del idioma en el dataset (colección de frases).

Selección y evaluación de modelos

Con los datos listos se procedió a construir los modelos de predicción. Se utilizaron modelos de clasificación debido a que tenemos un problema de clasificación binaria, sólo se tienen dos posibles etiquetas, “Quechua” y “Español”.

Por lo tanto, se utilizaron los siguientes algoritmos de aprendizaje supervisado:

  • Naive Bayes
  • Support vector Machine
  • Logistic regression

Para encontrar la mejor combinación de hiperparámetros se utilizo GridSearch de la biblioteca Sklearn.

Las matrices de confusión para los 3 modelos son:

Figura 6. Matrices de confusión, balanced accuracy y tiempo de ejecución de los 3 modelos (Elaboración propia)

Clasificación de nuevos datos

Una vez seleccionado nuestro mejor modelo, es necesario probarlo con algunas frases nunca antes vistas, por ello probamos frases que solo contienen palabras de un idioma, frases que contienen palabras de ambos idiomas que es usual en el habla coloquial de los quechua hablantes y por último una frase sin sentido. Nuestro modelo seleccionado se comporta bien con los dos primeros tipos de frases, sin embargo, al ingresar frases sin sentido que no pertenece ni al español o al quechua, estas frases son clasificadas directamente como quechua, esto se debe a que como manejamos un modelo binario el texto ingresado sea cual sea debe etiquetarlos con una etiqueta u otra.

Figura 7. Resultados del modelos (Elaboración propia)


En general, el modelo de Machine Learning para la clasificación de idiomas basado en Support Vector Machine ofrece el mejor resultado predictivo con una puntuación de precisión balanceada superior al 99%.

Específicamente, el modelo funciona bien para clasificar Español y Quechua dada la alta precisión, y puntajes f1 para estos dos idiomas.

Si bien la mejor precisión se obtuvo con SVM, considerando las variables precisión y rendimiento el mejor modelo sería el basado en Regresión Logística, ya que ofrece un tiempo de ejecución menor al de SVM y tiene una precisión superior al 99%, lo cual es un factor importante en aplicaciones en real time.

Se logró abstraer algunas características del idioma quechua, por lo que es posible realizar el mismo análisis con otros idiomas originarios de Bolivia

Trabajos futuros

Si bien este problema aparenta ser sencillo es un paso necesario para:

  • Traducción automática
  • Detección de idioma para el uso de boots
  • Análisis de sentimientos, etc.

El codigo fuente de este proyecto se puede encontrar en: github


ONU – Bolivia, a la vanguardia en la protección y promoción de las lenguas indígenasSaturdays.AI





En el siguiente repositorio se encuentra el código usado para desarrollar esa aplicación:

¡Más Inteligencia artificial!

La misión de es hacer la inteligencia artificial más accesible (#ai4all) mediante cursos y programas intensivos donde se realizan proyectos para el bien (#ai4good).

Infórmate de nuestro master sobre inteligencia artifical en

Si quieres aprender más inteligencia artificial únete a nuestra comunidad en o visítanos en nuestra web ¡te esperamos!