Ir al contenido principal

Marcelino - Paso 10 - Fabricación de Trifonemas de estado atado

Paso 10 - Fabricación de Trifonemas de estado atado

  Fondo

    Una limitación de la creación de un modelo acústico basado en trifonía en el paso 9 es que no se ocupa de los trifonemas para los que no hay ejemplos en los datos de entrenamiento. Este problema se puede evitar mediante el diseño cuidadoso de la base de datos de entrenamiento, pero cuando se construye un gran vocabulario, los sistemas trifónicos de palabra cruzada son inevitables.

    El agrupamiento de árboles de decisión utilizado aquí permite sintetizar trifonemas previamente no vistos. ¿Cómo? Utilizando un árbol de decisiones fonéticas donde los modelos están organizados en un árbol y los parámetros que pasa son llamados preguntas. El decodificador hace una pregunta en el contexto del fonema y decide qué modelo utilizar.

    Un árbol de decisiones fonéticas es un árbol binario en el que una pregunta fonética sí/no está conectada a cada nodo. La pregunta en cada nodo se elige para maximizar la probabilidad de los datos de entrenamiento, dado el conjunto final de tings de estado. Los árboles se definen por el comando TB. Todas las preguntas fonéticas posibles deben ser cargadas en HHED usando comandos QS. Cada pregunta toma la forma "¿Es el contexto izquierdo o derecho en el conjunto con nombre?" Donde el contexto es el contexto del modelo definido por su nombre lógico.

  TUTORIAL

    Crear un nuevo archivo de script HTK llamado maketriphones.ded que contenga lo siguiente:

      AS sp
      MP sil sil sp
      TC

    El comando de edición TC dirige HDMan a los trifonemas de salida.

    A continuación, ejecute el comando HDMan contra todo el archivo de léxico, no sólo el diccionario de entrenamiento que hemos utilizado hasta el momento:

      ../soft/htk/HTKTools/HDMan -A -D -T 1 -b sp -n fulllist0 -g maketriphones.ded -l flog dict-tri ../lexicon/voxforge_lexicon

    Esto crea 2 archivos:

      - dict-tri
      - fulllist0

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

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

    y ejecutela para añadir el contenido de monofones0 al principio del archivo fulllist0 y, a continuación, para eliminar cualquier entrada duplicada y poner el resultado en fullist:

      julia ../bin/fixfulllist.jl fulllist0 monophones0 fulllist

  tree.hed

    A continuación, hay que crear una nueva secuencia de comandos HTK llamada tree.hed (que contiene las preguntas del contexto del fonema que HTK usará para seleccionar los trifonemas relevantes).

    Cree un archivo en su carpeta 'voxforge/tutorial' llamado tree1.hed que contenga lo siguiente:

      RO 100 stats

      TR 0

      QS  "R_NonBoundary"     { *+* }
      QS  "R_Silence"         { *+sil }

      QS  "R_V-Front"         { *+i,*+e }
      QS  "R_V-Central"       { *+a }
      QS  "R_V-Back"          { *+o,*+u }

      QS  "R_V-cerrada"       { *+i,*+u }
      QS  "R_V-media"         { *+e,*+o }
      QS  "R_V-abierta"       { *+a }

      QS  "R_oclusive"{ *+p,*+b,*+t,*+d,*+k,*+g }
      QS  "R_Fricative"{ *+th,*+f,*+s,*+x,*+j,*+y,*+z }
      QS  "R_Africada"{ *+ch }
      QS  "R_nasal"{ *+m,*+n,*+gn }
      QS  "R_lateral"{ *+l,*+ll }
      QS  "R_vibrante"{ *+r,*+rr }

      QS  "R_bilabial"{ *+p,*+b,*+m }
      QS  "R_dental"{ *+t,*+d,*+z }
      QS  "R_palatal"{ *+ch,*+gn,*+x,*+y }
      QS  "R_velar"{ *+k,*+g,*+j }
      QS  "R_interdental"{ *+th }
      QS  "R_labiodental"{ *+f }
      QS  "R_alveolar"{ *+s,*+n,*+l,*+r,*+rr}

      QS  "R_sorda"{ *+p,*+t,*+k,*+th,*+f,*+s,*+x,*+ch,*+j,*+z }
      QS  "R_sonora"{ *+b,*+d,*+g,*+y }
      QS  "R_nisordanisonora" { *+m,*+n,*+gn,*+l,*+ll }
      QS  "R_simple"{ *+r }
      QS  "R_multiple"{ *+rr }

      QS  "R_a"               { *+a }
      QS  "R_e"               { *+e }
      QS  "R_i"               { *+i }
      QS  "R_o"               { *+o }
      QS  "R_u"               { *+u }

      QS  "R_p"{ *+p }
      QS  "R_t"{ *+t }
      QS  "R_k"{ *+k }
      QS  "R_th"{ *+th }
      QS  "R_f"{ *+f }
      QS  "R_s"{ *+s }
      QS  "R_x"{ *+x }
      QS  "R_ch"{ *+ch }
      QS  "R_b"{ *+b }
      QS  "R_d"{ *+d }
      QS  "R_g"{ *+g }
      QS  "R_m"{ *+m }
      QS  "R_n"{ *+n }
      QS  "R_gn"{ *+gn }
      QS  "R_l"{ *+l }
      QS  "R_ll"{ *+ll }
      QS  "R_r"{ *+r }
      QS  "R_rr"{ *+rr }
      QS  "R_j"{ *+j }
      QS  "R_y"{ *+y }
      QS  "R_z"{ *+z }

      QS  "L_NonBoundary"     { *-* }
      QS  "L_Silence"         { sil-* }

      QS    "L_V-Front"         { i-*,e-* }
      QS  "L_V-Central"{ a-*,a1-* }
      QS  "L_V-Back"          { o-*,u-* }

      QS  "L_V-cerrada"       { i-*,u-* }
      QS  "L_V-media"         { e-*,o-* }
      QS  "L_V-abierta"       { a-* }

      QS  "L_oclusive"{ p-*,b-*,t-*,d-*,k-*,g-* }
      QS  "L_Fricative"{ th-*,f-*,s-*,x-*,j-*,y-*,z-* }
      QS  "L_Africada"{ ch-* }
      QS  "L_nasal"{ m-*,n-*,gn-* }
      QS  "L_lateral"{ l-*,ll-* }
      QS  "L_vibrante"{ r-*,rr-* }

      QS  "L_bilabial"{ p-*,b-*,m-* }
      QS  "L_dental"{ t-*,d-*,z-* }
      QS  "L_palatal"{ ch-*,gn-*,x-*,y-* }
      QS  "L_velar"{ k-*,g-*,j-* }
      QS  "L_interdental"{ th-* }
      QS  "L_labiodental"{ f-* }
      QS  "L_alveolar"{ s-*,n-*,l-*,r-*,rr-*}

      QS  "L_sorda"{ p-*,t-*,k-*,th-*,f-*,s-*,x-*,ch-*,j-*,z-* }
      QS  "L_sonora"{ b-*,d-*,g-*,y-* }
      QS  "L_nisordanisonora" { m-*,n-*,gn-*,l-*,ll-* }
      QS  "L_simple"{ r-* }
      QS  "L_multiple"{ rr-* }

      QS  "L_a"               { a-* }
      QS  "L_e"               { e-* }
      QS  "L_i"               { i-* }
      QS  "L_o"               { o-* }
      QS  "L_u"               { u-* }

      QS  "L_p"{ p-* }
      QS  "L_t"{ t-* }
      QS  "L_k"{ k-* }
      QS  "L_th"{ th-* }
      QS  "L_f"{ f-* }
      QS  "L_s"{ s-* }
      QS  "L_x"{ x-* }
      QS  "L_ch"{ ch-* }
      QS  "L_b"{ b-* }
      QS  "L_d"{ d-* }
      QS  "L_g"{ g-* }
      QS  "L_m"{ m-* }
      QS  "L_n"{ n-* }
      QS  "L_gn"{ gn-* }
      QS  "L_l"{ l-* }
      QS  "L_ll"{ ll-* }
      QS  "L_r"{ r-* }
      QS  "L_rr"{ rr-* }
      QS  "L_j"{ j-* }
      QS  "L_y"{ y-* }
      QS  "L_z"{ z-* }

      TR 2

    (Nota: asegúrese de que tiene una línea en blanco al final de este archivo).

    Copiar el contenido de tree1.hed a tree.hed:

      cat tree1.hed > tree.hed

    He aquí una breve descripción de los comandos contenidos en tree.hed:

      RO - Umbral de salida
      1er "TR" - Nivel de traza
      QS - Pregunta - definida por el usuario (ver archivo quests.hed en la distribución HTK - carpeta demo RM)

          (Cada comando QS carga una sola pregunta y esa pregunta está definida por un conjunto de contextos)

      2ndo "TR" - permite el informe de progreso de nivel intermedio
      TB - agrupa un conjunto específico de estados - creado con el comando mkclscript.prl
      AU - sintetiza los trifonemas previamente no vistos, es decir, usa el conjunto de árboles de decisión recién creados para hacer todos los trifonemas incluidos en la lista
      CO - compactar el conjunto de modelos: algunas definiciones de estado serán exactamente las mismas (mismas medias y variaciones, etc.). Para ahorrar espacio, sólo uno de estos estados se mantiene en la definición, otros se añaden a la lista de vinculados.
      ST: guarda los árboles de decisión en un archivo

    Consulte el libro HTK para obtener detalles sobre estos comandos.

    A continuación, descargue el script mkclscript.jl (https://raw.githubusercontent.com/VoxForge/develop/master/bin/mkclscript.jl  a su carpeta 'voxforge/bin'

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

    y ejecútelo de la siguiente manera para anexar los clústeres de estado al archivo tree.hed que creó anteriormente:

      julia ../bin/mkclscript.jl monophones0 tree.hed

    Nota: el script mkclscript.jl añade automáticamente lo siguiente al final de su archivo tree.hed:

      TR 1

      AU "fulllist"
      CO "tiedlist"

      ST "trees"

    Su archivo debe tener este aspecto:

      RO 100 stats

      TR 0

      QS  "R_NonBoundary"     { *+* }
      QS  "R_Silence"         { *+sil }

      QS  "R_V-Front"         { *+i,*+e }
      QS  "R_V-Central"       { *+a }
      QS  "R_V-Back"          { *+o,*+u }

      QS  "R_V-cerrada"       { *+i,*+u }
      QS  "R_V-media"         { *+e,*+o }
      QS  "R_V-abierta"       { *+a }

      QS  "R_oclusive"{ *+p,*+b,*+t,*+d,*+k,*+g }
      QS  "R_Fricative"{ *+th,*+f,*+s,*+x,*+j,*+y,*+z }
      QS  "R_Africada"{ *+ch }
      QS  "R_nasal"{ *+m,*+n,*+gn }
      QS  "R_lateral"{ *+l,*+ll }
      QS  "R_vibrante"{ *+r,*+rr }

      QS  "R_bilabial"{ *+p,*+b,*+m }
      QS  "R_dental"{ *+t,*+d,*+z }
      QS  "R_palatal"{ *+ch,*+gn,*+x,*+y }
      QS  "R_velar"{ *+k,*+g,*+j }
      QS  "R_interdental"{ *+th }
      QS  "R_labiodental"{ *+f }
      QS  "R_alveolar"{ *+s,*+n,*+l,*+r,*+rr}

      QS  "R_sorda"{ *+p,*+t,*+k,*+th,*+f,*+s,*+x,*+ch,*+j,*+z }
      QS  "R_sonora"{ *+b,*+d,*+g,*+y }
      QS  "R_nisordanisonora" { *+m,*+n,*+gn,*+l,*+ll }
      QS  "R_simple"{ *+r }
      QS  "R_multiple"{ *+rr }

      QS  "R_a"               { *+a }
      QS  "R_e"               { *+e }
      QS  "R_i"               { *+i }
      QS  "R_o"               { *+o }
      QS  "R_u"               { *+u }

      QS  "R_p"{ *+p }
      QS  "R_t"{ *+t }
      QS  "R_k"{ *+k }
      QS  "R_th"{ *+th }
      QS  "R_f"{ *+f }
      QS  "R_s"{ *+s }
      QS  "R_x"{ *+x }
      QS  "R_ch"{ *+ch }
      QS  "R_b"{ *+b }
      QS  "R_d"{ *+d }
      QS  "R_g"{ *+g }
      QS  "R_m"{ *+m }
      QS  "R_n"{ *+n }
      QS  "R_gn"{ *+gn }
      QS  "R_l"{ *+l }
      QS  "R_ll"{ *+ll }
      QS  "R_r"{ *+r }
      QS  "R_rr"{ *+rr }
      QS  "R_j"{ *+j }
      QS  "R_y"{ *+y }
      QS  "R_z"{ *+z }

      QS  "L_NonBoundary"     { *-* }
      QS  "L_Silence"         { sil-* }

      QS    "L_V-Front"         { i-*,e-* }
      QS  "L_V-Central"{ a-*,a1-* }
      QS  "L_V-Back"          { o-*,u-* }

      QS  "L_V-cerrada"       { i-*,u-* }
      QS  "L_V-media"         { e-*,o-* }
      QS  "L_V-abierta"       { a-* }

      QS  "L_oclusive"{ p-*,b-*,t-*,d-*,k-*,g-* }
      QS  "L_Fricative"{ th-*,f-*,s-*,x-*,j-*,y-*,z-* }
      QS  "L_Africada"{ ch-* }
      QS  "L_nasal"{ m-*,n-*,gn-* }
      QS  "L_lateral"{ l-*,ll-* }
      QS  "L_vibrante"{ r-*,rr-* }

      QS  "L_bilabial"{ p-*,b-*,m-* }
      QS  "L_dental"{ t-*,d-*,z-* }
      QS  "L_palatal"{ ch-*,gn-*,x-*,y-* }
      QS  "L_velar"{ k-*,g-*,j-* }
      QS  "L_interdental"{ th-* }
      QS  "L_labiodental"{ f-* }
      QS  "L_alveolar"{ s-*,n-*,l-*,r-*,rr-*}

      QS  "L_sorda"{ p-*,t-*,k-*,th-*,f-*,s-*,x-*,ch-*,j-*,z-* }
      QS  "L_sonora"{ b-*,d-*,g-*,y-* }
      QS  "L_nisordanisonora" { m-*,n-*,gn-*,l-*,ll-* }
      QS  "L_simple"{ r-* }
      QS  "L_multiple"{ rr-* }

      QS  "L_a"               { a-* }
      QS  "L_e"               { e-* }
      QS  "L_i"               { i-* }
      QS  "L_o"               { o-* }
      QS  "L_u"               { u-* }

      QS  "L_p"{ p-* }
      QS  "L_t"{ t-* }
      QS  "L_k"{ k-* }
      QS  "L_th"{ th-* }
      QS  "L_f"{ f-* }
      QS  "L_s"{ s-* }
      QS  "L_x"{ x-* }
      QS  "L_ch"{ ch-* }
      QS  "L_b"{ b-* }
      QS  "L_d"{ d-* }
      QS  "L_g"{ g-* }
      QS  "L_m"{ m-* }
      QS  "L_n"{ n-* }
      QS  "L_gn"{ gn-* }
      QS  "L_l"{ l-* }
      QS  "L_ll"{ ll-* }
      QS  "L_r"{ r-* }
      QS  "L_rr"{ rr-* }
      QS  "L_j"{ j-* }
      QS  "L_y"{ y-* }
      QS  "L_z"{ z-* }

      TR 2

      TB 350 "ST_a_2_" {("a","*-a+*","a+*","*-a").state[2]}
      TB 350 "ST_b_2_" {("b","*-b+*","b+*","*-b").state[2]}
      TB 350 "ST_ch_2_" {("ch","*-ch+*","ch+*","*-ch").state[2]}
      TB 350 "ST_d_2_" {("d","*-d+*","d+*","*-d").state[2]}
      TB 350 "ST_e_2_" {("e","*-e+*","e+*","*-e").state[2]}
      TB 350 "ST_f_2_" {("f","*-f+*","f+*","*-f").state[2]}
      TB 350 "ST_g_2_" {("g","*-g+*","g+*","*-g").state[2]}
      TB 350 "ST_i_2_" {("i","*-i+*","i+*","*-i").state[2]}
      TB 350 "ST_j_2_" {("j","*-j+*","j+*","*-j").state[2]}
      TB 350 "ST_k_2_" {("k","*-k+*","k+*","*-k").state[2]}
      TB 350 "ST_l_2_" {("l","*-l+*","l+*","*-l").state[2]}
      TB 350 "ST_ll_2_" {("ll","*-ll+*","ll+*","*-ll").state[2]}
      TB 350 "ST_m_2_" {("m","*-m+*","m+*","*-m").state[2]}
      TB 350 "ST_n_2_" {("n","*-n+*","n+*","*-n").state[2]}
      TB 350 "ST_gn_2_" {("gn","*-gn+*","gn+*","*-gn").state[2]}
      TB 350 "ST_o_2_" {("o","*-o+*","o+*","*-o").state[2]}
      TB 350 "ST_p_2_" {("p","*-p+*","p+*","*-p").state[2]}
      TB 350 "ST_r_2_" {("r","*-r+*","r+*","*-r").state[2]}
      TB 350 "ST_rr_2_" {("rr","*-rr+*","rr+*","*-rr").state[2]}
      TB 350 "ST_s_2_" {("s","*-s+*","s+*","*-s").state[2]}
      TB 350 "ST_t_2_" {("t","*-t+*","t+*","*-t").state[2]}
      TB 350 "ST_th_2_" {("th","*-th+*","th+*","*-th").state[2]}
      TB 350 "ST_u_2_" {("u","*-u+*","u+*","*-u").state[2]}
      TB 350 "ST_x_2_" {("x","*-x+*","x+*","*-x").state[2]}
      TB 350 "ST_y_2_" {("y","*-y+*","y+*","*-y").state[2]}
      TB 350 "ST_z_2_" {("z","*-z+*","z+*","*-z").state[2]}
      TB 350 "ST_sil_2_" {("sil","*-sil+*","sil+*","*-sil").state[2]}
      TB 350 "ST_a_3_" {("a","*-a+*","a+*","*-a").state[3]}
      TB 350 "ST_b_3_" {("b","*-b+*","b+*","*-b").state[3]}
      TB 350 "ST_ch_3_" {("ch","*-ch+*","ch+*","*-ch").state[3]}
      TB 350 "ST_d_3_" {("d","*-d+*","d+*","*-d").state[3]}
      TB 350 "ST_e_3_" {("e","*-e+*","e+*","*-e").state[3]}
      TB 350 "ST_f_3_" {("f","*-f+*","f+*","*-f").state[3]}
      TB 350 "ST_g_3_" {("g","*-g+*","g+*","*-g").state[3]}
      TB 350 "ST_i_3_" {("i","*-i+*","i+*","*-i").state[3]}
      TB 350 "ST_j_3_" {("j","*-j+*","j+*","*-j").state[3]}
      TB 350 "ST_k_3_" {("k","*-k+*","k+*","*-k").state[3]}
      TB 350 "ST_l_3_" {("l","*-l+*","l+*","*-l").state[3]}
      TB 350 "ST_ll_3_" {("ll","*-ll+*","ll+*","*-ll").state[3]}
      TB 350 "ST_m_3_" {("m","*-m+*","m+*","*-m").state[3]}
      TB 350 "ST_n_3_" {("n","*-n+*","n+*","*-n").state[3]}
      TB 350 "ST_gn_3_" {("gn","*-gn+*","gn+*","*-gn").state[3]}
      TB 350 "ST_o_3_" {("o","*-o+*","o+*","*-o").state[3]}
      TB 350 "ST_p_3_" {("p","*-p+*","p+*","*-p").state[3]}
      TB 350 "ST_r_3_" {("r","*-r+*","r+*","*-r").state[3]}
      TB 350 "ST_rr_3_" {("rr","*-rr+*","rr+*","*-rr").state[3]}
      TB 350 "ST_s_3_" {("s","*-s+*","s+*","*-s").state[3]}
      TB 350 "ST_t_3_" {("t","*-t+*","t+*","*-t").state[3]}
      TB 350 "ST_th_3_" {("th","*-th+*","th+*","*-th").state[3]}
      TB 350 "ST_u_3_" {("u","*-u+*","u+*","*-u").state[3]}
      TB 350 "ST_x_3_" {("x","*-x+*","x+*","*-x").state[3]}
      TB 350 "ST_y_3_" {("y","*-y+*","y+*","*-y").state[3]}
      TB 350 "ST_z_3_" {("z","*-z+*","z+*","*-z").state[3]}
      TB 350 "ST_sil_3_" {("sil","*-sil+*","sil+*","*-sil").state[3]}
      TB 350 "ST_a_4_" {("a","*-a+*","a+*","*-a").state[4]}
      TB 350 "ST_b_4_" {("b","*-b+*","b+*","*-b").state[4]}
      TB 350 "ST_ch_4_" {("ch","*-ch+*","ch+*","*-ch").state[4]}
      TB 350 "ST_d_4_" {("d","*-d+*","d+*","*-d").state[4]}
      TB 350 "ST_e_4_" {("e","*-e+*","e+*","*-e").state[4]}
      TB 350 "ST_f_4_" {("f","*-f+*","f+*","*-f").state[4]}
      TB 350 "ST_g_4_" {("g","*-g+*","g+*","*-g").state[4]}
      TB 350 "ST_i_4_" {("i","*-i+*","i+*","*-i").state[4]}
      TB 350 "ST_j_4_" {("j","*-j+*","j+*","*-j").state[4]}
      TB 350 "ST_k_4_" {("k","*-k+*","k+*","*-k").state[4]}
      TB 350 "ST_l_4_" {("l","*-l+*","l+*","*-l").state[4]}
      TB 350 "ST_ll_4_" {("ll","*-ll+*","ll+*","*-ll").state[4]}
      TB 350 "ST_m_4_" {("m","*-m+*","m+*","*-m").state[4]}
      TB 350 "ST_n_4_" {("n","*-n+*","n+*","*-n").state[4]}
      TB 350 "ST_gn_4_" {("gn","*-gn+*","gn+*","*-gn").state[4]}
      TB 350 "ST_o_4_" {("o","*-o+*","o+*","*-o").state[4]}
      TB 350 "ST_p_4_" {("p","*-p+*","p+*","*-p").state[4]}
      TB 350 "ST_r_4_" {("r","*-r+*","r+*","*-r").state[4]}
      TB 350 "ST_rr_4_" {("rr","*-rr+*","rr+*","*-rr").state[4]}
      TB 350 "ST_s_4_" {("s","*-s+*","s+*","*-s").state[4]}
      TB 350 "ST_t_4_" {("t","*-t+*","t+*","*-t").state[4]}
      TB 350 "ST_th_4_" {("th","*-th+*","th+*","*-th").state[4]}
      TB 350 "ST_u_4_" {("u","*-u+*","u+*","*-u").state[4]}
      TB 350 "ST_x_4_" {("x","*-x+*","x+*","*-x").state[4]}
      TB 350 "ST_y_4_" {("y","*-y+*","y+*","*-y").state[4]}
      TB 350 "ST_z_4_" {("z","*-z+*","z+*","*-z").state[4]}
      TB 350 "ST_sil_4_" {("sil","*-sil+*","sil+*","*-sil").state[4]}

      TR 1

      AU "fulllist"
      CO "tiedlist"

      ST "trees"

    Lo siguiente es crear 3 carpetas más: hmm13-15

      mkdir hmm13 hmm14 hmm15

    A continuación, ejecute el comando HHEd (hmm definition editor):

      ../soft/htk/HTKTools/HHEd -A -D -T 1 -H hmm12/macros -H hmm12/hmmdefs -M hmm13 tree.hed triphones1

    Este comando crea 3 archivos:

      - hmmdefs
      - macros
      - tiedlist

    Seguidamente ejecute HERest dos veces más:

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

    Este comando crea dos archivos:

      - hmmdefs
      - macros

    Y ejecutamos un última vez

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

    Y tambien este comando crea dos archivos:

      - hmmdefs
      - macros

    El archivo hmmdefs en la carpeta hmm15, junto con el archivo de lista de vinculación, ahora se puede utilizar con Julius para reconocer su discurso!