Skip to main content

Phonémiseur neural du français — G2P + POS + Morpho + Liaison + Groupes de lecture (BiLSTM multi-tâche)

Project description

Lectura Phonemiseur

Phonemiseur neural du francais : G2P + POS + Morphologie + Liaison + Groupes de lecture

Un seul modele BiLSTM char-level multi-tete (1.75M parametres, ONNX INT8 = 1.8 Mo) qui predit simultanement :

  • G2P : transcription phonemique IPA (98.5% word accuracy)
  • POS : etiquetage morpho-syntaxique — 19 tags (98.5% accuracy)
  • Morphologie : genre, nombre, temps, mode, personne, forme verbale (96-99.8%)
  • Liaison : prediction des liaisons obligatoires/facultatives (F1 90.6%)

Quatre backends d'inference : ONNX Runtime, NumPy, pur Python (zero dependance), ou API serveur.

Demarrage rapide

Installation

pip install lectura-phonemiseur             # zero dependance (backend pur Python)
pip install lectura-phonemiseur[numpy]      # backend NumPy
pip install lectura-phonemiseur[onnx]       # backend ONNX Runtime (le plus rapide)

Utilisation rapide (factory — recommande)

from lectura_phonemiseur import creer_engine
from lectura_phonemiseur.tokeniseur import tokeniser

# Mode auto : utilise les modeles locaux si presents, sinon l'API
engine = creer_engine()

tokens = tokeniser("Les enfants sont arrives a la maison.")
result = engine.analyser(tokens)

print(result["g2p"])      # ['le', 'ɑ̃fɑ̃', 'sɔ̃', 'aʁive', 'a', 'la', 'mɛzɔ̃']
print(result["pos"])      # ['ART:def', 'NOM', 'AUX', 'VER', 'PRE', 'ART:def', 'NOM']
print(result["liaison"])  # ['Lz', 'none', 'Lt', 'none', 'none', 'none', 'none']
print(result["morpho"])   # {'Number': ['Plur', ...], 'Gender': [...], ...}

Modes disponibles : "auto" (defaut), "local", "api", "onnx", "numpy", "pure".

Separateurs pour mots composes

Le modele V4 gere nativement les separateurs dans les mots composes et les elisions :

# IPA plat (defaut)
result = engine.analyser(["abat-jour", "d'abord"])
print(result["g2p"])  # ['abaʒuʁ', 'dabɔʁ']

# Avec separateurs preserves
result = engine.analyser(["abat-jour", "d'abord"], sep_hyphen=True, sep_apos=True)
print(result["g2p"])  # ['aba-ʒuʁ', "d'abɔʁ"]

Mode API (zero config)

Sans modeles locaux, creer_engine() utilise automatiquement l'API Lectura :

engine = creer_engine()  # mode="auto" → API si pas de modeles locaux
# ou explicitement :
engine = creer_engine(mode="api", api_url="https://api.lec-tu-ra.com")

Variables d'environnement : LECTURA_API_URL, LECTURA_API_KEY.

Modeles locaux (licence commerciale)

Pour utiliser l'inference locale sans API, achetez les modeles sur https://www.lec-tu-ra.com/solutions/services/

Installez les modeles dans ~/.lectura/models/g2p/ :

mkdir -p ~/.lectura/models/g2p
cp unifie_v4_int8.onnx unifie_v4_vocab.json ~/.lectura/models/g2p/

Ou via variable d'environnement :

export LECTURA_MODELS_DIR=/path/to/models

creer_engine() detecte automatiquement les modeles locaux.

Backends d'inference

Backend Dependances Vitesse Usage
API aucune ~100 ms/phrase Defaut (Niveau 1), zero config
ONNX Runtime onnxruntime ~2 ms/phrase Production locale
NumPy numpy ~50 ms/phrase Leger
Pur Python aucune ~200 ms/phrase Embarque, portabilite max

Les backends locaux (ONNX, NumPy, Pure) produisent des resultats identiques.

Features lexicales (optionnel)

Le modele accepte en entree optionnelle un vecteur de 24 dimensions par mot, construit a partir d'un lexique de candidats POS. Cela ameliore la prediction POS, la morphologie et les liaisons.

Le lexique est detecte automatiquement si lectura-lexique est installe, ou via le parametre lexicon_path de creer_engine(). Sans lexique, le modele fonctionne normalement (features = zeros).

# Avec lexique (automatique si lectura-lexique est installe)
engine = creer_engine()

# Desactiver les features lexicales
result = engine.analyser(tokens, use_lex=False)

Corrections G2P

Le post-traitement applique automatiquement trois niveaux de corrections :

  1. Homographes POS-aware (~2 700 entrees) : desambiguisation par categorie grammaticale (ex: jean/NOM = dʒin vs Jean/NOM PROPRE = ʒɑ̃)
  2. Table plate (~3 500 corrections manuelles) : corrections ciblees avec separateurs
  3. Corrections lexique (optionnel, ~30 000 entrees) : corrections etendues depuis le lexique de reference
# Activer les corrections etendues du lexique
engine = creer_engine(corrections_lexique=True)

Les corrections stockent les separateurs dans l'IPA (aba-ʒuʁ, d'abɔʁ). Quand sep_hyphen/sep_apos ne sont pas actifs, les separateurs sont automatiquement retires.

