Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD POLITECNICA DE MADRID
ESCUELA TECNICA SUPERIOR DE INGENIERIA DE SISTEMAS
INFORMATICOS
DEPARTAMENTO DE INTELIGENCIA ARTIFICIAL
TRABAJO DE FIN DE GRADO
GRADO EN INGENIERIA DE COMPUTADORES
Sistema de Reconocimiento de Comandos por
Voz Basado en Redes de Neuronas LSTM
Autor:
Juan Manuel Vicente Cabero
Tutor:
Francisco Serradilla Garcıa
Junio 2018
Abstract
Artificial Intelligence has experienced a huge growth in the last few years,
thanks to the increase in computing power and the emergence of tools that
allow complex calculations to be performed more efficiently. In addition, the
rise of smartphones has increased the volume of data generated by users,
opening up a range of new possibilities for the application of Artificial Inte-
lligence in consumer electronics. Among these applications are virtual assis-
tants, which allow the execution of certain instructions by voice command
recognition. This project aims to develop a Recurrent Neural Network, spe-
cifically a LSTM network, capable of recognizing 24 instructions, to test the
effectiveness of LSTM networks in Automatic Speech Recognition (ASR) and
to provide the basis for a future virtual assistant. The system will take as
input audio files in WAVE format, pre-process the acoustic signal and extract
the features of interest, which will serve as input for the neural network.
The output from the network will be a vector of 24 integers, one for each
class, with all of them being ’0’ except the class predicted by the network
with the highest percentage of confidence, which will take the value ’1’. The
system will interpret this vector and display the name of the analyzed file,
the command it contains and the command predicted by the network.
Resumen
La Inteligencia Artificial ha experimentado un gran crecimiento durante los
ultimos anos, gracias al aumento de la capacidad de computo y la apari-
cion de herramientas que permiten realizar calculos complejos de una forma
mas eficiente. Ademas, el auge de los smartphones ha permitido aumentar el
volumen de datos generados por los usuarios, abriendo un abanico de nue-
vas posibilidades en cuanto a la aplicacion de la Inteligencia Artificial en
la electronica de consumo. Una de estas aplicaciones son los asistentes vir-
tuales, que permiten la ejecucion de determinadas instrucciones mediante el
reconocimiento de comandos por voz. Este proyecto tiene como objetivo el
desarrollo de una Red de Neuronas Recurrente del tipo LSTM, capaz de re-
conocer 24 instrucciones, para comprobar la efectividad de las redes LSTM
en el Reconocimiento del Habla (ASR); ası como suponer la base para un
futurible asistente virtual. El sistema tomara como entrada ficheros de audio
en formato WAVE, realizara el preprocesado de la senal acustica y extraera
los atributos de interes, que serviran como entrada para la red de neuronas.
La salida de la red sera un vector de 24 enteros, uno por cada clase, siendo
todos ellos ’0’ salvo la clase predicha por la red con un mayor porcentaje de
confianza, que tomara el valor ’1’. El sistema interpretara este vector y mos-
trara por pantalla el nombre del fichero analizado, el comando que contiene
y el comando predicho por la red.
Dedicatoria
A Andrea y mi familia, por brindarme a lo largo de todos estos anos un
apoyo que ha sido fundamental para afrontar las dificultades que he encon-
trado en el camino, y para crecer como persona.
A Fran, Alvaro y Diego, cuya companıa me ha permitido crecer como pro-
fesional durante mi etapa universitaria, y a quienes considero mis ingenieros
de referencia.
Indice general
Lista de figuras VI
Lista de tablas VIII
1. Introduccion 1
1.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Impacto social . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Fundamentos teoricos 4
2.1. Inteligencia Artificial . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Machine Learning . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Deep Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4. Redes de Neuronas . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5. Redes de Neuronas Recurrentes . . . . . . . . . . . . . . . . . 7
2.6. Long Short-Term Memory . . . . . . . . . . . . . . . . . . . . 8
2.6.1. Descartando informacion: Forget gate layer . . . . . . . 11
2.6.2. Anadiendo nueva informacion . . . . . . . . . . . . . . 11
2.6.3. Actualizando el cell state . . . . . . . . . . . . . . . . . 12
2.6.4. Generando la salida . . . . . . . . . . . . . . . . . . . . 14
2.7. Aprendizaje supervisado . . . . . . . . . . . . . . . . . . . . . 15
2.7.1. Algoritmo de aprendizaje: Backpropagation . . . . . . . 15
II
2.8. Funciones de activacion . . . . . . . . . . . . . . . . . . . . . . 16
2.8.1. Tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8.2. Softmax . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.9. Metricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.9.1. Precision . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.9.2. Perdida . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.10. Optimizacion del descenso de gradiente . . . . . . . . . . . . . 19
2.10.1. Adagrad . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.10.2. Adam . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.11. Regularizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.11.1. Dropout . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.11.2. L2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.12. Procesado de audio . . . . . . . . . . . . . . . . . . . . . . . . 22
2.12.1. Preenfasis . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.12.2. Enmarcado . . . . . . . . . . . . . . . . . . . . . . . . 24
2.12.3. Funcion de ventana de Hamming . . . . . . . . . . . . 25
2.12.4. Transformada de Fourier de Tiempo Reducido (STFT ) 26
2.12.5. Bancos de filtros de Escala Mel . . . . . . . . . . . . . 27
2.12.6. Coeficientes Cepstrales en Frecuencias de Mel (MFCCs) 29
2.12.7. Normalizacion . . . . . . . . . . . . . . . . . . . . . . . 30
3. Herramientas 31
3.1. Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.1.1. Speech Recognition . . . . . . . . . . . . . . . . . . . . 32
3.1.2. Keyword Spotting . . . . . . . . . . . . . . . . . . . . . 33
3.2. Librerıas de manipulacion de datos . . . . . . . . . . . . . . . 34
3.2.1. NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.2. SciPy Library . . . . . . . . . . . . . . . . . . . . . . . 35
III
3.2.3. Pandas . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3. Librerıas de Machine Learning . . . . . . . . . . . . . . . . . . 36
3.3.1. SciKit-Learn . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.2. PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.3. Theano . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.4. TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.5. Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4. Lenguaje de programacion . . . . . . . . . . . . . . . . . . . . 38
3.5. Entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . 39
3.6. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4. Diseno 41
4.1. Descripcion del problema . . . . . . . . . . . . . . . . . . . . . 41
4.1.1. Preprocesado . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.2. Particion del dataset . . . . . . . . . . . . . . . . . . . 43
4.1.3. Entrenamiento de la red de neuronas . . . . . . . . . . 44
4.2. Estructura del proyecto . . . . . . . . . . . . . . . . . . . . . . 45
4.3. Arquitectura de la Red de Neuronas . . . . . . . . . . . . . . . 46
5. Experimentacion 47
5.1. Primer alcance: Speech Recognition . . . . . . . . . . . . . . . 47
5.2. Segundo alcance: Keyword Spotting . . . . . . . . . . . . . . . 49
5.2.1. Modelo 1 . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2.2. Modelo 7 . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.3. Modelo 15 . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.4. Modelo 18 . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.2.5. Modelo 19 . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.6. Modelo 20 . . . . . . . . . . . . . . . . . . . . . . . . . 60
IV
5.2.7. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3. Evaluacion de resultados . . . . . . . . . . . . . . . . . . . . . 65
6. Conclusiones 66
7. Futuros Proyectos 68
7.1. Streams de audio con ruido . . . . . . . . . . . . . . . . . . . 68
7.2. Integracion con una aplicacion final . . . . . . . . . . . . . . . 69
7.3. Aumento del conjunto de comandos . . . . . . . . . . . . . . . 69
7.4. Comparativa de arquitecturas . . . . . . . . . . . . . . . . . . 70
Bibliografıa 71
V
Indice de figuras
2.1. Representacion de una RNN. Fuente: Colah’s blog . . . . . . . 8
2.2. Notacion de los diagramas para las celdas LSTM. Fuente: Co-
lah’s blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3. Representacion detallada de una celda LSTM. Fuente: Colah’s
blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4. Representacion del estado de celda (cell state). Fuente: Colah’s
blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5. Representacion de una puerta (gate). Fuente: Colah’s blog . . 10
2.6. Representacion de la capa forget gate. Fuente: Colah’s blog . . 12
2.7. Representacion de las capas de actualizacion del cell state.
Fuente: Colah’s blog . . . . . . . . . . . . . . . . . . . . . . . 13
2.8. Representacion de las operaciones de actualizacion del cell sta-
te. Fuente: Colah’s blog . . . . . . . . . . . . . . . . . . . . . . 13
2.9. Representacion de la generacion de la salida. Fuente: Colah’s
blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.10. Representacion de la funcion Tangente Hiperbolica. Fuente:
Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.11. Senal de audio contenida en un fichero WAVE. Fuente: Haytham
Fayek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
VI
2.12. Senal de audio tras aplicar el filtro de preenfasis. Fuente: Hayt-
ham Fayek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.13. Representacion de la funcion de ventana de Hamming. Fuente:
Haytham Fayek . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.14. Representacion de un banco de filtros en escala Mel. Fuente:
Haytham Fayek . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.15. Espectrograma de la senal de ejemplo. Fuente: Haytham Fayek 28
2.16. Representacion de los MFCCs obtenidos de la senal de ejem-
plo. Fuente: Haytham Fayek . . . . . . . . . . . . . . . . . . . 29
2.17. Representacion de los MFCCs normalizados. Fuente: Haytham
Fayek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1. Descripcion del problema. . . . . . . . . . . . . . . . . . . . . 42
4.2. Representacion de la arquitectura de la red de neuronas. . . . 46
5.1. Metricas del modelo 7. . . . . . . . . . . . . . . . . . . . . . . 53
5.2. Metricas del modelo 15. . . . . . . . . . . . . . . . . . . . . . 55
5.3. Metricas del modelo 18. . . . . . . . . . . . . . . . . . . . . . 57
5.4. Metricas relativas del modelo 18. . . . . . . . . . . . . . . . . 58
5.5. Metricas del modelo 19. . . . . . . . . . . . . . . . . . . . . . 60
5.6. Metricas del modelo 20. . . . . . . . . . . . . . . . . . . . . . 61
5.7. Metricas relativas del modelo 20. . . . . . . . . . . . . . . . . 62
5.8. Muestra de la salida de la ejecucion de Test-app.ipynb. . . . 64
VII
Indice de tablas
5.1. Resultados del modelo 7. . . . . . . . . . . . . . . . . . . . . . 52
5.2. Resultados del modelo 15 . . . . . . . . . . . . . . . . . . . . . 54
5.3. Resultados del modelo 18. . . . . . . . . . . . . . . . . . . . . 56
5.4. Resultados del modelo 19 . . . . . . . . . . . . . . . . . . . . . 59
5.5. Resultados del modelo 20 . . . . . . . . . . . . . . . . . . . . . 61
5.6. Ficheros mal clasificados en la fase de pruebas. . . . . . . . . . 64
VIII
Capıtulo 1
Introduccion
En los ultimos anos se ha producido un crecimiento de la inversion en el
campo de la Inteligencia Artificial, aprovechando el aumento de la capacidad
de computo y la aparicion de herramientas que mejoran la eficiencia a la hora
de trabajar con calculos complejos, o bien que simplifican la realizacion de
los mismos, tales como CUDA o TensorFlow respectivamente.
Esta circunstancia, junto al auge de los smartphones, ha permitido que
comiencen a desarrollarse soluciones comerciales basadas en Inteligencia Ar-
tificial que puedan ser usadas por un gran volumen de usuarios. Entre estas
soluciones se encuentran los asistentes virtuales.
Las grandes empresas del sector tecnologico han apostado recientemen-
te por el desarrollo de asistentes virtuales, pudiendo encontrar disponibles
soluciones de Apple (Siri), Microsoft (Cortana), Google (Google Assistant y
Google Now), Amazon (Alexa) y Samsung (Bixby), entre otras. Los disposi-
tivos compatibles para cada una de las soluciones anteriores dependen direc-
tamente de los intereses de su correspondiente empresa. No obstante, todas
ellas tienen el mismo objetivo: permitir al usuario la realizacion de accio-
1
nes mediante comandos por voz, tales como busquedas en Internet, agendar
eventos en el calendario o la creacion de alarmas.
El reconocimiento de comandos por voz puede englobarse de forma gene-
ral dentro del Reconocimiento del Habla (Speech Recognition) y, dentro de
esta disciplina, la actuacion de dichos comandos como disparadores de deter-
minadas acciones se conoce como Keyword Spotting. Si bien las arquitecturas
mas sencillas para tal finalidad se basan en Redes de Neuronas Convolu-
cionales, desde 2014 han comenzado a recuperar protagonismo las Redes de
Neuronas Recurrentes y, mas en concreto, las LSTM [5], en parte gracias a la
publicacion de artıculos que explicaban su funcionamiento de una forma mas
simplificada [6] que las originales, y al incremento de la potencia de computo
del hardware comercial.
1.1. Objetivos
El objetivo de este proyecto es el diseno, implementacion y entrenamiento
de una red de neuronas basada en LSTM que permita reconocer el comando
dictado, de 24 posibles, por un determinado locutor, tomando como entrada
un fichero de audio en formato WAVE.
Para el entrenamiento, se ha hecho uso del dataset Speech Commands v2,
de Google, que contiene 35 posibles comandos, de los cuales hemos seleccio-
nado los 24 que nos pueden resultar interes. Una vez entrenado, utilizamos
el modelo para realizar predicciones a modo de prueba sobre un conjunto
de 47 ficheros, 2 por cada comando, elegidos aleatoriamente entre todo el
dataset, mostrando por pantalla el nombre, la etiqueta y la prediccion para
cada fichero.
2
La finalidad del proyecto es demostrar las capacidades de las celdas LSTM
para Keyword Spotting frente a las Redes de Neuronas Convolucionales (CNN ),
las utilizadas habitualmente para este tipo de aplicaciones.
1.2. Impacto social
Los asistentes virtuales mencionados anteriormente, como Alexa o Siri,
permiten el control de dispositivos electronicos mediante la voz. Para la ma-
yorıa de usuarios, esto supone una mera comodidad que reduce la necesidad
de escribir o realizar cualquier otra interaccion con la pantalla.
No obstante, es necesario recordar que hay usuarios que no pueden inter-
actuar con normalidad con estos dispositivos. Algunos usuarios tienen pro-
blemas de vision que les impiden enfocar correctamente a una distancia tan
corta como la de un movil, otros pueden tener dificultades debido a que el
tamano de las letras o de los diferentes menus de las interfaces graficas son
demasiado pequenos, o incluso pueden carecer de la capacidad de ver en su
totalidad.
Mas alla de los problemas de vision, hay usuarios que tampoco pueden
hacer un uso normal de los dispositivos debido a problemas de psicomo-
tricidad o a otras formas de discapacidad fısica. Para todos estos usuarios,
la posibilidad de que un dispositivo reconozca una serie de comandos que
realicen determinadas acciones basicas les permite hacer uso de los mismos
sin depender de otra persona, haciendoles ganar autonomıa y mejorando su
calidad de vida.
3
Capıtulo 2
Fundamentos teoricos
El Keyword Spotting, como parte del reconocimiento del habla (Speech
Recognition), se basa principalmente en la utilizacion de Redes de Neuronas,
pudiendo englobarse dentro del campo del Deep Learning, a su vez com-
prendido dentro del Machine Learning o Aprendizaje Automatico, y de la
Inteligencia Artificial, respectivamente. El conocimiento de estos conceptos,
ası como su correspondiente base matematica, resultan fundamentales para
el entendimiento del proyecto, sus objetivos, sus recursos y sus limitaciones.
El presente capıtulo introduce todos los conceptos considerados de in-
teres en el ambito del proyecto, ası como el estado del arte del campo del
reconocimiento del habla.
2.1. Inteligencia Artificial
El termino Inteligencia Artificial (IA) fue utilizado por primera vez por
John McCarthy en el ano 1956. La IA engloba la realizacion de tareas carac-
terısticas de la inteligencia humana por parte de maquinas, entiendiendolas
4
como aquellas cuya realizacion resulta simple para las personas y que, a su
vez, resultan difıciles de describir [1, 2].
2.2. Machine Learning
Para solucionar los problemas planteados por el amplio campo de la Inteli-
gencia Artificial, es necesario dotar a los sistemas de conocimiento. El Apren-
dizaje Automatico o Machine Learning comprende todas aquellas tecnicas y
algoritmos que permiten que los sistemas adquieran su propio conocimiento
mediante la extraccion de patrones de datos no procesados.
La introduccion del Machine Learning permitio la utilizacion de maquinas
para resolver problemas que requerıan conocimiento del mundo real, ası como
la toma de decisiones aparentemente subjetivas [1]. Entre los problemas que
pueden resolver algoritmos simples de Machine Learning estan el filtrado de
emails considerados como correo basura o spam, o la clasificacion de 3 especies
de plantas de la familia Iridaceae, cuyas componentes se conocen comunmente
como lirios, mediante la utilizacion del Iris Dataset [3] recopilado por Ronald
Fisher en 1936 [4].
El funcionamiento de los algoritmos de Aprendizaje Automatico depende
en gran medida del formato de representacion de los datos que se les propor-
ciona, dado que este define los fragmentos en los que se pueden dividir los
datos, llamados atributos o features.
5
2.3. Deep Learning
El Aprendizaje Profundo o Deep Learning es uno de los muchos posibles
enfoques del Machine Learning, como tambien lo son los arboles de decision y
la agrupacion (clustering), entre otros. Se basa en el entendimiento del mun-
do como una jerarquıa de conceptos, permitiendo a las maquinas aprender
conceptos complejos en base a otros mas simples con los que tengan relacion.
Si representamos esta jerarquıa de conceptos en forma de grafo obtenemos
uno de gran profundidad, en lo que respecta al numero de capas, dando lugar
al nombre de Deep Learning [1].
2.4. Redes de Neuronas
Las Redes de Neuronas (Neural Networks, NN ), tambien conocidas como
Redes de Neuronas Artificiales (Artificial Neural Networks, ANN ), son mo-
delos matematicos que permiten solucionar problemas siguiendo el enfoque
del Deep Learning. Su estructura se basa en grafos divididos en capas, com-
puestas por una serie de nodos (neuronas), que se interconectan permitiendo
fluir la informacion, de forma que cada neurona aprende a identificar un de-
terminado concepto (atributo), filtrandose ası la informacion hasta obtener
una salida.
Las Redes de Neuronas deben disenarse en funcion del problema a re-
solver y del formato de los datos con los que se pretende realizar la ingesta
al modelo. No obstante, independientemente de la topologıa (Feedforward,
Recurrente) y la arquitectura de la red, esta siempre tiene un mınimo de dos
capas, correspondiendose con la entrada de datos y la salida de los resultados.
6
Ademas, puede tener un numero indefinido de capas ocultas.
Tras disenar la arquitectura, es necesaria la adaptacion del modelo para
que reconozca los atributos de los datos que recibe y que filtre correctamente
la informacion. Esta fase de adaptacion, conocida como entrenamiento, se
basa en el reajuste de los pesos de las conexiones entre neuronas basandose
en un conjunto de datos, con el mismo formato de representacion que los
que seran proporcionados cuando el modelo se encuentre en funcionamiento,
entendiendose como la utilizacion del modelo para realizar predicciones en
base a los datos introducidos. Para el entrenamiento se pueden utilizar di-
versos metodos de aprendizaje (supervisado, no supervisado, por refuerzo) y
algoritmos de reajuste de pesos, aunque generalmente se recurre al Algoritmo
de Retropropagacion o Backpropagation.
2.5. Redes de Neuronas Recurrentes
Las Redes de Neuronas con topologıa Recurrente (Recurrent Neural Net-
work, RNN ) son aquellas que, ademas de presentar interconexiones con pro-
pagacion de informacion de una determinada capa hacia las siguientes, per-
miten interconexiones con capas anteriores. Entendiendo la representacion
de una red de neuronas como un grafo, las redes recurrentes son aquellas que
permiten la presencia de bucles. Generalmente, estas conexiones se suelen
utilizar como retroalimentacion, de forma que la salida de una capa determi-
nada se propaga hacia la primera capa oculta, haciendola funcionar a modo
de capa de entrada.
El objetivo perseguido por esta topologıa es la capacidad de modelizar
7
secuencias de datos x1, . . . , xn, permitiendo escalar la red a secuencias de
entrada de un tamano mucho mayor del que puede resultar practico para
redes sin esta especializacion. Ademas, la mayorıa de las redes recurrentes
permiten procesar secuencias de longitud variable [1].
Figura 2.1: Representacion de una RNN. Fuente: Colah’s blog
En la figura 2.1 encontramos un diagrama que muestra, de forma simplifi-
cada, la arquitectura de una red recurrente. La capa de entrada se representa
como xt y la capa de salida como ht, siendo t en ambas el instante temporal;
mientras que A representa las capas ocultas de la red. A la derecha de la
figura podemos ver una version ”desenrrollada”de la red, en la que el bucle
se representa como una secuencia temporal, teniendo por tanto una secuen-
cia de entrada x1, . . . , xt y una de salida h1, . . . , ht, en este caso siendo t el
instante actual.
2.6. Long Short-Term Memory
Dentro de las diversas tipologıas de Redes de Neuronas Recurrentes exis-
tentes, nuestro proyecto se basa en la utilizacion de las denominadas redes
Long Short-Term Memory (LSTM) [5]. Estas redes se caracterizan por que
8
su unidad atomica es la celda LSTM, a diferencia de las redes de neuronas
tradicionales cuya unidad atomica es la neurona.
Las celdas LSTM pretenden dotar a la red de la capacidad de ”memo-
rizar”, permitiendo mantener un contexto a largo plazo y no unicamente el
actual a la hora de calcular la salida de cada celda [6]. Esta funcion de me-
moria es la que se denomina el estado de celda, que determina la informacion
a almacenarse en una celda LSTM determinada. Cada celda LSTM esta for-
mada por 4 capas de una Red de Neuronas estandar, que interactuan entre
sı mediante determinadas operaciones que detallaremos a continuacion.
En la figura 2.2 detallamos la notacion a seguir en todos los diagramas
de la presente seccion.
Figura 2.2: Notacion de los diagramas para las celdas LSTM.Fuente: Colah’s blog
La idea principal detras de las celdas LSTM es el estado de celda (cell
state), representado en la figura 2.4. Es un flujo de informacion que atraviesa
la red de principio a fin, experimentando unicamente algunas operaciones
lineales, que facilitan que la informacion fluya inmutable por la red cuando
sea conveniente.
9
Figura 2.3: Representacion detallada de una celda LSTM.Fuente: Colah’s blog
Figura 2.4: Representacion del estado de celda (cell state).Fuente: Colah’s blog
Para controlar el cell state se recurre a estructuras llamadas puertas (ga-
tes), compuestas de una capa sigmoide de Red Neuronal y un producto de
funciones entre la salida de dicha capa y el contenido del cell state. Podemos
ver una representacion de esta estructura en la figura 2.5.
Figura 2.5: Representacion de una puerta (gate). Fuente: Colah’s blog
10
La capa sigmoide produce una salida con un valor entre 0 y 1, describien-
do en que medida debe dejarse pasar el componente en cuestion, pudiendo
entender el valor como un porcentaje.
En los siguientes apartados, detallaremos el flujo que sigue la informacion
a traves de una celda LSTM hasta producir la salida, con el fin de comprender
plenamente su funcionamiento.
2.6.1. Descartando informacion: Forget gate layer
La capa de puerta de olvido, comunmente conocida por su nombre en
ingles forget gate layer, es el primer paso a realizar para decidir que infor-
macion del cell state debe conservarse. La forget gate consiste unicamente de
una capa sigmoide, que toma como entradas la salida del estado anterior ht−1
y la entrada del estado actual xt, produciendo como salida ft. La funcion de
la capa forget gate queda definida en la ecuacion (2.1).
ft = σ(Wf · [ht−1, xt] + bf ) (2.1)
En la ecuacion anterior, Wf representa la matriz de pesos de la capa en
cuestion, y bf representa el (bias) de la misma.
2.6.2. Anadiendo nueva informacion
Tras la capa forget gate, el siguiente paso en el flujo de informacion es la
decision de que nueva informacion se anade al cell state. Este paso se divide
en dos partes: una capa sigmoide, denominada capa de puerta de entrada o
11
Figura 2.6: Representacion de la capa forget gate. Fuente: Colah’s blog
input gate layer, y una capa tanh. La capa input gate, cuya funcion queda
definida en la ecuacion (2.2), se encargara de determinar que valores van a
ser actualizados.
it = σ(Wi · [ht−1, xt] + bi) (2.2)
Por su parte, la capa tanh crea, mediante la funcion definida en la ecua-
cion (2.3), un vector de nuevos valores candidatos (Ct) a ser anadidos al
estado.
Ct = tanh (WC · [ht−1, xt] + bC) (2.3)
2.6.3. Actualizando el cell state
Una vez ejecutados los pasos anteriores, es el momento de aplicar las
actualizaciones al cell-state, transformando Ct−1 en Ct. Multiplicaremos el
estado anterior por el resultado de la capa forget gate para olvidar la in-
formacion que corresponda y, a continuacion, agregamos la informacion que
12
Figura 2.7: Representacion de las capas de actualizacion del cell state.Fuente: Colah’s blog
hemos decidido anadir mediante la capa input gate de los posibles candidatos
obtenidos en la capa tanh.
Las actualizaciones a aplicar en el cell state Ct quedan definidas en la
ecuacion (2.4).
Ct = ft ∗ Ct + it ∗ Ct (2.4)
Figura 2.8: Representacion de las operaciones de actualizacion del cell state.Fuente: Colah’s blog
13
2.6.4. Generando la salida
Por ultimo, debe determinarse la salida de la celda en funcion del cell state
y de la salida del estado anterior ht−1, realizandose este proceso mediante 2
operaciones.
En primer lugar, debemos ejecutar la capa output gate (ot), nuevamente
de tipo sigmoide, que toma como entrada ht−1. y queda definida en la ecuacion
(2.5). A continuacion, se filtra el cell state mediante la aplicacion de la funcion
tanh para reajustar la escala de los valores de esta entre -1 y 1. Por ultimo,
se realiza el producto de funciones del resultado de tanh y ot para obtener
la salida del estado actual ht, tal y como se define en la ecuacion 2.6.
ot = σ(Wo · [ht−1, xt] + bo) (2.5)
ht = ot ∗ tanh (Ct) (2.6)
Figura 2.9: Representacion de la generacion de la salida.Fuente: Colah’s blog
14
2.7. Aprendizaje supervisado
Una vez definidos todos los componentes de la arquitectura de la red de
neuronas, es necesario determinar la metodologıa de aprendizaje a aplicar
para el entrenamiento de la misma. Podemos optar por aprendizaje supervi-
sado, no supervisado o por refuerzo.
Por la naturaleza de los datos con los que se realiza la ingesta, y a fin
de disminuir lo maximo posible el tiempo de entrenamiento, la opcion mas
adecuada de las 3 planteadas anteriormente es la del aprendizaje supervisado.
Esta metodologıa se basa en proporcionar a la red un conjunto de datos
de entrada junto con el conjunto de salidas esperadas, dotandola de un cono-
cimiento a priori de los resultados que deberıa obtener para cada conjunto de
atributos. Permite un aprendizaje mas rapido que las otras dos metodologıas
al conocer de antemano la categorıa de cada entrada, buscando los patrones
comunes entre los ficheros de una misma clase.
2.7.1. Algoritmo de aprendizaje: Backpropagation
Para realizar el entrenamiento de la red, es necesario comparar la salida
esperada de la red con la salida obtenida. El objetivo es minimizar el error en
la salida mediante el reajuste de los pesos de las conexiones entre neuronas.
Para este fin es necesario recurrir a un algoritmo que tome el error de
la salida y reajuste los pesos en consecuencia. El algoritmo mas utilizado,
y al que recurrimos en este proyecto, es el algoritmo de retropropagacion o
Backpropagation.
15
Este algoritmo parte de la salida obtenida por la red, y comienza a re-
ajustar los pesos propagando su error hacia atras, de forma iterativa, hasta
llegar a la capa de entrada.
Las Redes de Neuronas Recurrentes presentan el problema del Desvane-
cimiento de Gradiente (Vanishing Gradient) [7], al reducirse el gradiente en
estas propagaciones hacia atras de forma paulatina hasta llegar a 0, provo-
cando un estancamiento en el entrenamiento de la red; aunque este problema
queda solventado con la introduccion de celdas LSTM debido a su capacidad
para mantener los contextos a largo plazo.
2.8. Funciones de activacion
Tal y como se ha mencionado anteriormente, cada nodo (neurona) tiene
una funcion de activacion que permite determinar cual debe ser su salida en
base a la entrada recibida. Generalmente, todas las neuronas de una misma
capa utilizan la misma funcion de activacion por lo que, dependiendo del tipo
de capa y de la finalidad de la red, se debe optar por unas u otras funciones
de activacion. Esta eleccion tambien influye en el tiempo de entrenamiento,
dado que algunas funciones requieren mas tiempo de computo que otras para
su proceso.
En esta seccion introducimos las funciones de activacion utilizadas en la
arquitectura final de nuestra solucion.
16
2.8.1. Tanh
La utilizacion de la funcion Tangente Hiperbolica (tanh) en las celdas
LSTM se ve motivada por el paper original de Hochreiter et al. [5], donde se
presentan las redes LSTM recurriendo en sus celdas a la funcion de activacion
que nos ocupa. Esta funcion queda definida por la grafica representada en la
figura 2.10.
Figura 2.10: Representacion de la funcion Tangente Hiperbolica.Fuente: Wikipedia
La funcion de activacion tanh se considero ideal para su utilizacion en las
redes LSTM debido a la necesidad de que la segunda derivada de la funcion
de activacion fuese capaz de mantener su valor durante un cierto periodo de
tiempo antes de llegar a 0, para poder dotar a las celdas de la capacidad de
retener contextos a largo plazo.
El principal inconveniente de la funcion tanh es el alto coste de compu-
tacion que requiere para su calculo respecto a otras funciones. Sigue siendo el
estandar en las redes LSTM por la ausencia de alternativas que cumplan las
caracterısticas necesarias. No obstante, se han encontrado algunas referencias
a la funcion Softsign, la cual es menos propensa a la saturacion (desvane-
17
cimiento de gradiente) y permite mantener contextos a largo plazo con un
coste de computo menor que tanh, reduciendose notablemente el tiempo de
entrenamiento [8].
2.8.2. Softmax
Nuestra solucion al problema se plantea como un clasificador de multiples
clases, en el que cada entrada pertenece a una unica clase. Esto hace ideal
la utilizacion de la funcion Softmax, dado que esta nos devuelve una lista
de probabilidades de pertenencia a cada una de las posibles clases, sumando
un total del 100 %, y asignando la salida a la clase con mayor probabilidad.
Dada su naturaleza, unicamente es utilizada en la capa de salida de la red.
2.9. Metricas
La construccion de un modelo de Machine Learning requiere de la aplica-
cion de metricas que nos permitan cuantificar los resultados obtenidos. Las
metricas a evaluar se eligen en base a la naturaleza del problema a resolver
y a las funciones de activacion utilizadas, aunque se pueden distinguir dos
tipos de metricas que resultaran de interes, y que exponemos en esta seccion.
2.9.1. Precision
En primer lugar, es conveniente conocer la proporcion de aciertos en el
total de predicciones del modelo. Hay diferentes metricas que nos permiten
conocer este dato dado que, en ocasiones, la naturaleza del problema hace
18
que el cociente entre aciertos y el total no sea suficiente para determinar la
calidad del desempeno del modelo.
El alcance actual de nuestro proyecto define un clasificador sin ningun
requerimiento especial, por lo que optamos por utilizar la version por defecto
de la precision (accuracy) proporcionada por Keras.
2.9.2. Perdida
La perdida nos permite conocer la evolucion del error en las predicciones
del modelo, resultando la metrica mas fiable para monitorizar el entrenamien-
to de la red. Cuanto menor sea su valor, mayor capacidad de generalizacion
tiene el modelo.
Dado que utilizamos la funcion de activacion Softmax en la capa de sali-
da, la funcion de perdida mas adecuada es categorical crossentropy, ya
que que su valor se incrementa en funcion a la divergencia de la prediccion
respecto al valor esperado. Se diferencia de la funcion binary crossentropy
en que nos permite trabajar con mas de una clase.
2.10. Optimizacion del descenso de gradiente
Una vez definidos los parametros de la arquitectura y las metricas a uti-
lizar para cuantificar el desempeno del modelo, resulta de interes recurrir a
algoritmos que modifiquen durante el entrenamiento, y de forma automati-
ca, los valores de los hiperparametros, como la tasa de aprendizaje, en base
a los resultados que se obtienen en cada momento. El fin de estos algorit-
19
mos es optimizar la evolucion del descenso de gradiente, en la busqueda de
la convergencia de la funcion de perdida. El algoritmo a utilizar depende
de la naturaleza del problema, y de los hiperparametros cuya modificacion
consideremos de interes para optimizar los resultados.
En esta seccion introducimos los dos algoritmos de optimizacion de des-
censo de gradiente que hemos valorado para el desarrollo del proyecto. Ambos
permiten modificar automaticamente la tasa de aprendizaje, aunque final-
mente nos decantamos por la utilizacion de Adam, debido a las caracterısticas
que exponemos en los siguientes apartados.
2.10.1. Adagrad
Adagrad [9] es un algoritmo que adapta el valor de la tasa de aprendizaje
en base a los parametros, realizando actualizaciones mas pequenas (reduccion
de la tasa de aprendizaje) para parametros asociados a atributos con una
ocurrencia frecuente, y grandes (aumento de la tasa de aprendizaje) ante
atributos infrecuentes [10]. Esto permite que al inicio del entrenamiento,
cuando la funcion de perdida aun esta lejos de converger, se pueda tomar
una tasa de aprendizaje alta debido a que los atributos aun son infrecuentes;
y que, a medida que avanza el mismo, se disminuya progresivamente el valor
de la tasa de aprendizaje para alcanzar la convergencia.
La principal debilidad de Adagrad es su acumulacion de los cuadrados
de los gradientes, que lleva al estancamiento de la tasa de aprendizaje y,
eventualmente, a tomar un valor infinitesimal proximo a 0, impidiendo que
el modelo adquiera nuevo conocimiento [10].
20
2.10.2. Adam
Adam (Adaptive Moment Estimation) [11] pretende mitigar la principal
debilidad de Adagrad mediante la reduccion exponencial de la media de los
cuadrados de los gradientes anteriores, como tambien hacen Adadelta [12] y
RMSProp [10].
El factor diferencial de Adam frente a otros algoritmos de optimizacion del
descenso de gradiente es que, ademas de lo expuesto anteriormente, mantiene
una reduccion exponencial de la media de los gradientes anteriores, y no solo
de sus cuadrados. Los autores muestran empıricamente que Adam reporta
un buen funcionamiento, y que obtiene resultados favorables en comparacion
a otros algoritmos de adaptacion del aprendizaje [11].
2.11. Regularizacion
Las tecnicas de regularizacion permiten mitigar el sobreentrenamiento
mediante la penalizacion de los modelos complejos, actuando sobre los datos
o sobre las conexiones de la red, en funcion de la tecnica en cuestion. En esta
seccion introducimos las dos tecnicas de regularizacion que hemos valorado
durante el desarrollo del proyecto.
2.11.1. Dropout
La tecnica de Dropout [13] consiste en desechar sistematicamente un por-
centaje determinado de las conexiones de la capa donde se aplique, lo que se
ha probado como una medida simple y efectiva para mitigar el sobreentrena-
miento.
21
Hemos recurrido a la tecnica de Dropout en las capas LSTM de nuestro
modelo, tanto sobre las conexiones entre capas como sobre las conexiones
recurrentes, desechando un 20 % (valor por defecto) de las conexiones en
cada caso.
2.11.2. L2
La tecnica de regularizacion L2 [14] nos permite cuantificar la compleji-
dad de los modelos, definiendose como la suma de los cuadrados de todos
los pesos de los atributos, como se muestra en la ecuacion (2.7). En esta
formula, los pesos cercanos a 0 tienen un efecto practicamente despreciable
en la complejidad del modelo, aumentandose notablemente el impacto en la
complejidad cuanto mayores sean esos pesos.
L2 regularization term = ||w||22 = w21 + w2
2 + . . .+ w2n (2.7)
A pesar de haberse valorado, finalmente no se ha considerado necesaria su
aplicacion debido a la obtencion de buenos resultados aplicando unicamente
Dropout.
2.12. Procesado de audio
De forma previa a la ingesta de datos a la red, estos deben pasar por una
fase de preprocesado que permita extraer los atributos o features de interes,
dado que la red no puede trabajar con los datos en bruto, es decir, con los
ficheros de audio como entrada.
22
A la hora de preprocesar los datos se puede optar por dos enfoques:
obtener los espectrogramas y disenar una red que trabaje con imagenes con
entrada, o bien tratarlos como secuencias de vectores de numeros en coma
flotante (floats). Dado el objetivo perseguido por nuestro proyecto, se opta
por el segundo enfoque.
El procesado de audio requiere una serie de operaciones [15] , a realizar
de forma secuencial, sobre la senal contenida en cada uno de los ficheros
WAVE que componen el dataset. Esta seccion expone detalladamente en que
consisten dichas operaciones.
2.12.1. Preenfasis
El primer paso a realizar sobre la senal de audio es un filtro de preenfasis,
con el objetivo de amplificar las frecuencias altas. Este filtrado nos permite
equilibrar el espectro de frecuencias, dado que las frecuencias altas suelen
tener, generalmente, magnitudes inferiores que las frecuencias bajas; evitar
problemas numericos en el calculo de la transformada de Fourier que se reali-
zara posteriormente; ası como puede mejorar la relacion senal/ruido (SNR).
En la figura 2.11 podemos observar una senal de ejemplo, sobre la que ob-
servaremos los resultados de aplicacion de las siguientes operaciones.
El filtrado puede aplicarse a una senal x tal y como se define en la ecuacion
(2.8), siendo α el coeficiente de filtro, que suele tomar un valor de 0,95 o 0,97.
En nuestro caso, tomaremos α = 0,97.
y(t) = x(t)− αx(t− 1) (2.8)
23
Figura 2.11: Senal de audio contenida en un fichero WAVE.Fuente: Haytham Fayek
En la figura 2.12 podemos observar la senal de ejemplo tras aplicar el
filtro de preenfasis, siendo apreciables a simple vista los cambios en la forma
de onda.
Figura 2.12: Senal de audio tras aplicar el filtro de preenfasis.Fuente: Haytham Fayek
2.12.2. Enmarcado
Una vez aplicado el preenfasis es necesario dividir la senal en marcos de
tiempo reducido, dado que las frecuencias en una senal cambian con el paso
del tiempo por lo que, en la mayorıa de los casos, no tiene sentido aplicar la
transformada de Fourier sobre la senal completa ya que perderıamos contor-
nos de frecuencia a lo largo del tiempo. Para evitarlo, podemos asumir que
las frecuencias en una senal son estacionarias en cortos periodos de tiempo,
24
por lo que podemos aplicar la transformada de Fourier sobre estos marcos de
tiempo para obtener una buena aproximacion de los contornos de frecuencia
de la senal mediante la concatenacion de marcos adyacentes.
La longitud de estos marcos es generalmente, para procesamiento de voz,
de entre 20 y 40 milisegundos con en torno a un 50 % (±10 %) de solapamiento
entre marcos consecutivos. Los valores tıpicos son una longitud de marco de
25ms y un solapamiento de 15ms.
2.12.3. Funcion de ventana de Hamming
La Transformada Rapida de Fourier (FFT ) que aplicaremos posterior-
mente asume que los datos sobre los que se aplica son infinitos. Para con-
trarrestar esta circunstancia, ası como reducir la perdida espectral, debemos
aplicar una funcion de ventana sobre cada marco de los calculados previa-
mente.
Recurrimos a la funcion de ventana de Hamming, definida por la ecuacion
(2.9), donde 0 ≤ n ≤ N − 1 y N es la longitud de marco, en nuestro caso
N = 0,025 (25ms).
w[n] = 0,54− 0,46 cos2πn
N − 1(2.9)
25
Figura 2.13: Representacion de la funcion de ventana de Hamming.Fuente: Haytham Fayek
2.12.4. Transformada de Fourier de Tiempo Reducido
(STFT)
El siguiente paso es la aplicacion de una FFT de N -puntos sobre cada
marco para calcular el espectro de frecuencia, tambien conocida como Trans-
formada de Fourier de tiempo reducido (STFT ), donde habitualmente N
toma como valor 256 o 512.
P =|FFT (xi)
2|N
(2.10)
Tomamos N = 512 y, a continuacion, calculamos el espectro de frecuencia
(periodograma) mediante la ecuacion (2.10), donde xi es el i-esimo marco de
la senal x.
26
2.12.5. Bancos de filtros de Escala Mel
En este punto, podemos proceder a calcular los bancos de filtros mediante
la aplicacion de filtros triangulares en escala Mel, generalmente 40, sobre el
espectro de potencia, con el objetivo de extraer bandas de frecuencia.
La escala Mel tiene como objetivo emular la forma no lineal de percibir el
sonido por parte del oıdo humano, siendo mas discriminatorio con las bajas
frecuencias y menos con las frecuencias altas. Se puede convertir entre la
frecuencia en Hercios (f) y la frecuencia en Mel (m) haciendo uso de las
ecuaciones (2.11) y (2.12).
m = 2595log10(1 +f
700) (2.11)
f = 700(10m/2595 − 1) (2.12)
Figura 2.14: Representacion de un banco de filtros en escala Mel.Fuente: Haytham Fayek
27
Podemos modelar los bancos de filtros mediante la ecuacion (2.13).
Hm(k) =
0 k < f(m− 1)
k − f(m− 1)
f(m)− f(m− 1)f(m− 1) ≤ k < f(m)
1 k = f(m)
f(m+ 1)− kf(m+ 1)− f(m)
f(m) < k ≤ f(m+ 1)
0 k > f(m− 1)
(2.13)
Tras aplicar el banco de filtros al espectro de potencia de la senal, obte-
nemos el espectrograma de la figura 2.15.
Figura 2.15: Espectrograma de la senal de ejemplo.Fuente: Haytham Fayek
28
2.12.6. Coeficientes Cepstrales en Frecuencias de Mel
(MFCCs)
Los bancos de filtros calculados anteriormente estan altamente correlacio-
nados, lo que puede resultar conflictivo en algunos modelos de Machine Lear-
ning. Por prevencion, podemos aplicar la Transformada Discreta del Coseno
(DCT ) para eliminar la correlacion y producir una representacion comprimi-
da de los bancos de filtros, lo que da lugar a los Coeficientes Cepstrales en
Frecuencias de Mel (MFCCs). Generalmente, para reconocimiento del habla,
se toman los coeficientes cepstrales resultantes del 2 al 13, descartando el
resto dado que representan cambios rapidos en los coeficientes de los bancos
de filtros, datos demasiado detallados que no aportan nada para tal fin. En
la figura 2.16 podemos observar los MFCCs obtenidos.
Figura 2.16: Representacion de los MFCCs obtenidos de la senal de ejemplo.Fuente: Haytham Fayek
29
2.12.7. Normalizacion
En ultima instancia podemos normalizar los MFCCs, equilibrando el es-
pectro y mejorando la relacion senal/ruido (SNR), mediante la resta de la
media de los coeficientes de todos los marcos. El resultado final de la fase de
preprocesado se encuentra representado en la figura 2.17.
Figura 2.17: Representacion de los MFCCs normalizados.Fuente: Haytham Fayek
30
Capıtulo 3
Herramientas
El diseno e implementacion de modelos de Machine Learning requiere
una fase de investigacion previa para elegir las herramientas a utilizar para
el desarrollo. Entre estas herramientas se encuentran el conjunto de datos
(dataset) con el que entrenaremos el modelo, las librerıas de Machine Lear-
ning, el lenguaje de programacion y el entorno de desarrollo, ası como el
hardware a utilizar para el entrenamiento.
En el caso de tratarse de un proyecto a desplegar, y no uno meramente
experimental como el descrito en este documento, tambien deberıa evaluarse
el hardware sobre el que se pretende ejecutar el modelo para obtener predic-
ciones.
31
3.1. Dataset
Durante el diseno de un modelo de Machine Learning es fundamental
elegir correctamente el dataset a utilizar, pues influira directamente en los
resultados obtenidos. En el caso del Procesado de Lenguaje Natural (NLP,
por sus siglas en ingles) los datasets reciben el nombre de corpus, debido a
la estrecha relacion de este campo con la linguıstica.
En funcion del posible enfoque del proyecto, el tipo de dataset a escoger
ha sido diferente, aunque en ambos ha sido necesario que el dataset incluyese
ficheros de audio en formato WAVE o MP3 con sus respectivas transcripciones.
Todos los datasets valorados incluyen audios y transcripciones en ingles, dado
que permite que el sistema a desarrollar tenga un mayor impacto potencial
al ser un idioma ampliamente extendido en el ambito tecnologico.
3.1.1. Speech Recognition
Durante el primer enfoque, en el cual se pretendıa conseguir reconocer el
ingles al completo, para posteriormente extraer las instrucciones a reconocer,
era necesario recurrir a un corpus de gran tamano para poder generalizar al
maximo posible.
La mayor parte de los corpus disponibles para el reconocimiento de voz o
Speech Recognition se distribuyen de forma comercial, debido al tamano y a la
calidad que estos deben presentar para ser utilizados por los investigadores.
Entre los corpus de pago podemos encontrar TIMIT [16] y los corpus de
Wall Street Journal [17, 18]. De los anteriores, TIMIT es el mas habitual
para tomar metricas en sistemas de Reconocimiento Automatico del Habla
32
(ASR, Automatic Speech Recognition).
A pesar de que su uso este menos extendido, tambien existen corpus de
libre distribucion, entre los que destacan TED-LIUM [19], LibriSpeech [20],
VoxForge [21] y Mozilla Common Voice [22]. En el primer enfoque del proyec-
to nos decantamos por el dataset Common Voice, por ser el de publicacion
mas reciente (2017) y no haber encontrado ningun trabajo previo basado en
el.
3.1.2. Keyword Spotting
El segundo enfoque del proyecto consiste en el reconocimiento de coman-
dos, que actuarıan como disparadores de una determinada accion por parte
de un hipotetico sistema. Este reconocimiento de expresiones a modo de dis-
parador se denomina Keyword Spotting.
La busqueda de datasets para el nuevo alcance del proyecto nos llevo
a decantarnos por el dataset Speech Commands de Google [23], cuya ver-
sion 2 habıa sido lanzada la misma semana que se encontro el reporte de la
incidencia mencionada en parrafos anteriores.
La version 2 de Speech Commands contiene 34 palabras diferentes, de
las cuales 24 de ellas han sido elegidas para ser utiles para su uso en aplica-
ciones del campo de Internet de las Cosas (IoT, Internet of Things) o de la
robotica. Estas 24 palabras son los comandos a reconocer por nuestra red de
neuronas, componiendose el conjunto por los dıgitos del 0 al 9 (cero-nueve)
y las siguientes palabras:
33
Backward
Down
Follow
Forward
Go
Learn
Left
No
Off
On
Right
Stop
Up
Yes
El subconjunto a utilizar del dataset cuenta, tras el preprocesado, con un
total de 49313 ficheros de entrenamiento, 12735 ficheros de validacion y 14448
ficheros de test. Los ficheros de audio tienen como maximo un segundo de
longitud, en formato WAVE (.wav), con los datos de la muestra codificados
como valores PCM lineales de 16 bits de un solo canal, a una frecuencia
de 16KHz. Se han registrado 2.618 locutores, cada uno con un identificador
hexadecimal unico de ocho dıgitos.
3.2. Librerıas de manipulacion de datos
Una vez seleccionada la fuente de datos con la que alimentaremos el mode-
lo de Machine Learning, debemos manipular los mismos para eliminar datos
anomalos o corruptos, ası como los que no sean de nuestro interes, y poste-
riormente darles el formato adecuado.
Esta fase se denomina preprocesado, y para llevarla a cabo resulta intere-
sante apoyarse en algunas librerıas con el objetivo de operar sobre los datos
de la forma mas sencilla y optima posible.
34
3.2.1. NumPy
Considerada como la librerıa fundamental para realizar cualquier tipo de
calculo cientıfico en Python. Dispone de una abundante cantidad de opera-
ciones sobre arrays n-dimensionales (ndarrays) y matrices.
Esta librerıa proporciona la vectorizacion de operaciones matematicas
sobre el tipo de array de NumPy (numpy.array), mejorando el rendimiento
y acelerando la ejecucion de las mismas.
3.2.2. SciPy Library
La librerıa SciPy proporciona una gran cantidad rutinas numericas efi-
cientes y sencillas de usar, tales como rutinas para integracion y optimizacion
numerica. Se apoya en NumPy, por lo que utiliza su tipo de array en sus ru-
tinas.
En nuestro caso, ha resultado especialmente util para las operaciones ne-
cesarias para el procesado de los ficheros de audio, tales como la obtencion
de espectrogramas y el calculo de Transformadas de Fourier de Tiempo Re-
ducido (Short-Time Fourier Transform).
3.2.3. Pandas
Pandas es una librerıa de Python que permite trabajar de forma simple
e intuitiva con datos etiquetados y relacionales. Incluye metodos para ma-
nipular y visualizar datos rapidamente. Todo ello la convierte en la librerıa
ideal para almacenar los datos extraıdos del dataset, y para operar con ellos
posteriormente.
35
3.3. Librerıas de Machine Learning
El auge del Deep Learning durante los ultimos anos ha propiciado la apa-
ricion de diversas librerıas que permiten el desarrollo de modelos de Machine
Learning de una forma mucho mas simple, incluyendo incluso la implemen-
tacion de los modelos mas basicos y de los mas utilizados.
El objetivo de esta seccion es mostrar una pequena descripcion de las
librerıas mas populares en la actualidad, ası como la justificacion de las li-
brerıas elegidas.
3.3.1. SciKit-Learn
SciKit-Learn es un paquete basado en SciPy, haciendo un uso intenso
de sus operaciones matematicas. Proporciona una interfaz concisa y consis-
tente para los algoritmos de Machine Learning mas comunes, facilitando su
incorporacion en sistemas en produccion.
La librerıa combina un codigo de calidad y una buena documentacion, ası
como una sencillez de uso y un alto rendimiento. Todo esto la ha convertido
en la librerıa estandar para desarrollar modelos de Machine Learning en
Python.
3.3.2. PyTorch
PyTorch es un framework de Deep Learning para una experimentacion
rapida y flexible. Permite la computacion con tensores con una potente ace-
leracion por GPU.
36
Usualmente, se utiliza como sustituta a NumPy para aprovechar la po-
tencia de computo de las GPUs, proporcionando integracion con librerıas de
aceleracion de GPU como Intel MKL y NVIDIA CuDNN.
3.3.3. Theano
Theano es una librerıa que define arrays multidimensionales de una for-
ma similar a NumPy, ası como operaciones y expresiones matematicas. Se
proporciona compilada, de forma que puede ejecutarse de forma eficiente en
todas las arquitecturas.
Destaca por su estrecha integracion con NumPy a bajo nivel para sus
operaciones, ası como su optimizacion de uso de GPU y CPU, incrementando
el rendimiento para la computacion intensiva de datos. Ademas, sus ajustes
de eficiencia y estabilidad permiten obtener resultados mucho mas precisos,
incluso con valores muy pequenos.
3.3.4. TensorFlow
Desarrollada inicialmente por Google, desde la liberacion de su codigo
ha ganado popularidad rapidamente, eclipsando en gran medida a las otras
alternativas.
Se basa en grafos de computacion de flujo de datos, y destaca por su
sistema de nodos multicapa que permite un rapido entrenamiento de redes
de neuronas en grandes datasets. Ademas, se ha usado para una variedad de
aplicaciones del mundo real, como los servicios de Google para reconocimiento
de voz (Google Voice Recognition) y de identificacion de objetos en imagenes
37
(Google Image Recognition).
3.3.5. Keras
Keras es una librerıa que permite construir redes de neuronas a alto nivel,
de forma sencilla y minimalista. Esta escrita en Python y permite trabajar
sobre Theano, TensorFlow y Microsoft Cognitive Toolkit (CNTK).
Keras es altamente modular y escalable, ademas de permitir el prototi-
pado rapido de redes de neuronas por su sencillez. Los datos se preparan en
tensores y sus modelos se basan en capas, con una capa para los tensores de
entrada, otra para los de salida y un numero indeterminado de capas ocultas.
Al poder utilizar varios frameworks como back-end supone una opcion
flexible, por lo que ha sido la elegida para el desarrollo del proyecto. En el
caso del back-end, hemos optado por TensorFlow, al tratarse de la opcion con
mas caracterısticas y soporte en la actualidad.
3.4. Lenguaje de programacion
La mayorıa de la documentacion encontrada relativa al diseno e imple-
mentacion de redes de neuronas estaba orientada a Python. Todas las librerıas
de uso extendido en el sector, ya sean de manipulacion de datos o de Ma-
chine Learning, son compatibles con este lenguaje, o directamente han sido
desarrolladas con el.
En adicion a la sencillez del propio lenguaje y a su sintaxis simple, que
38
facilita el despliegue y mantenimiento del codigo, desde un principio se valoro
como la opcion mas adecuada para el desarrollo del proyecto.
Tambien es importante destacar que se ha optado por Python 3, ya que
es la version que mas soporte recibe en la actualidad.
3.5. Entorno de desarrollo
La eleccion del entorno de desarrollo no influye en los resultados a obtener
en el proyecto, pero sı que tiene relevancia en terminos de productividad. El
entorno debe permitir trabajar de forma sencilla y eficiente, dando facilidades
para poder hacer debugging sobre el codigo y ası localizar mas rapido los po-
sibles errores. Ademas, debe ser compatible con el lenguaje de programacion
elegido, mencionado en la seccion anterior.
Teniendo en cuenta todas estas caracterısticas, desde un principio se ha
optado por recurrir a la herramienta Jupyter Notebook. Esta nos permite
desarrollar codigo en Python dividiendolo en celdas, de forma que se pueden
ejecutar de forma independiente sin necesidad de ejecutar el script completo,
y observar la salida de cada fragmento de codigo facilmente. Cada vez que
se ejecuta una celda, se guardan sus resultados en memoria para permitir su
utilizacion en las celdas que dependan de la misma.
Ademas, otra caracterıstica por la que destaca Jupyter es por permitir
intercalar estas celdas de codigo con celdas de texto en lenguaje de marcado
Markdown. Esto permite documentar el codigo de una forma mucho mas
extensa y legible, siendo mas facil mantenerlo y escalarlo.
39
3.6. Hardware
La eleccion del hardware, al contrario que el entorno de desarrollo, sı
que influye de forma crıtica en los resultados obtenidos en el proyecto. De el
dependeran la velocidad de procesamiento de los datos y de las operaciones
a realizar, ası como los recursos disponibles para el entrenamiento de la red
y la prediccion con la misma. El hardware se ha elegido en funcion de los
recursos necesarios para cada etapa del proyecto.
En primer lugar, para la fase de preprocesado, se ha recurrido a un equipo
con procesador Intel Core i5-2400 de 4 nucleos a una frecuencia de 3.1GHz
y 10GB de memoria RAM DDR3 a 1333MHz.
Para la fase de entrenamiento de la red de neuronas el procesamiento
por CPU podrıa resultar extremadamente lento debido a la utilizacion del
algoritmo de retropropagacion (backpropagation), que demanda una gran po-
tencia de computo, por lo que es recomendable recurrir a la aceleracion por
GPU. El estandar en aceleracion por GPU es la librerıa NVIDIA CUDA,
que dispone de un modulo especifico para tareas de Deep Learning llamado
CuDNN.
El equipo utilizado para la fase de preprocesado no dispone de una tar-
jeta grafica de NVIDIA, por lo que ha sido necesario recurrir a otro equipo
distinto. Este segundo equipo dispone de un procesador Intel Core i7-4510U
con 2 nucleos y 4 hilos a una frecuencia de 3.1GHz, 16GB de memoria RAM
DDR3L y una tarjeta grafica NVIDIA Geforce 840m con 2GB de VRAM
DDR3 y 384 nucleos CUDA. Este hardware ha sido suficiente para el desa-
rrollo del proyecto debido a que se desarrolla una arquitectura relativamente
simple para la red de neuronas, dado que trabajamos con un dataset pequeno.
40
Capıtulo 4
Diseno
Este capıtulo sirve para describir el problema a resolver y presentar la
estructura del proyecto, ası como de la arquitectura de la red de neuronas
propuesta como solucion.
4.1. Descripcion del problema
La deteccion de comandos disparadores, conocida como Keyword Spot-
ting, consiste en la distincion de determinadas palabras en una grabacion de
audio, de forma que permitan lanzar de forma automatica acciones por parte
del sistema. Por tanto, la solucion debera tomar como entrada ficheros de
audio. Si bien en un entorno real el sistema recibe un stream de audio de
forma continua, en el que se percibe ruido y palabras que no actuan como
disparadores, o que son desconocidas al sistema, en el alcance del proyecto
solo se contempla una primera aproximacion, en la cual el sistema recibe
ficheros de audio con una duracion acotada, una mınima cantidad de ruido,
y que siempre contienen uno de los comandos a reconocer por el sistema.
41
Fichero WAV
MFCCs Red de neuronas
“backward”
Comando reconocido
Figura 4.1: Descripcion del problema.
Para abordar la solucion del problema de una forma mas eficiente, se opta
por dividirlo en problemas de menor complejidad, que definiran las diferentes
fases del proyecto. Estas fases se exponen en los siguientes subapartados.
4.1.1. Preprocesado
Una vez introducido un fichero de audio en el sistema, este debe ser
capaz de procesarlo para extraer los atributos o features que representan el
contenido del fichero. Para ello, tiene que realizar las siguientes operaciones:
1. Preenfasis, con un coeficiente de filtro (α) de 0,97.
2. Enmarcado, con un tamano de marco de 25ms y un solapamiento de
10ms.
3. Aplicacion de la funcion de ventana de Hamming.
4. Aplicacion de la Transformada de Fourier de Tiempo Reducido (STFT ),
obteniendo el espectro de potencia.
5. Calculo de los bancos de filtros en Escala Mel, obtenidos mediante
filtros triangulares. El numero tıpico de filtros triangulares a aplicar es
de 40.
42
6. Calculo de los Coeficientes Cepstrales en las Frecuencias de Mel (MFCC )
mediante la aplicacion de la Transformada Discreta del Coseno (DCT ).
Al tratarse de un problema de Reconocimiento Automatico del Habla
(ASR), nos interesa el contenido de los coeficientes cepstrales 2 a 13,
por lo que tendremos que trabajar con un total de 12.
7. Normalizacion, para equilibrar el espectro y mejorar la Relacion Senal/Ruido
(SNR)
4.1.2. Particion del dataset
El dataset Speech Commands v2 se proporciona estructurado en carpetas,
con una carpeta por cada comando a reconocer. Por tanto, el nombre de
la carpeta en la que esta contenido el fichero que se esta procesando en un
determinado momento es utilizado como la etiqueta del mismo. La utilizacion
de una etiqueta por cada fichero es necesaria debido a que trabajamos con
aprendizaje supervisado, por lo que la red de neuronas sabe de antemano
cual debe ser el valor inferido cuando se introduzcan los atributos.
La estructura en carpetas en funcion del comando nos permite tambien
hacer de forma sencilla el listado de ficheros a procesar, ignorando los co-
mandos que no se hayan contemplado. Dentro de cada carpeta, los ficheros
tienen un nombre en formato HASH nohash NUMFICHERO.wav, tomando
HASH el numero obtenido de la funcion hash aplicada al nombre del locutor
del audio, con el fin de anonimizar los datos, y NUMFICHERO el numero de
fichero de ese mismo locutor para ese comando. El HASH es utilizado, junto
con los porcentajes de particion del dataset, para determinar a que particion
43
(train/dev/test) pertenece cada fichero, para lo cual se utiliza una funcion
del codigo de ejemplo proporcionado en el repositorio de TensorFlow [24].
Una vez hecha la particion de los conjuntos de entrenamiento (64 %),
validacion (16 %) y test (20 %); y obtenidos los atributos y las etiquetas de
todos los ficheros de los comandos a reconocer, se deben guardar los datos
en estructuras que permitan operar facilmente con ellos. La naturaleza de
los datos hace que la estructura ideal sean los Data Frame de la librerıa
Pandas, donde se representa cada fichero con una columna. El encabezado
de la columna toma como valor la ruta del fichero, compuesta por el nombre
de la carpeta y el nombre del propio fichero; la primera fila toma el valor
de la etiqueta, en formato string, y la segunda fila se utiliza para almacenar
los atributos extraıdos del fichero, compuesto por un vector de floats de
dimensiones 98x12.
4.1.3. Entrenamiento de la red de neuronas
Una vez preprocesado y particionado el dataset, los datos estan listos para
ser introducidos en la red de neuronas disenada para solucionar el problema
de Keyword Spotting. La arquitectura de la red queda definida en la seccion
3 de este capıtulo.
Los pesos de las conexiones entre neuronas deben modificarse para que la
red se adapte al problema propuesto. Esta fase de modificacion de los pesos
se conoce como entrenamiento, y generalmente se realiza apoyandose en el
algoritmo de retropropagacion (backpropagation).
44
4.2. Estructura del proyecto
Debido a que los requerimientos de hardware de la fase de preprocesado
del dataset y de la de entrenamiento de la red de neuronas son diferentes,
se decidio separar el codigo de ambas. En adicion a la necesidad de testear
el sistema completo, nuestro planteamiento da lugar a que el proyecto se
estructure en 3 notebooks de Jupyter:
Preprocessing.ipynb Contiene todo el codigo relativo al preprocesado del
dataset, donde se toman como entrada los ficheros de audio y se obtie-
nen los MFCCs en forma de arrays de floats.
ANN-LSTM.ipynb Incluye el codigo de la red de neuronas. Toma los fi-
cheros obtenidos en el notebook anterior como entrada, hace una ultima
etapa de preprocesado para adaptar los datos al formato de entrada de
la red y, por ultimo, define la arquitectura de la misma y permite su
entrenamiento y evaluacion.
Testing-app.ipynb Sirve como plataforma para probar el funcionamiento
global del sistema desarrollado. Acepta un fichero de audio como en-
trada, realiza el preprocesado, carga la estructura y los pesos obtenidos
durante el entrenamiento de la red de neuronas, y la utiliza para inferir
el comando contenido en el fichero de audio, mostrandose este ultimo
por pantalla.
45
4.3. Arquitectura de la Red de Neuronas
Para la creacion de la arquitectura de nuestra red de neuronas hacemos
uso de 2 capas de 100 y 50 celdas LSTM [28], respectivamente, a modo de capa
de entrada en el caso de la primera y de capa oculta en la segunda. En ambas
se utilizara tanh como funcion de activacion respetando el planteamiento
original de las celdas LSTM [5], ademas de aplicarse sobre ellas Dropout y
Dropout recurrente del 20 %. La capa de salida es una densamente conectada
[30] de 24 neuronas, una por cada posible clase (comando) a reconocer, todas
ellas con funcion de activacion Softmax.
La arquitectura de nuestra red neuronal queda representada por la figura
4.2.
LSTM
LSTM
LSTM
LSTM
LSTM
LSTM
Dense
Dense
Dense
input output
.
.
.
.
.
.
.
.
.
100 LSTM cells 50 LSTM cells 24 Dense units
Input layer Hidden layer Output layer
Figura 4.2: Representacion de la arquitectura de la red de neuronas.
46
Capıtulo 5
Experimentacion
Tomando el planteamiento del proyecto expuesto en el capıtulo ”Diseno”,
abordamos de forma secuencial las fases en las que se ha dividido el desa-
rrollo de la solucion. En este capıtulo se exponen los distintos experimentos
realizados durante cada una de las fases, con los obstaculos encontrados y la
forma en la que se han solventado.
5.1. Primer alcance: Speech Recognition
En un primer momento, se decidio plantear el proyecto para disenar un
sistema de ASR completo en ingles, es decir, capaz de reconocer frases ha-
bladas en ingles, con diferentes acentos, para obtener sus transcripciones.
De esta forma, se podıa definir un conjunto de comandos disparadores mas
amplio, ası como reconocer el resto del contenido de una frase, permitiendo
realizar una mayor cantidad de acciones.
La complejidad del proyecto era notablemente mas alta que en el segundo
alcance y, por tanto, fue necesaria una extensa fase de investigacion a fin de
47
evaluar todas las posibles herramientas, arquitecturas y metricas de interes,
relacionados con las redes de neuronas de tipo LSTM [5, 6] para el desarrollo
del proyecto.
Entre los diversos datasets de libre distribucion encontrados, se decidio
optar por Mozilla Common Voice, publicado en 2017, y del que no se en-
contro ningun proyecto de investigacion basado en el. A pesar de no ser un
dataset especialmente grande, incluıa una gran cantidad de ficheros de audio
en formato WAVE, con buena calidad de sonido, con frases cortas grabadas en
ingles por locutores con diferentes acentos, obteniendo de esta forma una di-
versidad geografica de vital importancia para la capacidad de generalizacion
del sistema.
Tras unos meses trabajando con Common Voice se encontro una inciden-
cia reportada en la comunidad del proyecto, donde se exponıa que el conjunto
de datos de entrenamiento (train) tenıa solapamientos de frases y locutores
con los conjuntos de validacion (dev) y test, lo que implica que cualquier
modelo basado en este corpus tendera a sobreentrenar. El solapamiento de
frases se podıa solucionar con un simple algoritmo de busqueda para limpiar
los conjuntos, pero tras su aplicacion quedaban unicamente 9 frases para
validacion y 7 para test, insuficientes para obtener metricas de valor. No
obstante, aunque el numero de frases hubiera sido suficiente, las metricas se-
guirıan careciendo de valor por el solapamiento de locutores, que dificultarıa
la generalizacion del modelo, y que no puede solucionarse salvo revisando de
forma manual el dataset.
El origen de esta incidencia esta en el diseno del sistema de recoleccion
de frases grabadas por usuarios anonimos. Los desarrolladores han comuni-
48
cado que, a fecha de 3 de abril de 2018, el problema en la recoleccion esta
resuelto. La resolucion sera efectiva para el lanzamiento de la version 2 del
dataset, en la que se tomaran todos los datos de la version 1 como conjunto
de entrenamiento.
5.2. Segundo alcance: Keyword Spotting
Tras el fracaso del anterior experimento, y al desconocerse la fecha de
lanzamiento de la version 2 del dataset, se opto por cambiar el enfoque del
proyecto para limitar el alcance al propuesto en el anteproyecto, centrandonos
en el reconocimiento de entre 20 y 30 instrucciones.
Al reducirse la complejidad, dejan de resultar interesantes los posibles
modelos en los que basarnos para la arquitectura, tales como los modelos
de atencion [25], Neural Speech Recognizer [26] o Connectionist Temporal
Classification [27]; dado que pueden disenarse arquitecturas mas simples para
resolver el problema.
Nuestra arquitectura se basa unicamente en celdas LSTM [5], comenzan-
do con un modelo lo mas simple posible y ampliandolo en funcion de los
resultados obtenidos.
Dado que se utiliza Keras con TensorFlow como backend, y se pretende
recurrir a aceleracion por GPU para el entrenamiento, se opta por utilizar
una implementacion de LSTM especıfica de Keras y optimizada para CUDA,
llamada CuDNNLSTM [29], cuyo funcionamiento es entre 3 y 6 veces mas
rapido que la implementacion tradicional de LSTM [28], siendo mayor la
diferencia de rendimiento cuanto mayor es el tamano de la red. Es importante
49
destacar que esta implementacion solo funciona ejecutando sobre GPU y
TensorFlow, y que los datos de mejora de rendimiento proporcionados se
basan en afirmaciones del creador de Keras, Francois Chollet, sin haberse
aportado pruebas empıricas.
La fase completa de experimentacion se compone de 20 posibles modelos,
donde se presentaran diferentes arquitecturas o, en algunas ocasiones, varia-
ciones de las opciones activas en cada una de las capas incluidas. Todos estos
modelos tienen como factor comun una capa LSTM como entrada, sea cual
sea su implementacion [28, 29], y una capa Dense [30] de 25 neuronas (24
neuronas en los modelos 19 y 20), tantas como clases a reconocer, y funcion
de activacion Softmax, al tratarse de una red de neuronas de clases multiples.
De estos 20 modelos, dado que algunos tienen pequenas variaciones a
nivel de diseno o de resultados, unicamente se hace mencion de los que se
han considerado mas relevantes, detallandolos en los siguientes apartados.
5.2.1. Modelo 1
El primer modelo planteado tiene una arquitectura extremadamente sim-
ple, a fin de suponer una primera toma de contacto con Keras y el funciona-
miento de las capas CuDNNLSTM. Se plantea un modelo sin capas ocultas,
teniendo como capa de entrada una CuDNNLSTM de 5 celdas y la capa de
salida Dense de 25 neuronas, una por cada comando a reconocer mas la clase
desconocida, donde se engloba al resto. Se plantea entrenar una unica epoch.
Al tratarse de la primera experiencia trabajando con Keras surgieron, tal
y como estaba previsto, incidencias que impedıan la ejecucion del entrena-
50
miento. La primera, y la mas grave, de las encontradas era relativa al formato
de entrada de los datos. La red no llegaba a iniciar el entrenamiento por una
contradiccion entre el formato de entrada de los datos (2D) y el formato de
entrada esperado por la red (3D). Teoricamente, los datos de entrada debıan
tener 3D, al tratarse de una matriz con una entrada por cada fichero, ca-
da una de ellas compuesta por una matriz de dos dimensiones: 98x12, 98
atributos de 12 MFCCs.
Tras analizar detenidamente los datos, se detecto que la forma en la que se
estaban consolidando los diferentes vectores durante la construccion de cada
uno de los conjuntos era la causa de la incidencia. El origen de la misma
radicaba en que se estaban tratando los arrays como objetos de tipo array, y
no como listas, por lo que la estructura en realidad no era una matriz 3D. Para
solucionar el problema fue necesario definir una nueva funcion para consolidar
los datos correctamente, llamada inputs targets split, y situada en el
notebook ANN-LSTM.ipynb.
Una vez solventado el problema con el formato de los datos de entrada,
surgio una nueva incidencia con los mismos. La funcion anterior lanzaba una
excepcion al intentar anadir la matriz de atributos a la matriz final. Tras
analizar nuevamente el conjunto de datos de entrenamiento, se observo que
habıa algunas entradas que tenıan menos de 98 atributos. Se revisaron a
mano algunos de los ficheros que mostraban esta anomalıa y se descubrio
que eran ficheros de audio incompletos, en los cuales se habıa finalizado la
grabacion antes de tiempo y no se habıa recogido por completo el comando
correspondiente. Se soluciono el problema filtrando estos ficheros dentro de
la propia funcion inputs targets split, de forma que cuando se intentaba
anadir una matriz sin exito, se guardaba la posicion del vector anomalo en
51
una lista. Al terminar el procesado de datos de entrada, se eliminaban las
posiciones pertinentes de la lista de objetivos (targets).
Despues de esta ultima modificacion, se consiguio realizar el primer entre-
namiento de la red. Las metricas obtenidas carecen de relevancia pues, como
hemos expuesto inicialmente, el objetivo de este modelo era la familiarizacion
con Keras y el funcionamiento de las capas CuDNNLSTM.
5.2.2. Modelo 7
En los modelos 2 a 7 se fueron anadiendo unidades (celdas) a las capas
CuDNNLSTM, se aumento el numero de epochs a ejecutar a 25, configurando
una parada anticipada (EarlyStop) tras 1 epoch sin mejora de la precision
en validacion (val acc), y se aumento el tamano de lote (batch size) del
valor por defecto (32) a 64. Estos modelos tenıan la finalidad de observar
la variacion de las metricas a medida que se aumentaba tanto el numero de
capas como el tamano de las mismas.
El modelo 7 presenta una arquitectura con la capa de entrada de 50 uni-
dades CuDNNLSTM, dos capas ocultas CuDNNLSTM, con 50 y 25 unidades
respectivamente, y la capa de salida Dense de 24 neuronas. El modelo en-
treno durante 12 epochs antes de hacer una parada anticipada, obteniendose
los resultados mostrados en la tabla 5.1.
Metrica Entrenamiento Validacion TestPrecision (acc) 73,4 % 72,5 % 68,2 %Perdida (loss) 0,77 0,84 0,92
Tabla 5.1: Resultados del modelo 7.
52
Figura 5.1: Metricas del modelo 7.
Con los datos anteriores se puede concluir que, si bien se consigue au-
mentar la precision de la red, esta no termina de aprender correctamente,
viendose reflejado en los altos valores de la perdida.
5.2.3. Modelo 15
En los modelos 8 a 15 se continuo aumentando las dimensiones de la red,
en busca de validar si se conseguıa mejorar los resultados de los modelos
anteriores.
53
El modelo 15 tiene 200 unidades en su capa CuDNNLSTM de entrada,
ası como en las 5 capas CuDNNLSTM ocultas, y 25 unidades en la capa
Dense de salida. Ademas, se decidio utilizar capas de Dropout [31], con una
ratio del 20 % (0,2), a modo de regularizacion para probar si tenıan algun
efecto positivo en el entrenamiento de la red. Se ejecuto durante 17 epochs
antes de realizar una parada anticipada, donde se obtuvieron los resultados
mostrados en la tabla 5.2.
Metrica Entrenamiento Validacion TestPrecision (acc) 83,7 % 70,5 % -Perdida (loss) 0,45 1,04 -
Tabla 5.2: Resultados del modelo 15
Los resultados anteriores muestran un claro sobreentrenamiento (overfit-
ting), dada la varianza entre la perdida en entrenamiento y validacion. No se
muestran datos de test debido a que, tras ver graficamente los signos de over-
fitting, se decidio parar la ejecucion de forma manual. Se identifico como posi-
ble causa un valor demasiado alto en la tasa de aprendizaje (learning rate),
siendo por defecto de 0,001, para el tamano del dataset utilizado. Se decidio
reducirlo a 0,00001 para los siguientes modelos.
Tambien se decidio incrementar el numero de epochs sin mejora en la
precision de validacion antes de hacer la parada anticipada, pasando de 1
a 5; y el numero total de epochs, situandolo en valores los suficientemente
altos como para dar tiempo a converger al modelo, tomando como referen-
cia el numero de epochs antes de la parada anticipada del anterior modelo
entrenado.
54
Figura 5.2: Metricas del modelo 15.
5.2.4. Modelo 18
Los cambios expuestos en el apartado anterior se aplicaron sobre el mo-
delo 17, observando unos resultados muy pobres al no llegar a converger la
grafica de la perdida. Se determino que se debıa a que el valor de la tasa de
aprendizaje era demasiado bajo, por lo que en el modelo 18 paso a ser de
0,0001. Tambien se planteo que podrıa resultar util la utilizacion de capas
de Dropout [31] como regularizacion de la red, de forma que se mitigase el
sobreentrenamiento.
Sin embargo, se identifico un punto crıtico que podrıa estar provocando
el sobreentrenamiento. Hasta ese momento, el entrenamiento se realizaba
con 25 posibles clases, por todos los comandos mas el desconocido. La clase
55
’unknown’ contenıa las 10 clases restantes del dataset, provocando que este
no estuviera equilibrado al haber muchas mas muestras (samples) de esta
clase que del resto, lo que supone una causa del overfitting.
Ante la situacion anterior, se decidio preprocesar el dataset de nuevo,
ignorando en este caso todos los comandos que no fueran a ser reconocidos,
pues el ser capaces de reconocerlos como ’unknown’ no garantizaba que el
modelo fuera capaz de generalizar ante cualquier palabra que no se encontrase
entre los comandos a reconocer.
En adicion a lo anterior, se decidio seguir las pautas de ajuste de hiper-
parametros (hyperparameter tuning) recomendadas por los desarrolladores
de la librerıa DeepLearning4J [8], adaptando el tamano de la red de forma
que el numero de parametros a entrenar por la red fuera proximo al numero
de muestras que componıan el conjunto de datos de entrenamiento. Por todo
ello, se decidio volver al enfoque inicial de disenar una arquitectura lo mas
simple posible, para aumentarla en funcion de los resultados obtenidos.
Se planteo el modelo de 18 como una red de una unica capa CuDNNLSTM
de 100 unidades, ademas de la capa Dense de salida, con 24 unidades; dan-
do lugar a 48024 parametros entrenables, frente a las 49313 muestras que
componen el conjunto de entrenamiento. La red entreno durante 212 epochs,
habiendose establecido el maximo en 1000, antes de la paradada anticipada,
y mostraba los resultados de la tabla 5.3, sin haber llegado a converger.
Metrica Entrenamiento Validacion TestPrecision (acc) 56,7 % 46,3 % 44,9 %Perdida (loss) 1,46 1,85 1,92
Tabla 5.3: Resultados del modelo 18.
56
Figura 5.3: Metricas del modelo 18.
Las mesetas que podemos observar en las graficas de la figura 5.3 se
deben a que TensorBoard toma como parametros para graficar la fecha y
hora absolutas de ejecucion de cada epoch, y el entrenamiento se ejecuto
en dos etapas: epochs 1 a 100 (azul) y epochs 101 a 212 (rojo). Podemos
observar la evolucion de ambas etapas por separado en la figura 5.3.
Estos resultados mostraban que seguıa habiendo un problema de varianza,
por la diferencia entre los resultados de entrenamiento y validacion/test, y
un evidente sobreentrenamiento a pesar de haber equilibrado el dataset.
57
Figura 5.4: Metricas relativas del modelo 18.
5.2.5. Modelo 19
Tras concluir como fallidas todas las pruebas anteriores, mostrando so-
breentrenamiento y sin conseguir corregirlo, se vio la necesidad de aplicar
tecnicas de regularizacion sobre las capas CuDNNLSTM. Se decidio comen-
zar aplicando un Dropout del 20 % (0,2), pero se observo que este solo podıa
aplicarse sobre la salida de cada capa LSTM hacia la siguiente, introduciendo
una capa Dropout [31] entre ellas.
Ante esta situacion, se decidio cambiar el tipo de capa a utilizar, dado
que la implementacion clasica de LSTM [28] permite un mayor numero de
parametros a controlar, entre ellos la aplicacion de Dropout y de Dropout
recurrente, ademas de tratarse de una implementacion ampliamente probada,
58
al contrario que la CuDNNLSTM.
El modelo 19 tiene una arquitectura igual al modelo 18, pero cambiando la
capa CuDNNLSTM por LSTM, y anadiendole Dropout y Dropout recurrente
de 0,2. Se obtuvieron resultados satisfactorios en cuanto al sobreentrenamien-
to, pues desaparecio completamente. El entrenamiento se ejecuto durante 148
epochs antes de la parada anticipada, obteniendose los resultados de la tabla
5.4.
Metrica Entrenamiento Validacion Testprecision (acc) 46,9 % 54,8 % 52,9 %perdida (loss) 1,8 1,53 1,63
Tabla 5.4: Resultados del modelo 19
Observamos en los resultados que, si bien habıa desaparecido el sobreen-
trenamiento, el modelo presentaba falta de adaptacion (underfitting), proba-
blemente causada por tratarse de un modelo demasiado simple.
59
Figura 5.5: Metricas del modelo 19.
5.2.6. Modelo 20
El modelo anterior mostraba resultados positivos, pero tambien falta de
complejidad para poder adaptarse al problema planteado, por lo que se de-
cidio anadir una capa LSTM mas a fin de comprobar la evolucion de las
metricas obtenidas.
El modelo 20 se compone de dos capas LSTM, la primera con 100 celdas
y la segunda con 50, ademas de la capa Dense de salida con 24 neuronas.
En ambas se utiliza tanh como funcion de activacion, la usada por defec-
to, respetando la implementacion original; y se aplica Dropout y Dropout
recurrente de 0,2.
60
Los resultados obtenidos quedan recogidos en la tabla 5.5. En esta ocasion,
la convergencia se alcanza con buenas metricas, por lo que concluimos que
el modelo es capaz de aprender y lo tomamos como una solucion valida al
problema planteado.
Metrica Entrenamiento Validacion TestPrecision (acc) 76,8 % 82,7 % 78,7 %Perdida (loss) 0,75 0,57 0,69
Tabla 5.5: Resultados del modelo 20
Figura 5.6: Metricas del modelo 20.
En la figura 5.6 podemos observar los resultados del entrenamiento por las
graficas generadas por TensorBoard. Estas graficas se generan distribuidas en
61
el tiempo, a ello se deben las mesetas que se pueden observar en las mismas,
ya que el entrenamiento no se completo en una unica ejecucion debido a la
limitada disponibilidad del equipo utilizado.
En la figura 5.7 podemos observar los datos relativos de las 3 ejecuciones,
donde se ve el avance del entrenamiento omitiendo las mesetas. El entrena-
miento completo necesito 183 epochs y 21 horas para completarse.
Figura 5.7: Metricas relativas del modelo 20.
62
5.2.7. Pruebas
Hemos abordado el desarrollo del proyecto dividiendolo en fases, de forma
que ya hemos comprobado de forma independiente que funcionan el preproce-
sado y el entrenamiento del modelo, obteniendo las metricas de su funciona-
miento. No obstante, debemos finalizar el desarrollo del proyecto con una fase
de pruebas, en la cual comprobemos el funcionamiento del proceso completo
de la solucion propuesta, desde la ingesta de ficheros de audio hasta la salida
del comando reconocido para cada fichero. Esta fase esta implementada en
el notebook Test-app.ipynb.
A fin de agilizar la fase de pruebas, tomamos 2 ficheros de cada clase
a reconocer del dataset. Estos ficheros fueron elegidos de forma aleatoria, y
se pueden encontrar en la carpeta /test app samples del directorio raiz del
fichero que contiene la implementacion del presente Trabajo de Fin de Grado.
Los ficheros estan distribuidos de igual forma que en el dataset original,
dividiendose por carpetas en funcion del comando contenido en el fichero.
La ejecucion de las pruebas concluye con 6 ficheros mal clasificados de
los 47 que componen el conjunto de datos definido para este fin, suponiendo
aproximadamente un 12,8 % del total. Al tratarse de un conjunto notable-
mente mas pequeno que el dataset completo no podemos comparar los por-
centajes de error, no obstante, nos sirve para validar que el modelo funciona
correctamente en la mayor parte de los casos.
En la tabla 5.6 podemos observar que, entre los 6 ficheros mal clasifica-
dos, 2 de ellos son del mismo locutor (37dca74f), y en ambos la prediccion
es three. En futuras iteraciones del proyecto serıa de utilidad analizar los
resultados en todos los ficheros de los locutores que aparecen en esta tabla,
63
Figura 5.8: Muestra de la salida de la ejecucion de Test-app.ipynb.
pues recordemos que los ficheros han sido elegidos al azar, y esta coincidencia
con el locutor 37dca74f nos lleva a plantear la hipotesis de que algunos de
los fallos encontrados podrıan deberse a pronunciaciones singulares, con poca
representacion en el dataset.
Fichero Etiqueta Prediccion37dca74f nohash 2 zero three5ebc1cda nohash 5 six right37dca74f nohash 1 eight threebdd22e4d nohash 4 forward oneff4ed4f3 nohash 1 no nine5f9cd2eb nohash 4 learn go
Tabla 5.6: Ficheros mal clasificados en la fase de pruebas.
64
5.3. Evaluacion de resultados
Los resultados obtenidos, si bien no alcanzan el estado del arte, no se
alejan en exceso. Tomamos como referencia los resultados expuestos en el
paper de publicacion de la version 2 del dataset [23], donde se reporta una
precision de test del 88,2 % al realizar entrenamiento y test con esa version.
No obstante, cabe destacar que los resultados del paper original y los
obtenidos en este proyecto no son del todo equiparabales pues, en primer
lugar, el tipo de red de neuronas utilizado es diferente, al haber recurrido
a celdas LSTM frente a la red convolucional utilizada en el paper original,
donde se recurrio a la arquitectura ofrecida por defecto para Keyword Spotting
en TensorFlow [32]. Ademas, tampoco se han utilizado las mismas metricas,
ya que el paper original implementa caracterısticas que quedan fuera del
alcance de nuestro proyecto, al trabajar directamente sobre streams de audio,
utilizando como metrica Top-One Error en lugar de accuracy.
En adicion a lo anterior, el objetivo del proyecto era evaluar las capaci-
dades de las redes LSTM, y no alcanzar de forma imperativa el estado del
arte actual. No obstante, quedan pendientes ampliaciones del proyecto para
evaluar si es posible mejorar los resultados mediante, por ejemplo, la inclu-
sion de tecnicas de regularizacion, la variacion de la funcion de activacion de
las celdas LSTM o el aumento de dimensiones de la red.
65
Capıtulo 6
Conclusiones
Las celdas LSTM muestran un buen funcionamiento para Keyword Spot-
ting. A pesar de haber logrado una precision menor que los datos de referencia
[23], no se considera que se haya explotado al maximo el potencial de esta
tecnologıa, por lo que se espera obtener resultados similares a los logrados
con redes convolucionales en futuras iteraciones del proyecto.
Al contrario de lo previsto al principio del proyecto, la fase mas compleja
del mismo no ha sido el diseno y entrenamiento de la red de neuronas sino la
eleccion y el preprocesado del dataset. Esto se vio especialmente acentuado
con la necesidad de pivotar en el alcance del proyecto, pasando de un sistema
de Reconocimiento Automatico del Habla en el que podrıamos identificar
comandos a un sistema de Keyword Spotting, debido a los fallos de diseno
presentados por el dataset Mozilla Common Voice y al plazo restante para
la entrega del proyecto.
Una vez cambiado el alcance del proyecto, tambien encontramos proble-
mas en la preparacion de los datos para su ingesta al modelo en la fase de
entrenamiento, al tener que construir las estructuras de datos (DataFrames
66
de Pandas, arrays n-dimensionales de NumPy) con los resultados obtenidos
por la fase de preprocesado de audio.
A pesar de haber planteado menos problemas de los esperados, tambien
ha sido necesario lidiar con la tendencia al sobreentrenamiento de las celdas
LSTM, aunque en este caso se ha solucionado simplemente con la inclusion
de tecnicas de regularizacion y mediante experimentacion con las diferentes
arquitecturas planteadas para la red de neuronas.
La fase de investigacion previa al proyecto fue extensa debido al descono-
cimiento del funcionamiento de la mayorıa de las tecnologıas y herramientas
utilizadas. En adicion a tratarse del primer proyecto de estas caracterısticas
que realizamos, y a los problemas que ha habido que afrontar, se puede con-
cluir que el proyecto ha permitido una notable mejora respecto a nuestro nivel
de partida, suponiendo una base de experiencia que, sin duda alguna, sera de
gran utilidad en futuros proyectos a realizar en el ambito de la Inteligencia
Artificial.
67
Capıtulo 7
Futuros Proyectos
El presente proyecto pretende suponer la primera iteracion para un fu-
turible asistente virtual que funcione de forma similar Alexa o Siri. En esta
seccion, detallamos algunas de las vıas de ampliacion del alcance del proyecto
desarrollado.
7.1. Streams de audio con ruido
La siguiente iteracion a realizar sobre la base ya desarrollada serıa la
capacidad de reconocer comandos contenidos en streams de audio de longitud
indeterminada, pudiendo incluirse varios comandos en un mismo stream.
Idealmente, estos streams tambien contendrıan ruido de fondo, a fin de
lograr entrenar la red en un entorno lo mas similar posible al real, donde
los comandos se reconocerıan en un stream continuo obtenido mediante el
microfono de un dispositivo, como por ejemplo un smartphone, pudiendo
estar el usuario en la calle o en cualquier lugar publico, ya que no es comun
que este se encuentre en un entorno libre de ruido.
68
7.2. Integracion con una aplicacion final
Tras anadir la capacidad de reconocimiento de los comandos en streams
de audio con ruido, el siguiente paso natural serıa la integracion del sistema
con una aplicacion final en plataformas que pudieran resultar de interes, tales
como iOS y Android.
Esta integracion tendrıa como finalidad el poder utilizar el sistema en
tiempo real en un entorno no controlado, pudiendo medir ası de forma defi-
nitiva su efectividad, ası como poder ofrecer un servicio a los usuarios a pesar
de la limitacion del numero de instrucciones.
7.3. Aumento del conjunto de comandos
En relacion con la seccion anterior, llegado cierto punto de madurez de la
solucion resultarıa de utilidad anadir nuevos comandos al conjunto actual, a
fin de anadir mas funcionalidades al asistente y poder integrar la aplicacion
final con aplicaciones de terceros.
Este cambio de alcance podrıa abordarse bien con un dataset mas gran-
de, continuando con el planteamiento de Keyword Spotting, o bien retomar
el planteamiento de Reconocimiento Automatico del Habla (ASR). Lo mas
conveniente serıa optar por el ASR, dado que nos permitirıa reconocer tantos
comandos como quisieramos, mejorando ası la escalabilidad del sistema; ası
como por la disponibilidad de un mayor numero de datasets.
69
7.4. Comparativa de arquitecturas
Con una finalidad mas orientada a la investigacion, serıa deseable com-
parar con otros modelos los resultados obtenidos unicamente haciendo uso
de LSTM, una vez hayamos conseguido explotar al maximo su potencial.
Entre estos modelos, se podrıa evaluar los resultados que se obtengan con
una combinacion de LSTM con Redes de Neuronas Convolucionales (CNN),
en las que se basa la arquitectura del paper que hemos tomado como refe-
rencia [23, 32]; redes LSTM bidireccionales, en las cuales no solo se tiene
en cuenta el contexto pasado (de estados anteriores) sino tambien el futuro
(estados siguientes) [33]; el desempeno de modelos de atencion [25], o de las
mas recientes Grid LSTM [34].
70
Bibliografıa
[1] Goodfellow, I., Bengio, Y. and Courville, A. 2017. Deep learning. Cam-
bridge, Mass: The MIT Press.
[2] McClelland, C. 2017. The Difference Between Artificial Intelligence,
Machine Learning, and Deep Learning. Medium [en lınea]. [Consulta:
7 febrero 2018]. Disponible en: https://medium.com/iotforall/the-
difference-between-artificial-intelligence-machine-learning-and-deep-
learning-3aa67bff5991.
[3] Iris Dataset. UCI Machine Learning Repository [en lınea]. [Consulta: 28-
05-2018]. Disponible en: http://archive.ics.uci.edu/ml/datasets/Iris.
[4] Fisher,R.A. 1936. The use of multiple measurements in taxonomic pro-
blems. Annual Eugenics, 7, Part II, pp. 179-188.
[5] Hochreiter, S. and Schmidhuber, J. 1997. Long Short-Term Memory. Neu-
ral Computation. Vol. 9, pp. 1735-1780.
[6] Colah, C. 2015. Understanding LSTM Networks. GitHub [en lınea]. [Con-
sulta: 19-02-2018]. Disponible en: http://colah.github.io/posts/2015-08-
Understanding-LSTMs/.
[7] Grosse, R. Lecture 15: Exploding and Vanishing Gradients.
71
[8] A Beginner’s Guide to Recurrent Networks and LSTMs. Dee-
plearning4j.org [en lınea]. [Consulta: 10-05-2018]. Disponible en:
https://deeplearning4j.org/lstm.html.
[9] Duchi, J., Hazan, E., and Singer, Y. 2011. Adaptive Subgradient Methods
for Online Learning and Stochastic Optimization. Journal of Machine
Learning Research, 12, 2121-2159
[10] Ruder, S. 2017. An overview of gradient descent optimization algorithms.
arXiv:1609.04747
[11] Kingma, D. P., and Ba, J. L. 2015. Adam: a Method for Stochastic Op-
timization. International Conference on Learning Representations, 1–13.
[12] Zeiler, M. D. 2012. ADADELTA: An Adaptive Learning Rate Method.
arXiv:1212.5701.
[13] Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I. and Salakhutdi-
nov, R. 2014. Dropout: A Simple Way To Prevent Neural Networks from
Overfitting. Journal of Machine Learning Research, 15, 1929-1958.
[14] Regularization for simplicity: L2 Regularization. Machine Learning
Crash Course with TensorFlow API [en lınea]. [Consulta: 19-03-2018].
Disponible en: https://developers.google.com/machine-learning/crash-
course/regularization-for-simplicity/l2-regularization.
[15] Fayek, H. 2016. Speech Processing for Machine Learning: Filter
banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What’s In-
Between. Haythamfayek.com [en lınea]. [Consulta: 24-02-2018]. Dispo-
nible en: http://haythamfayek.com/2016/04/21/speech-processing-for-
machine-learning.html.
72
[16] Garofolo, John S., et al. TIMIT Acoustic-Phonetic Continuous Speech
Corpus LDC93S1. Web Download. Philadelphia: Linguistic Data Consor-
tium, 1993.
[17] Garofolo, John, et al. CSR-I (WSJ0) Sennheiser LDC93S6B. Web Down-
load. Philadelphia: Linguistic Data Consortium, 1993.
[18] CSR-II (WSJ1) Sennheiser LDC94S13B. DVD. Philadelphia: Linguistic
Data Consortium, 1994.
[19] A. Rousseau, P. Deleglise, and Y. Esteve. 2012. ”TED-LIUM: an au-
tomatic speech recognition dedicated corpus”, in Proceedings of the
Eighth International Conference on Language Resources and Evaluation
(LREC’12).
[20] Panayotov, V., Chen, G., Povey, D., and Khudanpur, S. 2015. Libris-
peech: an asr corpus based on public domain audio books. In Acoustics,
Speech and Signal Processing (ICASSP), 2015 IEEE International Con-
ference, pp. 5206-5210. IEEE.
[21] VoxForge Repository [en lınea]. [consulta 15-02-2018]. Disponible en:
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/.
[22] Mozilla Common Voice Dataset [en lınea]. [consulta 17-02-2018]. Dispo-
nible en: http://voice.mozilla.org/.
[23] Warden, P. 2018. Speech Commands: A Dataset for Limited-Vocabulary
Speech Recognition.
73
[24] Repositorio de Speech Commands para TensorFlow en GitHub, fichero
input data.py. GitHub [en lınea]. [consulta 18-04-2018]. Disponible
en: https://github.com/tensorflow/tensorflow/blob/master/tensorflow
/examples/speech commands/input data.py.
[25] Chan, W., Jaitly, N., Le, Q. V., and Vinyals, O. 2015. Listen, Attend
and Spell. arXiv:1508.01211
[26] Soltau, H., Liao, H., Sak, H. 2016. Neural Speech Recognizer: Acoustic-
to-Word LSTM Model for Large Vocabulary Speech Recognition. ar-
Xiv:1610.09975
[27] Graves, A., Fernandez, S., Gomez, F., and Schmidhuber, J. 2006. Con-
nectionist Temporal Classification: Labelling Unsegmented Sequence Da-
ta with Recurrent Neural Networks.
[28] LSTM Layer. Keras Documentation [en lınea]. [Consulta: 20-04-2018].
Disponible en: https://keras.io/layers/recurrent/#lstm.
[29] CuDNNLSTM Layer. Keras Documentation [en lınea]. [Consulta: 20-04-
2018]. Disponible en: https://keras.io/layers/recurrent/#cudnnlstm.
[30] Dense Layer. Keras Documentation [en lınea]. [Consulta: 20-04-2018].
Disponible en: https://keras.io/layers/core/#dense.
[31] Dropout Layer. Keras Documentation [en lınea]. [Consulta: 10-05-2018].
Disponible en: https://keras.io/layers/core/#dropout.
74
[32] Sainath, T. N. and Parada, C. 2015. Convolutional Neural Net-
works for Small-Footprint Keyword Spotting. Sixteenth Annual Con-
ference of the International Speech Communication Association.
[en lınea]. [Consulta: 10-05-2018]. Disponible en: https://www.isca-
speech.org/archive/interspeech 2015/papers/i15 1478.pdf.
[33] Graves, A. and Schmidhuber, J. 2005. Framewise Phoneme Classification
with Bidirectional LSTM and Other Neural Network Architectures.
[34] Kalchbrenner, N., Danihelka, I. and Graves, A. 2015. Grid Long Short-
Term Memory.
75