# NLLB

    
        
        
    

## 개요

[NLLB: No Language Left Behind](https://huggingface.co/papers/2207.04672)는 다국어 번역 모델입니다. 저자원 언어에 맞게 조정된 데이터 마이닝 기법을 사용하여 데이터를 학습했으며, 200개 이상의 언어를 지원합니다. NLLB는 Sparsely Gated Mixture of Experts를 사용하는 조건부 컴퓨트 아키텍처를 특징으로 합니다.

모든 NLLB 원본 체크포인트는 [AI at Meta](https://huggingface.co/facebook/models?search=nllb) 조직에서 찾을 수 있습니다.

> [!TIP]
> 이 모델은 [Lysandre](https://huggingface.co/lysandre)가 기여했습니다. NLLB를 다양한 번역 작업에 적용하는 방법에 대한 추가 예제는 오른쪽 사이드바의 NLLB 모델들을 클릭하여 확인하세요.

아래 예제는 [Pipeline](/docs/transformers/v5.23.0/ko/main_classes/pipelines#transformers.Pipeline) 또는 [AutoModel](/docs/transformers/v5.23.0/ko/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])
```

Quantization은 가중치를 더 낮은 정밀도로 표현하여 대규모 모델의 메모리 부담을 줄입니다. 사용 가능한 다른 양자화 백엔드에 대해서는 [Quantization](../quantization/overview) 개요를 참조하세요.

아래 예제는 [bitsandbytes](../quantization/bitsandbytes)를 사용하여 가중치를 8비트로 양자화합니다.

```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])
```

[AttentionMaskVisualizer](https://github.com/huggingface/transformers/blob/main/src/transformers/utils/attention_visualizer.py#L139)를 사용하여 모델이 어떤 토큰에 주의를 기울일 수 있고, 어떤 토큰에는 기울일 수 없는지 더 잘 이해해 보세요.

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

    

## The input is a single word "Notes".

참고

- 토크나이저는 2023년 4월에 업데이트되어, 대상 언어 대신 소스 언어로 소스 시퀀스에 접두사를 붙이도록 변경되었습니다. 이를 통해 제로샷 성능을 우선시하되, 지도 학습 성능에는 미미한 비용이 발생합니다.

   ```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]
   ```

   레거시 동작으로 되돌리려면 아래 코드 예제를 사용하세요.

   ```python
   from transformers import NllbTokenizer

   tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)
   ```

- 영어 이외의 언어의 경우, 아래에 표시된 대로 `src_lang` 키워드에 해당 언어의 [BCP-47](https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200) 코드를 지정합니다.

- 루마니아어에서 독일어로 번역하는 예시는 아래를 참조하세요.

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

[소스](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/nllb/tokenization_nllb.py#L33)

**매개변수:**

vocab_file (`str`, *선택 사항*) : 어휘 파일의 경로.

bos_token (`str`, *선택 사항*, 기본값 `"<s>"`) : 사전 학습 시 사용된 시퀀스 시작 토큰입니다.

eos_token (`str`, *선택 사항*, 기본값 `"</s>"`) : 시퀀스 종료 토큰입니다.

sep_token (`str`, *선택 사항*, 기본값 `"</s>"`) : 구분자 토큰입니다.

cls_token (`str`, *선택 사항*, 기본값 `"<s>"`) : 분류기 토큰입니다.

unk_token (`str`, *선택 사항*, 기본값 `"<unk>"`) : 알려지지 않은 토큰입니다.

pad_token (`str`, *선택 사항*, 기본값 `"<pad>"`) : 패딩에 사용되는 토큰입니다.

mask_token (`str`, *선택 사항*, 기본값 `"<mask>"`) : 값을 마스킹하는 데 사용되는 토큰입니다.

src_lang (`str`, *선택 사항*) : 번역의 원어로 사용할 언어입니다.

tgt_lang (`str`, *선택 사항*) : 번역의 대상 언어로 사용할 언어입니다.

legacy_behaviour (`bool`, *선택 사항*, 기본값 `False`) : 레거시 동작(접미어 패턴)을 사용할지, 아니면 새로운 동작(접두어 패턴)을 사용할지 여부.

HuggingFace의 *tokenizers* 라이브러리를 기반으로 NLLB 토크나이저를 구성합니다. [Unigram](https://huggingface.co/docs/tokenizers/python/latest/components.html?highlight=unigram#models)에 기반합니다.

이 토크나이저는 대부분의 주요 메서드를 포함하는 [TokenizersBackend](/docs/transformers/v5.23.0/ko/main_classes/tokenizer#transformers.TokenizersBackend)에서 상속됩니다. 해당 메서드에 대한 자세한 정보는 이 상위 클래스를 참고하세요.

토큰화 방법은 소스 언어 문서의 경우 `<tokens> <eos> <language code>`, 대상 언어 문서의 경우 ` `입니다.

예:

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

[소스](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/nllb/tokenization_nllb.py#L267)

특수 토큰을 소스 언어 설정으로 초기화합니다.
- 레거시 모드: 접두사가 없으며 suffix=[eos, src_lang_code]입니다.
- 기본 모드에서는: 접두사=[src_lang_code], 접미사 = [eos]

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

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

[소스](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/nllb/tokenization_nllb.py#L292)

특수 토큰을 대상 언어 설정으로 초기화합니다.
- 레거시 모드: 접두사(prefix)가 없으며 접미사(suffix)는 [eos, tgt_lang_code]입니다.
- 기본 모드에서: 접두사=[tgt_lang_code], 접미사 = [eos]

