Tutoriel pour la pris en main de Kaldi / FST pour la reconnaissance de l'écriture
Finite state transducers, decoding graph with kaldi, decoding approaches of kaldi
4. Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
Automate de
Lexique (L)
W
5. Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
Automate de
Lexique (L)
Automate de
Grammaire (G)
W
6. Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
Automate de
Lexique (L)
Automate de
Grammaire (G)
Graphe de recherche
(S)
Compositiondesautomates
S=T૦min(det(L૦G)
W
7. Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
Automate de
Lexique (L)
Automate de
Grammaire (G)
Graphe de recherche
(S)
Compositiondesautomates
S=T૦min(det(L૦G)
Décodage
W
8. La structure d’un automate d'état pondéré (WFST)
● Format défini par l'outil OpenFst:
○ Pour les états initiaux et les états intermédiaires
#étatDepart #étatArrivée SymEntrée SymSortie [coût]
○ Pour les états finaux
#étatFinal [coût]
○ Exemple :
9. La structure d’un automate d'état pondéré (WFST)
● Le format défini par l'outils OpenFst:
○ Exemple :
■ La transformation de {a,b,c,d} à {z,y,x,w}
■ La transformation de {b,c,d,e} à {y,x,w,v}
$ cat > Automate.txt << EOF
0 1 a z 1.2
0 3 b y 0.8
1 1 b y 0.7
1 2 c x 3
2 5 d w 2
3 4 c x 0.2
4 4 d w 1.2
4 5 e v 0.5
5 0.5
EOF
Symboles d’entrée
SymEntrée
Symboles de sortie
SymSortie
a 1
b 2
c 3
d 4
e 5
z 1
y 2
x 3
w 4
v 5
10. Graphe de recherche : Automate de Tokens (1)
● Modèle optique : LSTM-CTC
○ Il produit un treillis d’hypothèses de caractères incluant le joker <blk>, autrement dit les
probabilités des labels.
○ Les séquences de labels dans ce treillis respectent les contraintes de CTC.
● L’automate des Tokens :
○ Il transforme un chemin respectant les règles de CTC en une séquence de caractères
○ Exemple:
entrée: <blk>....<blk> TTT <blk>....<blk>
sortie: T
blk
L=
x
blk
L=
y
blk
11. Graphe de recherche : Automate des Tokens (2)
● L’ensemble des symboles d’entrée et sortie de l’automate de Tokens:
○ Les symboles d’entrée de l’automate sont :
■ Les labels du CTC (tous les caractères + <blk>).
■ Le symbole “vide” <eps> (dans ce cas, l’automate ne consomme aucun symbole d’entrée).
○ Les symboles de sortie de l’automate sont :
■ Les symboles d’entrée de l’automate sauf le symbole <blk>.
■ Le symbole d'ambiguïté grammaticale #0 (pour le repli du modèle de langage).
■ Le symbole d’ambiguïté lexicale #1 (permet de distinguer les mots préfixes).
○ Les symboles d’ambiguïté grammaticale et lexicale sont nécessaires pour la réussite de la
composition de l’automate de Tokens avec les automates de Lexique et Grammaire.
12. Graphe de recherche : Automate des Tokens (2)
Exemple:
$cat > token.txt << EOF
<eps> 0 //vide
<blk> 1 //joker
#0 2 //replie de ML
#1 3 //ambiguïté lexical
O 4
T 5
I 6
V 7
etc...
● L’ensemble des symboles d’entrée et sortie de l’automate de Tokens:
○ Les symboles d’entrée de l’automate sont :
■ Les labels du CTC (tous les caractères + <blk>).
■ Le symbole “vide” <eps> (dans ce cas, l’automate ne consomme aucun symbole d’entrée).
○ Les symboles de sortie de l’automate sont :
■ Les symboles d’entrée de l’automate sauf le symbole <blk>.
■ Le symbole d'ambiguïté grammaticale #0 (pour le repli du modèle de langage).
■ Le symbole d’ambiguïté lexicale #1 (permet de distinguer les mots préfixes).
○ Les symboles d’ambiguïté grammaticale et lexicale sont nécessaires pour la
réussite de la composition de l’automate de Tokens avec les automates
de Lexique et Grammaire.
13. Graphe de recherche : Automate de Tokens (3)
● La définition de l’automate de Tokens pour un seul caractère (T).
○ Pour réaliser la transformation entrée - sortie :
○ On écrit l’automate de Token T
0 0 <eps> #0
0 0 <eps> #1
0 1 <eps> <eps>
1 1 <blk> <blk>
1 4 T T
4 4 T <esp>
4 2 <eps> <eps>
2 2 <blk> <esp>
2 0 <esp> <esp>
0
entrée: <blk>....<blk> TTT <blk>....<blk>
sortie: T
14. Graphe de recherche : Automate des Tokens (4)
● L’automate de Tokens pour l’ensemble des caractères ‘O’, ’T’, ’I’, ‘V’
○ Définition
$./ctc_token_fst.py tokens.txt > Tokens.txt
$cat Tokens.txt
0 1 <eps> <eps>
1 1 <blk> <eps>
2 2 <blk> <eps>
2 0 <eps> <eps>
1 3 O O
3 3 O <eps>
3 2 <eps> <eps>
1 4 T T
4 4 T <eps>
4 2 <eps> <eps>
1 5 I I
5 5 I <eps>
5 2 <eps> <eps>
1 6 V V
6 6 V <eps>
6 2 <eps> <eps>
0 0 <eps> #0
0 0 <eps> #1
0
15. Graphe de recherche : Automate de Tokens (4)
● La définition de l’automate de Tokens pour l’ensemble des caractères ‘O’, ’T’, ’I’, ‘V’
○ Compilation
■ fstcompile : compile le fichier de définition en binaire
■ fstrmepsilon : élimine le symbole <eps> pour la determinization
■ fstarcsort : trie les arcs ds l’ordre alpha
■ fstdraw : Designe le graphe de l’automate ==>
$fstcompile --isymbols=tokens.txt --osymbols=tokens.txt
--keep_isymbols=false --keep_osymbols=false Token.txt Token.fst
$fstrmepsilon Token.fst Tokens
$fstarcsort --sort_type=olabel Tokens.fst T.fst
$fstdraw --isymbols=tokens.txt --osymbols=tokens.txt -portrait T.fst T.grph
$dot -Tpng T.grph > T.png
16. Graphe de recherche : Automate de lexique (1)
● Format du fichier de lexique “lexicon.txt” :
○ <mot> <caractère> <caractère> …...
● Les symboles d’entrée et de sortie de l’automate de lexique
ART A R T
ARTICLE A R T I C L E
Symboles d’entrée
SymEntrée (tokens.txt)
Symboles de sortie
SymSortie (words.txt)
<eps> 0
<blk> 1
#0 2
#1 3
A 4
R 5
T 6
I 7
C 8
L 9
E 10
<eps> 0
ART 1
ARTICLE 2
#0 3
17. Graphe de recherche : Automate de lexique (2)
● Problème : L’ambiguïté lexicale
○ La déterminisation de l’automate de lexique est impossible quand un mot court peut être le
préfixe d’un autre mot plus long.
■ Exemple : le mot “ART” est le préfixe de “ARTICLE”.
● Solution : Ajouter un symbole d'ambiguïté lexicale #1
○ Ajouter #1 à la fin du mot le plus court (ART#1).
■ Exemple
ART A R T
ARTICLE A R T I C L E
ART A R T #1
ARTICLE A R T I C L E
18. Graphe de recherche : Automate de lexique (3)
● Création du Lexique
○ Fichier d’entrée : liste des mots du lexique
○ Le lexique
○ Le lexique pondéré (exigence de l’outil de Kaldi “make_lexicon.pl”)
○ Le lexique pondéré avec les symboles d'ambiguïté
$cat input_file.txt
ART
ARTICLE
$makelexicon.sh input_file.txt > lexicon.txt
$cat lexicon.txt
ART A R T
ARTICLE A R T I C L E
$perl -ape 's/(S+s+)(.+)/${1}1.0t$2/;' < lexicon.txt > lexiconprob.txt
$cat lexiconprob.txt
ART 1.0 A R T
ARTICLE 1.0 A R T I C L E
$add_lex_disambig.pl lexiconprob.txt lexiconprob_disambig.txt
ART 1.0 A R T #1
ARTICLE 1.0 A R T I C L E
19. Graphe de recherche : Automate de lexique (4)
● Définition de l’automate de lexique
● Compilation
■ fstcompile
$make_lexicon_fst.pl [--pron-probs] lexiconprob_disambig.txt > Lexiconfst.txt
0 1 A ART
1 2 R <eps>
2 3 T <eps>
3 0 #1 <eps>
0 4 A ARTICLE
4 5 R <eps>
5 6 T <eps>
6 7 I <eps>
7 8 C <eps>
8 9 L <eps>
9 0 E <eps>
0
$fstcompile --isymbols=tokens.txt --osymbols=words.txt
--keep_isymbols=false --keep_osymbols=false Lexiconfst.txt Lexicon.fst
20. Graphe de recherche : Automate de lexique (5)
● Compilation
■ fstaddselfloops : ajouter une transition en boucle qui représente le symbole #0
■ fstarcsort :
■ fstdraw
$word_disambig_symbol=`grep #0 words.txt | awk '{print $2}'` // recuperer l’indice de symbole #0
$word_epselon_symbol=`grep <eps> words.txt | awk '{print $2}'` // de la list des symboles d’entrées words.txt
$fstaddselfloops "echo $word_epselon_symbol |" "echo $word_disambig_symbol |" Lexicon.fst Lexicon2.fst
$fstarcsort --sort_type=olabel Lexicon2.fst Lex.fst
<esp>:#0
21. Graphe de recherche : Automate de lexique (6)
● Déterminisation et minimisation
■ fstdeterminizestar : élimine les symboles <esp> et regroupe les états dont les transitions sont
identiques (regroupement des préfixes)
■ fstminimize : produit un automate avec un nombre minimal d'états qui est équivalent à l’automate
(regroupement des suffixes).
■ fstdraw
$fstdeterminizestar lex.fst lexDet.fst
$fstminimize lexDet.fst lexDet_Min.fst
<esp>:#0
22. Graphe de recherche : Automate de Grammaire (1)
● Grammaire pour la vérification lexicale (FSA)
○ Définition de l’automate de Grammaire
● Les symboles d’entrée et sortie de l’automate de Grammaire
$iso_word_fst.py words > grammaire.txt
0 1 ART ART
0 1 ARTICLE ARTICLE
1
Symboles d’entrée
SymEntrée (words.txt)
Symboles de sortie
SymSortie (words.txt)
<eps> 0
ART 1
ARTICLE 2
#0 3
<eps> 0
ART 1
ARTICLE 2
#0 3
23. Graphe de recherche : Automate de Grammaire (2)
● Grammaire pour la vérification lexicale (FSA)
○ Compilation de l’automate de Grammaire
■ Fstcompile
■ Fstdraw
$fstcompile --isymbols=words.txt --osymbols=words.txt
--keep_isymbols=false --keep_osymbols=false grammaire.txt G.fst
$fstdraw --isymbols=words.txt --osymbols=words.txt -portrait G.fst G.grph
$dot -Tpng G.grph > G.png
24. Graphe de recherche : Automate de Grammaire (2)
● Grammaire à partir d’un modèle de langage de n-gram
○ Format ARPA du modèle de langage de 2-gram (2-gram_ARPA.lm)
■ pour la phrase “<s> ART ARTICLE </s>”
$cat 2-gram_ARPA.lm
data
ngram 1=4
ngram 2=3
1-grams:
-0.602060 </s>
-99 <s> -0.000000
-0.602060 ART -0.000000
-0.602060 ARTICLE -0.000000
2-grams:
-0.602060 <s> ART
-0.602060 ART ARTICLE
-0.602060 ARTICLE </s>
end
25. Graphe de recherche : Automate de Grammaire (2)
● Grammaire à partir d’un modèle de langage de n-gram
○ Ambiguïté grammaticale : quand un n-gram fait partie d’un autre n-gram la déterminisation de
l’automate de grammaire n’est pas possible.
○ Solution : représenter les replis du modèle de langage par des transitions représentant le
symbole d’ambiguïté grammatical #0
ART // 1-gram
ART ARTICLE // 2-gram
26. Graphe de recherche : Automate de Grammaire (2)
● Grammaire à partir d’un modèle de langage de n-gram
○ Conversion du modèle de langage 2-gram_ARPA.lm au format ARPA vers le format OpenFst
afin d'obtenir la définition de l’automate de Grammaire correspondant.
■ arpa2fst : convertit et compile un modèle de langage au format ARPA vers le format OpenFST (binaire)
■ fstprint : écrit l’automate de grammaire au format texte (LM_FST_SYNTAX.txt)
■ remove_oovs.pl : supprime les états et les arcs qui contiennent les OOV (<UNK>)
■ eps2disambig.pl : remplace les symboles <eps> dans la syntaxe de l’automate par #0
■ s2eps.pl : remplace le symbole <s> et </s> par le symbole <eps>
$cat 2-gram_ARPA.lm | arpa2fst --disambig-symbol=#0 - | remove_oovs.pl /dev/null |
utils/eps2disambig.pl | utils/s2eps.pl > grammaire.txt
0 1 #0 <eps>
0 2 ART ART 1.38629448
1 2 ART ART 1.38629448
1 3 ARTICLE ARTICLE 1.38629448
1 1.38629448
2 1 #0 <eps>
2 3 ARTICLE ARTICLE 1.38629448
3 1 #0 <eps>
3 1.38629448
27. Graphe de recherche : Automate de Grammaire (2)
● Grammaire à partir d’un modèle de langage de n-gram
○ Compilation
■ fstcompile
■ fstdraw
$fstcompile --isymbols=words.txt --osymbols=words.txt
--keep_isymbols=false --keep_osymbols=false grammaire.txt G.fst
28. Graphe de recherche : Automate composé (1)
● Le graphe de recherche (S) est la composition (ο) de l’automate de Tokens
(T.fst), l’automate de Lexique (L.fst) et l’automate de grammaire (G.fst)
déterminé (det) et minimisé (min)
○ Formule de composition :
○
29. Graphe de recherche : Automate composé (1)
● La construction de l’automate TLG.fst
○ Composition et déterminisation des automates L.fst et G.fst
■ Fsttablecompose : compose deux automates (par exemple; L.fst et G.fst)
■ Fstdeterminizestar : la version Kaldi de l’outil fstrmepselon et determinize de OpenFst
■ Fstarcsort
■ Fstdraw
○ Pour la grammaire de vérification lexicale
$fsttablecompose L.fst G.fst | fstdeterminizestar | fstarcsort --sort_type=ilabel > LG.fst
30. Graphe de recherche : Automate composé (1)
● La construction de l’automate TLG.fst
○ Composition et déterminisation des automates L.fst et G.fst
■ Fsttablecompose : compose deux automates (par exemple; L.fst et G.fst)
■ Fstdeterminizestar : la version Kaldi de l’outil fstrmepselon et determinize de OpenFst
■ Fstarcsort
■ Fstdraw
○ Pour un modèle de langage à 2-gram
$fsttablecompose L.fst G.fst | fstdeterminizestar | fstarcsort --sort_type=ilabel > LG.fst
31. Graphe de recherche : Automate composé (1)
● La construction de l’automate TLG.fst
○ Composition et minimisation des automates T.fst et LG.fst
■ Fsttablecompose : compose deux automates (par exemple; T.fst et LG.fst)
■ Fstminimizeencoded : la version Kaldi de l’outil fstminimize de OpenFst
■ Fstarcsort
■ Fstdraw
○ Pour la grammaire de la vérification lexicale
fsttablecompose T.fst LG.fst | fstminimizeencoded | fstarcsort --sort_type=ilabel > TLG.fst
32. Graphe de recherche : Automate composé (1)
● La construction de l’automate TLG.fst
○ Composition et minimisation des automates T.fst et LG.fst
■ Fsttablecompose : compose deux automates (par exemple; T.fst et LG.fst)
■ Fstminimizeencoded : la version Kaldi de l’outil fstminimize de OpenFst
■ Fstarcsort
■ Fstdraw
○ Pour un modèle de langage à 2-gram
$fsttablecompose T.fst LG.fst | fstminimizeencoded | fstarcsort --sort_type=ilabel > TLG.fst
33. Décodage de kaldi
● Formule de décodage de Viterbi pour la reconnaissance de la parole et de l’
écriture
● Formule simplifiée de Kaldi
avec
34. Décodage de Kaldi : décodage en une passe
● Décodage rapide de Kaldi en utilisant l’outil decode-faster
○ Paramètres de décodage
■ beam : paramètre d’élagage des hypothèses de la reconnaissance
■ α : paramètre de mise à l’échelle du modèle optique
○ Ligne de commande
# Les paramètres de décodage à définir par l’utilisateur (les valeur par défaut sont présent ici)
beam= 16 // le paramètre d’élagage (beam-pruning)
init_acwt= 0.1 // le paramètre alpha de mise en échelle le modèle optique
# Répertoires
lm_dir= // Répertoires de l‘ automate TLG.fst et la liste des mots words.txt
OCR= // Répertoires des probabilités-log fourni par le modèle optique
dir= // Répertoires de l’emplacement de fichier des transcriptions (test_out.tra)
decode-faster --beam=$beam --acoustic-scale=$init_acwt --word-symbol-table=$lm_dir/words.txt --allow-partial=true
$lm_dir/TLG.fst ark:$OCR ark,t:$dir/test_out.tra
35. Décodage de Kaldi : décodage en deux passes
● Décodage en 2-passes de Kaldi (1er passe)
○ Paramètres de la première passe
■ beam : paramètre d’élagage des hypothèses
■ α : paramètre de mise à l’échelle du modèle optique
■ Lattice-beam : paramètre d’élagage de génération de treillis
○ Ligne de commande de la première passe de décodage
# Les paramètres de décodage à définir par l’utilisateur (les valeur par défaut sont présent ici)
beam= 16 // le paramètre d’élagage (beam-pruning)
init_acwt= 0.1 // le paramètre alpha de mise en échelle du modèle optique
lat-beam=10 // le paramètre d’élagage (beam-pruning) de génération du treillis.
// Plus grand -> plus lent, et plus profond treillis
# Répertoires
lm_dir= // Répertoires de l‘ automate TLG.fst et de la liste des mots words.txt
OCR= // Répertoires des probabilités-log fourni par le modèle optique
dir= // Répertoires de l’emplacement de fichier des transcriptions (test_out.tra)
latgen-faster-mapped --beam=$beam --lattice-beam=$latbeam --acoustic-scale=$init_acwt --allow-partial=true
--word-symbol-table=$lm_dir/words.txt $lm_dir/TLG.fst ark:$dir/$OCR ark,t:$dir/test_out.lat
36. Décodage de Kaldi : décodage en deux passes
● Encodage en 2-passes de Kaldi (2ième passe)
○ Paramètres de la deuxième passe de décodage
■ : paramètre d’insertion de mot
■ α : paramètre de mise à l’échelle du modèle optique
○ Ligne de commande de la deuxième passe de décodage
# Les paramètres de décodage à définir par l’utilisateur (les valeur par défaut sont présent ici)
beta=-0.5 // le paramètre d’insertion de mot (beta)
acwt=1.2 // le paramètre de mise en échelle le modèle optique (alpha)
# Répertoires
lm_dir= // Répertoires de l‘ automate TLG.fst et la liste des mots words.txt
dir= // Répertoires de l’emplacement de fichier des transcriptions (test_out.tra)
lattice-add-penalty --word-ins-penalty=$init_wrdp ark:$dir/lat_out_1st_pss.lat ark,t:$dir/lat_2nd_pss.lat
lattice-scale --acoustic-scale=$acwt ark:$dir/lat_out_2nd_pss.lat ark:- |
lattice-best-path --word-symbol-table=$lm_dir/words.txt ark:- ark,t:$dir/test_out.tra;
37. Optimisation des paramètres du décodage:
Paramètres d’élagage beam et lattice-beam
● Critères :
○ Minimiser le temps de décodage
○ Maximiser la performance de la reconnaissance en minimisant le taux d'erreur de mots (WER%)
● Conditions initiales :
○ Fixer les paramètres et
■ par exemple = 0.1 et = 0.0
○ Définir des intervalles pour les paramètres d’élagage, par exemple
■ Beam = [16,15,14,13,...,10]
■ Lattice-beam = [10,9,8,...,5]
● Boucler
○ Evaluer la performance (WER%) sur la base de validation
38. Optimisation des paramètres du décodage:
Paramètres d’élagage beam et lattice-beam
● Algorithme d’optimisation des paramètres :
# Les paramètres de décodage à définir par l’utilisateur (les valeur par défaut sont présent ici)
alpha1=0.1 # le paramètre alpha de mise en échelle le modèle optique utilisé dans la première passe de décodage
alpha2=0.1 # le paramètre alpha de mise en échelle le modèle optique utilisé dans la deuxième passe de décodage
beta=0.0 # le paramètre d’insertion de mot
beam=[16,15,10] # le paramètre d’élagage des hypothèses
lattice-beam=[10,9,...,5] # le paramètre d’élagage de génération de treillis.
For Bem in beem do
For lat-Bem in lattice-beem do
# première passe de décodage
time latgen-faster-mapped --beam=B --lattice-beam=lat-Bem --acoustic-scale=alpha1
--allow-partial=true --word-symbol-table=words.txt TLG.fst ark:$OCR ark,t:lat_out_1st_pss.lat
# Deuxième passe de décodage
lattice-add-penalty --word-ins-penalty=beta ark:lat_out_1st_pss.lat ark,t:lat_2nd_pss.lat
lattice-scale --acoustic-scale=alpha2 ark:$dir/lat_out_2nd_pss.lat ark:- |
lattice-best-path --word-symbol-table=$lm_dir/words.txt ark:- ark,t:test_out.tra;
# Evaluation de performance en terme de WER%
cat $dir/test_out.tra | utils/int2sym.pl -f 2- $lm_dir/words.txt > $dir/test_out.txt
compute-wer --text --mode=all ark:$labels_dir/test/VT.txt ark:$dir/test_out.txt > $dir/score.log
endfor
endfor
39. Optimisation des paramètres du décodage:
Paramètres et
● Critère :
○ Minimiser le WER
● Conditions initiales :
○ Utiliser les paramètres d’élagages beam et lattice-beam optimisés
■ par exemple beam = 13.0 et lattice-beam = 8.0
○ Définir des intervalles pour les paramètres et , par exemple
■ 1
= 0.3 soit la valeur médiane de l’intervalle défini pour 2
■ 2
=[0.1,0.2,0.3,0.4,0.5]
■ = [0.5 0.0 -0.5 -1.0 -1.5]
○ Evaluer la performance (WER%) sur la base de validation
● Critère d’arrêt
○ 2
qui minimise le WER et qui ne soit pas une des valeurs extrêmes de l’intervalle de 2
○ Sinon on recommence l’optimisation pour 1
= 2
en choisissant un nouvel intervalle centré par
1.
40. Optimisation des paramètres du décodage:
Paramètres d’élagage beam et lattice-beam
● Algorithme d’optimisation
# Les paramètres de décodage à définir par l’utilisateur (les valeur par défaut sont présent ici)
alpha1=0.3 # le paramètre alpha de mise en échelle le modèle optique utilisé dans la première passe de décodage
alpha2=[0.1,0.2,0.3,0.4,0.5] # le paramètre alpha de mise en échelle utilisé dans la deuxième passe de décodage
beta=[0.5,0.0,-0.5,-1.0,-1.5] # le paramètre d’insertion de mot
beam=13.0 # valeur optimal du paramètre d’élagage des hypothèses
lattice-beam=0.8 # valeur optimal du paramètre d’élagage de génération de treillis.
# première passe de décodage
latgen-faster-mapped --beam=13.0 --lattice-beam=0.8 --acoustic-scale=alpha1
--allow-partial=true --word-symbol-table=words.txt TLG.fst ark:OCR ark,t:lat_out_1st_pss.lat
For Beta in beta do
# Deuxième passe de décodage
lattice-add-penalty --word-ins-penalty=Beta ark:lat_out_1st_pss.lat ark,t:lat_2nd_pss.lat
For Alfa2 in alpha2 do
lattice-scale --acoustic-scale=Alfa2 ark:$dir/lat_out_2nd_pss.lat ark:- |
lattice-best-path --word-symbol-table=$lm_dir/words.txt ark:- ark,t:test_out_Beta_Alfa2.tra;
# Evaluation de performance en terme de WER%
cat $dir/test_out_Beta_Alfa2.tra | utils/int2sym.pl -f 2- $lm_dir/words.txt > test_out_Beta_Alfa2.txt
compute-wer --text --mode=all ark:VT.txt ark:test_out_Beta_Alfa2.txt > score_Beta_Alfa2.log
endfor
endfor