LYCÉE → PRÉPA · L30

Module L30 · Partie K · Ingénierie de l’IA

ASR : de l’onde sonore au texte.

Une seconde de parole = 16 000 nombres. Les transformer en mots demande de comprendre le signal (échantillonnage, transformée de Fourier, spectrogramme, mel, MFCC), les modèles (HMM-GMM historiques, CTC, encodeur-décodeur avec attention, Whisper, wav2vec 2.0 auto-supervisé), le décodage avec modèle de langue, et l’évaluation (WER et ses pièges, robustesse au bruit, accents, latence pour le temps réel). Tout est implémenté ici sur des signaux synthétiques, avec les mathématiques exactes.

Durée : 3 séances · Prérequis : L10, L11, L18 (Nyquist), L19, L29 (CTC). Objectifs : calculer un spectrogramme mel et des MFCC ; expliquer et coder la STFT ; comprendre CTC vs attention vs transducteur (RNN-T) ; évaluer par WER avec normalisation ; déployer Whisper localement et le mesurer ; lire les articles.

Ce que vous saurez faire à la fin
  • Passer d’une onde à un spectrogramme mel et l’interpréter (formants, harmoniques).
  • Expliquer le théorème d’échantillonnage, la résolution temps-fréquence, et le rôle des fenêtres.
  • Décrire l’architecture de Whisper et de wav2vec 2.0 et leurs objectifs d’entraînement.
  • Mesurer un système ASR proprement (WER normalisé, par condition, IC) et choisir entre local et API.

Fiche de cours · Définitions

Définitions

Définition (signal audio numérique). Suite x[n] = x(n/fe) d’échantillons à la fréquence fe (16 kHz pour la parole, 44,1 kHz pour la musique), quantifiés sur 16 bits. Un fichier WAV mono d’une minute à 16 kHz : 960 000 échantillons, 1,9 Mo.
Définition (transformée de Fourier discrète, STFT). DFT : X[k] = Σn x[n]e−2iπkn/N, k-ième coefficient = amplitude et phase à la fréquence k·fe/N. STFT : DFT sur des fenêtres glissantes (25 ms, pas 10 ms) pondérées (Hann) → spectrogramme |X[t, k]|² (temps × fréquence).
Définition (échelle mel, MFCC). mel(f) = 2595 log₁₀(1 + f/700) : perception humaine, résolution plus fine dans les graves. Banc de filtres triangulaires sur l’échelle mel (80 bandes) → log-mel spectrogramme, entrée standard des modèles. MFCC : DCT du log-mel, on garde 13 coefficients (décorrélés) — entrée des systèmes classiques.
Définition (phonème, lexique, modèle de langue). Phonème : unité sonore distinctive (≈ 36 en français). Lexique : mots → suites de phonèmes. Modèle de langue : p(mott | historique). Systèmes classiques : modèle acoustique (HMM-GMM ou HMM-DNN sur les phonèmes) × lexique × modèle de langue, décodés par Viterbi dans un graphe WFST.
Définition (de bout en bout). Un seul réseau du log-mel au texte : CTC (L29 ; sorties par trame, conditionnellement indépendantes), encodeur-décodeur avec attention (Whisper, LAS ; autorégressif, un modèle de langue implicite), transducteur RNN-T (streaming : émet des tokens au fil des trames avec un prédicteur).
Définition (auto-supervision, wav2vec 2.0). Pré-entraîner un encodeur sur de l’audio non transcrit en prédisant des unités quantifiées masquées (contrastif), puis affiner avec CTC sur peu de données transcrites (10 min–100 h).
Définition (WER, normalisation, diarisation). WER = (S + I + D)/N sur les mots après normalisation (casse, ponctuation, nombres en chiffres ou lettres, contractions). Diarisation : « qui parle quand ». Ponctuation et casse : tâche à part, ou incluse (Whisper).
Définition (streaming, latence). Temps réel : émettre la transcription pendant la parole, avec une latence bornée (200–800 ms) ; exige des modèles causaux ou à fenêtres (RNN-T, CTC en blocs, Whisper par segments avec recouvrement).

Fiche de cours · Formules

Formules à connaître

