Tigre Phoneme Recognition (WavLM-large, frozen features)
CTC phoneme-recognition model for Tigre (ISO 639-3 tig), a Semitic language of Eritrea/Sudan.
Input: raw audio. Output: a sequence of phonemes — not words or Tigre script.
⚠️ Read before using: phoneme targets remain heuristic, though grounded in real Tigre linguistics
Training/eval targets come from a rule-based G2P grounded in Idris, Saleh Mahmud (2015), A Comparative Study of the Tigre Dialects (PhD dissertation, Freie Universität Berlin, supervisor Prof. Rainer Voigt) — a dedicated linguistic study of Tigre itself, not a related language. This confirmed two real corrections to an earlier version derived from a closely related Ge'ez-script language: Tigre's 6th Ge'ez vowel order is mid-central /ə/ (not high-central /ɨ/, and merges with order 1), and ጸ/ፀ is an ejective fricative /sʼ/, not an affricate. Everywhere the dissertation doesn't give a clear Tigre-specific value, the G2P falls back to espeak-ng's real dictionary data for closely related Ge'ez-script languages already supported by espeak-ng (ejectives, pharyngeals, and glottal consonants correctly distinguished either way).
Still genuinely unresolved, confirmed by the dissertation itself: gemination is phonemic in Tigre but never marked in Ge'ez orthography, for any language using the script — no rules file can recover it from spelling alone. And this is a dissertation specifically about cross-dialect variation — most strikingly, /sʼ/ and /z/ aren't phonemes at all in several major dialects (Beni-ʿĀmər, ʾAlgaden, and others), merging with /tʼ/ and /d/ there. This G2P encodes one reasonable default, not a single pronunciation valid for every Tigre speaker.
If you need reliable Tigre transcription rather than phoneme-level research output, use
BeitTigreAI/tigre-asr-Wav2Vec2Bert
instead — a character/grapheme-level Wav2Vec2-BERT CTC model trained on Common Voice Tigre,
reporting 8.8% WER. It sidesteps this model's core limitation entirely by never using phonemes as a
target in the first place. This model exists to answer a different, narrower research question
(how self-supervised phoneme recognition transfers to Tigre, per the
base paper's methodology) — it isn't a substitute
for a general-purpose Tigre ASR system.
tig_rules — a real espeak-ng dictionary, included in this repo
Alongside the model, this repo includes tig_rules: an espeak-ng-format phoneme rules
file for Tigre, built from the same dissertation and tested for real — compiled with an
actually-built espeak-ng (tested against multiple existing phoneme tables for closely related
Ge'ez-script languages already in espeak-ng, including a from-source build with a newer,
not-yet-released one), and run on real Tigre sentences.
It compiles with 0 errors and produces sensible output (e.g. "tigre language" →
t@g'@r@ kwan'@kwa d@g'@m@). One documented compromise: Tigre's ejective fricative /sʼ/ is kept
as the affricate symbol ts used for this same sound in the closely related languages above,
because a true ejective-fricative phoneme isn't defined
in any current espeak-ng phoneme table for this language family — adding one needs real
acoustic/formant modeling, not just a rules-file entry. Full provenance, corrections, and known
limitations (same as above) are documented in the file's own header. Meant to be reusable in other
projects, the way espeak-ng support for other, closely related Ge'ez-script languages started —
not a finished, community-vetted resource.
Results
| Model | Setup | Val PER | Test PER | Test Loss |
|---|---|---|---|---|
| WavLM-large | Frozen encoder, linear CTC head | 0.242 | 0.280 | 1.165 |
| HuBERT-large | Full fine-tune, all 315M params trainable | – | 0.259 | 1.495 |
For context, PER (test) for the frozen-WavLM-large method on other low-resource languages (source paper): Italian 18.8%, Dutch 27.2%, Tigre 28.0%, Turkish 30.1%, Russian 32.3%, Swedish 33.1%. Tigre has no linguistic relation to English (the pretraining language), unlike every other language in that comparison.
Full fine-tuning ends up ahead by 2.1 points (25.9% vs. 28.0%) — but only after real instability
along the way, worth reporting honestly rather than smoothing over: at the paper's own reported
learning rate range, full fine-tuning repeatedly failed outright (val/per pinned at 1.0, i.e. the
model collapsed to predicting nothing) before a learning rate in between worked. The frozen-feature
setup needed no such search and converged cleanly on the first attempt. Full fine-tuning has higher
ceiling capacity here, but is far more sensitive to hyperparameters with this little data — both
results are single runs, no multiple seeds.
Training data
Common Voice Scripted Speech 23.0 — Tigre, ~12 validated hours, 150 speakers. Distributed via Mozilla Data Collective, not the Hugging Face Hub. 1,671 train / 1,311 validation / 1,623 test examples after length filtering.
Method & attribution
Base model: microsoft/wavlm-large, encoder frozen,
linear CTC head trained from scratch. Phoneme vocabulary (65 tokens) from
PHOIBLE. Tigre phonological data from Idris (2015), cited above. Training
code adapted from ASR-project/Multilingual-PR
(Apavou, Belkada, Tronchon, Zucker) — that repository has no LICENSE file; this is a good-faith
derivative with attribution, not a formally licensed reuse.
Usage
import torch
import soundfile as sf
from transformers import WavLMForCTC, Wav2Vec2Processor
model = WavLMForCTC.from_pretrained("BeitTigreAI/tigre-wavlm-phoneme")
processor = Wav2Vec2Processor.from_pretrained("BeitTigreAI/tigre-wavlm-phoneme")
audio, sr = sf.read("https://huggingface.co/BeitTigreAI/tigre-hubert-phoneme/blob/main/sample.wav") # mono, 16kHz
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
with torch.no_grad():
logits = model(inputs.input_values).logits
predicted_ids = torch.argmax(logits, dim=-1)
phonemes = processor.batch_decode(predicted_ids)
print(phonemes)
Limitations
- Heuristic G2P (see above) — the biggest caveat, applies to both training targets and any phoneme-string output you decode. Now grounded in a real Tigre-specific dissertation rather than a related-language guess, but still not a validated pronunciation lexicon.
- Small dataset, single train/val/test split, no cross-validation.
- No prior Tigre phoneme-recognition baseline exists for comparison.
- Not intended for production use (captions, transcription products, etc.) — a research/exploratory artifact for a language with very little prior speech-tech work.
- Downloads last month
- -