Está en la página 1de 22

UNIVERSIDAD NACIONAL DEL CALLAO FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

RECONOCIMIENTO DE VOZ PARA CONVERTIR EL DISCURSO HABLADO EN TEXTO APLICANDO REDES NEURONALES ARTIFICIALES

SALLY KARINA TORRES ALVARADO (RESOLUCIN RECTORAL No 416-2010-R) (01 de Abril 2010 30 de Setiembre 2011)

CALLAO 2011

1. RESUMEN Como alternativa muy fcil y rpida de comunicacin entre el usuario y una maquina es el uso de lenguaje natural hablado. Una de las primeras fases para la creacin de interfaces inteligentes para las maquinas con lenguaje natural hablado es la captura del los sonidos y convertirlos a texto escrito. Para esto es necesario capturar los sonidos en archivos de WAV (VER APENDICE A) y procesar para extraer los datos (VER APENDICE B), que son seales de forma particular de acuerdo a cada fonema capturado, esta diferencia de la seal se utiliza para realizar el reconocimiento. Como propuesta de solucin al problema de reconocimiento de fonemas, en este proyecto se propone el uso de redes neuronales artificiales, para lo cual se necesita crear una red por cada fonema del lenguaje. De esta forma durante el trascurso de fonemas emitidos, que forman palabras en un discurso en el tiempo se activan una secuencia de redes neuronales correspondientes a los fonemas reconocidos y pueden ser escritos en archivos de texto. Para la implementacin del procesamiento del sonido y las redes neuronales artificiales se usa un lenguaje Visual C++ que permite una gran velocidad de clculo ya que requiere una gran cantidad de neuronas artificiales para cada fonema.

2. INTRODUCCIN La manera natural y ms rpida de comunicacin entre personas es el lenguaje natural hablado, emitido como una secuencia de sonidos que conforma las palabras y a su vez un conjunto de palabras forman un discurso que contiene informacin. La evolucin de las interfaces hombre tambin se orientan a una comunicacin mediante el lenguaje natural hablado, lo que hace necesario desarrollar innovadoras tecnologas que permitan convertir el discurso hablado en texto que se pueda almacenar en una computadora en forma de archivo para luego realizar las faces restantes de procesamiento de lenguaje natural. Para convertir el discurso oral es necesario realizar un proceso de reconocimiento de voz la cual es una tarea muy compleja debido a todos los requerimientos que le son implcitos. Adems del alto orden de los conocimientos que en ella se conjugan, deben tenerse nociones de los factores inmersos que propician un evento de anlisis individual (estados de nimo, salud, etc.). La historia esencial de los sistemas de reconocimiento de voz se puede resumir con los siguientes eventos: Los inicios: aos 50s Bell Labs. Reconocimiento de dgitos aislados monolocutor. RCA Labs. Reconocimiento de 10 slabas monolocutor. University College in England. Reconocedor fontico. MIT Lincoln Lab. Reconocedor de vocales independiente del hablante.

Los fundamentos: aos 60s Comienzo en Japn (NEC labs) Dynamic Time Warping (DTW Alineacin Dinmica en Tiempo -). Vintsyuk (Soviet Union). CMU (Carnegie Mellon University). Reconocimiento del Habla Continua. HAL 9000. Las primeras soluciones: aos 70s - El mundo probabilstico. Reconocimiento de palabras aisladas. IBM: desarrollo de proyectos de reconocimiento de grandes vocabularios. Gran inversin en los EE. UU.: proyectos DARPA. Sistema HARPY (CMU), primer sistema con xito.

Reconocimiento del Habla Continua: aos 80s - Expansin, algoritmos para el habla continua y grandes vocabularios Explosin de los mtodos estadsticos: Modelos Ocultos de Markov. Introduccin de las redes neuronales en el reconocimiento de voz. Sistema SPHINX.

Empieza el negocio: aos 90s - Primeras aplicaciones: ordenadores y procesadores baratos y rpidos. Sistemas de dictado. Integracin entre reconocimiento de voz y procesamiento del lenguaje natural. Una realidad: aos 00s - Integracin en el Sistema Operativo

