Instructions to use BenguerineMohammed/nmt-seq2seq-translator with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use BenguerineMohammed/nmt-seq2seq-translator with Transformers:
# Load model directly from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("BenguerineMohammed/nmt-seq2seq-translator") model = AutoModelForSeq2SeqLM.from_pretrained("BenguerineMohammed/nmt-seq2seq-translator", device_map="auto") - Notebooks
- Google Colab
- Kaggle
| import torch | |
| import yaml | |
| from pathlib import Path | |
| from .model import model, tokenizer, device | |
| from .languages import get_flores_code | |
| _config_path = Path(__file__).resolve().parent.parent.parent / "config.yml" | |
| with open(_config_path) as _f: | |
| _cfg = yaml.safe_load(_f)["inference"] | |
| MAX_LENGTH: int = _cfg["max_length"] | |
| NUM_BEAMS: int = _cfg["num_beams"] | |
| NO_REPEAT_NGRAM: int = _cfg["no_repeat_ngram_size"] | |
| TEMPERATURE: float = _cfg["temperture"] | |
| def translate_text( | |
| text: str, | |
| source_lang: str, | |
| target_lang: str, | |
| max_length: int = MAX_LENGTH, | |
| num_beams: int = NUM_BEAMS, | |
| ) -> str: | |
| """Translate a single text from source_lang to target_lang.""" | |
| if not text or not text.strip(): | |
| return "" | |
| try: | |
| src_code = get_flores_code(source_lang, "eng_Latn") | |
| tgt_code = get_flores_code(target_lang, "fra_Latn") | |
| tokenizer.src_lang = src_code | |
| inputs = tokenizer( | |
| text, | |
| return_tensors="pt", | |
| padding=True, | |
| truncation=True, | |
| max_length=max_length, | |
| ).to(device) | |
| with torch.no_grad(): | |
| generated_tokens = model.generate( | |
| **inputs, | |
| forced_bos_token_id=tokenizer.lang_code_to_id[tgt_code], | |
| max_length=max_length, | |
| num_beams=num_beams, | |
| no_repeat_ngram_size=NO_REPEAT_NGRAM, | |
| temperature=TEMPERATURE, | |
| do_sample=True, | |
| ) | |
| return tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0] | |
| except Exception as exc: | |
| return f"Translation error: {str(exc)}" | |
| def batch_translate( | |
| texts: list[str], | |
| source_lang: str, | |
| target_lang: str, | |
| separator: str = "\n", | |
| ) -> str: | |
| """"Translate a batch of texts from source_lang to target_lang, returning a single string with translations separated by the given separator.""" | |
| if not texts: | |
| return "" | |
| try: | |
| sentences = [s.strip() for s in texts if s.strip()] | |
| if not sentences: | |
| return "" | |
| src_code = get_flores_code(source_lang, "eng_Latn") | |
| tgt_code = get_flores_code(target_lang, "fra_Latn") | |
| tokenizer.src_lang = src_code | |
| inputs = tokenizer( | |
| sentences, | |
| return_tensors="pt", | |
| padding=True, | |
| truncation=True, | |
| max_length=MAX_LENGTH, | |
| ).to(device) | |
| with torch.no_grad(): | |
| generated_tokens = model.generate( | |
| **inputs, | |
| forced_bos_token_id=tokenizer.lang_code_to_id[tgt_code], | |
| max_length=MAX_LENGTH, | |
| num_beams=NUM_BEAMS, | |
| no_repeat_ngram_size=NO_REPEAT_NGRAM, | |
| temperature=TEMPERATURE, | |
| do_sample=True, | |
| early_stopping=True, | |
| ) | |
| translations = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) | |
| return "\n".join(f"{i+1}. {t}" for i, t in enumerate(translations)) | |
| except Exception as exc: | |
| return f"Batch translation error: {str(exc)}" | |
| if __name__ == "__main__": | |
| # Test translate_text | |
| result = translate_text( | |
| text="Hello, how are you?", | |
| source_lang="english", | |
| target_lang="french", | |
| ) | |
| print(f"Single translation: {result}") | |
| # Test batch_translate | |
| batch_result = batch_translate( | |
| texts=["Good morning.", "See you later.", "Thank you!"], | |
| source_lang="english", | |
| target_lang="french", | |
| ) | |
| print(f"Batch translation:\n{batch_result}") |