Qartify NLLB Menu Translation
A fine-tuned NLLB-200 Distilled 600M model for multilingual restaurant menu translation, developed for the Qartify platform.
This repository contains:
- the original fine-tuned PyTorch checkpoint
- an optimized ONNX INT8 version for production inference
- the dish-name protection lexicon used by the translation pipeline
Model Overview
Base Model
facebook/nllb-200-distilled-600M
Supported Languages
- Arabic (
arb_Arab)
- French (
fra_Latn)
- English (
eng_Latn)
Supported translation directions:
- Arabic → French
- Arabic → English
- French → Arabic
- French → English
- English → Arabic
- English → French
Training
The model was fine-tuned on a curated multilingual restaurant menu dataset containing:
- restaurant menu items
- dish names
- food descriptions
- multilingual parallel translations
- manually reviewed and cleaned samples
The objective was to improve translation quality for restaurant menus while preserving culturally specific food names.
Evaluation
Translation Quality
The fine-tuned checkpoint significantly improves restaurant menu translation compared with the original NLLB model.
Dish Name Preservation
Dish-name preservation is achieved using a detect-and-substitute post-processing pipeline together with the provided dish lexicon.
Result
- 100% dish-name preservation on the protected evaluation dataset.
The translation model generates the translated sentence, while the post-processing pipeline restores protected dish names exactly.
Example
Arabic
↓
French
Tajine de poulet aux légumes
Arabic
↓
English
Loading the PyTorch Checkpoint
1from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
2
3tokenizer = AutoTokenizer.from_pretrained(
4 "BlockwardSARL/qartify-nllb-menu-translation/checkpoint"
5)
6
7model = AutoModelForSeq2SeqLM.from_pretrained(
8 "BlockwardSARL/qartify-nllb-menu-translation/checkpoint"
9)
Example inference:
1tokenizer.src_lang = "arb_Arab"
2
3inputs = tokenizer(
4 "طاجين دجاج بالخضر",
5 return_tensors="pt"
6)
7
8generated = model.generate(
9 **inputs,
10 forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn")
11)
12
13translation = tokenizer.batch_decode(
14 generated,
15 skip_special_tokens=True
16)
17
18print(translation[0])
ONNX Inference
This repository also provides an optimized ONNX INT8 Dynamic Quantized version intended for fast production inference with ONNX Runtime.
The ONNX model offers:
- lower memory usage
- faster inference
- production-ready deployment
Dish Protection
The repository includes:
lexicon/
└── dish_lexicon.json
This lexicon is used by the translation service to preserve protected dish names through the detect-and-substitute pipeline.
Repository Structure
checkpoint/
├── config.json
├── model.safetensors
├── tokenizer.json
├── tokenizer_config.json
├── sentencepiece.bpe.model
├── generation_config.json
└── special_tokens_map.json
onnx_int8_dynamic/
├── encoder_model.onnx
├── decoder_model.onnx
├── decoder_with_past_model.onnx
└── ...
lexicon/
└── dish_lexicon.json
Intended Use
Recommended for:
- restaurant menu translation
- OCR menu pipelines
- food ordering platforms
- hospitality applications
- multilingual restaurant management systems
Limitations
The model was fine-tuned specifically for restaurant menu translation.
Performance on general-domain text has not been evaluated.
Perfect dish-name preservation requires the accompanying dish lexicon and detect-and-substitute pipeline.
Related Qartify Artifacts
This model is part of the Qartify AI internship project. Related implementation repositories and technical documentation are available below:
Citation
If you use this model in academic work, please cite:
Qartify NLLB Menu Translation
Blockward SARL
2026
Authors
Developed by Blockward SARL
Master Research Internship – Qartify AI
Ranya El Hamdaoui