MarianMT ONNX Model for Samaritan Hebrew ↔ Samaritan Aramaic Translation
Model Description
This is the ONNX (Open Neural Network Exchange) format version of the bidirectional translation model fine-tuned from Helsinki-NLP/opus-mt-sem-sem for translating between Samaritan Hebrew (smp) and Samaritan Aramaic (sam). The model supports both translation directions using special language tags (>>smp<< and >>sam<<).
Optimization: AdamW with cosine learning rate schedule with restarts
Precision: bfloat16 (BF16)
Training Time: ~47.8 minutes (2,866 seconds)
Dataset
Train Split: 9,610 sentence pairs (4,805 original bidirectional pairs)
Validation Split: 1,080 sentence pairs (540 original pairs)
Test Split: 108 sentence pairs (54 original pairs)
Total Dataset: 10,798 bidirectional sentence pairs from biblical parallel texts
Format: Pipe-delimited CSV with columns: Book|Chapter|Verse|Samaritan|Aramaic
Script: Hebrew script for both languages
The dataset contains parallel biblical texts in Samaritan Hebrew and Samaritan Aramaic (Targumic), with both directions included in the training data to enable bidirectional translation.
Training Process
Training was conducted with:
Early stopping patience: 5 evaluation steps
Evaluation every 500 steps
Best model checkpoint: checkpoint-26500 (BLEU: 60.48)
Final checkpoint: checkpoint-29000 (BLEU: 59.72 after 96.35 epochs)
Note: The ONNX model was converted from the trained PyTorch model and preserves the same performance metrics.
Performance
Evaluation Metrics (Test Set)
BLEU Score: 59.72 (best: 60.48 at checkpoint-26500)
chrF Score: 77.91
Character Accuracy: 51.09%
These metrics are identical to the original PyTorch model, as the ONNX conversion is lossless.
Training Metrics
Final Training Loss: 0.722
Final Evaluation Loss: 0.825
Best BLEU (validation): 60.48 at step 26,500
Installation
pip install onnxruntime transformers
For GPU acceleration (optional):
pip install onnxruntime-gpu
Usage
Inference with ONNX Runtime
python
1import numpy as np
2from transformers import AutoTokenizer
3import onnxruntime as ort
45# Load tokenizer6tokenizer = AutoTokenizer.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")78# Load ONNX model9session = ort.InferenceSession("model.onnx")1011# Translate from Samaritan Hebrew to Samaritan Aramaic12text_smp ="אחר הדברים האלה היה דבר יהוה אל אברם"13input_text =f">>smp<< {text_smp}"14inputs = tokenizer(input_text, return_tensors="np", max_length=313, truncation=True)1516# Prepare inputs for ONNX (convert to numpy arrays)17onnx_inputs ={18"input_ids": inputs["input_ids"].astype(np.int64),19"attention_mask": inputs["attention_mask"].astype(np.int64),20}2122# Run inference23outputs = session.run(None, onnx_inputs)24output_ids = outputs[0]2526# Decode the output27translation = tokenizer.decode(output_ids[0], skip_special_tokens=True)28print(translation)
Using Optimum for Seamless ONNX Inference
python
1from optimum.onnxruntime import ORTModelForSeq2SeqLM
2from transformers import AutoTokenizer
34# Load model and tokenizer5model = ORTModelForSeq2SeqLM.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")6tokenizer = AutoTokenizer.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")78# Translate from Samaritan Hebrew to Samaritan Aramaic9text_smp ="אחר הדברים האלה היה דבר יהוה אל אברם"10input_text =f">>smp<< {text_smp}"11inputs = tokenizer(input_text, return_tensors="pt", max_length=313, truncation=True)1213# Generate translation14outputs = model.generate(**inputs, max_length=313, num_beams=4, length_penalty=0.6)15translation = tokenizer.decode(outputs[0], skip_special_tokens=True)16print(translation)1718# Translate from Samaritan Aramaic to Samaritan Hebrew19text_sam ="בתר ממלליה אלין הוה מלל יהוה עם אברם"20input_text =f">>sam<< {text_sam}"21inputs = tokenizer(input_text, return_tensors="pt", max_length=313, truncation=True)2223outputs = model.generate(**inputs, max_length=313, num_beams=4, length_penalty=0.6)24translation = tokenizer.decode(outputs[0], skip_special_tokens=True)25print(translation)
Batch Inference
python
1from optimum.onnxruntime import ORTModelForSeq2SeqLM
2from transformers import AutoTokenizer
34model = ORTModelForSeq2SeqLM.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")5tokenizer = AutoTokenizer.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")67texts =[8">>smp<< אחר הדברים האלה היה דבר יהוה אל אברם",9">>sam<< בתר ממלליה אלין הוה מלל יהוה עם אברם"10]1112inputs = tokenizer(texts, return_tensors="pt", padding=True, max_length=313, truncation=True)13outputs = model.generate(**inputs, max_length=313, num_beams=4, length_penalty=0.6)14translations = tokenizer.batch_decode(outputs, skip_special_tokens=True)1516for translation in translations:17print(translation)
Language Tags
The model uses special language tags to indicate translation direction:
These tags must be included at the beginning of the input text for proper direction control.
ONNX-Specific Advantages
Performance: ONNX Runtime provides optimized inference, often faster than PyTorch for production workloads
Portability: Run on various platforms (Windows, Linux, macOS, Android, iOS, Web)
Hardware Support: Optimized for different hardware (CPU, GPU, NPU, TPU)
Memory Efficiency: Lower memory footprint compared to PyTorch models
Production Ready: Better suited for deployment in production environments
Limitations and Considerations
Domain Specificity: The model was trained primarily on biblical texts and may perform better on similar religious or historical texts.
Script Normalization: Input texts may need normalization (removal of diacritics/niqqud) depending on your use case.
Length Constraints: Maximum sequence length is 313 tokens. Longer texts will be truncated.
Character Accuracy: At 51.09%, character-level accuracy indicates room for improvement, though BLEU and chrF scores suggest reasonable translation quality.
ONNX Limitations: Some advanced generation features (like sampling with temperature) may have limited support compared to PyTorch. Beam search and greedy decoding are fully supported.
Citation
If you use this model, please cite:
bibtex
1@misc{marianmt-smp-sam-onnx,
2 title={MarianMT ONNX Model for Samaritan Hebrew ↔ Samaritan Aramaic Translation},
3 author={johnlockejrr},
4 year={2025},
5 howpublished={\url{https://huggingface.co/johnlockejrr/marianmt-smp-sam-onnx}}
6}