Integracin de aplicaciones por telfono y sitios de Internet dedicados a la gestin de reconocimiento de voz (Voice Web Browsers).

Aparece el estndar VoiceXML.

Algunos de los mtodos usados son Bancos de Filtros, Codificacin Predictiva Lineal, Modelos Ocultos de Markov, Redes Neuronales Artificiales, Lgica Difusa, Sistema de reconocimiento hbrido, etc. Esta tecnologa debe se eficiente en cuanto a uso de recursos de la computadora por lo que se requiere mtodos y principios sofisticados, que en la actualidad ofrecen novedosos mtodos de inteligencia artificial, especficamente las redes neuronales artificiales se caracterizan por el baja usos de recursos

computacionales. En base a lo expresado, el problema de la presente investigacin se plantea de la siguiente forma: Es posible convertir el discurso emitido por las personas en texto realizando el reconocimiento de la voz aplicando redes neuronales artificiales? Plantendose como objetivo de Implementar el reconocimiento de voz mediante redes neuronales artificiales que permitan convertir el discurso hablado de las personas a texto, Para lo cual se: a. Realiza la captura de la voz de un discurso en un formato digital mediante la computadora. b. Estudia las caractersticas de la voz que conforma el discurso.

c. Realiza el reconocimiento de voz para convertir el discurso hablado en texto. Cabe destacar que la presente investigacin se justifica ya que en la actualidad se requiere de aplicaciones computacionales con interfaces inteligentes que sean capaces de operar mediante rdenes habladas, capturar dictados, etc. Estas aplicaciones requieren de un modulo que permita convertir el discurso hablado en texto escrito. Uno de los mtodos para lograr la conversin, es realizar reconocimiento de voz aplicando redes neuronales artificiales. En este contexto la presente investigacin hace un gran aporte tecnolgico ya que permitir implementar las aplicaciones que requieran capturar en forma escrita el discurso hablado por las personas. 3. MARCO TERICO Para convertir el discurso hablado a texto escrito es necesario capturar el discurso mediante un micrfono conectado a una computadora y guardarlo en el disco duro en forma de archivo utilizando un aplicacin en un formato que sea fcil de manipular para lo cual se usa WAV (APNDICE A). Los fonemas emitidos durante un discurso hablado forman seales, (APNDICE A) en donde se pueden apreciar separados: por silencios los fonemas y por silencios mas grandes las palabras.Esto se puede utilizar para separar los fonemas y palabras. Para reconocer los fonemas se aplica redes neuronales artificiales (JANG 2007) de perceptrones que son muy eficientes para reconocer formas.

El pre procesamiento de imgenes consiste en la obtencin de los pixeles de la imagen, binarizacin y expansin/reduccin se utilizan algoritmos implementados en un programa en Visual C++. La fase de expansin/reduccin permite estandarizar el tamao de la imagen a uno predeterminado ya que la red neuronal tiene un nmero predefinido de entradas. El aprendizaje de la red neuronal consiste en ajustar los pesos de las entradas de cada una de las neuronas, aplicando un mtodo de backpropagation modificado, el cual se basa en un mtodo heurstico computacional, que modifica los pesos que influyen en la salida correspondiente. El funcionamiento del sistema consiste en realizar el pre - procesamiento de la imagen de la voz, y realizar el algoritmo de clculo de la red, el cual consiste en calcular la sumatoria de los productos de las entradas de cada neurona, pasar por la funcin de activacin y propagar el resultado hacia delante hasta llegar a la capa de salida. Este algoritmo esta implementado en Visual C++. El tiempo de reconocimiento siempre es el mismo y no es afectado por el tipo de datos que se ingresen al sistema. El discurso genera un secuencia de fonemas en el tiempo (VER APENDICE B) los cuales son reconocidos por un conjunto de redes neuronales artificiales que se activan en una secuencia de acuerdo a la aparicin de fonemas en el tiempo mientras una persona habla una secuencia de palabras que conforman las frases para comunicarse. Esta activacin en secuencia de las diversas redes se utiliza para escribir el resultado en un archivo de texto.

