Présenter par : Mounir GRARI RAPPORT DE PROJET SOUS HTK Reconnaissance de mots isolés Et Reconnaissance de mots connectés Présenter par : Mounir GRARI
Reconnaissance de mots isolés Et Reconnaissance de mots connectés Plan Introduction Construction de la base de données Construction de modèle de langage Acquisition des fichiers sons Étiquetage des fichiers sons Représentation acoustique du signal Description des modèles Modèles de Markov Fichiers gabarits Apprentissage Apprentissage avec l’algorithme Vitervi (HInit) Apprentissage avec l’algorithme de Baum Welch (HRest) Ré estimation avec l’algorithme de Baum Welch de tous les models a la fois (HERest) Reconnaissance HVite et Hresults Etude d’autres possibilités; vocabulaire restreint, vocabulaire plus complexe, analyse par mots et analyse par phonème Etude du cas multi locuteur Synthèse des résultats trouvés Conclusion
Reconnaissance de mots isolés Et Reconnaissance de mots connectés Introduction : Le but est de construire un système de reconnaissance de mots isolés et ensuite de phrase qui suive une certaine syntaxe de plusieurs mots et de le valider sous l'environnement HTK (Hidden Markov Model Toolkit)
Reconnaissance de mots isolés Et Reconnaissance de mots connectés modèle de langage Début Fin نادي على Pause محمد أمين كلم ركب إهتف لي صفر واحد إثنان عشرة تسعون عشرون و Le modèle de langage est un réseau d'éléments lexicaux qui décrit la façon dont ils s'enchaînent dans les phrases. Le modèle de langage que nous allons implémenter est le suivant:
Acquisition des fichiers sons : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Acquisition des fichiers sons : On utilise le logiciel Praat pour l’acquisition des fichiers sons du vocabulaire. Praat est un outil qui nous permet de lire un fichier son (se balader dans le fichier, écouter, découper…) ou même en créer un nouveau, de faire une analyse acoustique (durées, Fo, intensité, valeurs spectrales) … Nous allons utiliser Praat pour créer nos fichiers sons.
Étiquetage des fichiers sons : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Étiquetage des fichiers sons : La santaxe de la Commande HSlab: HSlab –F WAVE –L labels/ihtif.lab Signal/ihtif.wav Étiquetage des fichiers sons : Le but de l'étiquetage est de délimiter chaque entité lexicale. Ceci sera fait manuellement avec le logiciel HSLab. Nous allons utiliser un étiquetage par phonème. La santaxe de la Commande HSlab: HSlab –F WAVE –L labels/ihtif.lab Signal/ihtif.wav Une fenêtre de l’outil HSlab s’affiche à l’écran comme suit :
Étiquetage des fichiers sons : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Étiquetage des fichiers sons : Le résultat de cette phase est une base de données des étiquettes des différents fichiers sons. (Les étiquettes sont dans le dossier labels) Étiquetage des fichiers sons : Le but de l'étiquetage est de délimiter chaque entité lexicale. Ceci sera fait manuellement avec le logiciel HSLab. Nous allons utiliser un étiquetage par phonème. La santaxe de la Commande HSlab: HSlab –F WAVE –L labels/ihtif.lab Signal/ihtif.wav Une fenêtre de l’outil HSlab s’affiche à l’écran comme suit : HSlab Les fichiers sons (.wav) Les étiquettes (.lab) Enregistrement et étiquetage des fichiers sons
Représentation acoustique du signal : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Représentation acoustique du signal : Hcopy Les fichiers sons (.wav) (hcopyliste.conf) Ihtif.wav Kallime.wav Amine.wav Les Fichiers MFCC ihtif.mfcc kallime.mfcc mohammed.mfcc etc Représentation acoustique du signal Fichier de configuration parametrisation.conf parametrisation.conf SOURCEFORMAT=WAVE TARGETKIND=MFCC_E_D WINDOWSSIZE=250000.0 TARGETRATE=10000.0 NUMCEPS=8 # nb de coeff MFCC USEHAMMING=T PREEMCOEF=0.97 NUMCHANS=26 CEPLIFTER=22 hcopyliste.conf signal/ihtif.wav mfcc/ihtif.mfcc signal/kallime.wav mfcc/kallime.mfcc signal/ala.wav mfcc/ala.mfcc signal/mohamed.wav mfcc/mohamed.mfcc .
Représentation acoustique du signal : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Représentation acoustique du signal : Le nombre de coefficients MFCC utilisé est 8 + l’energie + les dérivés (donc 18) Le résultat de cette phase est un ensemble de fichiers .mfcc dans le dossier mfcc contenant les coefficients.
Description des modèles : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Description des modèles : Pour chaque entité lexicale, on définira le modèle associé. Pour cela, on donnera la topologie de chaque modèle, le nombre d'états et les probabilités de transition entre les états. Exemple du model en phonétique représentant le mot du vocabulaire ihtif sil ih tif
Description des modèles : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Description des modèles : Fichiers gabarits : A chaque entité lexical (mot du vocabulaire) on va crée un fichier Gabarit (model) représentant l’entité lexical dans la pratique. <BeginHMM> <NumStates> 4 <VecSize> 18 <MFCC_D_E> <State> 2 <Mean> 18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 18 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 <State> 3 <TransP> 4 0.0 1.0 0.0 0.0 0.0 0.6 0.4 0.0 0.0 0.0 0.6 0.4 0.0 0.0 0.0 0.0 <EndHMM> Exemple : fichier gabarits/ihtif
Apprentissage avec l’algorithme Vitervi (HInit) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algorithme Vitervi (HInit) Apprentissage avec l’algorithme Vitervi (HInit) Chaque modèle doit être appris : les moyennes, les variances et les probabilités de transition entre états sont ré estimées jusqu'à ce qu'un seuil de convergence ou qu'un nombre maximum d'itération soient atteint. Ceci est fait par l'algorithme de Viterbi. Pour chaque phonème on applique la commande HInit
Apprentissage avec l’algorithme Vitervi (HInit) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algorithme Vitervi (HInit) Le fichier config/hinit.conf Le fichier listes/mfcc.lst #Fichier de configuration pour l’initialisation des #modèles de Markov par l’algorithme de Viterbi TARGETKIND = MFCC_E_D Le fichier config/hinit.conf mfcc/ihtif.mfcc mfcc/kallime.mfcc mfcc/ala.mfcc mfcc/mohamed.mfcc mfcc/amine.mfcc mfcc/nadi.mfcc ….
Apprentissage avec l’algorithme Vitervi (HInit) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algorithme Vitervi (HInit)
Apprentissage avec l’algorithme Vitervi (HInit) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algorithme Vitervi (HInit) La syntaxe de la commande HInit HInit -C config/hinit.conf -A -o hinit/cif -l cif -L labels/ -i 20 -T 1 -m 2 gabarits/0 -S listes/mfcc.lst
Apprentissage avec l’algorithme Vitervi (HInit) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algorithme Vitervi (HInit) Le fichier résultat de cette commande est hinit/ihtif qui contient ~o <STREAMINFO> 1 18 <VECSIZE> 18<NULLD><MFCC_E_D><DIAGC> ~h "hinit/ihtif" <BEGINHMM> <NUMSTATES> 4 <STATE> 2 <MEAN> 18 -6.005343e+000 -1.046386e+000 -7.661552e-001 8.069010e+000 -8.266843e+000 -5.747077e+000 -3.216688e-001 -8.078197e+000 8.653573e-001 1.482991e-002 -2.785692e-003 2.108349e-003 -1.385363e-003 -1.897629e-002 -1.652776e-002 -3.286432e-003 -2.792146e-002 2.159977e-004 <VARIANCE> 18 7.077799e+001 4.468427e+001 8.880889e+001 4.942561e+001 9.471810e+001 7.407012e+001 4.695766e+001 7.936121e+001 1.000000e-002 1.238934e-001 1.128693e-001 1.343194e-001 1.521769e-001 2.594025e-001 2.268354e-001 2.340412e-001 2.891582e-001 1.000000e-002 <GCONST> 4.371070e+001 <STATE> 3 -4.115136e+000 4.821393e+000 2.416528e-001 4.906225e+000 -2.838504e+000 -3.414094e+000 1.463784e+000 -6.460936e+000 8.129345e-001 -3.213571e-002 1.019199e-002 -5.698932e-003 3.618972e-003 4.414299e-002 3.562211e-002 6.894447e-003 6.707498e-002 -5.552998e-004 1.517968e+001 2.769409e+001 1.666672e+001 2.582353e+001 4.500641e+001 9.010397e+001 2.904503e+001 7.800780e+001 1.000000e-002 2.547789e-002 5.287474e-002 7.262968e-002 9.334487e-002 1.291680e-001 1.512521e-001 1.913001e-001 1.906947e-001 1.000000e-002 <GCONST> 3.316070e+001 <TRANSP> 4 0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 9.977974e-001 2.202643e-003 0.000000e+000 0.000000e+000 0.000000e+000 9.944401e-001 5.559846e-003 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 <ENDHMM>
Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage Le résultat de cette phase est un ensemble de fichiers dans le dossiers hinit/
Apprentissage avec l’algo de Baum Welch (HRest) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algo de Baum Welch (HRest) Les modèles sont ensuite estimés de façon indépendante avec l’algorithme de Baum Welch en utilisant la commande HRest. Pour chaque phonème on applique la commande HRest Le fichier config/hrest.conf Le fichier listes/mfcc.lst : deja utilisé avec la commande hinit #Fichier de configuration pour la re-estimation des #modèles de Markov par l’algorithme de Viterbi TARGETKIND = MFCC_E_D
Apprentissage avec l’algo de Baum Welch (HRest) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algo de Baum Welch (HRest) La syntaxe de la commande HRest : HRest -C config/hrest.conf -A -l aaich -M hrest/ -L labels/ -i 20 -T 1 -m 2 hinit/aaich -S listes/mfcc.lst
Apprentissage avec l’algo de Baum Welch (HRest) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algo de Baum Welch (HRest) Le fichier résultat de cette commande est hrest/aaich qui contient : ~o <STREAMINFO> 1 18 <VECSIZE> 18<NULLD><MFCC_E_D><DIAGC> ~h "aaich" <BEGINHMM> <NUMSTATES> 4 <STATE> 2 <MEAN> 18 -4.522240e+000 -5.880653e-001 8.032802e+000 1.781352e+001 -1.238021e+001 -1.077035e+001 -7.107430e+000 -8.941146e+000 7.310240e-001 5.426434e-003 7.549872e-002 1.450049e-001 6.228557e-002 -2.826517e-002 -1.814440e-001 -7.717894e-002 -2.151994e-001 1.169653e-003 <VARIANCE> 18 1.766042e+001 6.102851e+000 1.192767e+001 2.540695e+001 1.958749e+001 5.041793e+001 1.922638e+001 3.833256e+001 2.337085e-003 1.619523e-001 2.678286e-001 1.185456e-001 3.499088e-001 3.168113e-001 3.927653e-001 3.371374e-001 2.182082e-001 8.624458e-006 <GCONST> 2.823985e+001 <STATE> 3 -1.939978e+001 3.436779e+000 8.813956e+000 6.829864e+000 1.483930e+000 -5.005201e+000 -6.350124e+000 -7.545569e+000 7.231323e-001 6.521484e-002 -5.791717e-002 -7.582700e-002 1.413276e-002 -3.901125e-002 6.619526e-003 -4.050380e-003 -9.888211e-002 1.033234e-003 8.760622e+001 6.642943e+000 2.810736e+001 2.752651e+001 1.858868e+001 3.854350e+001 3.150053e+001 6.762994e+001 2.326111e-003 2.225343e-001 1.282824e-001 2.050075e-001 1.057131e-001 3.768567e-001 7.502362e-001 3.706125e-001 3.885895e-001 1.905958e-005 <GCONST> 3.281725e+001 <TRANSP> 4 0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 9.883134e-001 1.168664e-002 0.000000e+000 0.000000e+000 0.000000e+000 9.933964e-001 6.603613e-003 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 <ENDHMM>
Apprentissage avec l’algo de Baum Welch (HRest) Reconnaissance de mots isolés Et Reconnaissance de mots connectés Apprentissage avec l’algo de Baum Welch (HRest) Le résultat de cette phase est un ensemble de fichiers dans le dossiers hrest/ On remarque que mon langage contient 50 syllabes.
Reconnaissance de mots isolés Et Reconnaissance de mots connectés On doit définir le modèle de notre langage ; la grammaire de notre langage est définie dans le fichier listes/modeleLangage.txt : $chiff = ciffr | wahid |itnan | thalathah | arrbaaah | khamsah | sitah | sabaah | thamanniah | tisaah | aacharah | i7daaachar | ithnaaachar | thalathataaachar | arrbaaataaachar | khamsataaachar | sitataaachar | sabaataaachar | thamanniataaachar | tisaataaachar | aaichroun | thalatoun | arrbaaaoun | khamsoun | sitoun | sabaaoun | thamanoun | tisaaoun; $sil = sil ; $prenom = [ mohamed sil ] amine | mohamed ; $numerotel = $chiff $sil $chiff [ $sil wa $sil $chiff ] $sil ; (SENT-START ( $sil ihtif $sil li $sil $numerotel ) | ( $sil nadi $sil ala $sil $prenom $sil ) | ( $sil kallime $sil $prenom $sil ) | $chiff SENT-END)
Reconnaissance de mots isolés Et Reconnaissance de mots connectés On va appliquer la commande HParse à cette grammaire pour générer le modeleDeMots La syntaxe de la commande HParse: HParse -T 1 listes/modelelangage.txt listes/modeledemots.txt Le résultat est un fichier listes/modeledemots.txt qui contient tous les mots de notre langage : VERSION=1.0 N=151 L=266 I=0 W=!NULL I=1 W=!NULL I=2 W=SENT-START I=3 W=sil I=4 W=ihtif . . . .
Reconnaissance de mots isolés Et Reconnaissance de mots connectés Dictionnaire du langage : Un fichier listes/dictionnaire.txt contient le dictionnaire de notre langage : SENT-START [ ] SENT-END [ ] ciffr cif fr wahid wa hid itnan ith nan thalathah tha la thah arrbaaah arr ba aah khamsah kham sah sitah si tah sabaah sab aah thamanniah tha man niah tisaah tis aah aacharah aa cha rah
Reconnaissance de mots isolés Et Reconnaissance de mots connectés La reconnaissance sera ensuite effectuée sur chaque fichier en utilisant successivement les modèles issus de HInit ceux issus de HRest et ceux de HERest afin d’évalué l’apport des divers apprentissage. Pour cela nous allons utiliser la commande HVite. La syntaxe de la commande HVite: HVite -T 1 -A -w listes/modeledemots.txt -d hinit/ -l resultat/hinit/ -S listes/mfcc.ar.lst listes/dictionnaire.txt listes/listemodeles.txt Il utilise : listes/modeledemots.txt générer avec HParse. listes/dictionnaire.txt qui contient le dictionnaire du langage. listes/listemodeles.txt qui contient les phonèmes du langage. hrest/ le dossier contenant les estimations par hinit hrest ou herest. resultat/hrest/ dans lequel les résultats de la commande serons mis. listes/mfcc.ar.lst la listes des fichiers MFCC des fichiers à reconnaître.
Reconnaissance de mots isolés Et Reconnaissance de mots connectés les deux premières chaînes sont reconnues entièrement :
Reconnaissance de mots isolés Et Reconnaissance de mots connectés Le résultat est un fichier « .rec » pour chaque fichier à reconnaître. Par exemple pour ihtifli066ar.wav en utilisant les estimations par hinit le résultat est resultats/hinit/ihtifli066ar.rec 0 320000 sil -1088.285034 320000 4620000 ihtif -9798.015625 4620000 5030000 sil -1100.481689 5030000 8090000 li -9363.433594 8090000 8250000 sil -433.379944 8250000 10290000 ciffr -4814.938965 10290000 12160000 sil -4441.611328 12160000 16880000 sitah -10271.931641 16880000 17600000 sil -1854.313232 17600000 19780000 wa -7324.110352 19780000 20510000 sil -2059.960449 20510000 27070000 sitoun -16285.652344 27070000 27260000 sil -438.454254
L’évaluation des performances: Reconnaissance de mots isolés Et Reconnaissance de mots connectés L’évaluation des performances: La syntaxe de la commande HResults: HResults -T 1 -L labels/ listes/listemodeles.txt resultat/hinit/ihtifli066ar.rec On remarque que le taux de la reconnaissance est de 46.67% en utilisant les estimations de hinit, ou ceux de hrest. Analyse des résultats : H = 7 : Nombre d'éléments bien classés D =2 : Nombre d'éléments supprimés S = 6 : Nombre d'éléments substitués I = 0 : Nombre d'éléments insérés N =15 : Nombre total d'éléments
Langage restreint et reconnaissance par phonème Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage restreint et reconnaissance par phonème On utilise la grammaire suivante La reconnaissance donne ce qui suit : $chiff = ciffr | wahid ; $sil = sil ; $prenom = mohamed ; (SENT-START ( $sil kallime $sil $prenom $sil ) | $sil $chiff $sil SENT-END)
Langage restreint et reconnaissance par phonème Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage restreint et reconnaissance par phonème On affiche les résultats avec HResults. Les résultats pour la reconnaissance de mots isolés : Les résultats pour la reconnaissance de mots connectés :
Langage restreint et reconnaissance par mot Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage restreint et reconnaissance par mot Nous allons utiliser un vocabulaire de 4mots. Nous allons faire un étiquetage par mots (donc seulement 4 étiquette) On utilise la grammaire suivante $chiff = ciffr | wahid ; $sil = sil ; $prenom = mohamed ; (SENT-START ( $sil kallime $sil $prenom $sil ) | $sil $chiff $sil SENT-END)
Langage restreint et reconnaissance par mot Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage restreint et reconnaissance par mot La reconnaissance donne ce qui suit :
Langage restreint et reconnaissance par mot Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage restreint et reconnaissance par mot On affiche les résultats avec HResults. Les résultats pour la reconnaissance de mots isolés : Les résultats pour la reconnaissance de mots connectés :
Langage complexe et reconnaissance par mot Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage complexe et reconnaissance par mot Nous allons utiliser un vocabulaire de 36 mots. Nous allons faire un étiquetage par mots (donc seulement 37 étiquette) On utilise la grammaire suivante $chiff = ciffr | wahid ; $sil = sil ; $prenom = mohamed ; (SENT-START ( $sil kallime $sil $prenom $sil ) | $sil $chiff $sil SENT-END)
Langage complexe et reconnaissance par mot Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage complexe et reconnaissance par mot La reconnaissance donne ce qui suit :
Langage complexe et reconnaissance par mot Reconnaissance de mots isolés Et Reconnaissance de mots connectés Langage complexe et reconnaissance par mot On affiche les résultats avec HResults. Les résultats pour la reconnaissance de mots isolés : Les résultats pour la reconnaissance de mots connectés :
Synthèse des résultats trouvés : Reconnaissance de mots isolés Et Reconnaissance de mots connectés Synthèse des résultats trouvés : Reconnaissance par phonème Reconnaissance par mot Mots isolé Mots connectés Vocabulaire grand (36mots) ~50% ~ 35% - 46 % ~100% ~60% Vocabulaire petit (4 à 10 mots) ~ 40 % ~80%
Etude du cas multi locuteur Reconnaissance de mots isolés Et Reconnaissance de mots connectés Etude du cas multi locuteur Nous allons utiliser deux locuteurs ; le résultat est : On remarque qu’il y reconnaissance totale des mots isolés.
Etude du cas multi locuteur Reconnaissance de mots isolés Et Reconnaissance de mots connectés Etude du cas multi locuteur On affiche les résultats avec HResults. Les résultats pour la reconnaissance de mots isolés du locuteur 1 Un taux de reconnaissance est de 100% en utilisant les estimations de hinit et ceux de hrest
Etude du cas multi locuteur Reconnaissance de mots isolés Et Reconnaissance de mots connectés Etude du cas multi locuteur On affiche les résultats avec HResults. Les résultats pour la reconnaissance de mots isolés du locuteur 2 Un taux de reconnaissance est de 100% en utilisant les estimations de hinit et ceux de hrest
Reconnaissance de mots isolés Et Reconnaissance de mots connectés Conclusion : Le présent rapport vise à expliquer la construction d’un système de reconnaissance de mots isolés et de phrase (mots connectés) qui suive une certaine syntaxe de plusieurs mots. Avec une reconnaissance par phonème et une grammaire de langage plus simple j’ai arrivée a des taux de reconnaissance jusqu'à 46.67% pour des phrase comme « ihtif li 066 » ou même 50% pour des mots isolé « ciffr » et ensuite avec un modèle de langage plus complexe (plus utile) le taux diminue jusqu'à 40% pour une phrase tel que « ihtif li 0 66 58 11 69 », mais dans les deux cas les phrase sont souvent entièrement reconnue par le système Comme « kallime mohamed », ensuite j’ai fait une reconnaissance par mots qui donne de bons résultats surtout pour des mots isolés avec des taux de reconnaissance de 100%, et des taux entre 60% et 80% pour des mots connecté, et j’ai terminer avec un système multi locuteur qui fait une reconnaissance de 100% pour des mots isolés.
Merci