Transformers documentation
NLLB
Este modelo se publicó en HF papers el 2022-07-11 y se contribuyó a Hugging Face Transformers el 2022-07-18.
NLLB
Resumen
NLLB: No Language Left Behind es un modelo de traducción multilingüe. Se entrena con datos utilizando técnicas de minería de datos adaptadas para idiomas con pocos recursos y admite más de 200 idiomas. NLLB presenta una arquitectura de cómputo condicional que utiliza un Sparsely Gated Mixture of Experts.
Puedes encontrar todos los puntos de control originales de NLLB bajo la organización AI at Meta.
Este modelo fue aportado por Lysandre. Haz clic en los modelos NLLB de la barra lateral derecha para ver más ejemplos de cómo aplicar NLLB a diferentes tareas de traducción.
El siguiente ejemplo demuestra cómo traducir texto con Pipeline o la clase 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 cuantización reduce la carga de memoria de los modelos grandes al representar los pesos con una precisión inferior. Consulte el resumen de Cuantización para conocer más backends de cuantización disponibles.
El ejemplo siguiente utiliza bitsandbytes para cuantizar los pesos a 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])Utilice AttentionMaskVisualizer para comprender mejor qué tokens el modelo puede y no puede atender.
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")
Notas
El tokenizador se actualizó en abril de 2023 para prefijar la secuencia de origen con el idioma de origen en lugar del idioma de destino. Esto prioriza el rendimiento en cero ejemplos (zero-shot) a un menor costo en el rendimiento supervisado.
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]Para revertir al comportamiento anterior, use el ejemplo de código a continuación.
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)Para idiomas distintos del inglés, especifique el código BCP-47 del idioma con la palabra clave
src_lang, como se muestra a continuación.Vea el ejemplo a continuación para una traducción del rumano al alemán.
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
clase 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 )
Parámetros
- vocab_file (
str, opcional) — Ruta al archivo de vocabulario. - bos_token (
str, opcional, valor predeterminado"<s>") — El token de inicio de secuencia que se utilizó durante el preentrenamiento. - eos_token (
str, opcional, por defecto"</s>") — El token de fin de secuencia. - sep_token (
str, opcional, por defecto"</s>") — El token separador. - cls_token (
str, opcional, valor predeterminado"<s>") — El token del clasificador. - unk_token (
str, opcional, valor predeterminado"<unk>") — El token desconocido. - pad_token (
str, opcional, valor predeterminado"<pad>") — El token utilizado para el relleno. - mask_token (
str, opcional, valor predeterminado"<mask>") — El token utilizado para enmascarar valores. - src_lang (
str, opcional) — El idioma que se usará como idioma de origen para la traducción. - tgt_lang (
str, opcional) — El idioma que se usará como idioma de destino para la traducción. - legacy_behaviour (
bool, opcional, valor predeterminadoFalse) — Si se debe usar el comportamiento heredado (patrón de sufijo) o el nuevo comportamiento (patrón de prefijo).
Construye un tokenizador NLLB (respaldado por la biblioteca tokenizers de HuggingFace). Basado en Unigram.
Este tokenizador hereda de TokenizersBackend, que contiene la mayoría de los métodos principales. Los usuarios deben consultar esta superclase para obtener más información sobre dichos métodos.
El método de tokenización es <tokens> <eos> <language code> para documentos del idioma de origen, y `<language code>
Ejemplos:
>>> 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")Restablece los tokens especiales a la configuración del idioma de origen.
- En el modo legacy: sin prefijo y suffix=[eos, src_lang_code].
- En el modo predeterminado: prefijo=[src_lang_code], sufijo = [eos]
Restablece los tokens especiales a la configuración del idioma de destino.
- En el modo legacy: sin prefijo y suffix=[eos, tgt_lang_code].
- En el modo predeterminado: prefijo=[tgt_lang_code], sufijo = [eos]