Speech to Text con Tensorflow (1) – Introducción

Diario de DIA4RA Pruebas unitarias speech to text

Uno de los resultados del proyecto DIA4RA, que estamos actualmente desarrollando en datahack y cuyo objetivo es dotar a un robot humanoide “Pepper”, de una serie de capacidades cognitivas que le permitan asistir a personas con Alzhéimer, ha sido la creación de un modelo de speech to text, es decir, un software que convierte la voz humana a texto, gracias al uso de técnicas de deep learning.

Dentro del proyecto DIA4RA, este modelo es el encargado de transcribir la voz humana a texto, de modo que otros modelos y sistemas implementados en el robot puedan interpretar lo que dicen los humanos que se dirigen a él. Así, este modelo es fundamental para la operativa de la máquina de estados, encargada de definir los diferentes estados que puede adoptar el robot y de la orquestación de todos los modelos y sistemas implicados en el funcionamiento del robot.

speech to text con tensorflow

A priori, uno puede pensar que para hacer esto se podría recurrir a alguno de los servicios cognitivos disponibles en la red, y no tener que embarcarse en el desarrollo de un modelo de deep learning, con todas las implicaciones que ello conlleva. Sin embargo, en datahack se decidió optar por la creación de un modelo Speech to Text propio, por la siguientes razones:

  • Adquirir más experiencia y conocimiento en el campo de la Inteligencia Artificial (IA)
  • Crear un servicio cognitivo propio, que no solo sirva para este proyecto sino que también sea la base para otros que puedan hacer uso de esta tecnologías, por ejemplo, chatbots y control remoto de drones.
  • Ser independientes a la hora de hacer uso de este tipo de servicio cognitivo.
  • Dar más valor y prestigio a la marca datahack, como una de empresas impulsoras del desarrollo e investigación de la Inteligencia Artificial para las personas.
  • Evitar que los datos recopilados por el robot vayan al Cloud, algo que puede ser crítico en este tipo de proyectos por tema de privacidad de los individuos.

Trabajando con información secuencial

El Speech to Text es un caso de uso donde se trabaja con información secuencial, es decir, una serie o sucesión de cosas que siguen un orden y/o guardan entre sí una determinada relación.

Tradicionalmente este tipo de información se ha tratado con redes neuronales recurrentes (Recurrent Neural Networks o RNN), redes neuronales con memoria que se usan para trabajar con información secuencial.

En este tipo redes la neuronas se disponen de forma secuencial, una a continuación de la otra. Cada una de ellas representa un momento temporal y tienen la capacidad de pasar la información recopilada a la siguiente. Así, a la hora de hacer las predicciones (O),  se tendrá en cuenta tanto el vector de entrada (X) como un vector de estado (h). Así, teniendo en cuenta el siguiente gráfico, para predecir Ot se tendrá en cuenta Xt  y ht-1, vector de estado resultante de la etapa anterior. Además de predecir el valor de Ot , se generaría un nuevo vector de estado ht que sería usado en la siguiente etapa (h+1). Esto se iría repitiendo de forma sucesiva.

speech to text con tensorflow

Figura 1 – Disposición de las neuronas y flujo de información en una capa de RNN

Un problema de las Redes Neuronales Recurrentes y su solución

Uno de los problemas de las Redes Neuronales Recurrentes (RNN) es que sufren lo que se conoce como el short-term memory, es decir, funcionan muy bien cuando la información útil está próxima al estado actual, pero su rendimiento va empeorando conforme esta se va alejando, es decir, no capturan bien las long-term dependencies, dependencias de larga distancia. Esto se debe a que con secuencias muy largas (más de 100 elementos), sufren lo que se conoce como vanishing gradient y tienden a “olvidar” el principio de las mismas. Así, teniendo en cuenta el siguiente ejemplo:

El gato, que ya había comido mucho pollo con verduras, estaba lleno.

Podría ocurrir que al llegar al verbo “estaba”, la RNN puede haber olvidado el principio de la frase y no sea capaz de ver que esta relacionado con la palabra “gato”.

Para minimizar este problema se usan: las GRU (Gated Recurrent Unit) y las LSTM (Long-Short Term Memory), dos tipos especiales de neuronas que cuentan con una célula de memoria, que les permite capturar mucho mejor las long-term dependencies. Y las  BRNN (Bidirectional Recurrent Neural Networks), que tienen en cuenta tanto la información anterior como  posterior a la hora de hacer una predicción en el momento actual.

Todo esto se puede combinar y crear BRNN con GRU o LSTM, con un aumento considerable de la capacidad de computación requerida durante el entrenamiento de la red neuronal.

Todo esto, aplicado al Speech to text…

En el caso del Speech To Text, donde la entrada es una secuencia y la salida también, se pueden reducir los costes de computación, haciendo uso de la arquitectura seq2seq. Está se caracteriza por tener una estructura encoder-decoder compuesta por dos Redes Neuronales Recurrentes, que usan LSTM o GRU (normalmente más la primera) y trabajan de forma que la primera red (encoder) memoriza el audio, codificándolo en un vector de contexto o sentence embedding, y la segunda red (decoder) y la segunda genera el texto correspondiente, a partir del vector de contexto que ha creado la primera.

speech to text con tensorflow

Figura 2 – Estructura encoder(verde) – decoder(morado)

Aunque esta estructura mejora los costes de computación, tiene el problema de que cuando la secuencia de audio entrante es muy larga, la red neuronal encoder tiende a olvidar la primera parte de la mismas, tras concluir su procesamiento. Para resolver esto, surgieron los mecanismos de atención.

De los mecanismos de atención y de más cosas hablaremos en el próximo post.

Muchas gracias por vuestra atención, ¡valga la redundancia! 🙂


Javier Moralo, Data & AI Creative de datahack


dia4ra cdtiEl proyecto empresarial de DATAHACK CONSULTING SL., denominado “DESARROLLO DE INTELIGENCIA ARTIFICIAL EN ROBOTS APLICADOS AL TRATAMIENTO DEL ALZHEIMER Y LA DEMENCIA” y número de expediente 00104725 / SNEO-20171211 ha sido subvencionado por el CENTRO PARA EL DESARROLLO TECNOLÓGICO INDUSTRIAL (CDTI)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *