Ir al contenido principal

Marcelino - Paso 9 - Fabricación de trifonemas a partir de monofonemas

Paso 9 - Fabricación de trifonemas a partir de monofonemas

  Fondo

  Trifonemas

    En el archivo dict que creó en el paso 2, la pronunciación de una palabra fue dada por una serie de fonemas (también llamados monofonemas, es decir, un solo fonema). Para generar un trifonema (es decir, un grupo de 3 fonema) declaramos los monofonemas. El fonema "L" (es decir, el fonema de la izquierda) precede al fonema "X" y el fonema "R" (es decir, el fonema de la derecha). El trifonema se declara en la forma "L-X + R".

    A continuación se muestra un ejemplo de conversión a una declaración trifónica de la palabra "TRADUCCION" (la primera línea muestra la declaración de monofonemas "monophone" y la segunda línea muestra la declaración de trifonema "triphone"):

      TRADUCCION [TRADUCCION] t r a d u k z i o n
      TRADUCCION [TRADUCCION] t+r t-r+a r-a+d a-d+u d-u+k u-k+z k-z+i z-i+o i-o+n o-n

    (Tenga en cuenta que también podemos obtener bifonemas (es decir, un grupo de 2 fonemas) al principio y al final de la palabra.)

    Por lo tanto, estamos avanzando hacia un nivel mejorado de precisión de reconocimiento. Hasta ahora, hemos creado un modelo monofónico acústico, que se puede utilizar con Julius. Pero con este modelo, no estamos mirando el "contexto" del monófono. El SRE está intentando emparejar el sonido que ha oído a un solo fonema - un solo sonido.

    Con un modelo acústico trifónico, estamos esencialmente buscando un monofonema en el "contexto" de otros monofonemas - es decir, el inmediatamente antes y el inmediatamente después (si existen - puede ser el principio o el final de la palabra). Esto mejora considerablemente la precisión del reconocimiento, ya que el SRE está buscando combinar una secuencia específica de 3 sonidos juntos (un trifonema), en lugar de un solo sonido. Esto es como usar una búsqueda de 3 palabras de Google en lugar de una sola palabra de búsqueda de Google - obtener resultados más precisos. Los trifonemas reducen la posibilidad de error causado por confundir un sonido con otro, porque ahora estamos buscando una secuencia distinta de 3 sonidos.

  Estados

    Hasta ahora, hemos pasado por alto qué modelos ocultos de markov (hmm) están diciendo que son esencialmente representaciones estadísticas de los fonemas que componen una palabra. Pero un hmm se compone de muchos "estados", y estos estados pueden ser compartidos (de la misma manera que los fonemas sp y sil ahora comparten su "estado" central después del paso 7). Estos estados agrupados o "atados" a veces se llaman senones.

    No tiene sentido compartir estados entre monofonemas, porque son muy diferentes. De lo contrario, ¿por qué definir el monofonema? El punto es que se desea que los diferentes sonidos sean modelados por separado, por lo que el motor de reconocimiento de voz puede distinguirlos.

    Sin embargo, cuando comienza a buscar trifonemas, cada uno con su propia definición hmm, comienza a obtener varias instancias de trifonemas con estados que son lo suficientemente similares como para que los datos puedan ser compartidos entre un grupo de trifonemas. Este proceso de compartir se llama "vinculación". Por lo tanto, podemos "atar" los estados de muchos hmms trifónicos para que compartan el mismo conjunto de parámetros. De esta manera, al reestimar estos nuevos parámetros ligados, se agrupan los datos de cada uno de los parámetros desatados originales para poder obtener una mejor estimación.

    Básicamente, no tenemos suficientes datos de voz para modelar todas las posibles combinaciones de trifonías contenidas en las palabras de nuestro conjunto de entrenamiento, por lo que "engañamos" y compartimos partes de los datos entre trifonemas similares para mejorar el reconocimiento.

  TUTORIAL

    Para convertir las transcripciones de monofonemas en el archivo aligned.mlf que creó en el paso 8 a un conjunto equivalente de transcripciones de trifonema, debe ejecutar el comando HLEd. HLEd se puede utilizar para generar una lista de todos los trifonemas para los cuales hay al menos un ejemplo en los datos de entrenamiento.

    Primero necesitas crear el script mktri.led:

      WB sp
      WB sil
      TC

      (como antes, notar la última linea en blanco)

    A continuación, ejecute el comando HLEd (editor de archivos de etiquetas) de la siguiente manera:

    Linux:

      ../soft/htk/HTKTools/HLEd -A -D -T 1 -n triphones1 -l '*' -i wintri.mlf mktri.led aligned.mlf

    Windows:

      ../soft/htk/HTKTools/HLEd -A -D -T 1 -n triphones1 -l * -i wintri.mlf mktri.led aligned.mlf

    Esto crea 2 archivos:

      - wintri.mlf (archivo de multi etiqueta de trifonema)
      - triphones1 (lista de trifonemas en su juego de entrenamiento)

    A continuación, descargue el script mktrihed.jl (https://raw.githubusercontent.com/VoxForge/develop/master/bin/mktrihed.jl) de julia en su carpeta 'voxforge/bin'

      wget https://raw.githubusercontent.com/VoxForge/develop/master/bin/mktrihed.jl

    y cree el archivo mktri.hed ejecutando:

      julia ../bin/mktrihed.jl monophones1 triphones1 mktri.hed

    Esto crea el archivo mktri.hed. Este archivo contiene un comando clon 'CL' seguido de una serie de comandos 'TI' para 'atar' HMMs para que compartan el mismo conjunto de parámetros. De esta manera, cuando reestimamos estos nuevos parámetros ligados (con HRest a continuación), los datos de cada uno de los parámetros desatados originales se agrupan para obtener una mejor estimación.

    A continuación, cree 3 carpetas más: hmm10-12

      mkdir hmm10 hmm11 hmm12

    A continuación, ejecute el comando HHEd:

    (HHEd es el editor HTK hmm definition y se utiliza principalmente para aplicar 'tyings' a través de parámetros HMM seleccionados).

      ../soft/htk/HTKTools/HHEd -A -D -T 1 -H hmm9/macros -H hmm9/hmmdefs -M hmm10 mktri.hed monophones1

    Los archivos creados por este comando son:

      - hmmdefs
      - macros

    Seguidamente ejecute HERest 2 veces más:

      ../soft/htk/HTKTools/HERest -A -D -T 1 -C config -I wintri.mlf -t 250.0 150.0 3000.0 -S train.scp -H hmm10/macros -H hmm10/hmmdefs -M hmm11 triphones1

    También recibirás muchas advertencias (-2331). Estos están ocurriendo porque no tenemos muchos datos de entrenamiento. Estos pueden ser ignorados con seguridad para este tutorial.

    Los archivos creados por este comando son:

      - hmmdefs
      - macros

    Y ejecutamos otra vez:

      ../soft/htk/HTKTools/HERest -A -D -T 1 -C config -I wintri.mlf -t 250.0 150.0 3000.0 -s stats -S train.scp -H hmm11/macros -H hmm11/hmmdefs -M hmm12 triphones1

    Los archivos creados por este comando son:

      - hmmdefs
      - macros
      - stats (archivo necesario para la agrupación de estado en el paso 10)