Kaldi Spracherkennungstechnologie (8) ----- Integration von HCLG
Artikelverzeichnis
HCLG-Übersicht
HCLG= min(it(H o min(it(C o min(it(L o G)))))
Kombinieren Sie die vier Schichten Schicht für Schicht, um das endgültige Diagramm zu erhalten. Darunter steht o für Kombination, det für Determinierung und min für Minimierung.
Die Verschmelzung von WFST erfolgt im Allgemeinen von groß nach klein , das heißt, zuerst verschmelzen G und L und dann wieder verschmelzen C und H. Jede Verschmelzung muss bestimmt und minimiert werden. Die Minimierung bezieht sich auf WFST. Es wird in ein äquivalentes WFST mit weniger Zustand umgewandelt Knoten und Kanten, um die Sucheffizienz zu verbessern. Die Kombination von HCLG kann sich darauf beziehenkaldi/wsj/s5/utils/mkgraph.sh
Kombinieren Sie LG.fst
- fsttablecompose
Verwendung:
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)]
Verwenden Sie echte Spalten:
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
fstisstochastic Dies ist ein diagnostischer Schritt, er druckt zwei Zahlen aus, Mindestgewicht und Höchstgewicht
fsttablecompose führt zwei fsts (L.fst, G.fst) zu einer fst (LG.fst) zusammen, und die Front-End-Ausgabezeichen entsprechen der oberen Back-End-Eingabe. Die zusammengeführte Front-End-Eingabe wird als Eingabe verwendet der zusammengeführten fst und der Back-End-Ausgabe als zusammengeführte Ausgabe;
fstdeterminizestar führt eine Determinierung durch (springt nur in einen Zustand, nachdem dieselbe Eingabe von einem Zustand empfangen wurde), eliminiert leere Übertragungen und reduziert die Redundanz des Graphen;
fstminimizeencoded minimiert fst, schiebt das Gewicht so weit wie möglich nach vorne und nutzt die Informationen des oberen Sprachmodells so weit wie möglich, um zu vermeiden, dass wichtige Pfade gekürzt werden;
fstisstochastic wird normalisiert, um sicherzustellen, dass die Summe der Ausgabewahrscheinlichkeiten für den Zustand 1 ist.
Visualisieren Sie LG.fst
- Schnelldruck
cd ~/kaldi/data
fstprint --isymbols=./G/normal/phones.txt --osymbols=./G/normal/words.txt ./HCLG/LG.fst > ./HCLG/LG.txt
- 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矢量图(放大不会失真)
Es dauert lange, ohne es zu versuchen.
Kombi-CLG.fst
fstcomposecontext
Verwendung:
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
Verwenden Sie echte Spalten:
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
Parameterdetails:
–context-size=1 monophones Modell
–central-position=0 mittlere Phonemposition ist 0
–read-disambig-syms disambig.int stammt aus den Dateien im Telefonordner, die während des generierten L- oder G-Prozesses generiert wurden, Eingabe The Die Datei LdG-Ngram.fst stammt aus dem LdG-Ngram.fst-Modell, das im vorherigen Schritt zusammengeführt wurde.
In Kaldi wird in der Regel nicht explizit eine eigene C.fst erstellt und dann mit LG kombiniert, sondern statt fsttablecompose
Kommandos fstcomposecontext
werden Werkzeuge verwendet, um CLG.fst dynamisch auf Basis von LG.fst zu generieren. Natürlich können Sie auch zuerst C.fst erstellen und dann fsttablecompose
die Befehlsfusion verwenden, aber diese Methode ist ziemlich zeitaufwändig. Hier sind zwei Dateien, die erstellt disambig_ilabels.int
und zum Generieren von Ha.fst verwendet werden.disambig_ilabels
Visualize-CLG.fst
- Schnelldruck
fstprint fstprint --isymbols=../G/normal/phones.txt --osymbols=../G/normal/words.txt ./CLG.fst > CLG.txt
- fstdraw
fstdraw --isymbols=./G/normal/phones.txt --osymbols=../G/normal/words.txt ../CLG.fst > CLG.dot # 再使用dot工具转为图片即可
Generiere H.fst
make-h-Wandler
make-h-transducer basiert auf der HMM-Topologie, um ein akustisches Modell ohne Selbstübertragung Ha.fs zu bauen
Verwendung:
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
Verwenden Sie echte Spalten:
make-h-transducer disambig_ilabels /root/kaldi/data/H/mono/tree /root/kaldi/data/H/mono/final.mdl > Ha.fst
Parameterdetails:
Der erste Eingabeparameter (disambig_ilabels) wird generiert, wenn CLG.fst kombiniert wird.
Der zweite Eingabeparameter ist der durch das GMM-Training generierte Entscheidungsbaum (Tree).
Der dritte Eingabeparameter ist das endgültige Modell, das durch das GMM-Training generiert wurde. ( a in Ha.fst bedeutet keine Selbstschleife) .
Kombinieren Sie HCLG.fst
Generieren Sie HaCLG.fst
fsttablecompose
fstrmsymbols: Entfernt disambiguierungsbezogene Übertragungen in HaCLG.fst-Modellen. disambig_tid.int wird generiert, wenn CLG.fst kombiniert wird.
Verwendung:
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)]
Verwenden Sie echte Spalten:
fsttablecompose Ha.fst CLG.fst | fstdeterminizestar --use-log=true | fstrmsymbols disambig_tid.int | fstrmepslocal | fstminimizeencoded | fstpushspecial > HaCLG.fst
1. Fügen Sie dem HaCLG.fst-Modell eine Selbstschleife hinzu
add-self-loops --self-loop-scale=0.1 --reorder=true /root/kaldi/data/H/mono/final.mdl < HaCLG.fst
Generieren Sie HCLG.fst
2. Konvertieren Sie HaCLG in HCLG
fstconvert --fst_type=const HaCLG.fst >HCLG.fst
Bisher wurde HCLG.fst generiert und der Kerninhalt des gesamten kaldi Spracherkennungssystems aufgebaut und muss nur noch angewendet werden!
Wenn Sie Fragen haben, wenden Sie sich bitte an eine private Nachricht oder hinterlassen Sie eine Nachricht zur Diskussion. Der vollständige Klon der virtuellen Maschine wird im Kommentarbereich veröffentlicht. Vielen Dank für Ihre Unterstützung!
Empfohlener Artikel: Visualisierung des HCLG-Zusammensetzungsprozesses von Kaldi