# NLLB

    
        
        
    

## Visão geral

[NLLB: No Language Left Behind](https://huggingface.co/papers/2207.04672) é um modelo de tradução multilíngue. Ele é treinado em 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 usando um Mixture of Experts com portões esparsos.

Você pode encontrar todos os checkpoints originais do NLLB na organização [AI at Meta](https://huggingface.co/facebook/models?search=nllb).

> [!TIP]
> Este modelo foi contribuído por [Lysandre](https://huggingface.co/lysandre). Clique nos modelos NLLB na barra lateral à direita para mais exemplos de como aplicar o NLLB a diferentes tarefas de tradução.

O exemplo abaixo demonstra como traduzir texto com [Pipeline](/docs/transformers/main/pt/main_classes/pipelines#transformers.Pipeline) ou a classe [AutoModel](/docs/transformers/main/pt/model_doc/auto#transformers.AutoModel).

```python
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")
```

```python
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](../quantization/overview) para mais backends de quantização disponíveis.

O exemplo abaixo usa [bitsandbytes](../quantization/bitsandbytes) para quantizar os pesos em 8 bits.

```python
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](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/attention_visualizer.py#L139) para entender melhor quais tokens o modelo pode e não pode observar.

```python
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.

   ```python
   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.

   ```python
   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](https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200) 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.

    ```python
    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[[transformers.NllbTokenizer]]

#### transformers.NllbTokenizer[[transformers.NllbTokenizer]]

```python
transformers.NllbTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, bos_token = '<s>', eos_token = '</s>', sep_token = '</s>', cls_token = '<s>', unk_token = '<unk>', pad_token = '<pad>', mask_token = '<mask>', src_lang = None, tgt_lang = None, _spm_precompiled_charsmap: str | None = None, additional_special_tokens = None, extra_special_tokens = None, legacy_behaviour = False, **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb/tokenization_nllb.py#L33)

**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ão `False`) : 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](https://huggingface.co/docs/tokenizers/python/latest/components.html?highlight=unigram#models).

Este tokenizer herda de [TokenizersBackend](/docs/transformers/main/pt/main_classes/tokenizer#transformers.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 ` ` para documentos do idioma de destino.

Exemplos:

```python
>>> 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")
```

#### set_src_lang_special_tokens[[transformers.NllbTokenizer.set_src_lang_special_tokens]]

```python
set_src_lang_special_tokens(src_lang)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb/tokenization_nllb.py#L267)

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]

#### set_tgt_lang_special_tokens[[transformers.NllbTokenizer.set_tgt_lang_special_tokens]]

```python
set_tgt_lang_special_tokens(lang: str)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/nllb/tokenization_nllb.py#L292)

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]

