Transformers documentation
NLLB
Ce modèle a été publié dans HF papers le 2022-07-11 et contribué à Hugging Face Transformers le 2022-07-18.
NLLB
Aperçu
NLLB: No Language Left Behind est un modèle de traduction multilingue. Il est entraîné sur des données à l'aide de techniques de fouille de données adaptées aux langues à faibles ressources et prend en charge plus de 200 langues. NLLB intègre une architecture de calcul conditionnel utilisant un Sparsely Gated Mixture of Experts.
Vous pouvez trouver tous les points de contrôle NLLB originaux sous l'organisation AI at Meta.
Ce modèle a été contribué par Lysandre. Cliquez sur les modèles NLLB dans la barre latérale droite pour plus d’exemples sur la façon d’appliquer NLLB à différentes tâches de traduction.
L'exemple ci-dessous montre comment traduire du texte avec Pipeline ou la classe AutoModel.
from transformers import pipeline
pipeline = pipeline(task="translation", model="facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn", device=0)
pipeline("UN Chief says there is no military solution in Syria")from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", attn_implementation="sdpa", device_map="auto")
article = "UN Chief says there is no military solution in Syria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
**inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30
)
print(tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0])La quantification réduit la charge mémoire des grands modèles en représentant les poids avec une précision inférieure. Reportez-vous à l'aperçu de la Quantization pour plus d'informations sur les backends de quantification disponibles.
L'exemple ci-dessous utilise bitsandbytes pour quantiser les poids sur 8 bits.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-1.3B", quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-1.3B")
article = "UN Chief says there is no military solution in Syria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
**inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30,
)
print(tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0])Utilisez le AttentionMaskVisualizer pour mieux comprendre les jetons auxquels le modèle peut ou non prêter attention.
from transformers.utils.attention_visualizer import AttentionMaskVisualizer
visualizer = AttentionMaskVisualizer("facebook/nllb-200-distilled-600M")
visualizer("UN Chief says there is no military solution in Syria")
Notes
Le tokenizer a été mis à jour en avril 2023 pour préfixer la séquence source avec la langue source plutôt que la langue cible. Cela privilégie les performances en zéro-shot au prix d'une légère baisse des performances supervisées.
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M") tokenizer("How was your day?").input_ids [256047, 13374, 1398, 4260, 4039, 248130, 2]Pour revenir au comportement legacy, utilisez l'exemple de code ci-dessous.
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)Pour les langues autres que l’anglais, spécifiez le code BCP-47 de la langue avec le mot-clé
src_lang, comme indiqué ci-dessous.Voir l'exemple ci-dessous pour une traduction du roumain vers l'allemand.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M") model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", device_map="auto") article = "UN Chief says there is no military solution in Syria" inputs = tokenizer(article, return_tensors="pt").to(model.device) translated_tokens = model.generate( **inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30 ) tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] Le chef de l'ONU dit qu'il n'y a pas de solution militaire en Syrie
NllbTokenizer
classe transformers.NllbTokenizer
< source >( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Nonebos_token = '<s>'eos_token = '</s>'sep_token = '</s>'cls_token = '<s>'unk_token = '<unk>'pad_token = '<pad>'mask_token = '<mask>'src_lang = Nonetgt_lang = None_spm_precompiled_charsmap: str | None = Noneadditional_special_tokens = Noneextra_special_tokens = Nonelegacy_behaviour = False**kwargs )
Paramètres
- vocab_file (
str, facultatif) — Chemin vers le fichier de vocabulaire. - bos_token (
str, facultatif, par défaut"<s>") — Le jeton de début de séquence utilisé lors de la préformation. - eos_token (
str, facultatif, par défaut"</s>") — Le jeton de fin de séquence. - sep_token (
str, facultatif, par défaut"</s>") — Le jeton séparateur. - cls_token (
str, facultatif, par défaut"<s>") — Le jeton de classification. - unk_token (
str, facultatif, par défaut"<unk>") — Le jeton inconnu. - pad_token (
str, facultatif, par défaut"<pad>") — Le jeton utilisé pour le bourrage. - mask_token (
str, facultatif, par défaut"<mask>") — Le jeton utilisé pour masquer les valeurs. - src_lang (
str, facultatif) — La langue à utiliser comme langue source pour la traduction. - tgt_lang (
str, facultatif) — La langue à utiliser comme langue cible pour la traduction. - legacy_behaviour (
bool, facultatif, par défautFalse) — Indique s'il faut utiliser le comportement hérité (motif de suffixe) ou le nouveau comportement (motif de préfixe).
Construit un tokenizer NLLB (basé sur la bibliothèque tokenizers de HuggingFace). Basé sur Unigram.
Ce tokenizer hérite de TokenizersBackend, qui contient la plupart des méthodes principales. Les utilisateurs doivent se référer à cette superclasse pour plus d'informations sur ces méthodes.
La méthode de tokenisation est <tokens> <eos> <language code> pour les documents de la langue source, et `<language code>
Exemples :
>>> from transformers import NllbTokenizer
>>> tokenizer = NllbTokenizer.from_pretrained(
... "facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn"
... )
>>> example_english_phrase = " UN Chief Says There Is No Military Solution in Syria"
>>> expected_translation_french = "Le chef de l'ONU affirme qu'il n'y a pas de solution militaire en Syrie."
>>> inputs = tokenizer(example_english_phrase, text_target=expected_translation_french, return_tensors="pt")Réinitialiser les jetons spéciaux à la configuration de la langue source.
- En mode legacy : aucun préfixe et suffixe=[eos, src_lang_code].
- En mode par défaut : préfixe=[src_lang_code], suffixe = [eos]
Réinitialiser les jetons spéciaux sur le paramètre de la langue cible.
- En mode legacy : aucun préfixe et suffixe=[eos, tgt_lang_code].
- En mode par défaut : préfixe=[tgt_lang_code], suffixe = [eos]