Kaldi Spracherkennungstechnologie (8) ----- Integration von HCLG

Kaldi Spracherkennungstechnologie (8) ----- Integration von HCLG

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

  • 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.

Bildbeschreibung hier einfügen

In Kaldi wird in der Regel nicht explizit eine eigene C.fst erstellt und dann mit LG kombiniert, sondern statt fsttablecomposeKommandos 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 fsttablecomposedie Befehlsfusion verwenden, aber diese Methode ist ziemlich zeitaufwändig. Hier sind zwei Dateien, die erstellt disambig_ilabels.intund 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

Bildbeschreibung hier einfügen

  • 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) .
Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen


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

Ich denke du magst

Origin blog.csdn.net/yxn4065/article/details/129151323
Empfohlen
Rangfolge