Transformers documentation
NLLB
نُشر هذا النموذج في أوراق HF في 11 يوليو 2022، وأُضيف إلى مكتبة Hugging Face Transformers في 18 يوليو 2022.
NLLB
نظرة عامة
NLLB: No Language Left Behind هو نموذج ترجمة متعدد اللغات. تم تدريبه على بيانات باستخدام تقنيات تنقيب في البيانات مصممة خصيصًا للغات ذات الموارد المحدودة، ويدعم أكثر من 200 لغة. يتميز NLLB بهيكلية حساب مشروطة تستخدم مزيجًا من الخبراء البوابة المتناثرة (Sparsely Gated Mixture of Experts).
يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج NLLB تحت منظمة AI at Meta.
تمت مساهمة هذا النموذج من قِبل Lysandre. انقر على نماذج NLLB في الشريط الجانبي الأيمن لمزيد من الأمثلة حول كيفية تطبيق NLLB على مهام ترجمة مختلفة.
يُظهر المثال أدناه كيفية ترجمة النص باستخدام Pipeline أو فئة 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])تقلل عملية التكميم العبء على الذاكرة في النماذج الكبيرة من خلال تمثيل الأوزان بدقة أقل. راجع نظرة عامة على التكميم للاطلاع على المزيد من واجهات التكميم المتاحة.
يستخدم المثال أدناه bitsandbytes لاختزال الأوزان إلى 8 بتات.
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 لفهم أفضل للرموز التي يمكن للنموذج الانتباه إليها والتي لا يمكنه الانتباه إليها.
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).
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]لإعادة السلوك القديم، استخدم مثال الكود أدناه.
from transformers import NllbTokenizer tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)بالنسبة للغات غير الإنجليزية، حدد رمز BCP-47 الخاص باللغة باستخدام الكلمة المفتاحية
src_langكما هو موضح أدناه.انظر إلى المثال أدناه لترجمة من الرومانية إلى الألمانية.
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
< 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 )
المعاملات
- 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.
يرث هذا المُجزِّئ من TokenizersBackend الذي يحتوي على معظم الطرق الرئيسية. ينبغي على المستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.
طريقة الترميز هي <tokens> <eos> <language code> للمستندات بلغة المصدر، و`<language code>
أمثلة:
>>> 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")إعادة تعيين الرموز الخاصة إلى إعداد اللغة المصدر.
- في الوضع القديم: لا يوجد بادئة، واللاحقة هي [eos, src_lang_code].
- في الوضع الافتراضي: البادئة=[src_lang_code]، واللاحقة = [eos]
إعادة تعيين الرموز الخاصة إلى إعداد اللغة المستهدفة.
- في الوضع القديم: لا يوجد بادئة، واللاحقة هي [eos, tgt_lang_code].
- في الوضع الافتراضي: البادئة=[tgt_lang_code]، واللاحقة = [eos]