Views
No views yet
nllb-200-distilled-600M specialized for French-Moore (Mossi) language translation.\n It has been trained to handle translations between French (fr_Latn) and Moore (moor_Latn), with particularly strong performance in the French to Moore direction.fr_Latn) ↔ Moore (moor_Latn)fra_Latn → moor_Latn) :( need improvement)1import time
2from transformers import NllbTokenizer, AutoModelForSeq2SeqLM
3# Load model and tokenizer
4MODEL_URL = "sawadogosalif/MooreFR-SaChi-translationv0"
5model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_URL)
6tokenizer = NllbTokenizer.from_pretrained(MODEL_URL)
7# Fix tokenizer for Moore language
8def fix_tokenizer(tokenizer, new_lang):
9 """
10 Adds a new language token to the tokenizer and updates ID mappings.
11
12 - Adds the special token if it doesn't already exist
13 - Initializes or updates `lang_code_to_id` and `id_to_lang_code` using `getattr` to avoid repeated checks
14 """
15 if new_lang not in tokenizer.additional_special_tokens:
16 tokenizer.add_special_tokens({'additional_special_tokens': [new_lang]})
17
18 tokenizer.lang_code_to_id = getattr(tokenizer, 'lang_code_to_id', {})
19 tokenizer.id_to_lang_code = getattr(tokenizer, 'id_to_lang_code', {})
20
21 if new_lang not in tokenizer.lang_code_to_id:
22 new_lang_id = tokenizer.convert_tokens_to_ids(new_lang)
23 tokenizer.lang_code_to_id[new_lang] = new_lang_id
24 tokenizer.id_to_lang_code[new_lang_id] = new_lang
25
26 return tokenizer
27# Initialize tokenizer with Moore language
28fix_tokenizer(tokenizer, 'moor_Latn')
29# Translation function
30def translate(text, src_lang='fr_Latn', tgt_lang='moor_Latn', a=32, b=3, max_input_length=1024, num_beams=4, **kwargs):
31 tokenizer.src_lang = src_lang
32 tokenizer.tgt_lang = tgt_lang
33 inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=max_input_length)
34 result = model.generate(
35 **inputs.to(model.device),
36 forced_bos_token_id=tokenizer.convert_tokens_to_ids(tgt_lang),
37 max_new_tokens=int(a + b * inputs.input_ids.shape[1]),
38 num_beams=num_beams,
39 **kwargs
40 )
41 return tokenizer.batch_decode(result, skip_special_tokens=True)
42# Example usage
43french_text = "Je suis né à Ouagadougou. J'ai demenagé à Banfora pour mes etudes"
44moore_translation = translate(french_text, 'fr_Latn', 'moor_Latn')
45print(moore_translation)
46# Expected output: ['Mam doga Ouadagoou. Mam kẽnga Banfora m sẽn na yɩl n tɩ karem be.']1def translate_v2(text, model, tokenizer, src_lang='fr_Latn', tgt_lang='moor_Latn',
2 max_length='auto', num_beams=4, no_repeat_ngram_size=4, n_out=None, **kwargs):
3 tokenizer.src_lang = src_lang
4 encoded = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
5 if max_length == 'auto':
6 max_length = int(32 + 2.0 * encoded.input_ids.shape[1])
7 model.eval()
8 generated_tokens = model.generate(
9 **encoded.to(model.device),
10 forced_bos_token_id=tokenizer.lang_code_to_id[tgt_lang],
11 max_length=max_length,
12 num_beams=num_beams,
13 no_repeat_ngram_size=no_repeat_ngram_size,
14 num_return_sequences=n_out or 1,
15 **kwargs
16 )
17 out = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
18 if isinstance(text, str) and n_out is None:
19 return out[0]
20 return out1model:
2 name: "facebook/nllb-200-distilled-600M"
3 save_path: "./models/nllb-moore-finetuned"
4 new_lang_code: "moore_open"
5training:
6 batch_size: 16
7 num_epochs: 3
8 learning_rate: 1e-4
9 warmup_steps: 1000
10 max_length: 128
11 accumulation_steps: 1
12 eval_steps: 1000
13 save_steps: 5000
14 early_stopping_patience: 5
15 fp16: true
16 resume_from: null
17 max_grad_norm: 1.0
18data:
19 dataset_name: "sawadogosalif/MooreFRCollections"
20 train_size: 0.8
21 test_size: 0.1
22 val_size: 0.1
23 random_seed: 2025
24 src_col: "source"
25 tgt_col: "target"
26 src_lang_col: "french"
27 tgt_lang_col: "moore"
28evaluation:
29 num_samples: 10
30 num_beams: 5
31 no_repeat_ngram_size: 3@misc{author = {Sawadogo, Salif},
title = {MooreFR-SaChi-translationv0},
year = {202},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/sawadogosalif/MooreFR-SaChi-translationv0}}
}