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
Fiche de cours · Formules
Formules à connaître
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire
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ème | Architecture / objectif | Données | Forces | Limites |
|---|---|---|---|---|
| Kaldi (HMM-DNN) | Modèle acoustique par phonème + lexique + LM n-gramme, décodage WFST | 100–1000 h transcrites + lexique | Contrôlable, léger, streaming | Pipeline complexe ; lexique à maintenir |
| DeepSpeech 2 (2015) | Conv + RNN + CTC + LM externe | 10 000 h | Premier bout-en-bout à l’échelle | Indépendance conditionnelle (Théorème 4) |
| wav2vec 2.0 (2020) | Encodeur conv + transformer, pré-entraîné par contraste sur audio brut ; affinage CTC | 60 000 h non transcrites + 10 min–100 h | Peu de données étiquetées ; langues rares | Pas de LM implicite ; ponctuation à part |
| Conformer / RNN-T (Google) | Conv + attention, transducteur streaming | Propriétaires | Temps réel sur téléphone | Entraî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, libre | Pas 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) | Massives | Compréhension au-delà de la transcription | Coû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
| Article | Contribution | À retenir |
|---|---|---|
| Davis & Mermelstein, Comparison of parametric representations for monosyllabic word recognition, IEEE TASSP 1980 | MFCC | 40 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 1989 | HMM pour la parole ; avant-arrière, Viterbi, Baum-Welch | Les 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.3711 | Pertes de séquence ; transducteur streamable | Théorème 4 : CTC vs autorégressif |
| Amodei et al., Deep Speech 2, ICML 2016 — 1512.02595 | Bout-en-bout à l’échelle, anglais et mandarin | Les données et le calcul, plus que l’architecture |
| Chan et al., Listen, Attend and Spell, ICASSP 2016 — 1508.01211 | Encodeur-décodeur avec attention pour l’ASR | Le LM implicite ; ancêtre de Whisper |
| Baevski et al., wav2vec 2.0, NeurIPS 2020 — 2006.11477 | Auto-supervision contrastive sur audio brut ; 10 min de données étiquetées suffisent | Le pré-entraînement change l’économie des langues peu dotées |
| Gulati et al., Conformer, Interspeech 2020 — 2005.08100 | Convolution + attention dans chaque bloc | Architecture dominante avant Whisper |
| Radford et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), 2022 — 2212.04356 | 680 kh de données web faiblement supervisées ; robustesse zero-shot | La 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 2020 | Corpus de référence ; corpus participatif multilingue | Les benchmarks « propres » saturent ; mesurer sur du réel |
| Bredin, pyannote.audio, Interspeech 2023 | Diarisation | « 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)
- Installer.
pip install faster-whisper librosa jiwer sounddevice; enregistrer 30 phrases (vous et deux autres personnes, dont une avec accent), transcriptions de référence tapées. - Signal. Avec librosa : forme d’onde, spectrogramme, log-mel 80 bandes ; identifier vos formants sur une voyelle tenue ; rééchantillonner 44,1 → 16 kHz avec et sans filtre et écouter le repliement.
- Baseline. faster-whisper tiny/small/large-v3 : WER (jiwer, normalisation déclarée), RTF CPU et GPU, par locuteur.
- Robustesse. Ajouter du bruit (SNR 20, 10, 0 dB), de la réverbération, du silence (30 s) : courbes WER vs SNR ; compter les hallucinations sur silence ; tester
vad_filter=True. - Domaine. 20 phrases avec vos termes techniques : WER sur les entités ; améliorer avec
initial_prompt(vocabulaire) et un post-traitement par dictionnaire ; mesurer. - Streaming. Transcrire au fil du micro par blocs de 2 s avec recouvrement ; mesurer la latence ; observer les coupures de mots aux frontières.
- Livrable. Dépôt (audio, références, scripts), tableau WER × modèle × condition avec IC, courbes SNR, et une recommandation de déploiement (modèle, matériel, coût par heure d’audio).
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 - rExercice 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)
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.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
| Mot | Définition |
|---|---|
| Nyquist | fe > 2fmax ; sinon repliement. |
| STFT / spectrogramme | FFT sur fenêtres glissantes ; énergie temps × fréquence. |
| Log-mel, MFCC | Banc de filtres perceptif ; DCT décorrélante. |
| CTC / attention / RNN-T | Trois façons d’aligner audio et texte ; indépendance conditionnelle ou non ; streaming. |
| wav2vec 2.0 | Pré-entraînement contrastif sur audio brut. |
| Whisper | Encodeur-décodeur multitâche, 680 kh, robuste, non streaming. |
| WER | Taux d’erreur mots ; normalisation, condition, IC, entités. |
| RTF | Temps 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.