Benchmarks (dev set, modele V4 avec features lexicales)

Tache Metrique Score
G2P Word Accuracy 98.5%
G2P PER (Phone Error Rate) 0.5%
POS Accuracy 98.5%
Liaison Macro F1 90.6%
Morpho — Number Accuracy 96.4%
Morpho — Gender Accuracy 98.3%
Morpho — VerbForm Accuracy 99.6%
Morpho — Mood Accuracy 99.8%
Morpho — Tense Accuracy 99.8%
Morpho — Person Accuracy 99.7%

API

tokeniser(text) -> list[str]

Tokenise une phrase francaise (gestion apostrophes, ponctuation, contractions).

creer_engine(mode, models_dir, api_url, api_key, lexicon_path, corrections_lexique)

Factory pour creer un engine d'inference. Modes : "auto", "local", "api", "onnx", "numpy", "pure". models_dir permet de specifier le dossier des modeles (sinon cascade automatique). corrections_lexique=True charge les corrections etendues du lexique (~30K entrees).

engine.analyser(tokens, *, use_lex=True, sep_hyphen=False, sep_apos=False) -> dict

Analyse une liste de tokens et retourne un dictionnaire :

  • g2p : transcription IPA par token
  • pos : etiquette POS par token
  • liaison : label liaison par token (none, Lz, Lt, Ln, Lr, Lp)
  • morpho : dict de listes par trait (Number, Gender, VerbForm, Mood, Tense, Person)

Options :

  • use_lex=False : desactive les features lexicales
  • sep_hyphen=True : conserve les tirets dans l'IPA des mots composes
  • sep_apos=True : conserve les apostrophes dans l'IPA des elisions

corriger_g2p(mot, ipa, pos, *, keep_sep=False) -> str

Applique la table de corrections puis les regles (ex+consonne, ex+voyelle, yod). keep_sep=True conserve les separateurs - et ' dans l'IPA retourne.

appliquer_liaison(tokens, phones, liaisons) -> list[str]

Applique les consonnes de liaison entre tokens consecutifs.

Architecture du modele (V4)

Phrase → Char Embedding (64d) → Shared BiLSTM (2x160h → 320d)
                                        |
                    +-------------------+-------------------+
                    v                                       v
              G2P Head (per-char)         Word repr (320d) + Lex Features (24d)
              Linear(320→40)                        |
                                          Word BiLSTM (128h → 256d)
                                                |
                                    +---+---+---+---+---+---+---+
                                   POS Num Gen VF  Mood Tns Per Liaison
  • Entree : sequence de caracteres avec <BOS>, <SEP>, <EOS>
  • Lex Features : 24d par mot (21 POS one-hot + known + n_candidates + unambiguous)
  • G2P : prediction par caractere avec labels _CONT (continuation) et separateurs -/'
  • Tetes mot : representation mot = fwd[dernier_char] || bwd[premier_char] + lex_proj(24→24)

Limites connues

  • Le G2P est evalue en contexte phrastique ; la performance sur mots isoles hors-vocabulaire est plus basse (~92%)
  • La liaison Lp est tres rare dans les donnees d'entrainement (F1 = 66.7%)
  • Les noms propres et neologismes peuvent produire des transcriptions approximatives

Changelog

4.1.1

  • Fix pipeline_formules : elisions clitiques, propagation sep_hyphen aux compounds, neutralisation liaison avant ponctuation

4.1.0

  • Fix separateurs : corriger_g2p() avec keep_sep, corrections enrichies avec separateurs
  • Simplification : V4 uniquement, suppression cascades V2/V3
  • Ajout g2p_corrections_lexique.json (30K corrections avec separateurs)
  • Suppression dependance lexique_pos_candidates.json (fallback lectura-lexique)

4.0.2

  • Corrections G2P etendues, homographes NOM/NOM PROPRE

4.0.0

  • Renommage lectura-g2plectura-phonemiseur
  • Modele V4 avec separateurs natifs

Licence

Ce module est distribue sous licence AGPL-3.0 (non commerciale) — voir LICENCE.txt.

Pour un usage commercial, contacter contact@lec-tu-ra.com.

Voir aussi ATTRIBUTION.md pour les credits.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lectura_phonemiseur-4.1.2.tar.gz (355.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lectura_phonemiseur-4.1.2-py3-none-any.whl (355.6 kB view details)

Uploaded Python 3

File details

Details for the file lectura_phonemiseur-4.1.2.tar.gz.

File metadata

  • Download URL: lectura_phonemiseur-4.1.2.tar.gz
  • Upload date:
  • Size: 355.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for lectura_phonemiseur-4.1.2.tar.gz
Algorithm Hash digest
SHA256 85f37864bb48549dd8dd089bbcaafc845dc45e11c0e7db02177c083887d167aa
MD5 164c92de166388a900f85633f7605557
BLAKE2b-256 cb6aaecb8c0d58797990348da28dde55331c1b697e97ae20f991d64df15ce045

See more details on using hashes here.

File details

Details for the file lectura_phonemiseur-4.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for lectura_phonemiseur-4.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e7a05695bef7277ac1d26680bb649e9c051473521ccddb013b573d804c6e2031
MD5 c90cc72628467dccd87d383b453111d6
BLAKE2b-256 846601363e975ae80067e92a1274250aec7abecf953a7a3e4c9d03f366474be7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page