Nyquist-Shannon : fe > 2fmax ; la parole est intelligible jusqu’à ≈ 4 kHz (téléphone : 8 kHz), riche jusqu’à 8 kHz (16 kHz)
DFT : X[k] = Σn=0N−1 x[n] e−2iπkn/N ; FFT en O(N log N) ; résolution fréquentielle Δf = fe/N ; fenêtre de 25 ms à 16 kHz : N = 400, Δf = 40 Hz
Incertitude temps-fréquence : Δt·Δf ≥ 1/(4π) — une fenêtre courte localise le temps, une longue la fréquence ; 25 ms est le compromis pour la parole (stationnaire ~20–30 ms)
Fenêtre de Hann : w[n] = ½(1 − cos(2πn/N)) ; réduit les fuites spectrales (lobes secondaires −31 dB contre −13 dB pour la rectangulaire)
mel(f) = 2595 log₁₀(1 + f/700) ; f(mel) = 700(10mel/2595 − 1) ; 80 filtres triangulaires entre 0 et fe/2
MFCC : c[q] = Σm log(Em) cos(πq(m + ½)/M), q = 0..12 (DCT-II) ; deltas Δc et ΔΔc
Whisper : 30 s → log-mel 80 × 3000 → conv ×2 (pas 2) → 1500 positions → encodeur transformer → décodeur autorégressif avec tokens spéciaux (langue, tâche, horodatages)
wav2vec 2.0 : L = −log [esim(ct, qt)/κ / Σq̃ ∈ distracteurs esim(ct, q̃)/κ] + α·diversité (InfoNCE sur les unités quantifiées masquées)
WER = (S + I + D)/N ; IC à 95 % ≈ ± 1,96 √(WER(1 − WER)/N) (approximation, mots supposés indépendants — sous-estime)
Facteur temps réel RTF = temps de calcul / durée audio ; streaming exige RTF < 1 avec latence = taille de bloc + calcul

Fiche de cours · Théorèmes et démonstrations

Démonstrations à savoir refaire

Théorème 1 (repliement : une sinusoïde au-dessus de fe/2 est indiscernable d’une sinusoïde plus basse). Pour tout entier m, les signaux cos(2πf·n/fe) et cos(2π(f + m·fe)·n/fe) ont les mêmes échantillons ; de même f et m·fe − f.
cos(2π(f + mfe)n/fe) = cos(2πfn/fe + 2πmn) = cos(2πfn/fe) car cos est 2π-périodique et mn entier. Pour mfe − f : cos(2π(mfe − f)n/fe) = cos(2πmn − 2πfn/fe) = cos(2πfn/fe) (parité). Donc, après échantillonnage, toute fréquence se « replie » dans [0, fe/2] : un sifflement à 12 kHz échantillonné à 16 kHz apparaît à 4 kHz. D’où le filtre anti-repliement analogique avant l’ADC (L18) et le rééchantillonnage avec filtre (pas une simple décimation) quand on passe de 44,1 à 16 kHz.
Théorème 2 (la DFT est un changement de base orthogonal ; Parseval). Les vecteurs ek[n] = e2iπkn/N/√N forment une base orthonormée de ℂN ; donc x se reconstruit exactement (IDFT) et Σ|x[n]|² = (1/N)Σ|X[k]|².
⟨ek, el⟩ = (1/N)Σn e2iπ(k−l)n/N : si k = l, chaque terme vaut 1, somme N/N = 1 ; sinon c’est une somme géométrique de raison r = e2iπ(k−l)/N ≠ 1 avec rN = 1 : (1 − rN)/(1 − r) = 0. Base orthonormée ⇒ x = Σ ⟨x, ek⟩ek (IDFT) et conservation de la norme (Parseval) : l’énergie du signal est la somme des énergies par fréquence — le spectrogramme est une répartition de l’énergie. L’orthogonalité est aussi ce qui rend la FFT possible (structure de groupe des racines de l’unité, diviser pour régner : L04).
Théorème 3 (une fenêtre courte étale le spectre). Multiplier un signal par une fenêtre w de durée T revient à convoluer son spectre par W = DFT(w), dont le lobe principal a une largeur ≈ 2/T (Hann) : deux fréquences distantes de moins de ≈ 1/T ne sont pas séparables.
Théorème de convolution : DFT(x·w) = DFT(x) ∗ DFT(w)/N. Une sinusoïde pure (spectre = une raie) devient une copie de W centrée sur sa fréquence. Pour la fenêtre rectangulaire de N points, W est un noyau de Dirichlet de lobe principal 2fe/N ; pour Hann, 4fe/N mais lobes secondaires bien plus bas. À 25 ms : lobe ≈ 80–160 Hz — les harmoniques d’une voix (espacées de f₀ ≈ 100–250 Hz) sont tout juste résolues ; pour analyser la hauteur on prend des fenêtres plus longues, pour les transitoires (plosives) plus courtes. C’est l’incertitude temps-fréquence en pratique.
Théorème 4 (CTC suppose l’indépendance conditionnelle ; l’attention non). Sous CTC, p(y | X) = Σπ Πt p(πt | X) : les sorties de trames différentes sont indépendantes sachant X, ce qui interdit au modèle d’apprendre p(yt | y<t) ; un décodeur autorégressif modélise p(yt | y<t, X) directement.
Par définition de la factorisation CTC, aucun terme ne dépend d’une autre sortie πt′. Donc le modèle ne peut pas préférer « the cat » à « the kat » autrement que par l’acoustique : la connaissance linguistique doit venir d’un modèle de langue externe au décodage (faisceau + LM, L29 Théorème 4). Un décodeur à attention conditionne chaque token sur les précédents : il inclut un LM implicite (appris sur les transcriptions) — c’est pourquoi Whisper produit ponctuation, casse et mots rares sans LM externe, mais aussi pourquoi il peut « halluciner » des phrases plausibles sur du silence ou du bruit (le LM implicite prend le dessus quand l’acoustique n’informe pas). RNN-T est intermédiaire : un prédicteur sur y<t joint à l’encodeur acoustique, tout en restant streamable.

