SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Prise en main du décodage Kaldi/WFST
Toolkit
Wassim Swaileh
Chaîne de traitement de la reconnaissance d'écriture
W
Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
W
Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
Automate de
Lexique (L)
W
Chaîne de traitement de la reconnaissance d'écriture
Automate des
Tokens (T)
Automate de
Lexique (L)
Automate de
Grammaire (G)
W
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
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
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 :
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
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
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 :
○
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
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
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
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
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
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
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
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;
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
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
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.
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
Merci pour votre attention !!!
Le décodage Kaldi/FST pour la reconnaissance de l'écriture

Contenu connexe

Tendances

ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleAlexandru Radovici
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2moisko
 
ALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraiteALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraiteAlexandru Radovici
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
ALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraiteALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraiteAlexandru Radovici
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RLaurent Beauguitte
 
ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)Alexandru Radovici
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Yi YANG
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaPatrick Allaert
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Alexis Sukrieh
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
ALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssemblyALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssemblyAlexandru Radovici
 
ALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionAlexandru Radovici
 

Tendances (20)

ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
 
ALF 4 - Grammaires
ALF 4 - GrammairesALF 4 - Grammaires
ALF 4 - Grammaires
 
ALF 8 - Generation du code
ALF 8 - Generation du codeALF 8 - Generation du code
ALF 8 - Generation du code
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
ALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraiteALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraite
 
ALF 12 - Optimisations
ALF 12 - OptimisationsALF 12 - Optimisations
ALF 12 - Optimisations
 
Initiation r
Initiation rInitiation r
Initiation r
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
ALF 8 - Generation de code
ALF 8 - Generation de codeALF 8 - Generation de code
ALF 8 - Generation de code
 
ALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraiteALF 7 - Arbre de syntaxe abstraite
ALF 7 - Arbre de syntaxe abstraite
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec R
 
ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et Pinba
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
ALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssemblyALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssembly
 
ALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonction
 

Similaire à Le décodage Kaldi/FST pour la reconnaissance de l'écriture

Introduction au langage python notion de base
Introduction au langage python notion de baseIntroduction au langage python notion de base
Introduction au langage python notion de basemohamedAitomar1
 
Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)mohamedAitomar1
 
Beyond F5 - windbg et .Net
Beyond F5 - windbg et .NetBeyond F5 - windbg et .Net
Beyond F5 - windbg et .NetYann Schwartz
 
cour de compilation
cour de compilation cour de compilation
cour de compilation Ens Kouba
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieLoic Yon
 
Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
Cours programmation en langage C.pdf
Cours  programmation  en  langage  C.pdfCours  programmation  en  langage  C.pdf
Cours programmation en langage C.pdfkhalidmoussaid4
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Chapitre 1 (algorithme)
Chapitre 1 (algorithme)Chapitre 1 (algorithme)
Chapitre 1 (algorithme)mahbouba
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationYann Caron
 
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...Horgix
 

Similaire à Le décodage Kaldi/FST pour la reconnaissance de l'écriture (16)

Formation python
Formation pythonFormation python
Formation python
 
Introduction au langage python notion de base
Introduction au langage python notion de baseIntroduction au langage python notion de base
Introduction au langage python notion de base
 
Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)Introduction au langage python (Notion de base)
Introduction au langage python (Notion de base)
 
Beyond F5 - windbg et .Net
Beyond F5 - windbg et .NetBeyond F5 - windbg et .Net
Beyond F5 - windbg et .Net
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Formation python
Formation pythonFormation python
Formation python
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Cours programmation en langage C.pdf
Cours  programmation  en  langage  C.pdfCours  programmation  en  langage  C.pdf
Cours programmation en langage C.pdf
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Chapitre 1 (algorithme)
Chapitre 1 (algorithme)Chapitre 1 (algorithme)
Chapitre 1 (algorithme)
 
R for data analysis
R for data analysisR for data analysis
R for data analysis
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
 
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...
 

Le décodage Kaldi/FST pour la reconnaissance de l'écriture

  • 1. Prise en main du décodage Kaldi/WFST Toolkit Wassim Swaileh
  • 2. Chaîne de traitement de la reconnaissance d'écriture W
  • 3. Chaîne de traitement de la reconnaissance d'écriture Automate des Tokens (T) W
  • 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
  • 41. Merci pour votre attention !!!