4. MATERIALES Y METODOS 4.1. El Universo.- Son todas las organizaciones estatales y privadas donde se necesiten aplicaciones que utilicen el modulo de conversin de discurso hablado a texto escrito. 4.2. Tcnicas de recopilacin de datos.- La presente investigacin es de tipo tecnolgica experimental, en la cual se utilizo las siguientes tcnicas de recopilacin de datos: Exploracin conceptual y experimental para determinar la mejor herramienta para capturar la voz del discurso hablado y guardarlo en forma de archivo de sonido. Exploracin conceptual y experimental para determinar los fonemas que conforman del lenguaje espaol hablado. Exploracin conceptual y experimental determinar las caractersticas de la voz emitiendo los fonemas. Exploracin conceptual y experimental para determinar las herramientas tecnolgicas de programacin para implementar la posible solucin al problema planteado en la presente investigacin. Para la contrastacin de la hiptesis se utiliza resultados de la implementacin experimental de un prototipo que permite verificar la conversin de los fonemas en texto.

4.3.

Tcnicas estadsticas.- La presente investigacin no requiere la aplicacin de tcnicas estadsticas ya que el reconocimiento de voz no es un proceso estocstico. Cabe destacar que ninguna de las variables influyentes en la presente investigacin, tienen un comportamiento estocstico, excluyendo de esta forma la aplicacin de tcnicas estadsticas.

4.4.

Materiales.- Para la realizacin del experimento es necesario los siguientes materiales: Computadora Core 2 DUO: Disco duro de 250 GB; RAM 2 GB; monitor; teclado; o cualquier equipo superior. Micrfono para capturar el sonido. Software de captura de sonidos. Sistema operativo Microsoft Windows. Lenguaje de programacin Microsoft Visual C++. Archivos WAV con los fonemas grabados por distintas personas.

4.5.

Procedimiento.- Para ejecutar el experimento se debe: Copiar el cdigo fuente en la computadora con Visual C++ 6.00 en el disco C desde la carpeta /voz del CD. Ejecutar el programa con Visual C++ 6.00. Hacer el proceso de aprendizaje de fonemas con el programa de aprendizaje (APNDICE D).

Verificar

el

reconocimiento

de

fonemas

con

el

programa

de

reconocimiento (APNDICE E). 5. RESULTADOS Mediante un micrfono conectado a una computadora y la aplicacin grabadora de sonidos de Windows, se capturo fonemas en formato WAV. Utilizando el prototipo de programa en Visual C++ 6.00 (APNDICE C) que lee los datos de acuerdo al formato WAV (APNDICE A) se construyo las imgenes de la seal de sonido captada para cada fonema (APNDICE B) en los archivos WAV. Estas imgenes nos permiti determinar, que cada fonema generaba una seal semejante de diferente frecuencia, que depende de el tono de emisin del fonema, es decir si es agudo la frecuencia es mayor o cuando es grave la frecuencia se reduce. En base a que la forma es la misma y solo difiere en la frecuencia

entonces se opto por aplicar un red neuronal de perceptrones (JANG 1997) que nos permite reconocer formas, con facilidad para reconocer un fonema, salvo que se tiene que hacer un estiramiento o encogimiento de la imagen para lograr una forma estndar de cada fonema. Utilizando el prototipo de programa en Visual C++ 6.00 (APNDICE D) se realizo el proceso de aprendizaje de la red neuronal artificial para las imgenes generadas por las cinco vocales (APNDICE B). Y se comprob el reconocimiento del

fonema con el prototipo en Visual C++ (APNDICE E). De esta forma la presente investigacin ha permitido comprobar que utilizando redes neuronales artificiales es posible reconocer los fonemas que conforman el

10

lenguaje espaol los cuales a su vez forman palabras que conforman un discurso hablado, al ser reconocidos estos fonemas se pueden escribir la secuencia de letras reconocidas. El resultado de la presente investigacin genera la experiencia cientfica y tecnolgica en la implementacin de sistemas de reconocimiento de voz mediante redes neuronales artificiales en un lenguaje de programacin comn como es el Visual C++ y lo mas importante es que se ha obtenido los algoritmos de implementacin. Los resultados obtenidos durante la presente investigacin demuestran la hiptesis planteada. 6. DISCUSIN Si bien muchas empresas de pases desarrollados ofrecen aplicaciones de reconocimiento de voz pero no existen aplicaciones de uso masivo, que integren los sistemas operativos de las computadoras o sistemas en general y por otro lado son aplicaciones cerradas donde no es posible saber cmo han sido realizadas lo que nos dificulta la aplicacin generalizada en sistemas computacionales. En esta investigacin se planteo resolver este problema de reconocimiento de voz utilizando redes neuronales artificiales logrando obtener y probar el mtodo para implementar el reconocimiento de voz en cualquier lenguaje de programacin. De esta forma en la presente investigacin se ha logrado cumplir con el objetivo de implementar el reconocimiento de voz aplicando redes neuronales artificiales con herramientas bsicas de programacin como es el Visual C++ y puede ser

11

desplazado a cualquier tipo de lenguaje de programacin que tenga la posibilidad de manejo de archivos y matrices, de esta forma no es necesario la adquisicin de costosas libreras desarrollada para tales fines, logrando el desarrollo tecnolgico en esta rea. Complementndose como un gran beneficio que ha sido implementado utilizando las redes neuronales que requieren un bajo procesamiento, lo cual permite implementar el sistema en computadoras personales de bajo costo lo que hace posible la utilizacin de esta alta tecnologa, y da acceso a organizaciones y empresas con bajos recursos. 7. REFERENCIAS 7.1. BATES, JON. TOMPKINS, TIM. microsoft Visual C++ 6, Madrid: Prentice Hall Iberia S.R.L. 1ra, 1999. 7.2. CEBALLOS, FCO. JAVIER. Microsoft Visual C++ 6 Programacin Avanzada en Win32, Mxico: Alfaomega grupo editor S.A. 2da, 1999. 7.3. Fayin, L. Wechsler, H. Open Set Face Recognition Using Transduction. IEEE Transactions on Pattern Analysis and Machine Intelligence, November 2005, v.27 n.11, p.1686-1697. 7.4. JANG, J. -S. R. SUN, C. T. MIZUTAMI, E. Neuro Fuzzy and Soft

Computing A Computational Approach to Learning and Machine Intelligence, Upper Saddle River: Pretice Hall INC., 1ra, 1997. 7.5. NILS, J. NILSON. Inteligencia artificial Un nueva sntesis, Madrid: McGrawHill/Interamericana de Espaa S.A.U., 1ra, 2000.

12

7.6.

OROPEZA RODRGUEZ J. Algoritmos y Mtodos para el Reconocimiento de Voz en Espaol Mediante Slabas. Mexico, Computacin y Sistemas Vol. 9 Nm. 3, pp. 270-286, 2006.

7.7.

Rowley, H. Baluja, S. Kanade T. Neural Network-Based Face Detection. IEEE Transactions on Pattern Analysis and Machine Intelligence, January, 1998, Vol. 20, No. 1, pp. 23-38.

7.8.

STUART, RUSSELL. PETER, NORVING. Inteligencia artificial Un enfoque moderno, Mxico: Pretice Hall Hispanoamerica S.A., 1ra, 1996.

13

8. APNDICE APNDICE A. Especificacin de formato wave. Descripcin.- El formato wave es nativo de Windows y sirve para almacenar datos de audio y es usado por la mayora de aplicaciones de audio. Estructura del archivo wave.- Los archivos wave usan el estndar RIFF, que consisten en almacenamiento de datos de audio en porciones separadas que

contienen su propia cabecera y datos. La cabecera de la porcin contiene el tipo y el tamao de datos. Cabecera del archivo wave.Los primeros 8 bytes contiene el identificador de

porcin y el tamao de los datos que es igual al tamao de archivo menos 8 bytes. Offset Size Description 0x00 0x04 0x08 0x10 4 4 4 Chunk ID Value "RIFF" (0x52494646)

Chunk Data Size (file size) - 8 RIFF Type "WAVE" (0x57415645) Wave chunks

Formato de la porcin.- El formato contiene informacin sobre cmo est almacenado los datos y como deben ser reproducido incluyendo el formato de compresin, numero de canales, periodo de muestreo, bits por muestreo y otros. Offset Size Description Value

14

0x00 0x04 0x08 0x0a 0x0c 0x10 0x14 0x16

4 4 2 2 4 4 2 2

Chunk ID Chunk Data Size Compression code Number of channels Sample rate

"fmt " (0x666D7420) 16 + extra format bytes 1 - 65,535 1 - 65,535 1 - 0xFFFFFFFF

Average bytes per second 1 - 0xFFFFFFFF Block align 1 - 65,535

Significant bits per sample 2 - 65,535

0x18 0x1a

Extra format bytes

0 - 65,535

Extra format bytes *

Cdigos de compresin Code 0 (0x0000) 1 (0x0001) 2 (0x0002) Description Unknown PCM/uncompressed Microsoft ADPCM

15

6 (0x0006) 7 (0x0007) 17 (0x0011) 20 (0x0016) 49 (0x0031) 64 (0x0040) 80 (0x0050)

ITU G.711 a-law ITU G.711 -law IMA ADPCM ITU G.723 ADPCM (Yamaha) GSM 6.10 ITU G.721 ADPCM MPEG

65,536 (0xFFFF) Experimental

Datos de audio.- Contiene los datos de audio de cada muestra que debe ser decodificada d acuerdo a mtodo de compresin especificado en la cabecera. Offset Length Type 0x00 0x04 0x08 4 4 Description Value "data" (0x64617461) depends on sample length and compression sample data

char[4] chunk ID dword chunk size

16

APNDICE B. IMGENES DE FONEMAS (Fuente: Elaboracin propia)

Letra a aguda

Letra a grave

Letra e

17

Palabra Papa

Frase Hola Papa

18

APNDICE C. CDIGO FUENTE PARA LECTURA DE DATOS DE ARCHIVO WAV DE LOS FONEMAS (Fuente: Elaboracin propia)
x=fopen("o.wav","rb"); y=fopen("data.txt", "w"); if(!x){ exit(0); } else { fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "ChunkID : %x\n", son); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "ChunkSize : %d\n", son); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "Format : %x\n", son); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "Subchunk1ID : %x\n", son); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "Subchunk1Size : %u\n", son); fread(&faudio, sizeof(unsigned short int), 1, x); fprintf(y, "AudioFormat : %u\n", faudio); fread(&canales, sizeof(unsigned short int), 1, x); fprintf(y, "NumChannels : %u\n", canales); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "SampleRate : %u\n", son); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "ByteRate : %u\n", son); fread(&canales, sizeof(unsigned short int), 1, x); fprintf(y, "BlockAlign : %u\n", canales); fread(&canales, sizeof(unsigned short int), 1, x); fprintf(y, "BitsPerSample : %u\n", canales); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "Subchunk2ID : %u\n", son); fread(&son, sizeof(unsigned long), 1, x); fprintf(y, "Subchunk2Size : %d\n", son); fprintf(y, "Datos : \n"); datson=0; datsona=0; muestra=0; muestraa=0; cmuestra=0; do{ cmuestra++; fread(&datson, sizeof(unsigned short int), 1, x); if ((cmuestra>=inigraf) & (cmuestra<=fingraf)){ muestra++; pDC->MoveTo(xc1+exe*muestraa,yc1-eye*datsona); pDC->LineTo(xc1+exe*muestra,yc1-eye*datson); muestraa=muestra; datsona=datson; } fprintf(y, "Datos : %d\n", datson); }while (!feof(x)); fclose(x); fclose(y); }

