Ir al contenido principal

Marcelino - Paso 2 - Diccionarios de Pronunciación

Paso 2 - Diccionarios de Pronunciación

BackGround - Diccionario fonéticamente equilibrado

  Por lo general, el primer paso en la construcción del Diccionario de Pronunciación es crear una lista ordenada de las palabras contenidas en su gramática, una por línea, con pronunciaciones (los fonemas que forman una palabra). Con nuestro ejemplo actual, es fácil crear una de inicio a mano (véase Diccionarios de pronunciación inicial (http://www.voxforge.org/home/dev/acousticmodels/linux/create/htkjulius/tutorial/data-prep/step-2/initial-pronunciation-dictionnary)).

  Sin embargo, para que HTK pueda compilar sus audio y transcripciones de voz en un modelo acústico, HTK requiere un diccionario de pronunciación fonéticamente balanceado con al menos 30-40 'oraciones' de 8-10 palabras cada una. Si su gramática tiene menos oraciones/palabras que esta (como lo hacemos en este tutorial), o si su gramática no está fonéticamente equilibrada (si algunos fonemas sólo ocurren una o dos veces) entonces necesitamos agregar palabras adicionales para asegurarnos de que tenemos 3-5 ocurrencias de cada fonema en nuestro Diccionarios de Pronunciación.

  Por lo tanto, para este tutorial, tendremos que añadir palabras adicionales a nuestro Diccionarios de Pronunciación para permitir que HTK compile un Modelo Acústico. Recuerde que solo estamos tratando de obtener el número mínimo de pronunciación que permitirán a HTK compilar. Crear un modelo acústico que produzca resultados de reconocimiento consistentes requiere muchas más entradas y audio de voz correspondiente.

TUTORIAL

  Instalar HTK:
    Hay que registrarse como usuario para poder descargar el SDK de HTK.
    Una vez realizado esto podemos descargar la última versión estable, en mi caso HTK-3.4.1.tar.gz
    Yo voy a poner este archivo en 'voxforge/soft' para construirlo desde ahí.
    Y empezamos con la instalacion:
      tar zxf HTK-3.4.1.tar.gz
      cd htk
      ./configure --prefix=/tmp
      make all
        [En ubuntu 16.04 tuve que instalar g++-multilib
          sudo apt-get update
          sudo apt-get install g++-multilib
        al hacer el make all]
        [Tanto en la RPi3B con Raspbian-PIXEL como en ubuntu 16.04 HTKTools me dio un error en el Makefile que solucione modificandolo así:
          mkinstalldir:
            if [ ! -d $(bindir) -a X_ = X_yes ] ; then mkdir -p $(bindir) ; fi
        es posible que produzca otro error porque antes de el 'if' debe haber un tabulado y no espacios, simplemente se borran los espacios antes del 'if' y se tabula. Al igual que en el Makefile dentro de la carpeta HLMTools, quitamos los espacios antes del 'if' de mkinstalldir y tabulamos.]
        [Otro error que me econtre en Ubuntu 16.04 fue el flag -lX11 del Makefile que solucione instalando libx11-dev tanto para 32bits como para 64bits:
          sudo apt-get install libx11-dev:i386 libx11-dev
        ]
    Con esto tenemos creadas las herramientas para HTK


  Para crear un diccionario de pronunciación en HTK, seguiremos estos pasos:

    - Crear un archivo prompts.txt - que es la lista de palabras que vamos a grabar en el siguiente paso.
    - Derivar un archivo wlist del archivo prompts.txt - el archivo wlist es una lista ordenada de las palabras únicas que aparecen en el archivo prompts.txt.
    - Crear el diccionario de pronunciación - que se hace agregando la información de la pronunciación a las palabras en wlist.

  Archivo prompts.txt

    Primero necesitamos crear un archivo de prompts.txt que incluya nuestras palabras de gramática y las palabras adicionales de diccionario necesarias para crear un diccionario fonéticamente equilibrado. Este archivo contiene básicamente la lista de palabras que deben grabarse y los nombres de los archivos de audio que se almacenarán las grabaciones, uno por línea. Hará estas grabaciones en el paso 3.

    Vaya a la carpeta 'voxforge/tutorial' que creó en su carpeta personal y cree un archivo llamado 'prompts.txt' que contenga lo siguiente:

      */muestra1 MARCA UNO DOS TRES CUATRO CINCO SEIS SIETE VILCHEZ NUEVE OH CERO
      */muestra2 MARCA UNO TRES CINCO SIETE NUEVE CERO DOS CUATRO SEIS OH
      */muestra3 MARCA CERO NUEVE SIETE CINCO TRES UNO SEIS CUATRO DOS
      */muestra4 MARCA UNO DOS DOS TRES TRES CUATRO CUATRO CINCO
      */muestra5 MARCA SEIS SEIS SIETE SIETE NUEVE NUEVE OH OH CERO CERO
      */muestra6 TELEFONO PACO PEREZ LLAMA PACO PEREZ
      */muestra7 TELEFONO PACO LLAMA TELEFONO DE PACO PEREZ LLAMA PEREZ
      */muestra8 TELEFONO TELEFONO PACO PACO LLAMA LLAMA PEREZ PEREZ
      */muestra9 MEDIDA COMIDA Y COMIDA MEDIDA
      */muestra10 QUEJAS REJAS AVION CAMION RUBICON
      */muestra11 HERMANA MANADA MANUAL KENYA SEMANA
      */muestra12 CORREA CODIGO RODRIGO ROMERO BORREGO CORDERO
      */muestra13 PUERTA PIERNA POZO AGATA AGOBIO ARMADA
      */muestra14 ABALON ABDOMINALES ABUSO BUZO BERZA
      */muestra15 ABONO ADORNO ALISAR AFECTAR EFECTO OFELIA
      */muestra16 ALCANZAR ACUPUNTURA ACTUAL AVENTURA OBSTRUYE OYE PAYASO
      */muestra17 ALGORITMO ALGUNA OTRA VERDE VENTA VENTANA
      */muestra18 BATALLA MESTALLA METAL DESAYUNO DESCALZO
      */muestra19 ROTO CORTO MUERTO DESEMPEÑO ENTRADAS MONTOYA MOYA NEOYORQUINO
      */muestra20 DICOTOMIA DISLEXIA ANOREXIA AXIOMA MARCHA MALTRECHA MARIACHI MEDIANOCHE
      */muestra21 BOBINA BOLONIA COLONIA ARMONIA ARMISTICIO
      */muestra22 COLECCION COLORACION COMBINACION COMERCIAL
      */muestra23 AGUJA BURBUJA BRUJA ABEJA IDENTIFICA INDEFINIDA INFORMAL
      */muestra24 DERECHO BARBECHO TECHO YATE YODO AYER
      */muestra25 MAÑANA PESTAÑA CAMPAÑA ENTRAÑAS LIMITROFES MAFIA
      */muestra26 CUBA CUBULAR CUMULATIVO ACALLAR ALCANTARILLADO ALLI
      */muestra27 CURADO CICLISMO COAXIAL AMARILLO AMPOLLAS CABALLO
      */muestra28 AÑORA CASTAÑA PANAMEÑO NIÑO NIÑA MAGNIFICO MALEFICA MAMIFERO
      */muestra29 DIGITAL TACTIL ANUAL PASTORAL CLIMAX COEXISTENCIA CONEXION
      */muestra30 AMNESIA ASIA ASIDUO ASEMEJA CONTEXTO EXACTA EXAMEN
      */muestra31 HOLA COLA BOLA MOLA YOLANDA YESO FERREA FORRADA GORRAS GUERRA
      */muestra32 VOXFORGE INICIO LEER ESCUCHAR HALLAR HERMOSILLO HUELLA HUMILLACION
      */muestra33 PLAY INICIAR SIGUIENTE SALTAR HACIA ADELANTE PREVIO ATRAS
      */muestra34 MUSICA MOSTRAR QUIEN SOBRE INFORMACION BAJA BAJO INFERIOR
      */muestra35 JUGADOR SUBIR ARRIBA PARA PARAR SILENCIO
      */muestra36 TIEMPO ORDENADOR COMPUTADORA VOLUMEN CORREO ELECTRONICO
      */muestra37 COMPUTERIZADO AMPUTADO MINICOMPUTADORA PUMA SUMA
      */muestra38 BOTON AMPUTACION AGUDA ACEPTAR IMAGEN APAGAR
      */muestra39 GOOGLE FEMENINO MASCULINO BUSCAR LEER LEE ESCRIBE ESCRIBIR
      */muestra40 DAVID SALUDAR SALUDA ENCIENDE ENCENDER

    La primera columna del archivo prompts.txt contiene el nombre del archivo de audio que se va a crear y las columnas siguientes contienen las transcripciones de texto de lo que se va a grabar en el archivo de audio.

  Archivo wlist

    El guión de Julia prompts2wlist.jl puede tomar el archivo prompts.txt que acaba de crear y quitar el nombre del archivo en la primera columna e imprimir cada palabra en una línea en un archivo de lista de palabras (wlist).

    Descargue prompts2wlist.jl a su carpeta 'voxforge/bin'.

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

    A continuación, vuelva a su directorio 'voxforge/tutorial' (donde se encuentra su archivo prompts.txt) y ejecute prompts2wlist.jl de la siguiente manera:

      julia ../bin/prompts2wlist.jl prompts.txt wlist

      [Es posible que aparezcan algunos 'WARNING' pero podemos comprobar que se ha creado el archivo 'wlist']

    Esto creará el archivo wlist .

    Nota: las siguientes entradas se agregaron automáticamente a su archivo wlist (en ese orden):

      SENT-END
      SENT-START

    Estas son las entradas internas HTK necesarias para la creación del modelo acústico, y para el procesamiento del modelo acústico por Julius.

  Diccionario de pronunciación

    El siguiente paso es agregar información de pronunciación (es decir, los fonemas que componen la palabra) a cada una de las palabras del archivo wlist, creando así un diccionario de pronunciación. HTK utiliza el comando HDMan para ir a través del archivo wlist y buscar la pronunciación de cada palabra en un archivo de léxico independiente, y mostrar el resultado en un Diccionario de Pronunciación.

    Primero debes crear el script global.ded en tu carpeta 'voxforge/tutorial' (el script por defecto usado por HDMan), que contiene:

      AS sp
      RS cmu
      MP sil sil sp

    Esto se utiliza principalmente para convertir todas las palabras del archivo dict en mayúsculas. Vea el libro de HTK para los detalles de lo que significan estos comandos.

    Cree un nuevo directorio llamado 'lexicon' en su carpeta 'voxforge'. Descargue el modelo de lenguaje español de https://github.com/daribes/marcelino-dev/blob/master/mljulius/con/lexicon/voxforge_lexicon

      cd ..
      mkdir lexicon
      cd lexicon
      wget https://github.com/daribes/marcelino-dev/blob/master/mljulius/con/lexicon/voxforge_lexicon

      [El diccionario es.dict tiene muchas palabras en Español pero la mayoria de las que yo he puesto en el prompts.txt, en el afan de modificar este proceso para hacerlo totalmente en el idioma de Cervantes me puse a modificar cosas y claro, me encontre con problemas, digo esto por que yo incluí en el diccionario es.dict que descargue, las palabras que habia modificado en el prompts.txt para que se pudieran reconocer, el diccionario modificado se puede encontrar haciendo un wget a ... pero si quereis ver un poco en que estais trabajando es interesante añadirlas por uno mismo]

    Ejecute el comando HDMan desde el directorio 'voxforge/tutorial' de la siguiente manera:

      ../soft/htk/HTKTools/HDMan -A -D -T 1 -m -w wlist -n monophones1 -i -l dlog dict ../lexicon/voxforge_lexicon

    y el resultado tiene que ser algo parecido a esto:

      No HTK Configuration Parameters Set

      Output dictionary dict opened
      Source dictionary ../lexicon/voxforge_lexicon opened
      Dictionary dict created - 220 words processed, 0 missing

      No HTK Configuration Parameters Set

    La salida del comando HDMan son tres archivos:

      - dict - el diccionario de pronunciación para usted Gramática y palabras adicionales necesarias para crear un modelo acústico fonéticamente equilibrado; y
      - monophones1 - que es simplemente una lista de los teléfonos utilizados en dict.
      - dlog - archivo de registro de la salida de HDMan

  Confirmación de un diccionario fonéticamente equilibrado

    Para ayudarle a determinar si su diccionario está fonéticamente equilibrado, revise la salida de su comando HDMan en el archivo de registro "dlog":

      'cat dlog' producira:

        WARNING: no script file ../lexicon/voxforge_lexicon.ded

        Dictionary Usage Statistics
        ---------------------------
          Dictionary    TotalWords WordsUsed  TotalProns PronsUsed
          voxforge_lex     22983        220              23429          223
                dict               220           220                223            220

        220 words required, 0 missing

        New Phone Usage Counts
        ---------------------
          1. a     :   236
          2. b     :    44
          3. l      :    50
          4. o     :   148
          5. n     :    82
          6. sp   :   218
          7. d     :    46
          8. m    :    66
          9. i      :   112
          10. e   :   121
          11. s   :    51
          12. j    :    12
          13. u   :    49
          14. k   :    61
          15. ll   :    13
          16. r    :    86
          17. z    :    27
          18. p    :    26
          19. t     :    58
          20. f     :    18
          21. g    :    17
          22. x    :    11
          23. rr   :    13
          24. y    :    12
          25. gn  :    10
          26. ch  :    10
          27. sil  :     2
          28. v    :     2

        Dictionary dict created

    Aunque la revisión de este registro no determinará de manera concluyente si usted tiene un diccionario de pronunciación fonéticamente equilibrado o no (porque puede faltar ciertos teléfonos por completo ya que su gramática es demasiado pequeña), es un buen lugar para comenzar.

    Para que HTK compile su modelo acústico, debe asegurarse de que tiene (al menos) 3 a 5 cuentas de uso para cada teléfono. Si hay teléfonos que sólo tienen una ocurrencia, debe agregar palabras que utilizan estos teléfonos a su archivo prompts.txt. Puede buscar en el archivo voxforge_lexicon los teléfonos que necesita y luego incluir la palabra que contiene ese teléfono.

  Crear archivo monophones0

    También necesita otro archivo de monofonos para un paso posterior. Simplemente copie el archivo "monophones1" en un nuevo archivo "monophones0" en su directorio 'voxforge/tutorial' y luego elimine la entrada "sp" de pausa corta en monophones0.