01 / Le signal

Synthétiser une « voyelle », échantillonner, repliement

Sur 25 ms, on voit l’enveloppe (les formants, qui identifient la voyelle) ; sur 200 ms, les harmoniques (la hauteur, f₀). L’ASR veut les formants : d’où les fenêtres courtes et l’échelle mel qui lisse les harmoniques.

01 / Le signal

STFT, spectrogramme log-mel, MFCC — implémentés

02 / Reconnaître

Un reconnaisseur de voyelles par CTC : un modèle minuscule entraîné sur des trames synthétiques

Un modèle de 164 paramètres apprend à transcrire des suites de voyelles sans jamais savoir où elles commencent : c’est la promesse de CTC. Les vrais systèmes remplacent la régression logistique par un encodeur de 10⁸–10⁹ paramètres et les voyelles synthétiques par 10⁵ heures d’audio.

03 / Modèles

Vue informatique : les architectures de l’ASR moderne

SystèmeArchitecture / objectifDonnéesForcesLimites
Kaldi (HMM-DNN)Modèle acoustique par phonème + lexique + LM n-gramme, décodage WFST100–1000 h transcrites + lexiqueContrôlable, léger, streamingPipeline complexe ; lexique à maintenir
DeepSpeech 2 (2015)Conv + RNN + CTC + LM externe10 000 hPremier bout-en-bout à l’échelleIndépendance conditionnelle (Théorème 4)
wav2vec 2.0 (2020)Encodeur conv + transformer, pré-entraîné par contraste sur audio brut ; affinage CTC60 000 h non transcrites + 10 min–100 hPeu de données étiquetées ; langues raresPas de LM implicite ; ponctuation à part
Conformer / RNN-T (Google)Conv + attention, transducteur streamingPropriétairesTemps réel sur téléphoneEntraînement délicat
Whisper (2022)Encodeur-décodeur transformer, supervision faible multitâche (transcription, traduction, langue, horodatages)680 000 h web (multilingue)Robuste (accents, bruit), zero-shot, ponctuation, 99 langues, librePas streaming natif ; hallucinations sur silence ; 30 s fixes ; lourd (1,5B) — versions distillées, faster-whisper
Modèles audio-LLM (2024+)Encodeur audio + LLM (Qwen-Audio, Gemini)MassivesCompréhension au-delà de la transcriptionCoût ; évaluation difficile

04 / Évaluer

WER : normalisation, conditions, intervalles — et ce qu’il ne dit pas

Un WER se rapporte avec sa normalisation, par condition, avec n. Compléter par : taux d’erreur sur les entités (nombres, noms), latence (p50/p95, RTF), robustesse (SNR variable), et pour les assistants, le taux de commandes correctement exécutées — la métrique que l’utilisateur ressent.

05 / Articles

Les articles à lire