APNDICE D. CDIGO FUENTE DE APRENDIZAJE DE LA RED NEURONAL ARTIFICIAL (Fuente: Elaboracin propia)
/* Definicion de la estructura de la red*/ sred[0]=4; sred[1]=20; sred[2]=40; sred[3]=20; sred[4]=1; int ir=0; for (int j=1;j<=sred[0];j++){ if (j==1){ for (int k=0;k<sred[j];k++){ rna[ir].m=(int)ancho*alto; rna[ir].capa=j; for (int p=0;p<rna[ir].m;p++){ rna[ir].peso[p]=rand()*0.000001; } rna[ir].k=1; rna[ir].u=6000; ir++; } } else{ for (int k=0;k<sred[j];k++){ rna[ir].m=sred[j-1]; rna[ir].capa=j; for (int p=0;p<rna[ir].m;p++){ rna[ir].peso[p]=rand()*0.000001; } rna[ir].k=1; rna[ir].u=6000; ir++; } } } int nred=0; for (int j=1;j<=sred[0];j++){ nred=nred+sred[j]; } fprintf(r,"\n\nEstrucutra de la Red\n\n"); fprintf(r,"Numero de neuronas de la red=%d\n",nred); for (int j=0;j<nred;j++){ fprintf(r,"rna[%d].m=%d : rna[%d].capa=%d : rna[%d].k=%f\n",j,rna[j].m,j,rna[j].capa,j,rna[j].k); } /* Aprendizaje */ /* Calcular la red */ float res=CalculoRed(nred); fprintf(r,"\nResultado=%f\n",res); fprintf(r,"\nm=%d\n",rna[0].m); fprintf(r,"\nu=%f\n",rna[0].u); int ne=0; float AP=0.005; float ka=0.000001; float na=0;

20

float error=0; float res1=0; unsigned int ni=0; unsigned int nia=0; float exe=dx/fx; float eye=dy/pmax; fprintf(r,"\nexe=%f\n",exe); fprintf(r,"\neye=%f\n",eye); pDC->MoveTo(xc1,yc1-eye*rna[nred-1].u); pDC->LineTo(xc1+exe*fx,yc1-eye*rna[nred-1].u); pOldPen=pDC->SelectObject(&myPen1); do{ for (int j=0;j<nred;j++){ res=CalculoRed(nred); if (res<rna[nred-1].u){ error=rna[nred-1].u+100-res; if (rna[j].capa==1){ for (ne=0;ne<rna[j].m;ne++){ if (e[ne]>0){ rna[j].peso[ne]=rna[j].peso[ne]+error*ka*e[ne]; } ni++; } } else{ for (ne=0;ne<rna[j].m;ne++){ rna[j].peso[ne]=rna[j].peso[ne]+error*ka; ni++; } } } pDC->MoveTo(xc1+exe*nia,yc1-eye*na); pDC->LineTo(xc1+exe*ni,yc1-eye*res); nia=ni; na=res; } }while (res<rna[nred-1].u); for (int j=0;j<nred;j++){ fprintf(r,"rna[%d].m=%d : rna[%d].capa=%d : rna[%d].k=%f\n",j,rna[j].m,j,rna[j].capa,j,rna[j].k); for (int pp=0;pp<rna[j].m;pp++){ fprintf(r,"%f - ",rna[j].peso[pp]); } fprintf(r,"\n\n"); } pDC->TextOut(600,300,"Fin de aprendizaje"); fclose(r);

21

APNDICE E. CDIGO FUENTE DE FUNCIONAMIENTO RED NEURONAL

ARTIFICIAL (fuente: Elaboracin propia).


sred[0]=4; sred[1]=20; sred[2]=40; sred[3]=20; sred[4]=1; arna = fopen("red.dat","w"); fread(rna,sizeof(rna),1,arna); fclose(arna); int nred=0; for (int j=1;j<=sred[0];j++){ nred=nred+sred[j]; } /* Calcular la red */ float res=0;

arna = fopen("red.dat","w"); fwrite(rna,sizeof(rna),1,arna); fclose(arna); res=CalculoRed(nred); if (res<rna[nred-1].u){ pDC->TextOut(600,300,"No reconoce el fonema"); } else{ pDC->TextOut(600,300,"Si reconoce el fonema") }

float CalculoRed(int nred){ for (int n=0;n<nred;n++){ if (rna[n].capa==1){ rna[n].n=0; for (int ne=0; ne<rna[n].m;ne++){ rna[n].n=rna[n].n+e[ne]*rna[n].peso[ne]; } rna[n].a=rna[n].n*rna[n].k; } else{ int ni=0; for (int cc=1;cc<rna[n].capa-1;cc++){ ni=ni+sred[cc]; } rna[n].n=0; for (int ne=0;ne<rna[n].m;ne++){ rna[n].n=rna[n].n+rna[n].peso[ne]*rna[ni].a; ni++; } rna[n].a=rna[n].n*rna[n].k; } } return rna[nred-1].a; }

22