--- license: agpl-3.0 library_name: pytorch language: - hi - or - ta datasets: - google/fleurs tags: - forced-alignment - phoneme-recognition - phoneme-segmentation - speech - multilingual --- # mbfa-brahmic (p4mbfa · brahmic) A context-free CNN phoneme encoder and forced aligner (p4mbfa, the successor of CUPE / p3cupe), for the **brahmic** language group of [standard_g2p](https://github.com/tabahi/CharsiuG2P). Each 5 ms frame is classified from at most 120 ms of audio (38.9 ms receptive field), so the model cannot learn any language's phonotactics. Phone boundaries come from a segmental Viterbi decoder over the known phone sequence, refined to sub-frame precision at the crossing of neighbouring posteriors. | head | labels | size | |---|---|---| | `ph` | local tokens of `brahmic` (incl. ` SIL noise `) | 96 | | `phg` | gold phoneme groups, shared by every language group | 15 | | `tone` | tone values, shared by every language group; present but untrained (no language in this group has a tone layer) | 22 | Languages (the FLEURS languages it was trained on): hi, or, ta. standard_g2p maps every member of the group onto the same tokens, so other members may align too, untested. ## Training **Data:** FLEURS brahmic, all 16.8 h, training noise_level 0.02. **Checkpoint:** experiment `mb01a`, epoch 4, selected on FLEURS val_loss (best of 20 epochs; final epoch 3.707). Trunk and phg_head from latin ma02a (final epoch), ph_head and tone_head trained fresh. | metric | value | |---|---| | `val_loss` | 3.5548 | | `val_frame_acc` | 0.2727 | | `val_frame_acc_groups` | 0.4633 | `val_*` are on held-out FLEURS clips but are scored against the model's own alignments (there are no boundary labels outside English), so they measure self-consistency, not boundary accuracy. Labels are standard_g2p dictionary pronunciations (gold inventory `9438371ed6dd`), not phonetic transcriptions of what was said. ## Usage The code is in [https://github.com/tabahi/bfa_models](https://github.com/tabahi/bfa_models) (`p4mbfa/`); clone it and run from its root. ```python from p4mbfa.inference import MbfaAligner aligner = MbfaAligner.from_pretrained("Tabahi/mbfa-brahmic") wav = aligner.load_audio("clip.wav") # mono, 16000 Hz phones = ["SIL", "h", "ɛ", "l", "o", "SIL"] # this group's tokens (config.json labels.tokens) for seg in aligner.align(wav, phones): print(seg["token"], seg["start_ms"], seg["end_ms"]) ``` `aligner.encode(wav)` returns the per-frame log posteriors of all three heads. Text -> tokens is standard_g2p's job (`goldG2P.phonemize_sentence` then `lang_group_inventory.to_local`); `config.json` lists the token strings. `from_pretrained` downloads only `config.json` and `model.safetensors`. ## Fine-tuning `ckpt/brahmic_fleurs17h_mb01a_e4_val_loss=3.555.ckpt` is the training checkpoint (PyTorch Lightning, weights only, a pickle: load it only if you trust this repo). Download it, then point a p4mbfa yaml at it to continue training, or to train a new language group on its trunk and shared `phg` head: ```bash hf download Tabahi/mbfa-brahmic "ckpt/brahmic_fleurs17h_mb01a_e4_val_loss=3.555.ckpt" --local-dir tmp/hf/mbfa-brahmic ``` ```yaml ckpt_path: "tmp/hf/mbfa-brahmic/ckpt/brahmic_fleurs17h_mb01a_e4_val_loss=3.555.ckpt" reset_fine_heads: true # new lang_group: rebuild ph_head / tone_head; false = same group ``` License: AGPL-3.0.