Technologie de reconnaissance vocale Kaldi (8) ----- Intégration de HCLG

Technologie de reconnaissance vocale Kaldi (8) ----- Intégration de HCLG

Présentation du HCLG

HCLG= min(it(H o min(it(C o min(it(L o G)))))

Combinez les quatre couches couche par couche pour obtenir le graphique final. Parmi eux, o représente la combinaison, det représente la détermination et min représente la minimisation.

La fusion de WFST est généralement de grand à petit , c'est-à-dire, fusionnez d'abord G et L, puis fusionnez à nouveau C et H. Chaque fusion doit être déterminée et minimisée. La minimisation fait référence à WFST Il est converti en un WFST équivalent avec moins d'état nœuds et bords pour améliorer l'efficacité de la recherche. La combinaison de HCLG peut faire référence àkaldi/wsj/s5/utils/mkgraph.sh

insérez la description de l'image ici

Combiner LG.fst

  • fsttablecomposer

usage:

fsttablecompose 
Composition algorithm [between two FSTs of standard type, in tropical
semiring] that is more efficient for certain cases-- in particular,
where one of the FSTs (the left one, if --match-side=left) has large
out-degree

Usage:  fsttablecompose (fst1-rxfilename|fst1-rspecifier) (fst2-rxfilename|fst2-rspecifier) [(out-rxfilename|out-rspecifier)]

Utilisez de vraies colonnes :

cd ~/kaldi && mkdir HCLG
fsttablecompose ~/kaldi/data/L/lang/L_disambig.fst ~/kaldi/data/G/normal/G.fst | fstdeterminizestar --use-log=true | fstminimizeencoded | fstpushspecial | fstarcsort --sort_type=ilabel > ~/kaldi/data/HCLG/LG.fst

insérez la description de l'image ici

fstisstochastic C'est une étape de diagnostic, il imprime deux nombres, poids minimum et poids maximum

fsttablecompose fusionne deux fsts (L.fst, G.fst) en un seul fst (LG.fst), et les caractères de sortie front-end correspondent à l'entrée back-end supérieure. L'entrée front-end fusionnée est utilisée comme entrée du FST fusionné, et la sortie back-end comme sortie fusionnée ;

fstdeterminizestar effectue la détermination (saute uniquement à un état après avoir reçu la même entrée d'un état), élimine les transferts vides et réduit la redondance du graphe ;

fstminimizeencoded minimise fst, pousse le poids vers l'avant aussi loin que possible et utilise autant que possible les informations du modèle de langage supérieur pour éviter que des chemins importants ne soient élagués ;

fstisstochastic est normalisé pour s'assurer que la somme des probabilités de sortie sur l'état est 1.

Visualiser LG.fst

  • fstprint
cd ~/kaldi/data
fstprint --isymbols=./G/normal/phones.txt --osymbols=./G/normal/words.txt ./HCLG/LG.fst > ./HCLG/LG.txt

insérez la description de l'image ici

  • fstdraw
fstdraw --isymbols=./G/normal/phones.txt --osymbols=./G/normal/words.txt ./HCLG/LG.fst > ./HCLG/LG.dot  # 生成dot文件
dot -Tsvg ./HCLG/LG.dot > LG.svg # 转成svg矢量图(放大不会失真)

Cela prend beaucoup de temps sans essayer.

Combiné-CLG.fst

fstcomposecontext

usage:

fstcomposecontext 
Composes on the left with a dynamically created context FST

Usage:  fstcomposecontext <ilabels-output-file>  [<in.fst> [<out.fst>] ]
E.g:  fstcomposecontext ilabels.sym < LG.fst > CLG.fst

Utilisez de vraies colonnes :

cd ~/kaldi/data/HCLG
fstcomposecontext --context-size=1 --central-position=0 --read-disambig-syms=/root/kaldi/data/G/normal/phones/disambig.int --write-disambig-syms=disambig_ilabels.int disambig_ilabels < LG.fst > CLG.fst

Détails des paramètres :
–context-size=1 modèle monophone
–central-position=0 la position du phonème médian est 0
–read-disambig-syms disambig.int provient des fichiers du dossier phones générés lors du processus L ou G généré, saisissez The Le fichier LdG-Ngram.fst est issu du modèle LdG-Ngram.fst fusionné à l'étape précédente.

insérez la description de l'image ici

Dans Kaldi, un C.fst séparé n'est généralement pas explicitement créé puis combiné avec LG. Au lieu de fsttablecomposecommandes, fstcomposecontext des outils sont utilisés pour générer dynamiquement CLG.fst basé sur LG.fst. Bien sûr, vous pouvez également créer d'abord C.fst, puis utiliser fsttablecomposela fusion de commandes, mais cette méthode prend beaucoup de temps. Voici deux fichiers construits disambig_ilabels.intet utilisés pour générer Ha.fst.disambig_ilabels

Visualiser-CLG.fst

  • fstprint
fstprint fstprint --isymbols=../G/normal/phones.txt --osymbols=../G/normal/words.txt ./CLG.fst > CLG.txt

insérez la description de l'image ici

  • fstdraw
fstdraw --isymbols=./G/normal/phones.txt --osymbols=../G/normal/words.txt ../CLG.fst > CLG.dot # 再使用dot工具转为图片即可

Générer H.fst

faire-h-transducteur

make-h-transducer est basé sur la topologie HMM pour construire un modèle acoustique sans auto-transfert Ha.fs

usage:

make-h-transducer 
Make H transducer from transition-ids to context-dependent phones, 
 without self-loops [use add-self-loops to add them]
Usage:   make-h-transducer <ilabel-info-file> <tree-file> <transition-gmm/acoustic-model> [<H-fst-out>]
e.g.: 
 make-h-transducer ilabel_info  1.tree 1.mdl > H.fst

Utilisez de vraies colonnes :

make-h-transducer disambig_ilabels /root/kaldi/data/H/mono/tree /root/kaldi/data/H/mono/final.mdl > Ha.fst

Détails des paramètres :
le premier paramètre d'entrée (disambig_ilabels) est généré lorsque CLG.fst est combiné.
Le deuxième paramètre d'entrée est l'arbre de décision (arbre) généré par l'apprentissage GMM.
Le troisième paramètre d'entrée est le modèle final généré par la formation GMM. ( a dans Ha.fst signifie pas d'auto-boucle) .
insérez la description de l'image ici

Combiner HCLG.fst

Générer HaCLG.fst

fsttablecomposer

fstrmsymbols : supprime les transferts liés à la désambiguïsation dans les modèles HaCLG.fst. disambig_tid.int est généré lorsque CLG.fst est combiné.

usage:

fsttablecompose 
Composition algorithm [between two FSTs of standard type, in tropical
semiring] that is more efficient for certain cases-- in particular,
where one of the FSTs (the left one, if --match-side=left) has large
out-degree
Usage:  fsttablecompose (fst1-rxfilename|fst1-rspecifier) (fst2-rxfilename|fst2-rspecifier) [(out-rxfilename|out-rspecifier)]

Utilisez de vraies colonnes :

fsttablecompose Ha.fst CLG.fst | fstdeterminizestar --use-log=true | fstrmsymbols disambig_tid.int | fstrmepslocal | fstminimizeencoded | fstpushspecial > HaCLG.fst

insérez la description de l'image ici

1. Ajouter une boucle automatique au modèle HaCLG.fst

add-self-loops --self-loop-scale=0.1 --reorder=true /root/kaldi/data/H/mono/final.mdl < HaCLG.fst

Générer HCLG.fst

2. Convertir HaCLG en HCLG

fstconvert --fst_type=const HaCLG.fst >HCLG.fst

insérez la description de l'image ici


Jusqu'à présent, HCLG.fst a été généré, et le contenu de base de l'ensemble du système de reconnaissance vocale kaldi a été construit , et il n'a plus qu'à être appliqué !

Si vous avez des questions, n'hésitez pas à envoyer un message privé ou à laisser un message pour en discuter. Le clone complet de la machine virtuelle sera publié dans la zone de commentaires, merci pour votre soutien !

Article recommandé : Visualisation du processus de composition HCLG de Kaldi

Je suppose que tu aimes

Origine blog.csdn.net/yxn4065/article/details/129151323
conseillé
Classement