Travaux pratiques d'expérimentation humaine : montage d'une manip de restauration phonémique ========================================= Christophe Pallier Un stimulus sonore est transmis par un signal acoustique, c'est à dire une onde longitudinale de pression. Celle-ci fait vibrer le tympan, dont le mouvement est transmis à la cochlée par les osselets situés dans l'oreille moyenne. Un son peut être engendré, par exemple, par le déplacement de la membrane d'un haut-parleur ou par les vibrations des cordes vocales ; il peut être recueilli par la membrane d'un micro et transformé en potentiel électrique. .Oscillogramme et spectrogramme d'une onde acoustique correspondant à un morceau de phrase image::speech.png[] .Anatomie de l'oreille: image::oreille_anatomy[] .Voies auditives image::auditory_pathways[] Premiers pas avec l'éditeur de son Praat ----------------------------------------- Pour créer ou manipuler des stimuli sonores, on peut utiliser l'éditeur de son http://www.praat.org[Praat] développé par Paul Boersma and David Weenink de l'université d'Amsterdam. Téléchargez *Praat* sur le site http://www.praat.org[www.praat.org] Exercice: Cliquez sur le menu ++New/Sound/Create Sound++ puis sur le bouton ++Ok++. Ecoutez et visualisez le son ``sineWithNoise'' (fonctions ``\texttt{Play}'' et ``\texttt{Edit}''). Calculez et affichez son spectre (\texttt{Spectrum/To Spectrum}). Quelle est la fréquence du ton pur inclus dans le bruit de fond ? \begin{ex} Créez des tons purs de frequences 64Hz, 128Hz, 256Hz, 512Hz,... 8192Hz. Connaissez-vous les fréquences audibles par l'humain ? \end{ex} .Exercice ************************** Créez un ton pur de 400 Hz et un ton pur de 410 Hz de 1 seconde et donnez leur les noms 't400' et 't410'. Additionnez-les en tapant la formule suivante (dans New/Sound/Create Sound): ------------- Sound\_t400[col]+Sound\_t410[col] ------------- Visualisez le signal et le spectre. ************************* \end{ex} \begin{ex} Enregistrez un signal de parole si vous avez un micro (Sinon chargez le fichier \href{phrase1.wav}{phrase1.wav}). Remarquez que la qualité de la reproduction d'un son digital dépend de la fréquence d'échantillonage et de la résolution (8,16,24 bits). Utilisez ``To Manipulation'' pour modifier la hauteur de la voix. \end{ex} \section{La robustesse du signal de parole} L'intelligibilité de la parole est remaquablement robuste aux distortions du signal acoustique. Par exemple, le signal de parole utilise essentiellement les fréquences comprises entre 100 et 5000 Hz, mais on peut supprimer une large partie de ces fréquences et le signal demeure compréhensible \citep{fletcher29}. \begin{ex} Filtrer une phrase entre 0 et 1000 Hz, puis entre 1500 et 5000 Hz, en utilisant: \texttt{Filter/pass-band}. Essayez d'autres bande-passantes. \end{ex} On peut écréter le signal, voire le discrétiser complétement (remplacant les valeurs positives par +1 et les valeurs négatives par -1) \citep{Licklider46,Licklider50}, et il demeure compréhensible. \begin{ex} Redresser le signal: \texttt{Modify/formula: 0.2*abs(self[col])} puis le dichotomiser: \texttt{Modify/formula:\\ if self[col]>0 then 0.2 else -0.2 endif} \end{ex} Quand on interrompt ou qu'on inverse le signal dans des tranches de plusieurs dizaines de millisecondes, la compréhension peut demeurer très bonne \cite{Miller50,saberi99}. \begin{ex} Observer qu'une phrase complétement renversée temporellement est incompréhensible \end{ex} \begin{ex} Implémentez les manipulations décrites dans \cite{saberi99} (the pdf is \href{Saberi.reversed.speech.Natur_1999.pdf}{here}). (pour le renversement temporel consulter ``Help/formulas tutorial''). Confirmez-vous leurs observations ? \end{ex} Cela suggère que le signal de parole est très \emph{redondant}, et aussi, sans doute, que le cerveau «~va au delà~» des données, c'est à dire interprète un signal incomplet. L'un des arguments les plus souvent cités en ce sens est le phénomène de \emph{restauration phonémique} mis en évidence par \cite{warren70a} . Il s'agit d'une illusion dans laquelle on entend des sons de parole qui ont en fait été «~enlevés~» du signal et remplacés par du bruit blanc. Typiquement, les personnes décrivent entendre une phrase intacte avec un bruit superposé. \begin{enumerate} \item Ouvrez le fichier son \href{modif.wav}{modif.wav} (Menu ``\texttt{Read from file}'') et écoutez-le plusieurs fois (Bouton ``\texttt{Play}''). Décrivez votre impression. \item Téléchargez les fichiers \href{modif_nonoise.wav}{modif\_nonoise.wav} et \href{intact.wav}{intact.wav} et écoutez-les. \item Visualisez les fichiers sons précédents (Bouton ``\texttt{Edit}''). Visualisez le spectrogramme. \item remplacer par un bruit blanc un autre segment de la phrase \texttt{intact.wav}, d'un des fichiers \texttt{ph*.wav} sur le site \href{http://www.pallier.org/ressources/tpexp2/}{http://www.pallier.org/ressources/tpexp2/}, ou d'une autre phrase que vous enregistrerez (Menu \texttt{New/Record mono sound}). Note: Utiliser les fonctions Cut/Copy/Paste de la fenêtre d'édition. Pour créer un bruit blanc: \texttt{New/Sound/Create Sound}, puis:\\\texttt{formula=randomGauss(0,0.1)} \end{enumerate} \section{Implications théoriques} Dans les années 1940, avec les premières techniques d'enregistrement et de visualisation de la parole, il semblait qu'il allait devenir possible de définir des caractéristiques acoustiques invariantes associées à chaque son de parole (les phonèmes). Selon ce point de vue, la perception de la parole consisterait à identifier des patterns acoustiques correspondant, successivement, à chaque phonème. Une fois les phonèmes identifiés, les mots compatibles avec ceux-ci seraient recherché dans le «~lexique mental~». Cela correspond à un modèle «~montant~» (\emph{bottom-up}) de la perception de la parole (cf. figure~\ref{modeles}A). Les grandes distortions qu'on peut imposer au signal de parole suggèrent que s'il existe des invariants, ceux-ci sont assez abstraits. Des résultats comme ceux de Warren sont généralement interprétés en supposant que la perception est également influencée par les connaissances \emph{a priori} du sujet. Dans les modèles dits «~interactifs~» \cite{mcclelland86a,mcclelland86b}, cette influence est due à un feed-back des niveaux supérieurs de traitements (lexique, sémantique,...) vers le niveau de décodage en phonèmes (figure~\ref{modeles}B). \begin{figure}[ht] \begin{center} \caption{Modèle montant (A) et interactifs (B) de la perception de la parole} \label{modeles} \begin{tabular}{cc} \textbf{A} & \textbf{B} \\ \includegraphics[width=2in]{bottomup2} & \includegraphics[width=1.8in]{trace} \\ \end{tabular} \end{center} \end{figure} L'expérience originale de Warren (1970) montre-t-elle vraiment qu'il y a une influence des connaissances lexicales sur le décodage des phonèmes ? Les connaissances des sujets influencent leurs décisions, mais il n'est pas évident qu'elles affectent l'étape précoce de décodage des phonèmes. En d'autres termes, la réponse des sujets pourrait provenir d'un biais de réponse post-perceptuel. \cite{samuel81a} a fait une remarque cruciale : les modèles interactifs prédisent une restauration phonémique plus importante dans des mots que dans des pseudomots, et il a utilisé l'approche de la \emph{théorie de détection du signal} pour séparer les composantes perceptives et décisionnelles. \section{La théorie de détection du signal} La théorie de détection du signal modélise la prise de décision. Imaginez le scénario suivant: vous devez détecter un son cible dans du bruit. L'expérience consiste en une suite d'essais, certains ne contenant que du bruit, d'autres contenant du bruit et le signal superposé. Le son cible étant faible, la détection dans le bruit n'est pas évidente; pour chaque essai, il y a donc quatre possibilités: \begin{center} \begin{tabular}{ccc} \hline\hline & \multicolumn{2}{c}{Décision} \\ \cline{2-3} Cible présente & Non & Oui \\ Non & rejet correct & fausse alarme \\ Oui & manqué & détection correcte \\ \hline \end{tabular} \end{center} À la fin de l'expérience, il y a donc 4 pourcentages, correspondant à chacune des cases du tableau. En fait, ces 4 pourcentages ne sont pas indépendants\footnote{Le nombre d'essais contenant la cible ou pas son fixés à l'avance. Par conséquent, la somme de spourcentage sur chaque ligne du tableau fait 100\%.}: la performance d'une personne peut être caractérisée, par exemple, par le taux de détection correcte (Hits) et le taux de fausse-alarmes (FA). On peut la représenter par un point dans un repère FA/Hits. Par exemple, la figure~\ref{sdt0} montre les performances de 3 sujets (points (a), (b) et (c)). (a) a une performance parfaite ; (c) répond au hasard et (b) répond systématiquement que le signal est présent (son taux de fausse alarme est de 100 \%). Bien que les performances de (b) et de (c) soient différentes, on a envie de dire qu'ils ont la même \emph{sensibilité} de détection (nulle), mais que leur \emph{biais de réponse} sont différents. \footnote{Remarquons que le biais de réponse peut varier au cours du temps chez le même sujet.} \begin{figure}[htbp] \centering \caption{Diagramme fausses alarmes/détections correctes (FA/Hits) } \label{sdt0} \includegraphics[scale=0.75]{unitsquare} \end{figure} Ces cas sont extrèmes. Grosso-modo, plus la performance d'un sujet est proche du point (a) (ou éloigné de la diagonale principale du carré, d'équation Hits=FA), plus sa sensibilité de détection est bonne. Un sujet non biaisé correspondra à un point situé sur la petite diagonale du carré (Hits=1-FA). La théorie de détection du signal fournit à partir des taux de FA et de Hits, des estimations de la sensibilité et du biais de réponse. Suivant la théorie de la détection du signal \cite{tanner54}, le traitement perceptif d'un stimulus donne lieu à une réponse interne de l'organisme. La distribution de cette grandeur est différente selon que le stimulus contient la cible ou pas. Par exemple, la figure~\ref{sdt1} décrit les distributions provoquées, chez un radiologue, par des clichés de patients ayant ou non des tumeurs. Sa prise de décision est modélisée par un seuil (figure~\ref{sdt2}) \begin{figure}[htbp] \begin{center} \caption{Distributions associées à un stimulus contenant ou non la cible (Modélisation d'une décision}\label{sdt1} \includegraphics[width=2.5in]{sdt1}\centering \end{center} \end{figure} \begin{figure}[htbp] \centering \caption{Effet de la position du critère de décision} \label{sdt2} \begin{tabular}{cc} \includegraphics[width=2.5in]{sdt2}& \includegraphics[width=2.7in]{sdt3} \end{tabular} \end{figure} Le calcul de la sensibilité ($d'$) et du biais '$\beta$ (dans le modèle gaussien à variances égales), à partir des taux de fausse alarme et de hits, est assez simple : \[ d' = z(H) - z(F) \] \[ \beta = e^{-\frac{z(H)^2-z(F)^2}{2}} \] Où $z$ désigne la fonction inverse de la fonction de distibution de la loi normale. Autrement dit, $z$ transforme un centile dans en ``Z-score''. \begin{figure}[htbp] \centering \caption{Courbes d'iso-$d'$ (à gauche) et d'iso-$\beta$ (à droite} \label{iso} \begin{tabular}{cc} \includegraphics[width=2in]{contd} & \includegraphics[width=2in]{contbeta}\\ \end{tabular} \end{figure} On peut calculer $d'$ et $\beta$ avec un tableur : il suffit de trouver la fonction inversant la distribution de la loi normale. Dans OpenOffice Calc, c'est la fonction LOI.NORMALE.STANDARD.INVERSE. Dans Excel, il semblerait que ce soit NORMSINV. Certains logiciels de statistiques possèdent des fonctions permettant calculer $d'$ et $\beta$. Dans le logiciel de statistique ``R'' (\href{http://www.r-project.org}{http://www.r-project.org}), on peut définir les fonctions : \begin{verbatim} dprime <- function(hit,fa) { qnorm(hit) - qnorm(fa) } beta <- function(hit,fa) { zhr <- qnorm(hit) zfar <- qnorm(fa) exp(-zhr*zhr/2+zfar*zfar/2) } \end{verbatim} \section{À vous de jouer: réalisation d'une expérience simple de détection de signal} Votre mission est de programmer une expérience très simple de détection d'un ton pur faiblement audible, caché dans du bruit. Le sujet entend des stimuli bruités, les uns après les autres dans un ordre aléatoire. Après chaque stimulus, il doit indiquer en cliquant sur un bouton de la souris s'il pense que le stimulus contient un ton pur (c.-à.-d. une sinusoïde) ou non. \subsection{Construction des stimuli} Vous pouvez soit récupérer les fichiers \href{bruit.wav}{bruit.wav} et \href{signal}{signal.wav}), soit créer les stimuli vous-même: Avec Praat, générez un bruit blanc durant une seconde, puis un autre stimulus durant également une seconde et contenant un ton pur superposé à un bruit blanc. La difficulté est d'ajuster l'amplitude de la sinusoïde jusqu'à ce que ce qu'elle soit difficilement détectable (pour que la tâche de détection du ton pur ait un sens). Sauvez ces sons comme des fichiers \texttt{bruit.wav} et \texttt{signal.wav} \subsection{Programmation de l'expérience} Voici le code python minimal pour jouer un fichier son: \begin{verbatim} import pygame pygame.mixer.init(22050) # frequence d'échantillonage sound=pygame.mixer.Sound('ph1.wav') channel=sound.play() while channel.get_busy(): pygame.time.wait(10) \end{verbatim} \begin{ex} Compléter ce code pour jouer une suite de fichiers sons. \end{ex} Quand vous aurez fini, vous pourrez comparer votre code au \href{play.sounds.py}{suivant}. Remarquez que nous avons définit une fonction \texttt{play} qui joue un fichier son, et une boucle principale qui lit successivement les éléments de la variable \texttt{liste} et appelle la fonction play. \begin{ex} Modifier le code précédent pour que l'ordre des stimuli soit alétoire (pensez à utiliser random.shuffle) \end{ex} \begin{ex} Modifier votre code pour détecter le bouton de souris qui est appuyé après chaque stimulus. \end{ex} Aide: voir le code suivant: \begin{verbatim} response = 0 while not(response): for event in pygame.event.get(): if event.type == MOUSEBUTTONDOWN: response=event.button \end{verbatim} \begin{ex} Modifier votre code pour sauver les réponses du sujet dans un fichier. \end{ex} Finalement, comparez votre code à celui de \href{signal.detection.py}{signal.detection.py}. Notez qu'il y a plusieurs façons de programmer la même chose... \section{Faire passer la manip et analyser les résultats} À partir du fichier de résultat, calculer les taux de hits et de fausse alarme, puis calculer $d'$ et $\beta$. \section{Modification de la manip} On a vu que la tâche de détection posait un ``problème'' de biais de réponse. Une variante consiste à présenter deux stimuli à chaque essai : l'un qui contient la cible et l'autre qui ne la contient pas. La tâche du sujet est de désigner lequel des deux stimuli contient la cible. Cette tâche est appelée ``two alternative forced-choice''. Il n'y a pas de problème de biais de décision dans cette situation et la tâche est un peu plus facile pour les sujets. Vous pouvez modifier la manip pour implémenter une tâche de two-alternative forced choice. Selon le modèle théorique présenté dans \cite{macmillan05} le $d'_{\mbox{2AFC}}$ dans cette tâche devrait être égal à $d'_{\mbox{detect}}/\sqrt{2}$ . \section{Réalisation d'une expérience semblable à celle de Samuel (1981)} Dans l'expérience 2 de \cite{samuel81a}, les stimuli étaient des mots ou des pseudomots, dont un phonème avait été soit caché par du bruit, soit remplacé par du bruit. À chaque essai, le sujet entendait d'abord le stimulus original, intact, puis une des deux versions modifiées. Il devait dire si le phonème était juste caché ou remplacé par le bruit. \subsection{sélection du matériel} Sélectionner 20 mots français fréquents, bi ou trisyllabiques, contenant un son [f], [s] ou [ch]. (utiliser \href{http://www.lexique.org}{www.lexique.org}) Inventer 20 pseudomots similaires (mais pas trop ;-). Enregistrer ces items avec Praat (\texttt{New/Record mono sound}). \subsection{Construction des stimuli} Pour chaque item, il faut construire une version où un bruit est \emph{ajouté} sur le phonème critique, et une version ou le bruit \emph{remplace} le phonème critique. Pour additionner un bruit blanc sur un son dans un intervalle temporel, par exemple [0.693,0.776], dans Praat, utiliser \texttt{Modify/formula}: \begin{verbatim} if x>0.693 and x<0.776 then self[col]+randomGauss(0,0.1) else self[col] endif \end{verbatim} Il se pose la question d'avoir un niveau de bruit adéquat (c.-à-d. tel que la tâche de détection ne soit ni trop facile, ni trop difficile). Voir l'article de Samuel (1981) : celui-ci ajuste le niveau de bruit à l'energie moyenne du signal remplacé (root mean square). Il faudra sans doute tâtonner pour trouver les amplitudes adéquates. \subsection{Programmation de la manip} On pourrait utiliser le programme précédent \texttt{signal.detection.py}. Mais il faudrait construire à priori toutes les paires 'item\_intact item\_added' et 'item\_intact item\_replaced'. C'est fastidieux mais possible (et cela peut en fait être automatisé, par exemple dans Praat). Une autre approche consiste à modifier la boucle principale du programme \texttt{signal.detection.py} pour qu'il joue le fichier intact avant le fichier modifié. Si le nom du fichier intact se déduit facilement du nom du fichier modifié, cette solution est rapide. \subsection{Faire passer l'expérience et regarder les résultats} Reproduit-on les résultats de Samuel (1981) ? \section{Pour poursuivre} À propos des effets lexicaux sur la perception des phonèmes, le débat n'est pas clos : voir \cite{norris00,samuel03}. Ceux intéressés par la théorie de détection du signal pourront lire \cite{macmillan05}. \small \bibliography{/home/pallier/chris01/biblios/longtitles.bib,/home/pallier/chris01/biblios/pallier.bib} \end{document} %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: