econocimiento de voz usando htk - …bibing.us.es/proyectos/abreproy/11529/fichero/...para la...

13
1 Tratamiento Digital de la Voz PRÁCTICA: RECONOCIMIENTO DE VOZ USANDO HTK 1 REQUISITOS Y PREPARACIÓN 1.1 – Introducción Vamos a realizar un reconocedor de voz que transcriba las secuencias de números que le digamos. Estará basado en Modelos Ocultos de Markov, que se implementarán mediante la aplicación HTK. 1.2 – Requisitos previos Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono configurado y altavoces o auriculares. También deberás disponer de los ejecutables de HTK 3.3 o superior, que puede obtenerse de http://htk.eng.cam.ac.uk/ previo registro, y el archivo preparado para la práctica que se puede descargar de la página de la asignatura. 1.3 – Preparación del entorno de trabajo 1 – Copia la carpeta HTK con todo su contenido al directorio donde desees trabajar, por ejemplo, C:\HTK\. 2 – Crea la siguiente estructura de directorios: Figura 1. Estructura de directorios.

Upload: others

Post on 29-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

1

Tratamiento Digital de la Voz

PRÁCTICA:

RECONOCIMIENTO DE VOZ USANDO HTK

1 – REQUISITOS Y PREPARACIÓN

1.1 – Introducción

Vamos a realizar un reconocedor de voz que transcriba las secuencias de números que le

digamos. Estará basado en Modelos Ocultos de Markov, que se implementarán mediante la

aplicación HTK.

1.2 – Requisitos previos

Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

configurado y altavoces o auriculares. También deberás disponer de los ejecutables de HTK 3.3 o

superior, que puede obtenerse de http://htk.eng.cam.ac.uk/ previo registro, y el archivo

preparado para la práctica que se puede descargar de la página de la asignatura.

1.3 – Preparación del entorno de trabajo

1 – Copia la carpeta HTK con todo su contenido al directorio donde desees trabajar, por ejemplo,

C:\HTK\.

2 – Crea la siguiente estructura de directorios:

Figura 1. Estructura de directorios.

Page 2: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

2

3 – Baja el archivo de la página de la asignatura, que contiene algunos archivos ya preparados que

ahorrarán al usuario mucho tiempo grabando y transcribiendo.

4 – Almacena los archivos .sig (de la carpeta sig) en HTK\datos\sig y los archivos .lab

(de la carpeta lab) en HTK\datos\lab. Estos son archivos de voz ya grabados y sus

transcripciones.

5 – Almacena el archivo analisis.conf en HTK\analisis\. Este archivo contiene la

configuración necesaria para el analisis de los datos de entrada.

6 – Almacena los archivos hmm_x (de la carpeta proto) en la carpeta HTK\modelo\proto,

donde x es una palabra. Estos archivos contienen la definición y estructura de los HMMs que

representan las palabras que reconoceremos. Puedes abrirlos con un editor de texto y observar

que sólo difieren en la cabecera, ~h “x”.

7 – Almacena el archivo lista.txt en la carpeta HTK\datos\. Simplemente es una lista con

la correspondencia entre las señales de voz grabadas y sus archivos de coeficientes MFCC (que

son los que realmente se usan en reconocimiento).

8 – Almacena el archivo entrenamiento.txt en la carpeta HTK\entrenamiento\. Es

una lista con los archivos que usaremos para entrenar los modelos.

2 – DESARROLLO DE LA PRÁCTICA

2.1 – Grabación y transcripción del corpus de entrenamiento

9 – Abre la línea de comandos de MS-DOS. Para ello, usa Inicio -> Ejecutar -> Escribe cmd y pulsa

Enter.

10 – Accede al directorio de trabajo, por ejemplo C:\HTK\. Todos los comandos de la práctica se

ejecutarán en ese directorio. Puedes retroceder usando cd .. en la estructura de directorios.

Figura 2. Proceso de grabación y etiquetado de las secuencias de entrenamiento.

11 – Ejecuta el siguiente comando:

HSLab a.sig

Aparecerá la interfaz gráfica de HSLAB:

Page 3: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

3

Figura 3. Interfaz HSLAB.

12 – Pulsa rec para comenzar y stop para parar la grabación. Graba tu voz contando de cero a

nueve (una cifra por segundo), pronunciando bien los números y dejando algo de silencio entre

ellos. También deja un segundo de silencio al principio y otro al final.

13 – Aparecerá la forma de onda grabada. Pulsa sobre un punto de la grabación, arrastra el ratón

hasta otro punto y suéltalo. Se mostrará la zona intermedia marcada. Si lo necesitas, pulsa play

para oír la forma de onda en esa zona por los altavoces.

14 - Pulsa Labelas, escribe un nombre como muestra la figura 4 y pulsa Enter. Esto etiquetará la

porción de voz para que el reconocedor sepa qué se ha dicho.

Page 4: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

4

Figura 4. Etiquetando la forma de onda

15 – Repite el proceso para las cifras de cero a nueve, y para los silencios inicial y final

(etiquetados con s). No puedes usar números para las etiquetas. Debe quedar algo parecido a lo

que muestra la figura 5.

16 – Pulsa Save y Enter. Luego puedes salir pulsando Quit.

Figura 5. Secuencia de entrenamiento completamente etiquetada.

Page 5: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

5

17 – En el directorio de trabajo, C:\HTK\, aparecerán dos archivos: el que contiene la forma de

onda (a_0.sig) y el que contiene las etiquetas (a_0.lab). Renómbralos para que se llamen

7a.sig y 7a.lab y almacénalos en HTK\datos\sig\ y HTK\datos\lab,

respectivamente. Acabas de añadir una secuencia más al corpus de entrenamiento del

reconocedor, con lo que funcionará mejor.

Nota: si ya había archivos llamados a_0.sig y a_0.lab en el directorio de trabajo, los archivos

de salida se llamarán a_1.sig y a_1.lab. Si estos también existían, los archivos se volverán a

llamar a_0.sig y a_0.lab, sobrescribiendo los originales. Por esto hay que hacer el cambio de

nombre tras cada grabación y etiquetado.

18 – Repite los pasos 11-17 tres veces más, hasta disponer de las cuatro grabaciones 7a, 7aa, 7b,

7bb y sus correspondientes etiquetas. En los archivos 7a y 7aa debes haberte grabado contando

de cero a nueve (en orden creciente), y en los archivos 7a y 7bb contando de nueve a cero (en

orden decreciente).

2.2 – Análisis acústico

Figura 6. Proceso de conversión de los datos de entrenamiento.

19 – Añade cuatro líneas al archivo datos\lista.txt en las cuales especifiques la conversión

entre el archivo de voz y el vector de coeficientes.

Contenido de lista.txt

datos/sig/1a.sig datos/mfcc/1a.mfcc

datos/sig/1aa.sig datos/mfcc/1aa.mfcc

datos/sig/1b.sig datos/mfcc/1b.mfcc

datos/sig/1bb.sig datos/mfcc/1bb.mfcc

datos/sig/2a.sig datos/mfcc/2a.mfcc

(…) (…)

datos/sig/6aa.sig datos/mfcc/6aa.mfcc

datos/sig/6b.sig datos/mfcc/6b.mfcc

datos/sig/6bb.sig datos/mfcc/6bb.mfcc

datos/sig/7a.sig datos/mfcc/7a.mfcc

datos/sig/7aa.sig datos/mfcc/7aa.mfcc

datos/sig/7b.sig datos/mfcc/7b.mfcc

datos/sig/7bb.sig datos/mfcc/7bb.mfcc

Page 6: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

6

20 – Edita el archivo de configuración analisis\analisis.conf con un editor de texto.

Ajusta la duración de la ventana a 25 mseg y el coeficiente de pre-énfasis a 0 ' 97 .

21 – Para convertir las señales de voz en vectores de coeficientes MFCC, que son los que se usan

en reconocimiento, ejecuta el comando:

HCopy -C analisis\analisis.conf -S datos\lista.txt

La carpeta datos\mfcc se ha llenado con vectores de coeficientes MFCC, que usaremos en el

reconocimiento.

2.3 – Definición de los HMMs

...

Figura 7. Topología elegida para los HMM.

22 – Abre el archivo de modelo\proto\hmm_s con un editor de texto. Su contenido describe

el HMM asociado al silencio, y es el siguiente:

Contenido de analisis.conf

SOURCEFORMAT = HTK # Formato de los archivos de voz

TARGETKIND = MFCC_0_D_A # Coeficientes a usar

WINDOWSIZE = 200000.0 # 20 mseg como longitud de trama

TARGETRATE = 100000.0 # 10 mseg como periodicidad entre tramas

NUMCEPS = 12 # Número de coeficientes MFCC

USEHAMMING = T # Uso de la ventana de Hamming

PREEMCOEF = 0.90 # Coeficiente de pre-énfasis

NUMCHANS = 26 # Número de canales del banco de filtros

CEPLIFTER = 22 # Longitud del liftering en cepstrum

Page 7: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

7

Contenido de hmm_s

~o <VecSize> 39 <MFCC_0_D_A>

~h "s"

<BeginHMM>

<NumStates> 17

<State> 2

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 3

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 4

(…)

<State> 15

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0

<State> 16

<Mean> 39

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0

<Variance> 39

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

1.0 1.0 1.0 1.0 1.0 1.0 1.0

<TransP> 17

0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0.3 0.3 0.0 0.0 0.0 0.0 0.0

Page 8: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

8

23 - Como puede verse en la figura 7, el estado 1 es transitorio y de él sólo se puede ir a los dos

siguientes. Modifica la matriz de probabilidades de transición para que se cumpla esto, es decir:

que desde el estado 1 sea imposible volver a sí mismo, pero las transiciones a los dos estados

posteriores sigan siendo equiprobables. Toda la fila de la matriz debe sumar 1.

El resto de archivos de definición tienen sus matrices bien implementadas.

2.4 – Entrenamiento de los modelos

Figura 8. Proceso completo de entrenamiento. Tras la inicialización, se pasa a un proceso iterativo

de refinamiento del modelo. Extraído de [MOREAU].

24 – Abre el archivo entrenamiento\entrenamiento.txt con un editor de texto. Añade

a la lista los vectores de coeficientes MFCC que creaste tras la grabación.

Contenido de entrenamiento.txt

datos/mfcc/1a.mfcc

datos/mfcc/1aa.mfcc

datos/mfcc/1b.mfcc

datos/mfcc/1bb.mfcc

datos/mfcc/2a.mfcc

(…)

datos/mfcc/5bb.mfcc

datos/mfcc/6a.mfcc

datos/mfcc/6aa.mfcc

datos/mfcc/6b.mfcc

datos/mfcc/6bb.mfcc

datos/mfcc/7a.mfcc

datos/mfcc/7aa.mfcc

datos/mfcc/7b.mfcc

datos/mfcc/7bb.mfcc

Page 9: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

9

– Inicialización

25 – Ejecuta el comando:

HInit -S entrenamiento\entrenamiento.txt -M modelo\hmm0 -H

modelo\proto\hmm_s -l s -L datos\lab\ s

Esto inicializa (mediante alineamiento de Viterbi) el HMM que modela el silencio.

Nota: antes de la s final, debe haber un espacio.

Figura 9. Inicialización de los modelos con HINIT.

26 – Repite el comando para las diez cifras (de cero a nueve). Por ejemplo, para la cifra cero, sería:

HInit -S entrenamiento\entrenamiento.txt -M modelo\hmm0 -H

modelo\proto\hmm_cero -l cero -L datos\lab\ cero

Puedes crear un archivo .bat que contenga todos los comandos:

Contenido de INICIALIZA.bat

HINIT -S entrenamiento/entrenamiento.txt -M modelo/hmm0 -H

modelo/proto/hmm_s -l s -L datos/lab/ s

HINIT -S entrenamiento/entrenamiento.txt -M modelo/hmm0 -H

modelo/proto/hmm_cero -l cero -L datos/lab/ cero

(…)

HINIT -S entrenamiento/entrenamiento.txt -M modelo/hmm0 -H

modelo/proto/hmm_ocho -l ocho -L datos/lab/ ocho

HINIT -S entrenamiento/entrenamiento.txt -M modelo/hmm0 -H

modelo/proto/hmm_nueve -l nueve -L datos/lab/ nueve

Page 10: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

10

Los archivos de definición inicializados puedes encontrarlos en modelo\hmm0 (carpeta que

antes estaba vacía).

– Entrenamiento

27 – Para re-estimar los modelos, ejecuta:

HREST –T 1 -S entrenamiento/entrenamiento.txt -M modelo/hmm1

-v 2e-3 -H modelo/hmm0/s -l s -L datos/lab/ s

El algoritmo se detiene automáticamente. Aquí, -v 2e-003 es un límite inferior para la

varianza, que el algoritmo necesita para converger.

Figura 10. Proceso de re-estimación.

Puedes crear un archivo .bat, al igual que al inicializar los modelos, que contenga todos los

