Capítulo 7: La segmentación automática de unidades.

Transcripción

Capítulo 7: La segmentación automática de unidades.
Capítulo 7
La segmentación automática de unidades
Capítulo 7: La segmentación automática de unidades.
7.1. Introducción.
En este capítulo se describen una serie de experimentos, que fueron llevados a
cabo de cara a realizar la segmentación de las frases componentes de la base de datos de
una manera automática. Estos experimentos se realizaron en colaboración con D. Juan
Manuel Montero y con D. Luis García Pérez (profesor y proyectando del Grupo de
Tecnología del Habla, respectivamente).
El objetivo de dichos experimentos, era el de evaluar la posibilidad de realizar la
segmentación de las frases componentes de la base de datos de una manera automática
(como ya se citó en el Capítulo 3, la segmentación consiste en delimitar mediante
etiquetas la posición de los fonemas dentro de las frases), restándose de este modo una
gran cantidad de trabajo para la elaboración de bases de datos compuestas por un gran
número de unidades. En efecto, debemos recordar que dicho proceso de segmentación
es realizado manualmente por el usuario (empleando la herramiente de edición PCV,
elaborada por el GTH), para lo cual éste debe escuchar una a una las frases, y colocar
las etiquetas que aislan cada uno de los fonemas dentro de las mismas.
Claramente, este procesado manual requiere una gran cantidad de tiempo y
además, en algunos casos, lleva asociado también errores. Estos errores pueden venir
derivados del cansancio que este trabajo implica, o en otros casos, de que al ser
realizada la segmentación por varias personas con el objetivo de reducir el volúmen de
trabajo, se producen errores de criterio en la segmentación (distinto criterio a la hora de
segmentar algunos fonemas) que llevan a una falta de uniformidad en la base de datos.
Algunos de dichos "errores" podrían ser corregidos mediante el etiquetado
automático, ya que por un lado no sería necesaria la edición manual para generar el
etiquetado (los desarrolladores se podrían centrar en otros aspectos), y por otro lado, al
ser realizado todo el marcado por un mismo programa, el criterio de segmentación de
unidades siempre será el mismo. Lógicamente, hay que pensar que se producirán
108
Capítulo 7
La segmentación automática de unidades
también errores de marcado, que seguramente serán mayores que en el caso de la
segmentación manual, hecho que puede quedar compensado por la considerable
reducción en el tiempo de procesado.
7.2. Descripción de los experimentos.
Para la realización de estos experimentos se empleó el sistema de
reconocimiento de voz de habla aislada desarrollado en el Grupo de Tecnología del
Habla, pudiéndose encontrar una descripción teórica del mismo en el Apéndice A de
este mismo trabajo. Hay que destacar el hecho de que se trata de un reconocedor de
palabras aisladas, aspecto que se ajusta bastante bien a nuestros objetivos (ya que
pretendemos "reconocer" una palabra dentro de una determinada frase-patrón).
Los parámetros fundamentales que emplea este reconocedor son los siguientes:
-
frecuencia de muestreo: 8 Khz .
-
desplazamiento de trama: 80 muestras (10 ms).
-
tamaño de trama: 200 muestras (25 ms).
-
coeficiente de pre-énfasis: 1.00.
-
parámetros empleados: 11 parámetros estáticos y 11 diferenciales.
-
tipos de parámetros: 10 MFCC + energía (extraídos de 17 bandas de
energía).
El alfabeto empleado por el reconocedor estaba compuesto por 28 alófonos y 1
silencio (no aparecen representados los silencios de las oclusivas):
0 ch
1a
2 'a
3e
4 'e
5i
6 'i
7o
8 'o
9u
10 'u
11 b
12 z
13 d
14 f
15 g
16 x
17 k
18 l
19 m
20 n
21 ny
22 p
23 rr
24 r
25 s
26 t
27 y
28 &
109
Capítulo 7
La segmentación automática de unidades
Se emplearon modelos semi-contínuos independientes del contexto, con
modelos de fonema de 3 estados. Para el modelado de los silencios inicial y final
también se emplearon 3 estados.
Para el entrenamiento del reconocedor se emplearon las frases utilizadas en la
base de datos de Natvox siguientes (voz femenina aplicada a dominio restringido):
-
frases 1, 2, 3, 4, 5, 6, 7, 17 y 19
En total se dispuso de un conjunto de 16.062 alófonos de cara al entrenamiento
del sistema. Hay que tener en cuenta, que por trabajar el reconocedor con una frecuencia
de muestreo de 8 Khz fue necesario convertir la frecuencia de muestreo de nuestras
frases de 32Khz a 8 Khz, para lo que se empleó el programa comercial de edición de
sonido Cool Edit.
Previamente a la realización del entrenamiento, fue necesario generar el
diccionario y la lista que iban a ser empleados, tanto en el entrenamiento del sistema,
como en la fase de segmentación. Para ello se emplearon una serie de programas que se
encargaban de crear dichos ficheros. La creación comenzaba haciendo una llamada al
fichero PROCESA.BAT:
for %frase in (@frases.dir) gosub :PROCESA
for %i in (*.dic) type %i >>lista.unf
edit lista.unf
quit
:PROCESA
for %i in (%DIR_PAR\%frase\originales\*.par) gosub :PROCESA1
return
:PROCESA1
for %j in (@DIR_TXT\%frase\originales\%@NAME[%i].txt gosub :PROCESA2
return
:PROCESA2
echo %j | perl sinespac.per > sinespac.dep
for %k in (@sinespac.dep) gosub :PROCESA3
:PROCESA3
perl gendic.per @%NAME[%i].lbl %k <%i >%@NAME[%i].dic
return
110
Capítulo 7
La segmentación automática de unidades
El programa iba recorriendo la lista contenida en frases.dir, en la cual se
encontraban las frases a ser procesadas (p.e. frase1, frase 2 ...) y para cada una de ellas
se iban tomando todos los ficheros de parámetros asociado a cada fichero concreto de la
frase (p.e. bv01001.par) y los ficheros de texto asociados a los mismos (p.e.
bv01001.txt), eliminándose los espacios de dicho fichero. Estos datos se le pasaban al
programa gendic.per que era el encargado de generar los diccionarios.
En el programa gendic.per en primer lugar se hacía una conversión de los datos
contenidos en el fichero *.PAR (relativos a la etiqueta LBO, dado que la posición de las
marcas que aparecía en dichos ficheros era relativa a las frases muestreadas a 32 Khz:
while ($_=<stdin>)
{
if (/LBO/)
{
s/\,//g;
@campos=split(/ /,$_,9999);
$etiquetas[$cont]=$campos[4];
if ($cont==0)
{
$etiqueta_inicial=$campos[1]/4;
}
$cont ++;
$etiqueta_final=$campos[3]/4;
}
}
Como se puede ver, el proceso que se llevaba a cabo era el de ir buscando las
líneas del fichero *.par que comenzasen por el patrón "LBO" cuyo formato genérico era
el siguiente:
LBO: pos_inic, pos_int, pos_fin, fonema
Se separaban los distintos campos de la línea (mediante la función split) y se
dividía la información contenida en las etiquetas correspondientes a la posición inicial y
final (en número de muestras) por 4 (para pasar de 32 Khz a 8 Khz)..
111
Capítulo 7
La segmentación automática de unidades
A continuación se tomaban las etiquetas y se hacía la conversión de algunos
fonemas (para adaptarse a nuestro alfabeto) y por último se hacía la codificación de los
fonemas componentes (pasar del fonema a su número correspondiente según la tabla
expuesta anteriormente). El resultado de todo este proceso era un diccionario (fichero
con extensión *.DIC), presentando estos ficheros un aspecto de la forma:
BV201.lbl 456 357 AkSesta 7 a k s 'e s t a 1 17 25 4 25 26 1
BV202.lbl 357 419 Acebo 5 a z 'e b o 1 12 4 11 7
BV203.lbl 357 443 Alentisque 9 a l e n t 'i s k e 1 18 3 20 26 6 25 17 3
BV204.lbl 374 464 AltoCampó 9 'a l t 'o k a m p 'o 2 18 26 7 17 1 19 22 8
.......
Por último, se generaba una lista (lista.unf) que contenía el nombre de los
diccionarios que habían sido generados).Una vez que se dispuso del diccionario, ya se
pudo proceder al entrenamiento del sistema. Hay que destacar que se generaron dos
codebooks (1 para los parámetros MFCC y otro para su derivada, DMFCC) utilizándose
un total de 256 centroides.
Durante la fase de test, el sistema de reconocimiento recibía como entrada,
además del fichero de muestras de la frase a segmentar (con la extensión *.PCM), un
fichero con la extensión *.LBL asociado a la misma frase. En este fichero, se daba
información al reconocedor sobre la posición dentro de la frase en la cual se encontraba
el fragmento que debía "reconocer" (hay que recordar que se trataba de frases
portadoras que contenían un determinado campo variable, que era lo que nos interesaba
segmentar). El formato típico de estos ficheros era el siguiente (es el mismo que el de
las líneas del fichero *.PAR):
LBO: 51832, 54796, 57761, ablanedo
112
Capítulo 7
La segmentación automática de unidades
Como se puede apreciar, en el fichero aparecen tres números. El primero de ellos
informa sobre la posición (en número de muestras) del comienzo de la cadena a
segmentar (reconocer), el segundo sobre la posición central (este dato no se emplea) y el
último de ellos proporciona la posición del final de la cadena (también en número de
muestras). Por último, también se pasa como argumento de entrada el valor de la cadena
a reconocer.
La salida que daba el reconocedor era un fichero de parámetros (con extensión
*.PAR) con el formato adecuado para el programa PCV (en realidad sólo generaba la
información sobre la posición de las etiquetas asociadas a los fonemas reconocidos). Un
ejemplo de fichero *.PAR generado automáticamente sería el siguiente:
LBO: 52080, 52080, 52720, a
LBO: 52720, 52720, 53200, b
LBO: 53200, 53200, 54000, l
LBO: 54000, 54000, 54720, a
LBO: 54720, 54720, 55360, n
LBO: 55360, 55360, 56240, 'e
LBO: 56240, 56240, 56800, d
LBO: 56800, 56800, 57760, o
7.3. Resultados del experimento.
Hay que destacar que para la realización del test se emplearon todos los datos de
que disponíamos, esto es, el mismo conjunto de 16062 alófonos que fue utilizado en el
entrenamiento del sistema.
En primer lugar citamos la tasa de reconocimiento obtenida por el sistema, cifra
que solamente tiene sentido con el objeto de evaluar si el funcionamiento del mismo es
correcto (ya que se han empleado los mismos datos en el reconocimiento que en el
entrenamiento). Los resultados obtenidos del reconocimiento fueron los siguientes:
113
Capítulo 7
La segmentación automática de unidades
Número de ficheros a reconocer: 1364.
Aciertos primer candidato: 1321 sobre 1364 (0.9685 %)
Aciertos segundo candidato: 1361 sobre 1364 (0.9978 %)
Aciertos tercer candidato: 1363 sobre 1364 (0.9993 %)
Aciertos cuarto candidato: 1364 sobre 1364 (100 %)
Investigando los fallos que había tenido el reconocedor, se pudo observar que
una gran parte de los mismos era debida a la existencia de distintas pronunciaciones
para un mismo fonema (p.e. d/z) no constituyendo por lo tanto errores en el
reconocimiento. Al final de este análisis se llegó a las siguientes cifras:
Aciertos primer candidato: 1358 sobre 1364 (99.5601 %)
Aciertos segundo candidato: 1361 sobre 1364 (99.7801 %)
Aciertos tercer candidato: 1361 sobre 1364 (99.7801 %)
Aciertos cuarto candidato: 1364 sobre 1364 (100.00 %)
En cuanto a los resultados de la segmentación automática, que era lo que
realmente queríamos evaluar, se consideraron como erróneas aquellas etiquetas en las
cuales la posición de la marca difería en más de 20 milisegundos con respecto de la
existente en el *.par que había sido marcado manualmente (hay que tener en cuenta, que
la resolución de nuestro sistema va a venir marcada por el desplazamiento de trama que
empleemos, no pudiendo nunca ser mayor que dicho desplazamiento, que en nuestro
caso es de 10 milisegundos). Con este umbral de 20 milisegundos se obtuvieron los
siguientes resultados:
Tasa de aciertos: 28.631 sobre 32126 marcas (89.1210 %)
Error medio cometido por marca: 8.9953 %
114

Documentos relacionados