Downloads · 30 days
3
14% of all-time downloads
Prabuddha14/bn-mni-transliteration-ct2
bn-mni-transliteration-ct2 is a translation model from Prabuddha14. Use it when you need text moved from one language to another. It is set up for ctranslate2. The card lists the license as cc-by-4.0.
A character-level Transformer that transliterates Manipuri (Meiteilon) written in Bengali script into the Meetei Mayek script. Trained with OpenNMT-py and shipped here in CTranslate2 format for fast CPU inference.
Downloads · 30 days
3
14% of all-time downloads
All-time downloads
22
Public
Repo size
27.4 MB
Likes
0
Public
Click a slice to open those files.
.bin27.4 MB · 100%
From the Hugging Face model README
A character-level Transformer that transliterates Manipuri (Meiteilon) written in Bengali script into the Meetei Mayek script. Trained with OpenNMT-py and shipped here in CTranslate2 format for fast CPU inference.
👉 Try it in the browser: Space
| Task | Script transliteration (not translation) |
| Source | Meiteilon in Bengali script |
| Target | Meiteilon in Meetei Mayek (U+ABC0–U+ABFF) |
| Unit | One word, decoded as a character sequence |
| Parameters | 5.57 M |
| Architecture | Transformer, 3 encoder + 3 decoder layers, d_model 256, FFN 1024, dropout 0.1 |
| Vocabulary | 80 source characters, 66 target characters |
| Training | 300,000 steps (~18 h), final validation accuracy 99.67 %, validation ppl 1.44 |
| Runtime | CTranslate2 (int/float CPU inference, ~27 MB) |
import ctranslate2
from huggingface_hub import snapshot_download
path = snapshot_download("Prabuddha14/bn-mni-transliteration-ct2")
translator = ctranslate2.Translator(path, device="cpu")
word = "এনর্জি"
result = translator.translate_batch([list(word)], beam_size=5)
print("".join(result[0].hypotheses[0])) # ꯑꯦꯅꯔꯖꯤ
The model takes one word at a time, as a list of its characters. To run over
running text, use the transliterate.py helper from the Space, which handles
sentence splitting, batching, caching and the details below.
Getting these wrong noticeably degrades output:
ড় ঢ় য় are Unicode
composition exclusions, so unicodedata.normalize("NFC", …) splits them
into base + U+09BC. The model's vocabulary holds the precomposed forms, so
they must be joined back up after normalising.২০২৪ → ꯲꯲꯲꯲꯲꯲꯲꯲). Map them arithmetically instead:
Bengali ০–৯ (U+09E6–U+09EF) → Meetei Mayek ꯰–꯹ (U+ABF0–U+ABF9).<unk>. The danda । maps to the cheikhei ꯫.On a 100-sentence internal test set (test.bn / ref.mni), beam size 5:
| Pipeline | CER |
|---|---|
| Strip punctuation, decode every word (original notebook) | 0.138 |
| With the three input rules above | 0.079 |
CER is computed with jiwer over the concatenated lines. The gain comes from
preserving punctuation, mapping digits directly, and recomposing nukta letters —
the model weights are identical in both rows.
Developed at CFILT, IIT Bombay.