comandos de entrenamiento:

Contenido de REESTIMA.bat

HREST -S entrenamiento/entrenamiento.txt -M modelo/hmm1 -v 2e-003 -H

modelo/hmm0/hmm_s -l s -L datos/lab/ s

HREST -S entrenamiento/entrenamiento.txt -M modelo/hmm1 -v 2e-003 -H

modelo/hmm0/hmm_cero -l cero -L datos/lab/ cero

(…)

HREST -S entrenamiento/entrenamiento.txt -M modelo/hmm1 -v 2e-003 -H

modelo/hmm0/hmm_ocho -l ocho -L datos/lab/ ocho

HREST -S entrenamiento/entrenamiento.txt -M modelo/hmm1 -v 2e-003 -H

modelo/hmm0/hmm_nueve -l nueve -L datos/lab/ nueve

Page 11: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

11

2.5 – Definición de la gramática

28 – Crea el archivo gramatica.txt en la carpeta definicion\. Su contenido deberá ser el

siguiente:

Esto le indicará al reconocedor que debe esperar un silencio inicial, nueve cifras y un silencio final.

29 – Crea el archivo diccionario.txt en la carpeta definicion\. Su contenido deberá ser

el siguiente:

Este archivo le indica al reconocedor la relación entre las variables de gramática, lo que queremos

que muestre y los HMM definidos anteriormente.

Nota: No olvides incluir una nueva línea tras la última, para que ésta cuente.

30 – Ejecuta el siguiente comando para crear una red a partir del archivo de gramática:

HPARSE definicion\gramatica.txt definicion\red.slf

2.6 – Reconocimiento de voz en vivo

31 – Crea el archivo listahmm.txt en la carpeta definicion\. Su contenido deberá ser el

siguiente:

Contenido de gramatica.txt

$numero = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

( [.] $numero $numero $numero $numero $numero $numero

$numero $numero $numero [.] )

Contenido de diccionario.txt

0 [0] cero

1 [1] uno

2 [2] dos

3 [3] tres

4 [4] cuatro

5 [5] cinco

6 [6] seis

7 [7] siete

8 [8] ocho

9 [9] nueve

. [] s

Page 12: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

12

Este archivo simplemente lista los nombres de los HMMs que representan las palabras que

usaremos.

Nota: No olvides incluir una nueva línea tras la última, para que ésta cuente.

32 – En la carpeta configuracion\ haz una copia de analisis.conf y llámala

directin.conf. Ábrela con un editor de texto y añade los siguientes parámetros:

33 – Ejecuta el siguiente comando. Puedes crear un archivo .bat:

HVITE -C analisis\directin.conf -g -H modelo\hmm1\hmm_s -H

modelo\hmm1\hmm_cero -H modelo\hmm1\hmm_uno -H

modelo\hmm1\hmm_dos -H modelo\hmm1\hmm_tres -H

modelo\hmm1\hmm_cuatro -H modelo\hmm1\hmm_cinco -H

modelo\hmm1\hmm_seis -H modelo\hmm1\hmm_siete -H

modelo\hmm1\hmm_ocho -H modelo\hmm1\hmm_nueve -w

definicion\red.slf definicion\diccionario.txt

definicion\listahmm.txt

Nota: No olvides poner ninguno de los once HMMs que vamos a usar (silencio y cifras de cero a

nueve).

34 - Al ejecutarlo, aparecerá un indicador READY[1]> en la pantalla, indicando que comienza la

grabación en tiempo real. La grabación finalizará cuando pulsemos alguna tecla. En ese momento,

se muestra la transcripción reconocida por el sistema, tras lo que se mostrará un nuevo

READY[2]> esperando una nueva entrada. Prueba el reconocedor que has implementado.

Contenido de listahmm.txt

s

cero

uno

dos

tres

cuatro

cinco

seis

siete

ocho

nueve

Añadido en directin.conf

SOURCERATE = 625.0 # 16 kHz de freciencia de muestreo

SOURCEKIND = HAUDIO # Entrada directa de audio

AUDIOSIG = -1 # Reconocimiento controlado por teclado

Page 13: ECONOCIMIENTO DE VOZ USANDO HTK - …bibing.us.es/proyectos/abreproy/11529/fichero/...Para la realización de esta práctica necesitarás un ordenador con Windows y MS-DOS, micrófono

13

Figura 6.11. Reconocimiento en vivo.