Ismail Ben Alla

STT Workbench

Approches de reconnaissance vocale en PyTorch

Audio · oct. 2026 · Terminé

Six façons de transformer la parole en texte, construites assez petites pour regarder chacune apprendre sur un CPU.

Construit avecPyTorchtorchaudioBeam searchONNXHugging Face TransformersNumPypytestKaggle

STT Workbench — vue d’ensemble

Présentation

La reconnaissance automatique de la parole compte plusieurs familles de modèles qui résolvent différemment le même problème difficile : aligner une longue séquence de trames audio avec une courte séquence de caractères. Je voulais voir ces différences par moi-même plutôt que de les lire, j’ai donc écrit chaque approche dans une petite base de code PyTorch où elles partagent le front-end, les encodeurs, l’entraîneur et l’évaluation.

Les modèles sont CTC, un encodeur-décodeur à attention, Listen-Attend-Spell, l’hybride CTC/attention et un RNN-Transducer, sur des encodeurs BiLSTM, Transformer ou Conformer, avec en plus des wrappers pour le fine-tuning de wav2vec2 et Whisper dans le notebook. Tous les algorithmes de décodage sont présents : glouton, prefix beam search CTC avec un modèle de langage n-gramme, beam search à attention avec score de préfixe CTC, et décodage glouton et modified beam search pour RNN-T. Les modèles comptent de 1 à 1.3 M paramètres par défaut.

Je l’ai testé sur des données simples à 8 kHz qui s’entraînent en quelques minutes sur CPU : un langage jouet synthétique, le Free Spoken Digit Dataset et YESNO. CTC atteint 2.4 % de WER sur le langage jouet ; sur FSDD avec un locuteur mis de côté, le modèle CTC obtient 24.7 % de WER en glouton et 15.1 % avec beam search plus un modèle de langage 5-gramme sur les caractères. Ces runs montrent que chaque approche apprend et que les décodeurs fonctionnent ; ce ne sont pas des benchmarks, et le vrai entraînement se fait dans le notebook Kaggle/Colab.

La question

Si les modèles CTC, à attention et transducer partagent le même front-end, les mêmes encodeurs et le même entraîneur, de quoi chacun a-t-il réellement besoin pour apprendre l’alignement entre les trames audio et le texte ?

Fonctionnalités clés

Comment ça marche

  1. Front-end

    La forme d’onde devient un spectrogramme log-mel à 80 bandes, normalisé par énoncé (CMVN) et masqué en temps et en fréquence par SpecAugment pendant l’entraînement.

  2. Encoder

    Deux convolutions à pas sous-échantillonnent les trames d’un facteur quatre, puis une pile BiLSTM, Transformer ou Conformer construit des caractéristiques acoustiques contextuelles.

  3. Aligner les trames et les tokens

    CTC somme sur tous les chemins de trames qui se réduisent à la transcription ; les décodeurs à attention apprennent un alignement souple par cross-attention ; le RNN-T combine l’encodeur et un réseau de prédiction sur un treillis monotone.

  4. Entraîner

    Tokens caractères ou SentencePiece, Adam avec warm-up, batchs regroupés par durée, WER / CER de validation à chaque évaluation, et checkpoints qui permettent la reprise.

  5. Décoder et évaluer

    Glouton ou beam search, éventuellement fusionné avec un modèle de langage n-gramme ; stt-eval aligne les hypothèses avec les références et affiche le WER, le CER et les pires énoncés.

Exemples

Langage jouet, 400 phrases d’entraînement, 1,500 pas : CTC (2.4 % de WER) et RNN-T (5.3 %) apprennent en quelques centaines de pas, tandis que les trois décodeurs à attention (hybride, LAS, AED) n’ont pas encore trouvé l’alignement.
Langage jouet, 400 phrases d’entraînement, 1,500 pas : CTC (2.4 % de WER) et RNN-T (5.3 %) apprennent en quelques centaines de pas, tandis que les trois décodeurs à attention (hybride, LAS, AED) n’ont pas encore trouvé l’alignement.
Les mêmes décodeurs à attention avec quatre fois plus de données (1,600 phrases, 3,000 pas) : LAS atteint 0 % de WER dès le pas 1,000, l’hybride 21.7 %, et le décodeur Transformer simple progresse encore, à 70.4 %.
Les mêmes décodeurs à attention avec quatre fois plus de données (1,600 phrases, 3,000 pas) : LAS atteint 0 % de WER dès le pas 1,000, l’hybride 21.7 %, et le décodeur Transformer simple progresse encore, à 70.4 %.
Du vrai audio à 8 kHz : modèles CTC et hybride sur des extraits FSDD de trois chiffres avec un locuteur mis de côté (24.7 % et 39.8 % de WER), et CTC sur les 60 extraits de YESNO (56.9 % de WER).
Du vrai audio à 8 kHz : modèles CTC et hybride sur des extraits FSDD de trois chiffres avec un locuteur mis de côté (24.7 % et 39.8 % de WER), et CTC sur les 60 extraits de YESNO (56.9 % de WER).
Matrice de confusion des mots du décodeur CTC glouton sur le locuteur FSDD inconnu : la plupart des chiffres sont justes, et « six » est le seul mot que le modèle omet souvent (la colonne <del>) ou entend comme « eight ».
Matrice de confusion des mots du décodeur CTC glouton sur le locuteur FSDD inconnu : la plupart des chiffres sont justes, et « six » est le seul mot que le modèle omet souvent (la colonne <del>) ou entend comme « eight ».

Entrée

stt-train --data-dir data/synthetic --sample-rate 8000 --model ctc --encoder conformer --d-model 96 --n-layers 4 --max-steps 1500 --output-dir checkpoints/ctc && stt-eval data/synthetic/val.jsonl hyps.jsonl

Sortie

val WER 2.4%, CER 0.6% (1.04 M parameters, 20 min on one CPU with two threads)

Le run de démarrage rapide du README : un modèle Conformer + CTC sur le langage jouet synthétique, décodage glouton.

Entrée

python scripts/compare_decoders.py # same CTC checkpoint, 166 FSDD validation clips

Sortie

greedy: 24.7% WER | beam 8: 24.1% | beam 8 + character 5-gram LM (weight 0.3): 15.1%

Trois décodeurs sur un même checkpoint. Le modèle de langage, entraîné sur les 830 transcriptions d’entraînement, sait qu’il n’existe que dix mots et supprime la plupart des mots partiels comme « even » pour « seven ».

Stack technique

Ce que j’ai appris

Limites

Mots-clés

reconnaissance vocale · ASR · speech-to-text · CTC · RNN-Transducer · RNN-T · Listen Attend and Spell · encodeur-décodeur à attention · hybride CTC/attention · Conformer · BiLSTM · Transformer · prefix beam search · modèle de langage n-gramme · SpecAugment · spectrogramme log-mel · WER · CER · wav2vec2 · Whisper · PyTorch · ONNX · FSDD · LibriSpeech