Ecole Polytechnique Année 2004-2005 February 28, 2005 Projet 3 : Reconnaissance du locuteur par l’algorithme EM Responsable: Randal Douc ([email protected]). 1 Préliminaires Le but de ce projet consistera à identifier un locuteur à partir d’un échantillon de parole en utilisant une méthode liée à l’algorithme EM. Commencez par récupérer les échantillons disponibles à l’adresse: http://www.cmap.polytechnique.fr/∼douc/Page/Teaching/Stat/locuteur.html La démarche générale de ce projet est la suivante: • Les signaux audio “.wav” sont prétraités de manière à associer à des intervalles de temps (de l’ordre de quelques dizaines de millisecondes) du signal un petit nombre p de paramètres significatifs (de l’ordre de la dizaine). On associe donc à un signal “x.wav” un ensemble de vecteurs xn1 = (x1 , ..., xn ), chaque xi étant élément de Rp (ces notations seront utilisées systématiquement, c’est à dire que aN 1 désigne le vecteur (a1 , ..., aN )). Les (xi ) sont appelés coefficients cepstraux du signal audio. • On considère les xn1 comme des observations i.i.d. dont la densité est modélisée par un mélange de gaussienne. • L’algorithme EM est utilisé pour obtenir une approximation des paramètres du mélange qui maximisent la vraisemblance pour une observation xn1 . Ceci constitue la phase d’apprentissage. • Les paramètres du mélange obtenus pour chaque locuteur sont utilisés pour reconnaitre un locuteur à partir d’un nouvel échantillon. C’est la phase de test. Les échantillons audio que vous récupérez sont constitués de deux échantillons par locuteur, un pour la phase d’apprentissage, un pour la phase de test. Les échantillons fournis sont de même taille, bien que généralement l’échantillon pour l’apprentissage soit nettement plus long que celui utilisé pour le test. 1 2 Prétraitement La première étape consiste à extraire les coefficients cepstraux du signal. Cette étape est déjà traitée et il vous suffit dans un premier temps d’aller dans le répertoire DataCeps pour récupérer les coefficients cepstraux de chaque locuteur (à l’aide de la commande scilab read). Pour la suite du projet, nous ne retiendrons pas la première coordonnée des vecteurs des cepstres xi . Cette coordonnée est reliée à la puissance du signal sonore étudié et n’est pas pertinente pour l’identification du locuteur. Il vous faut ainsi supprimer la première colonne de la matrice obtenue. On obtient alors une série de vecteurs xn1 , chaque vecteur étant de taille p (p = 12 dans les échantillons obtenus à partir de la page web). 3 Modèle et notations Les xn1 sont donc vus comme n observations i.i.d. de variables X1n de densité gθ , définie par: K X ∀x ∈ Rp , gθ (x) = αk φµk ,Ak (x), k=1 où l’on a introduit les notations suivantes: PK K K K • Le paramètre θ = (α1K , µK 1 , A1 ) avec α1 ∈ [0, 1] , k=1 αk = 1, p )K et les A sont des matrices symétriques positives. µK ∈ (R k 1 • φµ,A est la densité associée à la loi d’un vecteur normal de dimension p de moyenne µ et de matrice de variance-covariance A: 1 1 p T −1 √ ∀x ∈ R , φµ,A (x) = exp − (x − µ) (A) (x − µ) 2 (2π)p/2 detA Les α1K seront appelés poids du mélange. Un locuteur sera identifié par une valeur particulière de θ. 4 Algorithme EM On remarque que la fonction fθ : Rp × {1, . . . , K} → R définie par: fθ (x, y) = αy φµy ,Ay (x) est une densité jointe par rapport à la mesure produit naturelle sur Rp × {1, . . . , K}, c’est à dire la mesure produite de la mesure de Lebesgue sur Rp 2 et de la mesure ponctuelle sur {1, . . . , K}. On peut donc joindre les variables Y1n aux X1n telles que la suite de variables (Xi , Yi ), i = 1, . . . , n soient des variables i.i.d de densité jointe fθ (x, y). 4.1. Quelle est la loi de Y1n ? Montrer que la loi marginale pour X1n est bien la loi associée à un échantillon i.i.d. de variables ayant pour densité gθ . Ecrire la vraisemblance jointe fθ (X1n , Y1n ) et la vraisemblance marginale fθ (X1n ). L’estimateur du maximum de vraisemblance θM V pour ce modèle associé aux observations xn1 est défini par θM V = argmaxθ log (fθ (X1n )) Comme il n’y a pas de formule explicite pour θM V , nous vous proposons d’utiliser une procédure itérative appelé algorithme EM (en Anglais: Expectation Maximisation, parce qu’il y a une partie où l’on prend une espérance et une autre où l’on maximise): θ[t + 1] = argmaxθ Eθ[t] (log fθ (X1n , Y1n )|X1n = xn1 ) (1) L’itération de cet algorithme produit, sous de bonnes hypothèses, une convergence de θ[t] (lorsque t → ∞) vers l’estimateur du maximum de vraisemblance θM V . Nous n’étudierons pas les propriétés théoriques de cet estimateur (qui sont plus détaillées dans le Projet 5) mais nous nous contenterons de l’appliquer dans notre situation. 5 Relation de récurrence sur les coefficients pour une itération Nous supposerons dans toute la suite que les matrices AK 1 sont diagonales. La matrice Ai est ainsi entièrement caractérisée par les coefficients de sa diagonale que nous noterons σi . Ainsi, σi est un vecteur de (R+ )p . K Nous notons maintenant θ = (α1K , µK 1 , σ1 ) et θ[t] les paramètres obtenus par t itérations de la relation (1). 5.1. Montrer que pour tout i = 1, . . . , n, αk [t]φµk ,σk (xi ) Eθ[t] (1k (Yi )|X1n = xn1 ) = PK . l=1 αl [t]φµl ,σl (xi ) Nous noterons cette valeur pθ[t] (k|xi ). 3 5.2. En notant que la maximisation en α peut se faire indépendamment des autres paramètres, montrer que n αk [t + 1] = 1X pθ[t] (k|xi ) n i=1 5.3. Montrer ensuite que Pn xi pθ[t] (k|xi ) µk [t + 1] = Pi=1 . n i=1 pθ[t] (k|xi ) 5.4. Rappelons que σk [t + 1] ∈ (R+ )p et notons σk [t + 1](j) son j-ème coefficient. De même, notons xi (j) ( et µk [t](j)) le j-ème coefficient de xi ( et µk [t]). Montrer alors que pour tout j = 1, . . . , p, Pn pθ[t] (k|xi )(xi (j) − µk [t](j))2 Pn σk [t + 1](j) = i=1 , i=1 pθ[t] (k|xi ) Puis que: σk [t + 1](j) = 6 Pn 2 i=1 pθ[t] (k|xi )(xi (j)) Pn i=1 pθ[t] (k|xi ) − (µk [t](j))2 . Programmation d’une itération On écrira les fonctions demandées en laissant la possibilité de changer le nombre K de classe du mélange. On pourra commencer à tester le modèle avec K = 5. En reprenant les formules de la section précédente, programmez une fonction Scilab qui, à partir des observations xn1 et de paramètre initial θ0 , calcule le paramètre θ1 obtenu après une itération de l’algorithme EM. Afin de simplifier l’écriture de ce programme, vous commencerez par programmer une fonction gauseval permettant l’évaluation de densités gaussiennes. La synthaxe de cette fonction est: dens=gauseval(X,mu,sigma); où • X est le vecteur des observations; la ligne i0 contient le vecteur xi0 . Cette matrice est donc de taille n × p. • mu est la matrice des moyennes du mélange; la ligne k0 contient le vecteur µk0 . Cette matrice est donc de taille K × p. 4 • sigma est la matrice des diagonales des covariances du modèle; la ligne i0 contient le vecteur des éléments diagonaux de la matrice Ak0 . Cette matrice est donc de taille K × p. • dens est une matrice dont la ligne i0 contient le vecteur (dens(i0 , 1), ..., dens(i0 , K)), où dens(i, k) = φηk (xi ), avec ηk = (µk , Ak ). Cette matrice est donc de taille n × K. Cette fonction “gauseval”doit vous permettre de calculer facilement les termes dont vous avez besoin lors d’une itération de l’algorithme EM. 7 Le problème de l’initialisation Vous êtes maintenant en mesure de calculer les coefficients de votre mélange en partant d’un choix initial de coefficients et en effectuant plusieurs itérations de l’algorithme EM. Ce choix initial est délicat, et nous adopterons une approche simple: les moyennes initiales seront prises égales à certains des vecteurs d’observation choisis aléatoirement uniformément sur l’ensemble des vecteurs correspondant à un locuteur. Les eléments des diagonales des matrices de covariance seront choisis égaux (et valant par exemple 0.5). 8 Application 8.1. Programmez une procedure qui, étant donné un paramètre θ et un vecteur d’observations xn1 , calcule la vraisemblance correspondant à gθ . 8.2. Choisissez un locuteur particulier, et appliquez lui l’algorithme EM. 8.3. Vérifiez (numériquement) la convergence de la vraisemblance lors de l’application de EM. 8.4. Vérifiez que, pour un vecteur xn1 correspondant au locuteur “a”, la vraisemblance associée à gθ est supérieure avec les paramètres de ce locuteur qu’avec les paramètres des autres locuteurs. 9 Phases d’apprentissage et de test Pour chacun des locuteurs dont vous disposez d’un échantillon de voix, calculez les paramètres du mélange correspondant. Vous disposez maintenant 5 de M échantillons de voix, auxquels vous avez associé les paramètres d’un mélange de gaussienne (gθ1 , ..., gθM ). Sélectionnez un échantillon test au hasard et choisissez le modèle ayant la vraisemblance la plus forte. Conclusions ? Etudiez l’effet des différents paramètres (K, initialisation, nombre d’itérations de EM) sur les résultats d’identification. Vous pouvez aussi construire vos propres échantillons une dizaine de secondes en enregistrant en format .wav pour l’apprentissage (et un peu moins pour le test) et en effectuant au préalable le prétraitement pour extraire les coefficients cepstraux (dans ce cas, il faut regarder sur la page web, les instructions pour effectuer ce prétraitement.) Vous pourrez éventuellement avoir besoin des fonctions Scilab suivantes: list, strcat, read. 6