# 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/main/ar/main_classes/pipelines#transformers.Pipeline) أو فئة [AutoModel](/docs/transformers/main/ar/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/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")
```

    

## ملاحظات

- تم تحديث مُجزِّئ الرموز (tokenizer) في أبريل 2023 ليضيف بادئة (prefix) للتركيبة المصدرية بلغة المصدر بدلاً من لغة الهدف. وهذا يُعطي الأولوية لأداء الصفرية (zero-shot) مقابل تكلفة طفيفة على الأداء المُشرَّف (supervised).

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

- بالنسبة للغير إنجليزية، حدد رمز [BCP-47](https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200) للغة باستخدام الكلمة المفتاحية `src_lang` كما هو موضح أدناه.

- انظر إلى المثال أدناه لترجمة من الرومانية إلى الألمانية.

    ```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/main/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`) : ما إذا كان سيتم استخدام السلوك القديم (نمط البادئة) أو السلوك الجديد (نمط اللبادئة).

أنشئ مُجزِّئ NLLB (مدعوم بمكتبة *tokenizers* من HuggingFace). مبني على [Unigram](https://huggingface.co/docs/tokenizers/python/latest/components.html?highlight=unigram#models).

يرث هذا المُجزِّئ من [TokenizersBackend](/docs/transformers/main/ar/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/main/src/transformers/models/nllb/tokenization_nllb.py#L267)

إعادة تعيين الرموز الخاصة إلى إعداد اللغة المصدر.
- في الوضع القديم: لا يوجد بادئة، واللاحقة هي [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/main/src/transformers/models/nllb/tokenization_nllb.py#L292)

إعادة تعيين الرموز الخاصة إلى إعداد اللغة المستهدفة.
- في الوضع القديم: لا يوجد بادئة، واللاحقة هي [eos, tgt_lang_code].
- في الوضع الافتراضي: البادئة=[tgt_lang_code]، واللاحقة = [eos]

