Aksharakuppy β€” English ↔ Malayalam Translator

A from-scratch Transformer neural machine translation model for English ↔ Malayalam, built and released by endurasolution. A single model translates both directions using direction tags.

Powered by Aksharakuppy.

Live demo

Try the model directly in your browser (runs on free ZeroGPU):

πŸ‘‰ Open the live demo

Models

Two checkpoints are included:

Model Description
best.pt Base model trained from scratch on ~7.4M En–Ml sentence pairs
finetunedcorrected.pt Base model fine-tuned on BPCC human-annotated data + curated corrections (recommended)
  • Architecture: 6-layer encoder-decoder Transformer (~52M params), d_model=512
  • Tokenizer: SentencePiece BPE, 16k vocab, shared En+Ml
  • Direction control: <2ml> (to Malayalam), <2en> (to English)

Usage

Install dependencies:

pip install torch sentencepiece

Translate:

import torch, sentencepiece as spm
from model import MTModel
from config import CFG

DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
sp = spm.SentencePieceProcessor(model_file="checkpoints/spm.model")
PAD, BOS, EOS = 0, 1, 2
ML_TAG = sp.piece_to_id("<2ml>"); EN_TAG = sp.piece_to_id("<2en>")

model = MTModel(sp.get_piece_size(), CFG.d_model, CFG.nhead, CFG.layers,
                CFG.dim_ff, dropout=0.0, max_len=CFG.max_len).to(DEVICE)
sd = torch.load("checkpoints/finetunedcorrected.pt", map_location=DEVICE)["model"]
model.load_state_dict({k.replace("_orig_mod.", ""): v for k, v in sd.items()})
model.eval()

@torch.no_grad()
def translate(text, to="ml"):
    tag = ML_TAG if to == "ml" else EN_TAG
    ids = [BOS, tag] + sp.encode(text, out_type=int)[:CFG.max_len-2] + [EOS]
    src = torch.tensor([ids], device=DEVICE)
    ys = torch.tensor([[BOS]], device=DEVICE)
    for _ in range(128):
        nxt = model(src, ys)[0, -1].argmax().item()
        ys = torch.cat([ys, torch.tensor([[nxt]], device=DEVICE)], 1)
        if nxt == EOS: break
    out = [i for i in ys[0].tolist() if i not in (PAD, BOS, EOS, ML_TAG, EN_TAG)]
    return sp.decode(out)

print(translate("The weather is nice today.", "ml"))
print(translate("ΰ΄Žΰ΄¨ΰ΄Ώΰ΄•ΰ΅ΰ΄•ΰ΅ ഡിഢകࡍകࡁനࡍനࡁ.", "en"))

Local web demo

pip install fastapi uvicorn
uvicorn translate_server:app --host 0.0.0.0 --port 8081

Open http://localhost:8081 β€” includes a model selector and side-by-side comparison.

Limitations

  • Trained from scratch on limited data; conveys meaning well on everyday sentences but may occasionally add or drop a word (e.g. inferring "morning" from context) or pick a synonym. Not intended to match large pretrained systems.
  • Proper nouns / names may vary in spelling.

License & credits

Model weights: CC-BY-NC-4.0 (non-commercial), following the Samanantar data license. Training data: AI4Bharat Samanantar (CC-BY-NC-4.0) and BPCC (CC0 for mined/seed subsets), plus a custom corpus. Please cite AI4Bharat for the underlying data.

Powered by Aksharakuppy.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Datasets used to train endurasolution/aksharakuppy_English-Malayalam-Translate

Space using endurasolution/aksharakuppy_English-Malayalam-Translate 1