ArticleContributionÀ retenir
Davis & Mermelstein, Comparison of parametric representations for monosyllabic word recognition, IEEE TASSP 1980MFCC40 ans de représentation standard ; remplacée par le log-mel + apprentissage
Rabiner, A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition, Proc. IEEE 1989HMM pour la parole ; avant-arrière, Viterbi, Baum-WelchLes mêmes récurrences que CTC (L29) ; à lire pour la culture et la PD
Graves et al., CTC, ICML 2006 ; Graves, Sequence Transduction with RNNs (RNN-T), 2012 — 1211.3711Pertes de séquence ; transducteur streamableThéorème 4 : CTC vs autorégressif
Amodei et al., Deep Speech 2, ICML 2016 — 1512.02595Bout-en-bout à l’échelle, anglais et mandarinLes données et le calcul, plus que l’architecture
Chan et al., Listen, Attend and Spell, ICASSP 2016 — 1508.01211Encodeur-décodeur avec attention pour l’ASRLe LM implicite ; ancêtre de Whisper
Baevski et al., wav2vec 2.0, NeurIPS 2020 — 2006.11477Auto-supervision contrastive sur audio brut ; 10 min de données étiquetées suffisentLe pré-entraînement change l’économie des langues peu dotées
Gulati et al., Conformer, Interspeech 2020 — 2005.08100Convolution + attention dans chaque blocArchitecture dominante avant Whisper
Radford et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), 2022 — 2212.04356680 kh de données web faiblement supervisées ; robustesse zero-shotLa distribution des données d’entraînement (diversité) explique la robustesse ; section sur les hallucinations
Panayotov et al., LibriSpeech, ICASSP 2015 ; Ardila et al., Common Voice, LREC 2020Corpus de référence ; corpus participatif multilingueLes benchmarks « propres » saturent ; mesurer sur du réel
Bredin, pyannote.audio, Interspeech 2023Diarisation« Qui parle quand » reste un problème à part, avec sa métrique (DER)

TP guidé

TP — Whisper local : mesurer, dégrader, améliorer (4 h)

Exercices

Exercices auto-corrigés

Exercice 1 — Fréquence repliée

Écrivez frequence_apparente(f, fe) : la fréquence dans [0, fe/2] à laquelle apparaît une sinusoïde de fréquence f échantillonnée à fe (Théorème 1), puis vérifiez-la numériquement par FFT sur trois cas.

Correction
def frequence_apparente(f, fe):
    r = f % fe; return r if r <= fe / 2 else fe - r

Exercice 2 — Fuites spectrales et fenêtre

Pour une sinusoïde de 1 000 Hz observée sur 25 ms à 16 kHz, calculez le rapport entre l’énergie dans les 3 bins autour du pic et l’énergie totale, avec une fenêtre rectangulaire puis de Hann. Écrivez concentration(x, fenetre) et vérifiez que Hann concentre davantage l’énergie lorsque la fréquence tombe entre deux bins (fuite maximale).

Correction
def concentration(x, fenetre):
    X = np.abs(np.fft.rfft(x * fenetre)) ** 2; k = X.argmax()
    return X[max(0, k - 1):k + 2].sum() / X.sum()

Exercices

Exercices auto-corrigés (suite)

Exercice 3 — Banc de filtres mel et son inverse approché

Écrivez frequences_centrales_mel(n_mels, fe) (les n_mels fréquences centrales, en Hz, équiréparties sur l’échelle mel entre 0 et fe/2) et vérifiez : espacement croissant avec la fréquence, première bande sous 100 Hz pour 80 bandes à 16 kHz, et que les centres sont symétriques sur l’échelle mel.

Correction
def frequences_centrales_mel(n_mels, fe=16000):
    mel = lambda f: 2595 * np.log10(1 + f / 700); inv = lambda m: 700 * (10 ** (m / 2595) - 1)
    return inv(np.linspace(mel(0), mel(fe / 2), n_mels + 2))[1:-1]

Exercice 4 — WER par entité et intervalle de confiance

Écrivez wer_entites(refs, hyps, entites) : pour une liste de paires (référence, hypothèse), le taux d’erreur restreint aux mots de entites (un mot d’entité de la référence est « correct » s’il apparaît dans l’hypothèse au même rang parmi les entités), et ic_wer(wer, n) = demi-largeur à 95 % (approximation binomiale).

Correction
def wer_entites(refs, hyps, entites):
    err = tot = 0
    for r, h in zip(refs, hyps):
        er = [w for w in r.split() if w in entites]; eh = [w for w in h.split() if w in entites]
        for i, w in enumerate(er): tot += 1; err += (i >= len(eh) or eh[i] != w)
    return err / tot, tot
def ic_wer(w, n): return 1.96 * np.sqrt(w * (1 - w) / n)

Fiche de cours · Exercices corrigés

Exercices corrigés (rédaction)

Exercice 1. Pourquoi les modèles d’ASR utilisent-ils 80 bandes mel de 10 ms plutôt que le spectre brut de 201 bins ? Donner trois raisons (perception, statistique, calcul).
Correction. (1) Perception : l’oreille résout mieux les graves ; l’échelle mel alloue la résolution là où l’information phonétique est (formants sous 4 kHz) et lisse les harmoniques (la hauteur f₀ varie entre locuteurs sans changer les mots). (2) Statistique : 80 dimensions au lieu de 201 réduisent la variance de l’estimation et la sensibilité au bruit fin ; le log compresse la dynamique (l’énergie varie de 60 dB) et rend les distributions plus gaussiennes ; les MFCC décorrèlent en plus (utile pour les GMM diagonaux). (3) Calcul : 2,5× moins d’entrées ; 100 trames/s × 80 = 8 000 valeurs/s, contre 16 000 échantillons/s bruts. Les modèles auto-supervisés (wav2vec 2.0) partent de l’onde brute et apprennent leur propre banc de filtres — qui ressemble au mel.
Exercice 2. Whisper transcrit « merci d’avoir regardé, abonnez-vous » sur 20 s de silence. Expliquer par le Théorème 4 et proposer trois parades.
Correction. Le décodeur autorégressif contient un modèle de langue implicite appris sur des sous-titres web ; quand l’encodeur n’apporte pas d’information (silence, bruit), le décodeur échantillonne des phrases fréquentes dans les données d’entraînement (fins de vidéos). Un modèle CTC, par indépendance conditionnelle, émettrait des blancs. Parades : (1) détection d’activité vocale (VAD) en amont — ne transcrire que les segments parlés ; (2) seuils sur la log-probabilité moyenne et sur le ratio de compression du texte (répétitions), rejet des segments suspects (options no_speech_threshold, compression_ratio_threshold) ; (3) contrainte de décodage (horodatages, longueur maximale par segment) et vérification croisée par un second système (CTC) sur les segments douteux.
Exercice 3. Un assistant vocal pour robot doit reconnaître 50 commandes dans un atelier bruyant, en moins de 500 ms, sans connexion internet. Concevoir le système et son évaluation.
Correction. Le problème est fermé (50 commandes) : pas besoin d’un ASR général. Options : (a) Whisper tiny/base local avec initial_prompt listant les commandes + correspondance floue (Levenshtein) vers la commande la plus proche, seuil de rejet ; (b) mieux : un petit modèle de classification de commandes (wav2vec 2.0 affiné ou un CNN sur log-mel) entraîné sur 50 commandes × 20 locuteurs × augmentations de bruit d’atelier — latence < 100 ms sur CPU ; (c) mot de réveil (« robot ») par un détecteur léger en continu, puis reconnaissance. Évaluation : taux de commandes correctes par condition de bruit (SNR mesuré dans l’atelier), taux de faux déclenchements par heure (critique pour la sécurité), latence p95, matrice de confusion entre commandes (les paires dangereuses « avance »/« arrête » doivent être ≈ 0 : ajouter une confirmation pour les commandes de mouvement). Jeu de test enregistré sur place, avec les vrais micros.

Vérification

Pourquoi un modèle encodeur-décodeur (Whisper) peut-il « halluciner » du texte sur du silence, et pas un modèle CTC ?

Deux questions supplémentaires

1. Pourquoi 25 ms de fenêtre ? Compromis temps-fréquence : la parole est quasi stationnaire sur 20–30 ms ; plus court, on perd la résolution fréquentielle des formants.

2. Que signifie un RTF de 0,3 ? Le calcul prend 30 % de la durée de l’audio : 1 h transcrite en 18 min ; le streaming exige RTF < 1 avec une latence bornée.

Référence

Les mots à retenir

MotDéfinition
Nyquistfe > 2fmax ; sinon repliement.
STFT / spectrogrammeFFT sur fenêtres glissantes ; énergie temps × fréquence.
Log-mel, MFCCBanc de filtres perceptif ; DCT décorrélante.
CTC / attention / RNN-TTrois façons d’aligner audio et texte ; indépendance conditionnelle ou non ; streaming.
wav2vec 2.0Pré-entraînement contrastif sur audio brut.
WhisperEncodeur-décodeur multitâche, 680 kh, robuste, non streaming.
WERTaux d’erreur mots ; normalisation, condition, IC, entités.
RTFTemps de calcul / durée audio.

Suite

Vous avez vu des CNN, des LSTM, des transformers, des CTC. Il est temps de faire la carte.

Chapitre suivant : les familles de réseaux de neurones, leurs biais inductifs, leurs coûts, et comment choisir — avec les mathématiques qui les distinguent.

← L29SommaireL31 : familles de réseaux →