Sistema de reconocimiento de voz para los dígitos en inglés del 0 al 9 Iria Gallego Gallego Irene Pérez Encinar Universidad Carlos III de Madrid Universidad Carlos III de Madrid 100050239@alumnos.uc3m.es 100054642@alumnos.uc3m.es ABSTRACTO En este trabajo vamos a desarrollar un sistema de reconocimiento de voz capaz de reconocer los dígitos en inglés del cero al nueve. Para ello estudiaremos antes cómo funciona el habla humana y explicaremos cómo está implementado dicho algoritmo. Finalmente mediante gráficos y explicaciones mostraremos el resultado del trabajo. Términos Generales Algoritmos, Diseño, Medidas Palabra clave Reconocimiento de voz, k-means, extracción de rasgos, coeficientes cepstrales, aprendizaje. 1. INTRODUCCIÓN 1.1 Breve reseña Histórica exactitud perfecta en el reconocimiento. Lo siguiente fue trabajar en el reconocimiento de voz continuo, pero no se observaron resultados hasta los años setenta cuando se produjo el primer producto de reconocimiento de voz, el VIP100 de Threshold Technology Inc. (utilizaba un vocabulario pequeño, dependiente del locutor, y reconocía palabras discretas ) y que además ganó el U.S. National Award en 1972. Como la mayoría de los avances tecnológicos, el reconocimiento de voz también se vio impulsado por el interés que mostró el departamento de defensa de los Estados Unidos lanzando grandes proyectos de investigación y propiciando así un gran avance de la inteligencia artificial. Como se buscaba el reconocimiento del habla continuo, se empezaron a incorporar en los sistemas módulos de análisis léxico, análisis sintáctico, análisis semántico y análisis pragmático. El proyecto más grande desde los años setenta terminó en 1976 con el resultado de que CMU, SRI, MIT crearon sistemas para el proyecto ARPA SUR (Speech Understanding Research). Actualmente se trabaja con sistemas de vocabulario amplio (más de 1000 palabras) y adicionalmente se están bajando los precios de dichos sistemas. Es importante para entender lo que vamos a hacer en este trabajo empezar con una breve reseña histórica acerca del reconocimiento de la voz. 1.2 Usos y aplicaciones Para situar un comienzo podemos remontarnos a los años 1870 cuando Alexander Graham Bell, a raíz de querer construir un sistema que hiciera el habla visible a las personas con problemas auditivos, acabó inventando el teléfono. Alrededor de diez años más tarde, fue Tihamir Nemes quien solicitó permiso para una patente para desarrollar un sistema de transcripción automática que identificara secuencias de sonidos y los imprimiera (texto); este permiso fue rechazado por tratarse de un proyecto poco realista. Tuvieron que pasar treinta años hasta que los laboratorios AT&T Bell construyeron la primera máquina capaz de reconocer voz de los 10 dígitos del Inglés. Requería extenso reajuste a la voz de una persona, pero una vez logrado tenía un 99% de certeza. Las dos funciones principales del reconocimiento de voz son: la toma de dictado y el control de funciones dentro de la computadora. Por lo tanto el reconocimiento de voz se puede utilizar para convertir la voz en textos y documentos escritos o bien para controlar el equipo mediante el uso de órdenes. El valor de controlar el equipo mediante el reconocimiento de voz, es que uno tendrá sus dos manos libres, y a su disposición, para realizar otras tareas. Surge así la esperanza de que el reconocimiento de voz es simple y directo; pero el paso de los años daría al traste con esta idea, ya que a mediados de los años sesenta la mayoría de los investigadores reconoció que era un proceso mucho más intrincado y sutil de lo que habían anticipado. Empiezan así a reducirse los alcances y se enfocan a sistemas más específicos como, por ejemplo, los sistemas dependientes del locutor, los de flujo discreto del habla y aquellos con un vocabulario pequeño que no excedía las 50 palabras. Estos sistemas empiezan a incorporar técnicas de normalización del tiempo (minimizar diferencia en velocidad del habla) y ya no buscaban una Hoy en día el reconocimiento de voz está presente en muchos aspectos de nuestra vida diaria, ¿Quién no ha llamado a un teléfono de atención al cliente en el que lo que nos responde y lo que nos pregunta es una máquina? Esa es la razón por la que el reconocimiento de voz está optimizado para funciones dentro de los nuevos vehículos. Por esta razón, la fuerza aérea también utiliza el reconocimiento de voz para el uso de sus pilotos. De esta misma razón se deduce que el reconocimiento de voz sea extremadamente útil para personas con discapacidad ya que les permite hacer uso de su ordenador de una forma en la que antes no hubieran podido. Otra aplicación es la domótica, ya que hay una tendencia hacia la automatización de los hogares y uno de los elementos más importantes en este proceso es la tecnología de reconocimiento de voz. La industria de la atención de la salud es el principal consumidor de este tipo de tecnología ya que la utilizan para los dictados y transcripciones y llevar a su vez un registro de lo que ocurrió durante una consulta o una atención para evitar posibles denuncias por malas conductas que tan a la orden del día están en este campo. Las aplicaciones militares son inolvidables, desde el control de vuelo al control de batallas. Ambos dos escenarios donde la carga visual es excesiva y con un sistema de reconocimiento de voz podría reducirse en gran medida y permitir a los pilotos centrarse en la batalla y el vuelo y no en darle a un cierto botón para accionar un cierto mecanismo ya que esto lo hará con una sencilla orden de voz. En la imagen inferior se muestra una aplicación de Google de búsqueda por voz. Fig 1 - Reconocmiento de voz por Google. A pesar de todo lo visto hasta ahora, el reconocimiento de voz todavía tiene muchos defectos y limitaciones. Estas limitaciones se basan en las deficiencias de la inteligencia artificial y pasaremos a estudiarlas un poco más a fondo en los siguientes apartados. Comencemos por entender cómo funciona el habla en los seres humanos para poder llegar a entender y saber cómo modelarla en un ordenador. Las señales de voz se componen de una secuencia de sonidos; estos sonidos y las transiciones entre ellos sirven de representación simbólica de la información. La manera en que se organizan estos símbolos viene gobernada por las reglas del lenguaje; el estudio de estas reglas y sus implicaciones en las comunicaciones humanas recibe el nombre de lingüística. Por otro lado el estudio y clasificación de los sonidos se conoce por fonética. Ahora que sabemos algunas de las definiciones más importantes relacionadas con el habla podemos entender un poco mejor cómo produce el ser humano la voz. Pues bien, la voz se produce a través del tracto vocal que es excitado por ráfagas cortas, estímulos periódicos o ruido blanco. Lo sonidos sonoros se vienen dados por la vibración que producen las ráfagas de aire al pasar entre las cuerdas vocales; por otro lado los sonidos no sonoros se producen por un flujo de aire turbulento que atraviesa las cuerdas vocales. De esta manera los sonidos se clasifican en fonemas entre los que encontramos cuatro tipos distintos: vocales, diptongos, semivocales y consonantes. Debido que el habla está formado por frecuencias casi periódicas que se denominan formantes es importante saber también los rangos de frecuencia entre los que se encuentran el habla, estos son: F1 (270-730 Hz), F2 (840-2290 Hz), y F3 (1690-3010 Hz). Como todas estas características debemos tenerlas en cuenta a la hora de construir un sistema de reconocimiento de voz, vamos a ver ahora cómo modelamos el habla humana. Pues bien, la voz humana se modela como un sistema lineal y variante con el tiempo excitado por una señal de alta frecuencia. En la imagen inferior se observa el sistema humano y las diferentes fases por las que pasa la señal de voz hasta convertirse en una onda emitida a través del aire. 2. RECONOCIMIENTO DE VOZ 2.1. Términos y definiciones Una vez situados históricamente y vistas su diversas aplicaciones vamos a dar una serie de características de por qué esta técnica es tan difícil pero tan útil al mismo tiempo. El reconocimiento de voz o también conocido como el reconocimiento del habla es una rama de la inteligencia artificial cuyo principal objetivo es permitir la comunicación hablada entre seres humanos que la utilizamos cotidianamente y las máquinas o computadoras electrónicas. A primera vista parece sencillo pero no lo es tanto ya que el habla es dependiente de una gran cantidad de características que varían según la situación en la que se encuentre el interlocutor. Algunas de estas características son el idioma, la acústica, la fonética, la léxica, la semántica, etc., que consiguen añadir un algo grado de ambigüedad e incertidumbres que conllevan a errores inevitables en este tipo de técnicas. Fig 2 - Sistema vocal humano (I) una señal en escala logarítmica (dB). Su nombre deriva de invertir las cuatro primeras letras de “spectrum” (a veces es llamado espectro del espectro). En cierta bibliografía se indica que el proceso para calcular el cepstrum es: FT → log → IFT, es decir, primero calcular la transformada de Fourier, luego obtener el logaritmo del resultado y finalmente calcular la transformada de Fourier inversa. De esta forma el cepstrum sería la transformada inversa de Fourier del logaritmo del espectro. Esta no es la definición que se hizo originariamente, pero en la actualidad es ampliamente utilizada. Fig 3 - Sistema vocal humano (II) En la siguiente imagen se puede ver gráficamente el sentido de aplicar la escala logarítmica para analizar el espectro de la voz: 2.2. Tipos de Aprendizaje Es muy importante a la hora de diseñar un sistema de reconocimiento de voz la elección del tipo de aprendizaje que se utilizará para modelar las diversas fuentes de conocimiento. Entre estas técnicas pasamos a destacar dos por ser las más utilizadas hoy en día: el aprendizaje deductivo y el aprendizaje inductivo. Las técnicas de Aprendizaje Deductivo se basan en la transferencia de los conocimientos que un experto humano posee a un sistema informático que los utilizará en el reconocimiento. Los sistemas más famosos que utilizan estas técnicas son los Sistemas Basados en Conocimiento y en particular los Sistemas Expertos. Por otro lado está el aprendizaje inductivo que se basa en que el sistema pueda automáticamente conseguir los conocimientos necesarios a partir de ejemplos reales sobre la tarea que se desea modelar. Ésta será la técnica que se utilizará en este trabajo para reconocer los dígitos del 0 al 9 del idioma inglés. En los siguientes apartados haremos primero una pequeña introducción teórica a las técnicas y algoritmos que utilizaremos, para después explicar cómo se van utilizando para el reconocimiento de voz aplicado a este ejemplo concreto. Fig 4 – Separación de bajas y altas frecuencias 4. MODELOS OCULTOS DE MARKOV 3. COEFICIENTES CEPSTRALES Los coeficientes cepstrales se utilizan para la representación del habla y están basados en la percepción auditiva humana. Como ya decíamos la voz humana no es más que una señal sonora modulada según la vibración de las cuerdas vocales y que, por tanto, se puede representar como un sistema variante con el tiempo excitado por una señal de alta frecuencia. Así, para analizar la voz nos interesará ser capaces de separar las variaciones rápidas de la envolvente de baja frecuencia. Para ello, necesitaremos hacer un análisis en frecuencia como el que hace la Transformada de Fourier (TF), pero con una pequeña modificación: las bandas de frecuencia estarán situadas logarítmicamente, ya que así se modela más apropiadamente la respuesta auditiva humana que con las bandas espaciadas linealmente. Esto nos lleva a introducir el cepstrum, que es el resultado de calcular la Transformada de Fourier del espectro de Hasta ahora hemos visto que los coeficientes cepstrales nos sirven para identificar sonidos y así poder diferenciar los distintos fonemas. Ahora bien, las palabras no son sólo el conjunto de fonemas que las componen, sino también las transiciones entre ellos, es decir, la manera en que estén ordenados para formar la palabra. Por eso, cuando queremos diseñar un sistema de reconocimiento de voz es muy importante no sólo reconocer los sonidos sino también qué secuencias son más probables para poder identificar las palabras. Aquí es donde entran las técnicas de aprendizaje inductivo; entre ellas, los modelos ocultos de Markov, que son los más utilizados en este tipo de aplicaciones. Creemos que está un poco fuera del alcance del trabajo estudiar estos modelos en profundidad, ya que la matemática sobre la que se sustentan no es trivial. Por ello, haremos una aproximación más bien teórica de cara a entender su funcionalidad. Primero, empezaremos por explicar qué es un modelo de Markov simple, para después entender mejor los modelos ocultos. Como decíamos, las señales acústicas son secuenciales por naturaleza, es decir, las muestras que se toman de ellas no son independientes, sino que existe una correlación entre cada muestra y la siguiente. Eso significa que para calcular la probabilidad de una secuencia de muestras observada necesitaríamos saber todas las probabilidades condicionadas de las diferentes muestras de la secuencia dadas las anteriores muestras. Así, surge un problema computacional importante, ya que se necesitaría una gran cantidad de realizaciones para encontrar los parámetros de la distribución. Para simplificar los cálculos anteriores, se aplica la asunción de Markov, que dicta que la probabilidad de una muestra (xi) sólo depende de la probabilidad de la muestra anterior y no de todas las anteriores como antes. Así, la probabilidad de generar una secuencia de muestras (D) dado un modelo (M) se puede escribir simplemente como el producto de las probabilidades condicionadas de una muestra a la siguiente (probabilidades de salto): Normalmente, cuando se trabaja con este tipo de modelos, las muestras observadas son discretizadas usando un cuantificador para que la secuencia D pueda expresarse de forma escalar. Así, cada muestra podrá tomar uno entre M diferentes valores posibles, a los que se suele llamar estados (S) y la probabilidad condicionada de una muestra dada la anterior será la probabilidad de transición entre dos estados (aij). Esto simplifica mucho las cosas porque reduce nuestro modelo a determinar una matriz de transiciones entre estados (A). En la siguiente imagen vemos la representación gráfica de un modelo de Markov: Fig 5 – Modelo simple de Markov El problema del modelo simple de Markov es que es demasiado estacionario para modelar la voz humana. Por ello, es necesario introducir los modelos ocultos de Markov (HMM – Hidden Markov Models) en los que ya no podemos observar directamente la secuencia D de muestras xi (ni, por tanto, los estados posibles que pueden tomar), con lo que los parámetros que queremos determinar se han vuelto “ocultos” (de ahí el nombre). Ahora observaremos las realizaciones de otra variable (Y) y tendremos que determinar entonces dos matrices: la matriz A de transiciones entre estados, al igual que antes, pero también la matriz de “emisión” (B), es decir, la que expresa la probabilidad de observar una muestra yi dado que la realización xi de la variable oculta ha tomado el estado Sj. En la siguiente imagen vemos este modelo de forma más intuitiva: Fig 6 – Modelo oculto de Markov Normalmente, la variable Y observada también toma uno entre L posibles valores discretos Ci y también satisface la propiedad de Markov con respecto a los estados: dada xi, cada observación yi es independiente del resto de estados y observaciones. En definitiva, lo que tenemos es un modelo en el que dada una secuencia de observaciones discretas, tendremos que averiguar los siguientes parámetros: - La matriz de emisión B, que nos da la probabilidad de tener un estado oculto dada una emisión - La matriz de transiciones A, que nos da la probabilidad de un estado dado el anterior. 5. ALGORITMO K-MEDIAS Los algoritmos de agrupamiento o clustering tienen como objetivo devolver al usuario una serie de puntos que en cierto modo representan al resto de los puntos iniciales por su posición privilegiada con respecto al total. El algoritmo más común utiliza una técnica de refinamiento iterativo que debido a su ubicuidad, es a menudo llamado el algoritmo K-means, también se conoce como algoritmo de Lloyd's. El algoritmo consiste en que dado un conjunto inicial de centroides (punto representativo de un grupo de valores) que pueden ser especificados de manera aleatoria o usando algún tipo de heurística, el algoritmo procede alternando entre dos pasos. El primer paso se puede denominar paso de asignación en el que a cada observación le asigna el grupo con la media más cercana, o lo que es lo mismo, le asigna el grupo del que más cerca se encuentre en el espacio de k dimensiones que se haya especificado al comienzo. Matemáticamente, este paso se resume en la siguiente expresión: El segundo paso consiste en calcular las nuevas medias que se convertirán en centroides de las observaciones del grupo hasta el momento, es decir: El momento de parar será cuando las medias que se calculan en el segundo paso ya no cambien y se mantengan constantes. En las siguientes imágenes se muestra gráficamente cómo funciona este algoritmo, que será el que le apliquemos a una secuencia de entrenamiento dada para hacer nuestro codebook y poder estimar en cada caso de qué digito se trata (ver sección 6.2). El ejemplo es el siguiente: 4. Se repiten los pasos 2 y 3 hasta que se llegue a converger (las medias no varíen). 6. SISTEMA DE RECONOCIMIENTO DE VOZ PARA LOS DÍGITOS DEL 0 AL 9 1. En este caso tenemos k=3 media iniciales que se seleccionan aleatoriamente del grupo inicial de datos (en color). Ahora que ya hemos analizado todos los elementos que participan en nuestro sistema, podemos ver qué funcionalidad tiene cada uno y cómo vamos a ir haciendo para identificar las palabras. Nuestro objetivo es diseñar un sistema capaz de reconocer la voz humana para palabras aisladas dentro de un vocabulario finito de R posibles palabras (R = 10 en concreto). Cada palabra entonces, se modelará con una secuencia diferente. Para obtener dicha secuencia y reconocer la palabra tendremos que seguir los siguientes pasos: 2. Se forman 3 clusters asociando a cada - Extracción de rasgos - Identificación de símbolos - Entrenamiento del modelo gracias a un conjunto de datos de entrenamiento (training set) - Uso del modelo para el reconocimiento de palabras (en este caso los dígitos del 0 al 9 del inglés) observación el centroide más cercano. 6.1 Extracción de rasgos 3. Se recalcula la media y se obtienen los nuevos centroides. Como decíamos, lo primero que tendremos que hacer será dividir las palabras en sus elementos más simples que, en el terreno de los sonidos, son los fonemas. Así, de cada palabra tendremos una secuencia de muestras (típicamente, para una duración de 1 segundo tendremos unas 10000 muestras), las cuales iremos enventanando por bloques de N muestras mediante un enventanado de Hamming. Cuántas muestras debe tener cada bloque (valor de N) o, lo que es lo mismo, cuánto dura cada fonema o cuántos fonemas componen una palabra es un dato que a priori no sabemos. Será mediante el entrenamiento del modelo y el cálculo del error cometido al reconocer las palabras como iremos determinando todos estos parámetros. Una vez que tengamos el conjunto de muestras de sonido que definen un fonema, procederemos a hacer un análisis espectral con coeficientes LP (linear prediction), obtenidos mediante el algoritmo de recursión de Levinson-Durbin, y coeficientes cepstrales que, como hemos visto, nos sirven para diferenciar unos fonemas de otros. En las siguientes imágenes vemos cómo el análisis espectral nos sirve para diferenciar dos fonemas, en este caso las letras o /ə / y s /es/ del inglés: En nuestro caso, como sólo trabajamos con un conjunto de 10 palabras (los dígitos del 0 al 9), el conjunto de fonemas que vamos a tener es limitado, en concreto 16, por lo que habrá 16 clusters en total. A partir de aquí, cualquier vector observado será cuantificado utilizando este codebook, tanto para el entrenamiento de los modelos, como para el posterior reconocimiento de las palabras. 6.3 Entrenamiento del modelo Fig 7 – Espectrograma de la letra s /es/ El siguiente paso del sistema es, una vez que tenemos las secuencias discretas, saber qué probabilidad hay de que representen a cada palabra. Aquí es donde intervienen los modelos ocultos de Markov, ya que, como hemos comentado, nos sirven bien para modelar las palabras. Así, vamos a definir y entrenar un modelo para cada una de las palabras, es decir, para cada uno de los dígitos del 0 al 9 y así luego, dada una secuencia discreta observada, saber cuál de los 10 modelos es más probable que la haya generado. Como ya dijimos, entrenar un modelo oculto de Markov es obtener la matriz A de transiciones entre estados ocultos y la matriz B de emisión. Pero, ¿qué son los estados ocultos aquí? Pues bien, ahora vamos a entender perfectamente el sentido de utilizar modelos ocultos de Markov para este tipo de sistemas: Fig 8 – Espectrograma de la letra o /ə / 6.2 Identificación de símbolos Después del paso anterior, lo que tenemos es cada palabra representada por una secuencia de vectores {y1, y2, …, yT} donde cada uno de esos vectores tiene N componentes, correspondientes a la frecuencia proporcionada por el análisis cepstral para cada una de las N muestras de la ventana. El problema es que nosotros no queremos trabajar en un espacio continuo de vectores, sino en uno discreto de escalares, por lo que necesitamos alguna forma de clasificar dichos vectores. Aquí es donde interviene el algoritmo de las kmedias, que nos va a permitir definir tantos clusters como fonemas tengamos y aproximar así un vector de rasgos por el centroide del cluster, de forma que todas las ocurrencias de un mismo fonema, aunque de una vez a otra puedan ser ligeramente diferentes, al final se representen mediante un mismo símbolo. Así, se define un “codebook” o diccionario que es una matriz KxN en la que las columnas representan cada centroide (que será un vector con una cierta posición dentro del espacio muestral) y las filas representan los “rasgos” de cada centroide (es decir, la frecuencia de cada una de las N muestras). Con esto, se puede representar una palabra como una secuencia de números enteros, siendo estos números el índice del centroide correspondiente dentro del codebook citado. Nosotros observamos una secuencia en la que cada elemento puede tomar K posibles valores, que ya hemos dicho que en nuestro caso serán 16; ésta es la secuencia observada. Ahora bien, esa secuencia observada tiene que pertenecer a alguna de las palabras posibles, es decir, tiene que haber sido generada al decir alguien uno de los dígitos. Pero yo no sé qué dígito ha dicho, para mí eso está oculto, yo lo único que sé es que tenía unas muestras de sonido, las he enventanado y clasificado y ahora tengo una secuencia de fonemas. Por eso son necesarios estos modelos. Ahora vemos claro que la matriz de emisión me dará la probabilidad de que se haya dicho una palabra dado que yo he observado una serie de fonemas y la verosimilitud del modelo se completa con la matriz de transiciones, ya que sabemos que después de un fonema es más probable que vengan unos que otros. Aunque teóricamente el número de estados en cada caso debería ser el número de fonemas presentes en cada palabra, en la práctica se comprueba que los mejores resultados se obtienen con modelos de 5 estados. Entre las razones para esto están que no todos los fonemas duran lo mismo en inglés (tenemos tanto vocales como consonantes largas y cortas) y que las vocales suelen dar más información que las consonantes. Así, la división de la palabra se hace al final en partes un poco más pequeñas que los fonemas. En las siguientes imágenes podemos ver de forma gráfica un ejemplo de matriz de transiciones (5x5) y otra de probabilidad de emisión (16x5) para el modelo del dígito uno: - Extraeremos los rasgos de la palabra como se ha explicado - Expresaremos la secuencia que representa la palabra mediante una cadena de símbolos discretos sacados del codebook - Calcularemos la probabilidad de que esa secuencia haya sido generada con cada uno de los diez modelos - Clasificaremos la palabra según el modelo que nos dé una probabilidad más alta. En la siguiente imagen vemos el ejemplo de clasificación del uno: Fig 9 – Matriz de transiciones (uno) Fig 11 – Log-probabilidades de los modelos y clasificación Fig 10 – Matriz de probabilidad de emisión (uno) En cuanto al entrenamiento de estos modelos, las matrices A y B se calculan de forma recursiva mediante un algoritmo de tipo EM (expectation – maximization), que se compone de dos pasos: Nota: aunque apenas se aprecia en la gráfica superior, los valores de las distintas probabilidades están en escala logarítmica porque al ser tan pequeños, si no sería muy difícil representarlos. 7. REFERENCIAS [1] Lars Kai Hansen. Programas en Matlab para la asignatura “Non-linear signal processing”. Universidad Técnica de Dinamarca (DTU) - Paso E: va calculando la probabilidad de las secuencias presentes en el training set dado el modelo que estamos estimando - Paso M: Reajusta los parámetros del modelo buscando hacer máxima dicha probabilidad. [2] Lars Kai Hansen. Hidden Markov Models. Apuntes para la asignatura “Non-linear signal processing”. Universidad Técnica de Dinamarca (DTU). Esto se hace recursivamente hasta que el incremento en la probabilidad en un paso es menor que una cierta tolerancia dada (ε). [3] Anders Meng. 2003. An introduction to Markov and Hidden Markov Models. [4] Wikipedia, http://es.wikipedia.org/wiki/Main_Page. 6.4 Reconocimiento de palabras Ahora ya estamos preparados para reconocer las palabras, para lo cual seguiremos el siguiente proceso: