Décodeur

Lectura Décodeur

Décodeur phonétique neural CNN-BiGRU-CTC — audio vers phones IPA

Présentation

Brique atomique de décodage phonétique : un modèle CNN-BiGRU-CTC medium (10.6M paramètres, ONNX INT8 ~38 Mo) qui convertit un signal audio 16 kHz en une séquence de phones IPA avec séparateurs de mots, liaisons et ponctuation.

Caractéristique Valeur
Architecture CNN [48, 96] (2 couches) + BiGRU 384x4 + CTC head
Paramètres 10.6M
Performance PER ~4.34% (formules v2)
Vocabulaire 59 tokens (46 phones IPA + liaisons + ponctuation + spéciaux)
Audio PCM float32 mono, 16 kHz
Mel 80 bins, n_fft=512, hop=160, win=400
Modèle ONNX INT8, ~38 Mo
Backends ONNX Runtime (local) ou API serveur

Le modèle medium supporte les sigles et formules grâce à un fine-tuning spécialisé.

Brique vs Pipeline : Le CTC est le décodeur brut (audio → phones IPA). Pour le pipeline complet STT (audio → texte orthographique, avec P2G et formules), voir lectura-stt.


Essayer en ligne


STT-Formules

En complément du CTC principal, le module STT-Formules est un modèle CTC autonome et léger (~600K paramètres) entraîné spécifiquement pour la reconnaissance de formules. Au lieu de phonèmes IPA, il produit directement des tokens sémantiques (87 classes : nombres, mois, devises, lettres, etc.), avec un TER de ~1.17%.

pip install lectura-stt-formules[inference]

Exemple de code

import numpy as np
from lectura_decodeur import creer_engine

engine = creer_engine()

# Transcrire un fichier WAV (charger avec wave/soundfile)
import wave
with wave.open("bonjour.wav", "rb") as wf:
    sr = wf.getframerate()
    audio = np.frombuffer(
        wf.readframes(wf.getnframes()), dtype=np.int16
    ).astype(np.float32) / 32768.0

ipa = engine.transcrire(audio, sr=sr)
print(ipa)  # "b ɔ̃ ʒ u ʁ"
# CLI CTC : transcrire un fichier
python -m lectura_decodeur bonjour.wav

# CLI CTC : enregistrer au micro
python -m lectura_decodeur --micro

# CLI CTC : enregistrer 5 secondes
python -m lectura_decodeur --micro --duree 5

# CLI CTC : mode continu (Ctrl+C pour quitter)
python -m lectura_decodeur --micro --continu

STT-Formules (audio → tokens sémantiques)

from lectura_stt_formules import creer_engine

engine = creer_engine()

result = engine.transcrire("nombre.wav")
print(result["names"])   # ["DEUX", "CENT", "VINGT", "ET", "UN"]
print(result["tokens"])  # [4, 25, 20, 29, 3]

Le vocabulaire de sortie comprend 87 tokens sémantiques : nombres atomiques (0-16), dizaines, échelles, connecteurs, mois, heures, devises, pourcentages, ordinaux, fractions et lettres A-Z pour les sigles.


Architecture

Audio 16kHz mono
     │
     ▼
┌─────────────┐
│ Mel spectro  │  numpy pur (80 bins, 100 fps)
│ STFT + log   │
└─────┬───────┘
      │  (1, 1, 80, T)
      ▼
┌─────────────┐
│ CNN Frontend │  2x Conv2d stride 2 → subsampling ×4
└─────┬───────┘
      │  (1, T/4, 1280)
      ▼
┌─────────────┐
│ BiGRU ×4     │  4 couches bidirectionnelles (384h)
└─────┬───────┘
      │  (1, T/4, 512)
      ▼
┌─────────────┐
│ CTC head     │  Linear → 59 classes
└─────┬───────┘
      │  (1, T/4, 59)
      ▼
┌─────────────┐
│ CTC greedy   │  argmax + deduplique + supprime blanks
│ decode       │
└─────┬───────┘
      │
      ▼
  "b ɔ̃ ʒ u ʁ | l ə | m ɔ̃ d"

Installation

# Décodeur avec backend ONNX local
pip install lectura-decodeur[onnx]

# Mode API uniquement (sans ONNX)
pip install lectura-decodeur

# STT-Formules (tokens sémantiques, inférence locale)
pip install lectura-stt-formules[inference]

Par défaut, le module utilise l’API Lectura si aucun modèle local n’est trouvé. Pour l’inférence locale, installez les modèles ONNX dans ~/.lectura/models/ ou utilisez le backend ONNX avec les modèles embarqués (disponibles sous licence commerciale).


Caractéristiques techniques

  • CNN-BiGRU-CTC medium : 10.6M paramètres, PER ~4.34%
  • Mel spectrogram numpy pur : pas de dépendance torchaudio
  • Décodage CTC greedy : zéro dépendance
  • 59 tokens : 46 phones IPA français + 6 liaisons + 5 ponctuations + 2 spéciaux
  • ONNX INT8 : modèle quantifié ~38 Mo
  • CLI intégrée : python -m lectura_decodeur (fichier WAV ou micro)
  • Factory creer_engine() : cascade auto ONNX → API
  • STT-Formules : ~600K params, 87 tokens sémantiques, TER ~1.17%
  • Python 3.10+ avec type hints complets
  • Licence : AGPL-3.0 (code) — modèles sous licence commerciale