Transformers documentation
NLLB
Este modelo foi publicado no HF papers em 2022-07-11 e contribuído para o Hugging Face Transformers em 2022-07-18.
NLLB
Visão geral
NLLB: No Language Left Behind é um modelo de tradução multilíngue. Ele é treinado com dados usando técnicas de mineração de dados adaptadas para idiomas de baixo recurso e suporta mais de 200 idiomas. O NLLB possui uma arquitetura de computação condicional que utiliza um Sparsely Gated Mixture of Experts.
Você pode encontrar todos os checkpoints originais do NLLB na organização AI at Meta.
Este modelo foi contribuído por Lysandre. Clique nos modelos NLLB na barra lateral à direita para ver mais exemplos de como aplicar o NLLB a diferentes tarefas de tradução.
O exemplo abaixo demonstra como traduzir texto com Pipeline ou a 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])A quantização reduz a carga de memória de modelos grandes ao representar os pesos em uma precisão menor. Consulte a visão geral de Quantização para mais backends de quantização disponíveis.
O exemplo abaixo usa bitsandbytes para quantizar os pesos em 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])Use o AttentionMaskVisualizer para entender melhor quais tokens o modelo pode e não pode observar.
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")
Observações
O tokenizer foi atualizado em abril de 2023 para prefixar a sequência de origem com o idioma de origem, em vez do idioma de destino. Isso prioriza o desempenho zero-shot a um pequeno custo no desempenho supervisionado.
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 reverter para o comportamento legado, use o exemplo de código abaixo.
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)Para idiomas que não são o inglês, especifique o código BCP-47 do idioma com a palavra-chave
src_lang, conforme mostrado abaixo.Veja um exemplo abaixo de uma tradução do romeno para o alemão.
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 )
Parâmetros
- vocab_file (
str, opcional) — Caminho para o arquivo de vocabulário. - bos_token (
str, opcional, padrão"<s>") — O token de início de sequência usado durante o pré-treinamento. - eos_token (
str, opcional, padrão"</s>") — O token de fim de sequência. - sep_token (
str, opcional, padrão"</s>") — O token separador. - cls_token (
str, opcional, padrão"<s>") — O token do classificador. - unk_token (
str, opcional, padrão"<unk>") — O token desconhecido. - pad_token (
str, opcional, padrão"<pad>") — O token usado para preenchimento. - mask_token (
str, opcional, padrão"<mask>") — O token usado para mascarar valores. - src_lang (
str, opcional) — O idioma a ser usado como idioma de origem para a tradução. - tgt_lang (
str, opcional) — O idioma a ser usado como idioma de destino para a tradução. - legacy_behaviour (
bool, opcional, padrãoFalse) — Se deve usar o comportamento legado (padrão de sufixo) ou o novo comportamento (padrão de prefixo).
Construa um tokenizador NLLB (baseado na biblioteca tokenizers do HuggingFace). Baseado em Unigram.
Este tokenizador herda de TokenizersBackend, que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.
O método de tokenização é <tokens> <eos> <language code> para documentos do idioma de origem, e `<language code>
Exemplos:
>>> 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")Redefina os tokens especiais para a configuração do idioma de origem.
- No modo legado: sem prefixo e suffix=[eos, src_lang_code].
- No modo padrão: Prefixo=[src_lang_code], sufixo = [eos]
Redefina os tokens especiais para a configuração do idioma de destino.
- No modo legado: sem prefixo e suffix=[eos, tgt_lang_code].
- No modo padrão: Prefixo=[tgt_lang_code], sufixo = [eos]