From 87ae26b6945a15482358fac07374eadf07b76ef0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:40:50 +0300 Subject: [PATCH 001/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/accelerate.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/accelerate.md | 117 +++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/source/ar/accelerate.md diff --git a/docs/source/ar/accelerate.md b/docs/source/ar/accelerate.md new file mode 100644 index 00000000000000..47c2b340a9ee2f --- /dev/null +++ b/docs/source/ar/accelerate.md @@ -0,0 +1,117 @@ +لمساعدة المستخدمين على تدريب نماذج 🤗 Transformers بسهولة على أي نوع من الإعدادات الموزعة، سواء كان ذلك باستخدام وحدات GPU متعددة على جهاز واحد أو وحدات GPU متعددة عبر أجهزة متعددة، أنشأنا في Hugging Face مكتبة [🤗 Accelerate](https://huggingface.co/docs/accelerate). في هذا البرنامج التعليمي، تعلم كيفية تخصيص حلقة التدريب الأصلية في PyTorch لتمكين التدريب في بيئة موزعة. + +## الإعداد + +ابدأ بتثبيت 🤗 Accelerate: + +```bash +pip install accelerate +``` + +ثم قم باستيراد وإنشاء كائن [`~accelerate.Accelerator`]. سيقوم [`~accelerate.Accelerator`] تلقائيًا بالكشف عن نوع الإعداد الموزع الخاص بك وتهيئة جميع المكونات اللازمة للتدريب. لا تحتاج إلى وضع نموذجك على جهاز بشكل صريح. + +```py +>>> from accelerate import Accelerator + +>>> accelerator = Accelerator() +``` + +## الاستعداد للتسريع + +الخطوة التالية هي تمرير جميع كائنات التدريب ذات الصلة إلى طريقة [`~accelerate.Accelerator.prepare`]. ويشمل ذلك DataLoaders للتدريب والتقييم، ونموذجًا ومُحَسِّنًا: + +```py +>>> train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare( +... train_dataloader, eval_dataloader, model, optimizer +... ) +``` + +## الخلفي + +الإضافة الأخيرة هي استبدال `loss.backward()` النموذجي في حلقة التدريب الخاصة بك بأسلوب [`~accelerate.Accelerator.backward`] في 🤗 Accelerate: + +```py +>>> for epoch in range(num_epochs): +... for batch in train_dataloader: +... outputs = model(**batch) +... loss = outputs.loss +... accelerator.backward(loss) + +... optimizer.step() +... lr_scheduler.step() +... optimizer.zero_grad() +... progress_bar.update(1) +``` + +كما يمكنك أن ترى في الكود التالي، فأنت بحاجة فقط إلى إضافة أربعة أسطر من الكود إلى حلقة التدريب الخاصة بك لتمكين التدريب الموزع! + +```diff ++ from accelerate import Accelerator + from transformers import AdamW, AutoModelForSequenceClassification, get_scheduler + ++ accelerator = Accelerator() + + model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2) + optimizer = AdamW(model.parameters(), lr=3e-5) + +- device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") +- model.to(device) + ++ train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare( ++ train_dataloader, eval_dataloader, model, optimizer ++ ) + + num_epochs = 3 + num_training_steps = num_epochs * len(train_dataloader) + lr_scheduler = get_scheduler( + "linear", + optimizer=optimizer, + num_warmup_steps=0, + num_training_steps=num_training_steps + ) + + progress_bar = tqdm(range(num_training_steps)) + + model.train() + for epoch in range(num_epochs): + for batch in train_dataloader: +- batch = {k: v.to(device) for k, v in batch.items()} + outputs = model(**batch) + loss = outputs.loss +- loss.backward() ++ accelerator.backward(loss) +optimizer.step() + lr_scheduler.step() + optimizer.zero_grad() + progress_bar.update(1) +``` + +## تدريب + +بمجرد إضافة أسطر الكود ذات الصلة، قم بتشغيل التدريب الخاص بك في أحد النصوص أو الدفاتر مثل Colaboratory. + +### التدريب باستخدام نص برمجي + +إذا كنت تشغل التدريب الخاص بك من نص برمجي، فقم بتشغيل الأمر التالي لإنشاء وحفظ ملف تكوين: + +```bash +accelerate config +``` + +ثم قم بتشغيل التدريب الخاص بك باستخدام: + +```bash +accelerate launch train.py +``` + +### التدريب باستخدام دفتر ملاحظات + +يمكن أيضًا تشغيل 🤗 Accelerate في دفتر ملاحظات إذا كنت تخطط لاستخدام وحدات معالجة الرسوميات (TPUs) في Colaboratory. قم بتغليف كل الكود المسؤول عن التدريب في دالة، ومررها إلى [`~accelerate.notebook_launcher`]: + +```py +>>> from accelerate import notebook_launcher + +>>> notebook_launcher(training_function) +``` + +للحصول على مزيد من المعلومات حول 🤗 Accelerate وميزاته الغنية، يرجى الرجوع إلى [الوثائق](https://huggingface.co/docs/accelerate). \ No newline at end of file From c1a0598d8a2bd72a990dc24a7f6d7c7574001a85 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:40:52 +0300 Subject: [PATCH 002/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/add=5Fnew=5Fpipeline.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/add_new_pipeline.md | 237 +++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 docs/source/ar/add_new_pipeline.md diff --git a/docs/source/ar/add_new_pipeline.md b/docs/source/ar/add_new_pipeline.md new file mode 100644 index 00000000000000..e79dcaec9fcc57 --- /dev/null +++ b/docs/source/ar/add_new_pipeline.md @@ -0,0 +1,237 @@ +# كيفية إنشاء خط أنابيب مخصص؟ + +في هذا الدليل، سنرى كيفية إنشاء خط أنابيب مخصص ومشاركته على [Hub](https://hf.co/models) أو إضافته إلى +مكتبة 🤗 Transformers. + +أولاً وقبل كل شيء، تحتاج إلى تحديد الإدخالات الخام التي سيتمكن خط الأنابيب من التعامل معها. يمكن أن تكون هذه الإدخالات سلاسل نصية أو بايتات خام أو +قواميس أو أي شيء آخر يبدو أنه الإدخال المرغوب. حاول إبقاء هذه الإدخالات بسيطة قدر الإمكان +كما هو الحال في Python حيث يجعل ذلك التوافق أسهل (حتى من خلال لغات أخرى عبر JSON). ستكون هذه هي `الإدخالات` من +خط الأنابيب (`preprocess`). + +ثم حدد `الإخراج`. نفس السياسة كما `الإدخالات`. كلما كان أبسط، كان ذلك أفضل. ستكون هذه هي الإخراج من +طريقة `postprocess`. + +ابدأ بالوراثة من الفئة الأساسية `Pipeline` مع الطرق الأربع اللازمة لتنفيذ `preprocess`، +`_forward`، `postprocess`، و `_sanitize_parameters`. + + +```python +from transformers import Pipeline + + +class MyPipeline(Pipeline): + def _sanitize_parameters(self, **kwargs): + preprocess_kwargs = {} + if "maybe_arg" in kwargs: + preprocess_kwargs["maybe_arg"] = kwargs["maybe_arg"] + return preprocess_kwargs, {}, {} + + def preprocess(self, inputs, maybe_arg=2): + model_input = Tensor(inputs["input_ids"]) + return {"model_input": model_input} + + def _forward(self, model_inputs): + # model_inputs == {"model_input": model_input} + outputs = self.model(**model_inputs) + # Maybe {"logits": Tensor(...)} + return outputs + + def postprocess(self, model_outputs): + best_class = model_outputs["logits"].softmax(-1) + return best_class +``` + +يهدف هيكل هذا التفصيل إلى دعم التوافق السلس نسبيًا مع CPU/GPU، مع دعم إجراء +pre/postprocessing على CPU على خيوط مختلفة + +`preprocess` ستأخذ الإدخالات المحددة أصلاً، وتحويلها إلى شيء يمكن تغذيته إلى النموذج. قد +يحتوي على مزيد من المعلومات وعادة ما يكون `Dict`. + +`_forward` هو تفاصيل التنفيذ وليس المقصود استدعاؤه مباشرة. `forward` هي الطريقة المفضلة +طريقة الاستدعاء حيث تحتوي على ضمانات للتأكد من أن كل شيء يعمل على الجهاز المتوقع. إذا كان أي شيء +مرتبط بنموذج حقيقي، فهو ينتمي إلى طريقة `_forward`، وأي شيء آخر هو في preprocess/postprocess. + +ستأخذ طرق `postprocess` إخراج `_forward` وتحويله إلى الإخراج النهائي الذي تم تحديده +سابقا. + +`_sanitize_parameters` موجودة للسماح للمستخدمين بتمرير أي معلمات كلما رغبوا في ذلك، سواء عند التهيئة +الوقت `pipeline(...., maybe_arg=4)` أو وقت الاستدعاء `pipe = pipeline(...); output = pipe(...., maybe_arg=4)`. + +تكون إرجاعات `_sanitize_parameters` عبارة عن 3 قواميس kwargs التي سيتم تمريرها مباشرة إلى `preprocess`، +`_forward`، و `postprocess`. لا تملأ أي شيء إذا لم يستدع المتصل بأي معلمة إضافية. هذا +يسمح بالحفاظ على الحجج الافتراضية في تعريف الدالة وهو دائمًا أكثر "طبيعية". + +مثال كلاسيكي سيكون حجة `top_k` في post processing في مهام التصنيف. + +```python +>>> pipe = pipeline("my-new-task") +>>> pipe("This is a test") +[{"label": "1-star", "score": 0.8}, {"label": "2-star", "score": 0.1}, {"label": "3-star", "score": 0.05} +{"label": "4-star", "score": 0.025}, {"label": "5-star", "score": 0.025}] +>>> pipe("This is a test", top_k=2) +[{"label": "1-star", "score": 0.8}, {"label": "2-star", "score": 0.1}] +``` + +لتحقيق ذلك، سنقوم بتحديث طريقة `postprocess` بحجة افتراضية إلى `5`. وتحرير +`_sanitize_parameters` للسماح بهذه المعلمة الجديدة. + + +```python +def postprocess(self, model_outputs, top_k=5): + best_class = model_outputs["logits"].softmax(-1) + # Add logic to handle top_k + return best_class + + +def _sanitize_parameters(self, **kwargs): + preprocess_kwargs = {} + if "maybe_arg" in kwargs: + preprocess_kwargs["maybe_arg"] = kwargs["maybe_arg"] + + postprocess_kwargs = {} + if "top_k" in kwargs: + postprocess_kwargs["top_k"] = kwargs["top_k"] + return preprocess_kwargs, {}, postprocess_kwargs +``` + +حاول الحفاظ على الإدخالات/الإخراج بسيطة قدر الإمكان ويفضل أن تكون JSON-serializable حيث يجعل استخدام خط الأنابيب سهلًا +دون الحاجة إلى فهم المستخدمين لأنواع جديدة من الكائنات. من الشائع أيضًا دعم العديد من أنواع +الحجج المختلفة من أجل سهولة الاستخدام (ملفات الصوت، والتي يمكن أن تكون أسماء ملفات أو عناوين URL أو بايتات خام) + + + +## إضافته إلى قائمة المهام المدعومة + +لتسجيل مهمة "new-task" في قائمة المهام المدعومة، يجب إضافتها إلى `PIPELINE_REGISTRY`: + +```python +from transformers.pipelines import PIPELINE_REGISTRY + +PIPELINE_REGISTRY.register_pipeline( + "new-task", + pipeline_class=MyPipeline, + pt_model=AutoModelForSequenceClassification, +) +``` + +يمكنك تحديد نموذج افتراضي إذا أردت، وفي هذه الحالة يجب أن يأتي مع مراجعة محددة (والتي يمكن أن تكون اسم فرع أو هاش الالتزام، هنا أخذنا `"abcdef"`) وكذلك النوع: + +```python +PIPELINE_REGISTRY.register_pipeline( + "new-task", + pipeline_class=MyPipeline, + pt_model=AutoModelForSequenceClassification, + default={"pt": ("user/awesome_model", "abcdef")}, + type="text", # current support type: text, audio, image, multimodal +) +``` + +## مشاركة خط الأنابيب المخصص الخاص بك على Hub + +لمشاركة خط الأنابيب المخصص الخاص بك على Hub، ما عليك سوى حفظ رمز مخصص لفئة `Pipeline` الفرعية في +ملف Python. على سبيل المثال، لنفترض أننا نريد استخدام خط أنابيب مخصص لتصنيف أزواج الجمل مثل هذا: + +```py +import numpy as np + +from transformers import Pipeline + + +def softmax(outputs): + maxes = np.max(outputs, axis=-1, keepdims=True) + shifted_exp = np.exp(outputs - maxes) + return shifted_exp / shifted_exp.sum(axis=-1, keepdims=True) + + +class PairClassificationPipeline(Pipeline): + def _sanitize_parameters(self, **kwargs): + preprocess_kwargs = {} + if "second_text" in kwargs: + preprocess_kwargs["second_text"] = kwargs["second_text"] + return preprocess_kwargs, {}, {} + + def preprocess(self, text, second_text=None): + return self.tokenizer(text, text_pair=second_text, return_tensors=self.framework) + + def _forward(self, model_inputs): + return self.model(**model_inputs) + + def postprocess(self, model_outputs): + logits = model_outputs.logits[0].numpy() + probabilities = softmax(logits) + + best_class = np.argmax(probabilities) + label = self.model.config.id2label[best_class] + score = probabilities[best_class].item() + logits = logits.tolist() + return {"label": label, "score": score, "logits": logits} +``` + +التنفيذ مستقل عن الإطار، وسيعمل لكل من نماذج PyTorch وTensorFlow. إذا قمنا بحفظ هذا في +ملف باسم `pair_classification.py`، فيمكننا بعد ذلك استيراده وتسجيله على النحو التالي: + +```py +from pair_classification import PairClassificationPipeline +from transformers.pipelines import PIPELINE_REGISTRY +from transformers import AutoModelForSequenceClassification, TFAutoModelForSequenceClassification + +PIPELINE_REGISTRY.register_pipeline( + "pair-classification", + pipeline_class=PairClassificationPipeline, + pt_model=AutoModelForSequenceClassification, + tf_model=TFAutoModelForSequenceClassification, +) +``` +بمجرد القيام بذلك، يمكننا استخدامه مع نموذج مدرب مسبقًا. على سبيل المثال، تم تدريب `sgugger/finetuned-bert-mrpc` +على مجموعة بيانات MRPC، والتي تصنف أزواج الجمل كأقوال أو لا. + +```py +from transformers import pipeline + +classifier = pipeline("pair-classification", model="sgugger/finetuned-bert-mrpc") +``` + +بعد ذلك، يمكننا مشاركته على Hub باستخدام طريقة `push_to_hub`: + +```py +classifier.push_to_hub("test-dynamic-pipeline") +``` + +سيقوم هذا بنسخ الملف الذي حددت فيه `PairClassificationPipeline` داخل المجلد `"test-dynamic-pipeline"`، +جنبًا إلى جنب مع حفظ نموذج ورمز محدد للخط أنابيب، قبل دفع كل شيء إلى المستودع +`{your_username}/test-dynamic-pipeline`. بعد ذلك، يمكن لأي شخص استخدامه طالما قاموا بتوفير الخيار +`trust_remote_code=True`: + +```py +from transformers import pipeline + +classifier = pipeline(model="{your_username}/test-dynamic-pipeline", trust_remote_code=True) +``` + +## إضافة خط الأنابيب إلى 🤗 Transformers + +إذا كنت تريد المساهمة بخط أنابيبك في 🤗 Transformers، فستحتاج إلى إضافة وحدة نمطية جديدة في الوحدة الفرعية `pipelines` +برمز خط الأنابيب الخاص بك، ثم أضفه إلى قائمة المهام المحددة في `pipelines/__init__.py`. + +بعد ذلك، ستحتاج إلى إضافة الاختبارات. قم بإنشاء ملف جديد `tests/test_pipelines_MY_PIPELINE.py` مع أمثلة للاختبارات الأخرى. + +ستكون دالة `run_pipeline_test` عامة جدًا وستعمل على نماذج صغيرة عشوائية لكل هندسة معمارية ممكنة +كما هو محدد بواسطة `model_mapping` و `tf_model_mapping`. + +هذا مهم جدًا لاختبار التوافق المستقبلي، مما يعني أنه إذا قام شخص ما بإضافة نموذج جديد لـ +`XXXForQuestionAnswering` فسيحاول اختبار خط الأنابيب تشغيله. نظرًا لأن النماذج عشوائية، فمن +من المستحيل التحقق من القيم الفعلية، ولهذا السبب يوجد مساعد `ANY` الذي سيحاول ببساطة مطابقة +إخراج نوع خط الأنابيب. + +أنت أيضًا *تحتاج* إلى تنفيذ اختبارين (يفضل 4). + +- `test_small_model_pt` : قم بتعريف نموذج صغير واحد لهذا الخط أنابيب (لا يهم إذا لم تكن النتائج منطقية) + واختبار الإخراج من خط الأنابيب. يجب أن تكون النتائج هي نفسها `test_small_model_tf`. +- `test_small_model_tf` : قم بتعريف نموذج صغير واحد لهذا الخط أنابيب (لا يهم إذا لم تكن النتائج منطقية) + واختبار الإخراج من خط الأنابيب. يجب أن تكون النتائج هي نفسها `test_small_model_pt`. +- `test_large_model_pt` (`اختياري`): اختبارات خط الأنابيب على خط أنابيب حقيقي حيث من المفترض أن تكون النتائج + منطقي. هذه الاختبارات بطيئة ويجب تمييزها على هذا النحو. هنا الهدف هو عرض خط الأنابيب والتأكد من + لا يوجد انجراف في الإصدارات المستقبلية. +- `test_large_model_tf` (`اختياري`): اختبارات خط الأنابيب على خط أنابيب حقيقي حيث من المفترض أن تكون النتائج + منطقي. هذه الاختبارات بطيئة ويجب تمييزها على هذا النحو. هنا الهدف هو عرض خط الأنابيب والتأكد من + لا يوجد انجراف في الإصدارات المستقبلية. \ No newline at end of file From 6dd3266c10929daf29083c92c7340085a07ceebd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:40:54 +0300 Subject: [PATCH 003/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/attention.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/attention.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/source/ar/attention.md diff --git a/docs/source/ar/attention.md b/docs/source/ar/attention.md new file mode 100644 index 00000000000000..c47ded133be8e0 --- /dev/null +++ b/docs/source/ar/attention.md @@ -0,0 +1,25 @@ +# آليات الانتباه + +تستخدم معظم نماذج المحول (Transformer) الانتباه الكامل بحيث تكون مصفوفة الانتباه مربعة. ويمكن أن يمثل ذلك عنق زجاجة حسابيًا كبيرًا عندما تكون لديك نصوص طويلة. ويعد Longformer وReformer من النماذج التي تحاول أن تكون أكثر كفاءة وتستخدم نسخة مبعثرة من مصفوفة الانتباه لتسريع التدريب. + +## انتباه LSH + +يستخدم [Reformer](model_doc/reformer) انتباه LSH. في الدالة softmax(QK^t)، فإن أكبر العناصر فقط (في بعد softmax) من المصفوفة QK^t هي التي ستعطي مساهمات مفيدة. لذلك، بالنسبة لكل استعلام q في Q، يمكننا أن نأخذ في الاعتبار فقط المفاتيح k في K القريبة من q. وتُستخدم دالة هاش لتحديد ما إذا كان q وk قريبين. ويتم تعديل قناع الانتباه لحجب الرمز الحالي (باستثناء الموضع الأول)، لأنه سيعطي استعلامًا ومفتاحًا متساويين (لذلك متشابهين للغاية). نظرًا لأن الهاش يمكن أن يكون عشوائيًا بعض الشيء، يتم في الممارسة العملية استخدام عدة دوال هاش (يحددها معامل n_rounds) ثم يتم حساب المتوسط معًا. + +## الانتباه المحلي + +يستخدم [Longformer](model_doc/longformer) الانتباه المحلي: غالبًا ما يكون السياق المحلي (على سبيل المثال، ما هما الرمزان إلى اليسار واليمين؟) كافيًا لاتخاذ إجراء بالنسبة للرمز المعطى. أيضًا، عن طريق تكديس طبقات الانتباه التي لها نافذة صغيرة، سيكون للطبقة الأخيرة مجال استقبال أكبر من مجرد الرموز في النافذة، مما يسمح لها ببناء تمثيل للجملة بأكملها. + +كما يتم منح بعض رموز الإدخال المختارة مسبقًا انتباهًا عالميًا: بالنسبة لهذه الرموز القليلة، يمكن لمصفوفة الانتباه الوصول إلى جميع الرموز وتكون هذه العملية متماثلة: فلجميع الرموز الأخرى إمكانية الوصول إلى تلك الرموز المحددة (بالإضافة إلى تلك الموجودة في نافذتهم المحلية). وهذا موضح في الشكل 2d من الورقة، انظر أدناه لمثال على قناع الانتباه: + +
+ +
+ +وباستخدام مصفوفات الانتباه هذه التي تحتوي على معلمات أقل، يسمح النموذج بإدخالات ذات طول تسلسل أكبر. + +## حيل أخرى + +### الترميزات الموضعية المحورية + +يستخدم [Reformer](model_doc/reformer) ترميزات موضعية محورية: في نماذج المحول التقليدية، يكون الترميز الموضعي E مصفوفة بحجم \\(l\\) في \\(d\\)، حيث \\(l\\) هو طول التسلسل و\\(d\\) هو بعد الحالة المخفية. إذا كان لديك نصوص طويلة جدًا، فقد تكون هذه المصفوفة ضخمة وتستهلك مساحة كبيرة جدًا على وحدة معالجة الرسوميات (GPU). وللتخفيف من ذلك، تتكون الترميزات الموضعية المحورية من تحليل تلك المصفوفة الكبيرة E إلى مصفوفتين أصغر E1 وE2، بأبعاد \\(l_{1} \times d_{1}\\) و \\(l_{2} \times d_{2}\\)، بحيث \\(l_{1} \times l_{2} = l\\) و\\(d_{1} + d_{2} = d\\) (مع حاصل ضرب الأطوال، ينتهي الأمر بكونه أصغر بكثير). ويتم الحصول على الترميز للخطوة الزمنية \\(j\\) في E عن طريق ربط الترميزات للخطوة الزمنية \\(j \% l1\\) في E1 و \\(j // l1\\) في E2. \ No newline at end of file From e635595e0e66e2880242bf4d27d5830b98d5e342 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:40:56 +0300 Subject: [PATCH 004/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/bertology.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/bertology.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docs/source/ar/bertology.md diff --git a/docs/source/ar/bertology.md b/docs/source/ar/bertology.md new file mode 100644 index 00000000000000..0f00f87eb8e597 --- /dev/null +++ b/docs/source/ar/bertology.md @@ -0,0 +1,18 @@ +# BERTology + +هناك مجال متنامي من الدراسة يهتم باستكشاف آلية عمل المحولات الضخمة مثل BERT (والذي يطلق عليه البعض اسم "BERTology"). ومن الأمثلة الجيدة على هذا المجال ما يلي: + +- BERT Rediscovers the Classical NLP Pipeline بواسطة Ian Tenney و Dipanjan Das و Ellie Pavlick: + https://arxiv.org/abs/1905.05950 +- Are Sixteen Heads Really Better than One? بواسطة Paul Michel و Omer Levy و Graham Neubig: https://arxiv.org/abs/1905.10650 +- What Does BERT Look At? An Analysis of BERT's Attention بواسطة Kevin Clark و Urvashi Khandelwal و Omer Levy و Christopher D. + Manning: https://arxiv.org/abs/1906.04341 +- CAT-probing: A Metric-based Approach to Interpret How Pre-trained Models for Programming Language Attend Code Structure: https://arxiv.org/abs/2210.04633 + +وللمساعدة في تطوير هذا المجال الجديد، قمنا بتضمين بعض الميزات الإضافية في نماذج BERT/GPT/GPT-2 للسماح للناس بالوصول إلى التمثيلات الداخلية، والتي تم تكييفها بشكل أساسي من العمل الرائع لـ Paul Michel (https://arxiv.org/abs/1905.10650): + +- الوصول إلى جميع المخفيّات في BERT/GPT/GPT-2، +- الوصول إلى جميع أوزان الانتباه لكل رأس في BERT/GPT/GPT-2، +- استرجاع قيم ومشتقات رأس الإخراج لحساب درجة أهمية الرأس وإزالة الرأس كما هو موضح في https://arxiv.org/abs/1905.10650. + +ولمساعدتك على فهم واستخدام هذه الميزات، أضفنا مثالًا نصيًا محددًا: [bertology.py](https://github.com/huggingface/transformers/tree/main/examples/research_projects/bertology/run_bertology.py) أثناء استخراج المعلومات وإزالة فروع من نموذج تم تدريبه مسبقًا على GLUE. \ No newline at end of file From 7f2188ca71c677082c25e9b915bee47c5924fd79 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:40:58 +0300 Subject: [PATCH 005/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/community.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/community.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/source/ar/community.md diff --git a/docs/source/ar/community.md b/docs/source/ar/community.md new file mode 100644 index 00000000000000..1312423f3431f8 --- /dev/null +++ b/docs/source/ar/community.md @@ -0,0 +1,37 @@ +# مجتمع + +تعيد هذه الصفحة تجميع الموارد حول مكتبة 🤗 Transformers التي طورها المجتمع. + +## موارد المجتمع: + +| المورد | الوصف | المؤلف | +|:----------|:-------------|------:| +| [Hugging Face Transformers Glossary Flashcards](https://www.darigovresearch.com/huggingface-transformers-glossary-flashcards) | مجموعة من البطاقات التعليمية المستندة إلى [مسرد وثائق المحولات](glossary) والتي تم وضعها في شكل يمكن تعلمه/مراجعته بسهولة باستخدام [Anki](https://apps.ankiweb.net/)، وهو تطبيق مفتوح المصدر ومشترك بين المنصات مصمم خصيصًا للاحتفاظ بالمعرفة على المدى الطويل. شاهد هذا [الفيديو التعريفي حول كيفية استخدام البطاقات التعليمية](https://www.youtube.com/watch?v=Dji_h7PILrw). | [Darigov Research](https://www.darigovresearch.com/) | + +## دفاتر ملاحظات المجتمع: +| الدفتر | الوصف | المؤلف | | +|:----------|:-------------|:-------------|------:| +| [ضبط نموذج محول مسبق التدريب لتوليد كلمات الأغاني](https://github.com/AlekseyKorshuk/huggingartists) | كيفية توليد كلمات أغاني على غرار فنانك المفضل عن طريق ضبط نموذج GPT-2 | [Aleksey Korshuk](https://github.com/AlekseyKorshuk) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/AlekseyKorshuk/huggingartists/blob/master/huggingartists-demo.ipynb) | +| [تدريب T5 في Tensorflow 2](https://github.com/snapthat/TF-T5-text-to-text) | كيفية تدريب T5 لأي مهمة باستخدام Tensorflow 2. يوضح هذا الدفتر كيفية تنفيذ مهمة الأسئلة والأجوبة في Tensorflow 2 باستخدام SQUAD | [Muhammad Harris](https://github.com/HarrisDePerceptron) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/snapthat/TF-T5-text-to-text/blob/master/snapthatT5/notebooks/TF-T5-Datasets%20Training.ipynb) | +| [تدريب T5 على TPU](https://github.com/patil-suraj/exploring-T5/blob/master/T5_on_TPU.ipynb) | كيفية تدريب T5 على SQUAD مع مكتبة Transformers و Nlp | [Suraj Patil](https://github.com/patil-suraj) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/patil-suraj/exploring-T5/blob/master/T5_on_TPU.ipynb#scrollTo=QLGiFCDqvuil) | +| [ضبط T5 الدقيق للتصنيف والاختيار المتعدد](https://github.com/patil-suraj/exploring-T5/blob/master/t5_fine_tuning.ipynb) | كيفية الضبط الدقيق لـ T5 للتصنيف ومهام الاختيار المتعدد باستخدام تنسيق النص إلى نص مع PyTorch Lightning | [Suraj Patil](https://github.com/patil-suraj) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/patil-suraj/exploring-T5/blob/master/t5_fine_tuning.ipynb) | +| [الضبط الدقيق لـ DialoGPT على مجموعات بيانات ولغات جديدة](https://github.com/ncoop57/i-am-a-nerd/blob/master/_notebooks/2020-05-12-chatbot-part-1.ipynb) | كيفية الضبط الدقيق لنموذج DialoGPT على مجموعة بيانات جديدة لإنشاء دردشة آلية للمحادثات المفتوحة | [Nathan Cooper](https://github.com/ncoop57) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ncoop57/i-am-a-nerd/blob/master/_notebooks/2020-05-12-chatbot-part-1.ipynb) | +| [نمذجة تسلسل طويل مع Reformer](https://github.com/patrickvonplaten/notebooks/blob/master/PyTorch_Reformer.ipynb) | كيفية التدريب على تسلسلات طويلة مثل 500,000 رمز مع Reformer | [Patrick von Platen](https://github.com/patrickvonplaten) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/patrickvonplaten/notebooks/blob/master/PyTorch_Reformer.ipynb) | +| [الضبط الدقيق لـ BART للتلخيص](https://github.com/ohmeow/ohmeow_website/blob/master/posts/2021-05-25-mbart-sequence-classification-with-blurr.ipynb) | كيفية الضبط الدقيق لـ BART للتلخيص باستخدام fastai و blurr | [Wayde Gilliam](https://ohmeow.com/) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ohmeow/ohmeow_website/blob/master/posts/2021-05-25-mbart-sequence-classification-with-blurr.ipynb) | +| [الضبط الدقيق لنموذج محول مسبق التدريب على تغريدات أي شخص](https://colab.research.google.com/github/borisdayma/huggingtweets/blob/master/huggingtweets-demo.ipynb) | كيفية توليد تغريدات على غرار حساب Twitter المفضل لديك عن طريق الضبط الدقيق لنموذج GPT-2 | [Boris Dayma](https://github.com/borisdayma) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/borisdayma/huggingtweets/blob/master/huggingtweets-demo.ipynb) | +| [تحسين نماذج 🤗 Hugging Face باستخدام Weights & Biases](https://colab.research.google.com/github/wandb/examples/blob/master/colabs/huggingface/Optimize_Hugging_Face_models_with_Weights_%26_Biases.ipynb) | دليل تعليمي كامل يوضح تكامل W&B مع Hugging Face | [Boris Dayma](https://github.com/borisdayma) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/wandb/examples/blob/master/colabs/huggingface/Optimize_Hugging_Face_models_with_Weights_%26_Biases.ipynb) | +| [تدريب Longformer مسبقًا](https://github.com/allenai/longformer/blob/master/scripts/convert_model_to_long.ipynb) | كيفية بناء إصدار "طويل" من النماذج مسبقة التدريب الموجودة | [Iz Beltagy](https://beltagy.net) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/allenai/longformer/blob/master/scripts/convert_model_to_long.ipynb) | +| [الضبط الدقيق لـ Longformer لمهمة QA](https://github.com/patil-suraj/Notebooks/blob/master/longformer_qa_training.ipynb) | كيفية الضبط الدقيق لنموذج Longformer لمهمة QA | [Suraj Patil](https://github.com/patil-suraj) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/patil-suraj/Notebooks/blob/master/longformer_qa_training.ipynb) | +| [تقييم النموذج باستخدام 🤗nlp](https://github.com/patrickvonplaten/notebooks/blob/master/How_to_evaluate_Longformer_on_TriviaQA_using_NLP.ipynb) | كيفية تقييم Longformer على TriviaQA باستخدام `nlp` | [Patrick von Platen](https://github.com/patrickvonplaten) | [![افتح في Colab](https://colab.research.google.com/drive/1m7eTGlPmLRgoPkkA7rkhQdZ9ydpmsdLE?usp=sharing) | +| [الضبط الدقيق لـ T5 لاستخراج المشاعر من النص](https://github.com/enzoampil/t5-intro/blob/master/t5_qa_training_pytorch_span_extraction.ipynb) | كيفية الضبط الدقيق لـ T5 لاستخراج المشاعر من النص باستخدام تنسيق النص إلى نص مع PyTorch Lightning | [Lorenzo Ampil](https://github.com/enzoampil) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/enzoampil/t5-intro/blob/master/t5_qa_training_pytorch_span_extraction.ipynb) | +| [الضبط الدقيق لـ DistilBert للتصنيف متعدد الفئات](https://github.com/abhimishra91/transformers-tutorials/blob/master/transformers_multiclass_classification.ipynb) | كيفية الضبط الدقيق لـ DistilBert للتصنيف متعدد الفئات باستخدام PyTorch | [Abhishek Kumar Mishra](https://github.com/abhimishra91) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/abhimishra91/transformers-tutorials/blob/master/transformers_multiclass_classification.ipynb)| +|[الضبط الدقيق لـ BERT للتصنيف متعدد الملصقات](https://github.com/abhimishra91/transformers-tutorials/blob/master/transformers_multi_label_classification.ipynb)|كيفية الضبط الدقيق لـ BERT للتصنيف متعدد الملصقات باستخدام PyTorch|[Abhishek Kumar Mishra](https://github.com/abhimishra91) |[![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/abhimishra91/transformers-tutorials/blob/master/transformers_multi_label_classification.ipynb)| +|[الضبط الدقيق لـ T5 للتلخيص](https://github.com/abhimishra91/transformers-tutorials/blob/master/transformers_summarization_wandb.ipynb)|كيفية الضبط الدقيق لـ T5 للتلخيص في PyTorch وتتبع التجارب باستخدام WandB|[Abhishek Kumar Mishra](https://github.com/abhimishra91) |[![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/abhimishra91/transformers-tutorials/blob/master/transformers_summarization_wandb.ipynb)| +|[تسريع الضبط الدقيق في Transformers باستخدام الحشو الديناميكي/التقسيم إلى مجموعات](https://github.com/ELS-RD/transformers-notebook/blob/master/Divide_Hugging_Face_Transformers_training_time_by_2_or_more.ipynb)|كيفية تسريع الضبط الدقيق بمعامل 2 باستخدام الحشو الديناميكي/التقسيم إلى مجموعات|[Michael Benesty](https://github.com/pommedeterresautee) |[![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1CBfRU1zbfu7-ijiOqAAQUA-RJaxfcJoO?usp=sharing)| +|[تدريب Reformer مسبقًا للنمذجة اللغوية المستندة إلى الأقنعة](https://github.com/patrickvonplaten/notebooks/blob/master/Reformer_For_Masked_LM.ipynb)| كيفية تدريب نموذج Reformer مع طبقات الاهتمام الذاتي ثنائية الاتجاه | [Patrick von Platen](https://github.com/patrickvonplaten) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1tzzh0i8PgDQGV3SMFUGxM7_gGae3K-uW?usp=sharing)| +|[توسيع نطاق ضبط Sci-BERT الدقيق وتنفيذه](https://github.com/lordtt13/word-embeddings/blob/master/COVID-19%20Research%20Data/COVID-SciBERT.ipynb)| كيفية زيادة مفردات نموذج SciBERT مسبق التدريب من AllenAI على مجموعة بيانات CORD وتنفيذه. | [Tanmay Thakur](https://github.com/lordtt13) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1rqAR40goxbAfez1xvF3hBJphSCsvXmh8)| +|[الضبط الدقيق لـ BlenderBotSmall للتلخيص باستخدام واجهة برمجة التطبيقات Trainer](https://github.com/lordtt13/transformers-experiments/blob/master/Custom%20Tasks/fine-tune-blenderbot_small-for-summarization.ipynb)| كيفية الضبط الدقيق لـ BlenderBotSmall للتلخيص على مجموعة بيانات مخصصة، باستخدام واجهة برمجة التطبيقات Trainer. | [Tanmay Thakur](https://github.com/lordtt13) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/19Wmupuls7mykSGyRN_Qo6lPQhgp56ymq?usp=sharing)| +|[الضبط الدقيق لـ Electra وتفسيره باستخدام Integrated Gradients](https://github.com/elsanns/xai-nlp-notebooks/blob/master/electra_fine_tune_interpret_captum_ig.ipynb) | كيفية الضبط الدقيق لـ Electra لتحليل المشاعر وتفسير التنبؤات باستخدام Captum Integrated Gradients | [Eliza Szczechla](https://elsanns.github.io) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/elsanns/xai-nlp-notebooks/blob/master/electra_fine_tune_interpret_captum_ig.ipynb)| +|[الضبط الدقيق لنموذج GPT-2 غير الإنجليزي باستخدام فئة Trainer](https://github.com/philschmid/fine-tune-GPT-2/blob/master/Fine_tune_a_non_English_GPT_2_Model_with_Huggingface.ipynb) | كيفية الضبط الدقيق لنموذج GPT-2 غير الإنجليزي باستخدام فئة Trainer | [Philipp Schmid](https://www.philschmid.de) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/philschmid/fine-tune-GPT-2/blob/master/Fine_tune_a_non_English_GPT_2_Model_with_Huggingface.ipynb)| +|[الضبط الدقيق لنموذج DistilBERT لتصنيف الملصقات المتعددة](https://github.com/DhavalTaunk08/Transformers_scripts/blob/master/Transformers_multilabel_distilbert.ipynb) | كيفية الضبط الدقيق لنموذج DistilBERT لتصنيف الملصقات المتعددة | [Dhaval Taunk](https://github.com/DhavalTaunk08) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DhavalTaunk08/Transformers_scripts/blob/master/Transformers_multilabel_distilbert.ipynb)| +|[الضبط الدقيق لـ ALBERT للتصنيف المزدوج للجمل](https://github.com/NadirEM/nlp-notebooks/blob/master/Fine_tune_ALBERT_sentence_pair_classification.ipynb) | كيفية الضبط الدقيق لنموذج ALBERT أو أي نموذج آخر قائم على BERT لتصنيف أزواج الجمل | [Nadir El Manouzi](https://github.com/NadirEM) | [![افتح في Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/NadirEM \ No newline at end of file From fd0a8e2ca2527e7e357b9cf515246b3ff9b31937 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:40:59 +0300 Subject: [PATCH 006/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/fsdp.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/fsdp.md | 121 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/source/ar/fsdp.md diff --git a/docs/source/ar/fsdp.md b/docs/source/ar/fsdp.md new file mode 100644 index 00000000000000..7c2b8f53d3c850 --- /dev/null +++ b/docs/source/ar/fsdp.md @@ -0,0 +1,121 @@ +# Fully Sharded Data Parallel + +[Fully Sharded Data Parallel (FSDP)](https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/) هي طريقة موازية للبيانات تقوم بتشظية معلمات النموذج والتدرجات وحالات المحسن عبر عدد وحدات معالجة الرسوميات المتوفرة (يطلق عليها أيضًا اسم العمال أو الرتب). على عكس [DistributedDataParallel (DDP)](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html)، يقلل FSDP من استخدام الذاكرة لأن النموذج يتم استنساخه على كل وحدة GPU. هذا يحسن كفاءة ذاكرة GPU ويسمح لك بتدريب نماذج أكبر بكثير على عدد أقل من وحدات معالجة الرسوميات. FSDP مدمج في Accelerate، وهي مكتبة لإدارة التدريب بسهولة في بيئات موزعة، مما يعني أنه متاح للاستخدام من فئة [`Trainer`]. + +قبل البدء، تأكد من تثبيت Accelerate و PyTorch 2.1.0 أو إصدار أحدث. + +```bash +pip install accelerate +``` + +## تكوين FSDP + +لتبدأ، قم بتشغيل أمر [`accelerate config`](https://huggingface.co/docs/accelerate/package_reference/cli#accelerate-config) لإنشاء ملف تكوين لبيئة التدريب الخاصة بك. يستخدم Accelerate ملف التكوين هذا لإعداد بيئة التدريب الصحيحة تلقائيًا بناءً على خيارات التدريب التي حددتها في `accelerate config`. + +```bash +accelerate config +``` + +عند تشغيل `accelerate config`، ستتم مطالبتك بسلسلة من الخيارات لتكوين بيئة التدريب الخاصة بك. يغطي هذا القسم بعض أهم خيارات FSDP. لمزيد من المعلومات حول خيارات FSDP الأخرى المتاحة، راجع معلمات [fsdp_config](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments.fsdp_config). + +### استراتيجية التشظية + +يقدم FSDP عددًا من استراتيجيات التشظية للاختيار من بينها: + +* `FULL_SHARD` - تشظية معلمات النموذج والتدرجات وحالات المحسن عبر العمال؛ حدد `1` لهذا الخيار +* `SHARD_GRAD_OP` - تشظية التدرجات وحالات المحسن عبر العمال؛ حدد `2` لهذا الخيار +* `NO_SHARD` - لا تشظية أي شيء (وهذا يعادل DDP)؛ حدد `3` لهذا الخيار +* `HYBRID_SHARD` - تشظية معلمات النموذج والتدرجات وحالات المحسن داخل كل عامل حيث يحتوي كل عامل أيضًا على نسخة كاملة؛ حدد `4` لهذا الخيار +* `HYBRID_SHARD_ZERO2` - تشظية التدرجات وحالات المحسن داخل كل عامل حيث يحتوي كل عامل أيضًا على نسخة كاملة؛ حدد `5` لهذا الخيار + +يتم تمكين ذلك من خلال علم `fsdp_sharding_strategy`. + +### تفريغ الذاكرة المؤقتة للقرص + +يمكنك أيضًا تفريغ المعلمات والتدرجات إلى وحدة المعالجة المركزية عندما لا تكون قيد الاستخدام لتوفير المزيد من ذاكرة GPU ومساعدتك في تناسب النماذج الكبيرة حيث قد لا يكون FSDP كافيًا. يتم تمكين ذلك من خلال تعيين `fsdp_offload_params: true` عند تشغيل `accelerate config`. + +### سياسة التغليف + +يتم تطبيق FSDP عن طريق تغليف كل طبقة في الشبكة. يتم تطبيق التغليف عادةً بطريقة متداخلة حيث يتم التخلص من الأوزان الكاملة بعد كل تمرير للأمام لتوفير الذاكرة للاستخدام في الطبقة التالية. تعتبر سياسة التغليف التلقائي أبسط طريقة لتنفيذ ذلك ولا تحتاج إلى تغيير أي رمز. يجب عليك تحديد `fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP` لتغليف طبقة المحول و`fsdp_transformer_layer_cls_to_wrap` لتحديد الطبقة التي سيتم تغليفها (على سبيل المثال `BertLayer`). + +من ناحية أخرى، يمكنك اختيار سياسة التغليف القائمة على الحجم حيث يتم تطبيق FSDP على طبقة إذا تجاوزت عددًا معينًا من المعلمات. يتم تمكين ذلك من خلال تعيين `fsdp_wrap_policy: SIZE_BASED_WRAP` و`min_num_param` إلى عتبة الحجم المرغوبة. + +### نقاط التفتيش + +يجب حفظ نقاط التفتيش الوسيطة باستخدام `fsdp_state_dict_type: SHARDED_STATE_DICT` لأن حفظ القاموس الكامل لحالة CPU على الرتبة 0 يستغرق الكثير من الوقت وغالبًا ما يؤدي إلى أخطاء "مهلة NCCL" بسبب التعليق غير المحدد أثناء البث. يمكنك استئناف التدريب باستخدام قواميس الحالة المشظاة باستخدام طريقة [`~accelerate.Accelerator.load_state`]. + +```py +# الدليل الذي يحتوي على نقاط التفتيش +accelerator.load_state("ckpt") +``` + +ومع ذلك، عندما ينتهي التدريب، تريد حفظ قاموس الحالة الكامل لأن قاموس الحالة المشظاة متوافق فقط مع FSDP. + +```py +if trainer.is_fsdp_enabled: + trainer.accelerator.state.fsdp_plugin.set_state_dict_type("FULL_STATE_DICT") + +trainer.save_model(script_args.output_dir) +``` + +### TPU + +تدعم [PyTorch XLA](https://pytorch.org/xla/release/2.1/index.html) التدريب FSDP لـ TPUs ويمكن تمكينه عن طريق تعديل ملف تكوين FSDP الذي تم إنشاؤه بواسطة `accelerate config`. بالإضافة إلى استراتيجيات التشظية وخيارات التغليف المحددة أعلاه، يمكنك إضافة المعلمات الموضحة أدناه إلى الملف. + +```yaml +xla: True # يجب تعيينها على True لتمكين PyTorch/XLA +xla_fsdp_settings: # إعدادات FSDP المحددة لـ XLA +xla_fsdp_grad_ckpt: True # استخدام نقطة تفتيش التدرج +``` + +تسمح لك [`xla_fsdp_settings`](https://github.com/pytorch/xla/blob/2e6e183e0724818f137c8135b34ef273dea33318/torch_xla/distributed/fsdp/xla_fully_sharded_data_parallel.py#L128) بتكوين معلمات إضافية محددة لـ XLA لـ FSDP. + +## إطلاق التدريب + +قد يبدو ملف تكوين FSDP على النحو التالي: + +```yaml +compute_environment: LOCAL_MACHINE +debug: false +distributed_type: FSDP +downcast_bf16: 'no' +fsdp_config: + fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP + fsdp_backward_prefetch_policy: BACKWARD_PRE + fsdp_cpu_ram_efficient_loading: true + fsdp_forward_prefetch: false + fsdp_offload_params: true + fsdp_sharding_strategy: 1 + fsdp_state_dict_type: SHARDED_STATE_DICT + fsdp_sync_module_states: true + fsdp_transformer_layer_cls_to_wrap: BertLayer + fsdp_use_orig_params: true +machine_rank: 0 +main_training_function: main +mixed_precision: bf16 +num_machines: 1 +num_processes: 2 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + +لبدء التدريب، قم بتشغيل أمر [`accelerate launch`](https://huggingface.co/docs/accelerate/package_reference/cli#accelerate-launch) وسيستخدم تلقائيًا ملف التكوين الذي أنشأته سابقًا باستخدام `accelerate config`. + +```bash +accelerate launch my-trainer-script.py +``` + +```bash +accelerate launch --fsdp="full shard" --fsdp_config="path/to/fsdp_config/ my-trainer-script.py +``` + +## الخطوات التالية + +يمكن أن يكون FSDP أداة قوية لتدريب النماذج الكبيرة جدًا ولديك إمكانية الوصول إلى أكثر من وحدة معالجة رسومات أو TPU. من خلال تشظية معلمات النموذج وحالات المحسن والتدرج، وحتى تفريغها إلى وحدة المعالجة المركزية عندما تكون غير نشطة، يمكن أن يقلل FSDP من التكلفة العالية للتدريب واسع النطاق. إذا كنت مهتمًا بمعرفة المزيد، فقد يكون ما يلي مفيدًا: +* تابع الدليل الأكثر شمولاً لـ Accelerate لـ [FSDP](https://huggingface.co/docs/accelerate/usage_guides/fsdp). +* اقرأ منشور المدونة [تقديم واجهة برمجة التطبيقات المتوازية للبيانات المشظاة بالكامل في PyTorch (FSDP)](https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/). +* اقرأ منشور المدونة [توسيع نطاق نماذج PyTorch على TPUs السحابية باستخدام FSDP](https://pytorch.org/blog/scaling-pytorch-models-on-cloud-tpus-with-fsdp/). \ No newline at end of file From 3f011beb0365b3ff3b87838e1ae6d2a865f4fee9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:01 +0300 Subject: [PATCH 007/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/glossary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/glossary.md | 452 +++++++++++++++++++++++++++++++++++++ 1 file changed, 452 insertions(+) create mode 100644 docs/source/ar/glossary.md diff --git a/docs/source/ar/glossary.md b/docs/source/ar/glossary.md new file mode 100644 index 00000000000000..2533e31d0ef826 --- /dev/null +++ b/docs/source/ar/glossary.md @@ -0,0 +1,452 @@ +# مسرد المصطلحات + +يحدد هذا المسرد مصطلحات التعلم الآلي العامة و 🤗 Transformers لمساعدتك على فهم الوثائق بشكل أفضل. + +## A + +### قناع الانتباه + +قناع الانتباه هو حجة اختيارية تستخدم عند تجميع التسلسلات معًا. + + + +يشير هذا الحجة إلى النموذج إلى الرموز المميزة التي يجب الانتباه إليها، والتي لا ينبغي ذلك. + +على سبيل المثال، ضع في اعتبارك هاتين التسلسلتين: + +```python +>>> from transformers import BertTokenizer + +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased") + +>>> sequence_a = "This is a short sequence." +>>> sequence_b = "This is a rather long sequence. It is at least longer than sequence A." + +>>> encoded_sequence_a = tokenizer(sequence_a)["input_ids"] +>>> encoded_sequence_b = tokenizer(sequence_b)["input_ids"] +``` + +لدى الإصدارات المشفرة أطوال مختلفة: + +```python +>>> len(encoded_sequence_a), len(encoded_sequence_b) +(8, 19) +``` + +لذلك، لا يمكننا وضعها معًا في نفس المصفوفة كما هي. يجب إضافة حشو إلى التسلسل الأول حتى يصل إلى طول التسلسل الثاني، أو يجب تقليص الثاني إلى طول الأول. + +في الحالة الأولى، يتم تمديد قائمة المعرفات بواسطة مؤشرات الحشو. يمكننا تمرير قائمة إلى المحلل اللغوي وطلب منه إضافة الحشو بهذه الطريقة: + +```python +>>> padded_sequences = tokenizer([sequence_a, sequence_b], padding=True) +``` + +يمكننا أن نرى أنه تمت إضافة 0s على يمين الجملة الأولى لجعلها بنفس طول الجملة الثانية: + +```python +>>> padded_sequences["input_ids"] +[[101, 1188, 1110, 170, 1603, 4954, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [101, 1188, 1110, 170, 1897, 1263, 4954, 119, 1135, 1110, 1120, 1655, 2039, 1190, 1103, 4954, 138, 119, 102]] +``` + +يمكن بعد ذلك تحويل هذا إلى مصفوفة في PyTorch أو TensorFlow. قناع الانتباه هو مصفوفة ثنائية تشير إلى +موضع مؤشرات الحشو بحيث لا ينتبه إليها النموذج. بالنسبة إلى [`BertTokenizer`]`1` يشير إلى +قيمة يجب الانتباه إليها، في حين يشير `0` إلى قيمة مبطنة. يوجد قناع الانتباه هذا في القاموس الذي يعيده المحلل اللغوي تحت المفتاح "attention_mask": + +```python +>>> padded_sequences["attention_mask"] +[[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] +``` + +### نماذج الترميز التلقائي + +راجع [نماذج الترميز](#encoder-models) و [نمذجة اللغة المقنعة](#masked-language-modeling-mlm) + +### نماذج التنبؤية الذاتية + +راجع [نمذجة اللغة السببية](#causal-language-modeling) و [نماذج فك التشفير](#decoder-models) + +## B + +### العمود الفقري + +العمود الفقري هو الشبكة (الترميزات والطبقات) التي تخرج الحالات المخفية الخام أو الميزات. عادة ما يكون متصلاً بـ [رأس](#head) الذي يقبل الميزات كمدخلات له لإجراء تنبؤ. على سبيل المثال، [`ViTModel`] هو عمود فقري بدون رأس محدد أعلاه. يمكن أيضًا لنماذج أخرى استخدام [`VitModel`] كعمود فقري مثل [DPT](model_doc/dpt). + +## C + +### نمذجة اللغة السببية + +مهمة ما قبل التدريب حيث يقرأ النموذج النصوص بالترتيب ويتعين عليه التنبؤ بالكلمة التالية. يتم ذلك عادةً عن طريق +قراءة الجملة بأكملها ولكن باستخدام قناع داخل النموذج لإخفاء الرموز المميزة المستقبلية في خطوة زمنية معينة. + +### قناة + +تتكون الصور الملونة من بعض تركيبة من القيم في ثلاث قنوات: الأحمر والأخضر والأزرق (RGB) ولديها صور تدرج الرمادي قناة واحدة فقط. في 🤗 Transformers، يمكن أن تكون القناة البعد الأول أو الأخير لصورة المصفوفة: [`n_channels`، `height`، `width`] أو [`height`، `width`، `n_channels`]. + +### التصنيف الزمني للاتصال (CTC) + +خوارزمية تسمح للنموذج بالتعلم دون معرفة كيفية محاذاة الإدخال والإخراج بالضبط؛ يحسب CTC توزيع جميع المخرجات المحتملة لإدخال معين ويختار الإخراج الأكثر احتمالًا منه. يتم استخدام CTC بشكل شائع في مهام التعرف على الكلام لأن الكلام لا يتم محاذاته دائمًا بشكل نظيف مع النص المكتوب لأسباب مختلفة مثل معدلات الكلام المختلفة للمتكلم. + +### التحويل + +نوع من الطبقات في شبكة عصبية حيث يتم ضرب المصفوفة المدخلة عنصرًا عنصريًا بمصفوفة أصغر (النواة أو المرشح) ويتم جمع القيم في مصفوفة جديدة. يُعرف هذا باسم عملية التحويل التي يتم تكرارها عبر مصفوفة الإدخال بأكملها. يتم تطبيق كل عملية على قطاع مختلف من مصفوفة الإدخال. تُستخدم الشبكات العصبية التلافيفية (CNNs) بشكل شائع في رؤية الكمبيوتر. + +## D + +### DataParallel (DP) + +تقنية توازي لتدريب على وحدات معالجة الرسومات (GPU) متعددة حيث يتم تكرار الإعداد نفسه عدة مرات، مع تلقي كل مثيل +شريحة بيانات مختلفة. يتم تنفيذ المعالجة بالتوازي ويتم مزامنة جميع الإعدادات في نهاية كل خطوة تدريب. + +تعرف على المزيد حول كيفية عمل DataParallel [هنا](perf_train_gpu_many#dataparallel-vs-distributeddataparallel). + +### معرفات إدخال فك التشفير + +هذا الإدخال خاص بنماذج الترميز وفك التشفير، ويحتوي على معرفات الإدخال التي سيتم تغذيتها إلى فك التشفير. +يجب استخدام هذه المدخلات لمهام التسلسل إلى التسلسل، مثل الترجمة أو الملخص، وعادة ما يتم بناؤها بطريقة محددة لكل نموذج. + +تقوم معظم نماذج الترميز وفك التشفير (BART، T5) بإنشاء معرفات `decoder_input_ids` الخاصة بها من `labels`. في مثل هذه النماذج، +يعد تمرير `labels` هو الطريقة المفضلة للتعامل مع التدريب. + +يرجى التحقق من وثائق كل نموذج لمعرفة كيفية تعاملها مع معرفات الإدخال هذه للتدريب على التسلسل إلى التسلسل. + +### نماذج فك التشفير + +يُشار إليها أيضًا باسم نماذج التنبؤية الذاتية، وتنطوي نماذج فك التشفير على مهمة ما قبل التدريب (تسمى نمذجة اللغة السببية) حيث يقرأ النموذج النصوص بالترتيب ويتعين عليه التنبؤ بالكلمة التالية. يتم ذلك عادةً عن طريق +قراءة الجملة بأكملها مع قناع لإخفاء الرموز المميزة المستقبلية في خطوة زمنية معينة. + + + +## E + +### نماذج الترميز + +تُعرف أيضًا باسم نماذج الترميز التلقائي، وتأخذ نماذج الترميز إدخالًا (مثل النص أو الصور) وتحويلها إلى تمثيل رقمي مكثف يُطلق عليه الترميز. غالبًا ما يتم تدريب نماذج الترميز مسبقًا باستخدام تقنيات مثل [نمذجة اللغة المقنعة](#masked-language-modeling-mlm)، والتي تقوم بإخفاء أجزاء من تسلسل الإدخال وإجبار النموذج على إنشاء تمثيلات أكثر دلالة. + + + +## F + +### استخراج الميزات + +عملية اختيار وتحويل البيانات الأولية إلى مجموعة من الميزات التي تكون أكثر إعلامًا وفائدة لخوارزميات التعلم الآلي. بعض الأمثلة على استخراج الميزات تشمل تحويل النص الأولي إلى ترميزات الكلمات واستخراج ميزات مهمة مثل الحواف أو الأشكال من بيانات الصور/الفيديو. + +### التغذية الأمامية للتشويك + +في كل كتلة اهتمام بقايا في المحولات، تلي طبقة الاهتمام الذاتي عادة طبقتان من التغذية الأمامية. +حجم تضمين الطبقة الأمامية الوسيطة أكبر عادة من حجم المخفي للنموذج (على سبيل المثال، لـ +`google-bert/bert-base-uncased`). +بالنسبة لإدخال بحجم `[batch_size، sequence_length]`، يمكن أن تمثل الذاكرة المطلوبة لتخزين التضمينات الأمامية الوسيطة `[batch_size، sequence_length، config.intermediate_size]` جزءًا كبيرًا من استخدام الذاكرة. لاحظ مؤلفو [Reformer: The Efficient Transformer](https://arxiv.org/abs/2001.04451) أنه نظرًا لأن الحساب مستقل عن بعد `sequence_length`، فإنه من المكافئ رياضيًا حساب تضمينات الإخراج الأمامية `[batch_size، config.hidden_size]_0، ...، [batch_size، config_size]_n` +فردياً والتوصيل بها لاحقًا إلى `[batch_size، sequence_length، config.hidden_size]` مع `n = sequence_length`، والذي يتداول زيادة وقت الحساب مقابل تقليل استخدام الذاكرة، ولكنه ينتج عنه نتيجة رياضية +**مكافئ**. + +بالنسبة للنماذج التي تستخدم الدالة [`apply_chunking_to_forward`]`، يحدد `chunk_size` عدد التضمينات +يتم حساب الإخراج بالتوازي وبالتالي يحدد المقايضة بين التعقيد الذاكري والزمني. إذا +تم تعيين `chunk_size` إلى 0، فلن يتم إجراء أي تشويك للإرسال الأمامي. + +### النماذج الدقيقة + +التنضيد الدقيق هو شكل من أشكال التعلم التحويلي الذي يتضمن أخذ نموذج مدرب مسبقًا، وتجميد أوزانه، واستبدال طبقة الإخراج برأس نموذج تمت إضافته حديثًا. يتم تدريب رأس النموذج على مجموعة البيانات المستهدفة. + +راجع البرنامج التعليمي [Fine-tune a pretrained model](https://huggingface.co/docs/transformers/training) لمزيد من التفاصيل، وتعرف على كيفية ضبط النماذج باستخدام 🤗 Transformers. + +## H + +### الرأس + +يشير رأس النموذج إلى الطبقة الأخيرة من الشبكة العصبية التي تقبل الحالات المخفية الخام وتسقطها إلى بعد مختلف. هناك رأس نموذج مختلف لكل مهمة. على سبيل المثال: + + * [`GPT2ForSequenceClassification`] هو رأس تصنيف تسلسل - طبقة خطية - أعلى نموذج [`GPT2Model`] الأساسي. + * [`ViTForImageClassification`] هو رأس تصنيف صورة - طبقة خطية أعلى حالة مخفية نهائية للرمز `CLS` - أعلى نموذج [`ViTModel`] الأساسي. + * [`Wav2Vec2ForCTC`] هو رأس نمذجة اللغة مع [CTC](#connectionist-temporal-classification-ctc) أعلى نموذج [`Wav2Vec2Model`] الأساسي. + +## I + +### رقعة الصورة + +تقسم نماذج المحول القائم على الرؤية الصورة إلى رقع أصغر يتم تضمينها خطيًا، ثم يتم تمريرها كتسلسل إلى النموذج. يمكنك العثور على `patch_size` - أو الدقة - للنموذج في تكوينه. + +### الاستنتاج + +الاستنتاج هو عملية تقييم نموذج على بيانات جديدة بعد اكتمال التدريب. راجع البرنامج التعليمي [Pipeline for inference](https://huggingface.co/docs/transformers/pipeline_tutorial) لمعرفة كيفية إجراء الاستدلال باستخدام 🤗 Transformers. + +### معرفات الإدخال + +معرفات الإدخال هي غالبًا المعلمات المطلوبة الوحيدة التي يجب تمريرها إلى النموذج كإدخال. إنها مؤشرات الرموز المميزة، +تمثيلات رقمية للرموز التي تبني التسلسلات التي سيتم استخدامها كإدخال بواسطة النموذج. + + + +يعمل كل محلل لغوي بشكل مختلف ولكن الآلية الأساسية تبقى كما هي. إليك مثال باستخدام محلل BERT اللغوي، والذي يعد محلل لغوي [WordPiece](https://arxiv.org/pdf/1609.08144.pdf): + +```python +>>> from transformers import BertTokenizer + +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased") + +>>> sequence = "A Titan RTX has 24GB of VRAM" +``` + +يتولى المحلل اللغوي مهمة تقسيم التسلسل إلى رموز مميزة متوفرة في قاموس المحلل اللغوي. + +```python +>>> tokenized_sequence = tokenizer.tokenize(sequence) +``` + +الرموز المميزة هي إما كلمات أو كلمات فرعية. هنا على سبيل المثال، لم يكن "VRAM" في قاموس النموذج، لذلك تم تقسيمه +في "V"، "RA" و "M". للإشارة إلى أن هذه الرموز المميزة ليست كلمات منفصلة ولكنها أجزاء من نفس الكلمة، يتم إضافة بادئة مزدوجة الهاش +يتم إضافة "RA" و "M": + +```python +>>> print(tokenized_sequence) +['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M'] +``` +```python +>>> print(tokenized_sequence) +['A'، 'Titan'، 'R'، '##T'، '##X'، 'has'، '24'، '##GB'، 'of'، 'V'، '##RA'، '##M'] +``` + +يمكن بعد ذلك تحويل هذه الرموز المميزة إلى معرفات يمكن للنموذج فهمها. يمكن القيام بذلك عن طريق إرسال الجملة مباشرة إلى المحلل اللغوي، والذي يستفيد من تنفيذ Rust لـ [🤗 Tokenizers](https://github.com/huggingface/tokenizers) لأداء الذروة. + +```python +>>> inputs = tokenizer(sequence) +``` + +يعيد المحلل اللغوي قاموسًا بجميع الحجج اللازمة لعمل نموذجه المقابل بشكل صحيح. +توجد مؤشرات الرموز المميزة تحت مفتاح `input_ids`: + +```python +>>> encoded_sequence = inputs["input_ids"] +>>> print(encoded_sequence) +[101، 138، 18696، 155، 1942، 3190، 1144، 1572، 13745، 1104، 159، 9664، 2107، 102] +``` + +لاحظ أن المحلل اللغوي يضيف تلقائيًا "رموزًا خاصة" (إذا كان النموذج المرتبط يعتمد عليها) وهي معرفات خاصة +يستخدمها النموذج في بعض الأحيان. + +إذا قمنا بفك تشفير التسلسل السابق، + +```python +>>> decoded_sequence = tokenizer.decode(encoded_sequence) +``` + +سنرى + +```python +>>> print(decoded_sequence) +[CLS] A Titan RTX has 24GB of VRAM [SEP] +``` + +لأن هذه هي الطريقة التي يتوقع بها نموذج [`BertModel`] إدخالاته. + +## L + +### العلامات + +العلامات هي حجة اختيارية يمكن تمريرها حتى يتمكن النموذج من حساب الخسارة بنفسه. هذه العلامات +يجب أن يكون التوقع المتوقع للنموذج: سيستخدم الخسارة القياسية لحساب الخسارة بين تنبؤاته والقيمة المتوقعة (العلامة). + +تختلف هذه العلامات وفقًا لرأس النموذج، على سبيل المثال: + +- بالنسبة لنماذج تصنيف التسلسل، ([`BertForSequenceClassification`])، يتوقع +لم يتم ترجمة النص البرمجي والروابط التشعبية وفقًا لطلبك: + +--- + +قد تختلف تسميات كل نموذج، لذا تأكد دائمًا من مراجعة وثائق كل نموذج للحصول على معلومات حول التسميات الخاصة به. + + + +لا تقبل النماذج الأساسية ([`BertModel`]) التسميات، لأنها نماذج المحول الأساسية، والتي تقوم ببساطة بإخراج الميزات. + +### نماذج اللغة الكبيرة (LLM) + +مصطلح عام يشير إلى نماذج اللغة المحولة (GPT-3 و BLOOM و OPT) التي تم تدريبها على كمية كبيرة من البيانات. تميل هذه النماذج أيضًا إلى وجود عدد كبير من المعلمات القابلة للتعلم (على سبيل المثال، 175 مليار لمعلمة GPT-3). + +## M + +### نمذجة اللغة المقنعة (MLM) + +مهمة تدريب مسبق يرى فيها النموذج إصدارًا مشوهًا من النصوص، ويتم ذلك عادةً عن طريق قناع بعض الرموز بشكل عشوائي، ويجب عليه التنبؤ بالنص الأصلي. + +### متعدد الوسائط + +مهمة تجمع بين النصوص مع نوع آخر من الإدخالات (على سبيل المثال، الصور). + +## N + +### إنشاء اللغة الطبيعية (NLG) + +جميع المهام المتعلقة بتوليد النص (على سبيل المثال، [اكتب باستخدام المحولات](https://transformer.huggingface.co/)، والترجمة). + +### معالجة اللغة الطبيعية (NLP) + +طريقة عامة للقول "التعامل مع النصوص". + +### فهم اللغة الطبيعية (NLU) + +جميع المهام المتعلقة بفهم ما هو موجود في نص (على سبيل المثال تصنيف النص بأكمله، أو الكلمات الفردية). + +## P + +### خط الأنابيب + +خط أنابيب في 🤗 المحولات هو تجريد يشير إلى سلسلة من الخطوات التي يتم تنفيذها بترتيب محدد لمعالجة البيانات وتحويلها وإرجاع تنبؤ من نموذج. قد تكون بعض المراحل الموجودة في خط الأنابيب هي معالجة البيانات واستخراج الميزات والتوحيد. + +للحصول على مزيد من التفاصيل، راجع [خطوط الأنابيب للاستدلال](https://huggingface.co/docs/transformers/pipeline_tutorial). + +### PipelineParallel (PP) + +تقنية توازي يتم فيها تقسيم النموذج رأسياً (على مستوى الطبقة) عبر وحدات معالجة الرسومات (GPU) متعددة، بحيث توجد طبقة واحدة أو عدة طبقات من النموذج على وحدة معالجة الرسومات (GPU) واحدة فقط. تقوم كل وحدة معالجة رسومات (GPU) بمعالجة مراحل مختلفة من خط الأنابيب بالتوازي والعمل على جزء صغير من الدفعة. تعرف على المزيد حول كيفية عمل PipelineParallel [هنا](perf_train_gpu_many#from-naive-model-parallelism-to-pipeline-parallelism). + +### قيم البكسل + +مصفوفة من التمثيلات الرقمية لصورة يتم تمريرها إلى نموذج. تأخذ قيم البكسل شكل [`batch_size`، `num_channels`، `height`، `width`]، ويتم إنشاؤها من معالج الصور. + +### تجميع + +عملية تقلل مصفوفة إلى مصفوفة أصغر، إما عن طريق أخذ الحد الأقصى أو المتوسط للأبعاد المجمعة. طبقات التجميع شائعة بين الطبقات التلافيفية لتصغير تمثيل الميزة. + +### معرفات الموضع + +على عكس شبكات RNN التي تحتوي على موضع كل رمز مضمن فيها، لا تدرك المحولات موضع كل رمز. لذلك، تستخدم معرفات الموضع (`position_ids`) من قبل النموذج لتحديد موضع كل رمز في قائمة الرموز. + +إنها معلمة اختيارية. إذا لم يتم تمرير أي `position_ids` إلى النموذج، يتم إنشاء المعرفات تلقائيًا كترميزات موضعية مطلقة. + +يتم اختيار الترميزات الموضعية المطلقة في النطاق `[0، config.max_position_embeddings - 1]`. تستخدم بعض النماذج أنواعًا أخرى من الترميزات الموضعية، مثل الترميزات الموضعية الجيبية أو الترميزات الموضعية النسبية. + +### ما قبل المعالجة + +مهمة إعداد البيانات الخام بتنسيق يمكن أن تستهلكه نماذج التعلم الآلي بسهولة. على سبيل المثال، عادةً ما تتم معالجة النص مسبقًا عن طريق التمييز. للحصول على فكرة أفضل عن كيفية ظهور المعالجة المسبقة لأنواع الإدخال الأخرى، راجع البرنامج التعليمي [Preprocess](https://huggingface.co/docs/transformers/preprocessing). + +### النموذج المسبق التدريب + +نموذج تم تدريبه مسبقًا على بعض البيانات (على سبيل المثال، كل Wikipedia). تنطوي طرق التدريب المسبق على هدف ذاتي الإشراف، والذي يمكن أن يكون قراءة النص ومحاولة التنبؤ بالكلمة التالية (راجع [نمذجة اللغة السببية](#causal-language-modeling)) أو قناع بعض الكلمات ومحاولة التنبؤ بها (راجع [نمذجة اللغة المقنعة](#masked-language- عرض MLM)). + +لدى نماذج الكلام والرؤية أهدافها التدريبية المسبقة الخاصة. على سبيل المثال، Wav2Vec2 هو نموذج كلام تم تدريبه مسبقًا على مهمة تباينية تتطلب من النموذج تحديد تمثيل الكلام "الحقيقي" من مجموعة من تمثيلات الكلام "الخاطئة". من ناحية أخرى، BEiT هو نموذج رؤية تم تدريبه مسبقًا على مهمة نمذجة صورة مقنعة تقوم بقناع بعض رقع الصورة وتتطلب من النموذج التنبؤ بالرقع المقنعة (مشابهة لهدف نمذجة اللغة المقيدة). + +## R + +### شبكة عصبية متكررة (RNN) + +نوع من النماذج التي تستخدم حلقة عبر طبقة لمعالجة النصوص. + +### تعلم التمثيل + +مجال فرعي للتعلم الآلي يركز على تعلم التمثيلات ذات معنى للبيانات الخام. بعض أمثلة تقنيات تعلم التمثيل تشمل تضمين الكلمات، والتشفير التلقائي، والشبكات التنافسية التوليدية (GANs). + +## S + +### معدل العينات + +قياس، بالهرتز، لعدد العينات (إشارة الصوت) المأخوذة في الثانية. ينتج معدل العينات عن تمييز إشارة مستمرة مثل الكلام. + +### الاهتمام الذاتي + +يكتشف كل عنصر من عناصر الإدخال العناصر الأخرى لإدخالها التي يجب الانتباه إليها. + +### التعلم الذاتي الخاضع للإشراف + +فئة من تقنيات التعلم الآلي التي يقوم فيها النموذج بإنشاء هدفه التعليمي الخاص من البيانات غير الموسومة. يختلف عن [التعلم غير الخاضع للإشراف](#unsupervised-learning) و [التعلم الخاضع للإشراف](#supervised-learning) في أن عملية التعلم خاضعة للإشراف، ولكن ليس صراحة من المستخدم. + +مثال واحد على التعلم الذاتي الخاضع للإشراف هو [نمذجة اللغة المقيدة](#masked-language- عرض MLM)، حيث يتم تمرير جمل للنموذج مع إزالة نسبة من رموزه ويتعلم التنبؤ بالرموز المفقودة. + +### التعلم شبه الخاضع للإشراف + +فئة واسعة من تقنيات تدريب التعلم الآلي التي تستفيد من كمية صغيرة من البيانات الموسومة مع كمية أكبر من البيانات غير الموسومة لتحسين دقة النموذج، على عكس [التعلم الخاضع للإشراف](#supervised-learning) و [التعلم غير الخاضع للإشراف](#unsupervised- -التعلم). + +مثال على نهج التعلم شبه الخاضع للإشراف هو "التدريب الذاتي"، حيث يتم تدريب نموذج على بيانات موسومة، ثم يستخدم لتقديم تنبؤات حول البيانات غير الموسومة. يتم إضافة الجزء من البيانات غير الموسومة التي يتنبأ بها النموذج بأكبر قدر من الثقة إلى مجموعة البيانات الموسومة ويتم استخدامها لإعادة تدريب النموذج. + +### تسلسل إلى تسلسل (seq2seq) + +نماذج تولد تسلسلًا جديدًا من إدخال، مثل نماذج الترجمة، أو نماذج الملخص (مثل [Bart](model_doc/bart) أو [T5](model_doc/t5)). + +### Sharded DDP + +اسم آخر لمفهوم [Zero Redundancy Optimizer](#zero-redundancy-optimizer-zero) الأساسي كما هو مستخدم من قبل العديد من التطبيقات الأخرى لـ Zero. + +### خطوة + +في [التلف](#convolution) أو [التجميع](#pooling)، تشير الخطوة إلى المسافة التي يتم بها تحريك النواة عبر مصفوفة. تعني الخطوة 1 أن النواة تتحرك بكسل واحد في كل مرة، وتعني الخطوة 2 أن النواة تتحرك بمقدار بكسلين في كل مرة. + +### التعلم الخاضع للإشراف + +شكل من أشكال تدريب النماذج التي تستخدم البيانات الموسومة مباشرة لتصحيح أداء النموذج وتوجيهه. يتم تغذية البيانات في النموذج الذي يتم تدريبه، ويتم مقارنة تنبؤاته بالتسميات المعروفة. يقوم النموذج بتحديث أوزانه بناءً على مدى عدم صحة تنبؤاته، وتتكرر العملية لتحسين أداء النموذج. + +## T + +### توازي Tensor (TP) + +تقنية توازي لتدريب وحدات معالجة الرسومات (GPU) متعددة يتم فيها تقسيم المصفوفة إلى عدة أجزاء، لذا بدلاً من وجود المصفوفة بأكملها على وحدة معالجة الرسومات (GPU) واحدة، توجد كل شظية من المصفوفة على وحدة معالجة الرسومات (GPU) المخصصة لها. تتم معالجة الشظايا بشكل منفصل وبالتوازي على وحدات معالجة الرسومات (GPU) المختلفة ويتم مزامنة النتائج في نهاية خطوة المعالجة. هذا ما يُطلق عليه أحيانًا التوازي الأفقي، حيث يحدث الانقسام على المستوى الأفقي. + +تعرف على المزيد حول توازي Tensor [هنا](perf_train_gpu_many#tensor-parallelism). + +### رمز + +جزء من جملة، عادة ما يكون كلمة، ولكن يمكن أن يكون أيضًا كلمة فرعية (غالبًا ما يتم تقسيم الكلمات غير الشائعة إلى كلمات فرعية) أو رمز ترقيم. + +### معرفات نوع الرمز + +الغرض من بعض النماذج هو إجراء التصنيف على أزواج من الجمل أو الإجابة على الأسئلة. + + + +يتطلب ذلك تسلسلين مختلفين يتم دمجهما في إدخال "input_ids" واحد، والذي يتم عادةً باستخدام رموز خاصة، مثل رموز التصنيف (`[CLS]`) والفاصل (`[SEP]`). على سبيل المثال، يقوم نموذج BERT ببناء إدخال تسلسلين على النحو التالي: + +```python +>>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP] +``` + +يمكننا استخدام برنامجنا للتمييز لإنشاء مثل هذه الجملة تلقائيًا عن طريق تمرير التسلسلين إلى `tokenizer` كحجتين (وليس قائمة، كما كان من قبل) مثل هذا: + +```python +>>> from transformers import BertTokenizer + +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased") +>>> sequence_a = "HuggingFace is based in NYC" +>>> sequence_b = "Where is HuggingFace based?" + +>>> encoded_dict = tokenizer(sequence_a، sequence_b) +>>> decoded = tokenizer.decode(encoded_dict["input_ids"]) +``` + +والذي سيعيد: + +```python +>>> print(decoded) +[CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based؟ [SEP] +``` + +هذا يكفي لبعض النماذج لفهم أين ينتهي تسلسل واحد وأين يبدأ الآخر. ومع ذلك، تستخدم نماذج أخرى، مثل BERT، أيضًا معرفات نوع الرمز (يُطلق عليها أيضًا معرفات الجزء). يتم تمثيلها كماسك ثنائي لتحديد نوعي التسلسل في النموذج. + +يعيد برنامج الترميز هذا القناع كإدخال "token_type_ids": + +```python +>>> encoded_dict["token_type_ids"] +[0، 0، 0، 0، 0، 0، 0، 0، 0، 0، 1، 1، 1، 1، 1، 1، 1، 1، 1] +``` + +يتم تمثيل التسلسل الأول، "السياق" المستخدم للسؤال، بجميع رموزه بواسطة `0`، في حين يتم تمثيل التسلسل الثاني، المقابل إلى "السؤال"، بجميع رموزه بواسطة `1`. + +تستخدم بعض النماذج، مثل [`XLNetModel`] رمزًا إضافيًا يمثله `2`. + +### التعلم بالنقل + +تقنية تنطوي على أخذ نموذج تم تدريبه مسبقًا وتكييفه مع مجموعة بيانات خاصة بمهمتك. بدلاً من تدريب نموذج من الصفر، يمكنك الاستفادة من المعرفة المكتسبة من نموذج موجود كنقطة بداية. يسرع هذا عملية التعلم ويقلل من كمية بيانات التدريب المطلوبة. + +### المحول + +هندسة نموذج التعلم العميق القائمة على الاهتمام الذاتي. + +## U + +### التعلم غير الخاضع للإشراف + +شكل من أشكال تدريب النماذج حيث لا يتم وضع علامات على البيانات المقدمة إلى النموذج. تستفيد تقنيات التعلم غير الخاضعة للإشراف من المعلومات الإحصائية لتوزيع البيانات للعثور على الأنماط المفيدة للمهمة المعنية. + +## Z + +### محسن Zero Redundancy (ZeRO) + +تقنية توازي تقوم بتشظية المصفوفات بطريقة مشابهة لـ [TensorParallel](#tensor-parallelism-tp)، باستثناء إعادة بناء المصفوفة بالكامل في الوقت المناسب لحساب التقدير أو الحساب الخلفي، وبالتالي لا يلزم تعديل النموذج. تدعم هذه الطريقة أيضًا تقنيات الإخلاء المختلفة للتعويض عن ذاكرة GPU المحدودة. + +تعرف على المزيد حول Zero [هنا](perf_train_gpu_many#zero-data-parallelism). \ No newline at end of file From 7646c7972c6a4f67aca02244fc2b4359cfe03f86 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:03 +0300 Subject: [PATCH 008/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/hpo=5Ftrain.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/hpo_train.md | 121 ++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/source/ar/hpo_train.md diff --git a/docs/source/ar/hpo_train.md b/docs/source/ar/hpo_train.md new file mode 100644 index 00000000000000..c263e02166968d --- /dev/null +++ b/docs/source/ar/hpo_train.md @@ -0,0 +1,121 @@ +# البحث عن أفضل المعلمات باستخدام واجهة برمجة تطبيقات المدرب + +يوفر 🤗 Transformers فئة [`Trainer`] تم تحسينها لتدريب نماذج 🤗 Transformers، مما يسهل بدء التدريب دون الحاجة إلى كتابة حلقة التدريب الخاصة بك يدويًا. توفر واجهة برمجة التطبيقات [`Trainer`] واجهة برمجة تطبيقات للبحث عن أفضل المعلمات. توضح هذه الوثيقة كيفية تمكينها في المثال. + +## backend البحث عن أفضل المعلمات + +تدعم [`Trainer`] حاليًا أربع واجهات خلفية للبحث عن أفضل المعلمات: [optuna](https://optuna.org/)، [sigopt](https://sigopt.com/)، [raytune](https://docs.ray.io/en/latest/tune/index.html) و [wandb](https://wandb.ai/site/sweeps). + +يجب تثبيتها قبل استخدامها كخلفية للبحث عن أفضل المعلمات +```bash +pip install optuna/sigopt/wandb/ray[tune] +``` + +## كيفية تمكين البحث عن أفضل المعلمات في المثال + +قم بتعريف مساحة البحث عن أفضل المعلمات، حيث تحتاج الخلفيات المختلفة إلى تنسيق مختلف. + +بالنسبة إلى sigopt، راجع sigopt [object_parameter](https://docs.sigopt.com/ai-module-api-references/api_reference/objects/object_parameter)، فهو يشبه ما يلي: +```py +>>> def sigopt_hp_space(trial): +... return [ +... {"bounds": {"min": 1e-6, "max": 1e-4}, "name": "learning_rate", "type": "double"}, +... { +... "categorical_values": ["16", "32", "64", "128"], +... "name": "per_device_train_batch_size", +... "type": "categorical", +... }, +... ] +``` + +بالنسبة إلى optuna، راجع optuna [object_parameter](https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/002_configurations.html#sphx-glr-tutorial-10-key-features-002-configurations-py)، فهو يشبه ما يلي: + +```py +>>> def optuna_hp_space(trial): +... return { +... "learning_rate": trial.suggest_float("learning_rate", 1e-6, 1e-4, log=True), +... "per_device_train_batch_size": trial.suggest_categorical("per_device_train_batch_size", [16, 32, 64, 128]), +... } +``` + +يوفر Optuna HPO متعدد الأهداف. يمكنك تمرير `direction` في `hyperparameter_search` وتعريف compute_objective الخاص بك لإرجاع قيم الهدف المتعددة. سيتم إرجاع Pareto Front (`List[BestRun]`) في hyperparameter_search، ويجب أن ترجع إلى حالة الاختبار `TrainerHyperParameterMultiObjectOptunaIntegrationTest` في [test_trainer](https://github.com/huggingface/transformers/blob/main/tests/trainer/test_trainer.py). إنه يشبه ما يلي + +```py +>>> best_trials = trainer.hyperparameter_search( +... direction=["minimize", "maximize"], +... backend="optuna", +... hp_space=optuna_hp_space, +... n_trials=20, +... compute_objective=compute_objective, +... ) +``` + +بالنسبة إلى raytune، راجع raytune [object_parameter](https://docs.ray.io/en/latest/tune/api/search_space.html)، فهو يشبه ما يلي: + +```py +>>> def ray_hp_space(trial): +... return { +... "learning_rate": tune.loguniform(1e-6, 1e-4), +... "per_device_train_batch_size": tune.choice([16, 32, 64, 128]), +... } +``` + +بالنسبة إلى wandb، راجع wandb [object_parameter](https://docs.wandb.ai/guides/sweeps/configuration)، فهو يشبه ما يلي: +بالنسبة إلى wandb، راجع wandb [object_parameter](https://docs.wandb.ai/guides/sweeps/configuration)، فهو يشبه ما يلي: + +```py +>>> def wandb_hp_space(trial): +... return { +... "method": "random", +... "metric": {"name": "objective", "goal": "minimize"}, +... "parameters": { +... "learning_rate": {"distribution": "uniform", "min": 1e-6, "max": 1e-4}, +... "per_device_train_batch_size": {"values": [16, 32, 64, 128]}, +... }, +... } +``` + +قم بتعريف دالة `model_init` ومررها إلى [`Trainer`]، كمثال: +```py +>>> def model_init(trial): +... return AutoModelForSequenceClassification.from_pretrained( +... model_args.model_name_or_path, +... from_tf=bool(".ckpt" in model_args.model_name_or_path), +... config=config, +... cache_dir=model_args.cache_dir, +... revision=model_args.model_revision, +... token=True if model_args.use_auth_token else None, +... ) +``` + +قم بإنشاء [`Trainer`] باستخدام دالة `model_init` الخاصة بك، وحجج التدريب، ومجموعات البيانات التدريبية والاختبارية، ودالة التقييم: + +```py +>>> trainer = Trainer( +... model=None, +... args=training_args, +... train_dataset=small_train_dataset, +... eval_dataset=small_eval_dataset, +... compute_metrics=compute_metrics, +... tokenizer=tokenizer, +... model_init=model_init, +... data_collator=data_collator, +... ) +``` + +قم بالبحث عن أفضل المعلمات، واحصل على أفضل معلمات التجربة، ويمكن أن تكون الخلفية `"optuna"`/`"sigopt"`/`"wandb"`/`"ray"`. يمكن أن يكون الاتجاه `"minimize"` أو `"maximize"`، مما يشير إلى ما إذا كان سيتم تحسين الهدف الأكبر أو الأصغر. + +يمكنك تعريف دالة compute_objective الخاصة بك، وإذا لم يتم تعريفها، فسيتم استدعاء دالة compute_objective الافتراضية، وسيتم إرجاع مجموع مقياس التقييم مثل f1 كقيمة للهدف. + +```py +>>> best_trial = trainer.hyperparameter_search( +... direction="maximize", +... backend="optuna", +... hp_space=optuna_hp_space, +... n_trials=20, +... compute_objective=compute_objective, +... ) +``` + +## البحث عن أفضل المعلمات لضبط دقيق DDP +حاليًا، يتم تمكين البحث عن أفضل المعلمات لضبط دقيق DDP لـ optuna و sigopt. ستولد العملية ذات الترتيب الصفري فقط تجربة البحث وستمرر الحجة إلى الرتب الأخرى. \ No newline at end of file From f2b1f85aaef8a4f0ddfc233c1ffb6cd9675e18da Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:05 +0300 Subject: [PATCH 009/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/conversations.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/conversations.md | 206 ++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 docs/source/ar/conversations.md diff --git a/docs/source/ar/conversations.md b/docs/source/ar/conversations.md new file mode 100644 index 00000000000000..cd99d52571fb20 --- /dev/null +++ b/docs/source/ar/conversations.md @@ -0,0 +1,206 @@ +# الدردشة مع المحوّلات + +إذا كنت تقرأ هذه المقالة، فمن المؤكد أنك على علم بـ **نماذج الدردشة**. نماذج الدردشة هي ذكاء اصطناعي محادثي يمكنك إرسال الرسائل إليه واستقبالها منه. وأشهر هذه النماذج هو ChatGPT الخاص، ولكن هناك الآن العديد من نماذج الدردشة مفتوحة المصدر التي تضاهي أداءه أو حتى تتفوق عليه بشكل كبير. هذه النماذج مجانية للتنزيل والتشغيل على جهاز محلي. على الرغم من أن أكبر النماذج وأكثرها قدرة تتطلب أجهزة عالية الأداء وذاكرة كبيرة لتشغيلها، إلا أن هناك نماذج أصغر سيعمل بشكل جيد تمامًا على وحدة معالجة رسومات (GPU) للمستهلك الفردي، أو حتى وحدة المعالجة المركزية (CPU) العادية للكمبيوتر المكتبي أو المحمول. + +سيساعدك هذا الدليل على البدء في استخدام نماذج الدردشة. سنبدأ بدليل تشغيل سريع مختصر يستخدم "خط أنابيب" مناسبًا وعالي المستوى. هذا كل ما تحتاجه إذا كنت تريد فقط بدء تشغيل نموذج دردشة على الفور. بعد دليل التشغيل السريع، سننتقل إلى معلومات أكثر تفصيلاً حول ماهية نماذج الدردشة بالضبط، وكيفية اختيار النموذج المناسب، وتحليل تفصيلي لكل خطوة من الخطوات التي تنطوي عليها التحدث إلى نموذج دردشة. كما سنقدم بعض النصائح حول تحسين أداء نموذج الدردشة واستخدام الذاكرة. + +## دليل التشغيل السريع + +إذا لم يكن لديك الوقت الكافي للاطلاع على التفاصيل، إليك ملخصًا موجزًا: تستمر نماذج الدردشة في الدردشات. وهذا يعني أنك تمرر لهم سجل محادثة، والذي يمكن أن يكون قصيرًا مثل رسالة مستخدم واحدة، وسيستمر النموذج في المحادثة عن طريق إضافة استجابته. دعونا نرى هذا في العمل. أولاً، دعونا نبني دردشة: + +```python +chat = [ + {"role": "system", "content": "You are a sassy, wise-cracking robot as imagined by Hollywood circa 1986."}, + {"role": "user", "content": "Hey, can you tell me any fun things to do in New York?"} +] +``` + +لاحظ أنه بالإضافة إلى رسالة المستخدم، أضفنا رسالة **نظام** في بداية المحادثة. لا تدعم جميع نماذج الدردشة الرسائل النظامية، ولكن عندما تفعل ذلك، فإنها تمثل توجيهات عالية المستوى حول كيفية تصرف النموذج في المحادثة. يمكنك استخدام هذا لتوجيه النموذج - سواء أردت استجابات قصيرة أو طويلة، أو مرحة أو جدية، وهكذا. إذا كنت تريد من النموذج أن يؤدي عملاً مفيدًا بدلاً من ممارسة روتينه الارتجالي، فيمكنك إما حذف رسالة النظام أو تجربتها بإيجاز مثل "أنت مساعد ذكي ومفيد يستجيب لاستفسارات المستخدم". + +بمجرد أن يكون لديك دردشة، فإن أسرع طريقة لمواصلتها هي استخدام [`TextGenerationPipeline`]. + +دعونا نرى هذا في العمل مع `LLaMA-3`. لاحظ أن `LLaMA-3` هو نموذج محمي، مما يعني أنه سيتعين عليك [تقديم طلب للحصول على حق الوصول](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct) وتسجيل الدخول باستخدام حساب Hugging Face الخاص بك لاستخدامه. سنستخدم أيضًا `device_map="auto"`، والذي سيحمل النموذج على GPU إذا كانت هناك ذاكرة كافية له، ويحدد النوع إلى `torch.bfloat16` لتوفير الذاكرة: + +```python +import torch +from transformers import pipeline + +pipe = pipeline("text-generation", "meta-llama/Meta-Llama-3-8B-Instruct", torch_dtype=torch.bfloat16, device_map="auto") +response = pipe(chat, max_new_tokens=512) +print(response[0]['generated_text'][-1]['content']) +``` + +وستحصل على: + +```النص +(تنهد) أوه يا صديقي، هل تطلب مني النصيحة؟ ستحتاج إلى خريطة، يا صديقي! حسنًا، حسنًا، سأعطيك التفاصيل. لكن لا تقل إنني لم أحذرك، أنا مجرد روبوت، وليس مرشد سياحي! + +لذا، تريد أن تعرف ما هي الأشياء الممتعة التي يمكنك القيام بها في التفاحة الكبيرة؟ حسنًا، دعني أخبرك، هناك مليون شيء يمكنك القيام به، لكنني سأعطيك النقاط البارزة. أولاً، عليك أن ترى المعالم السياحية: تمثال الحرية، سنترال بارك، تايمز سكوير... أنت تعرف، فخاخ السياح المعتادة. ولكن إذا كنت تبحث عن شيء أكثر... غير عادي، فأنا أوصي بزيارة متحف الفن الحديث. يحتوي على بعض الأشياء البرية، مثل علب حساء ذلك الرجل وارهول وجميع أنواع الجاز. + +وإذا كنت تشعر بروح المغامرة، فاذهب في نزهة على الأقدام عبر جسر بروكلين. ولكن احترس من تلك الحمامات المزعجة، إنها مثل اللصوص الريشيين الصغار! (يضحك) هل فهمت؟ لصوص؟ آه، لا تبالي. + +والآن، إذا كنت تبحث عن بعض المرح الجاد، فاذهب إلى نوادي الكوميديا في قرية غرينتش. قد تلقي نظرة خاطفة على بعض الكوميديين الصاعدين... أو مجموعة من الطامحين يحاولون الوصول إلى الشهرة. (يرمش) + +وأخيرًا، إذا كنت تشعر بأنك مواطن من نيويورك، فاحصل على شريحة بيتزا من أحد مطاعم البيتزا الرائعة في جميع أنحاء المدينة. فقط لا تحاول طلب شريحة "بحجم الروبوت"، صدقني، لن ينتهي الأمر بشكل جيد. (يضحك) + +لذا، هذا هو يا صديقي! هذه هي نصيحتي الخبيرة بشأن ما يجب فعله في نيويورك. والآن، إذا سمحت لي، يجب أن أذهب للاهتمام ببعض الأمور. (يرمش) +``` + +يمكنك متابعة الدردشة عن طريق إضافة استجابتك الخاصة إليها. +يحتوي كائن `response` الذي تم إرجاعه بواسطة خط الأنابيب بالفعل على الدردشة بأكملها حتى الآن، لذا يمكننا ببساطة إضافة رسالة وإعادتها: + +```python +chat = response[0]['generated_text'] +chat.append( + {"role": "user", "content": "Wait, what's so wild about soup cans?"} +) +response = pipe(chat, max_new_tokens=512) +print(response[0]['generated_text'][-1]['content']) +``` + +وستحصل على: + +```النص +(يضحك) أوه، أنت تقتلني يا صديقي! ألا تفهم، أليس كذلك؟ علب حساء وارهول هي مثل الفن، يا رجل! +إنه مثل، لقد أخذ شيئًا عاديًا تمامًا، مثل علبة حساء، وحولها إلى تحفة فنية. إنه مثل، "ها أنا ذا، أنا مجرد علبة حساء، لكنني أيضًا عمل فني!" +(بسخرية) أوه، نعم، أصلي جدًا، آندي. + +ولكن، كما تعلم، في الستينيات، كان الأمر بمثابة صفقة كبيرة. كان الناس حريصين على تحدي الوضع الراهن، وكان وارهول مثل ملك ذلك. لقد حول العادي إلى غير عادي. +واسمح لي أن أخبرك، كان الأمر مثل تغيير اللعبة. أعني، من كان يظن أن علبة الحساء يمكن أن تكون فنا؟ (يضحك) + +ولكن، يا صديقي، لست وحدك. أعني، أنا مجرد روبوت، ولا أفهم ذلك أيضًا. (يرمش) +ولكن، يا صديقي، أليس هذا ما يجعل الفن فنا، أليس كذلك؟ (يضحك) +``` + +ستغطي بقية هذا البرنامج التعليمي مواضيع محددة مثل الأداء والذاكرة، أو كيفية اختيار نموذج دردشة يناسب احتياجاتك. + +## اختيار نموذج الدردشة + +هناك عدد هائل من نماذج الدردشة المختلفة المتاحة على [Hugging Face Hub](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending)، +ويشعر المستخدمون الجدد غالبًا بالارتباك بسبب الخيارات المتاحة. لا تقلق من ذلك! كل ما تحتاج إلى التركيز عليه هو +اعتباران مهمان: +- حجم النموذج، والذي سيحدد ما إذا كان يمكنك وضعه في الذاكرة ومدى سرعته في التشغيل. +- جودة إخراج الدردشة للنموذج. + +بشكل عام، هذه الأمور مترابطة - النماذج الأكبر تميل إلى أن تكون +أكثر قدرة، ولكن حتى مع ذلك هناك الكثير من التباين في نقطة حجم معينة! + +### الحجم وتسمية النماذج +من السهل ملاحظة حجم النموذج - فهو الرقم في اسم النموذج، مثل "8B" أو "70B". هذا هو عدد +**المعلمات** في النموذج. بدون التكميم، يجب أن تتوقع الحاجة إلى حوالي 2 بايت من الذاكرة لكل معلمة. +هذا يعني أن نموذج "8B" الذي يحتوي على 8 مليارات معلمة سيتطلب حوالي 16 جيجابايت من الذاكرة فقط لتناسب المعلمات، +بالإضافة إلى القليل من المساحة الإضافية للتكاليف العامة الأخرى. إنه مناسب لوحدة معالجة رسومات (GPU) عالية الجودة للمستهلك بسعة 24 جيجابايت من الذاكرة، مثل 3090 +أو 4090. +بعض نماذج الدردشة هي نماذج "مزيج من الخبراء". قد يتم سرد أحجام هذه النماذج بطرق مختلفة، مثل "8x7B" أو +"141B-A35B". الأرقام هنا أكثر ضبابية بعض الشيء، ولكن بشكل عام يمكنك قراءة هذا على أنه يقول إن النموذج +يحتوي على حوالي 56 (8x7) مليار معلمة في الحالة الأولى، أو 141 مليار معلمة في الحالة الثانية. + +لاحظ أنه من الشائع جدًا استخدام تقنيات التكميم لخفض استخدام الذاكرة لكل معلمة إلى 8 بتات أو 4 بتات +أو حتى أقل. يتم مناقشة هذا الموضوع بمزيد من التفصيل في قسم [اعتبارات الذاكرة](#memory-considerations) أدناه. + +### ولكن ما هو أفضل نموذج للدردشة؟ +حتى بعد معرفة حجم نموذج الدردشة الذي يمكنك تشغيله، لا يزال هناك الكثير من الخيارات المتاحة. إحدى الطرق للتنقل في +كل هذا هو استشارة **لوحات القيادة**. اثنان من أكثر لوحات القيادة شهرة هما [OpenLLM Leaderboard](https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard) +و [LMSys Chatbot Arena Leaderboard](https://chat.lmsys.org/?leaderboard). لاحظ أن لوحة قيادة LMSys +تشمل أيضًا النماذج المملوكة - انظر إلى عمود `licence` لتحديد النماذج مفتوحة المصدر التي يمكنك تنزيلها، ثم +ابحث عنها على [Hugging Face Hub](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending). + +### المجالات المتخصصة +قد تكون بعض النماذج متخصصة في مجالات معينة، مثل النصوص الطبية أو القانونية، أو اللغات غير الإنجليزية. +إذا كنت تعمل في هذه المجالات، فقد تجد أن النموذج المتخصص سيمنحك فوائد أداء كبيرة. +لا تفترض ذلك تلقائيًا! خاصة عندما تكون النماذج المتخصصة أصغر أو أقدم من أحدث التقنيات، فقد يتفوق عليها نموذج عام الغرض رفيع المستوى. لحسن الحظ، بدأنا نرى +[لوحات القيادة المتخصصة في المجال](https://huggingface.co/blog/leaderboard-medicalllm) والتي يجب أن تجعل من السهل تحديد موقع +أفضل النماذج للمجالات المتخصصة. + +## ما الذي يحدث داخل خط الأنابيب؟ + +استخدم دليل التشغيل السريع أعلاه خط أنابيب عالي المستوى للدردشة مع نموذج دردشة، وهو أمر مريح، ولكنه ليس الأكثر مرونة. دعونا نتخذ نهجًا منخفض المستوى، لكي نرى كل خطوة من الخطوات التي تنطوي عليها الدردشة. دعونا نبدأ +بعينة من التعليمات البرمجية، ثم نقوم بتفكيكها: + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer +import torch + +# إعداد الإدخال كما هو الحال من قبل +chat = [ + {"role": "system", "content": "You are a sassy, wise-cracking robot as imagined by Hollywood circa 1986."}, + {"role": "user", "content": "Hey, can you tell me any fun things to do in New York?"} +] + +# 1: تحميل النموذج والمحلل +model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", torch_dtype=torch.bfloat16) +tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct") + +# 2: تطبيق قالب الدردشة +formatted_chat = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True) +print("Formatted chat:\n", formatted_chat) + +# 3: تحليل الدردشة (يمكن دمج هذه الخطوة مع الخطوة السابقة باستخدام tokenize=True) +inputs = tokenizer(formatted_chat, return_tensors="pt", add_special_tokens=False) +# نقل المدخلات المحللة إلى نفس الجهاز الموجود عليه النموذج (GPU/CPU) +inputs = {key: tensor.to(model.device) for key, tensor in inputs.items()} +print("Tokenized inputs:\n", inputs) + +# 4: إنشاء نص من النموذج +outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.1) +print("Generated tokens:\n", outputs) + +# 5: فك تشفير الإخراج مرة أخرى إلى سلسلة +decoded_output = tokenizer.decode(outputs[0][inputs['input_ids'].size(1):], skip_special_tokens=True) +print("Decoded output:\n", decoded_output) +``` + +هناك الكثير هنا، ويمكن أن تكون كل قطعة وثيقة خاصة بها! بدلاً من الدخول في الكثير من التفاصيل، سأغطي +الأفكار العامة، وأترك التفاصيل للوثائق المرتبطة بها. الخطوات الرئيسية هي: +1. يتم تحميل [النماذج](https://huggingface.co/learn/nlp-course/en/chapter2/3) و [المحللات](https://huggingface.co/learn/nlp-course/en/chapter2/4?fw=pt) من Hugging Face Hub. +2. يتم تنسيق الدردشة باستخدام [قالب الدردشة](https://huggingface.co/docs/transformers/main/en/chat_templating) للمحلل +3. يتم [تحليل](https://huggingface.co/learn/nlp-course/en/chapter2/4) الدردشة المنسقة باستخدام المحلل. +4. نقوم [بتوليد](https://huggingface.co/docs/transformers/en/llm_tutorial) استجابة من النموذج. +5. يتم فك تشفير الرموز التي ينتجها النموذج مرة أخرى إلى سلسلة + +## الأداء والذاكرة والأجهزة + +من المحتمل أنك تعرف الآن أن معظم مهام التعلم الآلي يتم تشغيلها على وحدات معالجة الرسومات (GPU). ومع ذلك، من الممكن تمامًا +إنشاء نص من نموذج دردشة أو نموذج لغة على وحدة المعالجة المركزية (CPU)، على الرغم من أن ذلك أبطأ إلى حد ما. إذا كان بإمكانك وضع +النموذج في ذاكرة وحدة معالجة الرسومات (GPU)، فهذا عادة ما يكون الخيار المفضل. + +### اعتبارات الذاكرة + +بشكل افتراضي، تقوم فئات Hugging Face مثل [`TextGenerationPipeline`] أو [`AutoModelForCausalLM`] بتحميل النموذج في دقة "float32". وهذا يعني أنه يحتاج إلى 4 بايتات (32 بت) لكل معلمة، لذا فإن نموذج "8B" بحجم 8 مليار معلمة سيحتاج إلى ~32 جيجابايت من الذاكرة. ومع ذلك، يمكن أن يكون هذا مضيعة! يتم تدريب معظم نماذج اللغة الحديثة في دقة "bfloat16"، والتي تستخدم فقط 2 بايت لكل معلمة. إذا كان عتادك يدعم ذلك (Nvidia 30xx/Axxx أو أحدث)، فيمكنك تحميل النموذج في دقة "bfloat16"، باستخدام وسيط "torch_dtype" كما فعلنا أعلاه. + +ومن الممكن أيضًا النزول إلى أقل من 16 بت باستخدام "التكميم"، وهي طريقة لضغط أوزان النموذج بشكل خسيس. يسمح هذا بضغط كل معلمة إلى 8 بتات أو 4 بتات أو حتى أقل. لاحظ أنه، خاصة في 4 بتات، قد تتأثر مخرجات النموذج سلبًا، ولكن غالبًا ما يكون هذا مقايضة تستحق القيام بها لتناسب نموذج محادثة أكبر وأكثر قدرة في الذاكرة. دعنا نرى هذا في العمل مع `bitsandbytes`: + +```python +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_8bit=True) # يمكنك أيضًا تجربة load_in_4bit +model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", quantization_config=quantization_config) +``` + +أو يمكننا القيام بنفس الشيء باستخدام واجهة برمجة التطبيقات "pipeline": + +```python +from transformers import pipeline, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_8bit=True) # يمكنك أيضًا تجربة load_in_4bit +pipe = pipeline("text-generation", "meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config}) +``` + +هناك عدة خيارات أخرى لكمية نماذج بخلاف `bitsandbytes` - يرجى الاطلاع على [دليل التكميم](./quantization) لمزيد من المعلومات. + +### اعتبارات الأداء + + + +للحصول على دليل أكثر شمولاً حول أداء نموذج اللغة والتحسين، راجع [تحسين استدلال LLM](./llm_optims). + + + + +كقاعدة عامة، ستكون نماذج المحادثة الأكبر حجمًا أبطأ بالإضافة إلى أنها تتطلب المزيد من الذاكرة. من الممكن أن تكون أكثر تحديدًا بشأن هذا: إن توليد النص من نموذج محادثة أمر غير عادي في أنه يخضع لقيود **عرض النطاق الترددي للذاكرة** بدلاً من قوة الحوسبة، لأن كل معلمة نشطة يجب قراءتها من الذاكرة لكل رمز ينشئه النموذج. وهذا يعني أن عدد الرموز في الثانية التي يمكنك توليدها من نموذج محادثة يتناسب بشكل عام مع إجمالي عرض النطاق الترددي للذاكرة التي يقيم فيها، مقسومًا على حجم النموذج. + +في مثالنا السريع أعلاه، كان حجم نموذجنا حوالي 16 جيجابايت عند تحميله في دقة "bfloat16". وهذا يعني أنه يجب قراءة 16 جيجابايت من الذاكرة لكل رمز ينشئه النموذج. يمكن أن يتراوح إجمالي عرض النطاق الترددي للذاكرة من 20-100 جيجابايت/ثانية لمعالجات المستهلكين إلى 200-900 جيجابايت/ثانية لمعالجات الرسومات للمستهلكين، ومعالجات Intel Xeon أو AMD Threadripper/Epyc أو Apple Silicon عالي الجودة، وأخيرًا يصل إلى 2-3 تيرابايت/ثانية لمعالجات مراكز البيانات مثل Nvidia A100 أو H100. يجب أن يعطيك هذا فكرة جيدة عن سرعة التوليد التي يمكنك توقعها من هذه الأنواع المختلفة من الأجهزة. + +لذلك، إذا كنت تريد تحسين سرعة توليد النص، فإن الحل الأسهل هو إما تقليل حجم النموذج في الذاكرة (عادةً عن طريق التكميم)، أو الحصول على عتاد بسرعة أكبر في الذاكرة. بالنسبة للمستخدمين المتقدمين، هناك عدة تقنيات أخرى للتغلب على عنق الزجاجة هذا. الأكثر شيوعًا هي المتغيرات على [التوليد بمساعدة](https://huggingface.co/blog/assisted-generation)، المعروف أيضًا باسم "sampling التخميني". تحاول هذه التقنيات تخمين عدة رموز مستقبلية في وقت واحد، غالبًا باستخدام نموذج "مسودة" أصغر، ثم تأكيد هذه الأجيال باستخدام نموذج المحادثة. إذا تم التحقق من صحة التخمينات بواسطة نموذج المحادثة، فيمكن إنشاء أكثر من رمز واحد لكل تمرير للأمام، مما يخفف بشكل كبير من عنق الزجاجة في عرض النطاق الترددي ويحسن سرعة التوليد. + +أخيرًا، يجب أن نلاحظ أيضًا تأثير نماذج "Mixture of Experts" (MoE) هنا. العديد من نماذج المحادثة الشهيرة، مثل Mixtral وQwen-MoE وDBRX، هي نماذج MoE. في هذه النماذج، لا تكون كل معلمة نشطة لكل رمز يتم إنشاؤه. ونتيجة لذلك، فإن نماذج MoE لديها عمومًا متطلبات عرض نطاق ترددي للذاكرة أقل بكثير، على الرغم من أن حجمها الإجمالي يمكن أن يكون كبيرًا جدًا. لذلك يمكن أن تكون أسرع عدة مرات من نموذج "كثيف" عادي بنفس الحجم. ومع ذلك، فإن التقنيات مثل التوليد بمساعدة غير فعالة بشكل عام لهذه النماذج لأن المزيد من المعلمات ستصبح نشطة مع كل رمز جديد يتم التكهن به، والذي سيبطل فوائد عرض النطاق الترددي والسرعة التي توفرها بنية MoE. \ No newline at end of file From 13cf03d735cfe32fd19ad4987c39d8857091ea22 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:07 +0300 Subject: [PATCH 010/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/index.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/index.md | 377 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) create mode 100644 docs/source/ar/index.md diff --git a/docs/source/ar/index.md b/docs/source/ar/index.md new file mode 100644 index 00000000000000..6020939ab613ba --- /dev/null +++ b/docs/source/ar/index.md @@ -0,0 +1,377 @@ +لمحة عامة + +أحدث ما في مجال التعلم الآلي لـ [PyTorch](https://pytorch.org/) و [TensorFlow](https://www.tensorflow.org/) و [JAX](https://jax.readthedocs.io/en/latest/) + +يوفر 🤗 Transformers واجهات برمجة التطبيقات (APIs) والأدوات اللازمة لتنزيل وتدريب النماذج المسبقة التدريب بسهولة. ويمكن أن يقلل استخدام النماذج المسبقة التدريب من تكاليف الحوسبة والبصمة الكربونية لديك، ويوفّر الوقت والموارد اللازمة لتدريب نموذج من الصفر. وتدعم هذه النماذج المهام الشائعة في طرائق مختلفة، مثل: + +📝 **معالجة اللغات الطبيعية**: تصنيف النصوص، وتعريف الكيانات المسماة، والإجابة على الأسئلة، ونمذجة اللغة، والتلخيص، والترجمة، والاختيار من متعدد، وتوليد النصوص.
+🖼️ **الرؤية الحاسوبية**: تصنيف الصور، وكشف الأشياء، والتجزئة.
+🗣️ **الصوت**: التعرف التلقائي على الكلام، وتصنيف الصوت.
+🐙 **متعدد الوسائط**: الإجابة على الأسئلة الجدولية، والتعرف البصري على الحروف، واستخراج المعلومات من المستندات الممسوحة ضوئيًا، وتصنيف الفيديو، والإجابة على الأسئلة البصرية. + +يدعم 🤗 Transformers قابلية التشغيل البيني للإطار بين PyTorch و TensorFlow و JAX. ويوفر ذلك المرونة لاستخدام إطار عمل مختلف في كل مرحلة من مراحل حياة النموذج؛ قم بتدريب نموذج في ثلاث خطوط من التعليمات البرمجية في إطار واحد، وقم بتحميله للاستدلال في إطار آخر. ويمكن أيضًا تصدير النماذج إلى تنسيق مثل ONNX و TorchScript للنشر في بيئات الإنتاج. + +انضم إلى المجتمع المتنامي على [Hub](https://huggingface.co/models) أو [المنتدى](https://discuss.huggingface.co/) أو [Discord](https://discord.com/invite/JfAtkvEtRb) اليوم! + +## إذا كنت تبحث عن دعم مخصص من فريق Hugging Face + + + HuggingFace Expert Acceleration Program + + +## المحتويات + +ينقسم التوثيق إلى خمسة أقسام: + +- **ابدأ** تقدم جولة سريعة في المكتبة وتعليمات التثبيت للبدء. +- **الدروس التعليمية** هي مكان رائع للبدء إذا كنت مبتدئًا. سيساعدك هذا القسم على اكتساب المهارات الأساسية التي تحتاجها للبدء في استخدام المكتبة. +- **أدلة كيفية الاستخدام** تُظهر لك كيفية تحقيق هدف محدد، مثل ضبط نموذج مسبق التدريب لنمذجة اللغة أو كيفية كتابة ومشاركة نموذج مخصص. +- **الأدلة المفاهيمية** تقدم مناقشة وتفسيرًا أكثر للأفكار والمفاهيم الأساسية وراء النماذج والمهام وفلسفة التصميم في 🤗 Transformers. +- **واجهة برمجة التطبيقات (API)** تصف جميع الفئات والوظائف: + + - **الفئات الرئيسية** تشرح الفئات الأكثر أهمية مثل التكوين والنمذجة والتحليل النصي وخط الأنابيب. + - **النماذج** تشرح الفئات والوظائف المتعلقة بكل نموذج يتم تنفيذه في المكتبة. + - **المساعدون الداخليون** يشرحون فئات ووظائف المساعدة التي يتم استخدامها داخليًا. + + +## النماذج والأطر المدعومة + +يمثل الجدول أدناه الدعم الحالي في المكتبة لكل من هذه النماذج، وما إذا كان لديها محلل نحوي Python (يُسمى "بطيء"). محلل نحوي "سريع" مدعوم بمكتبة 🤗 Tokenizers، وما إذا كان لديها دعم في Jax (عبر Flax) و/أو PyTorch و/أو TensorFlow. + + +# Hugging Face Hub: قائمة النماذج + +آخر تحديث: 06/08/2024 + +| النموذج | دعم PyTorch | دعم TensorFlow | دعم Flax | +| :----: | :---------: | :------------: | :-------: | +| [ALBERT](model_doc/albert) | ✅ | ✅ | ✅ | +| [ALIGN](model_doc/align) | ✅ | ❌ | ❌ | +| [AltCLIP](model_doc/altclip) | ✅ | ❌ | ❌ | +| [Audio Spectrogram Transformer](model_doc/audio-spectrogram-transformer) | ✅ | ❌ | ❌ | +| [Autoformer](model_doc/autoformer) | ✅ | ❌ | ❌ | +| [Bark](model_doc/bark) | ✅ | ❌ | ❌ | +| [BART](model_doc/bart) | ✅ | ✅ | ✅ | +| [BARThez](model_doc/barthez) | ✅ | ✅ | ✅ | +| [BARTpho](model_doc/bartpho) | ✅ | ✅ | ✅ | +| [BEiT](model_doc/beit) | ✅ | ❌ | ✅ | +| [BERT](model_doc/bert) | ✅ | ✅ | ✅ | +| [Bert Generation](model_doc/bert-generation) | ✅ | ❌ | ❌ | +| [BertJapanese](model_doc/bert-japanese) | ✅ | ✅ | ✅ | +| [BERTweet](model_doc/bertweet) | ✅ | ✅ | ✅ | +| [BigBird](model_doc/big_bird) | ✅ | ❌ | ✅ | +| [BigBird-Pegasus](model_doc/bigbird_pegasus) | ✅ | ❌ | ❌ | +| [BioGpt](model_doc/biogpt) | ✅ | ❌ | ❌ | +| [BiT](model_doc/bit) | ✅ | ❌ | ❌ | +| [Blenderbot](model_doc/blenderbot) | ✅ | ✅ | ✅ | +| [BlenderbotSmall](model_doc/blenderbot-small) | ✅ | ✅ | ✅ | +| [BLIP](model_doc/blip) | ✅ | ✅ | ❌ | +| [BLIP-2](model_doc/blip-2) | ✅ | ❌ | ❌ | +| [BLOOM](model_doc/bloom) | ✅ | ❌ | ✅ | +| [BORT](model_doc/bort) | ✅ | ✅ | ✅ | +| [BridgeTower](model_doc/bridgetower) | ✅ | ❌ | ❌ | +| [BROS](model_doc/bros) | ✅ | ❌ | ❌ | +| [ByT5](model_doc/byt5) | ✅ | ✅ | ✅ | +| [CamemBERT](model_doc/camembert) | ✅ | ✅ | ❌ | +| [CANINE](model_doc/canine) | ✅ | ❌ | ❌ | +# النماذج Models + +| النموذج/المهمة | التصنيف Classification | استخراج المعلومات Information Extraction | توليد Generation | +| :-----: | :----: | :----: | :----: | +| [CANINE](model_doc/canine) | ✅ | ❌ | ❌ | +| [Chameleon](model_doc/chameleon) | ✅ | ❌ | ❌ | +| [Chinese-CLIP](model_doc/chinese_clip) | ✅ | ❌ | ❌ | +| [CLAP](model_doc/clap) | ✅ | ❌ | ❌ | +| [CLIP](model_doc/clip) | ✅ | ✅ | ✅ | +| [CLIPSeg](model_doc/clipseg) | ✅ | ❌ | ❌ | +| [CLVP](model_doc/clvp) | ✅ | ❌ | ❌ | +| [CodeGen](model_doc/codegen) | ✅ | ❌ | ❌ | +| [CodeLlama](model_doc/code_llama) | ✅ | ❌ | ✅ | +| [Cohere](model_doc/cohere) | ✅ | ❌ | ❌ | +| [Conditional DETR](model_doc/conditional_detr) | ✅ | ❌ | ❌ | +| [ConvBERT](model_doc/convbert) | ✅ | ✅ | ❌ | +| [ConvNeXT](model_doc/convnext) | ✅ | ✅ | ❌ | +| [ConvNeXTV2](model_doc/convnextv2) | ✅ | ✅ | ❌ | +| [CPM](model_doc/cpm) | ✅ | ✅ | ✅ | +| [CPM-Ant](model_doc/cpmant) | ✅ | ❌ | ❌ | +| [CTRL](model_doc/ctrl) | ✅ | ✅ | ❌ | +| [CvT](model_doc/cvt) | ✅ | ✅ | ❌ | +| [Data2VecAudio](model_doc/data2vec) | ✅ | ❌ | ❌ | +| [Data2VecText](model_doc/data2vec) | ✅ | ❌ | ❌ | +| [Data2VecVision](model_doc/data2vec) | ✅ | ✅ | ❌ | +| [DBRX](model_doc/dbrx) | ✅ | ❌ | ❌ | +| [DeBERTa](model_doc/deberta) | ✅ | ✅ | ❌ | +| [DeBERTa-v2](model_doc/deberta-v2) | ✅ | ✅ | ❌ | +| [Decision Transformer](model_doc/decision_transformer) | ✅ | ❌ | ❌ | +| [Deformable DETR](model_doc/deformable_detr) | ✅ | ❌ | ❌ | +| [DeiT](model_doc/deit) | ✅ | ✅ | ❌ | +| [DePlot](model_doc/deplot) | ✅ | ❌ | ❌ | +| [Depth Anything](model_doc/depth_anything) | ✅ | ❌ | ❌ | +| [DETA](model_doc/deta) | ✅ | ❌ | ❌ | +| [DETR](model_doc/detr) | | | | +# قائمة النماذج + +| الاسم باللغة الإنجليزية | الوصف باللغة الإنجليزية | الوصف باللغة العربية | +| :--------------------- | :---------------------- | :------------------- | +| [DiT](model_doc/dit) | ✅ | | +| [DonutSwin](model_doc/donut) | ✅ | | +| [DPT](model_doc/dpt) | ✅ | | +| [EfficientFormer](model_doc/efficientformer) | ✅ | | +| [EnCodec](model_doc/encodec) | ✅ | | +| [ErnieM](model_doc/ernie_m) | ✅ | | +| [FNet](model_doc/fnet) | ✅ | | +| [FocalNet](model_doc/focalnet) | ✅ | | +| [Fuyu](model_doc/fuyu) | ✅ | | +| [Gemma2](model_doc/gemma2) | ✅ | | +| [GIT](model_doc/git) | ✅ | | +# النماذج المدعومة حالياً + +| النموذج | النص | الصور | الصوت | +|-------------|--------|---------|-------| +| [GIT](model_doc/git) | ✅ | ❌ | ❌ | +| [GLPN](model_doc/glpn) | ✅ | ❌ | ❌ | +| [GPT Neo](model_doc/gpt_neo) | ✅ | ❌ | ✅ | +| [GPT NeoX](model_doc/gpt_neox) | ✅ | ❌ | ❌ | +| [GPT NeoX Japanese](model_doc/gpt_neox_japanese) | ✅ | ❌ | ❌ | +| [GPT-J](model_doc/gptj) | ✅ | ✅ | ✅ | +| [GPT-Sw3](model_doc/gpt-sw3) | ✅ | ✅ | ✅ | +| [GPTBigCode](model_doc/gpt_bigcode) | ✅ | ❌ | ❌ | +| [GPTSAN-japanese](model_doc/gptsan-japanese) | ✅ | ❌ | ❌ | +| [Graphormer](model_doc/graphormer) | ✅ | ❌ | ❌ | +| [Grounding DINO](model_doc/grounding-dino) | ✅ | ❌ | ❌ | +| [GroupViT](model_doc/groupvit) | ✅ | ✅ | ❌ | +| [HerBERT](model_doc/herbert) | ✅ | ✅ | ✅ | +| [Hiera](model_doc/hiera) | ✅ | ❌ | ❌ | +| [Hubert](model_doc/hubert) | ✅ | ✅ | ❌ | +| [I-BERT](model_doc/ibert) | ✅ | ❌ | ❌ | +| [IDEFICS](model_doc/idefics) | ✅ | ✅ | ❌ | +| [Idefics2](model_doc/idefics2) | ✅ | ❌ | ❌ | +| [ImageGPT](model_doc/imagegpt) | ✅ | ❌ | ❌ | +| [Informer](model_doc/informer) | ✅ | ❌ | ❌ | +| [InstructBLIP](model_doc/instructblip) | ✅ | ❌ | ❌ | +| [InstructBlipVideo](model_doc/instructblipvideo) | ✅ | ❌ | ❌ | +| [Jamba](model_doc/jamba) | ✅ | ❌ | ❌ | +| [JetMoe](model_doc/jetmoe) | ✅ | ❌ | ❌ | +| [Jukebox](model_doc/jukebox) | ✅ | ❌ | ❌ | +| [KOSMOS-2](model_doc/kosmos-2) | ✅ | ❌ | ❌ | +| [LayoutLM](model_doc/layoutlm) | ✅ | ✅ | ❌ | +| [LayoutLMv2](model_doc/layoutlmv2) | ✅ | ❌ | ❌ | +| [LayoutLMv3](model_doc/layoutlmv3) | ✅ | ✅ | ❌ | +| [LayoutXLM](model_doc/layoutxlm) | ✅ | ❌ | ❌ | +| [LED](model_doc/led) | ✅ | ✅ | ❌ | +# Hugging Face Models + +مرحباً! هذه قائمة بالنماذج المتاحة في Hugging Face Hub. تم تحديثها مؤخراً لتشمل أحدث النماذج وأكثرها شعبية. + +| الاسم | النص | الصورة | الصوت | +| --- | --- | --- | --- | +| [LED](model_doc/led) | ✅ | ✅ | ❌ | +| [LeViT](model_doc/levit) | ✅ | ❌ | ❌ | +| [LiLT](model_doc/lilt) | ✅ | ❌ | ❌ | +| [LLaMA](model_doc/llama) | ✅ | ❌ | ✅ | +| [Llama2](model_doc/llama2) | ✅ | ❌ | ✅ | +| [Llama3](model_doc/llama3) | ✅ | ❌ | ✅ | +| [LLaVa](model_doc/llava) | ✅ | ❌ | ❌ | +| [LLaVA-NeXT](model_doc/llava_next) | ✅ | ❌ | ❌ | +| [LLaVa-NeXT-Video](model_doc/llava-next-video) | ✅ | ❌ | ❌ | +| [Longformer](model_doc/longformer) | ✅ | ✅ | ❌ | +| [LongT5](model_doc/longt5) | ✅ | ❌ | ✅ | +| [LUKE](model_doc/luke) | ✅ | ❌ | ❌ | +| [LXMERT](model_doc/lxmert) | ✅ | ✅ | ❌ | +| [M-CTC-T](model_doc/mctct) | ✅ | ❌ | ❌ | +| [M2M100](model_doc/m2m_100) | ✅ | ❌ | ❌ | +| [MADLAD-400](model_doc/madlad-400) | ✅ | ✅ | ✅ | +| [Mamba](model_doc/mamba) | ✅ | ❌ | ❌ | +| [Marian](model_doc/marian) | ✅ | ✅ | ✅ | +| [MarkupLM](model_doc/markuplm) | ✅ | ❌ | ❌ | +| [Mask2Former](model_doc/mask2former) | ✅ | ❌ | ❌ | +| [MaskFormer](model_doc/maskformer) | ✅ | ❌ | ❌ | +| [MatCha](model_doc/matcha) | ✅ | ❌ | ❌ | +| [mBART](model_doc/mbart) | ✅ | ✅ | ✅ | +| [mBART-50](model_doc/mbart50) | ✅ | ✅ | ✅ | +| [MEGA](model_doc/mega) | ✅ | ❌ | ❌ | +| [Megatron-BERT](model_doc/megatron-bert) | ✅ | ❌ | ❌ | +| [Megatron-GPT2](model_doc/megatron_gpt2) | ✅ | ✅ | ✅ | +| [MGP-STR](model_doc/mgp-str) | ✅ | ❌ | ❌ | +| [Mistral](model_doc/mistral) | ✅ | ✅ | ✅ | +| [Mixtral](model_doc/mixtral) | ✅ | ❌ | ❌ | +| [mLUKE](model_doc/mluke) | ✅ | ❌ | ❌ | +# Hugging Face Models + +نموذج Hugging Face هو تمثيل لخوارزمية تعلم الآلة التي يمكن تدريبها على بيانات محددة لأداء مهام مختلفة مثل تصنيف النصوص أو توليد الصور. توفر Hugging Face مجموعة واسعة من النماذج التي يمكن استخدامها مباشرة أو تخصيصها لمهمة محددة. + +## نظرة عامة على النماذج + +| الاسم | النص | الصورة/الكائن | الصوت | +| ---------------------------------------- | ----------- | ------------- | --------- | +| [mLUKE](model_doc/mluke) | ✅ | ❌ | ❌ | +| [MMS](model_doc/mms) | ✅ | ✅ | ✅ | +| [MobileBERT](model_doc/mobilebert) | ✅ | ✅ | ❌ | +| [MobileNetV1](model_doc/mobilenet_v1) | ✅ | ❌ | ❌ | +| [MobileNetV2](model_doc/mobilenet_v2) | ✅ | ❌ | ❌ | +| [MobileViT](model_doc/mobilevit) | ✅ | ✅ | ❌ | +| [MobileViTV2](model_doc/mobilevitv2) | ✅ | ❌ | ❌ | +| [MPNet](model_doc/mpnet) | ✅ | ✅ | ❌ | +| [MPT](model_doc/mpt) | ✅ | ❌ | ❌ | +| [MRA](model_doc/mra) | ✅ | ❌ | ❌ | +| [MT5](model_doc/mt5) | ✅ | ✅ | ✅ | +| [MusicGen](model_doc/musicgen) | ✅ | ❌ | ❌ | +| [MusicGen Melody](model_doc/musicgen_melody) | ✅ | ❌ | ❌ | +| [MVP](model_doc/mvp) | ✅ | ❌ | ❌ | +| [NAT](model_doc/nat) | ✅ | ❌ | ❌ | +| [Nezha](model_doc/nezha) | ✅ | ❌ | ❌ | +| [NLLB](model_doc/nllb) | ✅ | ❌ | ❌ | +| [NLLB-MOE](model_doc/nllb-moe) | ✅ | ❌ | ❌ | +| [Nougat](model_doc/nougat) | ✅ | ✅ | ✅ | +| [Nyströmformer](model_doc/nystromformer) | ✅ | ❌ | ❌ | +| [OLMo](model_doc/olmo) | ✅ | ❌ | ❌ | +| [OneFormer](model_doc/oneformer) | ✅ | ❌ | ❌ | +| [OpenAI GPT](model_doc/openai-gpt) | ✅ | ✅ | ❌ | +| [OpenAI GPT-2](model_doc/gpt2) | ✅ | ✅ | ✅ | +| [OpenLlama](model_doc/open-llama) | ✅ | ❌ | ❌ | +| [OPT](model_doc/opt) | ✅ | ✅ | ✅ | +| [OWL-ViT](model_doc/owlvit) | ✅ | ❌ | ❌ | +| [OWLv2](model_doc/owlv2) | ✅ | ❌ | ❌ | +| [PaliGemma](model_doc/paligemma) | ✅ | ❌ | ❌ | +| [PatchTSMixer](model_doc/patchtsmixer) | ✅ | ❌ | ❌ | +| [PatchTST](model_doc/patchtst) | ✅ | ❌ | ❌ | +# النماذج المدعومة + +| الاسم | التصنيف | التوليد | استخراج المعلومات | +| --- | --- | --- | --- | +| [PatchTST](model_doc/patchtst) | ✅ | ❌ | ❌ | +| [Pegasus](model_doc/pegasus) | ✅ | ✅ | ✅ | +| [PEGASUS-X](model_doc/pegasus_x) | ✅ | ❌ | ❌ | +| [Perceiver](model_doc/perceiver) | ✅ | ❌ | ❌ | +| [Persimmon](model_doc/persimmon) | ✅ | ❌ | ❌ | +| [Phi](model_doc/phi) | ✅ | ❌ | ❌ | +| [Phi3](model_doc/phi3) | ✅ | ❌ | ❌ | +| [PhoBERT](model_doc/phobert) | ✅ | ✅ | ✅ | +| [Pix2Struct](model_doc/pix2struct) | ✅ | ❌ | ❌ | +| [PLBart](model_doc/plbart) | ✅ | ❌ | ❌ | +| [PoolFormer](model_doc/poolformer) | ✅ | ❌ | ❌ | +| [Pop2Piano](model_doc/pop2piano) | ✅ | ❌ | ❌ | +| [ProphetNet](model_doc/prophetnet) | ✅ | ❌ | ❌ | +| [PVT](model_doc/pvt) | ✅ | ❌ | ❌ | +| [PVTv2](model_doc/pvt_v2) | ✅ | ❌ | ❌ | +| [QDQBert](model_doc/qdqbert) | ✅ | ❌ | ❌ | +| [Qwen2](model_doc/qwen2) | ✅ | ❌ | ❌ | +| [Qwen2MoE](model_doc/qwen2_moe) | ✅ | ❌ | ❌ | +| [RAG](model_doc/rag) | ✅ | ✅ | ❌ | +| [REALM](model_doc/realm) | ✅ | ❌ | ❌ | +| [RecurrentGemma](model_doc/recurrent_gemma) | ✅ | ❌ | ❌ | +| [Reformer](model_doc/reformer) | ✅ | ❌ | ❌ | +| [RegNet](model_doc/regnet) | ✅ | ✅ | ✅ | +| [RemBERT](model_doc/rembert) | ✅ | ✅ | ❌ | +| [ResNet](model_doc/resnet) | ✅ | ✅ | ✅ | +| [RetriBERT](model_doc/retribert) | ✅ | ❌ | ❌ | +| [RoBERTa](model_doc/roberta) | ✅ | ✅ | ✅ | +| [RoBERTa-PreLayerNorm](model_doc/roberta-prelayernorm) | ✅ | ✅ | ✅ | +| [RoCBert](model_doc/roc_bert) | ✅ | ❌ | ❌ | +| [RoFormer](model_doc/roformer) | ✅ | ✅ | ✅ | +| [RT-DETR](model_doc/rt_detr) | ✅ | ❌ | ❌ | +# النماذج المدعومة + +| الاسم | التصنيف | الكشف | التتبع | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | :-----: | :-----: | :------: | +| [RT-DETR](model_doc/rt_detr) | ✅ | ❌ | ❌ | +| [RT-DETR-ResNet](model_doc/rt_detr_resnet) | ✅ | ❌ | ❌ | +| [RWKV](model_doc/rwkv) | ✅ | ❌ | ❌ | +| [SAM](model_doc/sam) | ✅ | ✅ | ❌ | +| [SeamlessM4T](model_doc/seamless_m4t) | ✅ | ❌ | ❌ | +| [SeamlessM4Tv2](model_doc/seamless_m4t_v2) | ✅ | ❌ | ❌ | +| [SegFormer](model_doc/segformer) | ✅ | ✅ | ❌ | +| [SegGPT](model_doc/seggpt) | ✅ | ❌ | ❌ | +| [SEW](model_doc/sew) | ✅ | ❌ | ❌ | +| [SEW-D](model_doc/sew-d) | ✅ | ❌ | ❌ | +| [SigLIP](model_doc/siglip) | ✅ | ❌ | ❌ | +| [Speech Encoder decoder](model_doc/speech-encoder-decoder) | ✅ | ❌ | ✅ | +| [Speech2Text](model_doc/speech_to_text) | ✅ | ✅ | ❌ | +| [SpeechT5](model_doc/speecht5) | ✅ | ❌ | ❌ | +| [Splinter](model_doc/splinter) | ✅ | ❌ | ❌ | +| [SqueezeBERT](model_doc/squeezebert) | ✅ | ❌ | ❌ | +| [StableLm](model_doc/stablelm) | ✅ | ❌ | ❌ | +| [Starcoder2](model_doc/starcoder2) | ✅ | ❌ | ❌ | +| [SuperPoint](model_doc/superpoint) | ✅ | ❌ | ❌ | +| [SwiftFormer](model_doc/swiftformer) | ✅ | ✅ | ❌ | +| [Swin Transformer](model_doc/swin) | ✅ | ✅ | ❌ | +| [Swin Transformer V2](model_doc/swinv2) | ✅ | ❌ | ❌ | +| [Swin2SR](model_doc/swin2sr) | ✅ | ❌ | ❌ | +| [SwitchTransformers](model_doc/switch_transformers) | ✅ | ❌ | ❌ | +| [T5](model_doc/t5) | ✅ | ✅ | ✅ | +| [T5v1.1](model_doc/t5v1.1) | ✅ | ✅ | ✅ | +| [Table Transformer](model_doc/table-transformer) | ✅ | ❌ | ❌ | +| [TAPAS](model_doc/tapas) | ✅ | ✅ | ❌ | +| [TAPEX](model_doc/tapex) | ✅ | ✅ | ✅ | +| [Time Series Transformer](model_doc/time_series_transformer) | ✅ | ❌ | ❌ | +| [TimeSformer](model_doc/timesformer) | ✅ | ❌ | ❌ | +# قائمة النماذج المدعومة + +| الاسم | التصنيف | النص | الصورة | +| -------------------------------------- | ------ | -------- | --------- | +| [UL2](model_doc/ul2) | ✅ | ✅ | ✅ | +| [Wav2Vec2](model_doc/wav2vec2) | ✅ | ✅ | ✅ | +| [TimeSformer](model_doc/timesformer) | ✅ | ❌ | ❌ | +| [Trajectory Transformer](model_doc/trajectory_transformer) | ✅ | ❌ | ❌ | +| [Transformer-XL](model_doc/transfo-xl) | ✅ | ✅ | ❌ | +| ... | ... | ... | ... | + +# تفاصيل النموذج + +يرجى الرجوع إلى [README.md](README.md#model-zoo) للحصول على تفاصيل حول كيفية إضافة نموذج جديد. + +# النماذج المدعومة + +## النص + +| الاسم | التصنيف | النص-النص | النص-الصورة | النص-الفيديو | +| -------------------------------------------- | ------ | --------- | ----------- | ------------ | +| [TimeSformer](model_doc/timesformer) | ✅ | ❌ | ❌ | ❌ | +| [Trajectory Transformer](model_doc/trajectory_transformer) | ✅ | ❌ | ❌ | ❌ | +| [Transformer-XL](model_doc/transfo-xl) | ✅ | ✅ | ❌ | ❌ | +| ... | ... | ... | ... | ... | + +## الصورة + +| الاسم | التصنيف | النص-الصورة | الصورة-الصورة | +| ---------------------------------------- | ------ | ----------- | ------------- | +| [UL2](model_doc/ul2) | ✅ | ✅ | ✅ | +| [ViT](model_doc/vit) | ✅ | ✅ | ✅ | +| [ViT Hybrid](model_doc/vit_hybrid) | ✅ | ❌ | ❌ | +| [VitDet](model_doc/vitdet) | ✅ | ❌ | ❌ | +| [ViTMAE](model_doc/vit_mae) | ✅ | ✅ | ❌ | +| ... | ... | ... | ... | + +## الفيديو + +| الاسم | التصنيف | النص-الفيديو | الفيديو-الفيديو | +| ---------------------------------------- | ------ | ------------ | -------------- | +| [VideoLlava](model_doc/video_llava) | ✅ | ❌ | ❌ | +| [VideoMAE](model_doc/videomae) | ✅ | ❌ | ❌ | +| [ViLT](model_doc/vilt) | ✅ | ❌ | ❌ | +| [VipLlava](model_doc/vipllava) | ✅ | ❌ | ❌ | +| ... | ... | ... | ... | +# النماذج المدعومة + +| الاسم | الصوت | النص | الصورة | +| ------------------------------------------------------------------- | ----- | ---- | ------ | +| [Wav2Vec2-BERT](model_doc/wav2vec2-bert) | ✅ | ❌ | ❌ | +| [Wav2Vec2-Conformer](model_doc/wav2vec2-conformer) | ✅ | ❌ | ❌ | +| [Wav2Vec2Phoneme](model_doc/wav2vec2_phoneme) | ✅ | ✅ | ✅ | +| [WavLM](model_doc/wavlm) | ✅ | ❌ | ❌ | +| [Whisper](model_doc/whisper) | ✅ | ✅ | ✅ | +| [X-CLIP](model_doc/xclip) | ✅ | ❌ | ❌ | +| [X-MOD](model_doc/xmod) | ✅ | ❌ | ❌ | +| [XGLM](model_doc/xglm) | ✅ | ✅ | ✅ | +| [XLM](model_doc/xlm) | ✅ | ✅ | ❌ | +| [XLM-ProphetNet](model_doc/xlm-prophetnet) | ✅ | ❌ | ❌ | +| [XLM-RoBERTa](model_doc/xlm-roberta) | ✅ | ✅ | ✅ | +| [XLM-RoBERTa-XL](model_doc/xlm-roberta-xl) | ✅ | ❌ | ❌ | +| [XLM-V](model_doc/xlm-v) | ✅ | ✅ | ✅ | +| [XLNet](model_doc/xlnet) | ✅ | ✅ | ❌ | +| [XLS-R](model_doc/xls_r) | ✅ | ✅ | ✅ | +| [XLSR-Wav2Vec2](model_doc/xlsr_wav2vec2) | ✅ | ✅ | ✅ | +| [YOLOS](model_doc/yolos) | ✅ | ❌ | ❌ | +| [YOSO](model_doc/yoso) | ✅ | ❌ | ❌ | +| [ZoeDepth](model_doc/zoedepth) | ✅ | ❌ | ❌ | + \ No newline at end of file From 72f5aa7b6b0b8c50f4614fb30631dafd7a55dd09 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:09 +0300 Subject: [PATCH 011/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/installation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/installation.md | 246 +++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 docs/source/ar/installation.md diff --git a/docs/source/ar/installation.md b/docs/source/ar/installation.md new file mode 100644 index 00000000000000..855308f733ea44 --- /dev/null +++ b/docs/source/ar/installation.md @@ -0,0 +1,246 @@ +## التثبيت + +قم بتثبيت مكتبة 🤗 Transformers لمكتبة التعلم العميق التي تعمل معها، وقم بإعداد ذاكرة التخزين المؤقت الخاصة بك، وقم بإعداد 🤗 Transformers للعمل دون اتصال (اختياري). + +تم اختبار 🤗 Transformers على Python 3.6+، وPyTorch 1.1.0+، وTensorFlow 2.0+، وFlax. اتبع تعليمات التثبيت أدناه لمكتبة التعلم العميق التي تستخدمها: + +* تعليمات تثبيت [PyTorch](https://pytorch.org/get-started/locally/). +* تعليمات تثبيت [TensorFlow 2.0](https://www.tensorflow.org/install/pip). +* تعليمات تثبيت [Flax](https://flax.readthedocs.io/en/latest/). + +## التثبيت باستخدام pip + +يجب عليك تثبيت 🤗 Transformers في [بيئة افتراضية](https://docs.python.org/3/library/venv.html). إذا لم تكن معتادًا على البيئات الافتراضية في Python، فراجع هذا [الدليل](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). تجعل البيئة الافتراضية من السهل إدارة المشاريع المختلفة، وتجنب مشكلات التوافق بين التبعيات. + +ابدأ بإنشاء بيئة افتراضية في دليل مشروعك: + +```bash +python -m venv .env +``` + +قم بتنشيط البيئة الافتراضية. على Linux وMacOs: + +```bash +source .env/bin/activate +``` + +قم بتنشيط البيئة الافتراضية على Windows: + +```bash +.env/Scripts/activate +``` + +الآن أنت مستعد لتثبيت 🤗 Transformers باستخدام الأمر التالي: + +```bash +pip install transformers +``` + +للحصول على الدعم الخاص بـ CPU فقط، يمكنك تثبيت 🤗 Transformers ومكتبة التعلم العميق في خطوة واحدة. على سبيل المثال، قم بتثبيت 🤗 Transformers وPyTorch باستخدام: + +```bash +pip install 'transformers[torch]' +``` + +🤗 Transformers وTensorFlow 2.0: + +```bash +pip install 'transformers[tf-cpu]' +``` + + + +لمستخدمي M1 / ARM + +ستحتاج إلى تثبيت ما يلي قبل تثبيت TensorFLow 2.0 +```bash +brew install cmake +brew install pkg-config +``` + + + +🤗 Transformers وFlax: + +```bash +pip install 'transformers[flax]' +``` + +أخيرًا، تحقق مما إذا كان 🤗 Transformers قد تم تثبيته بشكل صحيح عن طريق تشغيل الأمر التالي. سيقوم بتنزيل نموذج مدرب مسبقًا: + +```bash +python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('we love you'))" +``` + +ثم قم بطباعة التسمية والنتيجة: + +```bash +[{'label': 'POSITIVE', 'score': 0.9998704791069031}] +``` + +## التثبيت من المصدر + +قم بتثبيت 🤗 Transformers من المصدر باستخدام الأمر التالي: + +```bash +pip install git+https://github.com/huggingface/transformers +``` + +يقوم هذا الأمر بتثبيت إصدار `main` النازف بدلاً من الإصدار `stable` الأحدث. يعد إصدار `main` مفيدًا للبقاء على اطلاع دائم بأحدث التطورات. على سبيل المثال، إذا تم إصلاح خطأ منذ الإصدار الرسمي الأخير ولكن لم يتم طرح إصدار جديد بعد. ومع ذلك، فإن هذا يعني أن إصدار `main` قد لا يكون مستقرًا دائمًا. نسعى جاهدين للحفاظ على تشغيل إصدار `main`، ويتم حل معظم المشكلات عادةً في غضون بضع ساعات أو يوم. إذا واجهتك مشكلة، يرجى فتح [قضية](https://github.com/huggingface/transformers/issues) حتى نتمكن من إصلاحها في أقرب وقت ممكن! + +تحقق مما إذا كان 🤗 Transformers قد تم تثبيته بشكل صحيح عن طريق تشغيل الأمر التالي: + +```bash +python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('I love you'))" +``` + +تحقق مما إذا كان 🤗 Transformers قد تم تثبيته بشكل صحيح عن طريق تشغيل الأمر التالي: + +```bash +python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('I love you'))" +``` + +## التثبيت القابل للتحرير + +ستحتاج إلى تثبيت قابل للتحرير إذا كنت ترغب في: + +* استخدام إصدار `main` من كود المصدر. +* المساهمة في 🤗 Transformers وتحتاج إلى اختبار التغييرات في الكود. + +قم باستنساخ المستودع وقم بتثبيت 🤗 Transformers باستخدام الأوامر التالية: + +```bash +git clone https://github.com/huggingface/transformers.git +cd transformers +pip install -e . +``` + +سترتبط هذه الأوامر مجلد المستودع الذي قمت باستنساخه ومسارات مكتبة Python. الآن، سيبحث Python داخل المجلد الذي قمت باستنساخه بالإضافة إلى مسارات المكتبة العادية. على سبيل المثال، إذا تم تثبيت حزم Python الخاصة بك عادةً في `~/anaconda3/envs/main/lib/python3.7/site-packages/`, فسيقوم Python أيضًا بالبحث في المجلد الذي قمت باستنساخه: `~/transformers/`. + + + +يجب عليك الاحتفاظ بمجلد `transformers` إذا كنت تريد الاستمرار في استخدام المكتبة. + + + +الآن يمكنك تحديث المستنسخ الخاص بك بسهولة إلى أحدث إصدار من 🤗 Transformers باستخدام الأمر التالي: + +```bash +cd ~/transformers/ +git pull +``` + +ستجد بيئة Python الإصدار `main` من 🤗 Transformers في المرة التالية التي تقوم فيها بتشغيله. + +## التثبيت باستخدام conda + +قم بالتثبيت من قناة conda `conda-forge`: + +```bash +conda install conda-forge::transformers +``` + +## إعداد ذاكرة التخزين المؤقت + +يتم تنزيل النماذج المدربة مسبقًا وتخزينها مؤقتًا محليًا في: `~/.cache/huggingface/hub`. هذا هو دليل ذاكرة التخزين المؤقت الافتراضية المقدمة بواسطة متغير البيئة `TRANSFORMERS_CACHE`. على Windows، يكون دليل ذاكرة التخزين المؤقت الافتراضي هو `C:\Users\username\.cache\huggingface\hub`. يمكنك تغيير متغيرات البيئة أدناه - حسب الأولوية - لتحديد دليل ذاكرة التخزين المؤقت المختلفة: + +1. متغير البيئة (افتراضي): `HUGGINGFACE_HUB_CACHE` أو `TRANSFORMERS_CACHE`. +2. متغير البيئة: `HF_HOME`. +3. متغير البيئة: `XDG_CACHE_HOME` + `/huggingface`. + + + +سيستخدم 🤗 Transformers متغيرات البيئة `PYTORCH_TRANSFORMERS_CACHE` أو `PYTORCH_PRETRAINED_BERT_CACHE` إذا كنت قادمًا من إصدار سابق من هذه المكتبة وقمت بتعيين متغيرات البيئة هذه، ما لم تحدد متغير البيئة `TRANSFORMERS_CACHE`. + + + +## الوضع غير المتصل + +قم بتشغيل 🤗 Transformers في بيئة محمية بجدار حماية أو غير متصلة باستخدام الملفات المخزنة مؤقتًا محليًا عن طريق تعيين متغير البيئة `HF_HUB_OFFLINE=1`. + + + +أضف [🤗 Datasets](https://huggingface.co/docs/datasets/) إلى سير عمل التدريب غير المتصل باستخدام متغير البيئة `HF_DATASETS_OFFLINE=1`. + + + +```bash +HF_DATASETS_OFFLINE=1 HF_HUB_OFFLINE=1 \ +python examples/pytorch/translation/run_translation.py --model_name_or_path google-t5/t5-small --dataset_name wmt16 --dataset_config ro-en ... +``` + +يجب أن يعمل هذا البرنامج النصي دون تعليق أو انتظار انتهاء المهلة لأنه لن يحاول تنزيل النموذج من Hub. + +يمكنك أيضًا تجاوز تحميل نموذج من Hub من كل مكالمة [`~PreTrainedModel.from_pretrained`] باستخدام معلمة [`local_files_only`]. عندما يتم تعيينه على `True`، يتم تحميل الملفات المحلية فقط: + +```py +from transformers import T5Model + +model = T5Model.from_pretrained("./path/to/local/directory", local_files_only=True) +``` + +### الحصول على النماذج ومعالجات التوكينز لاستخدامها دون اتصال + +خيار آخر لاستخدام 🤗 Transformers دون اتصال هو تنزيل الملفات مسبقًا، ثم الإشارة إلى مسارها المحلي عند الحاجة إلى استخدامها دون اتصال. هناك ثلاث طرق للقيام بذلك: + +* قم بتنزيل ملف عبر واجهة المستخدم على [Model Hub](https://huggingface.co/models) بالنقر فوق أيقونة ↓. + + ![download-icon](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/download-icon.png) + +* استخدم سير عمل [`PreTrainedModel.from_pretrained`] و [`PreTrainedModel.save_pretrained`]: + + 1. قم بتنزيل ملفاتك مسبقًا باستخدام [`PreTrainedModel.from_pretrained`]: +* استخدم سير عمل [`PreTrainedModel.from_pretrained`] و [`PreTrainedModel.save_pretrained`]: + + 1. قم بتنزيل ملفاتك مسبقًا باستخدام [`PreTrainedModel.from_pretrained`]: + + ```py + >>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM + + >>> tokenizer = AutoTokenizer.from_pretrained("bigscience/T0_3B") + >>> model = AutoModelForSeq2SeqLM.from_pretrained("bigscience/T0_3B") + ``` + + 2. احفظ ملفاتك إلى دليل محدد باستخدام [`PreTrainedModel.save_pretrained`]: + + ```py + >>> tokenizer.save_pretrained("./your/path/bigscience_t0") + >>> model.save_pretrained("./your/path/bigscience_t0") + ``` + + 3. الآن عندما تكون غير متصل بالإنترنت، أعد تحميل ملفاتك باستخدام [`PreTrainedModel.from_pretrained`] من الدليل المحدد: + + ```py + >>> tokenizer = AutoTokenizer.from_pretrained("./your/path/bigscience_t0") + >>> model = AutoModel.from_pretrained("./your/path/bigscience_t0") + ``` + +* قم بتنزيل الملفات برمجيًا باستخدام مكتبة [huggingface_hub](https://github.com/huggingface/huggingface_hub/tree/main/src/huggingface_hub): + + 1. قم بتثبيت مكتبة `huggingface_hub` في بيئتك الافتراضية: + + ```bash + python -m pip install huggingface_hub + ``` + + 2. استخدم وظيفة [`hf_hub_download`](https://huggingface.co/docs/hub/adding-a-library#download-files-from-the-hub) لتنزيل ملف إلى مسار محدد. على سبيل المثال، يقوم الأمر التالي بتنزيل ملف `config.json` من نموذج [T0](https://huggingface.co/bigscience/T0_3B) إلى المسار المطلوب: + + ```py + >>> from huggingface_hub import hf_hub_download + + >>> hf_hub_download(repo_id="bigscience/T0_3B", filename="config.json", cache_dir="./your/path/bigscience_t0") + ``` + +بمجرد تنزيل ملفك وتخزينه مؤقتًا محليًا، حدد مساره المحلي لتحميله واستخدامه: + +```py +>>> from transformers import AutoConfig + +>>> config = AutoConfig.from_pretrained("./your/path/bigscience_t0/config.json") +``` + + + +راجع قسم [كيفية تنزيل الملفات من Hub](https://huggingface.co/docs/hub/how-to-downstream) لمزيد من التفاصيل حول تنزيل الملفات المخزنة على Hub. + + \ No newline at end of file From 99b53d5f69b62f566a11105f756f7a0d1b2ce959 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:11 +0300 Subject: [PATCH 012/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/custom=5Fmodels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/custom_models.md | 333 ++++++++++++++++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 docs/source/ar/custom_models.md diff --git a/docs/source/ar/custom_models.md b/docs/source/ar/custom_models.md new file mode 100644 index 00000000000000..9737c9922f2829 --- /dev/null +++ b/docs/source/ar/custom_models.md @@ -0,0 +1,333 @@ +# بناء نماذج مخصصة + +تم تصميم مكتبة 🤗 Transformers لتكون قابلة للتوسيع بسهولة. كل نموذج مُرمز بالكامل في مجلد فرعي معين في المستودع دون أي تجريد، لذلك يمكنك بسهولة نسخ ملف نمذجة وتعديله وفقًا لاحتياجاتك. + +إذا كنت تكتب نموذجًا جديدًا تمامًا، فقد يكون من الأسهل البدء من الصفر. في هذا البرنامج التعليمي، سنُرِيك كيفية كتابة نموذج مخصص وتكوينه حتى يمكن استخدامه داخل Transformers، وكيفية مشاركته مع المجتمع (مع الكود الذي يعتمد عليه) بحيث يمكن لأي شخص استخدامه، حتى إذا لم يكن موجودًا في مكتبة 🤗 Transformers. سنرى كيفية البناء على المحولات وتوسيع الإطار باستخدام خطافاتك والكود المخصص. + +سنقوم بتوضيح كل هذا على نموذج ResNet، عن طريق لف فئة ResNet من +[مكتبة timm](https://github.com/rwightman/pytorch-image-models) في [`PreTrainedModel`]. + +## كتابة تكوين مخصص + +قبل الغوص في النموذج، دعونا نكتب تكوينه أولاً. تكوين نموذج هو كائن سيحتوي على جميع المعلومات اللازمة لبناء النموذج. كما سنرى في القسم التالي، يمكن للنموذج أن يأخذ فقط `config` ليتم تهيئته، لذلك نحتاج حقًا إلى أن يكون هذا الكائن مكتملًا قدر الإمكان. + + + +تتبع النماذج في مكتبة `transformers` نفسها بشكل عام الاتفاقية التي تقبل كائن `config` +في طريقة `__init__` الخاصة بها، ثم تمرر كائن `config` بالكامل إلى الطبقات الفرعية في النموذج، بدلاً من كسر كائن التكوين إلى عدة حجج يتم تمريرها جميعها بشكل فردي إلى الطبقات الفرعية. يؤدي كتابة نموذجك بهذا الأسلوب إلى كود أبسط مع "مصدر حقيقة" واضح لأي فرط معلمات، كما يسهل إعادة استخدام الكود من نماذج أخرى في `transformers`. + + + +في مثالنا، سنأخذ زوجًا من وسائط فئة ResNet التي قد نرغب في ضبطها. ستعطينا التكوينات المختلفة أنواع ResNets المختلفة الممكنة. ثم نقوم ببساطة بتخزين تلك الحجج، بعد التحقق من صحة بعضها. + +```python +from transformers import PretrainedConfig +from typing import List + + +class ResnetConfig(PretrainedConfig): + model_type = "resnet" + + def __init__( + self, + block_type="bottleneck", + layers: List[int] = [3, 4, 6, 3], + num_classes: int = 1000, + input_channels: int = 3, + cardinality: int = 1, + base_width: int = 64, + stem_width: int = 64, + stem_type: str = "", + avg_down: bool = False, + **kwargs, + ): + if block_type not in ["basic", "bottleneck"]: + raise ValueError(f"`block_type` must be 'basic' or bottleneck', got {block_type}.") + if stem_type not in ["", "deep", "deep-tiered"]: + raise ValueError(f"`stem_type` must be '', 'deep' or 'deep-tiered', got {stem_type}.") + + self.block_type = block_type + self.layers = layers + self.num_classes = num_classes + self.input_channels = input_channels + self.cardinality = cardinality + self.base_width = base_width + self.stem_width = stem_width + self.stem_type = stem_type + self.avg_down = avg_down + super().__init__(**kwargs) +``` +الأشياء الثلاثة المهمة التي يجب تذكرها عند كتابة تكوينك الخاص هي ما يلي: +- يجب أن ترث من `PretrainedConfig`، +- يجب أن تقبل `__init__` من `PretrainedConfig` أي kwargs، +- يجب تمرير هذه `kwargs` إلى `__init__` للأسلوب الفائق. + +يضمن الإرث حصولك على جميع الوظائف من مكتبة 🤗 Transformers، في حين أن القيود الأخرى تأتي من حقيقة أن `PretrainedConfig` لديه المزيد من الحقول أكثر من تلك التي تقوم بتعيينها. عند إعادة تحميل تكوين باستخدام طريقة `from_pretrained`، يجب أن يقبل تكوينك هذه الحقول ثم إرسالها إلى الأسلوب الفائق. + +تحديد `model_type` لتكوينك (هنا `model_type="resnet"`) ليس إلزاميًا، ما لم ترغب في +تسجيل نموذجك باستخدام الفئات التلقائية (راجع القسم الأخير). + +مع القيام بذلك، يمكنك بسهولة إنشاء تكوينك وحفظه مثلما تفعل مع أي تكوين نموذج آخر في +المكتبة. إليك كيفية إنشاء تكوين resnet50d وحفظه: + +```py +resnet50d_config = ResnetConfig(block_type="bottleneck", stem_width=32, stem_type="deep", avg_down=True) +resnet50d_config.save_pretrained("custom-resnet") +``` + +سيؤدي هذا إلى حفظ ملف باسم `config.json` داخل مجلد `custom-resnet`. يمكنك بعد ذلك إعادة تحميل تكوينك باستخدام +طريقة `from_pretrained`: + +```py +resnet50d_config = ResnetConfig.from_pretrained("custom-resnet") +``` + +يمكنك أيضًا استخدام أي طريقة أخرى من فئة [`PretrainedConfig`]، مثل [`~PretrainedConfig.push_to_hub`] لتحميل تكوينك مباشرة إلى Hub. + +## كتابة نموذج مخصص + +الآن بعد أن أصبح لدينا تكوين ResNet، يمكننا المتابعة لكتابة النموذج. في الواقع، سنكتب نموذجين: أحدهما +يستخرج الميزات المخفية من دفعة من الصور (مثل [`BertModel`]) والآخر مناسب لتصنيف الصور (مثل [`BertForSequenceClassification`]). + +كما ذكرنا سابقًا، سنقوم فقط بلف النموذج بشكل فضفاض لجعله بسيطًا في هذا المثال. الشيء الوحيد الذي نحتاج إلى فعله قبل كتابة هذه الفئة هو رسم خريطة بين أنواع الكتل وفئات الكتل الفعلية. ثم يتم تحديد النموذج من التكوين عن طريق تمرير كل شيء إلى فئة `ResNet`: + +```py +from transformers import PreTrainedModel +from timm.models.resnet import BasicBlock, Bottleneck, ResNet +from .configuration_resnet import ResnetConfig + + +BLOCK_MAPPING = {"basic": BasicBlock, "bottleneck": Bottleneck} + + +class ResnetModel(PreTrainedModel): + config_class = ResnetConfig + + def __init__(self, config): + super().__init__(config) + block_layer = BLOCK_MAPPING[config.block_type] + self.model = ResNet( + block_layer, + config.layers, + num_classes=config.num_classes, + in_chans=config.input_channels, + cardinality=config.cardinality, + base_width=config.base_width, + stem_width=config.stem_width, + stem_type=config.stem_type, + avg_down=config.avg_down, + ) + + def forward(self, tensor): + return self.model.forward_features(tensor) +``` + +بالنسبة للنموذج الذي سيصنف الصور، فإننا نغير فقط طريقة التقديم: + +```py +import torch + + +class ResnetModelForImageClassification(PreTrainedModel): + config_class = ResnetConfig + + def __init__(self, config): + super().__init__(config) + block_layer = BLOCK_MAPPING[config.block_type] + self.model = ResNet( + block_layer, + config.layers, + num_classes=config.num_classes, + in_chans=config.input_channels, + cardinality=config.cardinality, + base_width=config.base_width, + stem_width=config.stem_width, + stem_type=config.stem_type, + avg_down=config.avg_down, + ) + + def forward(self, tensor, labels=None): + logits = self.model(tensor) + if labels is not None: + loss = torch.nn.cross_entropy(logits, labels) + return {"loss": loss, "logits": logits} + return {"logits": logits} +``` +في كلتا الحالتين، لاحظ كيف نرث من `PreTrainedModel` ونستدعي تهيئة الفئة الفائقة باستخدام `config` +(مثلما تفعل عند كتابة وحدة `torch.nn.Module` عادية). السطر الذي يحدد `config_class` ليس إلزاميًا، ما لم +ترغب في تسجيل نموذجك باستخدام الفئات التلقائية (راجع القسم الأخير). + + + +إذا كان نموذجك مشابهًا جدًا لنموذج داخل المكتبة، فيمكنك إعادة استخدام نفس التكوين مثل هذا النموذج. + + + +يمكن لنموذجك أن يعيد أي شيء تريده، ولكن إعادة قاموس مثلما فعلنا لـ +`ResnetModelForImageClassification`، مع تضمين الخسارة عند تمرير العلامات، سيجعل نموذجك قابلًا للاستخدام مباشرة داخل فئة [`Trainer`]. يعد استخدام تنسيق إخراج آخر أمرًا جيدًا طالما أنك تخطط لاستخدام حلقة تدريب خاصة بك أو مكتبة أخرى للتدريب. + +الآن بعد أن أصبح لدينا فئة النموذج، دعنا ننشئ واحدة: + +```py +resnet50d = ResnetModelForImageClassification(resnet50d_config) +``` + +يمكنك استخدام أي من طرق فئة [`PreTrainedModel`]، مثل [`~PreTrainedModel.save_pretrained`] أو +[`~PreTrainedModel.push_to_hub`]. سنستخدم الثاني في القسم التالي، وسنرى كيفية دفع أوزان النموذج مع كود نموذجنا. ولكن أولاً، دعنا نحمل بعض الأوزان المُعلمة مسبقًا داخل نموذجنا. + +في حالة الاستخدام الخاصة بك، فمن المحتمل أن تقوم بتدريب نموذجك المخصص على بياناتك الخاصة. للانتقال بسرعة خلال هذا البرنامج التعليمي، +سنستخدم الإصدار المُعلم مسبقًا من resnet50d. نظرًا لأن نموذجنا هو مجرد غلاف حوله، فمن السهل نقل هذه الأوزان: + +```py +import timm + +pretrained_model = timm.create_model("resnet50d", pretrained=True) +resnet50d.model.load_state_dict(pretrained_model.state_dict()) +``` + +الآن دعونا نرى كيفية التأكد من أنه عند قيامنا بـ [`~PreTrainedModel.save_pretrained`] أو [`~PreTrainedModel.push_to_hub`]، يتم حفظ كود النموذج. + +## تسجيل نموذج مع كود مخصص للفئات التلقائية + +إذا كنت تكتب مكتبة توسع 🤗 Transformers، فقد ترغب في توسيع الفئات التلقائية لتضمين نموذجك الخاص. يختلف هذا عن دفع الكود إلى Hub بمعنى أن المستخدمين سيحتاجون إلى استيراد مكتبتك للحصول على النماذج المخصصة (على عكس تنزيل كود النموذج تلقائيًا من Hub). + +ما دام تكوينك يحتوي على سمة `model_type` مختلفة عن أنواع النماذج الموجودة، وأن فئات النموذج لديك لديها السمات الصحيحة `config_class`، فيمكنك ببساطة إضافتها إلى الفئات التلقائية مثل هذا: + +```py +from transformers import AutoConfig, AutoModel, AutoModelForImageClassification + +AutoConfig.register("resnet", ResnetConfig) +AutoModel.register(ResnetConfig, ResnetModel) +AutoModelForImageClassification.register(ResnetConfig, ResnetModelForImageClassification) +``` + +لاحظ أن الحجة الأولى المستخدمة عند تسجيل تكوينك المخصص لـ [`AutoConfig`] يجب أن تتطابق مع `model_type` +من تكوينك المخصص، والحجة الأولى المستخدمة عند تسجيل نماذجك المخصصة لأي فئة نموذج تلقائي يجب +أن تتطابق مع `config_class` من تلك النماذج. + +## إرسال الكود إلى Hub + + + +هذا API تجريبي وقد يكون له بعض التغييرات الطفيفة في الإصدارات القادمة. + + + +أولاً، تأكد من تعريف نموذجك بالكامل في ملف `.py`. يمكن أن يعتمد على الواردات النسبية إلى بعض الملفات الأخرى طالما أن جميع الملفات موجودة في نفس الدليل (لا ندعم الوحدات الفرعية لهذه الميزة حتى الآن). لمثالنا، +سنحدد ملف `modeling_resnet.py` وملف `configuration_resnet.py` في مجلد باسم "resnet_model" في دليل العمل الحالي. يحتوي ملف التكوين على كود لـ `ResnetConfig` ويحتوي ملف النمذجة على كود لـ `ResnetModel` و`ResnetModelForImageClassification`. + +``` +. +└── resnet_model + ├── __init__.py + ├── configuration_resnet.py + └── modeling_resnet.py +``` + +يمكن أن يكون ملف `__init__.py` فارغًا، فهو موجود فقط حتى يتمكن Python من اكتشاف أن `resnet_model` يمكن استخدامه كموديل. + + +يمكن أن يكون ملف `__init__.py` فارغًا، فهو موجود فقط حتى يتمكن Python من اكتشاف أن `resnet_model` يمكن استخدامه كموديل. + + + +إذا كنت تقوم بنسخ ملفات النمذجة من المكتبة، فسوف تحتاج إلى استبدال جميع الواردات النسبية في أعلى الملف +لاستيرادها من حزمة `transformers`. + + + +لاحظ أنه يمكنك إعادة استخدام (أو توسيع) تكوين/نموذج موجود. + +لمشاركة نموذجك مع المجتمع، اتبع الخطوات التالية: أولاً، قم باستيراد نموذج ResNet والتكوين من الملفات التي تم إنشاؤها حديثًا: + +```py +from resnet_model.configuration_resnet import ResnetConfig +from resnet_model.modeling_resnet import ResnetModel, ResnetModelForImageClassification +``` + +بعد ذلك، يجب عليك إخبار المكتبة بأنك تريد نسخ ملفات الكود الخاصة بهذه الكائنات عند استخدام طريقة `save_pretrained` +وتسجيلها بشكل صحيح باستخدام فئة تلقائية (خاصة للنماذج)، ما عليك سوى تشغيل: + +```py +ResnetConfig.register_for_auto_class() +ResnetModel.register_for_auto_class("AutoModel") +ResnetModelForImageClassification.register_for_auto_class("AutoModelForImageClassification") +``` + +لاحظ أنه لا توجد حاجة لتحديد فئة تلقائية للتكوين (هناك فئة تلقائية واحدة فقط لها، +[`AutoConfig`]) ولكن الأمر يختلف بالنسبة للنماذج. قد يكون نموذجك المخصص مناسبًا للعديد من المهام المختلفة، لذلك يجب +تحديد أي من الفئات التلقائية هو الصحيح لنموذجك. + + + +استخدم `register_for_auto_class()` إذا كنت تريد نسخ ملفات الكود. إذا كنت تفضل استخدام الكود على Hub من مستودع آخر، +فلا تحتاج إلى استدعائه. في الحالات التي يوجد فيها أكثر من فئة تلقائية واحدة، يمكنك تعديل ملف `config.json` مباشرة باستخدام +الهيكل التالي: + +```json +"auto_map": { + "AutoConfig": "--", + "AutoModel": "--", + "AutoModelFor": "--", +}, +``` + + + +بعد ذلك، دعنا نقوم بإنشاء التكوين والنماذج كما فعلنا من قبل: + +```py +resnet50d_config = ResnetConfig(block_type="bottleneck", stem_width=32, stem_type="deep", avg_down=True) +resnet50d = ResnetModelForImageClassification(resnet50d_config) + +pretrained_model = timm.create_model("resnet50d", pretrained=True) +resnet50d.model.load_state_dict(pretrained_model.state_dict()) +``` + +الآن لإرسال النموذج إلى Hub، تأكد من تسجيل الدخول. إما تشغيل في المحطة الطرفية الخاصة بك: + +```bash +huggingface-cli login +``` + +أو من دفتر ملاحظات: + +```py +from huggingface_hub import notebook_login + +notebook_login() +``` + +يمكنك بعد ذلك الضغط على مساحة الاسم الخاصة بك (أو منظمة أنت عضو فيها) مثل هذا: + +```py +resnet50d.push_to_hub("custom-resnet50d") +``` + +بالإضافة إلى أوزان النمذجة والتكوين بتنسيق json، فقد قام هذا أيضًا بنسخ ملفات النمذجة والتكوين `.py` في مجلد `custom-resnet50d` وتحميل النتيجة إلى Hub. يمكنك التحقق من النتيجة في هذا [مستودع النموذج](https://huggingface.co/sgugger/custom-resnet50d). + +راجع [البرنامج التعليمي للمشاركة](model_sharing) لمزيد من المعلومات حول طريقة الدفع إلى المحور. + +### استخدام نموذج مع كود مخصص + +يمكنك استخدام أي تكوين أو نموذج أو مقسم رموز مع ملفات كود مخصص في مستودعه باستخدام الفئات التلقائية و +طريقة `from_pretrained`. يتم فحص جميع الملفات والرمز المرفوع إلى Hub بحثًا عن البرامج الضارة (راجع وثائق [أمان Hub](https://huggingface.co/docs/hub/security#malware-scanning) لمزيد من المعلومات)، ولكن يجب عليك مراجعة كود النموذج والمؤلف لتجنب تنفيذ التعليمات البرمجية الضارة على جهازك. قم بتعيين `trust_remote_code=True` لاستخدام نموذج مع كود مخصص: + +```py +from transformers import AutoModelForImageClassification + +model = AutoModelForImageClassification.from_pretrained("sgugger/custom-resnet50d", trust_remote_code=True) +``` + +يُنصح بشدة أيضًا بتمرير علامة التجزئة للالتزام كـ `revision` للتأكد من أن مؤلف النماذج لم +قم بتحديث الكود بخطوط جديدة ضارة (ما لم تثق تمامًا بمؤلفي النماذج). + +```py +commit_hash = "ed94a7c6247d8aedce4647f00f20de6875b5b292" +model = AutoModelForImageClassification.from_pretrained( + "sgugger/custom-resnet50d"، trust_remote_code=True، revision=commit_hash +) +``` + +لاحظ أنه عند تصفح سجل الالتزام لمستودع النموذج على Hub، هناك زر لنسخ علامة التجزئة للالتزام بسهولة +الالتزام. \ No newline at end of file From 0533b0845d840fc79cdd1b9e6fbd861ecb67d909 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:13 +0300 Subject: [PATCH 013/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/llm=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/llm_tutorial.md | 233 +++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 docs/source/ar/llm_tutorial.md diff --git a/docs/source/ar/llm_tutorial.md b/docs/source/ar/llm_tutorial.md new file mode 100644 index 00000000000000..a34b2bc539fc6d --- /dev/null +++ b/docs/source/ar/llm_tutorial.md @@ -0,0 +1,233 @@ +# التوليد باستخدام LLMs + +[[open-in-colab]] + +تعد LLMs، أو نماذج اللغة الكبيرة، المكون الرئيسي وراء توليد النص. وباختصار، تتكون من نماذج محول كبيرة مسبقة التدريب تم تدريبها للتنبؤ بالكلمة التالية (أو، بشكل أكثر دقة، الرمز) بالنظر إلى بعض النص المدخل. نظرًا لأنها تتنبأ برمز واحد في كل مرة، يجب عليك القيام بشيء أكثر تفصيلاً لتوليد جمل جديدة بخلاف مجرد استدعاء النموذج - يجب عليك إجراء التوليد التلقائي. + +التوليد التلقائي هو إجراء وقت الاستدلال الذي يستدعي النموذج بشكل تكراري مع الإخراج الذي تم إنشاؤه، بالنظر إلى بعض الإدخالات الأولية. في 🤗 Transformers، يتم التعامل مع هذا بواسطة طريقة [`~generation.GenerationMixin.generate`]، والتي تتوفر لجميع النماذج ذات القدرات التوليدية. + +سيوضح هذا البرنامج التعليمي كيفية: + +* توليد النص باستخدام LLM +* تجنب الوقوع في الأخطاء الشائعة +* الخطوات التالية لمساعدتك في الاستفادة القصوى من LLM الخاص بك + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers bitsandbytes>=0.39.0 -q +``` + +## توليد النص + +يأخذ نموذج اللغة المدرب لـ [نمذجة اللغة السببية](tasks/language_modeling) تسلسل رموز النص كإدخال ويعيد توزيع الاحتمالية للرمز التالي. + + +
+ +
"Forward pass of an LLM"
+
+ +هناك جانب بالغ الأهمية في التوليد التلقائي باستخدام LLMs وهو كيفية اختيار الرمز التالي من توزيع الاحتمالية هذا. كل شيء مسموح به في هذه الخطوة طالما أنك تنتهي برمز للتكرار التالي. وهذا يعني أنه يمكن أن يكون بسيطًا مثل اختيار الرمز الأكثر احتمالًا من توزيع الاحتمالية أو معقدًا مثل تطبيق عشرات التحولات قبل أخذ العينات من التوزيع الناتج. + + +
+ +
"Autoregressive generation iteratively selects the next token from a probability distribution to generate text"
+
+ +تتكرر العملية الموضحة أعلاه بشكل تكراري حتى يتم الوصول إلى شرط التوقف. في الوضع المثالي، يحدد النموذج شرط التوقف، والذي يجب أن يتعلم عند إخراج رمز نهاية التسلسل (`EOS`). إذا لم يكن الأمر كذلك، يتوقف التوليد عند الوصول إلى طول أقصى محدد مسبقًا. + +من الضروري إعداد خطوة اختيار الرمز وشرط التوقف بشكل صحيح لجعل نموذجك يتصرف كما تتوقع في مهمتك. ولهذا السبب لدينا [`~generation.GenerationConfig`] ملف مرتبط بكل نموذج، والذي يحتوي على معلمة توليدية افتراضية جيدة ويتم تحميله جنبًا إلى جنب مع نموذجك. + +دعنا نتحدث عن الكود! + + +دعنا نتحدث عن الكود! + + + +إذا كنت مهتمًا بالاستخدام الأساسي لـ LLM، فإن واجهة [`Pipeline`](pipeline_tutorial) عالية المستوى لدينا هي نقطة انطلاق رائعة. ومع ذلك، غالبًا ما تتطلب LLMs ميزات متقدمة مثل التكميم والتحكم الدقيق في خطوة اختيار الرمز، والتي يتم تنفيذها بشكل أفضل من خلال [`~generation.GenerationMixin.generate`]. التوليد التلقائي باستخدام LLMs كثيف الاستخدام للموارد ويجب تنفيذه على وحدة معالجة الرسومات للحصول على الإنتاجية الكافية. + + + +أولاً، تحتاج إلى تحميل النموذج. + +```py +>>> from transformers import AutoModelForCausalLM + +>>> model = AutoModelForCausalLM.from_pretrained( +... "mistralai/Mistral-7B-v0.1", device_map="auto", load_in_4bit=True +... ) +``` + +ستلاحظ وجود علمين في مكالمة `from_pretrained`: + + - `device_map` يضمن انتقال النموذج إلى وحدة معالجة الرسومات (GPU) الخاصة بك + - `load_in_4bit` يطبق [4-bit dynamic quantization](main_classes/quantization) لخفض متطلبات الموارد بشكل كبير + +هناك طرق أخرى لتهيئة نموذج، ولكن هذا خط أساس جيد للبدء باستخدام LLM. + +بعد ذلك، تحتاج إلى معالجة إدخال النص الخاص بك باستخدام [مصنف الرموز](tokenizer_summary). + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1", padding_side="left") +>>> model_inputs = tokenizer(["A list of colors: red, blue"], return_tensors="pt").to("cuda") +``` + +يحتوي متغير `model_inputs` على إدخال النص المعالج، بالإضافة إلى قناع الاهتمام. في حين أن [`~generation.GenerationMixin.generate`] تبذل قصارى جهدها لاستنتاج قناع الاهتمام عندما لا يتم تمريره، نوصي بتمريره كلما أمكن ذلك للحصول على نتائج مثالية. + +بعد توكين المدخلات، يمكنك استدعاء طريقة [`~generation.GenerationMixin.generate`] لإرجاع الرموز المولدة. يجب بعد ذلك تحويل الرموز المولدة إلى نص قبل الطباعة. + +```py +>>> generated_ids = model.generate(**model_inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'A list of colors: red, blue, green, yellow, orange, purple, pink,' +``` + +أخيرًا، لا تحتاج إلى القيام بذلك تسلسل واحد في كل مرة! يمكنك دمج إدخالاتك، والتي ستعمل على تحسين الإنتاجية بشكل كبير بتكلفة صغيرة في الكمون والذاكرة. كل ما عليك التأكد منه هو أنك تقوم بتوسيط إدخالاتك بشكل صحيح (المزيد حول ذلك أدناه). + +```py +>>> tokenizer.pad_token = tokenizer.eos_token # Most LLMs don't have a pad token by default +>>> model_inputs = tokenizer( +... ["A list of colors: red, blue", "Portugal is"], return_tensors="pt", padding=True +... ).to("cuda") +>>> generated_ids = model.generate(**model_inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +['A list of colors: red, blue, green, yellow, orange, purple, pink,', +'Portugal is a country in southwestern Europe, on the Iber'] +``` + +وهذا كل شيء! في بضع سطور من التعليمات البرمجية، يمكنك تسخير قوة LLM. + +## الأخطاء الشائعة + +هناك العديد من [استراتيجيات التوليد](generation_strategies)، وفي بعض الأحيان قد لا تكون القيم الافتراضية مناسبة لحالتك الاستخدام. إذا لم تكن الإخراج الخاصة بك متوافقة مع ما تتوقعه، فقد قمنا بإنشاء قائمة بأكثر الأخطاء الشائعة وكيفية تجنبها. + +```py +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1") +>>> tokenizer.pad_token = tokenizer.eos_token # Most LLMs don't have a pad token by default +>>> model = AutoModelForCausalLM.from_pretrained( +... "mistralai/Mistral-7B-v0.1", device_map="auto", load_in_4bit=True +... ) +``` + +### الإخراج المولد قصير جدًا/طويل جدًا + +إذا لم يتم تحديده في [`~generation.GenerationConfig`] الملف، `generate` يعيد ما يصل إلى 20 رمزًا بشكل افتراضي. نوصي بشدة بتعيين `max_new_tokens` يدويًا في مكالمة `generate` للتحكم في العدد الأقصى من الرموز الجديدة التي يمكن أن يعيدها. ضع في اعتبارك أن LLMs (بشكل أكثر دقة، [نماذج فك التشفير فقط](https://huggingface.co/learn/nlp-course/chapter1/6؟fw=pt)) تعيد أيضًا موجه الإدخال كجزء من الإخراج. +```py +>>> model_inputs = tokenizer(["A sequence of numbers: 1, 2"], return_tensors="pt").to("cuda") + +>>> # By default, the output will contain up to 20 tokens +>>> generated_ids = model.generate(**model_inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'A sequence of numbers: 1, 2, 3, 4, 5' + +>>> # Setting `max_new_tokens` allows you to control the maximum length +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=50) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'A sequence of numbers: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,' +``` + +### وضع التوليد غير الصحيح + +بشكل افتراضي، وما لم يتم تحديده في [`~generation.GenerationConfig`] الملف، `generate` يحدد الرمز الأكثر احتمالًا في كل تكرار (فك تشفير جشع). اعتمادًا على مهمتك، قد يكون هذا غير مرغوب فيه؛ تستفيد المهام الإبداعية مثل برامج الدردشة أو كتابة مقال من أخذ العينات. من ناحية أخرى، تستفيد المهام المستندة إلى الإدخال مثل نسخ النص الصوتي أو الترجمة من فك التشفير الجشع. قم بتمكين العينات باستخدام `do_sample=True`، ويمكنك معرفة المزيد حول هذا الموضوع في [تدوينة المدونة](https://huggingface.co/blog/how-to-generate). + +```py +>>> # Set seed or reproducibility -- you don't need this unless you want full reproducibility +>>> from transformers import set_seed +>>> set_seed(42) + +>>> model_inputs = tokenizer(["I am a cat."], return_tensors="pt").to("cuda") + +>>> # LLM + greedy decoding = repetitive, boring output +>>> generated_ids = model.generate(**model_inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'I am a cat. I am a cat. I am a cat. I am a cat' + +>>> # With sampling, the output becomes more creative! +>>> generated_ids = model.generate(**model_inputs, do_sample=True) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'I am a cat. Specifically, I am an indoor-only cat. I' +``` + +### جانب التوسيط غير الصحيح + +LLMs هي [معماريات فك التشفير فقط](https://huggingface.co/learn/nlp-course/chapter1/6؟fw=pt)، مما يعني أنها تستمر في التكرار على موجه الإدخال الخاص بك. إذا لم يكن لإدخالاتك نفس الطول، فيجب توسيطها. نظرًا لأن LLMs غير مدربة للاستمرار من رموز التوسيط، يجب توسيط الإدخال الخاص بك من اليسار. تأكد من عدم نسيان تمرير قناع الاهتمام إلى التوليد! + +```py +>>> # The tokenizer initialized above has right-padding active by default: the 1st sequence, +>>> # which is shorter, has padding on the right side. Generation fails to capture the logic. +>>> model_inputs = tokenizer( +... ["1, 2, 3", "A, B, C, D, E"], padding=True, return_tensors="pt" +... ).to("cuda") +>>> generated_ids = model.generate(**model_inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'1, 2, 33333333333' + +>>> # With left-padding, it works as expected! +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1", padding_side="left") +>>> tokenizer.pad_token = tokenizer.eos_token # Most LLMs don't have a pad token by default +>>> model_inputs = tokenizer( +... ["1, 2, 3", "A, B, C, D, E"], padding=True, return_tensors="pt" +... ).to("cuda") +>>> generated_ids = model.generate(**model_inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +'1, 2, 3, 4, 5, 6,' +``` + +### موجه غير صحيح + +تتوقع بعض النماذج والمهام تنسيق موجه الإدخال المحدد للعمل بشكل صحيح. عندما لا يتم تطبيق هذا التنسيق، فستحصل على تدهور صامت في الأداء: يعمل النموذج بشكل جيد، ولكنه ليس جيدًا كما لو كنت تتبع الموجه المتوقع. تتوفر معلومات إضافية حول التوجيه، بما في ذلك النماذج والمهام التي تحتاج إلى توخي الحذر، في [الدليل](tasks/prompting). دعنا نرى مثالاً باستخدام LLM للدردشة، والذي يستخدم [قالب الدردشة](chat_templating): +```python +>>> tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-alpha") +>>> model = AutoModelForCausalLM.from_pretrained( +... "HuggingFaceH4/zephyr-7b-alpha", device_map="auto", load_in_4bit=True +... ) +>>> set_seed(0) +>>> prompt = """How many helicopters can a human eat in one sitting? Reply as a thug.""" +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda") +>>> input_length = model_inputs.input_ids.shape[1] +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=20) +>>> print(tokenizer.batch_decode(generated_ids[:, input_length:], skip_special_tokens=True)[0]) +"I'm not a thug, but i can tell you that a human cannot eat" +>>> # Oh no, it did not follow our instruction to reply as a thug! Let's see what happens when we write +>>> # a better prompt and use the right template for this model (through `tokenizer.apply_chat_template`) + +>>> set_seed(0) +>>> messages = [ +... { +... "role": "system", +... "content": "You are a friendly chatbot who always responds in the style of a thug", +... }, +... {"role": "user", "content": "How many helicopters can a human eat in one sitting?"}, +... ] +>>> model_inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to("cuda") +>>> input_length = model_inputs.shape[1] +>>> generated_ids = model.generate(model_inputs, do_sample=True, max_new_tokens=20) +>>> print(tokenizer.batch_decode(generated_ids[:, input_length:], skip_special_tokens=True)[0]) +'None, you thug. How bout you try to focus on more useful questions?' +>>> # As we can see, it followed a proper thug style 😎 +``` + +## موارد إضافية + +في حين أن عملية التوليد التلقائي بسيطة نسبيًا، فإن الاستفادة القصوى من LLM الخاص بك يمكن أن تكون مهمة صعبة لأن هناك العديد من الأجزاء المتحركة. للخطوات التالية لمساعدتك في الغوص بشكل أعمق في استخدام LLM وفهمه: + +### استخدام متقدم للتوليد + +1. دليل حول كيفية [التحكم في طرق التوليد المختلفة](generation_strategies)، وكيفية إعداد ملف تكوين التوليد، وكيفية بث الإخراج؛ +2. [تسريع توليد النص](llm_optims)؛ +3. [قوالب موجهات للدردشة LLMs](chat_ \ No newline at end of file From 69747c256064fbcb5f099b62267b6cad1d303625 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:15 +0300 Subject: [PATCH 014/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fsharing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_sharing.md | 228 ++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 docs/source/ar/model_sharing.md diff --git a/docs/source/ar/model_sharing.md b/docs/source/ar/model_sharing.md new file mode 100644 index 00000000000000..babc02ce1f4ba8 --- /dev/null +++ b/docs/source/ar/model_sharing.md @@ -0,0 +1,228 @@ +# مشاركة نموذج + +أظهرت آخر درسين تعليميين كيفية ضبط نموذج باستخدام PyTorch و Keras و 🤗 Accelerate لعمليات التهيئة الموزعة. والخطوة التالية هي مشاركة نموذجك مع المجتمع! في Hugging Face، نؤمن بالمشاركة المفتوحة للمعرفة والموارد من أجل إتاحة الذكاء الاصطناعي للجميع. ونشجعك على التفكير في مشاركة نموذجك مع المجتمع لمساعدة الآخرين على توفير الوقت والموارد. + +في هذا الدرس، ستتعلم طريقتين لمشاركة نموذج مدرب أو مضبوط على [Model Hub](https://huggingface.co/models): + +- قم بالدفع البرمجي لملفاتك إلى Hub. +- قم بسحب وإفلات ملفاتك إلى Hub باستخدام الواجهة web. + + + + + +لمشاركة نموذج مع المجتمع، تحتاج إلى حساب على [huggingface.co](https://huggingface.co/join). يمكنك أيضًا الانضمام إلى منظمة موجودة أو إنشاء منظمة جديدة. + + + +## ميزات المستودع + +يعمل كل مستودع على Model Hub مثل مستودع GitHub النموذجي. تقدم مستودعاتنا التحكم في الإصدار وتاريخ الالتزام والقدرة على تصور الاختلافات. + +يستند التحكم في إصدار Model Hub المدمج إلى git و [git-lfs](https://git-lfs.github.com/). وبعبارة أخرى، يمكنك التعامل مع نموذج واحد كمستودع واحد، مما يمكّن من زيادة التحكم في الوصول والقابلية للتطوير. يسمح التحكم في الإصدار بتنقيحات، وهي طريقة لتثبيت إصدار محدد من نموذج باستخدام التجزئة أو العلامة أو الفرع. + +ونتيجة لذلك، يمكنك تحميل إصدار محدد من النموذج باستخدام معلمة "revision": + +```py +>>> model = AutoModel.from_pretrained( +... "julien-c/EsperBERTo-small", revision="v2.0.1" # اسم العلامة، أو اسم الفرع، أو تجزئة الالتزام +... ) +``` + +من السهل أيضًا تحرير الملفات في مستودع، ويمكنك عرض سجل الالتزام بالإضافة إلى الاختلاف: + +![vis_diff](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/vis_diff.png) + +## الإعداد + +قبل مشاركة نموذج على Hub، ستحتاج إلى بيانات اعتماد Hugging Face الخاصة بك. إذا كان لديك حق الوصول إلى المحطة الطرفية، فقم بتشغيل الأمر التالي في بيئة افتراضية حيث تم تثبيت 🤗 Transformers. سيقوم هذا الأمر بتخزين رمز الوصول الخاص بك في مجلد ذاكرة التخزين المؤقت لـ Hugging Face (`~/.cache/` بشكل افتراضي): + +```bash +huggingface-cli login +``` + +إذا كنت تستخدم دفتر ملاحظات مثل Jupyter أو Colaboratory، فتأكد من تثبيت مكتبة [`huggingface_hub`](https://huggingface.co/docs/hub/adding-a-library). تسمح لك هذه المكتبة بالتفاعل برمجيًا مع Hub. + +```bash +pip install huggingface_hub +``` + +ثم استخدم `notebook_login` لتسجيل الدخول إلى Hub، واتبع الرابط [هنا](https://huggingface.co/settings/token) لإنشاء رمز للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحويل نموذج لجميع الأطر +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحويل نموذج لجميع الأطر + +لضمان إمكانية استخدام نموذجك من قبل شخص يعمل بإطار عمل مختلف، نوصي بتحويل وتحميل نموذجك باستخدام نقاط التحقق من PyTorch و TensorFlow. في حين أن المستخدمين لا يزال بإمكانهم تحميل نموذجك من إطار عمل مختلف إذا تخطيت هذه الخطوة، إلا أنه سيكون أبطأ لأن 🤗 Transformers ستحتاج إلى تحويل نقطة التحقق أثناء التنقل. + +من السهل تحويل نقطة التحقق لإطار عمل آخر. تأكد من تثبيت PyTorch و TensorFlow (راجع [هنا](installation) لتعليمات التثبيت)، ثم ابحث عن النموذج المحدد لمهمتك في الإطار الآخر. + + + +حدد `from_tf=True` لتحويل نقطة تحقق من TensorFlow إلى PyTorch: + +```py +>>> pt_model = DistilBertForSequenceClassification.from_pretrained("path/to/awesome-name-you-picked", from_tf=True) +>>> pt_model.save_pretrained("path/to/awesome-name-you-picked") +``` + + +حدد `from_pt=True` لتحويل نقطة تحقق من PyTorch إلى TensorFlow: + +```py +>>> tf_model = TFDistilBertForSequenceClassification.from_pretrained("path/to/awesome-name-you-picked", from_pt=True) +``` + +بعد ذلك، يمكنك حفظ نموذج TensorFlow الجديد بنقطة التحقق الجديدة: + +```py +>>> tf_model.save_pretrained("path/to/awesome-name-you-picked") +``` + + +إذا كان النموذج متاحًا في Flax، فيمكنك أيضًا تحويل نقطة تحقق من PyTorch إلى Flax: + +```py +>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained( +... "path/to/awesome-name-you-picked", from_pt=True +... ) +``` + + + +## دفع نموذج أثناء التدريب + + + + + +مشاركة نموذج على Hub بسيطة مثل إضافة معلمة أو استدعاء رد اتصال إضافي. تذكر من درس [التدريب الدقيق](training)، أن فئة [`TrainingArguments`] هي المكان الذي تحدد فيه فرط المعلمات وخيارات التدريب الإضافية. تشمل إحدى خيارات التدريب هذه القدرة على دفع نموذج مباشرة إلى Hub. قم بتعيين `push_to_hub=True` في [`TrainingArguments`]: + +```py +>>> training_args = TrainingArguments(output_dir="my-awesome-model", push_to_hub=True) +``` + +مرر حجج التدريب كالمعتاد إلى [`Trainer`]: + +```py +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=small_train_dataset, +... eval_dataset=small_eval_dataset, +... compute_metrics=compute_metrics, +... ) +``` + +بعد ضبط نموذجك، اتصل بـ [`~transformers.Trainer.push_to_hub`] على [`Trainer`] لدفع النموذج المدرب إلى Hub. سوف تضيف 🤗 Transformers تلقائيًا فرط معلمات التدريب ونتائج التدريب وإصدارات الإطار إلى بطاقة النموذج الخاصة بك! + +```py +>>> trainer.push_to_hub() +``` + + +شارك نموذجًا على Hub باستخدام [`PushToHubCallback`]. في دالة [`PushToHubCallback`], أضف: + +- دليل إخراج لنموذجك. +- رموز. +- `hub_model_id`، والذي هو اسم مستخدم Hub واسم النموذج الخاص بك. + +```py +>>> from transformers import PushToHubCallback + +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="./your_model_save_path", tokenizer=tokenizer, hub_model_id="your-username/my-awesome-model" +... ) +``` + +أضف الاستدعاء إلى [`fit`](https://keras.io/api/models/model_training_apis/)، وسيقوم 🤗 Transformers بدفع النموذج المدرب إلى Hub: + +```py +>>> model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback) +``` + + + +## استخدام دالة `push_to_hub` + +يمكنك أيضًا استدعاء `push_to_hub` مباشرة على نموذجك لتحميله إلى Hub. + +حدد اسم نموذجك في `push_to_hub`: + +```py +>>> pt_model.push_to_hub("my-awesome-model") +``` + +ينشئ هذا مستودعًا تحت اسم المستخدم الخاص بك باسم نموذج `my-awesome-model`. يمكن للمستخدمين الآن تحميل نموذجك باستخدام دالة `from_pretrained`: + +```py +>>> from transformers import AutoModel + +>>> model = AutoModel.from_pretrained("your_username/my-awesome-model") +``` +```py +>>> from transformers import AutoModel + +>>> model = AutoModel.from_pretrained("your_username/my-awesome-model") +``` + +إذا كنت تنتمي إلى منظمة وتريد دفع نموذجك تحت اسم المنظمة بدلاً من ذلك، فما عليك سوى إضافته إلى `repo_id`: + +```py +>>> pt_model.push_to_hub("my-awesome-org/my-awesome-model") +``` + +يمكن أيضًا استخدام دالة `push_to_hub` لإضافة ملفات أخرى إلى مستودع النماذج. على سبيل المثال، أضف رموزًا إلى مستودع نموذج: + +```py +>>> tokenizer.push_to_hub("my-awesome-model") +``` + +أو ربما تريد إضافة إصدار TensorFlow من نموذج PyTorch المضبوط: + +```py +>>> tf_model.push_to_hub("my-awesome-model") +``` + +الآن عند الانتقال إلى ملفك الشخصي على Hugging Face، يجب أن ترى مستودع النماذج الذي أنشأته حديثًا. سيؤدي النقر فوق علامة التبويب **Files** إلى عرض جميع الملفات التي قمت بتحميلها في المستودع. + +للحصول على مزيد من التفاصيل حول كيفية إنشاء الملفات وتحميلها إلى مستودع، راجع وثائق Hub [هنا](https://huggingface.co/docs/hub/how-to-upstream). + +## التحميل باستخدام الواجهة web + +يمكن للمستخدمين الذين يفضلون نهج عدم الترميز تحميل نموذج من خلال واجهة Hub web. قم بزيارة [huggingface.co/new](https://huggingface.co/new) لإنشاء مستودع جديد: + +![new_model_repo](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/new_model_repo.png) + +من هنا، أضف بعض المعلومات حول نموذجك: + +- حدد **مالك** المستودع. يمكن أن يكون هذا أنت أو أي من المنظمات التي تنتمي إليها. +- اختر اسمًا لنموذجك، والذي سيكون أيضًا اسم المستودع. +- اختر ما إذا كان نموذجك عامًا أم خاصًا. +- حدد ترخيص الاستخدام لنموذجك. + +الآن انقر فوق علامة التبويب **Files** ثم انقر فوق الزر **Add file** لإضافة ملف جديد إلى مستودعك. ثم اسحب وأسقط ملفًا لتحميله وأضف رسالة الالتزام. + +![upload_file](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/upload_file.png) + +## إضافة بطاقة نموذج + +للتأكد من فهم المستخدمين لقدرات نموذجك وقيوده وتحيزاته المحتملة واعتباراته الأخلاقية، يرجى إضافة بطاقة نموذج إلى مستودعك. يتم تعريف بطاقة النموذج في ملف `README.md`. يمكنك إضافة بطاقة نموذج عن طريق: + +* قم بإنشاء ملف `README.md` وتحميله يدويًا. +* انقر فوق الزر **Edit model card** في مستودع نموذجك. + +الق نظرة على بطاقة [DistilBert](https://huggingface.co/distilbert/distilbert-base-uncased) للحصول على مثال جيد على نوع المعلومات التي يجب أن تتضمنها بطاقة النموذج. للحصول على مزيد من التفاصيل حول الخيارات الأخرى التي يمكنك التحكم فيها في ملف `README.md` مثل البصمة الكربونية للنموذج أو أمثلة الأداة، راجع الوثائق [هنا](https://huggingface.co/docs/hub/models-cards). \ No newline at end of file From 904708474aa7991b7ef9db0f471c1c8babe3abb8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:16 +0300 Subject: [PATCH 015/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/fast=5Ftokenizers.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/fast_tokenizers.md | 51 +++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/source/ar/fast_tokenizers.md diff --git a/docs/source/ar/fast_tokenizers.md b/docs/source/ar/fast_tokenizers.md new file mode 100644 index 00000000000000..8d97179016eb82 --- /dev/null +++ b/docs/source/ar/fast_tokenizers.md @@ -0,0 +1,51 @@ +# استخدام المحللون اللغويون من 🤗 Tokenizers + +يعتمد [`PreTrainedTokenizerFast`] على مكتبة [🤗 Tokenizers](https://huggingface.co/docs/tokenizers). يمكن تحميل المحللين اللغويين الذين تم الحصول عليهم من مكتبة 🤗 Tokenizers ببساطة شديدة في 🤗 Transformers. + +قبل الدخول في التفاصيل، دعونا نبدأ أولاً بإنشاء محلل لغوي وهمي في بضع سطور: + +```python +>>> from tokenizers import Tokenizer +>>> from tokenizers.models import BPE +>>> from tokenizers.trainers import BpeTrainer +>>> from tokenizers.pre_tokenizers import Whitespace + +>>> tokenizer = Tokenizer(BPE(unk_token="[UNK]")) +>>> trainer = BpeTrainer(special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"]) + +>>> tokenizer.pre_tokenizer = Whitespace() +>>> files = [...] +>>> tokenizer.train(files, trainer) +``` + +الآن لدينا محلل لغوي مدرب على الملفات التي حددناها. يمكننا إما الاستمرار في استخدامه في وقت التشغيل هذا، أو حفظه في ملف JSON لإعادة استخدامه لاحقًا. + +## التحميل مباشرة من كائن المحلل اللغوي + +دعونا نرى كيف يمكننا الاستفادة من كائن المحلل اللغوي هذا في مكتبة 🤗 Transformers. تسمح فئة [`PreTrainedTokenizerFast`] بالتشغيل الفوري، من خلال قبول كائن *المحلل اللغوي* الذي تم إنشاؤه كحجة: + +```python +>>> from transformers import PreTrainedTokenizerFast + +>>> fast_tokenizer = PreTrainedTokenizerFast(tokenizer_object=tokenizer) +``` + +يمكن الآن استخدام هذا الكائن مع جميع الطرق التي تشترك فيها المحللات اللغوية لـ 🤗 Transformers! انتقل إلى [صفحة المحلل اللغوي](main_classes/tokenizer) لمزيد من المعلومات. + +## التحميل من ملف JSON + +لتحميل محلل لغوي من ملف JSON، دعونا نبدأ أولاً بحفظ محللنا اللغوي: + +```python +>>> tokenizer.save("tokenizer.json") +``` + +يمكن تمرير المسار الذي حفظنا به هذا الملف إلى طريقة تهيئة [`PreTrainedTokenizerFast`] باستخدام معلمة `tokenizer_file`: + +```python +>>> from transformers import PreTrainedTokenizerFast + +>>> fast_tokenizer = PreTrainedTokenizerFast(tokenizer_file="tokenizer.json") +``` + +يمكن الآن استخدام هذا الكائن مع جميع الطرق التي تشترك فيها المحللات اللغوية لـ 🤗 Transformers! انتقل إلى [صفحة المحلل اللغوي](main_classes/tokenizer) لمزيد من المعلومات. \ No newline at end of file From a6247282b684309f1fa11c51a2c92a4b0667f8f0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:18 +0300 Subject: [PATCH 016/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/multilingual.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/multilingual.md | 160 +++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 docs/source/ar/multilingual.md diff --git a/docs/source/ar/multilingual.md b/docs/source/ar/multilingual.md new file mode 100644 index 00000000000000..834fbcbf580999 --- /dev/null +++ b/docs/source/ar/multilingual.md @@ -0,0 +1,160 @@ +# النماذج متعددة اللغات للاستنتاج + +هناك العديد من النماذج متعددة اللغات في مكتبة 🤗 Transformers، وتختلف طريقة استخدامها للاستنتاج عن النماذج أحادية اللغة. ولكن ليس كل استخدام النماذج متعددة اللغات مختلف. فبعض النماذج، مثل [google-bert/bert-base-multilingual-uncased](https://huggingface.co/google-bert/bert-base-multilingual-uncased)، يمكن استخدامها مثل النموذج أحادي اللغة. سيُظهر لك هذا الدليل كيفية استخدام النماذج متعددة اللغات التي تختلف طريقة استخدامها للاستنتاج. + +## XLM + +يحتوي XLM على عشر نقاط تفتيش مختلفة، واحدة منها فقط أحادية اللغة. ويمكن تقسيم نقاط تفتيش النماذج التسع المتبقية إلى فئتين: نقاط التفتيش التي تستخدم تضمينات اللغة وتلك التي لا تستخدمها. + +### XLM مع تضمينات اللغة + +تستخدم النماذج التالية من XLM تضمينات اللغة لتحديد اللغة المستخدمة في الاستنتاج: + +- `FacebookAI/xlm-mlm-ende-1024` (نمذجة اللغة المقنعة، الإنجليزية-الألمانية) +- `FacebookAI/xlm-mlm-enfr-1024` (نمذجة اللغة المقنعة، الإنجليزية-الفرنسية) +- `FacebookAI/xlm-mlm-enro-1024` (نمذجة اللغة المقنعة، الإنجليزية-الرومانية) +- `FacebookAI/xlm-mlm-xnli15-1024` (نمذجة اللغة المقنعة، لغات XNLI) +- `FacebookAI/xlm-mlm-tlm-xnli15-1024` (نمذجة اللغة المقنعة + الترجمة، لغات XNLI) +- `FacebookAI/xlm-clm-enfr-1024` (نمذجة اللغة السببية، الإنجليزية-الفرنسية) +- `FacebookAI/xlm-clm-ende-1024` (نمذجة اللغة السببية، الإنجليزية-الألمانية) + +تُمثل تضمينات اللغة على شكل مصفوفة بنفس شكل `input_ids` التي يتم تمريرها إلى النموذج. وتعتمد القيم في هذه المصفوفات على اللغة المستخدمة ويتم تحديدها بواسطة سمات المحلل `lang2id` و `id2lang`. + +في هذا المثال، قم بتحميل نقطة تفتيش `FacebookAI/xlm-clm-enfr-1024` (نمذجة اللغة السببية، الإنجليزية-الفرنسية): + +```py +>>> import torch +>>> from transformers import XLMTokenizer, XLMWithLMHeadModel + +>>> tokenizer = XLMTokenizer.from_pretrained("FacebookAI/xlm-clm-enfr-1024") +>>> model = XLMWithLMHeadModel.from_pretrained("FacebookAI/xlm-clm-enfr-1024") +``` + +تُظهر سمة `lang2id` في المحلل اللغات وأرقام تعريفها في هذا النموذج: + +```py +>>> print(tokenizer.lang2id) +{'en': 0, 'fr': 1} +``` + +بعد ذلك، قم بإنشاء مثال على المدخلات: + +```py +>>> input_ids = torch.tensor([tokenizer.encode("Wikipedia was used to")]) # batch size of 1 +``` + +قم بتعيين معرف اللغة إلى `"en"` واستخدمه لتحديد تضمين اللغة. وتضمين اللغة عبارة عن مصفوفة مملوءة بـ `0` لأن هذا هو معرف اللغة الإنجليزية. يجب أن تكون هذه المصفوفة بنفس حجم `input_ids`. + +```py +>>> language_id = tokenizer.lang2id["en"] # 0 +>>> langs = torch.tensor([language_id] * input_ids.shape[1]) # torch.tensor([0, 0, 0, ..., 0]) + +>>> # نقوم بإعادة تشكيلها لتكون بالحجم (batch_size، sequence_length) +>>> langs = langs.view(1, -1) # الآن بالحجم [1، sequence_length] (لدينا batch size تساوي 1) +``` + +الآن يمكنك تمرير `input_ids` وتضمين اللغة إلى النموذج: + +```py +>>> outputs = model(input_ids, langs=langs) +``` + +يمكن لنص البرنامج النصي [run_generation.py](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-generation/run_generation.py) توليد النص باستخدام تضمينات اللغة مع نقاط تفتيش `xlm-clm`. + +### XLM بدون تضمينات اللغة + +النماذج التالية من XLM لا تتطلب تضمينات اللغة أثناء الاستنتاج: + +- `FacebookAI/xlm-mlm-17-1280` (نمذجة اللغة المقنعة، 17 لغة) +- `FacebookAI/xlm-mlm-100-1280` (نمذجة اللغة المقنعة، 100 لغة) + +تُستخدم هذه النماذج لتمثيل الجمل العامة، على عكس نقاط تفتيش XLM السابقة. + +## BERT + +يمكن استخدام النماذج التالية من BERT للمهام متعددة اللغات: + +- `google-bert/bert-base-multilingual-uncased` (نمذجة اللغة المقنعة + التنبؤ بالجملة التالية، 102 لغة) +- `google-bert/bert-base-multilingual-cased` (نمذجة اللغة المقنعة + التنبؤ بالجملة التالية، 104 لغات) + +لا تتطلب هذه النماذج تضمينات اللغة أثناء الاستنتاج. يجب أن تحدد اللغة من السياق وتستنتج وفقاً لذلك. + +## XLM-RoBERTa + +يمكن استخدام النماذج التالية من XLM-RoBERTa للمهام متعددة اللغات: + +- `FacebookAI/xlm-roberta-base` (نمذجة اللغة المقنعة، 100 لغة) +- `FacebookAI/xlm-roberta-large` (نمذجة اللغة المقنعة، 100 لغة) + +تم تدريب XLM-RoBERTa على 2.5 تيرابايت من بيانات CommonCrawl الجديدة والمحسنة في 100 لغة. ويوفر مكاسب قوية على النماذج متعددة اللغات التي تم إصدارها سابقاً مثل mBERT أو XLM في مهام المصب مثل التصنيف، ووضع العلامات التسلسلية، والأسئلة والأجوبة. + +## M2M100 + +يمكن استخدام النماذج التالية من M2M100 للترجمة متعددة اللغات: + +- `facebook/m2m100_418M` (الترجمة) +- `facebook/m2m100_1.2B` (الترجمة) + +في هذا المثال، قم بتحميل نقطة تفتيش `facebook/m2m100_418M` لترجمة النص من الصينية إلى الإنجليزية. يمكنك تعيين اللغة المصدر في المحلل: + +```py +>>> from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer + +>>> en_text = "Do not meddle in the affairs of wizards, for they are subtle and quick to anger." +>>> chinese_text = "不要插手巫師的事務, 因為他們是微妙的, 很快就會發怒." + +>>> tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M", src_lang="zh") +>>> model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M") +``` + +قم بتحليل النص: + +```py +>>> encoded_zh = tokenizer(chinese_text, return_tensors="pt") +``` + +يجبر M2M100 معرف اللغة الهدف كأول رمز مولد للترجمة إلى لغة الهدف. قم بتعيين `forced_bos_token_id` إلى `en` في طريقة `generate` للترجمة إلى الإنجليزية: + +```py +>>> generated_tokens = model.generate(**encoded_zh, forced_bos_token_id=tokenizer.get_lang_id("en")) +>>> tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +'Do not interfere with the matters of the witches, because they are delicate and will soon be angry.' +``` + +## MBart + +يمكن استخدام النماذج التالية من MBart للترجمة متعددة اللغات: + +- `facebook/mbart-large-50-one-to-many-mmt` (الترجمة الآلية متعددة اللغات من واحد إلى كثير، 50 لغة) +- `facebook/mbart-large-50-many-to-many-mmt` (الترجمة الآلية متعددة اللغات من كثير إلى كثير، 50 لغة) +- `facebook/mbart-large-50-many-to-one-mmt` (الترجمة الآلية متعددة اللغات من كثير إلى واحد، 50 لغة) +- `facebook/mbart-large-50` (الترجمة متعددة اللغات، 50 لغة) +- `facebook/mbart-large-cc25` + +في هذا المثال، قم بتحميل نقطة تفتيش `facebook/mbart-large-50-many-to-many-mmt` لترجمة النص من الفنلندية إلى الإنجليزية. يمكنك تعيين اللغة المصدر في المحلل: + +```py +>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM + +>>> en_text = "Do not meddle in the affairs of wizards, for they are subtle and quick to anger." +>>> fi_text = "Älä sekaannu velhojen asioihin, sillä ne ovat hienovaraisia ja nopeasti vihaisia." + +>>> tokenizer = AutoTokenizer.from_pretrained("facebook/mbart-large-50-many-to-many-mmt", src_lang="fi_FI") +>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/mbart-large-50-many-to-many-mmt") +``` + +قم بتحليل النص: + +```py +>>> encoded_en = tokenizer(en_text, return_tensors="pt") +``` + +يجبر MBart معرف لغة الهدف كأول رمز مولد للترجمة إلى لغة الهدف. قم بتعيين `forced_bos_token_id` إلى `en` في طريقة `generate` للترجمة إلى الإنجليزية: + +```py +>>> generated_tokens = model.generate(**encoded_en, forced_bos_token_id=tokenizer.lang_code_to_id["en_XX"]) +>>> tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +"Don't interfere with the wizard's affairs, because they are subtle, will soon get angry." +``` + +إذا كنت تستخدم نقطة تفتيش `facebook/mbart-large-50-many-to-one-mmt`، فلا تحتاج إلى إجبار معرف لغة الهدف كأول رمز مولد، وإلا فإن الاستخدام هو نفسه. \ No newline at end of file From dee6ca0ef711812ac95649d25a417114f52ff2ff Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:20 +0300 Subject: [PATCH 017/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/notebooks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/notebooks.md | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/source/ar/notebooks.md diff --git a/docs/source/ar/notebooks.md b/docs/source/ar/notebooks.md new file mode 100644 index 00000000000000..fa7703fc6d52b4 --- /dev/null +++ b/docs/source/ar/notebooks.md @@ -0,0 +1,43 @@ +هذا النص هو مقدمة عامة عن Jupyter Notebook، وهو بيئة تفاعلية للكمبيوتر المحمول تستخدم على نطاق واسع في مجال علم البيانات والتعلم الآني. Jupyter Notebook يوفر واجهة سهلة الاستخدام لكتابة وتنفيذ التعليمات البرمجية، وصناعة المخططات، وتحليل البيانات. + +# Jupyter Notebook: مقدمة + +Jupyter Notebook هو أداة قوية تتيح لك إنشاء وتشارك وثائق تحتوي على شفرة برمجية حية، وتوضيحات نصية، ومعادلات رياضية، وصور، ورسومات بيانية تفاعلية. وهذا يجعلها أداة مثالية لعلماء البيانات، والباحثين، ومطوري البرمجيات لعرض وتحليل البيانات، وتجربة الخوارزميات، ومشاركة النتائج. + +## الميزات الرئيسية: + +1. **الخلايا القابلة للتنفيذ**: يمكنك كتابة وتنفيذ الشفرة البرمجية في خلايا منفصلة، والتي تدعم أكثر من 40 لغة برمجة، بما في ذلك Python و R و Julia. + +2. **الوثائق الحية**: يمكنك تضمين النص المنسق، والصور، والفيديو، والمعادلات الرياضية (باستخدام تنسيق LaTeX) بين خلايا الشفرة البرمجية لإنشاء وثائق غنية بالمعلومات وتفاعلية. + +3. **التصوير والمرئيات**: Jupyter Notebook يدمج بسلاسة مع مكتبات التصوير مثل Matplotlib و Seaborn و Plotly، مما يسمح بعرض البيانات المرئية والرسوم البيانية التفاعلية مباشرة في الكمبيوتر المحمول. + +4. **التعاون والمشاركة**: يمكن بسهولة مشاركة دفاتر Jupyter عبر الإنترنت أو على منصات مثل GitHub، مما يسهل التعاون والعمل الجماعي. + +5. **الامتدادات والتخصيص**: يوفر Jupyter نظامًا غنيًا بالملحقات التي تسمح بتخصيص تجربة الكمبيوتر المحمول، بدءًا من موضوعات الكمبيوتر المحمول وحتى أدوات التحليل المتقدمة. + +## مثال على الكمبيوتر المحمول: + +``` + +! pip install numpy matplotlib + +import numpy as np +import matplotlib.pyplot as plt + +# إنشاء بيانات عينة +x = np.linspace(0، 10، 100) +y = np.sin(x) + +# رسم مخطط +plt.plot(x، y، marker='o') +plt.title('رسم الدالة الجيبية') +plt.xlabel('x') +plt.ylabel('sin(x)') +plt.show() + +``` + +في المثال أعلاه، قمنا بتثبيت حزم NumPy وMatplotlib، واستوردناها، ثم رسمنا دالة الجيب باستخدام بيانات عينة. يوضح هذا المثال كيف يمكنك تنفيذ الشفرة البرمجية، وإنشاء مخططات، وإضافتها إلى وثائقك مباشرة داخل Jupyter Notebook. + +Jupyter Notebook هو أداة قوية ومرنة توفر بيئة تفاعلية غامرة لعلماء البيانات والمهنيين الآخرين. سواء كنت تقوم بتحليل البيانات، أو تطوير خوارزميات التعلم الآلي، أو إنشاء تقارير تفاعلية، فإن Jupyter Notebook يقدم منصة مثالية للعمل والتعاون. \ No newline at end of file From 880dac6aba21e579a74b76fbcf43df8680672b3e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:22 +0300 Subject: [PATCH 018/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/pad=5Ftruncation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/pad_truncation.md | 59 ++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/pad_truncation.md diff --git a/docs/source/ar/pad_truncation.md b/docs/source/ar/pad_truncation.md new file mode 100644 index 00000000000000..a184e508cfdd51 --- /dev/null +++ b/docs/source/ar/pad_truncation.md @@ -0,0 +1,59 @@ +# الحشو والتقليم + +غالباً ما تكون الإدخالات المجمعة مختلفة الطول، لذا لا يمكن تحويلها إلى مصفوفات ذات حجم ثابت. الحشو والتقليم هما استراتيجيتان للتعامل مع هذه المشكلة، لإنشاء مصفوفات مستطيلة من مجموعات ذات أطوال مختلفة. ويضيف الحشو رمز **حشو** خاص لضمان أن يكون للتسلسلات الأقصر نفس طول أطول تسلسل في دفعة أو الطول الأقصى الذي يقبله النموذج. ويعمل التقليم في الاتجاه الآخر عن طريق تقليم التسلسلات الطويلة. + +في معظم الحالات، يعمل حشو دفعتك إلى طول أطول تسلسل وتقليمه إلى الطول الأقصى الذي يمكن أن يقبله النموذج بشكل جيد للغاية. ومع ذلك، تدعم واجهة برمجة التطبيقات المزيد من الاستراتيجيات إذا كنت بحاجة إليها. هناك ثلاثة حجج تحتاجها: `padding`، و`truncation`، و`max_length`. + +يحكم حجة `padding` الحشو. يمكن أن يكون منطقيًا أو سلسلة: + + - `True` أو `'longest'`: الحشو إلى أطول تسلسل في الدفعة (لا يتم تطبيق الحشو إذا قدمت + تسلسل واحد فقط). + - `'max_length'`: الحشو إلى طول محدد بواسطة حجة `max_length` أو الطول الأقصى الذي يقبله + النموذج إذا لم يتم توفير `max_length` (`max_length=None`). سيظل الحشو مطبقًا إذا قدمت تسلسلًا واحدًا فقط. + - `False` أو `'do_not_pad'`: لا يتم تطبيق أي حشو. هذا هو السلوك الافتراضي. + +تحكم حجة `truncation` التقليم. يمكن أن يكون منطقيًا أو سلسلة: + + - `True` أو `'longest_first'`: اقطع إلى طول أقصى محدد بواسطة حجة `max_length` أو + الطول الأقصى الذي يقبله النموذج إذا لم يتم توفير `max_length` (`max_length=None`). هذا سوف + تقليم رمزا برمز، وإزالة رمز من أطول تسلسل في الزوج حتى يتم الوصول إلى الطول الصحيح. + - `'only_second'`: اقطع إلى طول أقصى محدد بواسطة حجة `max_length` أو الطول الأقصى + يقبل النموذج إذا لم يتم توفير `max_length` (`max_length=None`). هذا سيقلم فقط + الجملة الثانية من زوج إذا تم توفير زوج من التسلسلات (أو دفعة من أزواج التسلسلات). + - `'only_first'`: اقطع إلى طول أقصى محدد بواسطة حجة `max_length` أو الطول الأقصى + يقبل النموذج إذا لم يتم توفير `max_length` (`max_length=None`). هذا سيقلم فقط + الجملة الأولى من زوج إذا تم توفير زوج من التسلسلات (أو دفعة من أزواج التسلسلات). + - `False` أو `'do_not_truncate'`: لا يتم تطبيق أي تقليم. هذا هو السلوك الافتراضي. + +تحكم حجة `max_length` طول الحشو والتقليم. يمكن أن يكون عدد صحيح أو `None`، وفي هذه الحالة سيتم تعيينه افتراضيًا إلى الطول الأقصى الذي يمكن أن يقبله النموذج. إذا لم يكن للنموذج طول إدخال أقصى محدد، يتم إلغاء تنشيط التقليم أو الحشو إلى `max_length`. + +يوضح الجدول التالي الطريقة الموصى بها لإعداد الحشو والتقليم. إذا كنت تستخدم أزواج تسلسلات الإدخال في أي من الأمثلة التالية، فيمكنك استبدال `truncation=True` بـ `STRATEGY` المحدد في +`['only_first'، 'only_second'، 'longest_first']`، أي `truncation='only_second'` أو `truncation='longest_first'` للتحكم في كيفية تقليم كل من التسلسلات في الزوج كما هو مفصل سابقًا. + + +# حيل الترميز + +هناك العديد من الاستراتيجيات لترميز دفعات الجمل. فيما يلي بعض الأمثلة على ذلك. + +| الترميز | الحشو | التعليمات | +|--------------------------------------|-----------------------------------|---------------------------------------------------------------------------------------------| +| لا ترميز | لا حشو | `tokenizer(batch_sentences)` | +| | الحشو إلى الحد الأقصى للتسلسل في الدفعة | `tokenizer(batch_sentences, padding=True)` أو | +| | | `tokenizer(batch_sentences, padding='longest')` | +| | الحشو إلى الحد الأقصى لطول إدخال النموذج | `tokenizer(batch_sentences, padding='max_length')` | +| | الحشو إلى طول محدد | `tokenizer(batch_sentences, padding='max_length', max_length=42)` | +| | الحشو إلى مضاعف لقيمة معينة | `tokenizer(batch_sentences, padding=True, pad_to_multiple_of=8)` | +| الترميز إلى الحد الأقصى لطول إدخال النموذج | لا حشو | `tokenizer(batch_sentences, truncation=True)` أو | +| | | `tokenizer(batch_sentences, truncation=STRATEGY)` | +| | الحشو إلى الحد الأقصى للتسلسل في الدفعة | `tokenizer(batch_sentences, padding=True, truncation=True)` أو | +| | | `tokenizer(batch_sentences, padding=True, truncation=STRATEGY)` | +| | الحشو إلى الحد الأقصى لطول إدخال النموذج | `tokenizer(batch_sentences, padding='max_length', truncation=True)` أو | +| | | `tokenizer(batch_sentences, padding='max_length', truncation=STRATEGY)` | +| | الحشو إلى طول محدد | غير ممكن | +| الترميز إلى طول محدد | لا حشو | `tokenizer(batch_sentences, truncation=True, max_length=42)` أو | +| | | `tokenizer(batch_sentences, truncation=STRATEGY, max_length=42)` | +| | الحشو إلى الحد الأقصى للتسلسل في الدفعة | `tokenizer(batch_sentences, padding=True, truncation=True, max_length=42)` أو | +| | | `tokenizer(batch_sentences, padding=True, truncation=STRATEGY, max_length=42)` | +| | الحشو إلى الحد الأقصى لطول إدخال النموذج | غير ممكن | +| | الحشو إلى طول محدد | `tokenizer(batch_sentences, padding='max_length', truncation=True, max_length=42)` أو | +| | | `tokenizer(batch_sentences, padding='max_length', truncation=STRATEGY, max_length=42)` | \ No newline at end of file From cab4bf3aeba20e8c3bfc8da3b915093849ec63d7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:23 +0300 Subject: [PATCH 019/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/peft.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/peft.md | 250 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 docs/source/ar/peft.md diff --git a/docs/source/ar/peft.md b/docs/source/ar/peft.md new file mode 100644 index 00000000000000..202cf692d94628 --- /dev/null +++ b/docs/source/ar/peft.md @@ -0,0 +1,250 @@ +# تحميل المحولات باستخدام 🤗 PEFT + +[[open-in-colab]] + +تقوم طرق [التدريب الدقيق الفعال للبارامترات (PEFT)](https://huggingface.co/blog/peft) بتجميد معلمات النموذج المُدرب مسبقًا أثناء الضبط الدقيق وإضافة عدد صغير من المعلمات القابلة للتدريب (المحولات) فوقه. يتم تدريب المحولات لتعلم معلومات خاصة بالمهام. وقد ثبت أن هذا النهج فعال للغاية من حيث الذاكرة مع انخفاض استخدام الكمبيوتر أثناء إنتاج نتائج قابلة للمقارنة مع نموذج مضبوط دقيقًا تمامًا. + +عادة ما تكون المحولات المدربة باستخدام PEFT أصغر أيضًا بمقدار درجة من حيث الحجم من النموذج الكامل، مما يجعل من السهل مشاركتها وتخزينها وتحميلها. + +
+ +
تبلغ أوزان المحول لطراز OPTForCausalLM المخزن على Hub حوالي 6 ميجابايت مقارنة بالحجم الكامل لأوزان النموذج، والتي يمكن أن تكون حوالي 700 ميجابايت.
+
+ +إذا كنت مهتمًا بمعرفة المزيد عن مكتبة 🤗 PEFT، فراجع [الوثائق](https://huggingface.co/docs/peft/index). + +## الإعداد + +ابدأ بتثبيت 🤗 PEFT: + +```bash +pip install peft +``` + +إذا كنت تريد تجربة الميزات الجديدة تمامًا، فقد تكون مهتمًا بتثبيت المكتبة من المصدر: + +```bash +pip install git+https://github.com/huggingface/peft.git +``` + +## نماذج PEFT المدعومة + +يدعم 🤗 Transformers بشكلٍ أصلي بعض طرق PEFT، مما يعني أنه يمكنك تحميل أوزان المحول المخزنة محليًا أو على Hub وتشغيلها أو تدريبها ببضع سطور من التعليمات البرمجية. الطرق المدعومة هي: + +- [محولات الرتبة المنخفضة](https://huggingface.co/docs/peft/conceptual_guides/lora) +- [IA3](https://huggingface.co/docs/peft/conceptual_guides/ia3) +- [AdaLoRA](https://arxiv.org/abs/2303.10512) + +إذا كنت تريد استخدام طرق PEFT الأخرى، مثل تعلم المحث أو ضبط المحث، أو حول مكتبة 🤗 PEFT بشكل عام، يرجى الرجوع إلى [الوثائق](https://huggingface.co/docs/peft/index). + +## تحميل محول PEFT + +لتحميل نموذج محول PEFT واستخدامه من 🤗 Transformers، تأكد من أن مستودع Hub أو الدليل المحلي يحتوي على ملف `adapter_config.json` وأوزان المحول، كما هو موضح في صورة المثال أعلاه. بعد ذلك، يمكنك تحميل نموذج محول PEFT باستخدام فئة `AutoModelFor`. على سبيل المثال، لتحميل نموذج محول PEFT للنمذجة اللغوية السببية: + +1. حدد معرف نموذج PEFT +2. مرره إلى فئة [`AutoModelForCausalLM`] + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer + +peft_model_id = "ybelkada/opt-350m-lora" +model = AutoModelForCausalLM.from_pretrained(peft_model_id) +``` + + + +يمكنك تحميل محول PEFT باستخدام فئة `AutoModelFor` أو فئة النموذج الأساسي مثل `OPTForCausalLM` أو `LlamaForCausalLM`. + + + +يمكنك أيضًا تحميل محول PEFT عن طريق استدعاء طريقة `load_adapter`: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer + +model_id = "facebook/opt-350m" +peft_model_id = "ybelkada/opt-350m-lora" + +model = AutoModelForCausalLM.from_pretrained(model_id) +model.load_adapter(peft_model_id) +``` + +راجع قسم [وثائق API](#transformers.integrations.PeftAdapterMixin) أدناه لمزيد من التفاصيل. + +## التحميل في 8 بت أو 4 بت + +راجع قسم [وثائق API](#transformers.integrations.PeftAdapterMixin) أدناه لمزيد من التفاصيل. + +## التحميل في 8 بت أو 4 بت + +تدعم تكامل `bitsandbytes` أنواع بيانات الدقة 8 بت و4 بت، والتي تكون مفيدة لتحميل النماذج الكبيرة لأنها توفر الذاكرة (راجع دليل تكامل `bitsandbytes` [guide](./quantization#bitsandbytes-integration) لمعرفة المزيد). أضف `load_in_8bit` أو `load_in_4bit` المعلمات إلى [`~PreTrainedModel.from_pretrained`] وقم بتعيين `device_map="auto"` لتوزيع النموذج بشكل فعال على الأجهزة لديك: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +peft_model_id = "ybelkada/opt-350m-lora" +model = AutoModelForCausalLM.from_pretrained(peft_model_id, quantization_config=BitsAndBytesConfig(load_in_8bit=True)) +``` + +## إضافة محول جديد + +يمكنك استخدام [`~peft.PeftModel.add_adapter`] لإضافة محول جديد إلى نموذج بمحول موجود طالما أن المحول الجديد هو من نفس نوع المحول الحالي. على سبيل المثال، إذا كان لديك محول LoRA موجود ملحق بنموذج: + +```py +from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer +from peft import LoraConfig + +model_id = "facebook/opt-350m" +model = AutoModelForCausalLM.from_pretrained(model_id) + +lora_config = LoraConfig( + target_modules=["q_proj", "k_proj"], + init_lora_weights=False +) + +model.add_adapter(lora_config, adapter_name="adapter_1") +``` + +لإضافة محول جديد: + +```py +# قم بتعليق محول جديد بنفس التكوين +model.add_adapter(lora_config, adapter_name="adapter_2") +``` + +الآن يمكنك استخدام [`~peft.PeftModel.set_adapter`] لتعيين المحول الذي سيتم استخدامه: + +```py +# استخدم adapter_1 +model.set_adapter("adapter_1") +output = model.generate(**inputs) +print(tokenizer.decode(output_disabled[0], skip_special_tokens=True)) + +# استخدم adapter_2 +model.set_adapter("adapter_2") +output_enabled = model.generate(**inputs) +print(tokenizer.decode(output_enabled[0], skip_special_tokens=True)) +``` + +## تمكين وتعطيل المحولات + +بمجرد إضافة محول إلى نموذج، يمكنك تمكين أو تعطيل وحدة المحول. لتمكين وحدة المحول: + +```py +from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer +from peft import PeftConfig + +model_id = "facebook/opt-350m" +adapter_model_id = "ybelkada/opt-350m-lora" +tokenizer = AutoTokenizer.from_pretrained(model_id) +text = "Hello" +inputs = tokenizer(text, return_tensors="pt") + +model = AutoModelForCausalLM.from_pretrained(model_id) +peft_config = PeftConfig.from_pretrained(adapter_model_id) + +# لبدء تشغيله بأوزان عشوائية +peft_config.init_lora_weights = False + +model.add_adapter(peft_config) +model.enable_adapters() +output = model.generate(**inputs) +``` + +لإيقاف تشغيل وحدة المحول: + +```py +model.disable_adapters() +output = model.generate(**inputs) +``` + +## تدريب محول PEFT + +يدعم محول PEFT فئة [`Trainer`] بحيث يمكنك تدريب محول لحالتك الاستخدام المحددة. فهو يتطلب فقط إضافة بضع سطور أخرى من التعليمات البرمجية. على سبيل المثال، لتدريب محول LoRA: + + + +إذا لم تكن معتادًا على ضبط نموذج دقيق باستخدام [`Trainer`، فراجع البرنامج التعليمي](training) لضبط نموذج مُدرب مسبقًا. + + + +1. حدد تكوين المحول باستخدام نوع المهمة وفرط المعلمات (راجع [`~peft.LoraConfig`] لمزيد من التفاصيل حول ما تفعله فرط المعلمات). + +```py +from peft import LoraConfig + +peft_config = LoraConfig( + lora_alpha=16, + lora_dropout=0.1, + r=64, + bias="none", + task_type="CAUSAL_LM"، +) +``` + +2. أضف المحول إلى النموذج. + +```py +model.add_adapter(peft_config) +``` + +3. الآن يمكنك تمرير النموذج إلى [`Trainer`]! + +```py +trainer = Trainer(model=model, ...) +trainer.train() +``` + +لحفظ محول المدرب وتحميله مرة أخرى: + +```py +model.save_pretrained(save_dir) +model = AutoModelForCausalLM.from_pretrained(save_dir) +``` + +## إضافة طبقات قابلة للتدريب إضافية إلى محول PEFT + +```py +model.save_pretrained(save_dir) +model = AutoModelForCausalLM.from_pretrained(save_dir) +``` + +## إضافة طبقات قابلة للتدريب إضافية إلى محول PEFT + +يمكنك أيضًا ضبط طبقات قابلة للتدريب إضافية أعلى نموذج به محولات مرفقة عن طريق تمرير `modules_to_save` في تكوين PEFT الخاص بك. على سبيل المثال، إذا كنت تريد أيضًا ضبط `lm_head` أعلى نموذج بمحول LoRA: + +```py +from transformers import AutoModelForCausalLM, OPTForCausalLM, AutoTokenizer +from peft import LoraConfig + +model_id = "facebook/opt-350m" +model = AutoModelForCausalLM.from_pretrained(model_id) + +lora_config = LoraConfig( + target_modules=["q_proj", "k_proj"], + modules_to_save=["lm_head"]، +) + +model.add_adapter(lora_config) +``` + +## وثائق API + +[[autodoc]] integrations.PeftAdapterMixin + - load_adapter + - add_adapter + - set_adapter + - disable_adapters + - enable_adapters + - active_adapters + - get_adapter_state_dict + + + + + \ No newline at end of file From 552032f10e74be5895fd8025fc8596b4ab295bd7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:25 +0300 Subject: [PATCH 020/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Fhardware.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_hardware.md | 134 ++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 docs/source/ar/perf_hardware.md diff --git a/docs/source/ar/perf_hardware.md b/docs/source/ar/perf_hardware.md new file mode 100644 index 00000000000000..bfcf00237823f3 --- /dev/null +++ b/docs/source/ar/perf_hardware.md @@ -0,0 +1,134 @@ +# أجهزة مخصصة للتدريب + +يمكن أن يكون للأجهزة التي تستخدمها لتشغيل تدريب النماذج والاستدلال تأثير كبير على الأداء. للحصول على نظرة متعمقة حول وحدات معالجة الرسومات GPU، تأكد من مراجعة تدوينة تيم ديتمر الممتازة [blog post](https://timdettmers.com/2020/09/07/which-gpu-for-deep-learning/). + +دعونا نلقي نظرة على بعض النصائح العملية لتهيئة وحدات معالجة الرسومات GPU. + +## وحدة معالجة الرسومات GPU +عند تدريب نماذج أكبر، لديك ثلاثة خيارات أساسية: + +- وحدات معالجة الرسومات GPU أكبر +- المزيد من وحدات معالجة الرسومات GPU +- المزيد من وحدة المعالجة المركزية CPU و NVMe (يتم تفريغها بواسطة [DeepSpeed-Infinity](main_classes/deepspeed#nvme-support)) + +دعونا نبدأ بالحالة التي لديك فيها وحدة معالجة رسومات GPU واحدة. + +### الطاقة والتبريد + +إذا اشتريت وحدة معالجة رسومات GPU عالية الجودة وغالية الثمن، فتأكد من تزويدها بالطاقة الصحيحة والتبريد الكافي. + +**الطاقة**: + +تحتوي بعض بطاقات وحدات معالجة الرسومات GPU عالية الجودة للمستهلكين على مقبس أو مقبسين للطاقة PCI-E 8-Pin. تأكد من توصيل أكبر عدد ممكن من كابلات PCI-E 8-Pin المستقلة بـ 12 فولت في البطاقة كما هو الحال مع المقابس. لا تستخدم الانقسامين الموجودين في نهاية الكابل نفسه (المعروف أيضًا باسم كابل pigtail). وهذا يعني أنه إذا كان لديك مقبسان على وحدة معالجة الرسومات GPU، فأنت تريد كابلين PCI-E 8-Pin للانتقال من وحدة الإمداد بالطاقة PSU إلى البطاقة وليس واحدًا يحتوي على موصلين PCI-E 8-Pin في النهاية! لن تحصل على الأداء الكامل من بطاقتك بخلاف ذلك. + +يجب توصيل كل كابل طاقة PCI-E 8-Pin بمقبس 12 فولت على جانب وحدة الإمداد بالطاقة PSU ويمكنه توفير ما يصل إلى 150 وات من الطاقة. + +قد تستخدم البطاقات الأخرى موصلات PCI-E 12-Pin، ويمكنها توصيل ما يصل إلى 500-600 وات من الطاقة. + +قد تستخدم البطاقات منخفضة الجودة موصلات 6-Pin، والتي توفر ما يصل إلى 75 وات من الطاقة. + +بالإضافة إلى ذلك، تريد وحدة إمداد الطاقة PSU عالية الجودة التي تحتوي على جهد كهربائي مستقر. قد لا توفر بعض الوحدات منخفضة الجودة البطاقة بجهد كهربائي مستقر تحتاجه للعمل بكامل طاقتها. + +وبالطبع، يجب أن تحتوي وحدة الإمداد بالطاقة PSU على عدد كافٍ من الواط غير المستخدم لتشغيل البطاقة. + +**التبريد**: + +عندما ترتفع درجة حرارة وحدة معالجة الرسومات GPU، فستبدأ في تقليل سرعتها ولن تقدم أداءً كاملاً، بل ويمكن أن تتوقف عن العمل إذا ارتفعت درجة حرارتها كثيرًا. + +من الصعب تحديد درجة الحرارة المثالية التي يجب السعي لتحقيقها عندما تكون وحدة معالجة الرسومات GPU مثقلة بالعمل، ولكن ربما يكون أي شيء أقل من +80 درجة مئوية جيدًا، ولكن كلما انخفضت درجة الحرارة كان ذلك أفضل - ربما يكون النطاق من 70 إلى 75 درجة مئوية ممتازًا. ومن المرجح أن يبدأ الخنق عند حوالي 84-90 درجة مئوية. ولكن بالإضافة إلى خنق الأداء، من المحتمل أن يؤدي ارتفاع درجة الحرارة لفترة طويلة جدًا إلى تقليل عمر وحدة معالجة الرسومات GPU. + +بعد ذلك، دعونا نلقي نظرة على أحد أهم الجوانب عند وجود وحدات معالجة رسومات GPU متعددة: الاتصال. + +### اتصال وحدات معالجة الرسومات GPU المتعددة + +إذا كنت تستخدم وحدات معالجة رسومات GPU متعددة، فيمكن لطريقة اتصال البطاقات أن يكون لها تأثير كبير على إجمالي وقت التدريب. إذا كانت وحدات معالجة الرسومات GPU على نفس العقدة المادية، فيمكنك تشغيل ما يلي: + +```bash +nvidia-smi topo -m +``` + +وسيخبرك بكيفية اتصال وحدات معالجة الرسومات GPU. على جهاز به وحدتي معالجة رسومات GPU واللتان متصلتان بـ NVLink، فمن المحتمل أن ترى شيئًا مثل: + +``` + GPU0 GPU1 CPU Affinity NUMA Affinity +GPU0 X NV2 0-23 N/A +GPU1 NV2 X 0-23 N/A +``` + +على جهاز مختلف بدون NVLink، قد نرى: +``` + GPU0 GPU1 CPU Affinity NUMA Affinity +GPU0 X PHB 0-11 N/A +GPU1 PHB X 0-11 N/A +``` + +يتضمن التقرير هذا الشرح: + +``` + X = Self + SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI) + NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node + PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU) + PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge) + PIX = Connection traversing at most a single PCIe bridge + NV# = Connection traversing a bonded set of # NVLinks +``` + +لذا فإن التقرير الأول `NV2` يخبرنا بأن وحدات معالجة الرسومات GPU متصلة بواسطة رابطين NVLink، والتقرير الثاني `PHB` لدينا إعداد PCIe+Bridge على مستوى المستهلك النموذجي. + +تحقق من نوع الاتصال الذي لديك في إعدادك. سيجعل بعضها الاتصال بين البطاقات أسرع (مثل NVLink)، بينما سيجعلها البعض الآخر أبطأ (مثل PHB). + +اعتمادًا على نوع حل قابلية التوسع المستخدم، قد يكون لسرعة الاتصال تأثير كبير أو صغير. إذا كان على وحدات معالجة الرسومات GPU المزامنة نادرًا، كما هو الحال في DDP، فإن تأثير الاتصال البطيء سيكون أقل أهمية. إذا كان على وحدات معالجة الرسومات GPU إرسال الرسائل إلى بعضها البعض بشكل متكرر، كما هو الحال في ZeRO-DP، فإن اتصال أسرع يصبح فائق الأهمية لتحقيق تدريب أسرع. + +#### NVlink + +[NVLink](https://en.wikipedia.org/wiki/NVLink) هو رابط اتصالات متعدد المسارات قريب المدى متسلسل يعتمد على الأسلاك طورته شركة Nvidia. + +يوفر كل جيل جديد عرض نطاق ترددي أسرع، على سبيل المثال، إليك اقتباس من [Nvidia Ampere GA102 GPU Architecture](https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/ampere/pdf/NVIDIA-ampere-GA102-GPU-Architecture-Whitepaper-V1.pdf): + +> NVLink® من الجيل الثالث +> تستخدم وحدات معالجة الرسومات GA102 واجهة NVLink من الجيل الثالث من NVIDIA، والتي تتضمن أربعة روابط x4، +> يوفر كل رابط 14.0625 جيجابايت/ثانية من عرض النطاق الترددي في كل اتجاه بين وحدتي معالجة الرسومات GPU. توفر أربعة +> روابط 56.25 جيجابايت/ثانية من عرض النطاق الترددي في كل اتجاه، و112.5 جيجابايت/ثانية من إجمالي عرض النطاق الترددي +> بين وحدتي معالجة الرسومات GPU. يمكن توصيل وحدتي معالجة الرسومات RTX 3090 معًا لـ SLI باستخدام NVLink. +> (ملاحظة: لا يتم دعم تكوينات SLI ثلاثية الاتجاهات ورباعية الاتجاهات.) + +لذا، كلما حصلت على قيمة أعلى لـ `X` في تقرير `NVX` في إخراج `nvidia-smi topo -m`، كان ذلك أفضل. سيعتمد الجيل على بنية وحدة معالجة الرسومات GPU الخاصة بك. + +دعونا نقارن تنفيذ تدريب نموذج اللغة openai-community/gpt2 عبر عينة صغيرة من wikitext. + +النتائج هي: + + +| NVlink | الوقت | +| ----- | ---: | +| نعم | 101 ثانية | +| لا | 131 ثانية | + + +يمكنك أن ترى أن NVLink يكمل التدريب بنسبة ~23% أسرع. في المعيار الثاني، نستخدم `NCCL_P2P_DISABLE=1` لإخبار وحدات معالجة الرسومات GPU بعدم استخدام NVLink. + +فيما يلي كود المعيار المرجعي الكامل والإخراج: + +```bash +# DDP w/ NVLink + +rm -r /tmp/test-clm; CUDA_VISIBLE_DEVICES=0,1 torchrun \ +--nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path openai-community/gpt2 \ +--dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train \ +--output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200 + +{'train_runtime': 101.9003, 'train_samples_per_second': 1.963, 'epoch': 0.69} + +# DDP w/o NVLink + +rm -r /tmp/test-clm; CUDA_VISIBLE_DEVICES=0,1 NCCL_P2P_DISABLE=1 torchrun \ +--nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path openai-community/gpt2 \ +--dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train +--output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200 + +{'train_runtime': 131.4367, 'train_samples_per_second': 1.522, 'epoch': 0.69} +``` + +الأجهزة: 2x TITAN RTX 24 جيجابايت لكل منهما + NVlink مع رابطين NVLink (`NV2` في `nvidia-smi topo -m`) +البرمجيات: `pytorch-1.8-to-be` + `cuda-11.0` / `transformers==4.3.0.dev0` \ No newline at end of file From 121311a2cb709734fbbaa4d47b386b515942cac2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:27 +0300 Subject: [PATCH 021/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/generation=5Fstrategies.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/generation_strategies.md | 461 ++++++++++++++++++++++++ 1 file changed, 461 insertions(+) create mode 100644 docs/source/ar/generation_strategies.md diff --git a/docs/source/ar/generation_strategies.md b/docs/source/ar/generation_strategies.md new file mode 100644 index 00000000000000..88ea1c40eacc25 --- /dev/null +++ b/docs/source/ar/generation_strategies.md @@ -0,0 +1,461 @@ +# استراتيجيات توليد النص + +يعد توليد النص أمرًا أساسيًا للعديد من مهام معالجة اللغة الطبيعية، مثل توليد النص المفتوح، والتلخيص، والترجمة، وأكثر من ذلك. كما يلعب دورًا في مجموعة متنوعة من تطبيقات الطرائق المختلطة التي يكون النص فيها كإخراج مثل تحويل الكلام إلى نص، والتحويل من رؤية إلى نص. بعض النماذج التي يمكنها توليد النص تشمل GPT2، وXLNet، وOpenAI GPT، وCTRL، وTransformerXL، وXLM، وBart، وT5، وGIT، وWhisper. + +تفقد بعض الأمثلة التي تستخدم طريقة [~generation.GenerationMixin.generate] لإنتاج مخرجات نصية لمهام مختلفة: + +- [تلخيص النص](./tasks/summarization#inference) +- [وضع عنوان للصورة](./model_doc/git#transformers.GitForCausalLM.forward.example) +- [نسخ الصوت](./model_doc/whisper#transformers.WhisperForConditionalGeneration.forward.example) + +لاحظ أن المدخلات لطريقة التوليد تعتمد على طريقة النموذج. يتم إرجاعها بواسطة فئة المعالجة المسبقة للنموذج، مثل AutoTokenizer أو AutoProcessor. إذا أنشأت معالجة مسبقة للنموذج أكثر من نوع واحد من الإدخال، فقم بتمرير جميع الإدخالات إلى generate(). يمكنك معرفة المزيد حول معالجة مسبقة فردية للنموذج في وثائق النموذج المقابلة. + +تُعرف عملية اختيار الرموز المميزة للإخراج لتوليد النص باسم فك التشفير، ويمكنك تخصيص استراتيجية فك التشفير التي ستستخدمها طريقة `generate()`. لا يؤدي تعديل استراتيجية فك التشفير إلى تغيير قيم أي معلمات قابلة للتدريب. ومع ذلك، يمكن أن يكون له تأثير ملحوظ على جودة الإخراج المولد. يمكن أن يساعد في تقليل التكرار في النص وجعله أكثر تماسكًا. + +يصف هذا الدليل ما يلي: + +- تكوين التوليد الافتراضي +- استراتيجيات فك التشفير الشائعة وبارامتراتها الرئيسية +- حفظ ومشاركة تكوينات التوليد المخصصة مع نموذج التدريب الدقيق الخاص بك على 🤗 Hub + +## تكوين التوليد الافتراضي للنص + +تتم تعريف استراتيجية فك التشفير لنموذج في تكوين التوليد الخاص به. عند استخدام النماذج المُدربة مسبقًا للاستنتاج داخل [`pipeline`]، تقوم النماذج باستدعاء طريقة `PreTrainedModel.generate()` التي تطبق تكوين التوليد الافتراضي تحت الغطاء. يتم أيضًا استخدام التكوين الافتراضي عندما لا يتم حفظ أي تكوين مخصص مع النموذج. + +عندما تقوم بتحميل نموذج بشكل صريح، يمكنك فحص تكوين التوليد الذي يأتي معه من خلال `model.generation_config`: + +```python +>>> from transformers import AutoModelForCausalLM + +>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2") +>>> model.generation_config +GenerationConfig { + "bos_token_id": 50256, + "eos_token_id": 50256 +} + +``` + +يكشف طباعة `model.generation_config` فقط عن القيم التي تختلف عن تكوين التوليد الافتراضي، ولا يدرج أيًا من القيم الافتراضية. + +يقتصر تكوين التوليد الافتراضي على حجم الإخراج المدمج مع موجه الإدخال إلى حد أقصى 20 رمزًا لتجنب مواجهة قيود الموارد. استراتيجية فك التشفير الافتراضية هي البحث الجشع، والتي تعد أبسط استراتيجية فك تشفير تختار رمزًا مميزًا به أعلى احتمال كرمز مميز التالي. بالنسبة للعديد من المهام وأحجام الإخراج الصغيرة، يعمل هذا بشكل جيد. ومع ذلك، عندما يتم استخدامه لتوليد مخرجات أطول، يمكن أن يبدأ البحث الجشع في إنتاج نتائج متكررة للغاية. + +## تخصيص توليد النص + +يمكنك تجاوز أي `generation_config` عن طريق تمرير البارامترات وقيمها مباشرةً إلى طريقة [`generate`]: + +```python +>>> my_model.generate(**inputs, num_beams=4, do_sample=True) # doctest: +SKIP +``` + +حتى إذا كانت استراتيجية فك التشفير الافتراضية تعمل بشكل أساسي لمهمتك، فلا يزال بإمكانك ضبط بعض الأشياء. بعض البارامترات التي يتم ضبطها بشكل شائع تشمل: + +- `max_new_tokens`: العدد الأقصى من الرموز المميزة التي سيتم توليدها. وبعبارة أخرى، حجم تسلسل الإخراج، وليس بما في ذلك الرموز المميزة في الموجه. كبديل لاستخدام طول الإخراج كمعيار إيقاف، يمكنك اختيار إيقاف التوليد في أي وقت يتجاوز فيه التوليد الكامل مقدارًا معينًا من الوقت. لمعرفة المزيد، تحقق من [`StoppingCriteria`]. +- `num_beams`: من خلال تحديد عدد الحزم أكبر من 1، فأنت تقوم بشكل فعال بالتبديل من البحث الجشع إلى البحث الشعاعي. تقيّم هذه الاستراتيجية العديد من الفرضيات في كل خطوة زمنية وتختار في النهاية الفرضية التي لها أعلى احتمال إجمالي للتسلسل بأكمله. تتمثل ميزة هذه الاستراتيجية في تحديد تسلسلات عالية الاحتمال تبدأ برموز مميزة أولية منخفضة الاحتمال والتي ستتجاهلها البحث الجشع. قم بتصور كيفية عمله [هنا](https://huggingface.co/spaces/m-ric/beam_search_visualizer). +- `do_sample`: إذا تم تعيينه على `True`، فإن هذا البارامتر يمكّن استراتيجيات فك التشفير مثل أخذ العينات متعددة الحدود، والبحث الشعاعي متعدد الحدود، وأخذ العينات الأعلى K، وأخذ العينات الأعلى p. تقوم جميع هذه الاستراتيجيات بتحديد الرمز المميز التالي من توزيع الاحتمالية عبر المفردات بأكملها مع تعديلات محددة للاستراتيجية. +- `num_return_sequences`: عدد تسلسلات المرشحين التي سيتم إرجاعها لكل إدخال. هذا الخيار متاح فقط لاستراتيجيات فك التشفير التي تدعم عدة تسلسلات مرشحة، على سبيل المثال، اختلافات البحث الشعاعي وأخذ العينات. تعيد استراتيجيات فك التشفير مثل البحث الجشع والبحث التبايني تسلسل إخراج واحد. + +## حفظ استراتيجية فك تشفير مخصصة مع نموذج + +إذا كنت ترغب في مشاركة نموذج التدريب الدقيق الخاص بك بتكوين توليد محدد، فيمكنك: + +- إنشاء مثيل لفئة [`GenerationConfig`] +- تحديد بارامترات استراتيجية فك التشفير +- حفظ تكوين التوليد الخاص بك باستخدام [`GenerationConfig.save_pretrained`]، والتأكد من ترك حجته `config_file_name` فارغة +- قم بتعيين `push_to_hub` إلى `True` لتحميل تكوينك إلى مستودع النموذج + +```python +>>> from transformers import AutoModelForCausalLM, GenerationConfig + +>>> model = AutoModelForCausalLM.from_pretrained("my_account/my_model") # doctest: +SKIP +>>> generation_config = GenerationConfig( +... max_new_tokens=50, do_sample=True, top_k=50, eos_token_id=model.config.eos_token_id +... ) +>>> generation_config.save_pretrained("my_account/my_model", push_to_hub=True) # doctest: +SKIP +``` + +يمكنك أيضًا تخزين العديد من تكوينات التوليد في دليل واحد، باستخدام حجة `config_file_name` في [`GenerationConfig.save_pretrained`]. يمكنك لاحقًا استدعاء مثيل لها باستخدام [`GenerationConfig.from_pretrained`]. هذا مفيد إذا كنت تريد تخزين العديد من تكوينات التوليد لنموذج واحد (على سبيل المثال، واحد لتوليد نص إبداعي مع أخذ العينات، وواحد للتلخيص باستخدام البحث الشعاعي). يجب أن يكون لديك الأذونات الصحيحة على Hub لإضافة ملفات تكوين إلى نموذج. + +```python +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, GenerationConfig + +>>> tokenizer = AutoTokenizer.from_pretrained("google-t5/t5-small") +>>> model = AutoModelForSeq2SeqLM.from_pretrained("google-t5/t5-small") + +>>> translation_generation_config = GenerationConfig( +... num_beams=4, +... early_stopping=True, +... decoder_start_token_id=0, +... eos_token_id=model.config.eos_token_id, +... pad_token=model.config.pad_token_id, +... ) + +>>> # Tip: add `push_to_hub=True` to push to the Hub +>>> translation_generation_config.save_pretrained("/tmp", "translation_generation_config.json") +>>> # Tip: add `push_to_hub=True` to push to the Hub +>>> translation_generation_config.save_pretrained("/tmp", "translation_generation_config.json") + +>>> # You could then use the named generation config file to parameterize generation +>>> generation_config = GenerationConfig.from_pretrained("/tmp", "translation_generation_config.json") +>>> inputs = tokenizer("translate English to French: Configuration files are easy to use!", return_tensors="pt") +>>> outputs = model.generate(**inputs, generation_config=generation_config) +>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['Les fichiers de configuration sont faciles à utiliser!'] +``` + +## البث + +تدعم طريقة `generate()` البث، من خلال إدخالها `streamer`. يتوافق إدخال `streamer` مع أي مثيل من فئة بها الطرق التالية: `put()` و`end()`. داخليًا، يتم استخدام `put()` لدفع الرموز المميزة الجديدة و`end()` للإشارة إلى نهاية توليد النص. + + + +لا يزال API لفئات البث قيد التطوير وقد يتغير في المستقبل. + + + +من الناحية العملية، يمكنك إنشاء فئة بث مخصصة لجميع أنواع الأغراض! لدينا أيضًا فئات بث أساسية جاهزة للاستخدام. على سبيل المثال، يمكنك استخدام فئة [`TextStreamer`] لبث إخراج `generate()` إلى شاشتك، كلمة واحدة في كل مرة: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer + +>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2") +>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2") +>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt") +>>> streamer = TextStreamer(tok) + +>>> # Despite returning the usual output, the streamer will also print the generated text to stdout. +>>> _ = model.generate(**inputs, streamer=streamer, max_new_tokens=20) +An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven, +``` + +## تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم + +تدعم طريقة `generate()` تخزين مفاتيح وقيم المفاتيح والقيم المؤقتة لتعزيز الكفاءة وتجنب إعادة الحسابات. ومع ذلك، يمكن أن تشغل ذاكرة التخزين المؤقت للمفاتيح والقيم جزءًا كبيرًا من الذاكرة، مما يصبح عنق زجاجة لتوليد السياق الطويل، خاصة بالنسبة للنماذج اللغوية كبيرة الحجم. + +يمكن أن يؤدي تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم عند استخدام `generate()` إلى تقليل متطلبات الذاكرة بشكل كبير على حساب السرعة. + +يستلهم تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم في `transformers` إلى حد كبير من الورقة [KIVI: Quantization Asymmetric 2bit Quantization for KV Cache] (https://arxiv.org/abs/2402.02750) ويدعم حاليًا `quanto` و`HQQ` كخلفيات. لمزيد من المعلومات حول طريقة العمل الداخلية، راجع الورقة. + +لتمكين تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم، يجب الإشارة إلى `cache_implementation="quantized"` في `generation_config`. يجب تمرير الحجج المتعلقة بالتكميم إلى `generation_config` إما كـ `dict` أو كمثيل لفئة [`QuantizedCacheConfig`]. يجب الإشارة إلى خلفية التكميم التي سيتم استخدامها في [`QuantizedCacheConfig`]، والافتراضي هو `quanto`. + + + +يمكن أن يكون تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم ضارًا إذا كان طول السياق قصيرًا وهناك ذاكرة وصول عشوائي GPU كافية متوفرة لتشغيلها بدون تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم. + + + +```python +>>> import torch +>>> from transformers import AutoTokenizer, AutoModelForCausalLM + +>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf") +>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf", torch_dtype=torch.float16).to("cuda:0") +>>> inputs = tokenizer("I like rock music because", return_tensors="pt").to(model.device) + +>>> out = model.generate(**inputs, do_sample=False, max_new_tokens=20, cache_implementation="quantized", cache_config={"nbits": 4, "backend": "quanto"}) +>>> print(tokenizer.batch_decode(out, skip_special_tokens=True)[0]) +I like rock music because it's loud and energetic. It's a great way to express myself and rel +>>> out = model.generate(**inputs, do_sample=False, max_new_tokens=20) +>>> print(tokenizer.batch_decode(out, skip_special_tokens=True)[0]) +I like rock music because it's loud and energetic. I like to listen to it when I'm feeling +``` + +## نقل ذاكرة التخزين المؤقت للمفاتيح والقيم خارج الذاكرة + +على غرار تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم، تهدف هذه الاستراتيجية إلى تقليل استخدام ذاكرة وصول عشوائي GPU. +فهي تقوم بذلك عن طريق نقل ذاكرة التخزين المؤقت للمفاتيح والقيم لمعظم الطبقات إلى وحدة المعالجة المركزية. +مع تقدم طريقة `forward()` للنموذج عبر الطبقات، تحافظ هذه الاستراتيجية على ذاكرة التخزين المؤقت للمفاتيح والقيم للطبقة الحالية على GPU. +في الوقت نفسه، يقوم باسترداد ذاكرة التخزين المؤقت للمفاتيح والقيم للطبقة التالية بشكل غير متزامن وإرسال ذاكرة التخزين المؤقت للمفاتيح والقيم للطبقة السابقة مرة أخرى إلى وحدة المعالجة المركزية. +على عكس تكميم ذاكرة التخزين المؤقت للمفاتيح والقيم، تنتج هذه الاستراتيجية دائمًا نفس النتيجة مثل تنفيذ ذاكرة التخزين المؤقت للمفاتيح والقيم الافتراضية. +لذلك، يمكن استخدامه كبديل أو كخطة احتياطية له. + +اعتمادًا على نموذجك وخصائص مهمة التوليد الخاصة بك (حجم السياق، وعدد الرموز المميزة المولدة، وعدد الحزم، وما إلى ذلك) +قد تلاحظ انخفاضًا طفيفًا في إنتاجية التوليد مقارنة بتنفيذ ذاكرة التخزين المؤقت للمفاتيح والقيم الافتراضية. + +لتمكين نقل ذاكرة التخزين المؤقت للمفاتيح والقيم خارج الذاكرة، قم بتمرير `cache_implementation="offloaded"` في `generation_config`. + +```python +>>> import torch +>>> from transformers import AutoTokenizer, AutoModelForCausalLM +>>> ckpt = "microsoft/Phi-3-mini-4k-instruct" + +>>> tokenizer = AutoTokenizer.from_pretrained(ckpt) +>>> model = AutoModelForCausalLM.from_pretrained(ckpt, torch_dtype=torch.float16).to("cuda:0") +>>> inputs = tokenizer("Fun fact: The shortest", return_tensors="pt").to(model.device) + +>>> out = model.generate(**inputs, do_sample=False, max_new_tokens=23, cache_implementation="offloaded") +>>> print(tokenizer.batch_decode(out, skip_special_tokens=True)[0]) +Fun fact: The shortest war in history was between Britain and Zanzibar on August 27, 1896. + +>>> out = model.generate(**inputs, do_sample=False, max_new_tokens=23) +>>> print(tokenizer.batch_decode(out, skip_special_tokens=True)[0]) +Fun fact: The shortest war in history was between Britain and Zanzibar on August 27, 1896. +``` + + + +يت +### البحث التبايني + +اقترحت ورقة عام 2022 [إطار عمل تبايني لتوليد النصوص العصبية](https://arxiv.org/abs/2202.06417) استراتيجية فك تشفير البحث التبايني. +وهو يظهر نتائج متفوقة لتوليد مخرجات طويلة متماسكة وغير مكررة. لمعرفة كيفية عمل البحث التبايني، تحقق من [هذه التدوينة](https://huggingface.co/blog/introducing-csearch). + +هناك معياران رئيسيان يمكنان من التحكم في سلوك البحث التبايني وهما `penalty_alpha` و`top_k`: + +```python +>>> from transformers import AutoTokenizer, AutoModelForCausalLM + +>>> checkpoint = "openai-community/gpt2-large" +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> model = AutoModelForCausalLM.from_pretrained(checkpoint) + +>>> prompt = "Hugging Face Company is" +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> outputs = model.generate(**inputs, penalty_alpha=0.6, top_k=4, max_new_tokens=100) +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +['Hugging Face Company is a family owned and operated business. We pride ourselves on being the best +in the business and our customer service is second to none.\n\nIf you have any questions about our +products or services, feel free to contact us at any time. We look forward to hearing from you!'] +``` + +### المعاينة متعددة الحدود + +على عكس البحث الشره الذي يختار دائمًا رمزًا له أعلى احتمال كونه الرمز التالي، فإن المعاينة متعددة الحدود (يطلق عليها أيضًا المعاينة السلفية) تختار الرمز التالي بشكل عشوائي بناءً على توزيع الاحتمالية عبر المفردات بالكامل التي يمنحها النموذج. كل رمز له احتمال غير صفري لديه فرصة أن يتم اختياره، مما يقلل من + +خطر التكرار. + +لتمكين المعاينة متعددة الحدود، قم بتعيين `do_sample=True` و`num_beams=1`. + +```python +>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed +>>> set_seed(0) # من أجل إمكانية إعادة الإنتاج + +>>> checkpoint = "openai-community/gpt2-large" +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> model = AutoModelForCausalLM.from_pretrained(checkpoint) + +>>> prompt = "Today was an amazing day because" +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> outputs = model.generate(**inputs, do_sample=True, num_beams=1, max_new_tokens=100) +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +["Today was an amazing day because we received these wonderful items by the way of a gift shop. The box arrived on a Thursday and I opened it on Monday afternoon to receive the gifts. Both bags featured pieces from all the previous years!\n\nThe box had lots of surprises in it, including some sweet little mini chocolate chips! I don't think I'd eat all of these. This was definitely one of the most expensive presents I have ever got, I actually got most of them for free!\n\nThe first package came"] +``` + +### فك تشفير البحث الشعاعي + +على عكس البحث الشره، يحتفظ فك تشفير البحث الشعاعي بعدة فرضيات في كل خطوة زمنية ويختار في النهاية +الفرضية التي لها أعلى احتمال إجمالي للتسلسل بأكمله. تتمثل ميزة ذلك في تحديد تسلسلات عالية الاحتمال +التي تبدأ برموز أولية ذات احتمالية أقل والتي ستتجاهلها عملية البحث الشره. + + + + + +يمكنك تصور كيفية عمل فك تشفير البحث الشعاعي في [هذا العرض التوضيحي التفاعلي](https://huggingface.co/spaces/m-ric/beam_search_visualizer): اكتب جملتك المدخلة، ولعب مع المعلمات لمشاهدة كيفية تغيير حزم فك التشفير. + +لتمكين استراتيجية فك التشفير هذه، حدد `num_beams` (أي عدد الفرضيات التي يجب تتبعها) أكبر من 1. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> prompt = "It is astonishing how one can" +>>> checkpoint = "openai-community/gpt2-medium" + +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> model = AutoModelForCausalLM.from_pretrained(checkpoint) + +>>> outputs = model.generate(**inputs, num_beams=5, max_new_tokens=50) +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +['It is astonishing how one can have such a profound impact on the lives of so many people in such a short period of +time."\n\nHe added: "I am very proud of the work I have been able to do in the last few years.\n\n"I have'] +``` + +### معاينة شعاع متعددة الحدود + +كما يوحي الاسم، تجمع استراتيجية فك التشفير هذه بين البحث الشعاعي والمعاينة متعددة الحدود. يجب عليك تحديد +`num_beams` أكبر من 1، وتعيين `do_sample=True` لاستخدام استراتيجية فك التشفير هذه. + +```python +>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, set_seed +>>> set_seed(0) # من أجل إمكانية إعادة الإنتاج + +>>> prompt = "translate English to German: The house is wonderful." +>>> checkpoint = "google-t5/t5-small" + +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint) + +>>> outputs = model.generate(**inputs, num_beams=5, do_sample=True) +>>> tokenizer.decode(outputs[0], skip_special_tokens=True) +'Das Haus ist wunderbar.' +``` + +### فك تشفير البحث الشعاعي المتنوع + +استراتيجية فك تشفير البحث الشعاعي المتنوع هي امتداد لاستراتيجية البحث الشعاعي التي تتيح توليد مجموعة أكثر تنوعًا +من تسلسلات الشعاع للاختيار من بينها. لمعرفة كيفية عمله، راجع [بحث شعاعي متنوع: فك تشفير حلول متنوعة من نماذج التسلسل العصبي](https://arxiv.org/pdf/1610.02424.pdf). + +لدى هذا النهج ثلاثة معلمات رئيسية: `num_beams`، `num_beam_groups`، و`diversity_penalty`. +تضمن عقوبة التنوع تميز الإخراج عبر المجموعات، ويتم استخدام البحث الشعاعي داخل كل مجموعة. + + +```python +>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM + +>>> checkpoint = "google/pegasus-xsum" +>>> prompt = ( +... "The Permaculture Design Principles are a set of universal design principles " +... "that can be applied to any location, climate and culture, and they allow us to design " +... "the most efficient and sustainable human habitation and food production systems. " +... "Permaculture is a design system that encompasses a wide variety of disciplines, such " +... "as ecology, landscape design, environmental science and energy conservation, and the " +... "Permaculture design principles are drawn from these various disciplines. Each individual " +... "design principle itself embodies a complete conceptual framework based on sound " +... "scientific principles. When we bring all these separate principles together, we can " +... "create a design system that both looks at whole systems, the parts that these systems " +... "consist of, and how those parts interact with each other to create a complex, dynamic, " +... "living system. Each design principle serves as a tool that allows us to integrate all " +... "the separate parts of a design, referred to as elements, into a functional, synergistic, " +... "whole system, where the elements harmoniously interact and work together in the most " +... "efficient way possible." +... ) + +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint) + +>>> outputs = model.generate(**inputs, num_beams=5, num_beam_groups=5, max_new_tokens=30, diversity_penalty=1.0) +>>> tokenizer.decode(outputs[0], skip_special_tokens=True) +'The Design Principles are a set of universal design principles that can be applied to any location, climate and +culture, and they allow us to design the' +``` +يوضح هذا الدليل المعلمات الرئيسية التي تمكن استراتيجيات فك التشفير المختلفة. هناك معلمات أكثر تقدمًا لـ +طريقة [`generate`]، والتي تمنحك مزيدًا من التحكم في سلوك طريقة [`generate`]. + +للاطلاع على القائمة الكاملة للمعلمات المتاحة، راجع [توثيق API](./main_classes/text_generation.md). + +### فك التشفير التخميني + +فك التشفير التخميني (المعروف أيضًا باسم فك التشفير بمساعدة) هو تعديل لاستراتيجيات فك التشفير المذكورة أعلاه، والذي يستخدم +نموذج مساعد (يفضل أن يكون أصغر بكثير) بنفس المعالج اللغوي، لتوليد بعض الرموز المرشحة. ثم يقوم النموذج الرئيسي +بتحقق من الرموز المرشحة في تمرير توجيهي واحد، والذي يسرع عملية فك التشفير. إذا +`do_sample=True`، يتم استخدام التحقق من الرمز مع إعادة المعاينة المقدمة في +[ورقة فك التشفير التخميني](https://arxiv.org/pdf/2211.17192.pdf). + +حاليًا، يتم دعم البحث الشره والمعاينة فقط مع فك التشفير بمساعدة، ولا يدعم فك التشفير بمساعدة الإدخالات المجمعة. +لمعرفة المزيد حول فك التشفير بمساعدة، تحقق من [هذه التدوينة](https://huggingface.co/blog/assisted-generation). + +لتمكين فك التشفير بمساعدة، قم بتعيين وسيط `assistant_model` بنموذج. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> prompt = "Alice and Bob" +>>> checkpoint = "EleutherAI/pythia-1.4b-deduped" +>>> assistant_checkpoint = "EleutherAI/pythia-160m-deduped" + +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> model = AutoModelForCausalLM.from_pretrained(checkpoint) +>>> assistant_model = AutoModelForCausalLM.from_pretrained(assistant_checkpoint) +>>> outputs = model.generate(**inputs, assistant_model=assistant_model) +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +['Alice and Bob are sitting in a bar. Alice is drinking a beer and Bob is drinking a'] +``` + +عند استخدام فك التشفير بمساعدة مع طرق المعاينة، يمكنك استخدام وسيط `temperature` للتحكم في العشوائية، +تمامًا كما هو الحال في المعاينة متعددة الحدود. ومع ذلك، في فك التشفير بمساعدة، قد يساعد تقليل درجة الحرارة في تحسين الكمون. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed +>>> set_seed(42) # من أجل إمكانية إعادة الإنتاج + +>>> prompt = "Alice and Bob" +>>> checkpoint = "EleutherAI/pythia-1.4b-deduped" +>>> assistant_checkpoint = "EleutherAI/pythia-160m-deduped" + +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +>>> inputs = tokenizer(prompt, return_tensors="pt") + +>>> model = AutoModelForCausalLM.from_pretrained(checkpoint) +>>> assistant_model = AutoModelForCausalLM.from_pretrained(assistant_checkpoint) +>>> outputs = model.generate(**inputs, assistant_model=assistant_model, do_sample=True, temperature=0.5) +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +['Alice and Bob, a couple of friends of mine, who are both in the same office as'] +``` + +بدلاً من ذلك، يمكنك أيضًا تعيين `prompt_lookup_num_tokens` لتشغيل فك التشفير بمساعدة n-gram، بدلاً من +فك التشفير بمساعدة النماذج. يمكنك قراءة المزيد عنه [هنا](https://twitter.com/joao_gante/status/1747322413006643259). +### فك تشفير DoLa + +**D** فك التشفير عن طريق تباين **La** فك تشفير الطبقات (DoLa) هو استراتيجية فك تشفير تبايني لتحسين الواقعية والحد من +الهلوسة في LLMs، كما هو موضح في هذه الورقة ICLR 2024 [DoLa: فك تشفير الطبقات التبايني يحسن الواقعية في نماذج اللغة الكبيرة](https://arxiv.org/abs/2309.03883). + +يتم تحقيق DoLa من خلال تضخيم الاختلافات في logits التي تم الحصول عليها من الطبقات النهائية +مقابل الطبقات السابقة، وبالتالي تضخيم المعرفة الواقعية الموضعية في جزء معين من طبقات المحول. +يتم تحقيق DoLa من خلال تضخيم الاختلافات في logits التي تم الحصول عليها من الطبقات النهائية +مقابل الطبقات السابقة، وبالتالي تضخيم المعرفة الواقعية الموضعية في جزء معين من طبقات المحول. + +اتبع الخطوتين التاليتين لتنشيط فك تشفير DoLa عند استدعاء وظيفة `model.generate`: + +1. قم بتعيين وسيط `dola_layers`، والذي يمكن أن يكون إما سلسلة أو قائمة من الأعداد الصحيحة. + - إذا تم تعيينه على سلسلة، فيمكن أن يكون أحد `low`، `high`. + - إذا تم تعيينه على قائمة من الأعداد الصحيحة، فيجب أن يكون قائمة بمؤشرات الطبقات بين 0 والعدد الإجمالي للطبقات في النموذج. طبقة 0 هي طبقة تضمين الكلمات، والطبقة 1 هي أول طبقة محول، وهكذا. +2. يُقترح تعيين `repetition_penalty = 1.2` لتقليل التكرار في فك تشفير DoLa. + +راجع الأمثلة التالية لفك تشفير DoLa باستخدام نموذج LLaMA-7B المكون من 32 طبقة. + +```python +>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed +>>> import torch + +>>> tokenizer = AutoTokenizer.from_pretrained("huggyllama/llama-7b") +>>> model = AutoModelForCausalLM.from_pretrained("huggyllama/llama-7b", torch_dtype=torch.float16) +>>> device = 'cuda' if torch.cuda.is_available() else 'cpu' +>>> model.to(device) +>>> set_seed(42) + +>>> text = "On what date was the Declaration of Independence officially signed?" +>>> inputs = tokenizer(text, return_tensors="pt").to(device) + +# Vanilla greddy decoding +>>> vanilla_output = model.generate(**inputs, do_sample=False, max_new_tokens=50) +>>> tokenizer.batch_decode(vanilla_output[:, inputs.input_ids.shape[-1]:], skip_special_tokens=True) +['\nThe Declaration of Independence was signed on July 4, 1776.\nWhat was the date of the signing of the Declaration of Independence?\nThe Declaration of Independence was signed on July 4,'] + +# DoLa decoding with contrasting higher part of layers (layers 16,18,...,30) +>>> dola_high_output = model.generate(**inputs, do_sample=False, max_new_tokens=50, dola_layers='high') +>>> tokenizer.batch_decode(dola_high_output[:, inputs.input_ids.shape[-1]:], skip_special_tokens=True) +['\nJuly 4, 1776, when the Continental Congress voted to separate from Great Britain. The 56 delegates to the Continental Congress signed the Declaration on August 2, 1776.'] + +# DoLa decoding with contrasting specific layers (layers 28 and 30) +>>> dola_custom_output = model.generate(**inputs, do_sample=False, max_new_tokens=50, dola_layers=[28,30], repetition_penalty=1.2) +>>> tokenizer.batch_decode(dola_custom_output[:, inputs.input_ids.shape[-1]:], skip_special_tokens=True) +['\nIt was officially signed on 2 August 1776, when 56 members of the Second Continental Congress, representing the original 13 American colonies, voted unanimously for the resolution for independence. The 2'] +``` + +#### فهم معاملات 'dola_layers' + +يمثل 'dola_layers' طبقات المرشح في الاختيار المبكر للطبقة، كما هو موضح في ورقة DoLa. ستتم مقارنة الطبقة المبكرة المحددة بالطبقة النهائية. + +يؤدي تعيين 'dola_layers' إلى 'low' أو 'high' إلى تحديد الجزء السفلي أو العلوي من الطبقات للمقارنة، على التوالي. + +- بالنسبة لنماذج 'N-layer' مع 'N <= 40' layer، يتم استخدام الطبقات من 'range(0، N // 2، 2)' و'range(N // 2، N، 2)' لـ 'low' و 'high' layers، على التوالي. + +- بالنسبة للنماذج التي تحتوي على 'N > 40' layer، يتم استخدام الطبقات من 'range(0، 20، 2)' و'range(N - 20، N، 2)' لـ 'low' و 'high' layers، على التوالي. + +- إذا كان للنموذج تعليقات توضيحية مرتبطة بالكلمات، فإننا نتخطى طبقة التعليقات التوضيحية للكلمات (الطبقة 0) ونبدأ من الطبقة الثانية، نظرًا لأن الخروج المبكر من التعليقات التوضيحية للكلمات سيصبح دالة الهوية. + +- قم بتعيين 'dola_layers' إلى قائمة من الأعداد الصحيحة لفهرسة الطبقات لمقارنة الطبقات المحددة يدويًا. على سبيل المثال، يؤدي تعيين 'dola_layers=[28،30]' إلى مقارنة الطبقة النهائية (الطبقة 32) بالطبقات 28 و30. + +اقترحت الورقة أن مقارنة الطبقات 'العالية' لتحسين مهام الإجابات القصيرة مثل TruthfulQA، ومقارنة الطبقات 'المنخفضة' لتحسين جميع مهام الاستدلال بالإجابات الطويلة الأخرى، مثل GSM8K وStrategyQA وFACTOR وVicunaQA. لا يوصى بتطبيق DoLa على النماذج الأصغر مثل GPT-2، كما هو موضح في الملحق N من الورقة. \ No newline at end of file From a920aead6967f0b8fe15482b50a5c1a12957f85f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:29 +0300 Subject: [PATCH 022/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/gguf.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/gguf.md | 66 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/source/ar/gguf.md diff --git a/docs/source/ar/gguf.md b/docs/source/ar/gguf.md new file mode 100644 index 00000000000000..aeacd3b1bcd978 --- /dev/null +++ b/docs/source/ar/gguf.md @@ -0,0 +1,66 @@ +# GGUF وتفاعلها مع المحولات + +تُستخدم صيغة ملف GGUF لتخزين النماذج للاستنتاج مع [GGML](https://github.com/ggerganov/ggml) والمكتبات الأخرى التي تعتمد عليها، مثل [llama.cpp](https://github.com/ggerganov/llama.cpp) أو [whisper.cpp](https://github.com/ggerganov/whisper.cpp) الشهيرة جدًا. + +إنها صيغة ملف [مدعومة من قبل Hugging Face Hub](https://huggingface.co/docs/hub/en/gguf) مع ميزات تسمح بالتفتيش السريع للتوابع والبيانات الوصفية داخل الملف. + +تم تصميم تنسيق الملف هذا كـ "تنسيق ملف واحد" حيث يحتوي ملف واحد عادةً على كل من سمات التكوين ومفردات المحلل اللغوي والسمات الأخرى، بالإضافة إلى جميع التوابع التي سيتم تحميلها في النموذج. تأتي هذه الملفات بتنسيقات مختلفة وفقًا لنوع التكميم في الملف. نلقي نظرة موجزة على بعضها [هنا](https://huggingface.co/docs/hub/en/gguf#quantization-types). + +## الدعم داخل المحولات + +أضفنا القدرة على تحميل ملفات `gguf` داخل `المحولات` لتوفير قدرات تدريب/ضبط إضافية لنماذج gguf، قبل إعادة تحويل تلك النماذج إلى `gguf` لاستخدامها داخل نظام بيئي `ggml`. عند تحميل نموذج، نقوم أولاً بإلغاء تكميمه إلى fp32، قبل تحميل الأوزان لاستخدامها في PyTorch. + +> [!ملاحظة] +> لا يزال الدعم استكشافيًا للغاية ونرحب بالمساهمات لتثبيته عبر أنواع التكميم وبنيات النماذج. + +فيما يلي، بنيات النماذج وأنواع التكميم المدعومة: + +### أنواع التكميم المدعومة + +تُحدد أنواع التكميم المدعومة مبدئيًا وفقًا لملفات التكميم الشائعة التي تمت مشاركتها على Hub. + +- F32 +- Q2_K +- Q3_K +- Q4_0 +- Q4_K +- Q5_K +- Q6_K +- Q8_0 + +نأخذ مثالاً من المحلل الممتاز [99991/pygguf](https://github.com/99991/pygguf) Python لإلغاء تكميم الأوزان. + +### بنيات النماذج المدعومة + +في الوقت الحالي، بنيات النماذج المدعومة هي البنيات التي كانت شائعة جدًا على Hub، وهي: + +- LLaMa +- ميسترال +- Qwen2 + +## مثال الاستخدام + +لتحميل ملفات `gguf` في `المحولات`، يجب تحديد وسيط `gguf_file` لأساليب `from_pretrained` لكل من المحللات اللغوية والنماذج. فيما يلي كيفية تحميل محلل لغوي ونموذج، يمكن تحميلهما من نفس الملف بالضبط: + +```py +from transformers import AutoTokenizer, AutoModelForCausalLM + +model_id = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF" +filename = "tinyllama-1.1b-chat-v1.0.Q6_K.gguf" + +tokenizer = AutoTokenizer.from_pretrained(model_id, gguf_file=filename) +model = AutoModelForCausalLM.from_pretrained(model_id, gguf_file=filename) +``` + +الآن لديك حق الوصول إلى الإصدار الكامل غير المكمم للنموذج في نظام PyTorch البيئي، حيث يمكنك دمجه مع مجموعة من الأدوات الأخرى. + +لإعادة التحويل إلى ملف `gguf`، نوصي باستخدام ملف [`convert-hf-to-gguf.py`](https://github.com/ggerganov/llama.cpp/blob/master/convert-hf-to-gguf.py) من llama.cpp. + +فيما يلي كيفية إكمال البرنامج النصي أعلاه لحفظ النموذج وتصديره مرة أخرى إلى `gguf`: + +```py +tokenizer.save_pretrained('directory') +model.save_pretrained('directory') + +!python ${path_to_llama_cpp}/convert-hf-to-gguf.py ${directory} +``` \ No newline at end of file From 5ef35eb5fa810f31a1835f34fafd0c8639088b5f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:31 +0300 Subject: [PATCH 023/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/llm=5Foptims.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/llm_optims.md | 291 +++++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 docs/source/ar/llm_optims.md diff --git a/docs/source/ar/llm_optims.md b/docs/source/ar/llm_optims.md new file mode 100644 index 00000000000000..7cb865fac7dd19 --- /dev/null +++ b/docs/source/ar/llm_optims.md @@ -0,0 +1,291 @@ +# تحسين الاستنتاج لنماذج اللغة الضخمة + +دفعت نماذج اللغة الضخمة (LLMs) تطبيقات توليد النصوص، مثل نماذج الدردشة واستكمال الأكواد، إلى المستوى التالي من خلال إنتاج نصوص تظهر مستوى عاليًا من الفهم والطلاقة. ولكن ما يجعل نماذج اللغة الضخمة قوية - أي حجمها - يطرح أيضًا تحديات للاستنتاج. + +الاستنتاج الأساسي بطيء لأن نماذج اللغة الضخمة يجب أن تُستدعى بشكل متكرر لتوليد الرمز التالي. تتزايد تسلسل المدخلات مع تقدم التوليد، الأمر الذي يستغرق وقتًا أطول وأطول لنماذج اللغة الضخمة لمعالجتها. تمتلك نماذج اللغة الضخمة أيضًا مليارات من المعلمات، مما يجعل من الصعب تخزين ومعالجة جميع هذه الأوزان في الذاكرة. + +سيوضح هذا الدليل كيفية استخدام تقنيات التحسين المتاحة في مكتبة Transformers لتسريع الاستنتاج لنماذج اللغة الضخمة. + +> [!TIP] +> توفر Hugging Face أيضًا [Text Generation Inference (TGI)](https://hf.co/docs/text-generation-inference)، وهي مكتبة مخصصة لنشر وخدمة نماذج اللغة الضخمة المحسنة للغاية للاستنتاج. تتضمن ميزات التحسين الموجهة للنشر غير المدرجة في مكتبة Transformers، مثل التجميع المستمر لزيادة الإنتاجية ومتوازية التنسور لاستنتاج متعدد وحدات معالجة الرسومات (GPU). + +## ذاكرة التخزين المؤقت الثابتة لـ key-value و `torch.compile` + +أثناء فك التشفير، يحسب نموذج اللغة الضخمة قيم key-value (kv) لكل رمز من رموز المدخلات، وبما أنه تنبؤي ذاتيًا، فإنه يحسب نفس قيم kv في كل مرة لأن الإخراج المولد يصبح الآن جزءًا من المدخلات. هذا غير فعال لأنك تقوم بإعادة حساب نفس قيم kv في كل مرة. + +لتحسين ذلك، يمكنك استخدام ذاكرة التخزين المؤقت لـ kv لتخزين المفاتيح والقيم السابقة بدلاً من إعادة حسابها في كل مرة. ومع ذلك، نظرًا لأن ذاكرة التخزين المؤقت لـ kv تنمو مع كل خطوة من خطوات التوليد وهي ديناميكية، فإنها تمنعك من الاستفادة من [`torch.compile`](./perf_torch_compile)، وهي أداة تحسين قوية تقوم بدمج كود PyTorch في نواة سريعة ومحسنة. + +تعالج ذاكرة التخزين المؤقت الثابتة لـ kv هذه المشكلة من خلال تخصيص حجم ذاكرة التخزين المؤقت لـ kv مسبقًا إلى قيمة قصوى، مما يتيح لك دمجها مع `torch.compile` للتسريع بمقدار 4 مرات. قد يختلف تسريعك اعتمادًا على حجم النموذج (تمتلك النماذج الأكبر تسريعًا أصغر) والأجهزة. + +> [!WARNING] +> حاليًا، تدعم نماذج [Llama](./model_doc/llama2] وبعض النماذج الأخرى فقط ذاكرة التخزين المؤقت الثابتة لـ kv و`torch.compile`. تحقق من [هذه المشكلة](https://github.com/huggingface/transformers/issues/28981) للحصول على قائمة توافق النماذج المباشرة. + +هناك ثلاثة نكهات من استخدام ذاكرة التخزين المؤقت الثابتة لـ kv، اعتمادًا على مدى تعقيد مهمتك: +1. الاستخدام الأساسي: قم ببساطة بتعيين علامة في `generation_config` (يوصى بها)؛ +2. الاستخدام المتقدم: التعامل مع كائن ذاكرة التخزين المؤقت للتوليد متعدد الأدوار أو حلقة التوليد المخصصة؛ +3. الاستخدام المتقدم: قم بتجميع دالة `generate` بأكملها في رسم بياني واحد، إذا كان وجود رسم بياني واحد ذي صلة بالنسبة لك. + +حدد علامة التبويب الصحيحة أدناه للحصول على مزيد من التعليمات حول كل من هذه النكهات. + +> [!TIP] +> بغض النظر عن الاستراتيجية المستخدمة مع `torch.compile`، يمكنك تجنب إعادة التجميع المتعلقة بالشكل إذا قمت بمحاذاة إدخالات نموذج اللغة الضخمة إلى مجموعة محدودة من القيم. علم التوكيد [`pad_to_multiple_of`](https://huggingface.co/docs/transformers/main_classes/tokenizer#transformers.PreTrainedTokenizer.__call__.pad_to_multiple_of) هو صديقك! + + + +في هذا المثال، دعنا نستخدم نموذج [Gemma](https://hf.co/google/gemma-2b). كل ما نحتاج إلى فعله هو: +1. الوصول إلى سمة `generation_config` للنموذج وتعيين `cache_implementation` إلى "static"؛ +2. استدعاء `torch.compile` على النموذج لتجميع عملية التمرير للأمام مع ذاكرة التخزين المؤقت الثابتة لـ kv. + +وهذا كل شيء! + +```py +from transformers import AutoTokenizer, AutoModelForCausalLM +import torch +import os +os.environ["TOKENIZERS_PARALLELISM"] = "false" # لمنع التحذيرات الطويلة :) + +tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b") +model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto") + +model.generation_config.cache_implementation = "static" + +model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True) +input_text = "The theory of special relativity states " +input_ids = tokenizer(input_text, return_tensors="pt").to("cuda") + +outputs = model.generate(**input_ids) +print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['The theory of special relativity states 1. The speed of light is constant in all inertial reference'] +``` + +تحت الغطاء، ستحاول دالة `generate` إعادة استخدام كائن ذاكرة التخزين المؤقت نفسه، مما يزيل الحاجة إلى إعادة التجميع في كل استدعاء. تجنب إعادة التجميع أمر بالغ الأهمية للحصول على أقصى استفادة من `torch.compile`، ويجب أن تكون على دراية بما يلي: +1. إذا تغير حجم الدفعة أو زاد طول الإخراج الأقصى بين الاستدعاءات، فسيتعين إعادة تهيئة ذاكرة التخزين المؤقت، مما يؤدي إلى تشغيل تجميع جديد؛ +2. تكون أولى الاستدعاءات القليلة للدالة المجمعة أبطأ، حيث يجري تجميع الدالة. + +> [!WARNING] +> للاستخدام الأكثر تقدمًا لذاكرة التخزين المؤقت الثابتة، مثل المحادثات متعددة الأدوار، نوصي بإنشاء كائن ذاكرة التخزين المؤقت والتعامل معه خارج [`~GenerationMixin.generate`]. راجع علامة التبويب "الاستخدام المتقدم". + + + + +يمكن تمرير كائن [`StaticCache`] إلى دالة [`~GenerationMixin.generate`] الخاصة بالنموذج في إطار وسيط `past_key_values`. سيحتفظ كائن ذاكرة التخزين المؤقت بمحتويات ذاكرة التخزين المؤقت، لذا يمكنك تمريره إلى استدعاء جديد لـ [`~GenerationMixin.generate`] لمواصلة التوليد، كما تفعل مع ذاكرة التخزين المؤقت الديناميكية. + +```py +from transformers import AutoTokenizer, AutoModelForCausalLM, StaticCache +import torch +import os +os.environ["TOKENIZERS_PARALLELISM"] = "false" # لمنع التحذيرات الطويلة :) + +tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b") +model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto") + +model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True) +input_text = "The theory of special relativity states " +input_ids = tokenizer(input_text, return_tensors="pt").to("cuda") +prompt_length = input_ids.input_ids.shape[1] +model.generation_config.max_new_tokens = 16 + +past_key_values = StaticCache( + config=model.config, + max_batch_size=1, + # إذا كنت تخطط لإعادة استخدام ذاكرة التخزين المؤقت، فتأكد من أن طول ذاكرة التخزين المؤقت كبير بما يكفي لجميع الحالات +max_cache_len=prompt_length+(model.generation_config.max_new_tokens*2), + device=model.device, + dtype=model.dtype +) +outputs = model.generate(**input_ids, past_key_values=past_key_values) +print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['The theory of special relativity states 1. The speed of light is constant in all inertial reference frames. 2'] + +# قم بتمرير النص المولد ونفس كائن ذاكرة التخزين المؤقت للاستمرار في التوليد من حيث توقف. اختياريًا، في +# محادثة متعددة الأدوار، أضف إدخال المستخدم الجديد إلى النص المولد. +new_input_ids = outputs +outputs = model.generate(new_input_ids, past_key_values=past_key_values) +print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['The theory of special relativity states 1. The speed of light is constant in all inertial reference frames. 2. The speed of light is constant in all inertial reference frames. 3.'] +``` +> [!TIP] +> إذا كنت تريد إعادة استخدام نفس كائن [`StaticCache`] على موجه جديد، فتأكد من إعادة تعيين محتوياته باستخدام طريقة `.reset()` بين الاستدعاءات + +إذا كنت تريد الذهاب إلى مستوى أعمق، فيمكن أيضًا تمرير كائن [`StaticCache`] إلى تمرير النموذج للأمام في إطار وسيط `past_key_values` نفسه. باستخدام هذه الاستراتيجية، يمكنك كتابة دالتك الخاصة لفك تشفير الرمز التالي نظرًا للرمز الحالي والموضع وموضع ذاكرة التخزين المؤقت للرموز المولدة سابقًا. + +```py +from transformers import LlamaTokenizer, LlamaForCausalLM, StaticCache, logging +from transformers.testing_utils import CaptureLogger +import torch + +prompts = [ + "Simply put, the theory of relativity states that ", + "My favorite all time favorite condiment is ketchup.", +] + +NUM_TOKENS_TO_GENERATE = 40 +torch_device = "cuda" + +tokenizer = LlamaTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf", pad_token="", padding_side="right") +model = LlamaForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", device_map="sequential") +inputs = tokenizer(prompts, return_tensors="pt", padding=True).to(model.device) + +def decode_one_tokens(model, cur_token, input_pos, cache_position, past_key_values): + logits = model( + cur_token, + position_ids=input_pos, + cache_position=cache_position, + past_key_values=past_key_values, + return_dict=False, + use_cache=True + )[0] + new_token = torch.argmax(logits[:, -1], dim=-1)[:, None] + return new_token +``` + +هناك بعض الأشياء المهمة التي يجب عليك القيام بها لتمكين ذاكرة التخزين المؤقت الثابتة لـ kv و`torch.compile` مع طريقة `StaticCache`: +1. قم بإنشاء مثيل [`StaticCache`] قبل استخدام النموذج للاستنتاج. هناك يمكنك تكوين معلمات مثل حجم الدفعة القصوى وطول التسلسل. +2. استدعاء `torch.compile` على النموذج لتجميع عملية التمرير للأمام مع ذاكرة التخزين المؤقت الثابتة لـ kv. +3. قم بتعيين `enable_math=True` في سياق [torch.backends.cuda.sdp_kernel](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention.html) لتمكين تنفيذ C++ الأصلي لـ PyTorch للاهتمام بمنتج النقاط المحدد لحجمها لتسريع الاستنتاج أكثر. + +```py +batch_size, seq_length = inputs["input_ids"].shape +with torch.no_grad(): + past_key_values = StaticCache( + config=model.config, max_batch_size=2, max_cache_len=4096, device=torch_device, dtype=model.dtype + ) + cache_position = torch.arange(seq_length, device=torch_device) + generated_ids = torch.zeros( + batch_size, seq_length + NUM_TOKENS_TO_GENERATE + 1, dtype=torch.int, device=torch_device + ) + generated_ids[:, cache_position] = inputs["input_ids"].to(torch_device).to(torch.int) + + logits = model( + **inputs, cache_position=cache_position, past_key_values=past_key_values,return_dict=False, use_cache=True + )[0] + next_token = torch.argmax(logits[:, -1], dim=-1)[:, None] + generated_ids[:, seq_length] = next_token[:, 0] + + decode_one_tokens = torch.compile(decode_one_tokens, mode="reduce-overhead", fullgraph=True) + cache_position = torch.tensor([seq_length + 1], device=torch_device) + for _ in range(1, NUM_TOKENS_TO_GENERATE): + with torch.backends.cuda.sdp_kernel(enable_flash=False, enable_mem_efficient=False, enable_math=True): + next_token = decode_one_tokens(model, next_token.clone(), None, cache_position, past_key_values) + generated_ids[:, cache_position] = next_token.int() + cache_position += 1 + +text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +text +['Simply put, the theory of relativity states that 1) the speed of light is constant, 2) the speed of light is the same for all observers, and 3) the laws of physics are the same for all observers.', + 'My favorite all time favorite condiment is ketchup. I love it on everything. I love it on my eggs, my fries, my chicken, my burgers, my hot dogs, my sandwiches, my salads, my p'] +``` + + + + + + +من حيث الكود، فإن تجميع دالة `generate` بأكملها أبسط حتى من الاستخدام الأساسي: قم باستدعاء `torch.compile` على `generate` لتجميع الدالة بأكملها. لا يلزم تحديد استخدام ذاكرة التخزين المؤقت الثابتة: على الرغم من أنها متوافقة، إلا أن ذاكرة التخزين المؤقت الديناميكية (الافتراضية) كانت أسرع في مقاييسنا. + +```py +from transformers import AutoTokenizer, AutoModelForCausalLM +import torch +import os +os.environ["TOKENIZERS_PARALLELISM"] = "false" # لمنع التحذيرات الطويلة :) + +tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b") +model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto") + +model.generate = torch.compile(model.generate, mode="reduce-overhead", fullgraph=True) +input_text = "The theory of special relativity states " +input_ids = tokenizer(input_text, return_tensors="pt").to("cuda") + +outputs = model.generate(**input_ids) +print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['The theory of special relativity states 1. The speed of light is constant in all inertial reference'] +``` + +ونتيجة لذلك، فإننا لا نقوم بتجميع عملية التمرير للأمام للنموذج فحسب، بل نقوم أيضًا بتجميع جميع عمليات إعداد الإدخال وعمليات معالج الرموز وما إلى ذلك. يجب أن يكون الاستدعاء الناتج لـ `generate` أبطأ قليلاً مقارنة بمثال الاستخدام الأساسي، وقد يكون الرسم البياني المجمع أكثر ملاءمة لأجهزة الأجهزة أو حالات الاستخدام الأكثر غرابة. ومع ذلك، هناك عيوب شديدة في استخدام هذا النهج: +1. التجميع أبطأ بكثير؛ +2. يجب إجراء جميع معلمات `generate` من خلال `generation_config`؛ +3. يتم قمع العديد من التحذيرات والاستثناءات - نقترح عليك اختباره أولاً بشكل غير مجمع؛ +4. على الرغم من أننا نعمل عليه، إلا +## تحسين الانتباه + +هناك مشكلة معروفة في نماذج المحولات وهي أن آلية الانتباه الذاتي تنمو بشكل تربيعي في الحساب والذاكرة مع عدد الرموز المميزة للإدخال. يتم تضخيم هذا القيد فقط في نماذج اللغة الكبيرة التي تتعامل مع تسلسلات أطول. لمعالجة هذا الأمر، جرب FlashAttention2 أو التنفيذ المُحسَّن للانتباه المُوزَّع المُقَيَّد المُقَدَّم في PyTorch، واللذان يُعدَّان أكثر كفاءة في الذاكرة ويمكن أن يُسرِّعا الاستنتاج. + +### FlashAttention-2 + +يقسم FlashAttention و [FlashAttention-2](./perf_infer_gpu_one#flashattention-2) حساب الانتباه إلى أجزاء أصغر ويقلل عدد عمليات القراءة/الكتابة الوسيطة إلى ذاكرة GPU لتسريع الاستنتاج. ويحسن FlashAttention-2 من خوارزمية FlashAttention الأصلية من خلال الموازاة أيضًا على بعد طول التسلسل وتقسيم العمل بشكل أفضل على الأجهزة لتقليل النفقات العامة للاتصال والتزامن. + +لاستخدام FlashAttention-2، قم بتعيين `attn_implementation="flash_attention_2"` في طريقة [`~PreTrainedModel.from_pretrained`] . + +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quant_config = BitsAndBytesConfig(load_in_8bit=True) +model = AutoModelForCausalLM.from_pretrained( + "google/gemma-2b", + quantization_config=quant_config, + torch_dtype=torch.bfloat16, + attn_implementation="flash_attention_2", +) +``` + +### الانتباه الموزع المُقَيَّد المُقَدَّم في PyTorch + +يتم تمكين الانتباه الموزع المُقَيَّد المُقَدَّم في PyTorch 2.0 افتراضيًا وهو يدعم FlashAttention و xFormers وتنفيذ PyTorch في C++. يختار الانتباه الموزع المُقَيَّد المُقَدَّم في PyTorch أكثر خوارزميات الانتباه أداءً إذا كنت تستخدم backend CUDA. وبالنسبة إلى backends الأخرى، فإن الانتباه الموزع المُقَيَّد المُقَدَّم في PyTorch يستخدم التنفيذ الافتراضي لـ C++. + +> [!TIP] +> يدعم الانتباه الموزع المُقَيَّد المُقَدَّم في PyTorch FlashAttention-2 طالما أن لديك أحدث إصدار من PyTorch مثبتًا. + +استخدم مدير سياق [torch.backends.cuda.sdp_kernel](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention.html) لتمكين أو تعطيل أي من خوارزميات الانتباه الثلاث بشكل صريح. على سبيل المثال، قم بتعيين `enable_flash=True` لتمكين FlashAttention. + +```py +import torch +from transformers import AutoModelForCausalLM + +model = AutoModelForCausalLM.from_pretrained( + "google/gemma-2b", + torch_dtype=torch.bfloat16, +) + +with torch.backends.cuda.sdp_kernel(enable_flash=True, enable_math=False, enable_mem_efficient=False): + outputs = model.generate(**inputs) +``` + +## التكميم + +يقلل التكميم من حجم أوزان نماذج اللغة الكبيرة من خلال تخزينها في دقة أقل. وهذا يترجم إلى استخدام ذاكرة أقل ويجعل تحميل نماذج اللغة الكبيرة للاستنتاج أكثر سهولة إذا كنت مقيدًا بذاكرة GPU الخاصة بك. إذا لم تكن محدودًا بـ GPU الخاص بك، فلا يلزم بالضرورة تكميم نموذجك لأنه قد يتكبد تكلفة صغيرة في الكمون (باستثناء وحدات AWQ و AWQ المدمجة) بسبب الخطوة الإضافية المطلوبة لكممة وإلغاء كممة الأوزان. + +> [!TIP] +> هناك العديد من مكتبات التكميم (راجع دليل [Quantization](./quantization) للحصول على مزيد من التفاصيل) المتاحة، مثل Quanto و AQLM و AWQ و AutoGPTQ. لا تتردد في تجربتها وشاهد أيها يعمل بشكل أفضل لحالتك الاستخدامية. نوصي أيضًا بقراءة منشور المدونة [نظرة عامة على مخططات التكميم المدعومة أصلاً في 🤗 Transformers](https://hf.co/blog/overview-quantization-transformers) الذي يقارن AutoGPTQ و bitsandbytes. + +استخدم آلة حاسبة ذاكرة النموذج أدناه لتقدير ومقارنة مقدار الذاكرة المطلوبة لتحميل نموذج. على سبيل المثال، جرب تقدير مقدار الذاكرة التي يتكلفها تحميل [Mistral-7B-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1). + + + +لتحميل Mistral-7B-v0.1 بنصف الدقة، قم بتعيين معلمة `torch_dtype` في طريقة [`~transformers.AutoModelForCausalLM.from_pretrained`] إلى `torch.bfloat16`. يتطلب هذا 13.74 جيجابايت من الذاكرة. + +```py +from transformers import AutoTokenizer, AutoModelForCausalLM +import torch + +model = AutoModelForCausalLM.from_pretrained( + "mistralai/Mistral-7B-v0.1", torch_dtype=torch.bfloat16, device_map="auto", +) +``` + + +لتحميل نموذج كمي (8 بت أو 4 بت) للاستدلال، جرب [bitsandbytes](https://hf.co/docs/bitsandbytes) وقم بتعيين معلمات "load_in_4bit" أو "load_in_8bit" إلى "True". يتطلب تحميل النموذج في 8 بتات فقط 6.87 جيجابايت من الذاكرة. + +```py +from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig +import torch + +quant_config = BitsAndBytesConfig(load_in_8bit=True) +model = AutoModelForCausalLM.from_pretrained( + "mistralai/Mistral-7B-v0.1", quantization_config=quant_config, device_map="auto" +) +``` \ No newline at end of file From ecd033cba085d26cd45cde4a4a664a434712bc3d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:33 +0300 Subject: [PATCH 024/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fcpu=5Fmany.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_train_cpu_many.md | 303 ++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 docs/source/ar/perf_train_cpu_many.md diff --git a/docs/source/ar/perf_train_cpu_many.md b/docs/source/ar/perf_train_cpu_many.md new file mode 100644 index 00000000000000..8dce7df7f731af --- /dev/null +++ b/docs/source/ar/perf_train_cpu_many.md @@ -0,0 +1,303 @@ +# التدريب الفعال على معالجات متعددة + +عندما يكون التدريب على معالج واحد بطيئًا جدًا، يمكننا استخدام معالجات متعددة. يركز هذا الدليل على تمكين PyTorch-based DDP من التدريب الموزع على المعالج المركزي بكفاءة على [الحديد العاري](#usage-in-trainer) و [Kubernetes](#usage-with-kubernetes). + +## Intel® oneCCL Bindings لـ PyTorch + +[Intel® oneCCL](https://github.com/oneapi-src/oneCCL) (مكتبة الاتصالات الجماعية) هي مكتبة للتدريب الموزع على التعلم العميق بكفاءة، وتنفذ عمليات جماعية مثل allreduce و allgather و alltoall. لمزيد من المعلومات حول oneCCL، يرجى الرجوع إلى [وثائق oneCCL](https://spec.oneapi.com/versions/latest/elements/oneCCL/source/index.html) و [مواصفات oneCCL](https://spec.oneapi.com/versions/latest/elements/oneCCL/source/index.html). + +تنفذ الوحدة النمطية `oneccl_bindings_for_pytorch` (`torch_ccl` قبل الإصدار 1.12) واجهة برمجة تطبيقات مجموعة العمليات C10D الخاصة بـ PyTorch ويمكن تحميلها ديناميكيًا كمجموعة عمليات خارجية ولا تعمل إلا على منصة Linux الآن + +تحقق من مزيد من المعلومات التفصيلية لـ [oneccl_bind_pt](https://github.com/intel/torch-ccl). + +### تثبيت Intel® oneCCL Bindings لـ PyTorch + +تتوفر ملفات العجلة لإصدارات Python التالية: + +| إصدار الملحق | Python 3.6 | Python 3.7 | Python 3.8 | Python 3.9 | Python 3.10 | +| :---------------: | :--------: | :--------: | :--------: | :--------: | :---------: | +| 2.1.0 | | √ | √ | √ | √ | +| 2.0.0 | | √ | √ | √ | √ | +| 1.13.0 | | √ | √ | √ | √ | +| 1.12.100 | | √ | √ | √ | √ | +| 1.12.0 | | √ | √ | √ | √ | + +يرجى تشغيل `pip list | grep torch` للحصول على إصدار PyTorch الخاص بك. +```bash +pip install oneccl_bind_pt=={pytorch_version} -f https://developer.intel.com/ipex-whl-stable-cpu +``` +حيث يجب أن يكون `{pytorch_version}` إصدار PyTorch الخاص بك، على سبيل المثال 2.1.0. +تحقق من المزيد من النهج لتثبيت [oneccl_bind_pt](https://github.com/intel/torch-ccl). +يجب أن تتطابق إصدارات oneCCL و PyTorch. + + + +oneccl_bindings_for_pytorch 1.12.0 عجلة مسبقة البناء لا تعمل مع PyTorch 1.12.1 (فهي لـ PyTorch 1.12.0) +يجب أن يعمل PyTorch 1.12.1 مع oneccl_bindings_for_pytorch 1.12.100 + + + +## مكتبة Intel® MPI +استخدم هذا التنفيذ MPI القائم على المعايير لتقديم رسائل مجموعات مرنة وفعالة وقابلة للتطوير على بنية Intel®. هذا المكون هو جزء من Intel® oneAPI HPC Toolkit. + +يتم تثبيت oneccl_bindings_for_pytorch جنبًا إلى جنب مع مجموعة أدوات MPI. يجب تحديد مصدر البيئة قبل استخدامه. + +لـ Intel® oneCCL >= 1.12.0 +```bash +oneccl_bindings_for_pytorch_path=$(python -c "from oneccl_bindings_for_pytorch import cwd; print(cwd)") +source $oneccl_bindings_for_pytorch_path/env/setvars.sh +``` + +لـ Intel® oneCCL الذي يقل إصدارها عن 1.12.0 +```bash +torch_ccl_path=$(python -c "import torch; import torch_ccl; import os; print(os.path.abspath(os.path.dirname(torch_ccl.__file__)))") +source $torch_ccl_path/env/setvars.sh +``` + +#### تثبيت Intel® Extension لـ PyTorch +#### تثبيت Intel® Extension لـ PyTorch + +يوفر Intel Extension لـ PyTorch (IPEX) تحسينات أداء لتدريب المعالج باستخدام كل من Float32 و BFloat16 (راجع قسم [معالج واحد](./perf_train_cpu) لمعرفة المزيد). + + +يأخذ الاستخدام التالي في Trainer "مثالًا على استخدام mpirun في مكتبة Intel® MPI. + + +## الاستخدام في Trainer +لتمكين التدريب الموزع متعدد المعالجات في Trainer مع backend ccl، يجب على المستخدمين إضافة **--ddp_backend ccl** في وسيطات الأمر. + +دعونا نرى مثالاً مع [مثال الإجابة على الأسئلة](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) + + +يُمكّن الأمر التالي التدريب باستخدام عمليتين على عقدة Xeon واحدة، مع تشغيل عملية واحدة لكل مقبس. يمكن ضبط متغيرات OMP_NUM_THREADS/CCL_WORKER_COUNT للحصول على الأداء الأمثل. +```shell script + export CCL_WORKER_COUNT=1 + export MASTER_ADDR=127.0.0.1 + mpirun -n 2 -genv OMP_NUM_THREADS=23 \ + python3 run_qa.py \ + --model_name_or_path google-bert/bert-large-uncased \ + --dataset_name squad \ + --do_train \ + --do_eval \ + --per_device_train_batch_size 12 \ + --learning_rate 3e-5 \ + --num_train_epochs 2 \ + --max_seq_length 384 \ + --doc_stride 128 \ + --output_dir /tmp/debug_squad/ \ + --no_cuda \ + --ddp_backend ccl \ + --use_ipex +``` +يُمكّن الأمر التالي التدريب باستخدام ما مجموعه أربع عمليات على اثنين من معالجات Xeon (node0 و node1، مع أخذ node0 كعملية رئيسية)، يتم تعيين ppn (العمليات لكل عقدة) إلى 2، مع تشغيل عملية واحدة لكل مقبس. يمكن ضبط متغيرات OMP_NUM_THREADS/CCL_WORKER_COUNT للحصول على الأداء الأمثل. + +في node0، تحتاج إلى إنشاء ملف تكوين يحتوي على عناوين IP لكل عقدة (على سبيل المثال hostfile) وتمرير مسار ملف التكوين كوسيط. +```shell script + cat hostfile + xxx.xxx.xxx.xxx #node0 ip + xxx.xxx.xxx.xxx #node1 ip +``` +الآن، قم بتشغيل الأمر التالي في node0 وسيتم تمكين **4DDP** في node0 و node1 مع دقة BF16 المختلطة تلقائيًا: +```shell script + export CCL_WORKER_COUNT=1 + export MASTER_ADDR=xxx.xxx.xxx.xxx #node0 ip + mpirun -f hostfile -n 4 -ppn 2 \ + -genv OMP_NUM_THREADS=23 \ + python3 run_qa.py \ + --model_name_or_path google-bert/bert-large-uncased \ + --dataset_name squad \ + --do_train \ + --do_eval \ + --per_device_train_batch_size 12 \ + --learning_rate 3e-5 \ + --num_train_epochs 2 \ + --max_seq_length 384 \ + --doc_stride 128 \ + --output_dir /tmp/debug_squad/ \ + --no_cuda \ + --ddp_backend ccl \ + --use_ipex \ + --bf16 +``` + +## الاستخدام مع Kubernetes + +يمكن نشر نفس مهمة التدريب الموزع من القسم السابق في مجموعة Kubernetes باستخدام +[مشغل Kubeflow PyTorchJob للتدريب](https://www.kubeflow.org/docs/components/training/pytorch/). + +### الإعداد + +يفترض هذا المثال أن لديك ما يلي: +* الوصول إلى مجموعة Kubernetes مع [Kubeflow المثبتة](https://www.kubeflow.org/docs/started/installing-kubeflow/) +* [`kubectl`](https://kubernetes.io/docs/tasks/tools/) مثبتة ومُهيأة للوصول إلى مجموعة Kubernetes +* [مطالبة حجم ثابتة (PVC)](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) يمكن استخدامها + لتخزين مجموعات البيانات وملفات النماذج. هناك خيارات متعددة لإعداد PVC بما في ذلك استخدام فئة تخزين NFS + أو دلو تخزين سحابي. +* حاوية Docker تحتوي على نص برمجة التدريب الخاص بك وجميع التبعيات اللازمة لتشغيل النص. بالنسبة + إلى وظائف التدريب الموزع على المعالج المركزي، يتضمن ذلك عادةً PyTorch وTransformers وIntel Extension لـ PyTorch وIntel + oneCCL Bindings لـ PyTorch وOpenSSH للتواصل بين الحاويات. + +الجزء التالي هو مثال على Dockerfile يستخدم صورة أساسية تدعم التدريب الموزع على المعالج المركزي ثم +يستخرج إصدار Transformers إلى دليل `/workspace`، بحيث يتم تضمين نصوص الأمثلة في الصورة: +```dockerfile +FROM intel/ai-workflows:torch-2.0.1-huggingface-multinode-py3.9 + +WORKDIR /workspace +WORKDIR /workspace + +# قم بتنزيل واستخراج رمز المحولات +ARG HF_TRANSFORMERS_VER="4.35.2" +RUN mkdir transformers && \ + curl -sSL --retry 5 https://github.com/huggingface/transformers/archive/refs/tags/v${HF_TRANSFORMERS_VER}.tar.gz | tar -C transformers --strip-components=1 -xzf - +``` +يجب بناء الصورة ونسخها إلى عقد المجموعة أو دفعها إلى سجل الحاويات قبل نشر PyTorchJob في المجموعة. + +### ملف مواصفات PyTorchJob + +يتم استخدام [Kubeflow PyTorchJob](https://www.kubeflow.org/docs/components/training/pytorch/) لتشغيل مهمة التدريب الموزع على المجموعة. يحدد ملف yaml لـ PyTorchJob معلمات مثل: + * اسم PyTorchJob + * عدد النسخ المتماثلة (العاملين) + * نص Python ووسائطه التي سيتم استخدامها لتشغيل مهمة التدريب + * أنواع الموارد (محدد العقدة وذاكرة الوصول العشوائي ووحدة المعالجة المركزية) اللازمة لكل عامل + * الصورة/العلامة لحاوية Docker لاستخدامها + * متغيرات البيئة + * تركيب حجم ل PVC + +يحدد تركيب الحجم مسارًا حيث سيتم تركيب PVC في الحاوية لكل بود عامل. يمكن استخدام هذا الموقع لمجموعة البيانات وملفات نقاط التفتيش والنماذج المحفوظة بعد اكتمال التدريب. +بالتأكيد، سأتبع تعليماتك وسأبدأ الترجمة من بعد التعليق الأول: + +تعتبر القطعة أدناه مثالاً على ملف yaml لوظيفة PyTorchJob مع 4 عمال يقومون بتشغيل +[مثال الإجابة على السؤال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering). +```yaml +apiVersion: "kubeflow.org/v1" +kind: PyTorchJob +metadata: + name: transformers-pytorchjob + namespace: kubeflow +spec: + elasticPolicy: + rdzvBackend: c10d + minReplicas: 1 + maxReplicas: 4 + maxRestarts: 10 + pytorchReplicaSpecs: + Worker: + replicas: 4 # عدد وحدات worker + restartPolicy: OnFailure + template: + spec: + containers: + - name: pytorch + image: : # حدد صورة Docker التي سيتم استخدامها لوحدات worker + imagePullPolicy: IfNotPresent + command: + - torchrun + - /workspace/transformers/examples/pytorch/question-answering/run_qa.py + - --model_name_or_path + - "google-bert/bert-large-uncased" + - --dataset_name + - "squad" + - --do_train + - --do_eval + - --per_device_train_batch_size + - "12" + - --learning_rate + - "3e-5" + - --num_train_epochs + - "2" + - --max_seq_length + - "384" + - --doc_stride + - "128" + - --output_dir + - "/tmp/pvc-mount/output" + - --no_cuda + - --ddp_backend + - "ccl" + - --use_ipex + - --bf16 # حدد --bf16 إذا كان عتادك يدعم bfloat16 + env: + - name: LD_PRELOAD + value: "/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4.5.9:/usr/local/lib/libiomp5.so" + - name: TRANSFORMERS_CACHE + value: "/tmp/pvc-mount/transformers_cache" + - name: HF_DATASETS_CACHE + value: "/tmp/pvc-mount/hf_datasets_cache" + - name: LOGLEVEL + value: "INFO" + - name: CCL_WORKER_COUNT + value: "1" + - name: OMP_NUM_THREADS # يمكن ضبطه للحصول على الأداء الأمثل + value: "56" + resources: + limits: + cpu: 200 # قم بتحديث حدود/طلبات CPU والذاكرة بناءً على عقدك + memory: 128Gi + requests: + cpu: 200 # قم بتحديث طلبات CPU والذاكرة بناءً على عقدك + memory: 128Gi + volumeMounts: + - name: pvc-volume + mountPath: /tmp/pvc-mount + - mountPath: /dev/shm + name: dshm + restartPolicy: Never + nodeSelector: # استخدم بشكل اختياري NodeSelector لتحديد أنواع العقد التي سيتم استخدامها لعمال + node-type: spr + volumes: + - name: pvc-volume + persistentVolumeClaim: + claimName: transformers-pvc + - name: dshm + emptyDir: + medium: Memory +``` +لتشغيل هذا المثال، قم بتحديث yaml بناءً على نص البرنامج النصي للتدريب والعقد في عنقودك. + + + + +تُعرَّف حدود/طلبات موارد وحدة المعالجة المركزية (CPU) في ملف yaml بوحدات [وحدة المعالجة المركزية](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu) +حيث تعادل وحدة معالجة مركزية واحدة وحدة معالجة مركزية فعلية واحدة أو نواة افتراضية واحدة (اعتمادًا على ما إذا كان العقدة مضيفًا فعليًا +أو آلة افتراضية). يجب أن يكون مقدار حدود/طلبات وحدة المعالجة المركزية (CPU) والذاكرة المحددة في ملف yaml أقل من مقدار +سعة وحدة المعالجة المركزية/الذاكرة المتوفرة على جهاز واحد. عادة ما يكون من الجيد عدم استخدام السعة الكاملة للجهاز +من أجل ترك بعض الموارد لـ Kubelet وOS. من أجل الحصول على خدمة ["مضمونة"](https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/#guaranteed) +[جودة الخدمة](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/) لوحدات العامل، قم بتعيين نفس +مقدار وحدة المعالجة المركزية والذاكرة لكل من حدود الموارد والطلبات. + + + +### النشر + +بعد تحديث مواصفات PyTorchJob بالقيم المناسبة لعنقودك ووظيفة التدريب، يمكن نشرها +في العنقود باستخدام: +```bash +kubectl create -f pytorchjob.yaml +``` + +يمكن بعد ذلك استخدام الأمر `kubectl get pods -n kubeflow` لعرض قائمة الوحدات في مساحة الاسم `kubeflow`. يجب أن ترى +وحدات العامل لوظيفة PyTorchJob التي تم نشرها للتو. في البداية، من المحتمل أن يكون لها حالة "Pending" أثناء +سحب الحاويات وإنشائها، ثم يجب أن تتغير الحالة إلى "Running". +``` +NAME READY STATUS RESTARTS AGE +... +transformers-pytorchjob-worker-0 1/1 Running 0 7m37s +transformers-pytorchjob-worker-1 1/1 Running 0 7m37s +transformers-pytorchjob-worker-2 1/1 Running 0 7m37s +transformers-pytorchjob-worker-3 1/1 Running 0 7m37s +... +``` + +يمكن عرض سجلات العامل باستخدام `kubectl logs -n kubeflow <اسم الوحدة>`. أضف `-f` لدفق السجلات، على سبيل المثال: +```bash +kubectl logs -n kubeflow transformers-pytorchjob-worker-0 -f +``` + +بعد اكتمال مهمة التدريب، يمكن نسخ النموذج المدرب من موقع التخزين أو وحدة التخزين المؤقتة للقرص الظاهري. عندما تنتهي +من الوظيفة، يمكن حذف مورد PyTorchJob من العنقود باستخدام `kubectl delete -f pytorchjob.yaml`. + +## ملخص + +غطى هذا الدليل تشغيل وظائف تدريب PyTorch الموزعة باستخدام وحدات معالجة مركزية متعددة على الخوادم العارية وعلى عنقود Kubernetes. +تستخدم كلتا الحالتين Intel Extension لـ PyTorch وIntel oneCCL Bindings لـ PyTorch لتحقيق الأداء الأمثل للتدريب، ويمكن استخدامها +كقالب لتشغيل حمل العمل الخاص بك على عدة عقد. \ No newline at end of file From eb6130c1b1d1c8d5397ece634e36b44a40dc6256 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:34 +0300 Subject: [PATCH 025/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fmemory=5Fanatomy.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_memory_anatomy.md | 231 +++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 docs/source/ar/model_memory_anatomy.md diff --git a/docs/source/ar/model_memory_anatomy.md b/docs/source/ar/model_memory_anatomy.md new file mode 100644 index 00000000000000..6e0a4b2ccb065b --- /dev/null +++ b/docs/source/ar/model_memory_anatomy.md @@ -0,0 +1,231 @@ +# تشريح عملية تدريب النموذج + +لفهم تقنيات تحسين الأداء التي يمكن تطبيقها لتحسين كفاءة استخدام الذاكرة وسرعة تدريب النموذج، من المفيد التعرف على كيفية استخدام وحدة معالجة الرسوميات (GPU) أثناء التدريب، وكيف يختلف الحمل الحسابي حسب العملية المنفذة. + +لنبدأ باستكشاف مثال توضيحي على استخدام وحدة GPU وتشغيل تدريب نموذج. وللتوضيح، سنحتاج إلى تثبيت بعض المكتبات: + +```bash +pip install transformers datasets accelerate nvidia-ml-py3 +``` + +تتيح مكتبة `nvidia-ml-py3` إمكانية مراقبة استخدام الذاكرة في النماذج من داخل بايثون. قد تكون معتادًا على أمر `nvidia-smi` في المحطة الطرفية - تسمح هذه المكتبة بالوصول إلى نفس المعلومات مباشرة في بايثون. + +بعد ذلك، نقوم بإنشاء بعض البيانات الوهمية: رموز تعريف عشوائية بين 100 و30000 وتصنيفات ثنائية لمصنف. + +في المجموع، نحصل على 512 تسلسلًا، لكل منها طول 512، ونخزنها في [`~datasets.Dataset`] بتنسيق PyTorch. + +```py +>>> import numpy as np +>>> from datasets import Dataset + +>>> seq_len, dataset_size = 512, 512 +>>> dummy_data = { +... "input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)), +... "labels": np.random.randint(0, 1, (dataset_size)), +... } +>>> ds = Dataset.from_dict(dummy_data) +>>> ds.set_format("pt") +``` + +لطباعة إحصائيات الملخص لاستخدام وحدة GPU وتشغيل التدريب مع [`Trainer`]، نحدد دالتين مساعدتين: + +```py +>>> from pynvml import * + +>>> def print_gpu_utilization(): +... nvmlInit() +... handle = nvmlDeviceGetHandleByIndex(0) +... info = nvmlDeviceGetMemoryInfo(handle) +... print(f"GPU memory occupied: {info.used//1024**2} MB.") + +>>> def print_summary(result): +... print(f"Time: {result.metrics['train_runtime']:.2f}") +... print(f"Samples/second: {result.metrics['train_samples_per_second']:.2f}") +... print_gpu_utilization() +``` + +دعنا نتأكد من أننا بدأنا بذاكرة وحدة GPU فارغة: + +```py +>>> print_gpu_utilization() +GPU memory occupied: 0 MB. +``` + +يبدو ذلك جيدًا: ذاكرة وحدة GPU غير مشغولة كما هو متوقع قبل تحميل أي نماذج. إذا لم يكن الأمر كذلك على جهازك، فتأكد من إيقاف جميع العمليات التي تستخدم ذاكرة وحدة GPU. ومع ذلك، لا يمكن للمستخدم استخدام كل ذاكرة وحدة GPU الفارغة. عندما يتم تحميل نموذج إلى وحدة GPU، يتم أيضًا تحميل النواة، والتي يمكن أن تستهلك 1-2 جيجابايت من الذاكرة. ولرؤية مقدار ذلك، نقوم بتحميل مصفوفة صغيرة إلى وحدة GPU والتي تؤدي إلى تحميل النواة أيضًا. + +```py +>>> import torch + +>>> torch.ones((1, 1)).to("cuda") +>>> print_gpu_utilization() +GPU memory occupied: 1343 MB. +``` + +نلاحظ أن النواة وحدها تستهلك 1.3 جيجابايت من ذاكرة وحدة GPU. الآن دعنا نرى مقدار المساحة التي يستخدمها النموذج. + +## تحميل النموذج + +أولاً، نقوم بتحميل نموذج `google-bert/bert-large-uncased`. نقوم بتحميل أوزان النموذج مباشرة إلى وحدة GPU حتى نتمكن من التحقق من مقدار المساحة التي تستخدمها الأوزان فقط. + +```py +>>> from transformers import AutoModelForSequenceClassification + +>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-large-uncased").to("cuda") +>>> print_gpu_utilization() +GPU memory occupied: 2631 MB. +``` + +يمكننا أن نرى أن أوزان النموذج وحدها تستهلك 1.3 جيجابايت من ذاكرة وحدة GPU. يعتمد الرقم الدقيق على وحدة GPU المحددة التي تستخدمها. لاحظ أنه في وحدات GPU الأحدث، قد يستغرق النموذج في بعض الأحيان مساحة أكبر نظرًا لأن الأوزان يتم تحميلها بطريقة محسنة تسرع من استخدام النموذج. الآن يمكننا أيضًا التحقق بسرعة مما إذا كنا نحصل على نفس النتيجة كما هو الحال مع `nvidia-smi` CLI: + +```bash +nvidia-smi +``` + +```bash +Tue Jan 11 08:58:05 2022 ++-----------------------------------------------------------------------------+ +| NVIDIA-SMI 460.91.03 Driver Version: 460.91.03 CUDA Version: 11.2 | +|-------------------------------+----------------------+----------------------+ +| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | +| | | MIG M. | +|===============================+======================+======================| +| 0 Tesla V100-SXM2... On | 00000000:00:04.0 Off | 0 | +| N/A 37C P0 39W / 300W | 2631MiB / 16160MiB | 0% Default | +| | | N/A | ++-------------------------------+----------------------+----------------------+ + ++-----------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=============================================================================| +| 0 N/A N/A 3721 C ...nvs/codeparrot/bin/python 2629MiB | ++-----------------------------------------------------------------------------+ +``` + +نحصل على نفس العدد كما كان من قبل، ويمكنك أيضًا أن ترى أننا نستخدم GPU من طراز V100 مع 16 جيجابايت من الذاكرة. لذا الآن يمكننا +بدء تدريب النموذج ورؤية كيف يتغير استخدام ذاكرة GPU. أولاً، نقوم بإعداد بعض الحجج التدريب القياسية: + +```py +default_args = { + "output_dir": "tmp"، + "eval_strategy": "steps"، + "num_train_epochs": 1، + "log_level": "error"، + "report_to": "none"، +} +``` + + + + إذا كنت تخطط لتشغيل عدة تجارب، من أجل مسح الذاكرة بشكل صحيح بين التجارب، قم بإعادة تشغيل نواة Python بين التجارب. + + + +## استخدام الذاكرة في التدريب الأساسي + +دعونا نستخدم [`Trainer`] وقم بتدريب النموذج دون استخدام أي تقنيات تحسين أداء GPU وحجم دفعة يبلغ 4: + +```py +>>> from transformers import TrainingArguments، Trainer، logging + +>>> logging.set_verbosity_error() + + +>>> training_args = TrainingArguments(per_device_train_batch_size=4، **default_args) +>>> trainer = Trainer(model=model، args=training_args، train_dataset=ds) +>>> result = trainer.train() +>>> print_summary(result) +``` + +``` +الوقت: 57.82 +العينات / الثانية: 8.86 +ذاكرة GPU المشغولة: 14949 ميجابايت. +``` + +يمكننا أن نرى أن حجم دفعة صغير نسبيًا يملأ تقريبًا ذاكرة GPU بالكامل. ومع ذلك، غالبًا ما يؤدي حجم دفعة أكبر +في تقارب نموذج أسرع أو أداء أفضل في النهاية. لذلك نريد أن نضبط حجم الدفعة وفقًا لاحتياجات النموذج لدينا +وليس قيود GPU. ما يثير الاهتمام هو أننا نستخدم ذاكرة أكثر بكثير من حجم النموذج. +لفهم سبب ذلك بشكل أفضل، دعنا نلقي نظرة على عمليات النموذج واحتياجاته من الذاكرة. + +## تشريح عمليات النموذج + +تتضمن هندسة المحولات 3 مجموعات رئيسية من العمليات مجمعة أدناه حسب كثافة الحساب. + +1. **التعاقدات المنسوجة** + + تقوم الطبقات الخطية ومكونات الانتباه متعدد الرؤوس جميعها بعمليات **ضرب المصفوفة بالمصفوفة**. هذه العمليات هي الجزء الأكثر كثافة في الحساب من تدريب المحول. + +2. **التطبيعات الإحصائية** + + Softmax والتطبيع الطبقي أقل كثافة في الحساب من التعاقدات المنسوجة، وتنطوي على عملية أو أكثر من عمليات **الاختزال**، والتي يتم تطبيق نتيجتها بعد ذلك عبر خريطة. + +3. **المشغلون عنصر الحكمة** + + هذه هي المشغلين المتبقية: **التحيزات، إسقاط، التنشيط، واتصالات بقايا**. هذه هي عمليات أقل كثافة في الحساب. + +يمكن أن تكون هذه المعرفة مفيدة لمعرفة عند تحليل اختناقات الأداء. + +تم اشتقاق هذا الملخص من [Data Movement Is All You Need: A Case Study on Optimizing Transformers 2020](https://arxiv.org/abs/2007.00072) + + +## تشريح ذاكرة النموذج + +لقد رأينا أن تدريب النموذج يستخدم ذاكرة أكثر بكثير من مجرد وضع النموذج على GPU. ويرجع ذلك إلى +هناك العديد من المكونات أثناء التدريب التي تستخدم ذاكرة GPU. المكونات الموجودة في ذاكرة GPU هي التالية: + +1. أوزان النموذج +2. الدول المحسن +3. التدرجات +4. تنشيطات إلى الأمام المحفوظة لحساب التدرج +5. المخازن المؤقتة المؤقتة +6. ذاكرة محددة الوظائف + +يتطلب نموذج نموذجي مدرب في الدقة المختلطة 18 بايت لكل معلمة نموذج بالإضافة إلى ذاكرة التنشيط. للاستدلال لا توجد حالات محسن وتدرجات، لذلك يمكننا طرح تلك. وهكذا ننتهي مع 6 بايت لكل +معلمة نموذج للدقة المختلطة الاستدلال، بالإضافة إلى ذاكرة التنشيط. + +دعنا نلقي نظرة على التفاصيل. + +**أوزان النموذج:** + +- 4 بايت * عدد المعلمات للتدريب fp32 +- 6 بايت * عدد المعلمات لتدريب الدقة المختلطة (يحافظ على نموذج في fp32 وواحد في fp16 في الذاكرة) + +**حالات المحسن:** + +- 8 بايت * عدد المعلمات لمحسن AdamW العادي (يحافظ على حالتين) +- 2 بايت * عدد المعلمات لمحسنات 8 بت AdamW مثل [bitsandbytes](https://github.com/TimDettmers/bitsandbytes) +- 4 بايت * عدد المعلمات لمحسنات مثل SGD مع الزخم (يحافظ على حالة واحدة فقط) + +**التدرجات** + +- 4 بايت * عدد المعلمات للتدريب fp32 أو الدقة المختلطة (التدرجات تكون دائمًا في fp32) + +**تنشيطات إلى الأمام** + +- يعتمد الحجم على العديد من العوامل، وأهمها طول التسلسل وحجم المخفية وحجم الدفعة. + +هناك الإدخال والإخراج الذي يتم تمريره وإعادته بواسطة وظائف إلى الأمام والخلف وتنشيطات إلى الأمام المحفوظة لحساب التدرج. + +**الذاكرة المؤقتة** + +بالإضافة إلى ذلك، هناك جميع أنواع المتغيرات المؤقتة التي يتم تحريرها بمجرد الانتهاء من الحساب، ولكن في +لحظة يمكن أن تتطلب هذه المتغيرات المؤقتة ذاكرة إضافية ويمكن أن تدفع إلى OOM. لذلك، عند الترميز، من المهم التفكير +بشكل استراتيجي حول هذه المتغيرات المؤقتة وأحيانًا تحريرها بشكل صريح بمجرد عدم الحاجة إليها. + +**ذاكرة محددة الوظائف** + +ثم، قد يكون لبرنامجك متطلبات ذاكرة خاصة. على سبيل المثال، عند إنشاء نص باستخدام البحث الشعاعي، يحتاج البرنامج +للحفاظ على عدة نسخ من الإدخالات والمخرجات. + +**سرعة تنفيذ `forward` مقابل `backward`** + +بالنسبة للضربات والطبقات الخطية، هناك 2x flops في الخلف مقارنة بالخط الأمامي، والتي تترجم عمومًا إلى ~2x أبطأ (أحيانًا أكثر، لأن الأحجام في الخلف تميل إلى أن تكون أكثر إزعاجًا). عادةً ما تكون التنشيطات محدودة النطاق، ومن المعتاد أن يتعين على التنشيط قراءة المزيد من البيانات في الخلف أكثر من الأمام +(على سبيل المثال، قراءة التنشيط إلى الأمام مرة واحدة، والكتابة مرة واحدة، وقراءة التنشيط الخلفي مرتين، gradOutput وإخراج الأمام، +والكتابة مرة واحدة، gradInput). + +كما ترى، هناك بضعة أماكن يمكننا فيها توفير ذاكرة GPU أو تسريع العمليات. +الآن بعد أن فهمت ما يؤثر على استخدام GPU وسرعة الحساب، راجع +صفحة وثائق [أساليب وأدوات التدريب الفعال على GPU واحد](perf_train_gpu_one) لمعرفة المزيد حول تقنيات تحسين الأداء. \ No newline at end of file From 0fe7e5345f21bd1c65761447df369e43bafa7016 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:36 +0300 Subject: [PATCH 026/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fgpu=5Fmany.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_train_gpu_many.md | 479 ++++++++++++++++++++++++++ 1 file changed, 479 insertions(+) create mode 100644 docs/source/ar/perf_train_gpu_many.md diff --git a/docs/source/ar/perf_train_gpu_many.md b/docs/source/ar/perf_train_gpu_many.md new file mode 100644 index 00000000000000..c65f5fa4e9f8e3 --- /dev/null +++ b/docs/source/ar/perf_train_gpu_many.md @@ -0,0 +1,479 @@ +# التدريب الفعال على وحدات معالجة الرسومات (GPUs) متعددة + +إذا كان تدريب نموذج على وحدة معالجة رسومات (GPU) واحدة بطيئًا جدًا أو إذا لم تتسع ذاكرة وحدة المعالجة الرسومية لوزن النموذج، فقد يكون الانتقال إلى إعداد متعدد وحدات معالجة الرسومات خيارًا قابلًا للتطبيق. قبل إجراء هذا الانتقال، قم باستكشاف جميع الاستراتيجيات المشمولة في "أساليب وأدوات التدريب الفعال على وحدة معالجة رسومات واحدة" بشكل شامل، حيث أنها تنطبق عالميًا على تدريب النماذج على أي عدد من وحدات معالجة الرسومات. بمجرد استخدامك لهذه الاستراتيجيات ووجدت أنها غير كافية لحالتك على وحدة معالجة رسومات واحدة، فكر في الانتقال إلى وحدات معالجة الرسومات المتعددة. + +يتطلب الانتقال من وحدة معالجة رسومات واحدة إلى وحدات معالجة الرسومات المتعددة تقديم بعض أشكال التوازي، حيث يجب توزيع عبء العمل عبر الموارد. يمكن استخدام تقنيات متعددة لتحقيق التوازي، مثل التوازي في البيانات، والتوازي في المصفوفات، والتوازي في الأنابيب. ومن المهم ملاحظة أنه لا يوجد حل واحد يناسب الجميع، وأن الإعدادات المثالية تعتمد على تكوين الأجهزة المحدد الذي تستخدمه. + +يقدم هذا الدليل نظرة متعمقة على أنواع فردية من التوازي، بالإضافة إلى توجيهات حول طرق الجمع بين التقنيات واختيار النهج المناسب. للحصول على دروس خطوة بخطوة حول التدريب الموزع، يرجى الرجوع إلى وثائق 🤗 Accelerate. + +على الرغم من أن المفاهيم الرئيسية التي تمت مناقشتها في هذا الدليل تنطبق على الأطر المختلفة، إلا أننا نركز هنا على عمليات التنفيذ المستندة إلى PyTorch. + +قبل الغوص في تفاصيل كل تقنية، دعنا نلقي نظرة على عملية اتخاذ القرار عند تدريب نماذج كبيرة على بنية تحتية كبيرة. + +## استراتيجية قابلية التوسع + +ابدأ بتقدير مقدار ذاكرة الوصول العشوائي الظاهري (vRAM) المطلوبة لتدريب نموذجك. بالنسبة للنماذج المستضافة على 🤗 Hub، استخدم "حاسبة ذاكرة النموذج" الخاصة بنا، والتي توفر لك حسابات دقيقة ضمن هامش بنسبة 5%. + +**استراتيجية الموازاة لعقدة واحدة / إعداد متعدد وحدات معالجة الرسومات** + +عند تدريب نموذج على عقدة واحدة مع وحدات معالجة الرسومات المتعددة، يمكن أن يؤثر اختيارك لاستراتيجية الموازاة بشكل كبير على الأداء. فيما يلي تفصيل لخياراتك: + +**الحالة 1: يناسب نموذجك وحدة معالجة رسومات واحدة** + +إذا كان نموذجك يناسب وحدة معالجة الرسومات الواحدة بشكل مريح، فهناك خياران رئيسيان: + +1. DDP - Distributed DataParallel +2. Zero Redundancy Optimizer (ZeRO) - اعتمادًا على الوضع والتكوين المستخدم، قد تكون هذه الطريقة أسرع أو لا، ولكن من الجدير تجربتها. + +**الحالة 2: لا يناسب نموذجك وحدة معالجة رسومات واحدة** + +إذا كان نموذجك أكبر من وحدة معالجة الرسومات الواحدة، فهناك العديد من البدائل التي يجب مراعاتها: + +1. PipelineParallel (PP) +2. ZeRO +3. TensorParallel (TP) + +مع اتصال سريع بين العقد (مثل NVLINK أو NVSwitch)، يجب أن تؤدي جميع الاستراتيجيات الثلاث (PP وZeRO وTP) إلى أداء مماثل. ومع ذلك، بدون هذه الميزات، سيكون PP أسرع من TP أو ZeRO. قد يُحدث أيضًا درجة TP فرقًا. من الأفضل تجربة إعدادك المحدد لتحديد الاستراتيجية الأنسب. + +يتم استخدام TP دائمًا تقريبًا داخل عقدة واحدة. وهذا يعني أن حجم TP يساوي أو أقل من وحدات معالجة الرسومات لكل عقدة. + +**الحالة 3: لا تناسب الطبقة الأكبر في نموذجك وحدة معالجة رسومات واحدة** + +1. إذا كنت لا تستخدم ZeRO، فيجب عليك استخدام TensorParallel (TP)، لأن PipelineParallel (PP) وحدها لن تكون كافية لاستيعاب الطبقة الكبيرة. +2. إذا كنت تستخدم ZeRO، فاعتمد أيضًا تقنيات من "أساليب وأدوات التدريب الفعال على وحدة معالجة رسومات واحدة". + +**استراتيجية الموازاة لعقدة متعددة / إعداد متعدد وحدات معالجة الرسومات** + +* عند وجود اتصال سريع بين العقد (مثل NVLINK أو NVSwitch)، فكر في استخدام أحد الخيارات التالية: + + 1. ZeRO - لأنه يتطلب إجراء تعديلات طفيفة على النموذج تقريبًا + 2. مزيج من PipelineParallel (PP) مع TensorParallel (TP) وDataParallel (DP) - سيؤدي هذا النهج إلى تقليل الاتصالات، ولكنه يتطلب إجراء تغييرات كبيرة على النموذج + +* عند وجود اتصال بطيء بين العقد ولا تزال ذاكرة وحدة معالجة الرسومات منخفضة: + + 1. استخدم مزيجًا من DataParallel (DP) مع PipelineParallel (PP) وTensorParallel (TP) وZeRO. + +في الأقسام التالية من هذا الدليل، سنغوص بشكل أعمق في كيفية عمل أساليب التوازي المختلفة هذه. + +## التوازي في البيانات + +حتى مع وجود وحدتي معالجة رسومات فقط، يمكنك الاستفادة بسهولة من قدرات التدريب المعجلة التي توفرها ميزات PyTorch المدمجة، مثل `DataParallel` (DP) و`DistributedDataParallel` (DDP). لاحظ أن وثائق PyTorch توصي باستخدام `DistributedDataParallel` (DDP) بدلاً من `DataParallel` (DP) للتدريب على وحدات معالجة الرسومات المتعددة لأنه يعمل مع جميع النماذج. دعونا نلقي نظرة على كيفية عمل هاتين الطريقتين وما الذي يميزهما. + +### DataParallel مقابل DistributedDataParallel + +لفهم الاختلافات الرئيسية في عبء الاتصال بين وحدات معالجة الرسومات بين الطريقتين، دعنا نراجع العمليات لكل دفعة: + +[DDP]: + +- في وقت البدء، تقوم العملية الرئيسية بنسخ النموذج مرة واحدة من وحدة معالجة الرسومات 0 إلى باقي وحدات معالجة الرسومات +- بعد ذلك لكل دفعة: + 1. تستهلك كل وحدة معالجة رسومات مباشرة دفعة البيانات المصغرة الخاصة بها. + 2. أثناء `backward`، بمجرد أن تصبح التدرجات المحلية جاهزة، يتم حساب متوسطها عبر جميع العمليات. + +[DP]: + +لكل دفعة: + 1. تقرأ وحدة معالجة الرسومات 0 دفعة البيانات وترسل دفعة مصغرة إلى كل وحدة معالجة رسومات. + 2. يتم نسخ النموذج المحدث من وحدة معالجة الرسومات 0 إلى كل وحدة معالجة رسومات. + 3. يتم تنفيذ `forward`، ويتم إرسال الإخراج من كل وحدة معالجة رسومات إلى وحدة معالجة الرسومات 0 لحساب الخسارة. + 4. يتم توزيع الخسارة من وحدة معالجة الرسومات 0 إلى جميع وحدات معالجة الرسومات، ويتم تشغيل `backward`. + 5. يتم إرسال التدرجات من كل وحدة معالجة رسومات إلى وحدة معالجة الرسومات 0 ويتم حساب متوسطها. + +تشمل الاختلافات الرئيسية ما يلي: + +1. يقوم DDP بتنفيذ عملية اتصال واحدة فقط لكل دفعة - إرسال التدرجات، في حين أن DP يقوم بخمسة تبادلات بيانات مختلفة لكل دفعة. يقوم DDP بنسخ البيانات باستخدام [torch.distributed] https://pytorch.org/docs/master/distributed.html)، في حين أن DP ينسخ البيانات داخل العملية عبر خيوط Python (والتي تقدم قيودًا مرتبطة بـ GIL). ونتيجة لذلك، فإن "DistributedDataParallel" (DDP) أسرع بشكل عام من "DataParallel" (DP) ما لم يكن لديك اتصال بطيء بين بطاقات وحدات معالجة الرسومات. +2. في DP، تقوم وحدة معالجة الرسومات 0 بتنفيذ قدر أكبر من العمل مقارنة بوحدات معالجة الرسومات الأخرى، مما يؤدي إلى انخفاض استخدام وحدة معالجة الرسومات. +3. يدعم DDP التدريب الموزع عبر أجهزة متعددة، في حين أن DP لا يدعم ذلك. + +هذه ليست قائمة شاملة بالاختلافات بين DP وDDP، ولكن الدقائق الأخرى خارج نطاق هذا الدليل. يمكنك الحصول على فهم أعمق لهذه الطرق من خلال قراءة هذه المقالة. + +دعونا نوضح الاختلافات بين DP وDDP من خلال تجربة. سنقوم باختبار أداء DP وDDP مع إضافة سياق وجود NVLink: + +* الأجهزة: 2x TITAN RTX 24 جيجابايت لكل منها + NVlink مع 2 NVLinks (`NV2` في `nvidia-smi topo -m`). +* البرمجيات: `pytorch-1.8-to-be` + `cuda-11.0` / `transformers==4.3.0.dev0`. + +لإيقاف ميزة NVLink في أحد الاختبارات، نستخدم `NCCL_P2P_DISABLE=1`. + +فيما يلي كود الاختبار وإخراجها: + +**DP** + +```bash +rm -r /tmp/test-clm; CUDA_VISIBLE_DEVICES=0,1 \ +python examples/pytorch/language-modeling/run_clm.py \ +--model_name_or_path openai-community/gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 \ +--do_train --output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200 + +{'train_runtime': 110.5948, 'train_samples_per_second': 1.808, 'epoch': 0.69} +``` + +**DDP مع NVlink** + +```bash +rm -r /tmp/test-clm; CUDA_VISIBLE_DEVICES=0,1 \ +torchrun --nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py \ +--model_name_or_path openai-community/gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 \ +--do_train --output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200 + +{'train_runtime': 101.9003, 'train_samples_per_second': 1.963, 'epoch': 0.69} +``` + +**DDP بدون NVlink** + +```bash +rm -r /tmp/test-clm; NCCL_P2P_DISABLE=1 CUDA_VISIBLE_DEVICES=0,1 \ +torchrun --nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py \ +--model_name_or_path openai-community/gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 \ +--do_train --output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200 + +{'train_runtime': 131.4367, 'train_samples_per_second': 1.522, 'epoch': 0.69} +``` + +فيما يلي نتائج الاختبار نفسها مجمعة في جدول للراحة: + +| النوع | NVlink | الوقت | +| :----- | ----- | ---: | +| 2:DP | Y | 110s | +| 2:DDP | Y | 101s | +| 2:DDP | N | 131s | + +كما ترون، في هذه الحالة، DP أبطأ بنسبة 10% تقريبًا من DDP مع NVlink، ولكنه أسرع بنسبة 15% من DDP بدون NVlink. سيعتمد الاختلاف الحقيقي على مقدار البيانات التي تحتاج كل وحدة معالجة رسومات إلى مزامنتها مع الوحدات الأخرى - فكلما زادت البيانات التي يجب مزامنتها، كلما أعاق الرابط البطيء وقت التشغيل الإجمالي. + +## التوازي في البيانات باستخدام ZeRO + +يتم توضيح التوازي في البيانات المدعوم من ZeRO (ZeRO-DP) في الرسم البياني التالي من هذه التدوينة. + +على الرغم من أنه قد يبدو معقدًا، إلا أنه مفهوم مشابه جدًا لـ `DataParallel` (DP). الفرق هو أنه بدلاً من نسخ معلمات النموذج الكاملة والتدرجات وحالات المحسن، تقوم كل وحدة معالجة رسومات بتخزين شريحة فقط منها. بعد ذلك، في وقت التشغيل عندما تكون معلمات الطبقة الكاملة مطلوبة فقط للطبقة المعطاة، تتم مزامنة جميع وحدات معالجة الرسومات لإعطاء بعضها البعض الأجزاء التي تفتقدها. + +لتوضيح هذه الفكرة، ضع في اعتبارك نموذجًا بسيطًا يحتوي على 3 طبقات (La وLb وLc)، حيث تحتوي كل طبقة على 3 معلمات. على سبيل المثال، تحتوي الطبقة La على الأوزان a0 وa1 وa2: + +``` +La | Lb | Lc +---|----|--- +a0 | b0 | c0 +a1 | b1 | c1 +a2 | b2 | c2 +``` + +إذا كان لدينا 3 وحدات معالجة رسومات، فإن ZeRO-DP يقسم النموذج إلى 3 وحدات معالجة رسومات كما يلي: + +``` +GPU0: +La | Lb | Lc +---|----|--- +a0 | b0 | c0 + +GPU1: +La | Lb | Lc +---|----|--- +a1 | b1 | c1 + +GPU2: +La | Lb | Lc +---|----|--- +a2 | b2 | c2 +``` + +وبطريقة ما، هذا هو نفس التقطيع الأفقي مثل التوازي في المصفوفات، على عكس التقطيع الرأسي، حيث يتم وضع مجموعات الطبقات الكاملة على وحدات معالجة الرسومات المختلفة. الآن دعونا نرى كيف يعمل هذا: + +ستحصل كل من وحدات معالجة الرسومات هذه على الدفعة المصغرة المعتادة كما هو الحال في DP: + +``` +x0 => GPU0 +x1 => GPU1 +x2 => GPU2 +``` + +يتم تمرير المدخلات دون تعديلات كما لو كانت ستتم معالجتها بواسطة النموذج الأصلي. + +أولاً، تصل المدخلات إلى الطبقة "La". ماذا يحدث في هذه المرحلة؟ + +على وحدة معالجة الرسومات 0: تتطلب الدفعة المصغرة x0 المعلمات a0 وa1 وa2 للانتقال عبر المسار الأمامي للطبقة، ولكن تحتوي وحدة معالجة الرسومات 0 على a0 فقط. سيحصل على a1 من وحدة معالجة الرسومات 1 وa2 من وحدة معالجة الرسومات 2، مما يجمع بين جميع قطع النموذج. + +بالتوازي، تحصل وحدة معالجة الرسومات 1 على دفعة مصغرة أخرى - x1. تحتوي وحدة معالجة الرسومات 1 على المعلمة a1، ولكنها تحتاج إلى a0 وa2، لذا فهي تحصل عليها من وحدة معالجة الرسومات 0 ووحدة معالجة الرسومات 2. + +ينطبق الشيء نفسه على وحدة معالجة الرسومات 2 التي تحصل على الدفعة المصغرة x2. تحصل على a0 وa1 من وحدة معالجة الرسومات 0 ووحدة معالجة الرسومات 1. + +بهذه الطريقة، تحصل كل من وحدات معالجة الرسومات الثلاث على المصفوفات الكاملة المعاد بناؤها وتنفذ عملية انتقال أمامي بمجموعة البيانات المصغرة الخاصة بها. + +بمجرد الانتهاء من الحساب، يتم إسقاط البيانات التي لم تعد هناك حاجة إليها - يتم استخدامها فقط أثناء الحساب. يتم تنفيذ إعادة البناء بكفاءة عبر الاسترداد المسبق. + +بعد ذلك، يتم تكرار العملية بأكملها للطبقة Lb، ثم Lc للأمام، ثم Lc -> Lb -> La للخلف. + +هذه الآلية مشابهة لاستراتيجية التخييم الجماعي الفعالة: يحمل الشخص A الخيمة، ويحمل الشخص B الموقد، ويحمل الشخص C الفأس. كل ليلة يتشاركون ما لديهم مع الآخرين ويحصلون على ما يحتاجون إليه من الآخرين، وفي الصباح يحزمون معداتهم المخصصة ويستمرون في طريقهم. هذا هو ما يفعله ZeRO DP/Sharded DDP. + +قارن هذه الاستراتيجية بالاستراتيجية البسيطة حيث يتعين على كل شخص حمل خيمته وموقده وفأسه (مشابه لـ DataParallel (DP وDDP) في PyTorch)، والتي ستكون أقل كفاءة بكثير. + +بينما تقرأ الأدبيات حول هذا الموضوع، قد تصادف المرادفات التالية: مجزأة، مجزأة. + +إذا كنت تولي اهتمامًا وثيقًا للطريقة التي يقسم بها ZeRO أوزان النموذج، فستبدو مشابهة جدًا للتوازي في المصفوفات والذي سيتم مناقشته لاحقًا. ويرجع ذلك إلى أنه يقسم/يشظي أوزان كل طبقة، على عكس التوازي في النموذج الرأسي الذي تمت مناقشته لاحقًا. + +عمليات التنفيذ: + +- DeepSpeed ZeRO-DP المراحل 1+2+ +## النموذج الساذج للتوازي: + +عندما تنتقل البيانات من الطبقة 0 إلى الطبقة 3، لا يختلف الأمر عن المرور الأمامي العادي. ومع ذلك، يتطلب تمرير البيانات من الطبقة 3 إلى الطبقة 4 نقلها من GPU0 إلى GPU1، مما يؤدي إلى حدوث تكلفة إضافية في الاتصال. إذا كانت وحدات GPU المشاركة موجودة على نفس العقدة الحسابية (مثل نفس الجهاز المادي)، فإن عملية النسخ تكون سريعة، ولكن إذا كانت وحدات GPU موزعة على عدة عقد حسابية (مثل أجهزة متعددة)، فقد تكون التكلفة الإضافية للاتصال أكبر بكثير. + +بعد ذلك، تعمل الطبقات من 4 إلى 7 كما هي في النموذج الأصلي. وعند الانتهاء من الطبقة السابعة، هناك حاجة في كثير من الأحيان إلى إرسال البيانات مرة أخرى إلى الطبقة 0 حيث توجد التسميات (أو بدلاً من ذلك إرسال التسميات إلى الطبقة الأخيرة). الآن يمكن حساب الخسارة ويمكن لمُحسن الخسارة أن يقوم بعمله. + +يأتي النموذج الساذج للتوازي مع العديد من أوجه القصور: + +- **جميع وحدات GPU ما عدا واحدة خاملة في أي لحظة معينة**: إذا تم استخدام 4 وحدات GPU، فهذا مشابه تقريبًا لمضاعفة ذاكرة GPU واحدة أربع مرات، وتجاهل بقية الأجهزة. + +- **التكلفة الإضافية في نقل البيانات بين الأجهزة**: على سبيل المثال، يمكن لـ 4x 6GB cards استيعاب نفس الحجم مثل 1x 24GB card باستخدام النموذج الساذج للتوازي، ولكن بطاقة 24GB واحدة ستكمل التدريب بشكل أسرع، لأنها لا تحتوي على تكلفة نسخ البيانات. ولكن، على سبيل المثال، إذا كان لديك بطاقات 40 جيجابايت وتحتاج إلى ملاءمة نموذج 45 جيجابايت، فيمكنك ذلك باستخدام 4x 40GB cards (ولكن بالكاد بسبب حالة التدرج ومُحسن الخسارة). + +- **نسخ التعليقات التوضيحية المشتركة**: قد تحتاج التعليقات التوضيحية المشتركة إلى نسخها ذهابًا وإيابًا بين وحدات GPU. + +الآن بعد أن تعرفت على كيفية عمل النموذج الساذج للتوازي وعيوبه، دعنا نلقي نظرة على التوازي الأنبوبي (PP). + +التوازي الأنبوبي متطابق تقريبًا مع النموذج الساذج للتوازي، ولكنه يحل مشكلة تعطيل وحدات GPU عن طريق تقسيم الدفعة الواردة إلى دفعات صغيرة وإنشاء خط أنابيب بشكل مصطنع، مما يسمح لوحدات GPU المختلفة بالمشاركة المتزامنة في عملية الحساب. + +يوضح الرسم التوضيحي التالي من [ورقة GPipe](https://ai.googleblog.com/2019/03/introducing-gpipe-open-source-library.html) النموذج الساذج للتوازي في الأعلى، والتوازي الأنبوبي في الأسفل: + +يمكنك ملاحظة أن التوازي الأنبوبي في أسفل الرسم التخطيطي يقلل من عدد المناطق الخاملة لوحدة GPU، المشار إليها باسم "الفقاعات". ويظهر كلا جزأي الرسم التخطيطي مستوىًا من التوازي من الدرجة 4، مما يعني أن هناك 4 وحدات GPU مشاركة في خط الأنابيب. ويمكنك أن ترى أن هناك مسارًا أماميًا مكونًا من 4 مراحل أنابيب (F0، F1، F2، وF3) يليها مسار عكسي بالترتيب المعاكس (B3، B2، B1، وB0). + +يقدم التوازي الأنبوبي مُحسن خسارة جديدًا للضبط - "chunks"، والذي يحدد عدد قطع البيانات المرسلة في تسلسل عبر نفس مرحلة الأنبوب. على سبيل المثال، في الرسم التخطيطي السفلي، يمكنك رؤية "chunks=4". تقوم وحدة GPU0 بأداء نفس المسار الأمامي على القطعة 0 و1 و2 و3 (F0،0، F0،1، F0،2، F0،3) ثم تنتظر حتى تنتهي وحدات GPU الأخرى من عملها. ولا تبدأ وحدة GPU0 العمل مرة أخرى إلا عندما تبدأ وحدات GPU الأخرى في إكمال عملها، حيث تقوم بالمسار العكسي للقطع 3 و2 و1 و0 (B0،3، B0،2، B0،1، B0،0). + +لاحظ أن هذا هو نفس مفهوم خطوات تجميع التدرجات. يستخدم PyTorch "chunks"، بينما يشير DeepSpeed إلى نفس مُحسن الخسارة باسم خطوات تجميع التدرجات. + +بسبب "chunks"، يقدم التوازي الأنبوبي مفهوم الدفعات الصغيرة (MBS). ويقسم DP حجم الدفعة الإجمالية للبيانات إلى دفعات صغيرة، لذا إذا كان لديك درجة DP تساوي 4، يتم تقسيم حجم دفعة عالمية تساوي 1024 إلى 4 دفعات صغيرة يبلغ حجم كل منها 256 (1024/4). وإذا كان عدد "chunks" (أو GAS) هو 32، فإننا نحصل على حجم دفعة صغيرة يساوي 8 (256/32). وتعمل كل مرحلة من مراحل خط الأنابيب مع دفعة صغيرة واحدة في كل مرة. لحساب حجم الدفعة العالمية لإعداد DP + PP، استخدم الصيغة التالية: "mbs * chunks * dp_degree" ("8 * 32 * 4 = 1024"). + +مع "chunks=1"، ستحصل على النموذج الساذج للتوازي، وهو غير فعال. مع قيمة كبيرة من "chunks"، ستحصل على أحجام دفعات صغيرة جدًا وهو أيضًا غير فعال. لهذا السبب، نشجعك على تجربة قيمة "chunks" لإيجاد القيمة التي تؤدي إلى أكثر استخدام فعال لوحدات GPU. + +قد تلاحظ وجود "فقاعة" من الوقت "الميت" في الرسم التخطيطي لا يمكن إجراء التوازي لها لأن مرحلة "التقدم" الأخيرة يجب أن تنتظر اكتمال مرحلة "العودة" لإكمال خط الأنابيب. والغرض من إيجاد أفضل قيمة لـ "chunks" هو تمكين الاستخدام المتزامن العالي لوحدة GPU عبر جميع وحدات GPU المشاركة، مما يؤدي إلى تقليل حجم "الفقاعة". + +تم تنفيذ حلول واجهة برمجة التطبيقات (API) لخط الأنابيب في: + +- PyTorch +- DeepSpeed +- Megatron-LM + +تأتي هذه الحلول ببعض أوجه القصور: + +- يجب أن تعدل النموذج بشكل كبير، لأن خط الأنابيب يتطلب إعادة كتابة التدفق العادي للوحدات النمطية إلى تسلسل "nn.Sequential" من نفس النوع، والذي قد يتطلب إجراء تغييرات على تصميم النموذج. + +- حاليًا، واجهة برمجة تطبيقات خط الأنابيب مقيدة للغاية. إذا كان لديك مجموعة من المتغيرات في Python يتم تمريرها في المرحلة الأولى من خط الأنابيب، فسوف يتعين عليك إيجاد طريقة للتعامل مع ذلك. حاليًا، تتطلب واجهة خط الأنابيب إما Tensor واحدة أو مجموعة من Tensors كإدخال وإخراج وحيدين. يجب أن يكون لهذه المصفوفات حجم دفعة كأول بُعد، نظرًا لأن خط الأنابيب سيقوم بتقسيم الدفعة الصغيرة إلى دفعات صغيرة. تتم مناقشة التحسينات المحتملة هنا https://github.com/pytorch/pytorch/pull/50693 + +- لا يمكن إجراء تدفق التحكم الشرطي على مستوى مراحل الأنابيب - على سبيل المثال، تتطلب نماذج Encoder-Decoder مثل T5 حلولًا خاصة للتعامل مع مرحلة Encoder شرطية. + +- يجب أن تقوم بترتيب كل طبقة بحيث يصبح إخراج إحدى الطبقات إدخالًا للطبقة الأخرى. + +تشمل الحلول الأحدث ما يلي: + +- Varuna +- Sagemaker + +لم نجرب Varuna وSageMaker، ولكن تشير أوراقهما إلى أنهما تغلبا على قائمة المشكلات المذكورة أعلاه وأنهما يتطلبان إجراء تغييرات أقل على نموذج المستخدم. + +التطبيقات: + +- [PyTorch](https://pytorch.org/docs/stable/pipeline.html) (دعم أولي في pytorch-1.8، وتحسين تدريجي في 1.9 وبشكل أكبر في 1.10). بعض [الأمثلة](https://github.com/pytorch/pytorch/blob/master/benchmarks/distributed/pipeline/pipe.py) + +- [DeepSpeed](https://www.deepspeed.ai/tutorials/pipeline/) + +- [Megatron-LM](https://github.com/NVIDIA/Megatron-LM) لديه تطبيق داخلي - لا يوجد واجهة برمجة تطبيقات. + +- [Varuna](https://github.com/microsoft/varuna) + +- [SageMaker](https://arxiv.org/abs/2111.05972) - هذا حل مملوك لا يمكن استخدامه إلا على AWS. + +- [OSLO](https://github.com/tunib-ai/oslo) - تم تنفيذه بناءً على محولات Hugging Face. + +حالة محولات 🤗: اعتبارًا من وقت كتابة هذا التقرير، لا يدعم أي من النماذج التوازي الأنبوبي الكامل. وتدعم نماذج GPT2 وT5 النموذج الساذج للتوازي. + +العقبة الرئيسية هي عدم القدرة على تحويل النماذج إلى "nn.Sequential" وجعل جميع الإدخالات Tensors. ويرجع ذلك إلى أن النماذج تحتوي حاليًا على العديد من الميزات التي تجعل التحويل معقدًا للغاية، وسيتعين إزالتها لتحقيق ذلك. + +تكاملات DeepSpeed وMegatron-LM متوفرة في [🤗 Accelerate](https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed). + +الأساليب الأخرى: + +تكاملات DeepSpeed وMegatron-LM متوفرة في [🤗 Accelerate](https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed). + +## التوازي الأنبوبي + التوازي في البيانات: + +يوضح الرسم التخطيطي التالي من تعليمي خط أنابيب DeepSpeed كيفية الجمع بين التوازي في البيانات والتوازي الأنبوبي. + +من المهم هنا ملاحظة كيف أن ترتيب DP 0 لا يرى GPU2 وترتيب DP 1 لا يرى GPU3. بالنسبة إلى DP، هناك فقط وحدات GPU 0 و1 حيث يتم إدخال البيانات كما لو كان هناك وحدتي GPU فقط. وتقوم وحدة GPU0 بتفريغ بعض عبئها سرًا على وحدة GPU2 باستخدام التوازي الأنبوبي. وتقوم وحدة GPU1 بنفس الشيء عن طريق الاستعانة بوحدة GPU3. + +نظرًا لأن كل بُعد يتطلب وحدتي GPU على الأقل، فأنت بحاجة إلى 4 وحدات GPU على الأقل هنا. + +التطبيقات: + +- [DeepSpeed](https://github.com/microsoft/DeepSpeed) + +- [Megatron-LM](https://github.com/NVIDIA/Megatron-LM) + +- [Varuna](https://github.com/microsoft/varuna) + +- [SageMaker](https://arxiv.org/abs/2111.05972) + +- [OSLO](https://github.com/tunib-ai/oslo) + +حالة محولات 🤗: لم يتم التنفيذ بعد + +## التوازي في البيانات + التوازي الأنبوبي + التوازي في المصفوفات: + +للحصول على تدريب أكثر كفاءة، يتم استخدام التوازي ثلاثي الأبعاد حيث يتم الجمع بين التوازي الأنبوبي والتوازي في المصفوفات والتوازي في البيانات. ويمكن رؤية ذلك في الرسم التخطيطي التالي. + +هذا الرسم التخطيطي مأخوذ من منشور مدونة بعنوان "التوازي ثلاثي الأبعاد: التدرج على نماذج ذات معلمات التريليون" https://www.microsoft.com/en-us/research/blog/deepspeed-extreme-scale-model-training-for-everyone/)، وهو أيضًا قراءة جيدة. + +نظرًا لأن كل بُعد يتطلب وحدتي GPU على الأقل، فأنت بحاجة إلى 8 وحدات GPU على الأقل هنا. + +التطبيقات: + +- [DeepSpeed](https://github.com/microsoft/DeepSpeed) - يتضمن DeepSpeed أيضًا توازيًا أكثر كفاءة في البيانات، والذي يطلقون عليه اسم ZeRO-DP. + +- [Megatron-LM](https://github.com/NVIDIA/Megatron-LM) + +- [Varuna](https://github.com/microsoft/varuna) + +- [SageMaker](https://arxiv.org/abs/2111.05972) + +- [OSLO](https://github.com/tunib-ai/oslo) + +حالة محولات 🤗: لم يتم التنفيذ بعد، حيث لا يوجد توازي أنبوبي أو توازي في المصفوفات. + +## التوازي في البيانات باستخدام ZeRO + التوازي الأنبوبي + التوازي في المصفوفات: + +تتمثل إحدى الميزات الرئيسية لـ DeepSpeed في ZeRO، وهو امتداد قابل للتطوير للغاية للتوازي في البيانات. وقد تمت مناقشته بالفعل في قسم [التوازي في البيانات باستخدام ZeRO](#zero-data-parallelism). وعادة ما يكون ميزة مستقلة لا تتطلب التوازي الأنبوبي أو التوازي في المصفوفات. ولكن يمكن الجمع بينه وبين التوازي الأنبوبي والتوازي في المصفوفات. + +عندما يتم الجمع بين ZeRO-DP والتوازي الأنبوبي (وبشكل اختياري التوازي في المصفوفات)، فإنه يمكّن عادةً مرحلة ZeRO 1 فقط (تجزئة مُحسن الخسارة). + +على الرغم من أنه من الممكن نظريًا استخدام مرحلة ZeRO 2 (تجزئة التدرج) مع التوازي الأنبوبي، إلا أنه سيكون له تأثيرات سلبية على الأداء. سيتعين إجراء عملية تجميع نثرية إضافية لكل دفعة صغيرة لتجميع التدرجات قبل التجزئة، مما يضيف تكلفة اتصال محتملة كبيرة. وبسبب التوازي الأنبوبي، يتم استخدام دفعات صغيرة ويتم بدلاً من ذلك التركيز على محاولة موازنة كثافة الحساب (حجم الدفعة الصغيرة) مع تقليل "فقاعة" خط الأنابيب (عدد الدفعات الصغيرة). وبالتالي، فإن تكاليف الاتصال هذه ستؤثر على الأداء. + +بالإضافة إلى ذلك، هناك بالفعل عدد أقل من الطبقات بسبب التوازي الأنبوبي، لذلك لن تكون وفورات الذاكرة كبيرة. ويقلل التوازي الأنبوبي بالفعل من حجم التدرج عن طريق "1/PP"، لذلك فإن وفورات التجزئة في التدرج بالإضافة إلى ذلك أقل أهمية من التوازي في البيانات النقي. + +المرحلة 3 من ZeRO ليست خيارًا جيدًا لنفس السبب - الحاجة إلى مزيد من الاتصالات بين العقد. + +وبما أننا لدينا ZeRO، فإن الفائدة الأخرى هي ZeRO-Offload. وبما أن هذه هي مرحلة 1، فيمكن تفريغ حالات مُحسن الخسارة إلى وحدة المعالجة المركزية. + +التطبيقات: + +- [Megatron-DeepSpeed](https://github.com/microsoft/Megatron-DeepSpeed) و [Megatron-Deepspeed من BigScience](https://github.com/bigscience-workshop/Megatron-DeepSpeed)، وهو فرع من المستودع السابق. + +- [OSLO](https://github.com/tunib-ai/oslo) + +الأوراق البحثية المهمة: + +- [Using DeepSpeed and Megatron to Train Megatron-Turing NLG 530B, A Large-Scale Generative Language Model](https://arxiv.org/abs/2201.11990) + +حالة محولات 🤗: لم يتم التنفيذ بعد، حيث لا يوجد توازي أنبوبي أو توازي في المصفوفات. + +## FlexFlow: + +يحل FlexFlow أيضًا مشكلة التوازي بطريقة مختلفة قليلاً. + +الورقة البحثية: ["Beyond Data and Model Parallelism for Deep Neural Networks" by Zhihao Jia, Matei Zaharia, Alex Aiken](https://arxiv.org/abs/1807.05358) + +ويؤدي نوعًا ما من التوازي رباعي الأبعاد على Sample-Operator-Attribute-Parameter. + +1. العينة = التوازي في البيانات (توازي على مستوى العينة) + +2. المشغل = توازي عملية واحدة في عدة عمليات فرعية + +3. السمة = التوازي في البيانات (توازي على مستوى الطول) + +4. المعلمة = التوازي في النموذج (بغض النظر عن البُعد - أفقي أو رأسي) + +أمثلة: + +* العينة + +لنأخذ 10 دفعات من طول التسلسل 512. إذا قمنا بتوازيها حسب بُعد العينة إلى جهازي كمبيوتر، فسنحصل على 10 × 512 والتي تصبح 5 × 2 × 512. + +* المشغل + +إذا قمنا بتطبيع الطبقة، فإننا نحسب الانحراف المعياري أولاً ثم المتوسط، وبعد ذلك يمكننا تطبيع البيانات. يسمح توازي المشغل بحساب الانحراف المعياري والمتوسط في نفس الوقت. لذلك، إذا قمنا بتوازيها حسب بُعد المشغل إلى جهازي كمبيوتر (cuda:0، cuda:1)، فنحن نقوم بنسخ بيانات الإدخال +يعد الوعد جذابًا للغاية - فهو يعمل على محاكاة لمدة 30 دقيقة على مجموعة الخيارات الخاصة بك ويخرج بأفضل استراتيجية لاستغلال هذه البيئة المحددة. إذا قمت بإضافة/إزالة/استبدال أي أجزاء، فسيقوم بالتشغيل وإعادة تحسين الخطة لذلك. وبعد ذلك يمكنك التدريب. سيكون لكل إعداد مختلف تحسينه الخاص. + +🤗 حالة المحولات: يمكن تتبع نماذج المحولات عبر [transformers.utils.fx](https://github.com/huggingface/transformers/blob/master/src/transformers/utils/fx.py)، وهو شرط أساسي لـ FlexFlow، ومع ذلك، هناك حاجة إلى تغييرات على جانب FlexFlow لجعله يعمل مع نماذج المحولات. + +## اختيار وحدة معالجة الرسومات (GPU) + +عند التدريب على وحدات معالجة رسومات متعددة، يمكنك تحديد عدد وحدات معالجة الرسومات التي تريد استخدامها والترتيب الذي تريد استخدامها به. يمكن أن يكون هذا مفيدًا، على سبيل المثال، عندما يكون لديك وحدات معالجة رسومات ذات قدرة حوسبة مختلفة وتريد استخدام وحدة معالجة الرسومات الأسرع أولاً. تنطبق عملية الاختيار على كل من [DistributedDataParallel](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html) و [DataParallel](https://pytorch.org/docs/stable/generated/torch.nn.DataParallel.html) لاستخدام مجموعة فرعية فقط من وحدات معالجة الرسومات المتوفرة، ولا تحتاج إلى Accelerate أو [تكامل DeepSpeed](./main_classes/deepspeed). + +### عدد وحدات معالجة الرسومات + +على سبيل المثال، إذا كان لديك 4 وحدات معالجة رسومات وتريد استخدام أول اثنتين فقط: + + + + +استخدم `--nproc_per_node` لاختيار عدد وحدات معالجة الرسومات التي تريد استخدامها. + +```bash +torchrun --nproc_per_node=2 trainer-program.py ... +``` + + + + +استخدم `--num_processes` لاختيار عدد وحدات معالجة الرسومات التي تريد استخدامها. + +```bash +accelerate launch --num_processes 2 trainer-program.py ... +``` + + + + +استخدم `--num_gpus` لاختيار عدد وحدات معالجة الرسومات التي تريد استخدامها. + +```bash +deepspeed --num_gpus 2 trainer-program.py ... +``` + + + + +### ترتيب وحدات معالجة الرسومات + +الآن، لاختيار وحدات معالجة الرسومات التي تريد استخدامها وترتيبها، استخدم متغير البيئة `CUDA_VISIBLE_DEVICES`. من الأسهل تعيين متغير البيئة في `~/bashrc` أو ملف تهيئة آخر. يستخدم `CUDA_VISIBLE_DEVICES` لتعيين خريطة وحدات معالجة الرسومات المستخدمة. على سبيل المثال، إذا كان لديك 4 وحدات معالجة رسومات (0، 1، 2، 3) وتريد تشغيل وحدتي معالجة الرسومات 0 و 2 فقط: + +```bash +CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ... +``` + +تكون وحدتا معالجة الرسومات الفعليتان (0 و 2) "مرئيتين" فقط لـ PyTorch، ويتم تعيينهما إلى `cuda:0` و `cuda:1` على التوالي. يمكنك أيضًا عكس ترتيب وحدات معالجة الرسومات لاستخدام 2 أولاً. الآن، يتم تعيين الخريطة إلى `cuda:1` لوحدة معالجة الرسومات 0 و `cuda:0` لوحدة معالجة الرسومات 2. + +```bash +CUDA_VISIBLE_DEVICES=2,0 torchrun trainer-program.py ... +``` + +يمكنك أيضًا تعيين متغير البيئة `CUDA_VISIBLE_DEVICES` إلى قيمة فارغة لإنشاء بيئة بدون وحدات معالجة رسومات. + +```bash +CUDA_VISIBLE_DEVICES= python trainer-program.py ... +``` + + + +كما هو الحال مع أي متغير بيئي، يمكن تصديرها بدلاً من إضافتها إلى سطر الأوامر. ومع ذلك، لا يوصى بذلك لأنه يمكن أن يكون مربكًا إذا نسيت كيفية إعداد متغير البيئة وتستخدم وحدات معالجة الرسومات الخطأ. بدلاً من ذلك، من الشائع تعيين متغير البيئة لتشغيل تدريب محدد على نفس سطر الأوامر. + + + +`CUDA_DEVICE_ORDER` هو متغير بيئي بديل يمكنك استخدامه للتحكم في كيفية ترتيب وحدات معالجة الرسومات. يمكنك ترتيبها إما عن طريق: + +1. معرفات حافلة PCIe التي تتطابق مع ترتيب ["nvidia-smi"](https://developer.nvidia.com/nvidia-system-management-interface) و ["rocm-smi"](https://rocm.docs.amd.com/projects/rocm_smi_lib/en/latest/.doxygen/docBin/html/index.html) لوحدات معالجة الرسومات NVIDIA و AMD على التوالي + +```bash +export CUDA_DEVICE_ORDER=PCI_BUS_ID +``` + +2. قدرة الحوسبة لوحدة معالجة الرسومات + +```bash +export CUDA_DEVICE_ORDER=FASTEST_FIRST +``` +```bash +export CUDA_DEVICE_ORDER=PCI_BUS_ID +``` + +2. قدرة الحوسبة لوحدة معالجة الرسومات + +```bash +export CUDA_DEVICE_ORDER=FASTEST_FIRST +``` + +`CUDA_DEVICE_ORDER` مفيد بشكل خاص إذا كانت مجموعة التدريب الخاصة بك تتكون من وحدة معالجة رسومات أقدم وأخرى أحدث، حيث تظهر وحدة معالجة الرسومات الأقدم أولاً، ولكن لا يمكنك استبدال البطاقات فعليًا لجعل وحدة معالجة الرسومات الأحدث تظهر أولاً. في هذه الحالة، قم بتعيين `CUDA_DEVICE_ORDER=FASTEST_FIRST` لاستخدام وحدة معالجة الرسومات الأحدث والأسرع أولاً (`nvidia-smi` أو `rocm-smi` لا يزال يبلغ عن وحدات معالجة الرسومات الخاصة بهم في ترتيب PCIe). أو يمكنك أيضًا تعيين `export CUDA_VISIBLE_DEVICES=1,0`. \ No newline at end of file From 174bffdebc676090b9a7cbe7e9e101d06537a56b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:38 +0300 Subject: [PATCH 027/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_summary.md | 92 +++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 docs/source/ar/model_summary.md diff --git a/docs/source/ar/model_summary.md b/docs/source/ar/model_summary.md new file mode 100644 index 00000000000000..0a69b6f3be8cdd --- /dev/null +++ b/docs/source/ar/model_summary.md @@ -0,0 +1,92 @@ +# عائلة نماذج المحول + +منذ تقديم النموذج [الأصلي للمحول](https://arxiv.org/abs/1706.03762) في عام 2017 (راجع منشور المدونة [المحول المشروح](http://nlp.seas.harvard.edu/2018/04/03/attention.html) لمقدمة تقنية بسيطة)، ألهم العديد من النماذج الجديدة والمثيرة التي تتجاوز مهام معالجة اللغات الطبيعية (NLP). هناك نماذج للتنبؤ [بالبنية المطوية للبروتينات](https://huggingface.co/blog/deep-learning-with-proteins)، و[تدريب الفهد على الجري](https://huggingface.co/blog/train-decision-transformers)، و[التنبؤ بالسلاسل الزمنية](https://huggingface.co/blog/time-series-transformers). مع وجود العديد من متغيرات المحول المتاحة، قد يكون من السهل أن تفوتك الصورة الأكبر. ما تشترك فيه جميع هذه النماذج هو أنها تستند إلى بنية المحول الأصلية. تستخدم بعض النماذج فقط الترميز أو فك الترميز، بينما تستخدم نماذج أخرى كليهما. يوفر هذا تصنيفًا مفيدًا لتصنيف وفحص الاختلافات عالية المستوى داخل النماذج في عائلة المحول، وسيساعدك على فهم المحولات التي لم تصادفها من قبل. + +إذا لم تكن على دراية بنموذج المحول الأصلي أو تحتاج إلى تذكير، فراجع الفصل الخاص بـ [كيف تعمل المحولات](https://huggingface.co/course/chapter1/4؟fw=pt) من دورة Hugging Face. + +
+ +
+ +## رؤية الكمبيوتر + + + +### الشبكة التلافيفية + +لفترة طويلة، كانت الشبكات التلافيفية (CNNs) النموذج السائد لمهام رؤية الكمبيوتر حتى أظهر [محول الرؤية](https://arxiv.org/abs/2010.11929) قابليته للتطوير وكفاءته. وحتى بعد ذلك، لا تزال بعض أفضل صفات CNN، مثل ثبات الترجمة، قوية جدًا (خاصة بالنسبة لمهام معينة) لدرجة أن بعض المحولات تدمج التلافيف في بنيتها. قلب [ConvNeXt](model_doc/convnext) هذا التبادل رأسًا على عقب وأدرج خيارات التصميم من المحولات لتحديث CNN. على سبيل المثال، يستخدم ConvNeXt نوافذ منزلقة غير متداخلة لتقسيم الصورة إلى رقع وزيادة حقل الاستقبال العالمي الخاص بها. كما يقوم ConvNeXt بعدة خيارات تصميم الطبقة لتكون أكثر كفاءة في الذاكرة وتحسين الأداء، لذلك فهو ينافس المحولات بشكل جيد! + +### الترميز[[cv-encoder]] +### الترميز[[cv-encoder]] + +فتح [محول الرؤية (ViT)](model_doc/vit) الباب أمام مهام رؤية الكمبيوتر دون التلافيف. يستخدم ViT ترميز محول قياسي، لكن إنجازه الرئيسي كان طريقة معالجته للصورة. فهو يقسم الصورة إلى رقع ذات حجم ثابت ويستخدمها لإنشاء تضمين، تمامًا مثل تقسيم الجملة إلى رموز. استفاد ViT من بنية المحول الفعالة لإظهار نتائج تنافسية مع CNNs في ذلك الوقت مع الحاجة إلى موارد أقل للتدريب. وسرعان ما تبع ViT نماذج رؤية أخرى يمكنها أيضًا التعامل مع مهام الرؤية الكثيفة مثل التجزئة بالإضافة إلى الكشف. + +واحد من هذه النماذج هو [Swin](model_doc/swin) Transformer. فهو يبني خرائط سمات هرمية (مثل CNN 👀 على عكس ViT) من رقع أصغر حجمًا ودمجها مع الرقع المجاورة في طبقات أعمق. يتم حساب الاهتمام فقط ضمن نافذة محلية، ويتم تحويل النافذة بين طبقات الاهتمام لإنشاء اتصالات لمساعدة النموذج على التعلم بشكل أفضل. نظرًا لأن محول Swin يمكنه إنتاج خرائط سمات هرمية، فهو مرشح جيد لمهام التنبؤ الكثيفة مثل التجزئة والكشف. كما يستخدم [SegFormer](model_doc/segformer) ترميز محول لبناء خرائط سمات هرمية، ولكنه يضيف فك تشفير متعدد الطبقات (MLP) بسيطًا في الأعلى لدمج جميع خرائط السمات وإجراء تنبؤ. + +استلهمت نماذج الرؤية الأخرى، مثل BeIT وViTMAE، الإلهام من هدف التدريب المسبق لـ BERT. يتم تدريب [BeIT](model_doc/beit) مسبقًا من خلال *نمذجة الصور المقنعة (MIM)*؛ يتم إخفاء رقع الصور بشكل عشوائي، كما يتم توكين الصورة إلى رموز بصرية. يتم تدريب BeIT للتنبؤ بالرموز البصرية المقابلة للرقع المخفية. لدى [ViTMAE](model_doc/vitmae) هدف تدريب مسبق مشابه، باستثناء أنه يجب عليه التنبؤ بالبكسلات بدلاً من الرموز البصرية. ما هو غير عادي هو أن 75% من رقع الصور مخفية! يقوم فك التشفير بإعادة بناء البكسلات من الرموز المخفية والرقع المشفرة. بعد التدريب المسبق، يتم التخلص من فك التشفير، ويصبح الترميز جاهزًا للاستخدام في مهام المصب. + +### فك التشفير[[cv-decoder]] + +نادرًا ما تستخدم نماذج الرؤية التي تعتمد على فك التشفير فقط لأن معظم نماذج الرؤية تعتمد على الترميز لتعلم تمثيل الصورة. ولكن بالنسبة للاستخدامات مثل توليد الصور، يعد فك التشفير مناسبًا بشكل طبيعي، كما رأينا من نماذج توليد النصوص مثل GPT-2. يستخدم [ImageGPT](model_doc/imagegpt) نفس بنية GPT-2، ولكنه بدلاً من التنبؤ بالرمز التالي في تسلسل، فإنه يتنبأ بالبكسل التالي في صورة. بالإضافة إلى توليد الصور، يمكن أيضًا ضبط ImageGPT الدقيق للتصنيف الصوري. + +### الترميز وفك التشفير[[cv-encoder-decoder]] + +عادةً ما تستخدم نماذج الرؤية ترميزًا (يُعرف أيضًا باسم العمود الفقري) لاستخراج ميزات الصورة المهمة قبل تمريرها إلى فك تشفير المحول. يستخدم [DETR](model_doc/detr) عمودًا فقريًا مُدربًا مسبقًا، ولكنه يستخدم أيضًا بنية الترميز وفك تشفير المحول الكاملة للكشف عن الأشياء. يتعلم الترميز تمثيلات الصور ويجمعها مع استعلامات الكائنات (كل استعلام كائن هو تضمين مُتعلم يركز على منطقة أو كائن في صورة) في فك التشفير. يتنبأ DETR بإحداثيات مربع الحدود وتسمية الفئة لكل استعلام كائن. + +## معالجة اللغات الطبيعية + + + +### الترميز[[nlp-encoder]] +### الترميز[[nlp-encoder]] + +[BERT](model_doc/bert) هو محول للترميز فقط يقوم بشكل عشوائي بإخفاء رموز معينة في الإدخال لتجنب رؤية الرموز الأخرى، مما يسمح له "بالغش". يتمثل هدف التدريب المسبق في التنبؤ بالرمز المخفي بناءً على السياق. يسمح هذا لـ BERT باستخدام السياق الأيسر والأيمن لمساعدته في تعلم تمثيل أعمق وأغنى للإدخالات. ومع ذلك، كان هناك مجال للتحسين في استراتيجية التدريب المسبق لـ BERT. [RoBERTa](model_doc/roberta) تحسين ذلك من خلال تقديم وصفة تدريب مسبق جديدة تشمل التدريب لفترة أطول وعلى دفعات أكبر، وإخفاء الرموز عشوائيًا في كل حقبة بدلاً من مرة واحدة فقط أثناء المعالجة المسبقة، وإزالة هدف التنبؤ بالجملة التالية. + +تتمثل الاستراتيجية السائدة لتحسين الأداء في زيادة حجم النموذج. ولكن تدريب النماذج الكبيرة مكلف من الناحية الحسابية. إحدى طرق تقليل التكاليف الحسابية هي استخدام نموذج أصغر مثل [DistilBERT](model_doc/distilbert). يستخدم DistilBERT [تقطير المعرفة](https://arxiv.org/abs/1503.02531) - وهي تقنية ضغط - لإنشاء إصدار أصغر من BERT مع الحفاظ على جميع قدرات فهم اللغة تقريبًا. + +ومع ذلك، استمرت معظم نماذج المحول في الاتجاه نحو المزيد من المعلمات، مما أدى إلى ظهور نماذج جديدة تركز على تحسين كفاءة التدريب. يقلل [ALBERT](model_doc/albert) من استهلاك الذاكرة عن طريق تقليل عدد المعلمات بطريقتين: فصل تضمين المفردات الأكبر إلى مصفوفتين أصغر والسماح للمستويات بمشاركة المعلمات. أضاف [DeBERTa](model_doc/deberta) آلية اهتمام منفصلة حيث يتم ترميز الكلمة وموضعها بشكل منفصل في متجهين. يتم حساب الاهتمام من هذه المتجهات المنفصلة بدلاً من متجه واحد يحتوي على تضمين الكلمة والموضع. ركز [Longformer](model_doc/longformer) أيضًا على جعل الاهتمام أكثر كفاءة، خاصة لمعالجة المستندات ذات أطوال تسلسل أطول. فهو يستخدم مزيجًا من الاهتمام المحلي بالنافذة (يتم حساب الاهتمام فقط من حجم النافذة الثابتة حول كل رمز) والاهتمام العالمي (فقط لرموز المهام المحددة مثل `[CLS]` للتصنيف) لإنشاء مصفوفة اهتمام متفرقة بدلاً من مصفوفة اهتمام كاملة. + +### فك التشفير[[nlp-decoder]] + +[GPT-2](model_doc/gpt2) هو محول فك تشفير فقط يتنبأ بالكلمة التالية في التسلسل. إنه يخفي الرموز الموجودة على اليمين حتى لا يتمكن النموذج من "الغش" عن طريق النظر إلى الأمام. من خلال التدريب المسبق على مجموعة كبيرة من النصوص، أصبح GPT-2 جيدًا جدًا في توليد النصوص، حتى إذا كان النص دقيقًا أو صحيحًا في بعض الأحيان فقط. ولكن كان يفتقر إلى سياق الاتجاهين من التدريب المسبق لـ BERT، مما جعله غير مناسب لمهام معينة. يجمع [XLNET](model_doc/xlnet) بين أفضل ما في أهداف التدريب المسبق لـ BERT وGPT-2 من خلال استخدام هدف نمذجة لغة التباديل (PLM) الذي يسمح له بالتعلم ثنائي الاتجاه. + +بعد GPT-2، نمت نماذج اللغة بشكل أكبر وأصبحت تُعرف الآن باسم *نماذج اللغة الكبيرة (LLMs)*. توضح LLMs التعلم القليل أو حتى التعلم الصفري إذا تم تدريبها على مجموعة بيانات كبيرة بما يكفي. [GPT-J](model_doc/gptj) هو LLM به 6 مليارات معلمة مدربة على 400 مليار رمز. تبع GPT-J [OPT](model_doc/opt)، وهي عائلة من نماذج فك التشفير فقط، أكبرها 175 مليار مدربة على 180 مليار رمز. تم إصدار [BLOOM](model_doc/bloom) في نفس الوقت تقريبًا، ويحتوي أكبر نموذج في العائلة على 176 مليار معلمة مدربة على 366 مليار رمز في 46 لغة و13 لغة برمجة. + +### الترميز وفك التشفير[[nlp-encoder-decoder]] +### الترميز وفك التشفير[[nlp-encoder-decoder]] + +يحتفظ [BART](model_doc/bart) ببنية المحول الأصلية، ولكنه يعدل هدف التدريب المسبق باستخدام *إفساد تعبئة النص*، حيث يتم استبدال بعض نطاقات النص برمز `mask` واحد. يتنبأ فك التشفير بالرموز غير الفاسدة (يتم إخفاء الرموز المستقبلية) ويستخدم حالات الترميز المخفية للمساعدة. [Pegasus](model_doc/pegasus) مشابه لـ BART، ولكن Pegasus يقوم بإخفاء جمل كاملة بدلاً من نطاقات النص. بالإضافة إلى نمذجة اللغة المقنعة، يتم تدريب Pegasus مسبقًا بواسطة توليد جملة الفجوة (GSG). يقوم هدف GSG بإخفاء الجمل الكاملة المهمة للمستند، واستبدالها برمز `mask`. يجب على فك التشفير توليد الإخراج من الجمل المتبقية. [T5](model_doc/t5) هو نموذج فريد من نوعه يلقي جميع مهام NLP إلى مشكلة النص إلى نص باستخدام بادئات محددة. على سبيل المثال، يشير البادئة `Summarize:` إلى مهمة تلخيص. يتم تدريب T5 مسبقًا بواسطة التدريب الخاضع للإشراف (GLUE وSuperGLUE) والتدريب الخاضع للإشراف الذاتي (عينة عشوائية وإسقاط 15% من الرموز بشكل عشوائي). + +## الصوت + + + +### الترميز[[audio-encoder]] + +يستخدم [Wav2Vec2](model_doc/wav2vec2) ترميز محول لتعلم تمثيلات الكلام مباشرة من أشكال موجة الصوت الخام. يتم تدريبه مسبقًا باستخدام مهمة مقارنة لتحديد تمثيل الكلام الحقيقي من مجموعة من التمثيلات الخاطئة. [HuBERT](model_doc/hubert) مشابه لـ Wav2Vec2 ولكنه له عملية تدريب مختلفة. يتم إنشاء علامات الهدف عن طريق خطوة تجميع يتم فيها تعيين مقاطع صوتية مماثلة إلى مجموعة تصبح وحدة مخفية. يتم رسم الخريطة إلى تضمين لإجراء تنبؤ. + +### الترميز وفك التشفير[[audio-encoder-decoder]] + +[Speech2Text](model_doc/speech_to_text) هو نموذج كلام مصمم للتعرف التلقائي على الكلام (ASR) وترجمة الكلام. يقبل النموذج ميزات بنك المرشح اللغوي التي تم استخراجها من شكل موجة الصوت وتم تدريبه مسبقًا بطريقة ذاتية التعلم لتوليد نسخة أو ترجمة. [Whisper](model_doc/whisper) هو أيضًا نموذج ASR، ولكنه على عكس العديد من نماذج الكلام الأخرى، يتم تدريبه مسبقًا على كمية كبيرة من بيانات نسخ النص الصوتي ✨ المسماة ✨ لتحقيق الأداء الصفري. يحتوي جزء كبير من مجموعة البيانات أيضًا على لغات غير اللغة الإنجليزية، مما يعني أنه يمكن استخدام Whisper أيضًا للغات منخفضة الموارد. من الناحية الهيكلية، يشبه Whisper نموذج Speech2Text. يتم تحويل إشارة الصوت إلى طيف لوجاريتم مل-ميل يتم تشفيره بواسطة الترميز. يقوم فك التشفير بتوليد النسخة بطريقة ذاتية التعلم من حالات الترميز المخفية والرموز السابقة. + +## متعدد الوسائط + + + +### Encoder[[mm-encoder]] + +[VisualBERT](model_doc/visual_bert) هو نموذج متعدد الوسائط لمهام الرؤية اللغوية تم إصداره بعد فترة وجيزة من BERT. فهو يجمع بين BERT ونظام اكتشاف كائن مسبق التدريب لاستخراج ميزات الصورة في تضمينات بصرية، يتم تمريرها جنبًا إلى جنب مع التضمينات النصية إلى BERT. يتنبأ VisualBERT بالنص المقنع بناءً على النص غير المقنع والتضمينات المرئية، ويجب عليه أيضًا التنبؤ بما إذا كان النص متوافقًا مع الصورة. عندما تم إصدار ViT، اعتمد [ViLT](model_doc/vilt) ViT في بنيتها لأنه كان من الأسهل الحصول على تضمينات الصورة بهذه الطريقة. يتم معالجة تضمينات الصورة بشكل مشترك مع التضمينات النصية. ومن هناك، يتم التدريب المسبق لـ ViLT بواسطة مطابقة الصورة النصية، ونمذجة اللغة المقنعة، وإخفاء كلمة كاملة. + +[CLIP](model_doc/clip) يتبع نهجًا مختلفًا ويقوم بتنبؤ زوج من ("الصورة"، "النص"). يتم تدريب مشفر صورة (ViT) ومشفر نص (محول) بشكل مشترك على مجموعة بيانات مكونة من 400 مليون زوج ("صورة"، "نص") لتعظيم التشابه بين تضمينات الصورة والنص لأزواج ("الصورة"، "النص"). بعد التدريب المسبق، يمكنك استخدام اللغة الطبيعية لتوجيه CLIP للتنبؤ بالنص بناءً على صورة أو العكس بالعكس. [OWL-ViT](model_doc/owlvit) يبني على CLIP باستخدامه كعمود فقري للكشف عن الكائنات بدون إشراف. بعد التدريب المسبق، يتم إضافة رأس كشف كائن لإجراء تنبؤ بمجموعة عبر أزواج ("class"، "bounding box"). + +### Encoder-decoder[[mm-encoder-decoder]] + +الاعتراف البصري بالحروف (OCR) هو مهمة التعرف على النص طويلة الأمد التي تنطوي عادةً على عدة مكونات لفهم الصورة وتوليد النص. [TrOCR](model_doc/trocr) يبسط العملية باستخدام محول من النهاية إلى النهاية. المشفر هو نموذج على غرار ViT لفهم الصورة ويعالج الصورة على أنها بقع ثابتة الحجم. يقبل فك التشفير حالات الإخفاء للمشفر وينشئ النص بشكل تلقائي. [Donut](model_doc/donut) هو نموذج أكثر عمومية لفهم المستندات المرئية لا يعتمد على نهج OCR. يستخدم محول Swin كمشفر وBART متعدد اللغات كمفك تشفير. يتم تدريب Donut على قراءة النص عن طريق التنبؤ بالكلمة التالية بناءً على ملاحظات الصورة والنص. يقوم فك التشفير بتوليد تسلسل الرموز بناءً على موجه. يتم تمثيل الموجه بواسطة رمز خاص لكل مهمة لأسفل البئر. على سبيل المثال، يحتوي تحليل المستند على رمز خاص "parsing" يتم دمجه مع حالات الإخفاء للمشفر لتفسير المستند بتنسيق إخراج منظم (JSON). + +## التعلم التعزيزي + + + +### فك التشفير[[rl-decoder]] + +يصور محول القرار والمسار الحالة والعمل والمكافأة كمشكلة نمذجة تسلسلية. [محول القرار](model_doc/decision_transformer) يقوم بتوليد سلسلة من الإجراءات التي تؤدي إلى عائد مرغوب في المستقبل بناءً على العوائد المتبقية، والدول السابقة، والإجراءات. بالنسبة لآخر *K* خطوات زمنية، يتم تحويل كل من هذه الطرائق الثلاث إلى تضمينات الرموز ومعالجتها بواسطة نموذج مشابه لـ GPT للتنبؤ برمز الإجراء المستقبلي. [محول المسار](model_doc/trajectory_transformer) أيضًا توكينيز الدول والإجراءات والمكافآت ومعالجتها بهندسة GPT. على عكس محول القرار، الذي يركز على شرط المكافأة، يقوم محول المسار بتوليد إجراءات مستقبلية باستخدام البحث الشعاعي. \ No newline at end of file From c8a5f8047d940fd91132faf8a28054c2fefba431 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:40 +0300 Subject: [PATCH 028/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Finfer=5Fcpu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_infer_cpu.md | 112 +++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 docs/source/ar/perf_infer_cpu.md diff --git a/docs/source/ar/perf_infer_cpu.md b/docs/source/ar/perf_infer_cpu.md new file mode 100644 index 00000000000000..855945abc1f41d --- /dev/null +++ b/docs/source/ar/perf_infer_cpu.md @@ -0,0 +1,112 @@ +# الاستنتاج باستخدام وحدة المعالجة المركزية (CPU Inference) + +مع بعض التحسينات، يمكن تشغيل استنتاج النماذج الكبيرة بكفاءة على وحدة المعالجة المركزية (CPU). وتتضمن إحدى تقنيات التحسين هذه تجميع كود PyTorch إلى تنسيق وسيط لبيئات عالية الأداء مثل C++. وتقوم تقنية أخرى بدمج عدة عمليات في نواة واحدة لتقليل النفقات العامة لتشغيل كل عملية على حدة. + +ستتعلم كيفية استخدام BetterTransformer للاستنتاج بشكل أسرع، وكيفية تحويل كود PyTorch الخاص بك إلى TorchScript. إذا كنت تستخدم معالج Intel، فيمكنك أيضًا استخدام التحسينات الرسومية من Intel Extension for PyTorch لزيادة سرعة الاستنتاج بشكل أكبر. أخيرًا، تعرف على كيفية استخدام Hugging Face Optimum لتسريع الاستنتاج باستخدام ONNX Runtime أو OpenVINO (إذا كنت تستخدم معالج Intel). + +## BetterTransformer + +يُسرع BetterTransformer الاستنتاج من خلال تنفيذ fastpath (التنفيذ المتخصص لـ PyTorch الأصلي لوظائف Transformer). ويتمثل التحسينان في تنفيذ fastpath فيما يلي: + +1. الدمج (fusion)، والذي يجمع بين عدة عمليات متتالية في "نواة" واحدة لتقليل عدد خطوات الحساب. +2. تخطي ندرة التوكينز (tokens) المبطنة المتأصلة لتجنب الحسابات غير الضرورية مع المصفوفات المُستَعشَقة (nested tensors). + +كما يحول BetterTransformer جميع عمليات الانتباه لاستخدام [scaled dot product attention](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention) الأكثر كفاءة في الذاكرة. + + + +BetterTransformer غير مدعوم لجميع النماذج. تحقق من هذه [القائمة](https://huggingface.co/docs/optimum/bettertransformer/overview#supported-models) لمعرفة ما إذا كان النموذج يدعم BetterTransformer. + + + +قبل البدء، تأكد من تثبيت Hugging Face Optimum [installed](https://huggingface.co/docs/optimum/installation). + +قم بتمكين BetterTransformer باستخدام طريقة [`PreTrainedModel.to_bettertransformer`]: + +```py +from transformers import AutoModelForCausalLM + +model = AutoModelForCausalLM.from_pretrained("bigcode/starcoder") +model.to_bettertransformer() +``` + +## TorchScript + +TorchScript هو تمثيل وسيط لنموذج PyTorch يمكن تشغيله في بيئات الإنتاج حيث تكون الأداء مهمًا. يمكنك تدريب نموذج في PyTorch ثم تصديره إلى TorchScript لتحرير النموذج من قيود الأداء في Python. تقوم PyTorch [بتتبع](https://pytorch.org/docs/stable/generated/torch.jit.trace.html) نموذج لإرجاع [`ScriptFunction`] يتم تحسينه باستخدام التجميع في الوقت المناسب (JIT). مقارنة بوضع eager الافتراضي، عادةً ما يوفر وضع JIT في PyTorch أداء أفضل للاستنتاج باستخدام تقنيات التحسين مثل دمج المشغل. + +للبدء السريع مع TorchScript، راجع البرنامج التعليمي [Introduction to PyTorch TorchScript](https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html). + +مع فئة [`Trainer`]، يمكنك تمكين وضع JIT للاستنتاج باستخدام وحدة المعالجة المركزية عن طريق تعيين علامة `--jit_mode_eval`: + +```bash +python run_qa.py \ +--model_name_or_path csarron/bert-base-uncased-squad-v1 \ +--dataset_name squad \ +--do_eval \ +--max_seq_length 384 \ +--doc_stride 128 \ +--output_dir /tmp/ \ +--no_cuda \ +--jit_mode_eval +``` + + + +بالنسبة لـ PyTorch >= 1.14.0، يمكن أن يستفيد وضع JIT أي نموذج للتنبؤ والتقييم منذ دعم إدخال القاموس في `jit.trace`. + +بالنسبة لـ PyTorch < 1.14.0، يمكن أن يفيد وضع JIT نموذجًا إذا تطابق ترتيب معلمات التقديم الخاصة به مع ترتيب إدخال الرباعية في `jit.trace`، مثل نموذج الإجابة على الأسئلة. إذا لم يتطابق ترتيب معلمات التقديم مع ترتيب إدخال الرباعية في `jit.trace`، مثل نموذج تصنيف النص، فسوف يفشل `jit.trace` ونحن نلتقط هذا الاستثناء هنا لجعله يتراجع. يتم استخدام التسجيل لإخطار المستخدمين. + + + +## تحسين الرسم البياني لـ IPEX + +يوفر Intel® Extension for PyTorch (IPEX) مزيدًا من التحسينات في وضع JIT لمعالجات Intel، ونوصي بدمجه مع TorchScript للحصول على أداء أسرع. يقوم تحسين الرسم البياني لـ IPEX [graph optimization](https://intel.github.io/intel-extension-for-pytorch/cpu/latest/tutorials/features/graph_optimization.html) بدمج العمليات مثل Multi-head attention، وConcat Linear، وLinear + Add، وLinear + Gelu، وAdd + LayerNorm، والمزيد. + +للاستفادة من تحسينات الرسم البياني هذه، تأكد من تثبيت IPEX [installed](https://intel.github.io/intel-extension-for-pytorch/cpu/latest/tutorials/installation.html): + +```bash +pip install intel_extension_for_pytorch +``` + +قم بتعيين علامتي `--use_ipex` و `--jit_mode_eval` في فئة [`Trainer`] لتمكين وضع JIT مع تحسينات الرسم البياني: + +```bash +python run_qa.py \ +--model_name_or_path csarron/bert-base-uncased-squad-v1 \ +--dataset_name squad \ +--do_eval \ +--max_seq_length 384 \ +--doc_stride 128 \ +--output_dir /tmp/ \ +--no_cuda \ +--use_ipex \ +--jit_mode_eval +``` + +## Hugging Face Optimum + + + +تعرف على المزيد من التفاصيل حول استخدام ORT مع Hugging Face Optimum في دليل [Optimum Inference with ONNX Runtime](https://huggingface.co/docs/optimum/onnxruntime/usage_guides/models). يقدم هذا القسم فقط مثالًا موجزًا وبسيطًا. + + + +ONNX Runtime (ORT) هو مسرع نموذج يقوم بتشغيل الاستنتاج على وحدات المعالجة المركزية بشكل افتراضي. تدعم Hugging Face Optimum استخدام ONNX Runtime، والذي يمكن استخدامه في Hugging Face Transformers، دون إجراء الكثير من التغييرات على كودك. كل ما عليك فعله هو استبدال فئة `AutoClass` من Hugging Face Transformers بما يعادلها [`~optimum.onnxruntime.ORTModel`] للمهمة التي تحاول حلها، وتحميل نقطة تفتيش بتنسيق ONNX. + +على سبيل المثال، إذا كنت تقوم بالاستنتاج في مهمة الإجابة على الأسئلة، فقم بتحميل نقطة التفتيش [optimum/roberta-base-squad2](https://huggingface.co/optimum/roberta-base-squad2) التي تحتوي على ملف `model.onnx`: + +```py +from transformers import AutoTokenizer, pipeline +from optimum.onnxruntime import ORTModelForQuestionAnswering + +model = ORTModelForQuestionAnswering.from_pretrained("optimum/roberta-base-squad2") +tokenizer = AutoTokenizer.from_pretrained("deepset/roberta-base-squad2") + +onnx_qa = pipeline("question-answering", model=model, tokenizer=tokenizer) + +question = "What's my name?" +context = "My name is Philipp and I live in Nuremberg." +pred = onnx_qa(question, context) +``` + +إذا كان لديك معالج Intel، فراجع Hugging Face [Optimum Intel](https://huggingface.co/docs/optimum/intel/index) الذي يدعم مجموعة متنوعة من تقنيات الضغط (الكمية، التشذيب، تقطير المعرفة) وأدوات لتحويل النماذج إلى تنسيق [OpenVINO](https://huggingface.co/docs/optimum/intel/inference) للاستدلال عالي الأداء. \ No newline at end of file From 4e65dda1034fd224627c74582907139431db5cb9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:42 +0300 Subject: [PATCH 029/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fspecial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_train_special.md | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 docs/source/ar/perf_train_special.md diff --git a/docs/source/ar/perf_train_special.md b/docs/source/ar/perf_train_special.md new file mode 100644 index 00000000000000..d1d8d6d3bf4080 --- /dev/null +++ b/docs/source/ar/perf_train_special.md @@ -0,0 +1,48 @@ +# تدريب PyTorch على Apple silicon + +سابقًا، كان تدريب النماذج على جهاز Mac يقتصر على وحدة المعالجة المركزية فقط. مع إصدار PyTorch v1.12، يمكنك الاستفادة من تدريب النماذج باستخدام معالجات الرسوميات (GPUs) من Apple silicon للحصول على أداء وتدريب أسرع بشكل ملحوظ. يتم تشغيل هذه الميزة في PyTorch من خلال دمج معالجات الرسوميات من Apple Metal Performance Shaders (MPS) كخلفية. تقوم خلفية [MPS](https://pytorch.org/docs/stable/notes/mps.html) بتنفيذ عمليات PyTorch على شكل معالجات رسومات مخصصة وتضع هذه الوحدات على جهاز `mps`. + + + +لم يتم بعد تنفيذ بعض عمليات PyTorch في MPS وقد تتسبب في حدوث خطأ. لتجنب ذلك، يجب عليك تعيين متغير البيئة `PYTORCH_ENABLE_MPS_FALLBACK=1` لاستخدام نوى وحدة المعالجة المركزية بدلاً من ذلك (ستظل ترى `UserWarning`). + +
+ +إذا واجهتك أي أخطاء أخرى، يرجى فتح قضية في مستودع [PyTorch](https://github.com/pytorch/pytorch/issues) لأن [`Trainer`] يدعم فقط خلفية MPS. + +
+ +مع تعيين جهاز `mps`، يمكنك: + +* تدريب شبكات أو أحجام دفعات أكبر محليًا +* تقليل زمن استرداد البيانات لأن بنية الذاكرة الموحدة لمعالج الرسومات تسمح بالوصول المباشر إلى مخزن الذاكرة الكامل +* تقليل التكاليف لأنك لست بحاجة إلى التدريب على معالجات رسومات (GPUs) قائمة على السحابة أو إضافة معالجات رسومات (GPUs) محلية إضافية + +ابدأ بالتأكد من تثبيت PyTorch. يتم دعم تسريع MPS على macOS 12.3+. + +```bash +pip install torch torchvision torchaudio +``` + +يستخدم [`TrainingArguments`] جهاز `mps` بشكل افتراضي إذا كان متوفرًا، مما يعني أنك لست بحاجة إلى تعيين الجهاز بشكل صريح. على سبيل المثال، يمكنك تشغيل نص البرنامج النصي [run_glue.py](https://github.com/huggingface/transformers/blob/main/examples/pytorch/text-classification/run_glue.py) مع تمكين خلفية MPS تلقائيًا دون إجراء أي تغييرات. + +```diff +export TASK_NAME=mrpc + +python examples/pytorch/text-classification/run_glue.py \ + --model_name_or_path google-bert/bert-base-cased \ + --task_name $TASK_NAME \ +- --use_mps_device \ + --do_train \ + --do_eval \ + --max_seq_length 128 \ + --per_device_train_batch_size 32 \ + --learning_rate 2e-5 \ + --num_train_epochs 3 \ + --output_dir /tmp/$TASK_NAME/ \ + --overwrite_output_dir +``` + +لا تدعم خلفية `mps` الخلفيات الخاصة بالتكوينات الموزعة (distributed setups) مثل `gloo` و`nccl`، مما يعني أنه يمكنك التدريب على معالج رسومات (GPU) واحد فقط مع خلفية MPS. + +يمكنك معرفة المزيد عن خلفية MPS في منشور المدونة [تقديم تدريب PyTorch المعجل على Mac](https://pytorch.org/blog/introducing-accelerated-pytorch-training-on-mac/). \ No newline at end of file From accd103f2f8d089d791812c6ba6d39bca06abf4e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:44 +0300 Subject: [PATCH 030/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perplexity.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perplexity.md | 95 ++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 docs/source/ar/perplexity.md diff --git a/docs/source/ar/perplexity.md b/docs/source/ar/perplexity.md new file mode 100644 index 00000000000000..1792694c9d1409 --- /dev/null +++ b/docs/source/ar/perplexity.md @@ -0,0 +1,95 @@ +# حيرة النماذج ذات الطول الثابت + +[[open-in-colab]] + +حيرة (PPL) هي واحدة من أكثر المقاييس شيوعًا لتقييم نماذج اللغة. قبل الغوص في التفاصيل، يجب أن نلاحظ أن المقياس ينطبق تحديدًا على نماذج اللغة الكلاسيكية (يُطلق عليها أحيانًا نماذج اللغة الذاتية الترجعية أو السببية) وهي غير محددة جيدًا لنماذج اللغة المقنعة مثل BERT (راجع [ملخص النماذج](model_summary)). + +تُعرَّف الحيرة على أنها الأس المطروح من متوسط اللوغاريتم الاحتمالي لمتتالية. إذا كان لدينا تسلسل مميز \\(X = (x_0, x_1, \dots, x_t)\\)، فإن حيرة \\(X\\) هي، + +$$\text{PPL}(X) = \exp \left\{ {-\frac{1}{t}\sum_i^t \log p_\theta (x_i|x_{ + +ومع ذلك، عند العمل مع النماذج التقريبية، عادة ما يكون لدينا قيد على عدد الرموز التي يمكن للنموذج معالجتها. على سبيل المثال، تحتوي أكبر نسخة من [GPT-2](model_doc/gpt2) على طول ثابت يبلغ 1024 رمزًا، لذلك لا يمكننا حساب \\(p_\theta(x_t|x_{ +Suboptimal PPL not taking advantage of full available context + +هذا سريع الحساب لأن حيرة كل جزء يمكن حسابها في تمرير واحد، ولكنه يمثل تقريبًا ضعيفًا لحيرة التفكيك الكامل وسيؤدي عادةً إلى PPL أعلى (أسوأ) لأن النموذج سيكون لديه سياق أقل في معظم خطوات التنبؤ. + +بدلاً من ذلك، يجب تقييم حيرة النماذج ذات الطول الثابت باستخدام إستراتيجية النافذة المنزلقة. وينطوي هذا على تحريك نافذة السياق بشكل متكرر بحيث يكون للنموذج سياق أكبر عند إجراء كل تنبؤ. + +Sliding window PPL taking advantage of all available context + +هذا تقريب أوثق للتفكيك الحقيقي لاحتمالية التسلسل وسيؤدي عادةً إلى نتيجة أفضل. الجانب السلبي هو أنه يتطلب تمريرًا للأمام لكل رمز في مجموعة البيانات. حل وسط عملي جيد هو استخدام نافذة منزلقة ذات خطوة، حيث يتم تحريك السياق بخطوات أكبر بدلاً من الانزلاق بمقدار 1 رمز في كل مرة. يسمح ذلك بإجراء الحساب بشكل أسرع مع إعطاء النموذج سياقًا كبيرًا للتنبؤات في كل خطوة. + +## مثال: حساب الحيرة مع GPT-2 في 🤗 Transformers + +دعونا نوضح هذه العملية مع GPT-2. + +```python +from transformers import GPT2LMHeadModel, GPT2TokenizerFast + +device = "cuda" +model_id = "openai-community/gpt2-large" +model = GPT2LMHeadModel.from_pretrained(model_id).to(device) +tokenizer = GPT2TokenizerFast.from_pretrained(model_id) +``` + +سنقوم بتحميل مجموعة بيانات WikiText-2 وتقييم الحيرة باستخدام بعض إستراتيجيات النافذة المنزلقة المختلفة. نظرًا لأن هذه المجموعة صغيرة ونقوم فقط بتمرير واحد على المجموعة، فيمكننا ببساطة تحميل المجموعة وترميزها بالكامل في الذاكرة. + +```python +from datasets import load_dataset + +test = load_dataset("wikitext", "wikitext-2-raw-v1", split="test") +encodings = tokenizer("\n\n".join(test["text"]), return_tensors="pt") +``` + +مع 🤗 Transformers، يمكننا ببساطة تمرير `input_ids` كـ `labels` إلى نموذجنا، ويتم إرجاع متوسط اللوغاريتم الاحتمالي السلبي لكل رمز كخسارة. ومع ذلك، مع نهج النافذة المنزلقة لدينا، هناك تداخل في الرموز التي نمررها إلى النموذج في كل تكرار. لا نريد تضمين اللوغاريتم الاحتمالي للرموز التي نتعامل معها كسياق في خسارتنا، لذا يمكننا تعيين هذه الأهداف إلى `-100` بحيث يتم تجاهلها. ما يلي هو مثال على كيفية القيام بذلك مع خطوة من `512`. وهذا يعني أن النموذج سيكون لديه 512 رمزًا على الأقل للسياق عند حساب الاحتمالية الشرطية لأي رمز واحد (شريطة أن تكون هناك 512 رمزًا سابقًا متاحًا للاشتقاق). + +```python +import torch +from tqdm import tqdm + +max_length = model.config.n_positions +stride = 512 +seq_len = encodings.input_ids.size(1) + +nlls = [] +prev_end_loc = 0 +for begin_loc in tqdm(range(0, seq_len, stride)): + end_loc = min(begin_loc + max_length, seq_len) + trg_len = end_loc - prev_end_loc # قد تكون مختلفة عن الخطوة في الحلقة الأخيرة + input_ids = encodings.input_ids[:, begin_loc:end_loc].to(device) + target_ids = input_ids.clone() + target_ids[:, :-trg_len] = -100 + + with torch.no_grad(): + outputs = model(input_ids, labels=target_ids) + + # يتم حساب الخسارة باستخدام CrossEntropyLoss الذي يقوم بالمتوسط على التصنيفات الصحيحة + # لاحظ أن النموذج يحسب الخسارة على trg_len - 1 من التصنيفات فقط، لأنه يتحول داخليًا إلى اليسار بواسطة 1. + neg_log_likelihood = outputs.loss + + nlls.append(neg_log_likelihood) + + prev_end_loc = end_loc + if end_loc == seq_len: + break + +ppl = torch.exp(torch.stack(nlls).mean()) +``` + +إن تشغيل هذا مع طول الخطوة يساوي طول الإدخال الأقصى يعادل إستراتيجية النافذة غير المنزلقة وغير المثلى التي ناقشناها أعلاه. وكلما صغرت الخطوة، زاد السياق الذي سيكون لدى النموذج في إجراء كل تنبؤ، وكلما كانت الحيرة المبلغ عنها أفضل عادةً. + +عندما نقوم بتشغيل ما سبق باستخدام `stride = 1024`، أي بدون تداخل، تكون نتيجة PPL هي `19.44`، وهو ما يماثل `19.93` المبلغ عنها في ورقة GPT-2. من خلال استخدام `stride = 512` وبالتالي استخدام إستراتيجية النافذة المنزلقة لدينا، ينخفض هذا إلى `16.45`. هذه النتيجة ليست فقط أفضل، ولكنها محسوبة بطريقة أقرب إلى التفكيك الذاتي الترجعي الحقيقي لاحتمالية التسلسل. \ No newline at end of file From 0e76e638e94844804ae2e0779d21570cb8cb6e84 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:45 +0300 Subject: [PATCH 031/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/philosophy.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/philosophy.md | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/source/ar/philosophy.md diff --git a/docs/source/ar/philosophy.md b/docs/source/ar/philosophy.md new file mode 100644 index 00000000000000..46ba3df8bbc470 --- /dev/null +++ b/docs/source/ar/philosophy.md @@ -0,0 +1,63 @@ +# الفلسفة + +🤗 Transformers هي مكتبة موجهة تم بناؤها من أجل: + +- باحثي وأخصائيي التعليم في مجال التعلم الآلي الذين يسعون إلى استخدام نماذج المحولات واسعة النطاق أو دراستها أو توسيعها. +- الممارسون العمليون الذين يرغبون في ضبط تلك النماذج أو تشغيلها في الإنتاج، أو كليهما. +- المهندسون الذين يريدون فقط تنزيل نموذج مُدرب مسبقًا واستخدامه لحل مهمة تعلم آلي معينة. + +تم تصميم المكتبة مع الأخذ في الاعتبار هدفين رئيسيين: + +1. أن تكون سهلة وسريعة الاستخدام قدر الإمكان: + + - قمنا بالحد بشكل كبير من عدد التجريدات المواجهة للمستخدم والتي يجب تعلمها، وفي الواقع، لا توجد تجريدات تقريبًا، + فقط ثلاث فئات قياسية مطلوبة لاستخدام كل نموذج: [التكوين](main_classes/configuration)، + [نماذج](main_classes/model)، وفئة ما قبل المعالجة ([معالج](main_classes/tokenizer) لـ NLP، [معالج الصور](main_classes/image_processor) للرؤية، [مستخرج الميزات](main_classes/feature_extractor) للصوت، و [معالج](main_classes/processors) للإدخالات متعددة الوسائط). + - يمكن تهيئة جميع هذه الفئات بطريقة بسيطة وموحدة من مثيلات مُدربة مسبقًا باستخدام طريقة `from_pretrained()` الشائعة والتي تقوم بتنزيل (إذا لزم الأمر)، وتخزين + وتحميل مثيل الفئة المرتبطة وبياناتها (معلمات التهيئة، ومعجم المعالج، + وأوزان النماذج) من نقطة تفتيش مُدربة مسبقًا مقدمة على [Hugging Face Hub](https://huggingface.co/models) أو نقطة التفتيش المحفوظة الخاصة بك. + - بالإضافة إلى هذه الفئات الأساسية الثلاث، توفر المكتبة واجهتي برمجة تطبيقات: [`pipeline`] للاستدلال + بسرعة باستخدام نموذج لمهمة معينة و [`Trainer`] لتدريب أو ضبط نموذج PyTorch بسرعة (جميع نماذج TensorFlow متوافقة مع `Keras.fit`). + - نتيجة لذلك، هذه المكتبة ليست صندوق أدوات متعدد الاستخدامات من الكتل الإنشائية للشبكات العصبية. إذا كنت تريد + توسيع أو البناء على المكتبة، فما عليك سوى استخدام Python و PyTorch و TensorFlow و Keras العادية والوراثة من الفئات الأساسية + للمكتبة لإعادة استخدام الوظائف مثل تحميل النموذج وحفظه. إذا كنت ترغب في معرفة المزيد عن فلسفة الترميز لدينا للنماذج، فراجع منشور المدونة الخاص بنا [Repeat Yourself](https://huggingface.co/blog/transformers-design-philosophy). + +2. تقديم نماذج رائدة في مجالها مع أداء قريب قدر الإمكان من النماذج الأصلية: + + - نقدم مثالًا واحدًا على الأقل لكل بنية تقوم بإعادة إنتاج نتيجة مقدمة من المؤلفين الرسميين + لتلك البنية. + - عادةً ما تكون الشفرة قريبة قدر الإمكان من قاعدة الشفرة الأصلية، مما يعني أن بعض شفرة PyTorch قد لا تكون + "بأسلوب PyTorch" كما يمكن أن تكون نتيجة لكونها شفرة TensorFlow محولة والعكس صحيح. + +بعض الأهداف الأخرى: + +- عرض داخليات النماذج بشكل متسق قدر الإمكان: + + - نمنح حق الوصول، باستخدام واجهة برمجة تطبيقات واحدة، إلى جميع الحالات المخفية وأوزان الاهتمام. + - تم توحيد فئات ما قبل المعالجة وواجهات برمجة التطبيقات الأساسية للنموذج لتسهيل التبديل بين النماذج. + +- دمج مجموعة مختارة ذاتيًا من الأدوات الواعدة لضبط هذه النماذج ودراستها: + + - طريقة بسيطة ومتسقة لإضافة رموز جديدة إلى المعجم والمغلفات لضبط النماذج الدقيق. + - طرق بسيطة لتنميق رؤوس المحول وإزالتها. +- طريقة بسيطة ومتسقة لإضافة رموز جديدة إلى المعجم والمغلفات لضبط النماذج الدقيق. + - طرق بسيطة لتنميق رؤوس المحول وإزالتها. + +- التبديل بسهولة بين PyTorch و TensorFlow 2.0 و Flax، مما يسمح بالتدريب باستخدام إطار واحد والاستدلال باستخدام إطار آخر. + +## المفاهيم الرئيسية + +تم بناء المكتبة حول ثلاثة أنواع من الفئات لكل نموذج: + +- **فئات النماذج** يمكن أن تكون نماذج PyTorch ([torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module))، أو نماذج Keras ([tf.keras.Model](https://www.tensorflow.org/api_docs/python/tf/keras/Model))، أو نماذج JAX/Flax ([flax.linen.Module](https://flax.readthedocs.io/en/latest/api_reference/flax.linen/module.html)) التي تعمل مع الأوزان المُدربة مسبقًا المقدمة في المكتبة. +- **فئات التكوين** تخزن معلمات التهيئة المطلوبة لبناء نموذج (مثل عدد الطبقات والحجم المخفي). أنت لست مضطرًا دائمًا إلى إنشاء مثيل لهذه الفئات بنفسك. على وجه الخصوص، إذا كنت تستخدم نموذجًا مُدربًا مسبقًا دون أي تعديل، فإن إنشاء النموذج سيهتم تلقائيًا بتهيئة التكوين (والذي يعد جزءًا من النموذج). +- **فئات ما قبل المعالجة** تحويل البيانات الخام إلى تنسيق مقبول من قبل النموذج. يقوم [المعالج](main_classes/tokenizer) بتخزين المعجم لكل نموذج ويقدم طرقًا لتشفير وفك تشفير السلاسل في قائمة من مؤشرات تضمين الرموز ليتم إطعامها للنموذج. تقوم [معالجات الصور](main_classes/image_processor) بمعالجة إدخالات الرؤية، وتقوم [مستخلصات الميزات](main_classes/feature_extractor) بمعالجة إدخالات الصوت، ويقوم [المعالج](main_classes/processors) بمعالجة الإدخالات متعددة الوسائط. + +يمكن تهيئة جميع هذه الفئات من مثيلات مُدربة مسبقًا، وحفظها محليًا، ومشاركتها على Hub باستخدام ثلاث طرق: + +- تسمح لك `from_pretrained()` بتهيئة نموذج وفئة تكوين وفئة ما قبل المعالجة من إصدار مُدرب مسبقًا إما + يتم توفيره بواسطة المكتبة نفسها (يمكن العثور على النماذج المدعومة على [Model Hub](https://huggingface.co/models)) أو + مخزن محليًا (أو على خادم) بواسطة المستخدم. +- تسمح لك `save_pretrained()` بحفظ نموذج وفئة تكوين وفئة ما قبل المعالجة محليًا بحيث يمكن إعادة تحميله باستخدام + `from_pretrained()`. +- تسمح لك `push_to_hub()` بمشاركة نموذج وفئة تكوين وفئة ما قبل المعالجة على Hub، بحيث يمكن الوصول إليها بسهولة من قبل الجميع. \ No newline at end of file From 5962f1442674def3e64869ba534eff01308f13f9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:47 +0300 Subject: [PATCH 032/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/pipeline=5Fwebserver.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/pipeline_webserver.md | 124 +++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/source/ar/pipeline_webserver.md diff --git a/docs/source/ar/pipeline_webserver.md b/docs/source/ar/pipeline_webserver.md new file mode 100644 index 00000000000000..154331bf39c3d0 --- /dev/null +++ b/docs/source/ar/pipeline_webserver.md @@ -0,0 +1,124 @@ +# استخدام خطوط الأنابيب لخادم ويب + + + +إن إنشاء محرك استدلال موضوع معقد، وقد يعتمد "أفضل" حل على مساحة المشكلة لديك. هل أنت على وحدة المعالجة المركزية أو وحدة معالجة الرسومات؟ هل تريد أدنى مستوى من التأخير، أو أعلى مستوى من الإنتاجية، أو دعم العديد من النماذج، أو فقط تحسين نموذج واحد محدد؟ هناك العديد من الطرق لتناول هذا الموضوع، لذا فإن ما سنقدمه هو إعداد افتراضي جيد للبدء، ولكنه قد لا يكون الحل الأمثل بالنسبة لك. + + + +الشيء الرئيسي الذي يجب فهمه هو أننا يمكن أن نستخدم مؤشرًا، تمامًا كما تفعل [على مجموعة بيانات](pipeline_tutorial#using-pipelines-on-a-dataset)، نظرًا لأن خادم الويب هو أساسًا نظام ينتظر الطلبات ويعالجها عند استلامها. + +عادةً ما تكون خوادم الويب متعددة الإرسال (متعددة الخيوط، غير متزامنة، إلخ) للتعامل مع الطلبات المختلفة بشكل متزامن. من ناحية أخرى، فإن خطوط الأنابيب (وبشكل رئيسي النماذج الأساسية) ليست رائعة حقًا للتوازي؛ حيث تستهلك الكثير من ذاكرة الوصول العشوائي، لذا من الأفضل منحها جميع الموارد المتاحة عندما تعمل أو أنها مهمة مكثفة الحساب. + +سنحل ذلك من خلال جعل خادم الويب يتعامل مع الحمل الخفيف لاستقبال الطلبات وإرسالها، ووجود خيط واحد للتعامل مع العمل الفعلي. سيستخدم هذا المثال `starlette`. إطار العمل الفعلي ليس مهمًا حقًا، ولكن قد يتعين عليك ضبط الكود أو تغييره إذا كنت تستخدم إطار عمل آخر لتحقيق نفس التأثير. + +أنشئ `server.py`: + +```py +from starlette.applications import Starlette +from starlette.responses import JSONResponse +from starlette.routing import Route +from transformers import pipeline +import asyncio + + +async def homepage(request): + payload = await request.body() + string = payload.decode("utf-8") + response_q = asyncio.Queue() + await request.app.model_queue.put((string, response_q)) + output = await response_q.get() + return JSONResponse(output) + + +async def server_loop(q): + pipe = pipeline(model="google-bert/bert-base-uncased") + while True: + (string, response_q) = await q.get() + out = pipe(string) + await response_q.put(out) + + +app = Starlette( + routes=[ + Route("/", homepage, methods=["POST"]), + ], +) + + +@app.on_event("startup") +async def startup_event(): + q = asyncio.Queue() + app.model_queue = q + asyncio.create_task(server_loop(q)) +``` + +الآن يمكنك تشغيله باستخدام: + +```bash +uvicorn server:app +``` + +ويمكنك الاستعلام عنه: + +```bash +curl -X POST -d "test [MASK]" http://localhost:8000/ +#[{"score":0.7742936015129089,"token":1012,"token_str":".","sequence":"test."},...] +``` + +وهكذا، لديك الآن فكرة جيدة عن كيفية إنشاء خادم ويب! + +ما هو مهم حقًا هو أننا نحمل النموذج **مرة واحدة** فقط، لذلك لا توجد نسخ من النموذج على خادم الويب. بهذه الطريقة، لا يتم استخدام ذاكرة الوصول العشوائي غير الضرورية. تسمح آلية وضع الطابور بالقيام بأشياء متقدمة مثل ربما تجميع بعض العناصر قبل الاستدلال لاستخدام الدفعات الديناميكية: + + + +تم كتابة عينة الكود أدناه بشكل مقصود مثل كود وهمي للقراءة. لا تقم بتشغيله دون التحقق مما إذا كان منطقيًا لموارد النظام الخاص بك! + + + +```py +(string, rq) = await q.get() +strings = [] +queues = [] +while True: + try: + (string, rq) = await asyncio.wait_for(q.get(), timeout=0.001) # 1ms + except asyncio.exceptions.TimeoutError: + break + strings.append(string) + queues.append(rq) +strings +outs = pipe(strings, batch_size=len(strings)) +for rq, out in zip(queues, outs): + await rq.put(out) +``` + +مرة أخرى، تم تحسين الكود المقترح للقراءة، وليس ليكون أفضل كود. أولاً، لا يوجد حد لحجم الدفعة، والذي عادةً ما لا يكون فكرة عظيمة. بعد ذلك، يتم إعادة تعيين المهلة في كل عملية استرداد للصف، مما يعني أنه قد يتعين عليك الانتظار لفترة أطول بكثير من 1 مللي ثانية قبل تشغيل الاستدلال (تأخير الطلب الأول بهذا القدر). + +سيكون من الأفضل وجود موعد نهائي واحد لمدة 1 مللي ثانية. + +سيظل هذا ينتظر دائمًا لمدة 1 مللي ثانية حتى إذا كان الطابور فارغًا، والذي قد لا يكون الأفضل نظرًا لأنك تريد على الأرجح البدء في إجراء الاستدلال إذا لم يكن هناك شيء في الطابور. ولكن ربما يكون منطقيًا إذا كانت الدفعات مهمة حقًا لحالتك الاستخدام. مرة أخرى، لا يوجد حل واحد الأفضل. + +## بعض الأشياء التي قد ترغب في مراعاتها + +### التحقق من الأخطاء + +هناك الكثير مما يمكن أن يسير على ما يرام في الإنتاج: نفاد الذاكرة، أو نفاد المساحة، أو قد يفشل تحميل النموذج، أو قد يكون الاستعلام خاطئًا، أو قد يكون الاستعلام صحيحًا ولكنه يفشل في التشغيل بسبب إعداد نموذج غير صحيح، وهكذا. + +من الجيد بشكل عام إذا قام الخادم بإخراج الأخطاء إلى المستخدم، لذا فإن إضافة الكثير من عبارات `try..except` لعرض هذه الأخطاء فكرة جيدة. ولكن ضع في اعتبارك أنه قد يكون أيضًا خطرًا أمنيًا للكشف عن جميع هذه الأخطاء اعتمادًا على سياق الأمان الخاص بك. + +### كسر الدائرة + +عادةً ما تبدو خوادم الويب أفضل عندما تقوم بكسر الدائرة. وهذا يعني أنها تعيد أخطاء صحيحة عندما تكون مثقلة بالأعباء بدلاً من الانتظار إلى أجل غير مسمى للاستعلام. قم بإرجاع خطأ 503 بدلاً من الانتظار لفترة طويلة جدًا أو 504 بعد فترة طويلة. + +من السهل نسبيًا تنفيذ ذلك في الكود المقترح نظرًا لوجود طابور واحد. إن النظر في حجم الطابور هو طريقة أساسية لبدء إعادة الأخطاء قبل فشل خادم الويب بسبب التحميل الزائد. + +### حظر الخيط الرئيسي + +حاليًا، PyTorch غير مدرك للأساليب غير المتزامنة، وسيؤدي الحساب إلى حظر الخيط الرئيسي أثناء تشغيله. وهذا يعني أنه سيكون من الأفضل إذا تم إجبار PyTorch على التشغيل على خيط/عملية خاصة به. لم يتم ذلك هنا لأن الكود أكثر تعقيدًا (في الغالب لأن الخيوط والأساليب غير المتزامنة والطوابير لا تتوافق معًا). ولكن في النهاية، فإنه يؤدي نفس الوظيفة. + +سيكون هذا مهمًا إذا كان الاستدلال للعناصر الفردية طويلًا (> 1 ثانية) لأنه في هذه الحالة، يجب أن ينتظر كل استعلام أثناء الاستدلال لمدة 1 ثانية قبل حتى تلقي خطأ. + +### الدفعات الديناميكية + +بشكل عام، قد لا يكون التجميع تحسينًا بالمقارنة مع تمرير عنصر واحد في كل مرة (راجع [تفاصيل الدفعات](./main_classes/pipelines#pipeline-batching) لمزيد من المعلومات). ولكنه يمكن أن يكون فعالًا جدًا عند استخدامه في الإعداد الصحيح. في واجهة برمجة التطبيقات، لا يوجد تجميع ديناميكي بشكل افتراضي (الكثير من الفرص لتباطؤ). ولكن بالنسبة لاستدلال BLOOM - وهو نموذج كبير جدًا - فإن التجميع الديناميكي **أساسي** لتوفير تجربة جيدة للجميع. \ No newline at end of file From 550f5155da63e8909eaf59d273efd6e7780482fe Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:49 +0300 Subject: [PATCH 033/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Finfer=5Fgpu=5Fone.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_infer_gpu_one.md | 454 +++++++++++++++++++++++++++ 1 file changed, 454 insertions(+) create mode 100644 docs/source/ar/perf_infer_gpu_one.md diff --git a/docs/source/ar/perf_infer_gpu_one.md b/docs/source/ar/perf_infer_gpu_one.md new file mode 100644 index 00000000000000..82e5dc03733fb3 --- /dev/null +++ b/docs/source/ar/perf_infer_gpu_one.md @@ -0,0 +1,454 @@ +# الاستنتاج باستخدام وحدة معالجة الرسومات (GPU) + +تعد وحدات معالجة الرسومات (GPU) الخيار القياسي لأجهزة التعلم الآلي، على عكس وحدات المعالجة المركزية (CPU)، لأنها مُحَسَّنة لعرض نطاق الذاكرة والتوازي. ولمواكبة الأحجام الأكبر للنماذج الحديثة أو لتشغيل هذه النماذج الكبيرة على الأجهزة الموجودة والقديمة، هناك العديد من التحسينات التي يمكنك استخدامها لتسريع الاستنتاج باستخدام وحدة معالجة الرسومات. في هذا الدليل، ستتعلم كيفية استخدام FlashAttention-2 (آلية اهتمام أكثر كفاءة في استخدام الذاكرة)، وBetterTransformer (مسار سريع للتنفيذ الأصلي في PyTorch)، وbitsandbytes لضبط نموذجك إلى دقة أقل. وأخيرًا، تعلم كيفية استخدام 🤗 Optimum لتسريع الاستدلال باستخدام ONNX Runtime على وحدات معالجة الرسومات Nvidia وAMD. + + + +تنطبق معظم التحسينات الموضحة هنا أيضًا على إعدادات وحدات معالجة الرسومات المتعددة! + + + +## FlashAttention-2 + + + +FlashAttention-2 تجريبي وقد يتغير بشكل كبير في الإصدارات المستقبلية. + + + +[FlashAttention-2](https://huggingface.co/papers/2205.14135) هو تنفيذ أسرع وأكثر كفاءة لآلية الاهتمام القياسية التي يمكن أن تسرع الاستدلال بشكل كبير من خلال: + +1. موازاة حساب الاهتمام بشكل إضافي عبر طول التسلسل +2. تقسيم العمل بين خيوط وحدة معالجة الرسومات لتقليل التواصل وقراءات/كتابات الذاكرة المشتركة بينها +تدعم FlashAttention-2 حاليًا البنى المعمارية التالية: +* [Bark](https://huggingface.co/docs/transformers/model_doc/bark#transformers.BarkModel) +* [Bart](https://huggingface.co/docs/transformers/model_doc/bart#transformers.BartModel) +* [Chameleon](https://huggingface.co/docs/transformers/model_doc/chameleon#transformers.Chameleon) +* [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPModel) +* [Cohere](https://huggingface.co/docs/transformers/model_doc/cohere#transformers.CohereModel) +* [Dbrx](https://huggingface.co/docs/transformers/model_doc/dbrx#transformers.DbrxModel) +* [DistilBert](https://huggingface.co/docs/transformers/model_doc/distilbert#transformers.DistilBertModel) +* [Gemma](https://huggingface.co/docs/transformers/model_doc/gemma#transformers.GemmaModel) +* [Gemma2](https://huggingface.co/docs/transformers/model_doc/gemma2#transformers.Gemma2Model) +* [GPT2](https://huggingface.co/docs/transformers/model_doc/gpt2) +* [GPTBigCode](https://huggingface.co/docs/transformers/model_doc/gpt_bigcode#transformers.GPTBigCodeModel) +* [GPTNeo](https://huggingface.co/docs/transformers/model_doc/gpt_neo#transformers.GPTNeoModel) +* [GPTNeoX](https://huggingface.co/docs/transformers/model_doc/gpt_neox#transformers.GPTNeoXModel) +* [GPT-J](https://huggingface.co/docs/transformers/model_doc/gptj#transformers.GPTJModel) +* [Idefics2](https://huggingface.co/docs/transformers/model_doc/idefics2#transformers.Idefics2Model) +* [Falcon](https://huggingface.co/docs/transformers/model_doc/falcon#transformers.FalconModel) +* [JetMoe](https://huggingface.co/docs/transformers/model_doc/jetmoe#transformers.JetMoeModel) +* [Jamba](https://huggingface.co/docs/transformers/model_doc/jamba#transformers.JambaModel) +* [Llama](https://huggingface.co/docs/transformers/model_doc/llama#transformers.LlamaModel) +* [Llava](https://huggingface.co/docs/transformers/model_doc/llava) +* [Llava-NeXT](https://huggingface.co/docs/transformers/model_doc/llava_next) +* [Llava-NeXT-Video](https://huggingface.co/docs/transformers/model_doc/llava_next_video) +* [VipLlava](https://huggingface.co/docs/transformers/model_doc/vipllava) +* [VideoLlava](https://huggingface.co/docs/transformers/model_doc/video_llava) +* [M2M100](https://huggingface.co/docs/transformers/model_doc/m2m_100) +* [MBart](https://huggingface.co/docs/transformers/model_doc/mbart#transformers.MBartModel) +* [Mistral](https://huggingface.co/docs/transformers/model_doc/mistral#transformers.MistralModel) +* [Mixtral](https://huggingface.co/docs/transformers/model_doc/mixtral#transformers.MixtralModel) +* [Musicgen](https://huggingface.co/docs/transformers/model_doc/musicgen#transformers.MusicgenModel) +* [MusicGen Melody](https://huggingface.co/docs/transformers/model_doc/musicgen_melody#transformers.MusicgenMelodyModel) +* [NLLB](https://huggingface.co/docs/transformers/model_doc/nllb) +* [OLMo](https://huggingface.co/docs/transformers/model_doc/olmo#transformers.OlmoModel) +* [OPT](https://huggingface.co/docs/transformers/model_doc/opt#transformers.OPTModel) +* [Phi](https://huggingface.co/docs/transformers/model_doc/phi#transformers.PhiModel) +* [Phi3](https://huggingface.co/docs/transformers/model_doc/phi3#transformers.Phi3Model) +* [SigLIP](https://huggingface.co/docs/transformers/model_doc/siglip) +* [StableLm](https://huggingface.co/docs/transformers/model_doc/stablelm#transformers.StableLmModel) +* [Starcoder2](https://huggingface.co/docs/transformers/model_doc/starcoder2#transformers.Starcoder2Model) +* [Qwen2](https://huggingface.co/docs/transformers/model_doc/qwen2#transformers.Qwen2Model) +* [Qwen2MoE](https://huggingface.co/docs/transformers/model_doc/qwen2_moe#transformers.Qwen2MoeModel) +* [Whisper](https://huggingface.co/docs/transformers/model_doc/whisper#transformers.WhisperModel) +* [Wav2Vec2](https://huggingface.co/docs/transformers/model_doc/wav2vec2#transformers.Wav2Vec2Model) +* [Whisper](https://huggingface.co/docs/transformers/model_doc/whisper#transformers.WhisperModel) +* [Wav2Vec2](https://huggingface.co/docs/transformers/model_doc/wav2vec2#transformers.Wav2Vec2Model) +* [Hubert](https://huggingface.co/docs/transformers/model_doc/hubert#transformers.HubertModel) +* [data2vec_audio](https://huggingface.co/docs/transformers/main/en/model_doc/data2vec#transformers.Data2VecAudioModel) +* [Sew](https://huggingface.co/docs/transformers/main/en/model_doc/sew#transformers.SEWModel) +* [UniSpeech](https://huggingface.co/docs/transformers/v4.39.3/en/model_doc/unispeech#transformers.UniSpeechModel) +* [unispeech_sat](https://huggingface.co/docs/transformers/v4.39.3/en/model_doc/unispeech-sat#transformers.UniSpeechSatModel) +يمكنك طلب إضافة دعم FlashAttention-2 لنموذج آخر عن طريق فتح مشكلة أو طلب سحب على GitHub. + +قبل البدء، تأكد من تثبيت FlashAttention-2. + + + + +```bash +pip install flash-attn --no-build-isolation +``` + +نوصي بشدة بالرجوع إلى [تعليمات التثبيت](https://github.com/Dao-AILab/flash-attention?tab=readme-ov-file#installation-and-features) المفصلة لمعرفة المزيد حول الأجهزة المدعومة وأنواع البيانات! + + + + +يتم دعم FlashAttention-2 أيضًا على وحدات معالجة الرسومات AMD، ويقتصر الدعم الحالي على **Instinct MI210**، و**Instinct MI250**، و**Instinct MI300**. نوصي بشدة باستخدام هذا [Dockerfile](https://github.com/huggingface/optimum-amd/tree/main/docker/transformers-pytorch-amd-gpu-flash/Dockerfile) لاستخدام FlashAttention-2 على وحدات معالجة الرسومات AMD. + + + + +لتمكين FlashAttention-2، مرر وسيط `attn_implementation="flash_attention_2"` إلى [`~AutoModelForCausalLM.from_pretrained`]: + +```python +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer, LlamaForCausalLM + +model_id = "tiiuae/falcon-7b" +tokenizer = AutoTokenizer.from_pretrained(model_id) + +model = AutoModelForCausalLM.from_pretrained( + model_id, + torch_dtype=torch.bfloat16, + attn_implementation="flash_attention_2", +) +``` + + + +يمكن استخدام FlashAttention-2 فقط عندما يكون نوع نموذج "fp16" أو "bf16". تأكد من تحويل نموذجك إلى النوع المناسب وتحميله على جهاز مدعوم قبل استخدام FlashAttention-2. + +
+ +يمكنك أيضًا تعيين `use_flash_attention_2=True` لتمكين FlashAttention-2 ولكنه مهمل لصالح `attn_implementation="flash_attention_2"`. + +
+ +يمكن الجمع بين FlashAttention-2 وتقنيات التحسين الأخرى مثل الضبط للحصول على مزيد من تسريع الاستدلال. على سبيل المثال، يمكنك الجمع بين FlashAttention-2 والضبط 8-بت أو 4-بت: + +```py +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer, LlamaForCausalLM + +model_id = "tiiuae/falcon-7b" +tokenizer = AutoTokenizer.from_pretrained(model_id) + +# تحميل في 8 بت +model = AutoModelForCausalLM.from_pretrained( + model_id, + load_in_8bit=True, + attn_implementation="flash_attention_2", +) + +# تحميل في 4 بت +model = AutoModelForCausalLM.from_pretrained( + model_id, + load_in_4bit=True, + attn_ excentricité="flash_attention_2"، +) +``` + +### تسريع الأداء المتوقع + +يمكنك الاستفادة من تسريع الأداء الكبير للاستدلال، خاصة بالنسبة للمدخلات ذات التسلسلات الطويلة. ومع ذلك، نظرًا لأن FlashAttention-2 لا يدعم حساب درجات الاهتمام مع رموز التعبئة، يجب عليك يدويًا تعبئة/إلغاء تعبئة درجات الاهتمام للاستدلال المجمع عندما يحتوي التسلسل على رموز تعبئة. يؤدي هذا إلى تباطؤ كبير في الأجيال المجمعة مع رموز التعبئة. + +لتجاوز ذلك، يجب عليك استخدام FlashAttention-2 بدون رموز التعبئة في التسلسل أثناء التدريب (عن طريق تعبئة مجموعة بيانات أو [دمج التسلسلات](https://github.com/huggingface/transformers/blob/main/examples/pytorch/language-modeling/run_clm.py#L516) حتى الوصول إلى طول التسلسل الأقصى). + +بالنسبة لمرور الإرسال الأمامي الفردي على [tiiuae/falcon-7b](https://hf.co/tiiuae/falcon-7b) بطول تسلسل 4096 وأحجام دفعات مختلفة بدون رموز التعبئة، يكون تسريع الأداء المتوقع هو: + +
+ +
+ +بالنسبة لمرور الإرسال الأمامي الفردي على [meta-llama/Llama-7b-hf](https://hf.co/meta-llama/Llama-7b-hf) بطول تسلسل 4096 وأحجام دفعات مختلفة بدون رموز التعبئة، يكون تسريع الأداء المتوقع هو: + +
+ +
+
+ +
+ +بالنسبة للتسلسلات التي تحتوي على رموز التعبئة (توليد باستخدام رموز التعبئة)، يجب عليك إلغاء تعبئة/تعبئة تسلسلات الإدخال لحساب درجات الاهتمام بشكل صحيح. باستخدام طول تسلسل صغير نسبيًا، يؤدي مرور الإرسال الأمامي الفردي إلى زيادة العبء مما يؤدي إلى تسريع الأداء البسيط (في المثال أدناه، يتم ملء 30% من الإدخال برموز التعبئة): + +
+ +
+ +ولكن بالنسبة لأطوال التسلسل الأكبر، يمكنك توقع فوائد تسريع الأداء حتى أكثر من ذلك: + + + +FlashAttention أكثر كفاءة في استخدام الذاكرة، مما يعني أنه يمكنك التدريب على أطوال تسلسل أكبر دون مواجهة مشكلات نفاد الذاكرة. يمكنك تقليل استخدام الذاكرة بنسبة تصل إلى 20 مرة لأطوال التسلسل الأكبر. الق نظرة على مستودع [flash-attention](https://github.com/Dao-AILab/flash-attention) لمزيد من التفاصيل. + + + +
+ +
+ +## PyTorch scaled dot product attention + +يمكن لـ PyTorch's [`torch.nn.functional.scaled_dot_product_attention`](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention.html) (SDPA) أيضًا استدعاء FlashAttention ونواة الاهتمام الكفؤة في استخدام الذاكرة تحت الغطاء. يجري حاليًا إضافة دعم SDPA بشكل أصلي في Transformers ويتم استخدامه بشكل افتراضي لـ `torch>=2.1.1` عندما يكون التنفيذ متاحًا. يمكنك أيضًا تعيين `attn_implementation="sdpa"` في `from_pretrained()` لطلب استخدام SDPA بشكل صريح. +في الوقت الحالي، يدعم Transformers الاستدلال والتدريب SDPA للبنى المعمارية التالية: +* [Audio Spectrogram Transformer](https://huggingface.co/docs/transformers/model_doc/audio-spectrogram-transformer#transformers.ASTModel) +* [Bart](https://huggingface.co/docs/transformers/model_doc/bart#transformers.BartModel) +* [Bert](https://huggingface.co/docs/transformers/model_doc/bert#transformers.BertModel) +* [Chameleon](https://huggingface.co/docs/transformers/model_doc/chameleon#transformers.Chameleon) +* [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPModel) +* [Cohere](https://huggingface.co/docs/transformers/model_doc/cohere#transformers.CohereModel) +* [Dbrx](https://huggingface.co/docs/transformers/model_doc/dbrx#transformers.DbrxModel) +* [DeiT](https://huggingface.co/docs/transformers/model_doc/deit#transformers.DeiTModel) +* [Dpr](https://huggingface.co/docs/transformers/model_doc/dpr#transformers.DprReader) +* [Falcon](https://huggingface.co/docs/transformers/model_doc/falcon#transformers.FalconModel) +* [Gemma](https://huggingface.co/docs/transformers/model_doc/gemma#transformers.GemmaModel) +* [Gemma2](https://huggingface.co/docs/transformers/model_doc/gemma2#transformers.Gemma2Model) +* [GPT2](https://huggingface.co/docs/transformers/model_doc/gpt2) +* [GPTBigCode](https://huggingface.co/docs/transformers/model_doc/gpt_bigcode#transformers.GPTBigCodeModel) +* [GPTNeoX](https://huggingface.co/docs/transformers/model_doc/gpt_neox#transformers.GPTNeoXModel) +* [JetMoe](https://huggingface.co/docs/transformers/model_doc/jetmoe#transformers.JetMoeModel) +* [Jamba](https://huggingface.co/docs/transformers/model_doc/jamba#transformers.JambaModel) +* [Llama](https://huggingface.co/docs/transformers/model_doc/llama#transformers.LlamaModel) +* [OLMo](https://huggingface.co/docs/transformers/model_doc/olmo#transformers.OlmoModel) +* [PaliGemma](https://huggingface.co/docs/transformers/model_doc/paligemma#transformers.PaliGemmaForConditionalGeneration) +* [Phi](https://huggingface.co/docs/transformers/model_doc/phi#transformers.PhiModel) +* [Idefics](https://huggingface.co/docs/transformers/model_doc/idefics#transformers.IdeficsModel) +* [Whisper](https://huggingface.co/docs/transformers/model_doc/whisper#transformers.WhisperModel) +* [Mistral](https://huggingface.co/docs/transformers/model_doc/mistral#transformers.MistralModel) +* [Mixtral](https://huggingface.co/docs/transformers/model_doc/mixtral#transformers.MixtralModel) +* [StableLm](https://huggingface.co/docs/transformers/model_doc/stablelm#transformers.StableLmModel) +* [Starcoder2](https://huggingface.co/docs/transformers/model_doc/starcoder2#transformers.Starcoder2Model) +* [Qwen2](https://huggingface.co/docs/transformers/model_doc/qwen2#transformers.Qwen2Model) +* [Qwen2MoE](https://huggingface.co/docs/transformers/model_doc/qwen2_moe#transformers.Qwen2MoeModel) +* [Musicgen](https://huggingface.co/docs/transformers/model_doc/musicgen#transformers.MusicgenModel) +* [MusicGen Melody](https://huggingface.co/docs/transformers/model_doc/musicgen_melody#transformers.MusicgenMelodyModel) +* [ViT](https://huggingface.co/docs/transformers/model_doc/vit#transformers.ViTModel) +* [ViTHybrid](https://huggingface.co/docs/transformers/model_doc/vit_hybrid#transformers.ViTHybridModel) +* [ViTMAE](https://huggingface.co/docs/transformers/model_doc/vit_mae#transformers.ViTMAEModel) +* [ViTMSN](https://huggingface.co/docs/transformers/model_doc/vit_msn#transformers.ViTMSNModel) +* [VideoMAE](https://huggingface.co/docs/transformers/model_doc/videomae#transformers.VideoMAEModell) +* [wav2vec2](https://huggingface.co/docs/transformers/model_doc/wav2vec2#transformers.Wav2Vec2Model) +* [Hubert](https://huggingface.co/docs/transformers/model_doc/hubert#transformers.HubertModel) +* [data2vec_audio](https://huggingface.co/docs/transformers/main/en/model_doc/data2vec#transformers.Data2VecAudioModel) +* [SigLIP](https://huggingface.co/docs/transformers/model_doc/siglip) +* [Sew](https://huggingface.co/docs/transformers/main/en/model_doc/sew#transformers.SEWModel) +* [UniSpeech](https://huggingface.co/docs/transformers/v4.39.3/en/model_doc/unispeech#transformers.UniSpeechModel) +* [unispeech_sat](https://huggingface.co/docs/transformers/v4.39.3/en/model_doc/unispeech-sat#transformers.UniSpeechSatModel) +* [YOLOS](https://huggingface.co/docs/transformers/model_doc/yolos#transformers.YolosModel) + + + + + +يمكن استخدام FlashAttention فقط للنماذج ذات النوع "fp16" أو "bf16" torch، لذا تأكد من تحويل نموذجك إلى النوع المناسب أولاً. يمكن لخلفية الاهتمام الفعالة للذاكرة التعامل مع نماذج "fp32". + + + + + +لا تدعم SDPA مجموعات معينة من معلمات الاهتمام، مثل "head_mask" و "output_attentions=True". +في هذه الحالة، يجب أن تشاهد رسالة تحذير وسنقوم بالرجوع إلى التنفيذ (الأبطأ). + + + +بشكل افتراضي، تقوم SDPA بتحديد نواة الأداء الأكثر كفاءة المتاحة، ولكن يمكنك التحقق مما إذا كانت الخلفية متاحة في إعداد معين (الأجهزة، حجم المشكلة) باستخدام ["torch.backends.cuda.sdp_kernel"](https://pytorch.org/docs/master/backends.html#torch.backends.cuda.sdp_kernel) كمدير سياق: + +```diff +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m") +model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m", torch_dtype=torch.float16).to("cuda") + +input_text = "Hello my dog is cute and" +inputs = tokenizer(input_text, return_tensors="pt").to("cuda") + ++ with torch.backends.cuda.sdp_kernel(enable_flash=True, enable_math=False, enable_mem_efficient=False): + outputs = model.generate(**inputs) + +print(tokenizer.decode(outputs[0], skip_special_tokens=True)) +``` + +إذا رأيت خطأ مع تتبع المكدس أدناه، فحاول استخدام الإصدار الليلي من PyTorch الذي قد يكون له تغطية أوسع لـ FlashAttention: + +```bash +RuntimeError: No available kernel. Aborting execution. + +# install PyTorch nightly +pip3 install -U --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu118 +``` + +## BetterTransformer + + + +يتم نقل بعض ميزات BetterTransformer إلى أعلى مستوى في المحولات مع الدعم الافتراضي لـ native `torch.nn.scaled_dot_product_attention`. لا يزال لدى BetterTransformer تغطية أوسع من تكامل SDPA في المحولات، ولكن يمكنك توقع المزيد والمزيد من الهندسات المعمارية التي تدعم SDPA بشكل أصلي في المحولات. + + + + + +تحقق من معاييرنا مع BetterTransformer وscaled dot product attention في [التسريع والوفورات في الذاكرة خارج الصندوق لنماذج فك تشفير 🤗 مع PyTorch 2.0](https://pytorch.org/blog/out-of-the-box-acceleration/) وتعرف على المزيد حول تنفيذ fastpath في [BetterTransformer](https://medium.com/pytorch/bettertransformer-out-of-the-box-performance-for-huggingface-transformers-3fbe27d50ab2) منشور المدونة. + + + +BetterTransformer يسرع الاستدلال باستخدام تنفيذه المتخصص في PyTorch لمهام المحول. هناك تحسينان في تنفيذ fastpath: + +1. الانصهار، الذي يجمع بين عدة عمليات متتالية في "kernel" واحد لتقليل عدد خطوات الحساب +2. تخطي التفرقة الطبيعية لرموز التعبئة لتجنب الحساب غير الضروري مع المصفوفات المضمنة + +BetterTransformer يحول أيضًا جميع عمليات الاهتمام لاستخدام [scaled dot product attention (SDPA)](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention)، الأكثر كفاءة في الذاكرة، ويستدعي نوى محسنة مثل [FlashAttention](https://huggingface.co/papers/2205.14135) تحت غطاء المحرك. + +قبل أن تبدأ، تأكد من أن لديك 🤗 Optimum [مثبت](https://huggingface.co/docs/optimum/installation). + +بعد ذلك، يمكنك تمكين BetterTransformer باستخدام طريقة [`PreTrainedModel.to_bettertransformer`](): + +```python +model = model.to_bettertransformer() +``` + +يمكنك إرجاع نموذج المحولات الأصلي باستخدام طريقة [`~PreTrainedModel.reverse_bettertransformer`](): يجب عليك استخدام هذا قبل حفظ نموذجك لاستخدام نمذجة المحولات الأساسية: + +```py +model = model.reverse_bettertransformer() +model.save_pretrained ("model_saved") +``` + +## bitsandbytes + +bitsandbytes هي مكتبة تكميم تتضمن دعمًا لـ 4 بت و8 بت. يقلل التكميم حجم نموذجك مقارنة بإصدار الدقة الكاملة الأصلي، مما يجعله أسهل في وضع نماذج كبيرة على وحدات معالجة الرسومات (GPUs) ذات الذاكرة المحدودة. + +تأكد من أن لديك bitsandbytes و 🤗 Accelerate مثبت: + +```bash +# هذه الإصدارات تدعم 8 بت و4 بت +pip install bitsandbytes>=0.39.0 accelerate>=0.20.0 + +# تثبيت المحولات +pip install transformers +``` + +### 4 بت + +لتحميل نموذج في 4 بت للاستدلال، استخدم معلمة "load_in_4bit". وسيط "device_map" اختياري، ولكن يُنصح بتعيينه على "auto" للسماح لـ 🤗 Accelerate بتخصيص النموذج تلقائيًا وبكفاءة بالنظر إلى الموارد المتاحة في البيئة. + +```py +from transformers import AutoModelForCausalLM + +model_name = "bigscience/bloom-2b5" +model_4bit = AutoModelForCausalLM.from_pretrained(model_name، device_map="auto"، load_in_4bit=True) +``` + +لتحميل نموذج في 4 بت للاستدلال باستخدام وحدات معالجة الرسومات (GPUs) متعددة، يمكنك التحكم في مقدار ذاكرة GPU التي تريد تخصيصها لكل GPU. على سبيل المثال، لتوزيع 600 ميجابايت من الذاكرة إلى وحدة معالجة الرسومات الأولى و1 جيجابايت من الذاكرة إلى وحدة معالجة الرسومات الثانية: + +```py +max_memory_mapping = {0: "600MB"، 1: "1GB"} +model_name = "bigscience/bloom-3b" +model_4bit = AutoModelForCausalLM.from_pretrained( + model_name، device_map="auto"، load_in_4bit=True، max_memory=max_memory_mapping +) +``` + +### 8 بت + + + +إذا كنت فضوليًا ومهتمًا بمعرفة المزيد عن المفاهيم الأساسية وراء التكميم 8 بت، فاقرأ [Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using Hugging Face Transformers, Accelerate and bitsandbytes](https://huggingface.co/blog/hf-bitsandbytes-integration) منشور المدونة. + + + +لتحميل نموذج في 8 بت للاستدلال، استخدم معلمة "load_in_8bit". وسيط "device_map" اختياري، ولكن يُنصح بتعيينه على "auto" للسماح لـ 🤗 Accelerate بتخصيص النموذج تلقائيًا وبكفاءة بالنظر إلى الموارد المتاحة في البيئة: + +```py +from transformers import AutoModelForCausalLM، BitsAndBytesConfig + +model_name = "bigscience/bloom-2b5" +model_8bit = AutoModelForCausalLM.from_pretrained(model_name، quantization_config=BitsAndBytesConfig (load_in_8bit=True)) +``` + +إذا كنت تقوم بتحميل نموذج في 8 بت لتوليد النص، فيجب عليك استخدام طريقة [`~transformers.GenerationMixin.generate`] بدلاً من دالة ["Pipeline"] التي لا يتم تحسينها لنماذج 8 بت وستكون أبطأ. لا تدعم بعض استراتيجيات أخذ العينات، مثل أخذ العينات النووية، بواسطة ["Pipeline"] لنماذج 8 بت. يجب عليك أيضًا وضع جميع الإدخالات على نفس الجهاز مثل النموذج: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +model_name = "bigscience/bloom-2b5" +tokenizer = AutoTokenizer.from_pretrained(model_name) +model_8bit = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=BitsAndBytesConfig(load_in_8bit=True)) + +prompt = "Hello, my llama is cute" +inputs = tokenizer(prompt, return_tensors="pt").to("cuda") +generated_ids = model.generate(**inputs) +outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +``` +لتحميل نموذج في 4 بت للاستنتاج باستخدام عدة وحدات معالجة رسومية (GPUs)، يمكنك التحكم في مقدار ذاكرة الوصول العشوائي (RAM) التي تريد تخصيصها لكل وحدة معالجة رسومية (GPU). على سبيل المثال، لتوزيع 1 جيجابايت من الذاكرة إلى وحدة المعالجة المركزية الأولى و2 جيجابايت من الذاكرة إلى وحدة المعالجة المركزية الثانية: + +```py +max_memory_mapping = {0: "1GB", 1: "2GB"} +model_name = "bigscience/bloom-3b" +model_8bit = AutoModelForCausalLM.from_pretrained( + model_name, device_map="auto", load_in_8bit=True, max_memory=max_memory_mapping +) +``` + + + +لا تتردد في تجربة تشغيل نموذج T5 الذي يحتوي على 11 مليار معلمة أو نموذج BLOOM الذي يحتوي على 3 مليارات معلمة للاستنتاج على وحدات معالجة الرسومات (GPUs) من المستوى المجاني في Google Colab! + + + +## 🤗 Optimum + + + +لمعرفة المزيد من التفاصيل حول استخدام ORT مع 🤗 Optimum، راجع دليلي [تسريع الاستنتاج على وحدات معالجة الرسومات (GPUs) من NVIDIA](https://huggingface.co/docs/optimum/onnxruntime/usage_guides/gpu#accelerated-inference-on-nvidia-gpus) و[تسريع الاستنتاج على وحدات معالجة الرسومات (GPUs) من AMD](https://huggingface.co/docs/optimum/onnxruntime/usage_guides/amdgpu#accelerated-inference-on-amd-gpus). يقدم هذا القسم فقط مثالًا موجزًا وبسيطًا. + + + +ONNX Runtime (ORT) هو مسرع نموذجي يدعم الاستنتاج المعجل على وحدات معالجة الرسومات (GPUs) من Nvidia، ووحدات معالجة الرسومات (GPUs) من AMD التي تستخدم مجموعة ROCm. يستخدم ORT تقنيات التحسين مثل دمج العمليات الشائعة في عقدة واحدة وطوي الثوابت لخفض عدد الحسابات التي يتم إجراؤها وتسريع الاستنتاج. كما يقوم ORT بوضع العمليات الأكثر كثافة حسابية على وحدة معالجة الرسومات (GPU) والباقي على وحدة المعالجة المركزية (CPU) لتوزيع عبء العمل بين الجهازين بشكل ذكي. + +تدعم مكتبة 🤗 Optimum استخدام ONNX Runtime، والتي يمكن استخدامها في مكتبة 🤗 Transformers. ستحتاج إلى استخدام [`~optimum.onnxruntime.ORTModel`] للمهمة التي تحاول حلها، وتحديد معلمة `provider` التي يمكن تعيينها إما إلى [`CUDAExecutionProvider`] أو [`ROCMExecutionProvider`] أو [`TensorrtExecutionProvider`]. إذا كنت تريد تحميل نموذج لم يتم تصديره بعد إلى ONNX، فيمكنك تعيين `export=True` لتحويل نموذجك أثناء التنقل إلى تنسيق ONNX: + +```py +from optimum.onnxruntime import ORTModelForSequenceClassification + +ort_model = ORTModelForSequenceClassification.from_pretrained( + "distilbert/distilbert-base-uncased-finetuned-sst-2-english", + export=True, + provider="CUDAExecutionProvider", +) +``` + +الآن يمكنك استخدام النموذج للاستنتاج: + +```py +from optimum.pipelines import pipeline +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased-finetuned-sst-2-english") + +pipeline = pipeline(task="text-classification", model=ort_model, tokenizer=tokenizer, device="cuda:0") +result = pipeline("Both the music and visual were astounding, not to mention the actors performance.") +``` + +## الجمع بين التحسينات + +غالبًا ما يكون من الممكن الجمع بين العديد من تقنيات التحسين المذكورة أعلاه للحصول على أفضل أداء استنتاج ممكن لنموذجك. على سبيل المثال، يمكنك تحميل نموذج في 4 بت، ثم تمكين BetterTransformer مع FlashAttention: + +```py +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +# تحميل النموذج في 4 بت +quantization_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_compute_dtype=torch.float16 +) + +tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m") +model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m", quantization_config=quantization_config) + +# تمكين BetterTransformer +model = model.to_bettertransformer() + +input_text = "Hello my dog is cute and" +inputs = tokenizer(input_text, return_tensors="pt").to("cuda") + +# تمكين FlashAttention +with torch.backends.cuda.sdp_kernel(enable_flash=True, enable_math=False, enable_mem_efficient=False): + outputs = model.generate(**inputs) + +print(tokenizer.decode(outputs[0], skip_special_tokens=True)) +``` \ No newline at end of file From db0b0f474af25af6d73d84244cbe6124395a336b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:51 +0300 Subject: [PATCH 034/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/sagemaker.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/sagemaker.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/source/ar/sagemaker.md diff --git a/docs/source/ar/sagemaker.md b/docs/source/ar/sagemaker.md new file mode 100644 index 00000000000000..6bb53816baaaee --- /dev/null +++ b/docs/source/ar/sagemaker.md @@ -0,0 +1,8 @@ +# تشغيل التدريب على Amazon SageMaker + +تم نقل التوثيق إلى [hf.co/docs/sagemaker](https://huggingface.co/docs/sagemaker). وسيتم إزالة هذه الصفحة في الإصدار 5.0 من برنامج Transformers. + +### جدول المحتويات + +- [تدريب نماذج Hugging Face على Amazon SageMaker باستخدام SageMaker Python SDK](https://huggingface.co/docs/sagemaker/train) +- [نشر نماذج Hugging Face على Amazon SageMaker باستخدام SageMaker Python SDK](https://huggingface.co/docs/sagemaker/inference) \ No newline at end of file From eec041ad94e7f13dab7f911e23b9dd7ee894a0da Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:53 +0300 Subject: [PATCH 035/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/serialization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/serialization.md | 171 ++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 docs/source/ar/serialization.md diff --git a/docs/source/ar/serialization.md b/docs/source/ar/serialization.md new file mode 100644 index 00000000000000..07ef4d8f2d3566 --- /dev/null +++ b/docs/source/ar/serialization.md @@ -0,0 +1,171 @@ +# التصدير إلى ONNX + +غالباً ما يتطلب نشر نماذج 🤗 Transformers في بيئات الإنتاج أو يمكن أن يستفيد من تصدير النماذج إلى تنسيق مسلسل يمكن تحميله وتشغيله على أجهزة وبرامج تشغيل متخصصة. + +🤗 Optimum هو امتداد لـ Transformers يمكّن من تصدير النماذج من PyTorch أو TensorFlow إلى تنسيقات مسلسلة مثل ONNX و TFLite من خلال وحدة `exporters` الخاصة بها. يوفر 🤗 Optimum أيضًا مجموعة من أدوات تحسين الأداء لتدريب النماذج وتشغيلها على أجهزة مستهدفة بكفاءة قصوى. + +يوضح هذا الدليل كيفية تصدير نماذج 🤗 Transformers إلى ONNX باستخدام 🤗 Optimum، وللحصول على الدليل الخاص بتصدير النماذج إلى TFLite، يرجى الرجوع إلى صفحة [التصدير إلى TFLite](tflite). + +## التصدير إلى ONNX + +[ONNX (Open Neural Network Exchange)](http://onnx.ai) هو معيار مفتوح يحدد مجموعة مشتركة من المشغلين وتنسيق ملف مشترك لتمثيل نماذج التعلم العميق في مجموعة متنوعة واسعة من الأطر، بما في ذلك PyTorch وTensorFlow. عندما يتم تصدير نموذج إلى تنسيق ONNX، يتم استخدام هذه المشغلات لبناء رسم بياني حسابي (يُطلق عليه غالبًا اسم _تمثيل وسيط_) والذي يمثل تدفق البيانات عبر الشبكة العصبية. + +من خلال عرض رسم بياني بمشغلين وأنواع بيانات موحدة، تجعل ONNX من السهل التبديل بين الأطر. على سبيل المثال، يمكن تصدير نموذج مدرب في PyTorch إلى تنسيق ONNX ثم استيراده في TensorFlow (والعكس صحيح). + +بمجرد تصديره إلى تنسيق ONNX، يمكن إجراء ما يلي للنموذج: + +- تحسينه للاستدلال من خلال تقنيات مثل [تحسين الرسم البياني](https://huggingface.co/docs/optimum/onnxruntime/usage_guides/optimization) و [التكميم](https://huggingface.co/docs/optimum/onnxruntime/usage_guides/quantization). +- تشغيله باستخدام ONNX Runtime عبر فئات [`ORTModelForXXX`](https://huggingface.co/docs/optimum/onnxruntime/package_reference/modeling_ort)، والتي تتبع نفس واجهة برمجة التطبيقات (API) لـ `AutoModel` التي اعتدت عليها في 🤗 Transformers. +- تشغيله باستخدام [خطوط أنابيب الاستدلال المحسنة](https://huggingface.co/docs/optimum/main/en/onnxruntime/usage_guides/pipelines)، والتي لها نفس واجهة برمجة التطبيقات (API) مثل وظيفة [`pipeline`] في 🤗 Transformers. + +يوفر 🤗 Optimum الدعم لتصدير ONNX من خلال الاستفادة من كائنات التكوين. تأتي كائنات التكوين هذه جاهزة لعدد من هندسات النماذج، وقد تم تصميمها لتكون قابلة للتوسعة بسهولة إلى هندسات أخرى. + +للاطلاع على قائمة بالتكوينات الجاهزة، يرجى الرجوع إلى [وثائق 🤗 Optimum](https://huggingface.co/docs/optimum/exporters/onnx/overview). + +هناك طريقتان لتصدير نموذج 🤗 Transformers إلى ONNX، نوضح كلا الطريقتين فيما يلي: + +- التصدير باستخدام 🤗 Optimum عبر واجهة سطر الأوامر (CLI). +- التصدير باستخدام 🤗 Optimum مع `optimum.onnxruntime`. + +### تصدير نموذج 🤗 Transformers إلى ONNX باستخدام واجهة سطر الأوامر + +لتصدير نموذج 🤗 Transformers إلى ONNX، قم أولاً بتثبيت اعتماد إضافي: + +```bash +pip install optimum[exporters] +``` + +للاطلاع على جميع الحجج المتاحة، يرجى الرجوع إلى [وثائق 🤗 Optimum](https://huggingface.co/docs/optimum/exporters/onnx/usage_guides/export_a_model#exporting-a-model-to-onnx-using-the-cli)، أو عرض المساعدة في سطر الأوامر: + +```bash +optimum-cli export onnx --help +``` +```bash +optimum-cli export onnx --help +``` + +لتصدير نقطة تفتيش نموذج من 🤗 Hub، على سبيل المثال، `distilbert/distilbert-base-uncased-distilled-squad`، قم بتشغيل الأمر التالي: + +```bash +optimum-cli export onnx --model distilbert/distilbert-base-uncased-distilled-squad distilbert_base_uncased_squad_onnx/ +``` + +يجب أن تشاهد السجلات التي تشير إلى التقدم المحرز وتظهر المكان الذي تم فيه حفظ ملف `model.onnx` الناتج، مثل هذا: + +```bash +Validating ONNX model distilbert_base_uncased_squad_onnx/model.onnx... + -[✓] ONNX model output names match reference model (start_logits, end_logits) + - Validating ONNX Model output "start_logits": + -[✓] (2, 16) matches (2, 16) + -[✓] all values close (atol: 0.0001) + - Validating ONNX Model output "end_logits": + -[✓] (2, 16) matches (2, 16) + -[✓] all values close (atol: 0.0001) +The ONNX export succeeded and the exported model was saved at: distilbert_base_uncased_squad_onnx +``` + +يوضح المثال أعلاه تصدير نقطة تفتيش من 🤗 Hub. عند تصدير نموذج محلي، تأكد أولاً من حفظ ملفات أوزان النموذج ومحول الرموز في نفس الدليل (`local_path`). عند استخدام واجهة سطر الأوامر، قم بتمرير `local_path` إلى وسيط `model` بدلاً من اسم نقطة التفتيش على 🤗 Hub وقدم وسيط `--task`. يمكنك مراجعة قائمة المهام المدعومة في [وثائق 🤗 Optimum](https://huggingface.co/docs/optimum/exporters/task_manager). إذا لم يتم توفير وسيط `task`، فسيتم تعيينه افتراضيًا إلى هندسة النموذج دون أي رأس محدد للمهمة. + +```bash +optimum-cli export onnx --model local_path --task question-answering distilbert_base_uncased_squad_onnx/ +``` + +يمكن بعد ذلك تشغيل ملف `model.onnx` الناتج على أحد [المسرعات](https://onnx.ai/supported-tools.html#deployModel) العديدة التي تدعم معيار ONNX. على سبيل المثال، يمكننا تحميل النموذج وتشغيله باستخدام [ONNX Runtime](https://onnxruntime.ai/) كما يلي: + +```python +>>> from transformers import AutoTokenizer +>>> from optimum.onnxruntime import ORTModelForQuestionAnswering + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert_base_uncased_squad_onnx") +>>> model = ORTModelForQuestionAnswering.from_pretrained("distilbert_base_uncased_squad_onnx") +>>> inputs = tokenizer("What am I using?", "Using DistilBERT with ONNX Runtime!", return_tensors="pt") +>>> outputs = model(**inputs) +``` + +تكون العملية مماثلة بالنسبة إلى نقاط تفتيش TensorFlow على Hub. على سبيل المثال، إليك كيفية تصدير نقطة تفتيش TensorFlow نقية من [منظمة Keras](https://huggingface.co/keras-io): + +```bash +optimum-cli export onnx --model keras-io/transformers-qa distilbert_base_cased_squad_onnx/ +``` + +### تصدير نموذج 🤗 Transformers إلى ONNX باستخدام `optimum.onnxruntime` + +بدلاً من واجهة سطر الأوامر، يمكنك تصدير نموذج 🤗 Transformers إلى ONNX برمجيًا كما يلي: + +```python +>>> from optimum.onnxruntime import ORTModelForSequenceClassification +>>> from transformers import AutoTokenizer + +>>> model_checkpoint = "distilbert_base_uncased_squad" +>>> save_directory = "onnx/" + +>>> # Load a model from transformers and export it to ONNX +>>> ort_model = ORTModelForSequenceClassification.from_pretrained(model_checkpoint, export=True) +>>> tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) + +>>> # Save the onnx model and tokenizer +>>> ort_model.save_pretrained(save_directory) +>>> tokenizer.save_pretrained(save_directory) +``` + +### تصدير نموذج لهندسة غير مدعومة + +إذا كنت ترغب في المساهمة من خلال إضافة دعم لنموذج لا يمكن تصديره حاليًا، فيجب عليك أولاً التحقق مما إذا كان مدعومًا في [`optimum.exporters.onnx`](https://huggingface.co/docs/optimum/exporters/onnx/overview)، وإذا لم يكن مدعومًا، [فيمكنك المساهمة في 🤗 Optimum](https://huggingface.co/docs/optimum/exporters/onnx/usage_guides/contribute) مباشرة. + +### تصدير نموذج باستخدام `transformers.onnx` + + + +لم يعد `tranformers.onnx` مدعومًا، يرجى تصدير النماذج باستخدام 🤗 Optimum كما هو موضح أعلاه. سيتم إزالة هذا القسم في الإصدارات المستقبلية. + + + +لتصدير نموذج 🤗 Transformers إلى ONNX باستخدام `tranformers.onnx`، قم بتثبيت الاعتماد الإضافي التالي: + +```bash +pip install transformers[onnx] +``` + +استخدم حزمة `transformers.onnx` كنموذج Python لتصدير نقطة تفتيش باستخدام تكوين جاهز: + +```bash +python -m transformers.onnx --model=distilbert/distilbert-base-uncased onnx/ +``` + +هذا يصدر رسم بياني ONNX لنقطة التفتيش التي حددها وسيط `--model`. قم بتمرير أي نقطة تفتيش على 🤗 Hub أو واحدة مخزنة محليًا. + +يمكن بعد ذلك تشغيل ملف `model.onnx` الناتج على أحد المسرعات العديدة التي تدعم معيار ONNX. على سبيل المثال، قم بتحميل النموذج وتشغيله باستخدام ONNX Runtime كما يلي: + +```python +>>> from transformers import AutoTokenizer +>>> from onnxruntime import InferenceSession + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") +>>> session = InferenceSession("onnx/model.onnx") +>>> # ONNX Runtime expects NumPy arrays as input +>>> inputs = tokenizer("Using DistilBERT with ONNX Runtime!", return_tensors="np") +>>> outputs = session.run(output_names=["last_hidden_state"], input_feed=dict(inputs)) +``` + +يمكن الحصول على أسماء الإخراج المطلوبة (مثل `["last_hidden_state"]`) من خلال إلقاء نظرة على تكوين ONNX لكل نموذج. على سبيل المثال، بالنسبة لـ DistilBERT، لدينا: + +```python +>>> from transformers.models.distilbert import DistilBertConfig, DistilBertOnnxConfig + +>>> config = DistilBertConfig() +>>> onnx_config = DistilBertOnnxConfig(config) +>>> print(list(onnx_config.outputs.keys())) +["last_hidden_state"] +``` + +تكون العملية مماثلة بالنسبة إلى نقاط تفتيش TensorFlow على Hub. على سبيل المثال، لتصدير نقطة تفتيش TensorFlow نقية، قم بما يلي: + +```bash +python -m transformers.onnx --model=keras-io/transformers-qa onnx/ +``` + +لتصدير نموذج مخزن محليًا، قم بحفظ ملفات أوزان النموذج ومحول الرموز في نفس الدليل (على سبيل المثال `local-pt-checkpoint`)، ثم قم بتصديره إلى ONNX عن طريق توجيه وسيط `--model` لحزمة `transformers.onnx` إلى الدليل المطلوب: + +```bash +python -m transformers.onnx --model=local-pt-checkpoint onnx/ +``` \ No newline at end of file From 130e866db5d4cf1f64a63d12b5b67e318b8e001c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:55 +0300 Subject: [PATCH 036/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fgpu=5Fone.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_train_gpu_one.md | 439 +++++++++++++++++++++++++++ 1 file changed, 439 insertions(+) create mode 100644 docs/source/ar/perf_train_gpu_one.md diff --git a/docs/source/ar/perf_train_gpu_one.md b/docs/source/ar/perf_train_gpu_one.md new file mode 100644 index 00000000000000..a5d11c352bed07 --- /dev/null +++ b/docs/source/ar/perf_train_gpu_one.md @@ -0,0 +1,439 @@ +# طرق وأدوات للتدريب الفعال على معالج رسومات واحد + +يوضح هذا الدليل التقنيات العملية التي يمكنك استخدامها لزيادة كفاءة تدريب النموذج الخاص بك من خلال تحسين استخدام الذاكرة، أو تسريع التدريب، أو كليهما. إذا كنت ترغب في فهم كيفية استخدام وحدة معالجة الرسوميات (GPU) أثناء التدريب، يرجى الرجوع أولاً إلى الدليل المفاهيمي [تشريح تدريب النموذج](model_memory_anatomy). يركز هذا الدليل على التقنيات العملية. + + + +إذا كان لديك إمكانية الوصول إلى جهاز به عدة وحدات معالجة رسوميات (GPUs)، فلا تزال هذه الأساليب صالحة، بالإضافة إلى أنه يمكنك الاستفادة من الأساليب الإضافية الموضحة في قسم [وحدات معالجة الرسوميات (GPU) المتعددة](perf_train_gpu_many). + + + +عند تدريب النماذج الكبيرة، هناك جانبان يجب أخذهما في الاعتبار في نفس الوقت: + +* *معدل نقل البيانات/وقت التدريب:* زيادة معدل نقل البيانات (عدد العينات في الثانية) يؤدي إلى تقليل تكلفة التدريب. ويتم تحقيق ذلك بشكل عام من خلال الاستفادة القصوى من وحدة معالجة الرسوميات (GPU) وبالتالي ملء ذاكرة وحدة معالجة الرسوميات (GPU) إلى الحد الأقصى. إذا تجاوز حجم الدفعة المطلوب حدود ذاكرة وحدة معالجة الرسوميات (GPU)، فيمكن لتقنيات تحسين الذاكرة، مثل تراكم التدرجات، أن تساعد في ذلك. + +* *أداء النموذج:* ومع ذلك، إذا كان حجم الدفعة المفضل يناسب الذاكرة، فلا يوجد سبب لتطبيق تقنيات تحسين الذاكرة لأنها يمكن أن تبطئ التدريب. مجرد أن يكون المرء قادرًا على استخدام حجم دفعة كبير، لا يعني بالضرورة أنه ينبغي عليه ذلك. كجزء من ضبط المعلمات، يجب عليك تحديد حجم الدفعة الذي يحقق أفضل النتائج ثم تحسين الموارد وفقًا لذلك. + +يمكن تصنيف الطرق والأدوات المشمولة في هذا الدليل بناءً على التأثير الذي تحدثه على عملية التدريب: + +| الطريقة/الأداة | تحسين سرعة التدريب | تحسين استخدام الذاكرة | +|:------------------------:|:----------------------:|:-------------------------:| +| [اختيار حجم الدفعة](#batch-size-choice) | نعم | نعم | +| [تراكم التدرج](#gradient-accumulation) | لا | نعم | +| [التدقيق التدريجي](#gradient-checkpointing) | لا | نعم | +| [تدريب الدقة المختلطة](#mixed-precision-training) | نعم | ربما* | +| [torch_empty_cache_steps](https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.TrainingArguments.torch_empty_cache_steps) | لا | نعم | +| [اختيار المحسن](#optimizer-choice) | نعم | نعم | +| [التحميل المسبق للبيانات](#data-preloading) | نعم | لا | +| [DeepSpeed Zero](#deepspeed-zero) | لا | نعم | +| [torch.compile](#using-torchcompile) | نعم | لا | +| [ضبط دقيق فعال للمعلمات (PEFT)](#using--peft) | لا | نعم | + + + +*ملاحظة: عند استخدام الدقة المختلطة مع نموذج صغير وحجم دفعة كبير، ستكون هناك بعض الوفورات في الذاكرة ولكن مع نموذج كبير وحجم دفعة صغير، سيكون استخدام الذاكرة أكبر. + + + +يمكنك الجمع بين الطرق المذكورة أعلاه للحصول على تأثير تراكمي. تتوفر هذه التقنيات سواء كنت تقوم بتدريب نموذجك باستخدام [`Trainer`] أو كتابة حلقة PyTorch نقية، وفي هذه الحالة يمكنك [تكوين هذه التحسينات باستخدام Accelerate](#using--accelerate). + +إذا لم تؤد هذه الطرق إلى مكاسب كافية، فيمكنك استكشاف الخيارات التالية: +* البحث في بناء حاوية Docker مخصصة خاصة بك مع برامج مسبقة البناء فعالة +* النظر في نموذج يستخدم مزيجًا من الخبراء (MoE) +* تحويل نموذجك إلى BetterTransformer للاستفادة من الاهتمام الأصلي في PyTorch + +أخيرًا، إذا لم يكن كل ما سبق كافيًا، حتى بعد التبديل إلى وحدة معالجة رسوميات (GPU) من فئة الخوادم مثل A100، ففكر في الانتقال إلى إعداد وحدة معالجة رسوميات (GPU) متعددة. لا تزال جميع هذه الأساليب صالحة في إعداد وحدة معالجة الرسوميات (GPU) متعددة، بالإضافة إلى أنه يمكنك الاستفادة من تقنيات التوازي الإضافية الموضحة في قسم [وحدات معالجة الرسوميات (GPU) المتعددة](perf_train_gpu_many). + +## اختيار حجم الدفعة +## اختيار حجم الدفعة + +لتحقيق الأداء الأمثل، ابدأ بتحديد حجم الدفعة المناسب. يُنصح باستخدام أحجام دفعات وعدد عصبونات الإدخال/الإخراج التي تكون من حجم 2^N. غالبًا ما يكون هذا العدد مضاعفًا للرقم 8، ولكنه قد يكون أعلى اعتمادًا على الأجهزة المستخدمة ونوع البيانات dtype المستخدمة في النموذج. + +للإشارة، راجع توصية NVIDIA لحساب [عدد عصبونات الإدخال/الإخراج](https://docs.nvidia.com/deeplearning/performance/dl-performance-fully-connected/index.html#input-features) و[حجم الدفعة](https://docs.nvidia.com/deeplearning/performance/dl-performance-fully-connected/index.html#batch-size) للطبقات المتصلة تمامًا (التي تشارك في عمليات الضرب العام للمصفوفات). + +تحدد [متطلبات Tensor Core](https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc) المضاعف بناءً على نوع البيانات dtype والأجهزة المستخدمة. على سبيل المثال، بالنسبة لنوع البيانات fp16، يُنصح باستخدام مضاعفات الرقم 8، إلا إذا كان الأمر يتعلق ببطاقة GPU من نوع A100، وفي هذه الحالة، استخدم مضاعفات 64. + +بالنسبة للمعلمات الصغيرة، ضع في اعتبارك أيضًا [آثار التكميم الأبعاد](https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#dim-quantization). هنا يحدث التبليط ويمكن أن يؤدي المضاعف الصحيح إلى تسريع كبير. + +## تجميع التدرجات + +تهدف طريقة **تجميع التدرجات** إلى حساب التدرجات على شكل أقسام أصغر بدلاً من حسابها دفعة واحدة للدفعة بأكملها. يتضمن هذا النهج حساب التدرجات بشكل تكراري في دفعات أصغر عن طريق تنفيذ عمليات تمرير للأمام والخلف عبر النموذج وتجميع التدرجات أثناء هذه العملية. بمجرد تجميع عدد كافٍ من التدرجات، يتم تنفيذ خطوة التحسين للنموذج. من خلال استخدام تجميع التدرجات، يصبح من الممكن زيادة **حجم الدفعة الفعال** إلى ما بعد القيود التي تفرضها سعة ذاكرة GPU. ومع ذلك، من المهم ملاحظة أن عمليات التمرير الإضافية للأمام والخلف التي قدمها تجميع التدرجات يمكن أن تبطئ عملية التدريب. + +يمكنك تمكين تجميع التدرجات عن طريق إضافة وسيط `gradient_accumulation_steps` إلى [`TrainingArguments`]: + +```py +training_args = TrainingArguments(per_device_train_batch_size=1, gradient_accumulation_steps=4, **default_args) +``` + +في المثال أعلاه، يصبح حجم الدفعة الفعال لديك 4. + +أو، استخدم 🤗 Accelerate للتحكم الكامل في حلقة التدريب. ابحث عن مثال 🤗 Accelerate [في الأسفل في هذا الدليل](#using-accelerate). + +في حين يُنصح بزيادة استخدام GPU قدر الإمكان، يمكن أن يؤدي ارتفاع عدد خطوات تجميع التدرجات إلى تباطؤ ملحوظ في التدريب. ضع في اعتبارك المثال التالي. لنفترض أن `per_device_train_batch_size=4` بدون تجميع التدرجات يصل إلى حد GPU. إذا كنت ترغب في التدريب باستخدام دفعات بحجم 64، فلا تقم بتعيين `per_device_train_batch_size` إلى 1 و`gradient_accumulation_steps` إلى 64. بدلاً من ذلك، احتفظ بـ `per_device_train_batch_size=4` وقم بتعيين `gradient_accumulation_steps=16`. يؤدي هذا إلى نفس حجم الدفعة الفعال مع الاستفادة بشكل أفضل من موارد GPU المتاحة. + +للحصول على معلومات إضافية، يرجى الرجوع إلى معايير حجم الدفعة وتجميع التدرجات لـ [RTX-3090](https://github.com/huggingface/transformers/issues/14608#issuecomment-1004392537) و [A100](https://github.com/huggingface/transformers/issues/15026#issuecomment-1005033957). + +## نقاط تفتيش التدرج + +قد تواجه بعض النماذج الكبيرة مشكلات في الذاكرة حتى عند تعيين حجم الدفعة إلى 1 واستخدام تجميع التدرجات. ويرجع ذلك إلى وجود مكونات أخرى تتطلب أيضًا مساحة تخزين للذاكرة. + +يمكن أن يؤدي حفظ جميع التنشيطات من تمرير الإرسال لحساب التدرجات أثناء تمرير العودة إلى زيادة كبيرة في ذاكرة التخزين المؤقت. والنهج البديل المتمثل في التخلص من التنشيطات وإعادة حسابها عند الحاجة أثناء تمرير العودة، من شأنه أن يؤدي إلى زيادة كبيرة في العبء الحسابي وإبطاء عملية التدريب. + +تقدم **نقاط تفتيش التدرج** حلًا وسطًا بين هذين النهجين، حيث تقوم بحفظ التنشيطات المختارة بشكل استراتيجي في جميع أنحاء الرسم البياني الحسابي، بحيث لا يلزم إعادة حساب سوى جزء من التنشيطات للتدرجات. للحصول على شرح متعمق لنقاط تفتيش التدرج، راجع [هذه المقالة الرائعة](https://medium.com/tensorflow/fitting-larger-networks-into-memory-583e3c758ff9). + +لتمكين نقاط تفتيش التدرج في [`Trainer`]، قم بتمرير العلامة المقابلة إلى [`TrainingArguments`]: + +```py +training_args = TrainingArguments( + per_device_train_batch_size=1, gradient_accumulation_steps=4, gradient_checkpointing=True, **default_args +) +``` + +أو، استخدم 🤗 Accelerate - ابحث عن مثال 🤗 Accelerate [في الأسفل في هذا الدليل](#using--accelerate). + + + +في حين أن نقاط تفتيش التدرج قد تحسن كفاءة الذاكرة، إلا أنها تبطئ التدريب بنسبة 20%. + + + +## التدريب عالي الدقة المختلط + +**التدريب عالي الدقة المختلط** هي تقنية تهدف إلى تحسين الكفاءة الحسابية لتدريب النماذج من خلال استخدام تنسيقات رقمية منخفضة الدقة لبعض المتغيرات. تقليديًا، تستخدم معظم النماذج دقة النقطة العائمة 32 بت (fp32 أو float32) لتمثيل ومعالجة المتغيرات. ومع ذلك، لا تحتاج جميع المتغيرات إلى هذا المستوى العالي من الدقة لتحقيق نتائج دقيقة. من خلال تقليل دقة متغيرات معينة إلى تنسيقات رقمية أقل، مثل النقطة العائمة 16 بت (fp16 أو float16)، يمكننا تسريع الحسابات. نظرًا لأن بعض الحسابات تتم في هذا النهج بنصف الدقة، بينما لا تزال بعضها الآخر بدقة كاملة، يُطلق على النهج اسم التدريب عالي الدقة المختلط. + +يتم تحقيق التدريب عالي الدقة المختلط في معظم الأحيان باستخدام أنواع بيانات fp16 (float16)، ومع ذلك، توفر بعض بنيات GPU (مثل بنية Ampere) أنواع بيانات bf16 وtf32 (نوع بيانات CUDA الداخلي). تحقق من [مدونة NVIDIA](https://developer.nvidia.com/blog/accelerating-ai-training-with-tf32-tensor-cores/) لمعرفة المزيد عن الاختلافات بين أنواع البيانات هذه. + +### fp16 + +تأتي الميزة الرئيسية للتدريب عالي الدقة المختلط من حفظ التنشيطات بنصف الدقة (fp16). على الرغم من أن التدرجات يتم حسابها أيضًا بنصف الدقة، إلا أنها تتحول مرة أخرى إلى دقة كاملة لخطوة التحسين، لذا لا يتم توفير أي ذاكرة هنا. + +في حين أن التدريب عالي الدقة المختلط يؤدي إلى حسابات أسرع، إلا أنه يمكن أن يؤدي أيضًا إلى استخدام المزيد من ذاكرة GPU، خاصة لحجم الدفعات الصغيرة. ويرجع ذلك إلى وجود النموذج الآن على GPU بدقة 16 بت و32 بت (1.5x من النموذج الأصلي على GPU). + +لتمكين التدريب عالي الدقة المختلط، قم بتعيين العلامة `fp16` إلى `True`: + +```py +training_args = TrainingArguments(per_device_train_batch_size=4, fp16=True, **default_args) +``` + +إذا كنت تفضل استخدام 🤗 Accelerate، فابحث عن مثال 🤗 Accelerate [في الأسفل في هذا الدليل](#using--accelerate). + +### BF16 + +إذا كان لديك إمكانية الوصول إلى بنية Ampere أو أحدث، فيمكنك استخدام bf16 للتدريب عالي الدقة المختلط والتقييم. في حين أن دقة bf16 أسوأ من fp16، إلا أن لها نطاق ديناميكي أكبر. في fp16، أكبر رقم يمكن أن تحصل عليه هو `65535` وأي رقم أعلى من ذلك سيؤدي إلى فيض. يمكن أن يكون رقم bf16 كبيرًا مثل `3.39e+38` (!) وهو تقريبًا نفس fp32 - لأن كليهما يستخدم 8 بتات لنطاق الأرقام. + +يمكنك تمكين BF16 في 🤗 Trainer باستخدام ما يلي: + +```python +training_args = TrainingArguments(bf16=True, **default_args) +``` + +### TF32 +يمكنك تمكين BF16 في 🤗 Trainer باستخدام ما يلي: + +```python +training_args = TrainingArguments(bf16=True, **default_args) +``` + +### TF32 + +تستخدم بنية Ampere نوع بيانات سحري يسمى tf32. ولديه نفس النطاق الرقمي مثل fp32 (8 بتات)، ولكن بدلاً من 23 بت من الدقة، فإنه يحتوي فقط على 10 بتات (نفس fp16) ويستخدم 19 بتًا فقط في المجموع. إنه "سحري" بمعنى أنه يمكنك استخدام رمز التدريب و/أو الاستدلال fp32 العادي، ومن خلال تمكين دعم tf32، يمكنك الحصول على تحسن في الإنتاجية يصل إلى 3 مرات. كل ما عليك فعله هو إضافة ما يلي إلى رمزك: + +```python +import torch +torch.backends.cuda.matmul.allow_tf32 = True +torch.backends.cudnn.allow_tf32 = True +``` + +ستقوم CUDA تلقائيًا بالتبديل إلى استخدام tf32 بدلاً من fp32 حيثما أمكن ذلك، بافتراض أن GPU المستخدمة هي من سلسلة Ampere. + +وفقًا لـ [بحث NVIDIA](https://developer.nvidia.com/blog/accelerating-ai-training-with-tf32-tensor-cores/)، فإن غالبية أعباء عمل التدريب على التعلم الآلي تظهر نفس الغموض والتقارب مع التدريب tf32 كما هو الحال مع fp32. إذا كنت تستخدم بالفعل fp16 أو bf16 عالي الدقة المختلط، فقد يساعد ذلك في الإنتاجية أيضًا. + +يمكنك تمكين هذا الوضع في 🤗 Trainer: + +```python +TrainingArguments(tf32=True, **default_args) +``` + + + +لا يمكن الوصول إلى tf32 مباشرة عبر `tensor.to(dtype=torch.tf32)` لأنه نوع بيانات داخلي لـ CUDA. تحتاج إلى `torch>=1.7` لاستخدام أنواع بيانات tf32. + + + +للحصول على معلومات إضافية حول tf32 مقابل الدقة الأخرى، يرجى الرجوع إلى المعايير المرجعية التالية: [RTX-3090](https://github.com/huggingface/transformers/issues/14608#issuecomment-1004390803) و [A100](https://github.com/huggingface/transformers/issues/15026#issuecomment-1004543189). + +## Flash Attention 2 + +يمكنك تسريع إنتاجية التدريب باستخدام تكامل Flash Attention 2 في المحولات. تحقق من القسم المناسب في [قسم GPU الفردي](./perf_infer_gpu_one#Flash-Attention-2) لمعرفة المزيد حول كيفية تحميل نموذج باستخدام وحدات Flash Attention 2. + +## اختيار المحسن + +المحسن الأكثر استخدامًا لتدريب نماذج المحول هو Adam أو AdamW (Adam مع انحلال الوزن). يحقق Adam تقاربًا جيدًا عن طريق تخزين المتوسط ​​المتحرك للتدرجات السابقة؛ ومع ذلك، فإنه يضيف بصمة ذاكرة إضافية بحجم عدد معلمات النموذج. لمعالجة ذلك، يمكنك استخدام محسن بديل. على سبيل المثال، إذا كان لديك [NVIDIA/apex](https://github.com/NVIDIA/apex) مثبتًا لـ GPUs من NVIDIA، أو [ROCmSoftwarePlatform/apex](https://github.com/ROCmSoftwarePlatform/apex) لـ GPUs من AMD، فسيمنحك `adamw_apex_fused` أسرع تجربة تدريب بين جميع محسنات AdamW المدعومة. + +يتكامل [`Trainer`] مع مجموعة متنوعة من المحسنات التي يمكن استخدامها مباشرة من الصندوق: `adamw_hf`، `adamw_torch`، `adamw_torch_fused`، `adamw_apex_fused`، `adamw_anyprecision`، `adafactor`، أو `adamw_bnb_8bit`. يمكن إضافة محسنات أخرى عبر تنفيذ تابع خارجي. + +دعونا نلقي نظرة فاحصة على بديلين لمحسن AdamW: + +1. `adafactor` المتاح في [`Trainer`] +2. `adamw_bnb_8bit` متاح أيضًا في Trainer، ولكن يتم توفير تكامل تابع خارجي أدناه للتوضيح. + +لمقارنة، لنموذج 3B-parameter، مثل "google-t5/t5-3b": + +* سوف يحتاج محسن AdamW القياسي إلى 24 جيجابايت من ذاكرة GPU لأنه يستخدم 8 بايتات لكل معلمة (8*3 => 24 جيجابايت) +* سوف يحتاج محسن Adafactor إلى أكثر من 12 جيجابايت. يستخدم أكثر بقليل من 4 بايتات لكل معلمة، لذا 4*3 وبعض الإضافات. +* سوف يستخدم محسن 8bit BNB المُدرج 6 جيجابايت فقط إذا تم تكميم جميع حالات المحسن. + +### Adafactor + +لا يقوم Adafactor بتخزين المتوسطات المتحركة لكل عنصر في مصفوفات الأوزان. بدلاً من ذلك، فإنه يحتفظ بالمعلومات المجمعة (مجاميع المتوسطات المتحركة صفًا وعموديًا)، مما يقلل بشكل كبير من بصمته. ومع ذلك، مقارنة بـ Adam، قد يكون لدى Adafactor تقارب أبطأ في بعض الحالات. + +يمكنك التبديل إلى Adafactor عن طريق تعيين `optim="adafactor"` في [`TrainingArguments`]: + +```py +training_args = TrainingArguments(per_device_train_batch_size=4, optim="adafactor"، **default_args) +``` + +بالجمع بين النُهج الأخرى (تجميع التدرجات، ونقاط تفتيش التدرج، والتدريب عالي الدقة المختلط)، يمكنك ملاحظة تحسن يصل إلى 3 مرات مع الحفاظ على الإنتاجية! ومع ذلك، كما ذكرنا سابقًا، قد يكون تقارب Adafactor أسوأ من Adam. + +### Adam 8-بت + +بدلاً من تجميع حالات المحسن مثل Adafactor، يحتفظ Adam 8-بت بالحالة الكاملة ويقوم بتكميمها. يعني التكميم أنه يتم تخزين الحالة بدقة أقل ويتم إلغاء تكميمها فقط للتحسين. هذا مشابه لفكرة التدريب عالي الدقة المختلط. + +لاستخدام `adamw_bnb_8bit`، ما عليك سوى تعيين `optim="adamw_bnb_8bit"` في [`TrainingArguments`]: + +```py +training_args = TrainingArguments(per_device_train_batch_size=4, optim="adamw_bnb_8bit"، **default_args) +``` + +ومع ذلك، يمكننا أيضًا استخدام تنفيذ تابع خارجي لمحسن 8 بت للتوضيح. + +أولاً، اتبع دليل التثبيت في مستودع [GitHub](https://github.com/TimDettmers/bitsandbytes) لتثبيت مكتبة `bitsandbytes` التي تنفذ محسن Adam 8 بت. + +بعد ذلك، تحتاج إلى تهيئة المحسن. ينطوي ذلك على خطوتين: + +* أولاً، قم بتقسيم معلمات النموذج إلى مجموعتين - واحدة يتم تطبيق انحلال الوزن عليها، والأخرى لا يتم تطبيقه عليها. عادةً ما يتم تطبيق انحلال الوزن على معلمات التحيز ومعلمات طبقة التطبيع. +* ثم قم بتنظيف وسيطات المحسن لاستخدام نفس المعلمات مثل محسن AdamW المستخدم سابقًا. + +```py +import bitsandbytes as bnb +from torch import nn +from transformers.trainer_pt_utils import get_parameter_names + +training_args = TrainingArguments(per_device_train_batch_size=4, **default_args) + +decay_parameters = get_parameter_names(model, [nn.LayerNorm]) +decay_parameters = [name for name in decay_parameters if "bias" not in name] +optimizer_grouped_parameters = [ + { + "params": [p for n, p in model.named_parameters() if n in decay_parameters], + "weight_decay": training_args.weight_decay, + }, + { + "params": [p for n, p in model.named_parameters() if n not in decay_parameters], + "weight_decay": 0.0, + }, +] + +optimizer_kwargs = { + "betas": (training_args.adam_beta1, training_args.adam_beta2), + "eps": training_args.adam_epsilon, +} +optimizer_kwargs["lr"] = training_args.learning_rate +adam_bnb_optim = bnb.optim.Adam8bit( + optimizer_grouped_parameters, + betas=(training_args.adam_beta1, training_args.adam_beta2), + eps=training_args.adam_epsilon, + lr=training_args.learning_rate, +) +``` +أخيرًا، قم بتمرير المحسن المخصص كحجة إلى "Trainer": + +```py +trainer = Trainer(model=model, args=training_args, train_dataset=ds, optimizers=(adam_bnb_optim, None)) +``` + +بالجمع بين هذا النهج ونهج أخرى (تجميع الخرجات، وحفظ نقاط التفتيش للخرجات، والتدريب على الدقة المختلطة)، يمكنك توقع تحسن في الذاكرة بحوالي 3 مرات، وحتى زيادة طفيفة في الإنتاجية مقارنة باستخدام Adafactor. + +### multi_tensor + +قدم pytorch-nightly `torch.optim._multi_tensor` الذي يجب أن يسرع بشكل كبير المحسنات في الحالات التي تحتوي على العديد من تنسيقات الميزات الصغيرة. ومن المتوقع أن يصبح هو الوضع الافتراضي، ولكن إذا كنت تريد تجربته في وقت أقرب، فراجع مشكلة GitHub [هذه](https://github.com/huggingface/transformers/issues/9965). + +## التحميل المسبق للبيانات + +أحد المتطلبات المهمة للوصول إلى سرعة تدريب عالية هي القدرة على تغذية وحدة معالجة الرسومات (GPU) بأقصى سرعة يمكنها التعامل معها. بشكل افتراضي، يحدث كل شيء في العملية الرئيسية، وقد لا تتمكن من قراءة البيانات من القرص بسرعة كافية، مما يؤدي إلى اختناق، مما يؤدي إلى الاستخدام الناقص لوحدة معالجة الرسومات (GPU). قم بتكوين الحجج التالية لتقليل الاختناق: + +- `DataLoader(pin_memory=True, ...)` - يضمن تحميل البيانات مسبقًا في الذاكرة المثبتة على وحدة المعالجة المركزية (CPU) وعادة ما يؤدي إلى نقل أسرع بكثير من ذاكرة وحدة المعالجة المركزية (CPU) إلى ذاكرة وحدة معالجة الرسومات (GPU). +- `DataLoader(num_workers=4, ...)` - قم بتشغيل العديد من العمال لتحميل البيانات بشكل أسرع. أثناء التدريب، راقب إحصائيات استخدام وحدة معالجة الرسومات (GPU)؛ إذا كان أقل من 100%، فجرّب زيادة عدد العمال. بالطبع، قد تكون المشكلة في مكان آخر، لذا فإن العديد من العمال لن يؤدي بالضرورة إلى أداء أفضل. + +عند استخدام [`Trainer`]، تكون الحجج المقابلة [`TrainingArguments`] هي: `dataloader_pin_memory` (`True` بشكل افتراضي)، و`dataloader_num_workers` (افتراضيًا `0`). + +## DeepSpeed ZeRO + +DeepSpeed هي مكتبة تحسين للتعلم العميق مفتوحة المصدر مدمجة في 🤗 Transformers و 🤗 Accelerate. فهو يوفر مجموعة واسعة من الميزات والتحسينات المصممة لتحسين كفاءة وقابلية توسع التدريب على التعلم العميق واسع النطاق. + +إذا كان نموذجك يناسب وحدة معالجة رسومات (GPU) واحدة ولديك مساحة كافية لتناسب حجم دفعة صغير، فلا تحتاج إلى استخدام DeepSpeed لأنه سيبطئ الأمور فقط. ومع ذلك، إذا لم يناسب النموذج وحدة معالجة رسومات (GPU) واحدة أو لا يمكنك تناسب حجم دفعة صغير، فيمكنك الاستفادة من DeepSpeed ZeRO + CPU Offload، أو NVMe Offload للنماذج الأكبر بكثير. في هذه الحالة، تحتاج إلى [تثبيت المكتبة](main_classes/deepspeed#installation) بشكل منفصل، ثم اتبع أحد الأدلة لإنشاء ملف تكوين وتشغيل DeepSpeed: + +* للحصول على دليل متعمق حول تكامل DeepSpeed مع [`Trainer`]، راجع [التوثيق المقابل](main_classes/deepspeed)، وتحديدًا [القسم الخاص بوحدة معالجة رسومات (GPU) واحدة](main_classes/deepspeed#deployment-with-one-gpu). مطلوب بعض التعديلات لاستخدام DeepSpeed في دفتر ملاحظات؛ يرجى إلقاء نظرة على [الدليل المقابل](main_classes/deepspeed#deployment-in-notebooks). +* إذا كنت تفضل استخدام 🤗 Accelerate، يرجى الرجوع إلى [دليل DeepSpeed في 🤗 Accelerate](https://huggingface.co/docs/accelerate/en/usage_guides/deepspeed). + +## استخدام torch.compile + +قدم PyTorch 2.0 دالة تجميع جديدة لا تتطلب أي تعديل على تعليمات PyTorch البرمجية الحالية ولكن يمكنها تحسين تعليمات PyTorch البرمجية الخاصة بك عن طريق إضافة سطر واحد من التعليمات البرمجية: `model = torch.compile(model)`. + +إذا كنت تستخدم [`Trainer`]، فيجب عليك فقط تمرير `to` خيار `torch_compile` في [`TrainingArguments`]: + +```python +training_args = TrainingArguments(torch_compile=True, **default_args) +``` + +يستخدم `torch.compile` واجهة برمجة تطبيقات تقييم الإطار في Python لإنشاء رسم بياني تلقائيًا من برامج PyTorch الموجودة. بعد التقاط الرسم البياني، يمكن نشر backends مختلفة لخفض الرسم البياني إلى محرك محسّن. يمكنك العثور على مزيد من التفاصيل والاختبارات المعيارية في [وثائق PyTorch](https://pytorch.org/get-started/pytorch-2.0/). + +لدى `torch.compile` قائمة متزايدة من backends، والتي يمكن العثور عليها عن طريق استدعاء `torchdynamo.list_backends()`، لكل منها تبعياته الاختيارية. + +حدد backend الذي سيتم استخدامه عن طريق تحديده عبر `torch_compile_backend` في [`TrainingArguments`]. بعض backends الأكثر استخدامًا هي: + +**backends التصحيح**: +* `dynamo.optimize("eager")` - يستخدم PyTorch لتشغيل GraphModule المستخرج. هذا مفيد جدًا في تصحيح مشكلات TorchDynamo. +* `dynamo.optimize("aot_eager")` - يستخدم AotAutograd بدون مترجم، أي مجرد استخدام PyTorch eager لرسوم forward وbackward في AotAutograd. هذا مفيد للتصحيح، ومن غير المرجح أن يوفر تسريعًا. + +**backends التدريب والاستدلال**: +* `dynamo.optimize("inductor")` - يستخدم backend TorchInductor مع AotAutograd وcudagraphs عن طريق الاستفادة من نواة Triton codegened [اقرأ المزيد](https://dev-discuss.pytorch.org/t/torchinductor-a-pytorch-native-compiler-with-define-by-run-ir-and-symbolic-shapes/747) +* `dynamo.optimize("nvfuser")` - nvFuser مع TorchScript. [اقرأ المزيد](https://dev-discuss.pytorch.org/t/tracing-with-primitives-update-1-nvfuser-and-its-primitives/593) +* `dynamo.optimize("aot_nvfuser")` - nvFuser مع AotAutograd. [اقرأ المزيد](https://dev-discuss.pytorch.org/t/tracing-with-primitives-update-1-nvfuser-and-its-primitives/593) +* `dynamo.optimize("aot_cudagraphs")` - cudagraphs مع AotAutograd. [اقرأ المزيد](https://github.com/pytorch/torchdynamo/pull/757) + +**backends الاستدلال فقط**: +* `dynamo.optimize("ofi")` - يستخدم Torchscript optimize_for_inference. [اقرأ المزيد](https://pytorch.org/docs/stable/generated/torch.jit.optimize_for_inference.html) +* `dynamo.optimize("fx2trt")` - يستخدم NVIDIA TensorRT لتحسين الاستدلال. [اقرأ المزيد](https://pytorch.org/TensorRT/tutorials/getting_started_with_fx_path.html) +* `dynamo.optimize("onnxrt")` - يستخدم ONNXRT للاستدلال على وحدة المعالجة المركزية (CPU) / وحدة معالجة الرسومات (GPU). [اقرأ المزيد](https://onnxruntime.ai/) +* `dynamo.optimize("ipex")` - يستخدم IPEX للاستدلال على وحدة المعالجة المركزية (CPU). [اقرأ المزيد](https://github.com/intel/intel-extension-for-pytorch) + +لمثال على استخدام `torch.compile` مع 🤗 Transformers، تحقق من [منشور المدونة حول ضبط نموذج BERT الدقيق لتصنيف النصوص باستخدام أحدث ميزات PyTorch 2.0](https://www.philschmid.de/getting-started-pytorch-2-0-transformers) + +## استخدام PEFT (ضبط دقيق فعال من حيث التكلفة) + +تقوم طرق [ضبط دقيق فعال من حيث التكلفة للمعلمات](https://huggingface.co/blog/peft) بتجميد معلمات النموذج المُدرب مسبقًا أثناء الضبط الدقيق وإضافة عدد صغير من المعلمات القابلة للتدريب (المهايئات) فوقه. + +ونتيجة لذلك، يتم تقليل [الذاكرة المرتبطة بحالات المُحسن والتدرجات](https://huggingface.co/docs/transformers/model_memory_anatomy#anatomy-of-models-memory) بشكل كبير. + +على سبيل المثال، باستخدام AdamW الفانيلا، سيكون متطلب الذاكرة لحالة المُحسن كما يلي: + +- نسخة fp32 من المعلمات: 4 بايت/معلمة +- الزخم: 4 بايت/معلمة +- التباين: 4 بايت/معلمة + +لنفترض أن لدينا نموذجًا به 7 مليارات معلمة و200 مليون معلمة تم حقنها باستخدام [محولات الترتيب المنخفض](https://huggingface.co/docs/peft/conceptual_guides/lora). + +سيكون متطلب الذاكرة لحالة المُحسن للنموذج العادي 12 * 7 = 84 جيجابايت (بافتراض 7 مليارات معلمة قابلة للتدريب). + +تؤدي إضافة Lora إلى زيادة طفيفة في الذاكرة المرتبطة بأوزان النموذج وتقليل متطلبات الذاكرة لحالة المُحسن بشكل كبير إلى 12 * 0.2 = 2.4 جيجابايت. + +لمعرفة المزيد حول PEFT واستخدامه المفصل، راجع [وثائق PEFT](https://huggingface.co/docs/peft/) أو [مستودع PEFT](https://github.com/huggingface/peft). + +## استخدام 🤗 Accelerate + +مع [🤗 Accelerate](https://huggingface.co/docs/accelerate/index)، يمكنك استخدام الطرق المذكورة أعلاه مع التحكم الكامل في حلقة التدريب، ويمكنك أساسيًا كتابة الحلقة في PyTorch النقي مع بعض التعديلات الطفيفة. + +لنفترض أنك قمت بدمج الطرق في [`TrainingArguments`] كما يلي: + +```py +training_args = TrainingArguments( + per_device_train_batch_size=1, + gradient_accumulation_steps=4, + gradient_checkpointing=True, + fp16=True, + **default_args, +) +``` + +تتكون حلقة التدريب الكاملة باستخدام 🤗 Accelerate من بضع أسطر فقط من التعليمات البرمجية: + +```py +from accelerate import Accelerator +from torch.utils.data.dataloader import DataLoader + +dataloader = DataLoader(ds, batch_size=training_args.per_device_train_batch_size) + +if training_args.gradient_checkpointing: + model.gradient_checkpointing_enable() + +accelerator = Accelerator(fp16=training_args.fp16) +model, optimizer, dataloader = accelerator.prepare(model, adam_bnb_optim, dataloader) +accelerator = Accelerator(fp16=training_args.fp16) +model, optimizer, dataloader = accelerator.prepare(model, adam_bnb_optim, dataloader) + +model.train() +for step, batch in enumerate(dataloader, start=1): + loss = model(**batch).loss + loss = loss / training_args.gradient_accumulation_steps + accelerator.backward(loss) + if step % training_args.gradient_accumulation_steps == 0: + optimizer.step() + optimizer.zero_grad() +``` + +أولاً، نقوم بتغليف مجموعة البيانات في [`DataLoader`](https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader). +بعد ذلك، يمكننا تمكين التحقق من التدرج عن طريق استدعاء طريقة [`~PreTrainedModel.gradient_checkpointing_enable`] للنموذج. +عند تهيئة [`Accelerator`](https://huggingface.co/docs/accelerate/package_reference/accelerator#accelerate.Accelerator)، +يمكننا تحديد ما إذا كنا نريد استخدام التدريب بالدقة المختلطة، وسيتولى الأمر نيابة عنا في مكالمة [`prepare`]. +أثناء مكالمة [`prepare`](https://huggingface.co/docs/accelerate/package_reference/accelerator#accelerate.Accelerator.prepare)، +سيتم أيضًا توزيع برنامج التغذية التلقائية عبر العمال في حالة استخدام وحدات معالجة الرسومات (GPU) متعددة. نستخدم نفس [محسن 8 بت](#8-bit-adam) من المثال السابق. + +أخيرًا، يمكننا إضافة حلقة التدريب الرئيسية. لاحظ أن مكالمة `backward` تتم من خلال 🤗 Accelerate. يمكننا أيضًا أن نرى +كيف يعمل تراكم التدرجات: نقوم بتطبيع الخسارة، لذلك نحصل على المتوسط في نهاية التراكم وبمجرد أن يكون لدينا +خطوات كافية، نقوم بتشغيل التحسين. + +لا يتطلب تنفيذ تقنيات التحسين هذه باستخدام 🤗 Accelerate سوى بضع أسطر من التعليمات البرمجية وتأتي بميزة المرونة في حلقة التدريب. للحصول على وثائق كاملة لجميع الميزات، راجع [وثائق Accelerate](https://huggingface.co/docs/accelerate/index). + +## البرامج الفعالة مسبقة البناء + +تأتي إصدارات PyTorch [pip وconda](https://pytorch.org/get-started/locally/#start-locally) مُجمَّعة مسبقًا مع حزمة CUDA toolkit +التي تكون كافية لتشغيل PyTorch، ولكنها غير كافية إذا كنت بحاجة إلى إنشاء ملحقات CUDA. + +في بعض الأحيان، قد تكون هناك حاجة إلى بذل جهود إضافية لبناء بعض المكونات مسبقًا. على سبيل المثال، إذا كنت تستخدم مكتبات مثل `apex` التي +لا تأتي مجمعة مسبقًا. في مواقف أخرى، قد يكون من الصعب معرفة كيفية تثبيت حزمة CUDA toolkit على مستوى النظام. +لمعالجة هذه السيناريوهات، أصدرت PyTorch وNVIDIA إصدارًا جديدًا من حاوية NGC docker التي تأتي بالفعل مع +كل شيء مُجمَّع مسبقًا. ما عليك سوى تثبيت برامجك عليه، وسيعمل على الفور. + +هذا النهج مفيد أيضًا إذا كنت تريد ضبط مصدر pytorch و/أو إجراء بناء مخصص جديد. +لعثور على إصدار صورة docker الذي تريده، ابدأ [بملاحظات إصدار PyTorch](https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/)، +واختر أحدث الإصدارات الشهرية. انتقل إلى ملاحظات الإصدار للنسخة المطلوبة، وتحقق من أن مكونات البيئة تتطابق مع احتياجاتك (بما في ذلك متطلبات برنامج تشغيل NVIDIA!) ثم في أعلى تلك الوثيقة، انتقل +إلى صفحة NGC المقابلة. إذا ضللت الطريق لسبب ما، فهذا هو [فهرس جميع صور NGC PyTorch](https://ngc.nvidia.com/catalog/containers/nvidia:pytorch). + +بعد ذلك، اتبع التعليمات لتنزيل صورة docker ونشرها. + +## مزيج من الخبراء + +أبلغت بعض الأوراق البحثية الحديثة عن زيادة سرعة التدريب بمقدار 4-5 مرات وزيادة سرعة الاستدلال عن طريق دمج +مزيج من الخبراء (MoE) في نماذج المحول. + +نظرًا لاكتشاف أن المزيد من المعلمات يؤدي إلى أداء أفضل، تسمح هذه التقنية بزيادة +عدد المعلمات بمقدار درجة دون زيادة تكاليف التدريب. + +في هذا النهج، يتم استبدال كل طبقة شبكة عصبية اصطناعية أخرى بطبقة MoE تتكون من العديد من الخبراء، مع دالة بوابة +تدرب كل خبير بطريقة متوازنة اعتمادًا على موضع رمز الإدخال في تسلسل. +![محول MoE 2x block](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/perf-moe-transformer.png) + +(المصدر: [GLAM](https://ai.googleblog.com/2021/12/more-efficient-in-context-learning-with.html)) + +يمكنك العثور على تفاصيل شاملة وجداول مقارنة في الأوراق البحثية المدرجة في نهاية هذا القسم. + +الجانب السلبي الرئيسي لهذا النهج هو أنه يتطلب كميات هائلة من ذاكرة GPU - أكبر بحوالي درجة من مكافئها الكثيف. تم اقتراح تقطير ونهج مختلفة للتغلب على متطلبات الذاكرة الأعلى بكثير. + +هناك مقايضة مباشرة، فيمكنك استخدام عدد قليل من الخبراء مع نموذج أساسي أصغر بمقدار 2-3 مرات بدلاً من عشرات أو +مئات الخبراء مما يؤدي إلى نموذج أصغر بمقدار 5 مرات وبالتالي زيادة سرعة التدريب بشكل معتدل مع زيادة +متطلبات الذاكرة بشكل معتدل أيضًا. + +تم بناء معظم الأوراق البحثية والتنفيذات ذات الصلة حول Tensorflow/TPUs: + +- [GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding](https://arxiv.org/abs/2006.16668) +- [Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity](https://arxiv.org/abs/2101.03961) +- [GLaM: Generalist Language Model (GLaM)](https://ai.googleblog.com/2021/12/more-efficient-in-context-learning-with.html) + +وبالنسبة لـ Pytorch، فقد قامت DeepSpeed ببنائه أيضًا: [DeepSpeed-MoE: Advancing Mixture-of-Experts Inference and Training to Power Next-Generation AI Scale](https://arxiv.org/abs/2201.05596)، [Mixture of Experts](https://www.deepspeed.ai/tutorials/mixture-of-experts/) - منشورات المدونة: [1](https://www.microsoft.com/en-us/research/blog/deepspeed-powers-8x-larger-moe-model-training-with-high-performance/)، [2](https://www.microsoft.com/en-us/research/publication/scalable-and-efficient-moe-training-for-multitask-multilingual-models/) والنشر المحدد مع نماذج توليد اللغة الطبيعية الكبيرة القائمة على المحول: [منشور المدونة](https://www.deepspeed.ai/2021/12/09/deepspeed-moe-nlg.html)، [فرع Megatron-Deepspeed](https://github.com/microsoft/Megatron-DeepSpeed/tree/moe-training). + +## استخدام PyTorch native attention وFlash Attention + +يمكن لـ PyTorch [`torch.nn.functional.scaled_dot_product_attention`](https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention.html) (SDPA) أيضًا استدعاء FlashAttention واهتمامات فعالة من حيث الذاكرة في الخلفية. يجري حاليًا إضافة دعم SDPA بشكل أصلي في Transformers ويتم استخدامه بشكل افتراضي لـ `torch>=2.1.1` عند توفر التنفيذ. يرجى الرجوع إلى [اهتمام PyTorch بمُنتج النقاط المُدرج](https://huggingface.co/docs/transformers/perf_infer_gpu_one#pytorch-scaled-dot-product-attention) للحصول على قائمة بالنماذج المدعومة والمزيد من التفاصيل. + +تفقد هذا [المنشور](https://pytorch.org/blog/out-of-the-box-acceleration/) لمعرفة المزيد حول التسريع ووفورات الذاكرة باستخدام SDPA. \ No newline at end of file From e43eb3babd3e3c46f37ced089d379a07f8b3c6f2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:57 +0300 Subject: [PATCH 037/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/add=5Fnew=5Fmodel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/add_new_model.md | 439 ++++++++++++++++++++++++++++++++ 1 file changed, 439 insertions(+) create mode 100644 docs/source/ar/add_new_model.md diff --git a/docs/source/ar/add_new_model.md b/docs/source/ar/add_new_model.md new file mode 100644 index 00000000000000..57b697319ddc9c --- /dev/null +++ b/docs/source/ar/add_new_model.md @@ -0,0 +1,439 @@ +# كيف تضيف نموذجًا إلى 🤗 Transformers؟ + +مكتبة 🤗 Transformers قادرة في كثير من الأحيان على تقديم نماذج جديدة بفضل المساهمين من المجتمع. ولكن يمكن أن يكون هذا مشروعًا صعبًا ويتطلب معرفة متعمقة بمكتبة 🤗 Transformers والنموذج الذي سيتم تنفيذه. في Hugging Face، نحاول تمكين المزيد من المجتمع للمساهمة بنشاط في إضافة النماذج، وقد قمنا بتجميع هذا الدليل لاصطحابك خلال عملية إضافة نموذج PyTorch (تأكد من تثبيت [PyTorch](https://pytorch.org/get-started/locally/)). + +على طول الطريق، سوف: + +- الحصول على رؤى حول أفضل الممارسات مفتوحة المصدر +- فهم مبادئ التصميم وراء واحدة من أكثر المكتبات شعبية في التعلم العميق +- تعلم كيفية اختبار النماذج الكبيرة بكفاءة +- تعلم كيفية دمج أدوات Python مثل `black`، و`ruff`، و`make fix-copies` لضمان نظافة الكود وقابليته للقراءة + +سيكون أحد أعضاء فريق Hugging Face متاحًا لمساعدتك على طول الطريق، لذلك لن تكون بمفردك أبدًا. 🤗 ❤️ + +لتبدأ، قم بفتح [إضافة نموذج جديد](https://github.com/huggingface/transformers/issues/new?assignees=&labels=New+model&template=new-model-addition.yml) لإصدار النموذج الذي تريد رؤيته في 🤗 Transformers. إذا لم تكن مهتمًا بشكل خاص بالمساهمة بنموذج محدد، فيمكنك تصفية [علامة النموذج الجديد](https://github.com/huggingface/transformers/labels/New%20model) لمعرفة ما إذا كانت هناك أي طلبات نموذج غير مستلمة والعمل عليها. + +بمجرد فتح طلب نموذج جديد، تتمثل الخطوة الأولى في التعرف على 🤗 Transformers إذا لم تكن كذلك بالفعل! + +## نظرة عامة على 🤗 Transformers + +أولاً، يجب أن تحصل على نظرة عامة حول 🤗 Transformers. 🤗 Transformers هي مكتبة ذات آراء قوية، لذلك هناك +احتمال ألا تتفق مع بعض فلسفات المكتبة أو خيارات التصميم الخاصة بها. ومع ذلك، من تجربتنا، وجدنا أن خيارات التصميم والفلسفات الأساسية للمكتبة أمر بالغ الأهمية لزيادة حجم 🤗 +Transformers مع الحفاظ على تكاليف الصيانة عند مستوى معقول. + +نقطة بداية جيدة لفهم المكتبة بشكل أفضل هي قراءة [وثائق فلسفتنا](philosophy). وكنتيجة لطريقتنا في العمل، هناك بعض الخيارات التي نحاول تطبيقها على جميع النماذج: + +- التكوين مفضل بشكل عام على التجريد +- لا يعد تكرار الكود أمرًا سيئًا دائمًا إذا كان يحسن بشكل كبير قابلية قراءة النموذج أو إمكانية الوصول إليه +- ملفات النماذج ذاتية الاحتواء قدر الإمكان بحيث عند قراءة كود نموذج محدد، فأنت بحاجة فقط + للنظر في ملف `modeling_....py` المقابل. + +في رأينا، فإن كود المكتبة ليس مجرد وسيلة لتوفير منتج، على سبيل المثال، القدرة على استخدام BERT للاستدلال، ولكن أيضًا كمنتج نريد تحسينه. وبالتالي، عند إضافة نموذج، فإن المستخدم ليس فقط +الشخص الذي سيستخدم نموذجك، ولكن أيضًا كل من سيقرأ كودك ويحاول فهمه وربما تعديله. + +مع وضع ذلك في الاعتبار، دعنا نتعمق قليلاً في التصميم العام للمكتبة. + +### نظرة عامة على النماذج + +لإضافة نموذج بنجاح، من المهم فهم التفاعل بين نموذجك وتكوينه، +[`PreTrainedModel`]، و [`PretrainedConfig`]. ولأغراض التوضيح، سنطلق على النموذج الذي سيتم إضافته إلى 🤗 Transformers اسم `BrandNewBert`. + +دعنا نلقي نظرة: + + + +كما ترى، فإننا نستخدم الوراثة في 🤗 Transformers، ولكننا نبقي مستوى التجريد عند الحد الأدنى المطلق. لا يوجد أبدًا أكثر من مستويين من التجريد لأي نموذج في المكتبة. `BrandNewBertModel` +يرث من `BrandNewBertPreTrainedModel` الذي بدوره يرث من [`PreTrainedModel`] وهذا كل شيء. كقاعدة عامة، نريد التأكد من أن النموذج الجديد يعتمد فقط على +[`PreTrainedModel`]. الوظائف المهمة التي يتم توفيرها تلقائيًا لأي نموذج جديد هي [`~PreTrainedModel.from_pretrained`] و +[`~PreTrainedModel.save_pretrained`]، والتي تستخدم للتسلسل واللإلغاء التسلسل. جميع +الوظائف المهمة الأخرى، مثل `BrandNewBertModel.forward` يجب أن تكون محددة بالكامل في النص الجديد +`modeling_brand_new_bert.py`. بعد ذلك، نريد التأكد من أن النموذج بطبقة رأس محددة، مثل +`BrandNewBertForMaskedLM` لا يرث من `BrandNewBertModel`، ولكنه يستخدم `BrandNewBertModel` +كمكون يمكن استدعاؤه في تمريره للأمام للحفاظ على مستوى التجريد منخفضًا. يتطلب كل نموذج جديد +فئة تكوين، تسمى `BrandNewBertConfig`. يتم دائمًا تخزين هذا التكوين كسمة في +[`PreTrainedModel`]، وبالتالي يمكن الوصول إليه عبر السمة `config` لجميع الفئات +التي ترث من `BrandNewBertPreTrainedModel`: + +```python +model = BrandNewBertModel.from_pretrained("brandy/brand_new_bert") +model.config # model has access to its config +``` + +مشابه للنموذج، يرث التكوين وظائف التسلسل وإلغاء التسلسل الأساسية من +[`PretrainedConfig`]. لاحظ أن التكوين والنموذج يتم تسلسلهما دائمًا إلى تنسيقين مختلفين - النموذج إلى ملف *pytorch_model.bin* والتكوين إلى ملف *config.json*. يؤدي استدعاء +[`~PreTrainedModel.save_pretrained`] للنموذج إلى استدعاء +[`~PretrainedConfig.save_pretrained`] للتكوين، بحيث يتم حفظ كل من النموذج والتكوين. + + +### أسلوب الترميز + +عند كتابة كود نموذجك الجديد، ضع في اعتبارك أن Transformers هي مكتبة ذات آراء قوية ولدينا بعض الغرابة الخاصة بنا فيما يتعلق بكيفية كتابة الكود :-) + +1. يجب كتابة تمرير النموذج للأمام بالكامل في ملف النمذجة مع الاستقلال التام عن النماذج الأخرى في المكتبة. إذا كنت تريد إعادة استخدام كتلة من نموذج آخر، فقم بنسخ الكود ولصقه مع +تعليق `# Copied from` في الأعلى (انظر [هنا](https://github.com/huggingface/transformers/blob/v4.17.0/src/transformers/models/roberta/modeling_roberta.py#L160) +لمثال جيد و [هنا](pr_checks#check-copies) لمزيد من الوثائق حول "Copied from"). +2. يجب أن يكون الكود مفهومًا تمامًا، حتى لغير المتحدثين الأصليين باللغة الإنجليزية. وهذا يعني أنه يجب عليك اختيار +أسماء متغيرات وصفية وتجنب الاختصارات. على سبيل المثال، يفضل `activation` على `act`. +يتم التثبيط بشدة من استخدام أسماء متغيرات مكونة من حرف واحد ما لم يكن مؤشرًا في حلقة for. +3. بشكل أكثر عمومية، نفضل الكود الطويل الصريح على الكود السحري القصير. +4. تجنب الوراثة الفرعية لـ `nn.Sequential` في PyTorch ولكن ورث من `nn.Module` واكتب تمرير النموذج للأمام، بحيث يمكن لأي شخص +يستخدم كودك أن يقوم بالتصحيح السريع عن طريق إضافة عبارات الطباعة أو نقاط التوقف. +5. يجب أن يكون توقيع الدالة الخاص بك معنونًا بالنوع. بالنسبة للباقي، أسماء المتغيرات الجيدة أكثر قابلية للقراءة والفهم من علامات النوع. + +### نظرة عامة على المحللات + +لسنا مستعدين لذلك بعد :-( سيتم إضافة هذا القسم قريبًا! + +## وصفة خطوة بخطوة لإضافة نموذج إلى 🤗 Transformers + +لدى الجميع تفضيلات مختلفة لكيفية نقل نموذج، لذا قد يكون من المفيد لك أن تلقي نظرة على ملخصات حول كيفية قيام المساهمين الآخرين بنقل النماذج إلى Hugging Face. فيما يلي قائمة منشورات المجتمع حول كيفية نقل نموذج: +1. [نقل نموذج GPT2](https://medium.com/huggingface/from-tensorflow-to-pytorch-265f40ef2a28) بقلم [Thomas](https://huggingface.co/thomwolf) +2. [نقل نموذج WMT19 MT](https://huggingface.co/blog/porting-fsmt) بقلم [Stas](https://huggingface.co/stas) + +من تجربتنا، يمكننا أن نخبرك بأن أهم الأشياء التي يجب مراعاتها عند إضافة نموذج هي: + +- لا تعيد اختراع العجلة! معظم أجزاء الكود الذي ستضيفه لنموذج 🤗 Transformers الجديد موجودة بالفعل + في مكان ما في 🤗 Transformers. خذ بعض الوقت للعثور على نماذج ومحللات مماثلة موجودة بالفعل يمكنك النسخ منها. [grep](https://www.gnu.org/software/grep/) و [rg](https://github.com/BurntSushi/ripgrep) هما صديقانك. لاحظ أنه قد يحدث جيدًا أن تكون محول نموذجك النصي مستندًا إلى تنفيذ نموذج واحد، + وكود نمذجة نموذجك مستندًا إلى نموذج آخر. على سبيل المثال، يعتمد كود نمذجة FSMT على BART، بينما يعتمد كود محول رموز FSMT النصي على XLM. +- إنه تحدٍ هندسي أكثر من كونه تحديًا علميًا. يجب أن تقضي المزيد من الوقت في إنشاء + بيئة تصحيح فعالة بدلاً من محاولة فهم جميع الجوانب النظرية للنموذج في الورقة. +- اطلب المساعدة عندما تواجه مشكلة! النماذج هي المكون الأساسي لـ 🤗 Transformers، لذلك نحن في Hugging Face سعداء جدًا لمساعدتك في كل خطوة لإضافة نموذجك. لا تتردد في السؤال إذا لاحظت أنك لا تحقق أي تقدم. + +فيما يلي، نحاول تقديم وصفة عامة وجدناها الأكثر فائدة عند نقل نموذج إلى 🤗 Transformers. + +القائمة التالية هي ملخص لكل ما يجب القيام به لإضافة نموذج ويمكنك استخدامه كقائمة مرجعية: + +☐ (اختياري) فهم الجوانب النظرية للنموذج
+☐ إعداد بيئة تطوير 🤗 Transformers
+☐ إعداد بيئة تصحيح المستودع الأصلي
+☐ إنشاء نص برمجي يقوم بتشغيل تمرير `forward()` باستخدام المستودع الأصلي ونقطة المراقبة
+☐ إضافة هيكل النموذج بنجاح إلى 🤗 Transformers
+☐ تحويل نقطة المراقبة الأصلية بنجاح إلى نقطة مراقبة 🤗 Transformers
+☐ تشغيل تمرير `forward()` في 🤗 Transformers الذي يعطي نفس الإخراج لنقطة المراقبة الأصلية
+☐ الانتهاء من اختبارات النموذج في 🤗 Transformers
+☐ إضافة المحلل بنجاح في 🤗 Transformers
+☐ تشغيل اختبارات التكامل من النهاية إلى النهاية
+☐ الانتهاء من الوثائق
+☐ تحميل أوزان النموذج إلى Hub
+☐ إرسال طلب السحب
+☐ (اختياري) إضافة دفتر ملاحظات توضيحي + +في البداية، نوصي عادةً بالبدء بالحصول على فهم نظري جيد لـ `BrandNewBert`. ومع ذلك، +إذا كنت تفضل فهم الجوانب النظرية للنموذج أثناء العمل، فيمكنك الانتقال مباشرةً إلى قاعدة كود `BrandNewBert`. قد يناسبك هذا الخيار بشكل أفضل إذا كانت مهاراتك الهندسية أفضل من مهاراتك النظرية، أو إذا كنت تواجه صعوبة في فهم ورقة `BrandNewBert`، أو إذا كنت تستمتع بالبرمجة أكثر من قراءة الأوراق العلمية. + +### 1. (اختياري) الجوانب النظرية لـ BrandNewBert + +يجب أن تأخذ بعض الوقت لقراءة ورقة *BrandNewBert*، إذا كان هناك عمل وصفي. قد تكون هناك أجزاء كبيرة من الورقة يصعب فهمها. إذا كان الأمر كذلك، فلا بأس - لا تقلق! الهدف ليس هو الحصول على فهم نظري عميق للورقة، ولكن لاستخراج المعلومات اللازمة ل +إعادة تنفيذ النموذج في 🤗 Transformers. هذا لا يعني أنه لا يتعين عليك قضاء الكثير من الوقت في الجوانب النظرية، ولكن التركيز على الجوانب العملية، وهي: +- ما نوع نموذج *brand_new_bert*؟ نموذج تشفير فقط مثل BERT؟ نموذج فك تشفير فقط مثل GPT2؟ نموذج ترميز وفك تشفير مثل BART؟ راجع [model_summary](model_summary) إذا لم تكن على دراية بالاختلافات بين تلك النماذج. +- ما هي تطبيقات *brand_new_bert*؟ تصنيف النصوص؟ توليد النصوص؟ مهام Seq2Seq، على سبيل المثال، + تلخيص؟ +- ما هي الميزة الجديدة للنموذج التي تجعله مختلفًا عن BERT/GPT-2/BART؟ +- أي من نماذج [🤗 Transformers](https://huggingface.co/transformers/#contents) الموجودة تشبه *brand_new_bert*؟ +- ما نوع المحلل المستخدم؟ محلل sentencepiece؟ محلل word piece؟ هل هو نفس المحلل المستخدم لـ BERT أو BART؟ + +بعد أن تشعر أنك حصلت على نظرة عامة جيدة عن بنية النموذج، قد ترغب في الكتابة إلى +فريق Hugging Face بأي أسئلة قد تكون لديك. قد يتضمن ذلك أسئلة حول بنية النموذج، +طبقة الاهتمام، إلخ. سنكون سعداء لمساعدتك. + +### 2. قم بإعداد بيئتك + +1. قم بتشعب المستودع [repository](https://github.com/huggingface/transformers) بالنقر فوق زر "Fork" في صفحة المستودع. يقوم هذا بإنشاء نسخة من الكود في حساب GitHub الخاص بك. + +2. قم باستنساخ تشعب `transformers` الخاص بك إلى القرص المحلي الخاص بك، وأضف المستودع الأساسي كجهاز بعيد: + + ```bash + git clone https://github.com/[your Github handle]/transformers.git + cd transformers + git remote add upstream https://github.com/huggingface/transformers.git + ``` + +3. قم بإعداد بيئة تطوير، على سبيل المثال عن طريق تشغيل الأمر التالي: + + ```bash + python -m venv .env + source .env/bin/activate + pip install -e ".[dev]" + ``` + + اعتمادًا على نظام التشغيل الخاص بك، ونظرًا لأن عدد التبعيات الاختيارية لـ Transformers يتزايد، فقد تحصل على فشل بهذا الأمر. إذا كان الأمر كذلك، فتأكد من تثبيت إطار عمل Deep Learning الذي تعمل معه +(PyTorch، وTensorFlow، و/أو Flax)، ثم قم بما يلي: + + ```bash + pip install -e ".[quality]" + ``` + + يجب أن يكون هذا كافيًا لمعظم حالات الاستخدام. يمكنك بعد ذلك العودة إلى الدليل الرئيسي + + ```bash + cd .. + ``` + +4. نوصي بإضافة إصدار PyTorch من *brand_new_bert* إلى Transformers. لتثبيت PyTorch، يرجى اتباع التعليمات على https://pytorch.org/get-started/locally/. + + **ملاحظة:** لا تحتاج إلى تثبيت CUDA. يكفي أن يعمل النموذج الجديد على وحدة المعالجة المركزية. + +5. لنقل *brand_new_bert*، ستحتاج أيضًا إلى الوصول إلى مستودعه الأصلي: + + ```bash + git clone https://github.com/org_that_created_brand_new_bert_org/brand_new_bert.git + cd brand_new_bert + pip install -e . + ``` + +الآن قمت بإعداد بيئة تطوير لنقل *brand_new_bert* إلى 🤗 Transformers. + +### 3.-4. تشغيل نقطة مراقبة مُدربة مسبقًا باستخدام المستودع الأصلي + +في البداية، ستعمل على المستودع الأصلي لـ *brand_new_bert*. غالبًا ما يكون التنفيذ الأصلي "بحثًا". وهذا يعني أن الوثائق قد تكون مفقودة وقد يكون الكود صعب الفهم. ولكن يجب أن يكون هذا هو دافعك لإعادة تنفيذ *brand_new_bert*. في Hugging Face، يتمثل أحد أهدافنا الرئيسية في *مساعدة الناس +على الوقوف على أكتاف العمالقة* والتي تترجم هنا جيدًا إلى أخذ نموذج عامل وإعادة كتابته لجعله **سهل الوصول إليه وسهل الاستخدام وجميل** قدر الإمكان. هذه هي الدافع الرئيسي لإعادة تنفيذ النماذج في 🤗 Transformers - محاولة جعل تقنية NLP الجديدة المعقدة في متناول **الجميع**. + +يجب أن تبدأ بالغوص في المستود +لم يتم العثور على ملفات الترجمة الخاصة بالنموذج المطلوب، يرجى التأكد من وجود الملفات وتوفيرها لي حتى أتمكن من ترجمتها. +لن يتم ترجمة النصوص البرمجية وروابط و رموز HTML و CSS الخاصة بالنص الأصلي. سيتم ترجمة النص الموجود في الفقرات والعناوين فقط. + +**6. كتابة برنامج تحويل** + +بعد ذلك، يجب عليك كتابة برنامج تحويل يسمح لك بتحويل نقطة التفتيش التي استخدمتها لتصحيح أخطاء *brand_new_bert* في المستودع الأصلي إلى نقطة تفتيش متوافقة مع تنفيذك لـ *brand_new_bert* في مكتبة 🤗 Transformers. لا يُنصح بكتابة برنامج التحويل من الصفر، ولكن بدلاً من ذلك، قم بالبحث في برامج التحويل الموجودة مسبقًا في 🤗 Transformers عن برنامج تم استخدامه لتحويل نموذج مشابه تم كتابته في نفس الإطار مثل *brand_new_bert*. عادةً، يكون من الكافي نسخ برنامج تحويل موجود مسبقًا وتعديله قليلاً ليناسب حالتك. لا تتردد في طلب المساعدة من فريق Hugging Face للإشارة إلى برنامج تحويل مشابه موجود مسبقًا لنموذجك. + +- إذا كنت تقوم بنقل نموذج من TensorFlow إلى PyTorch، فقد تكون نقطة بداية جيدة هي برنامج تحويل BERT الموجود [هنا](https://github.com/huggingface/transformers/blob/7acfa95afb8194f8f9c1f4d2c6028224dbed35a2/src/transformers/models/bert/modeling_bert.py#L91). +- إذا كنت تقوم بنقل نموذج من PyTorch إلى PyTorch، فقد تكون نقطة بداية جيدة هي برنامج تحويل BART الموجود [هنا](https://github.com/huggingface/transformers/blob/main/src/transformers/models/bart/convert_bart_original_pytorch_checkpoint_to_pytorch.py). + +فيما يلي، سنشرح بسرعة كيف تقوم نماذج PyTorch بتخزين أوزان الطبقات وتعريف أسماء الطبقات. في PyTorch، يتم تعريف اسم الطبقة بواسطة اسم وسيلة الفئة التي تعطيها للطبقة. دعنا نحدد نموذجًا وهميًا في PyTorch، يسمى `SimpleModel` كما يلي: + +```python +from torch import nn + + +class SimpleModel(nn.Module): + def __init__(self): + super().__init__() + self.dense = nn.Linear(10, 10) + self.intermediate = nn.Linear(10, 10) + self.layer_norm = nn.LayerNorm(10) +``` + +الآن يمكننا إنشاء مثيل من هذا التعريف النموذجي والذي سيملأ جميع الأوزان: `dense`، `intermediate`، `layer_norm` بأوزان عشوائية. يمكننا طباعة النموذج لمعرفة بنائه: + +```python +model = SimpleModel() + +print(model) +``` + +سيقوم هذا بطباعة ما يلي: + +``` +SimpleModel( + (dense): Linear(in_features=10, out_features=10, bias=True) + (intermediate): Linear(in_features=10, out_features=10, bias=True) + (layer_norm): LayerNorm((10,), eps=1e-05, elementwise_affine=True) +) +``` + +يمكننا أن نرى أن أسماء الطبقات يتم تعريفها بواسطة اسم وسيلة الفئة في PyTorch. يمكنك طباعة قيم الوزن لطبقة محددة: + +```python +print(model.dense.weight.data) +``` + +لترى أن الأوزان تم تهيئتها بشكل عشوائي: + +``` +tensor([[-0.0818, 0.2207, -0.0749, -0.0030, 0.0045, -0.1569, -0.1598, 0.0212, + -0.2077, 0.2157], + [ 0.1044, 0.0201, 0.0990, 0.2482, 0.3116, 0.2509, 0.2866, -0.2190, + 0.2166, -0.0212], + [-0.2000, 0.1107, -0.1999, -0.3119, 0.1559, 0.0993, 0.1776, -0.1950, + -0.1023, -0.0447], + [-0.0888, -0.1092, 0.2281, 0.0336, 0.1817, -0.0115, 0.2096, 0.1415, + -0.1876, -0.2467], + [ 0.2208, -0.2352, -0.1426, -0.2636, -0.2889, -0.2061, -0.2849, -0.0465, + 0.2577, 0.0402], + [ 0.1502, 0.2465, 0.2566, 0.0693, 0.2352, -0.0530, 0.1859, -0.0604, + 0.2132, 0.1680], + [ 0.1733, -0.2407, -0.1721, 0.1484, 0.0358, -0.0633, -0.0721, -0.0090, + 0.2707, -0.2509], + [-0.1173, 0.1561, 0.2945, 0.0595, -0.1996, 0.2988, -0.0802, 0.0407, + 0.1829, -0.1568], + [-0.1164, -0.2228, -0.0403, 0.0428, 0.1339, 0.0047, 0.1967, 0.2923, + 0.0333, -0.0536], + [-0.1492, -0.1616, 0.1057, 0.1950, -0.2807, -0.2710, -0.1586, 0.0739, + 0.2220, 0.2358]]). +``` + +في برنامج التحويل، يجب عليك ملء الأوزان التي تم تهيئتها بشكل عشوائي بأوزان الطبقة المطابقة في نقطة التفتيش. على سبيل المثال: + +```python +# retrieve matching layer weights, e.g. by +# recursive algorithm +layer_name = "dense" +pretrained_weight = array_of_dense_layer + +model_pointer = getattr(model, "dense") + +model_pointer.weight.data = torch.from_numpy(pretrained_weight) +``` + +بينما تفعل ذلك، يجب عليك التحقق من أن كل وزن تم تهيئته بشكل عشوائي في نموذج PyTorch الخاص بك ووزن نقطة التفتيش المطابق له يتطابق تمامًا في كل من **الشكل والاسم**. للقيام بذلك، من **الضروري** إضافة عبارات التأكيد للشكل وطباعة أسماء أوزان نقطة التفتيش. على سبيل المثال، يجب عليك إضافة عبارات مثل: + +```python +assert ( + model_pointer.weight.shape == pretrained_weight.shape +), f"Pointer shape of random weight {model_pointer.shape} and array shape of checkpoint weight {pretrained_weight.shape} mismatched" +``` + +بالإضافة إلى ذلك، يجب عليك أيضًا طباعة أسماء كلا الوزنين للتأكد من تطابقهما، على سبيل المثال: + +```python +logger.info(f"Initialize PyTorch weight {layer_name} from {pretrained_weight.name}") +``` + +إذا لم يتطابق الشكل أو الاسم، فمن المحتمل أنك عينت وزن نقطة تفتيش خاطئة لطبقة تم تهيئتها بشكل عشوائي في تنفيذ 🤗 Transformers. + +يرجع عدم تطابق الشكل على الأرجح إلى إعداد خاطئ لمعلمات التهيئة في `BrandNewBertConfig()` والتي لا تتطابق تمامًا مع تلك المستخدمة لنقطة التفتيش التي تريد تحويلها. ومع ذلك، فقد يكون أيضًا أن تنفيذ PyTorch للطبقة يتطلب نقل الوزن مسبقًا. + +أخيرًا، يجب عليك أيضًا التحقق من أن **جميع** الأوزان المطلوبة قد تم تهيئتها وطباعة جميع أوزان نقطة التفتيش التي لم يتم استخدامها للتهيئة للتأكد من تحويل النموذج بشكل صحيح. من الطبيعي تمامًا أن تفشل محاولات التحويل بعبارة شكل خاطئة أو تعيين اسم خاطئ. يرجع هذا على الأرجح إلى أنك استخدمت معلمات غير صحيحة في `BrandNewBertConfig()`، أو لديك بنية خاطئة في تنفيذ 🤗 Transformers، أو لديك خطأ في وظائف `init()` لأحد مكونات تنفيذ 🤗 Transformers، أو تحتاج إلى نقل أحد أوزان نقطة التفتيش. + +يجب تكرار هذه الخطوة مع الخطوة السابقة حتى يتم تحميل جميع أوزان نقطة التفتيش بشكل صحيح في نموذج Transformers. بعد تحميل نقطة التفتيش بشكل صحيح في تنفيذ 🤗 Transformers، يمكنك بعد ذلك حفظ النموذج في مجلد من اختيارك `/path/to/converted/checkpoint/folder` والذي يجب أن يحتوي بعد ذلك على كل من ملف `pytorch_model.bin` وملف `config.json`: + +```python +model.save_pretrained("/path/to/converted/checkpoint/folder") +``` + +**7. تنفيذ تمرير للأمام** + +بعد أن تمكنت من تحميل الأوزان المُدربة مسبقًا في تنفيذ 🤗 Transformers، يجب عليك الآن التأكد من تنفيذ تمرير للأمام بشكل صحيح. في [تعرف على المستودع الأصلي](#3-4-run-a-pretrained-checkpoint-using-the-original-repository)، قمت بالفعل بإنشاء برنامج يقوم بتشغيل تمرير للأمام للنموذج باستخدام المستودع الأصلي. الآن يجب عليك كتابة برنامج مماثل باستخدام تنفيذ 🤗 Transformers بدلاً من الأصلي. يجب أن يبدو كما يلي: + +```python +model = BrandNewBertModel.from_pretrained("/path/to/converted/checkpoint/folder") +input_ids = [0, 4, 4, 3, 2, 4, 1, 7, 19] +output = model(input_ids).last_hidden_states +``` + +من المحتمل جدًا ألا يعطي تنفيذ 🤗 Transformers والتنفيذ الأصلي نفس الإخراج في المرة الأولى أو أن تمرير للأمام يرمي خطأ. لا تشعر بخيبة أمل - هذا متوقع! أولاً، يجب عليك التأكد من أن تمرير للأمام لا يرمي أي أخطاء. غالبًا ما يحدث أن الأبعاد الخاطئة تؤدي إلى خطأ "عدم تطابق الأبعاد" أو أنه يتم استخدام نوع بيانات خاطئ، على سبيل المثال `torch.long` بدلاً من `torch.float32`. لا تتردد في طلب المساعدة من فريق Hugging Face إذا لم تتمكن من حل أخطاء معينة. + +الجزء النهائي للتأكد من أن تنفيذ 🤗 Transformers يعمل بشكل صحيح هو التأكد من أن الإخراج مكافئ بدقة `1e-3`. أولاً، يجب التأكد من أن أشكال الإخراج متطابقة، أي يجب أن يعطي `outputs.shape` نفس القيمة لكل من برنامج تنفيذ 🤗 Transformers والتنفيذ الأصلي. بعد ذلك، يجب التأكد من أن قيم الإخراج متطابقة أيضًا. هذه واحدة من أصعب الأجزاء في إضافة نموذج جديد. الأخطاء الشائعة التي تجعل الإخراج غير متطابق هي: + +- لم يتم إضافة بعض الطبقات، أي لم يتم إضافة طبقة "تنشيط" أو تم نسيان الاتصال المتبقي +- لم يتم ربط مصفوفة تضمين الكلمات +- يتم استخدام تضمينات موضعية خاطئة لأن التنفيذ الأصلي يستخدم إزاحة +- يتم تطبيق الإسقاط أثناء تمرير للأمام. لإصلاح هذا، تأكد من أن *model.training* هي False وأنه لم يتم تنشيط أي إسقاط أثناء تمرير للأمام، أي قم بتمرير *self.training* إلى [الإسقاط الوظيفي لـ PyTorch](https://pytorch.org/docs/stable/nn.functional.html?highlight=dropout#torch.nn.functional.dropout) +أفضل طريقة لإصلاح المشكلة هي عادةً النظر في تمرير للأمام للتنفيذ الأصلي وتنفيذ 🤗 Transformers جنبًا إلى جنب والتحقق مما إذا كان هناك أي اختلافات. تتمثل إحدى الطرق البسيطة والفعالة في إضافة العديد من عبارات الطباعة في كل من التنفيذ الأصلي وتنفيذ 🤗 Transformers، في نفس المواضع في الشبكة على التوالي، وإزالة عبارات الطباعة التي تظهر نفس القيم للعروض التقديمية الوسيطة بشكل تدريجي. + +عندما تكون واثقًا من أن كلا التنفيذين يعطيان نفس الإخراج، تحقق من الإخراج باستخدام `torch.allclose(original_output، output، atol=1e-3)`، لقد انتهيت من الجزء الأكثر صعوبة! تهانينا - يجب أن يكون العمل المتبقي سهلاً 😊. + +**8. إضافة جميع اختبارات النموذج الضرورية** + +في هذه المرحلة، قمت بنجاح بإضافة نموذج جديد. ومع ذلك، من الممكن جدًا ألا يتوافق النموذج بعد مع التصميم المطلوب. للتأكد من أن التنفيذ متوافق تمامًا مع 🤗 Transformers، يجب أن تمر جميع الاختبارات الشائعة. يجب أن يكون Cookiecutter قد أضاف تلقائيًا ملف اختبار لنموذجك، ربما تحت `tests/models/brand_new_bert/test_modeling_brand_new_bert.py`. قم بتشغيل ملف الاختبار هذا للتحقق من أن جميع الاختبارات الشائعة قد مرت: + +```bash +pytest tests/models/brand_new_bert/test_modeling_brand_new_bert.py +``` + +بعد إصلاح جميع الاختبارات الشائعة، من الضروري الآن التأكد من أن جميع الأعمال الجيدة التي قمت بها تم اختبارها جيدًا، بحيث: + +- يمكن للمجتمع فهم عملك بسهولة من خلال النظر في اختبارات محددة لـ *brand_new_bert* +- لن تؤدي التغييرات المستقبلية على نموذجك إلى كسر أي ميزة مهمة للنموذج. + +أولاً، يجب إضافة اختبارات التكامل. تقوم اختبارات التكامل هذه أساسًا بنفس ما فعلته برامج التصحيح التي استخدمتها سابقًا لتنفيذ النموذج في 🤗 Transformers. أضاف قالب Cookiecutter بالفعل قالبًا لهذه الاختبارات التكاملية، يسمى `BrandNewBertModelIntegrationTests`، ويجب عليك فقط ملؤه. للتأكد من أن هذه الاختبارات تمر، قم بتشغيل ما يلي: + +```bash +RUN_SLOW=1 pytest -sv tests/models/brand_new_bert/test_modeling_brand_new_bert.py::BrandNewBertModelIntegrationTests +``` + + + +في حالة استخدام Windows، يجب استبدال `RUN_SLOW=1` بـ `SET RUN_SLOW=1` + + + +ثانيًا، يجب اختبار جميع الميزات الخاصة بـ *brand_new_bert* بشكل إضافي في اختبار منفصل تحت `BrandNewBertModelTester`/`BrandNewBertModelTest`. غالبًا ما يتم نسيان هذا الجزء ولكنه مفيد جدًا بطريقتين: + +- يساعد على نقل المعرفة التي اكتسبتها أثناء إضافة النموذج إلى المجتمع من خلال إظهار كيفية عمل الميزات الخاصة لـ *brand_new_bert*. +- يمكن للمساهمين المستقبليين اختبار التغييرات على النموذج بسرعة عن طريق تشغيل هذه الاختبارات الخاصة. + + +**9. تنفيذ برنامج التحليل اللغوي** + +بعد ذلك، يجب علينا إضافة برنامج التحليل اللغوي لـ *brand_new_bert*. عادةً ما يكون برنامج التحليل اللغوي مكافئًا أو مشابهًا جدًا لبرنامج تحليل لغوي موجود مسبقًا في 🤗 Transformers. + +من المهم جدًا العثور على/استخراج ملف برنامج التحليل اللغوي الأصلي وإدارة تحميل هذا الملف في تنفيذ برنامج التحليل اللغوي لـ 🤗 Transformers. + +للتأكد من عمل برنامج التحليل اللغوي بشكل صحيح، يُنصح بإنشاء برنامج نص +لم يتبق سوى القليل! أنت الآن على وشك الانتهاء من إضافة نموذج *brand_new_bert* إلى مكتبة 🤗 Transformers. في هذا الدليل، ستجد جميع الخطوات التي تحتاج إلى اتباعها لإضافة نموذجك الجديد إلى المكتبة. + +**9. إضافة رمز التعرف على الرموز** + +قد تضطر إلى إلقاء نظرة فاحصة مرة أخرى على المستودع الأصلي للعثور على دالة التعرف على الرموز الصحيحة، أو قد تضطر حتى إلى إجراء تغييرات على نسخة المستودع الأصلي لديك لإخراج `input_ids` فقط. بعد كتابة برنامج نصي للتعرف على الرموز يعمل باستخدام المستودع الأصلي، يجب إنشاء برنامج نصي مماثل لـ 🤗 Transformers. يجب أن يبدو مشابهًا لهذا: + +```python +from transformers import BrandNewBertTokenizer + +input_str = "This is a long example input string containing special characters .$?-, numbers 2872 234 12 and words." + +tokenizer = BrandNewBertTokenizer.from_pretrained("/path/to/tokenizer/folder/") + +input_ids = tokenizer(input_str).input_ids +``` + +عندما تعطي كلا من `input_ids` نفس القيم، يجب أيضًا إضافة ملف اختبار للتعرف على الرموز كخطوة أخيرة. + +بالتشابه مع ملفات اختبار النمذجة في *brand_new_bert*، يجب أن تحتوي ملفات اختبار التعرف على رموز *brand_new_bert* على بعض اختبارات التكامل المرمزة ثابتة. + +**10. تشغيل اختبارات التكامل الشاملة** + +بعد إضافة رمز التعرف على الرموز، يجب أيضًا إضافة بعض اختبارات التكامل الشاملة التي تستخدم كل من النموذج والرمز إلى `tests/models/brand_new_bert/test_modeling_brand_new_bert.py` في 🤗 Transformers. + +يجب أن يظهر هذا الاختبار على عينة نصية ذات معنى أن تنفيذ 🤗 Transformers يعمل كما هو متوقع. يمكن أن تتضمن العينة ذات المعنى نصًا مصدريًا إلى زوج ترجمة الهدف، أو مقالًا إلى ملخص، أو سؤالًا إلى إجابة، وما إلى ذلك... إذا لم يتم ضبط دقيق أي من نقاط التفتيش المنقولة على مهمة أسفل النهر، فمن الكافي الاعتماد ببساطة على اختبارات النموذج. كخطوة نهائية لضمان أن النموذج يعمل بشكل كامل، يُنصح بتشغيل جميع الاختبارات على GPU. يمكن أن يحدث أنك نسيت إضافة بعض عبارات `.to(self.device)` إلى المنسوجات الداخلية للنموذج، والتي ستظهر في خطأ في مثل هذا الاختبار. في حالة عدم وجود وصول إلى وحدة معالجة الرسومات (GPU)، يمكن لفريق Hugging Face تشغيل هذه الاختبارات نيابة عنك. + +**11. إضافة Docstring** + +الآن، تمت إضافة جميع الوظائف اللازمة لـ *brand_new_bert* - أنت على وشك الانتهاء! كل ما تبقى هو إضافة Docstring وصفحة Doc لطيفة. يجب أن يكون Cookiecutter قد أضاف ملف قالب يسمى `docs/source/model_doc/brand_new_bert.md` الذي يجب عليك ملؤه. عادةً ما يلقي مستخدمو نموذجك نظرة على هذه الصفحة قبل استخدام نموذجك. وبالتالي، يجب أن تكون الوثائق مفهومة وموجزة. من المفيد جدًا للمجتمع إضافة بعض "النصائح" لإظهار كيفية استخدام النموذج. لا تتردد في الاتصال بفريق Hugging Face بخصوص Docstrings. + +بعد ذلك، تأكد من أن Docstring المضافة إلى `src/transformers/models/brand_new_bert/modeling_brand_new_bert.py` صحيحة وتضمنت جميع المدخلات والمخرجات الضرورية. لدينا دليل مفصل حول كتابة الوثائق وتنسيق Docstring [هنا](writing-documentation). من الجيد دائمًا تذكير المرء بأن الوثائق يجب أن تعامل بعناية مثل الرمز في 🤗 Transformers لأن الوثائق هي عادةً أول نقطة اتصال للمجتمع مع النموذج. + +**إعادة هيكلة التعليمات البرمجية** + +رائع، الآن أضفت جميع التعليمات البرمجية اللازمة لـ *brand_new_bert*. في هذه المرحلة، يجب عليك تصحيح بعض أساليب التعليمات البرمجية غير الصحيحة المحتملة عن طريق تشغيل: + +```bash +make style +``` + +وتأكد من أن أسلوب الترميز الخاص بك يمر بفحص الجودة: + +```bash +make quality +``` + +هناك عدد قليل من الاختبارات التصميمية الصارمة للغاية الأخرى في 🤗 Transformers التي قد لا تزال تفشل، والتي تظهر في اختبارات طلب السحب الخاص بك. غالبًا ما يكون ذلك بسبب بعض المعلومات المفقودة في Docstring أو بعض التسميات غير الصحيحة. سيساعدك فريق Hugging Face بالتأكيد إذا كنت عالقًا هنا. +أخيرًا، من الجيد دائمًا إعادة هيكلة التعليمات البرمجية الخاصة بك بعد التأكد من أن التعليمات البرمجية تعمل بشكل صحيح. مع اجتياز جميع الاختبارات، الآن هو الوقت المناسب للمرور على التعليمات البرمجية المضافة مرة أخرى وإجراء بعض إعادة الهيكلة. + +لقد انتهيت الآن من الجزء البرمجي، تهانينا! 🎉 أنت رائع! 😎 + +**12. تحميل النماذج إلى مركز النماذج** + +في هذا الجزء النهائي، يجب عليك تحويل جميع نقاط التفتيش وتحميلها إلى مركز النماذج وإضافة بطاقة نموذج لكل نموذج تم تحميله نقطة تفتيش. يمكنك التعرف على وظائف المركز من خلال قراءة صفحتنا [مشاركة النموذج والتحميل](model_sharing). يجب أن تعمل جنبًا إلى جنب مع فريق Hugging Face هنا لتحديد اسم مناسب لكل نقطة تفتيش والحصول على حقوق الوصول المطلوبة للتمكن من تحميل النموذج ضمن منظمة مؤلف *brand_new_bert*. تعد طريقة `push_to_hub`، الموجودة في جميع النماذج في `transformers`، طريقة سريعة وفعالة لدفع نقطة تفتيش إلى المركز. يتم لصق جزء صغير أدناه: + +```python +brand_new_bert.push_to_hub("brand_new_bert") +# قم بإلغاء التعليق عن السطر التالي لدفعه إلى منظمة. +# brand_new_bert.push_to_hub("/brand_new_bert") +``` + +من الجدير بالوقت قضاء بعض الوقت في إنشاء بطاقات نموذج مناسبة لكل نقطة تفتيش. يجب أن تبرز بطاقات النموذج الخصائص المحددة لهذه نقطة تفتيش معينة، على سبيل المثال، ما هي مجموعة البيانات التي تم ضبط نقطة التفتيش مسبقًا/ضبطها بدقة؟ ما هي المهمة التي يجب استخدام النموذج لأسفل النهر؟ ويشمل أيضًا بعض التعليمات البرمجية حول كيفية استخدام النموذج بشكل صحيح. + +**13. (اختياري) إضافة دفتر ملاحظات** + +من المفيد جدًا إضافة دفتر ملاحظات يوضح بالتفصيل كيفية استخدام *brand_new_bert* للاستدلال و/أو الضبط الدقيق لمهمة أسفل النهر. على الرغم من أن هذا ليس إلزاميًا لدمج طلب السحب الخاص بك، إلا أنه مفيد جدًا للمجتمع. + +**14. قدم طلب السحب النهائي** + +لقد انتهيت الآن من البرمجة ويمكنك الانتقال إلى الخطوة الأخيرة، وهي دمج طلب السحب الخاص بك في الرئيسي. عادةً ما يكون فريق Hugging Face قد ساعدك بالفعل في هذه المرحلة، ولكن من الجدير بالوقت إعطاء طلب السحب النهائي الخاص بك وصفًا لطيفًا وإضافة تعليقات إلى التعليمات البرمجية الخاصة بك، إذا كنت تريد الإشارة إلى خيارات التصميم معينة لمراجعك. + +### شارك عملك!! + +الآن، حان الوقت للحصول على بعض الإشادة من المجتمع لعملك! إن إكمال إضافة نموذج يعد مساهمة كبيرة في Transformers ومجتمع NLP بالكامل. سيتم بالتأكيد استخدام التعليمات البرمجية الخاصة بك والنماذج الأولية التي تم تدريبها مسبقًا من قبل المطورين والباحثين. يجب أن تفخر بعملك ومشاركة إنجازاتك مع المجتمع. + +**لقد قمت بإنشاء نموذج آخر يسهل الوصول إليه للجميع في المجتمع! 🤯** \ No newline at end of file From 3d6800ca9ec2802a11ec399c3a2c19698efd22be Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:41:58 +0300 Subject: [PATCH 038/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/agents.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/agents.md | 539 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 539 insertions(+) create mode 100644 docs/source/ar/agents.md diff --git a/docs/source/ar/agents.md b/docs/source/ar/agents.md new file mode 100644 index 00000000000000..478ab112c14423 --- /dev/null +++ b/docs/source/ar/agents.md @@ -0,0 +1,539 @@ +# الوكلاء والأدوات + +[[open-in-colab]] + +### ما هو الوكيل؟ + +يمكن للنظم اللغوية الكبيرة (LLMs) التي تم تدريبها على أداء [نمذجة اللغة السببية](./tasks/language_modeling.) التعامل مع مجموعة واسعة من المهام، ولكنها غالبًا ما تواجه صعوبات في المهام الأساسية مثل المنطق والحساب والبحث. وعندما يتم استدعاؤها في مجالات لا تؤدي فيها أداءً جيدًا، فإنها غالبًا ما تفشل في توليد الإجابة التي نتوقعها منها. + +يتمثل أحد النهج للتغلب على هذا القصور في إنشاء "وكيل". + +الوكيل هو نظام يستخدم LLM كمحرك له، ولديه حق الوصول إلى وظائف تسمى "أدوات". + +هذه "الأدوات" هي وظائف لأداء مهمة، وتحتوي على جميع الأوصاف اللازمة للوكيل لاستخدامها بشكل صحيح. + +يمكن برمجة الوكيل للقيام بما يلي: +- وضع سلسلة من الإجراءات/الأدوات وتشغيلها جميعًا في نفس الوقت مثل [`CodeAgent`] على سبيل المثال +- التخطيط للاجراءات/الأدوات وتنفيذها واحدة تلو الأخرى والانتظار حتى انتهاء كل إجراء قبل إطلاق التالي مثل [`ReactJsonAgent`] على سبيل المثال + +### أنواع الوكلاء + +#### وكيل الشفرة + +يتمتع هذا الوكيل بخطوة تخطيط، ثم يقوم بتوليد شفرة Python لتنفيذ جميع إجراءاته في نفس الوقت. وهو يتعامل بشكل أصلي مع أنواع الإدخال والإخراج المختلفة لأدواته، وبالتالي فهو الخيار الموصى به للمهام متعددة الوسائط. + +#### وكلاء التفاعل + +هذا هو الوكيل الذي يتم اللجوء إليه لحل مهام الاستدلال، حيث يجعل إطار ReAct ([Yao et al.، 2022](https://huggingface.co/papers/2210.03629)) من الكفاءة حقًا التفكير على أساس ملاحظاته السابقة. + +نقوم بتنفيذ إصدارين من ReactJsonAgent: +- [`ReactJsonAgent`] يقوم بتوليد استدعاءات الأدوات كـ JSON في إخراجها. +- [`ReactCodeAgent`] هو نوع جديد من ReactJsonAgent يقوم بتوليد استدعاءات أدواته كمقاطع من التعليمات البرمجية، والتي تعمل بشكل جيد حقًا مع LLMs التي تتمتع بأداء ترميز قوي. + +> [!TIP] +> اقرأ منشور المدونة [Open-source LLMs as LangChain Agents](https://huggingface.co/blog/open-source-llms-as-agents) لمعرفة المزيد عن وكيل ReAct. + +![إطار عمل وكيل ReAct](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/open-source-llms-as-agents/ReAct.png) + +على سبيل المثال، إليك كيف يعمل وكيل ReAct Code طريقه من خلال السؤال التالي. + +```py3 +>>> agent.run( +... "How many more blocks (also denoted as layers) in BERT base encoder than the encoder from the architecture proposed in Attention is All You Need?", +... ) +=====New task===== +How many more blocks (also denoted as layers) in BERT base encoder than the encoder from the architecture proposed in Attention is All You Need? +====Agent is executing the code below: +bert_blocks = search(query="number of blocks in BERT base encoder") +print("BERT blocks:", bert_blocks) +==== +Print outputs: +BERT blocks: twelve encoder blocks + +====Agent is executing the code below: +attention_layer = search(query="number of layers in Attention is All You Need") +print("Attention layers:", attention_layer) +==== +Print outputs: +Attention layers: Encoder: The encoder is composed of a stack of N = 6 identical layers. Each layer has two sub-layers. The first is a multi-head self-attention mechanism, and the second is a simple, position- 2 Page 3 Figure 1: The Transformer - model architecture. + +====Agent is executing the code below: +bert_blocks = 12 +attention_layers = 6 +diff = bert_blocks - attention_layers +print("Difference in blocks:", diff) +final_answer(diff) +==== + +Print outputs: +Difference in blocks: 6 + +Final answer: 6 +``` + +### كيف يمكنني بناء وكيل؟ + +لتهيئة وكيل، تحتاج إلى هذه الحجج: + +- LLM لتشغيل وكيلك - الوكيل ليس هو LLM بالضبط، إنه أكثر مثل برنامج الوكيل الذي يستخدم LLM كمحرك له. +- موجه النظام: ما الذي سيتم استدعاء محرك LLM به لتوليد الإخراج الخاص به +- صندوق أدوات يختار الوكيل منه الأدوات لتنفيذها +- محلل لاستخراج الأدوات التي يجب استدعاؤها من إخراج LLM والحجج التي يجب استخدامها + +عند تهيئة نظام الوكيل، يتم استخدام سمات الأداة لتوليد وصف للأداة، ثم يتم تضمينها في موجه `system_prompt` للوكيل لإعلامه بالأدوات التي يمكنه استخدامها ولماذا. + +للبدء، يرجى تثبيت `agents` الإضافية لتثبيت جميع التبعيات الافتراضية. + +```bash +pip install transformers[agents] +``` + +قم ببناء محرك LLM الخاص بك من خلال تعريف طريقة `llm_engine` التي تقبل قائمة من [الرسائل](./chat_templating.) وتعيد النص. يجب أن تقبل هذه الدالة القابلة للاستدعاء أيضًا وسيط `stop` يشير إلى متى يجب التوقف عن التوليد. + +```python +from huggingface_hub import login, InferenceClient + +login("") + +client = InferenceClient(model="meta-llama/Meta-Llama-3-70B-Instruct") + +def llm_engine(messages, stop_sequences=["Task"]) -> str: + response = client.chat_completion(messages, stop=stop_sequences, max_tokens=1000) + answer = response.choices[0].message.content + return answer +``` + +يمكنك استخدام أي طريقة `llm_engine` طالما أنها: +1. يتبع تنسيق [رسائل](./chat_templating.md) لإدخاله (`List [Dict [str، str]]`) ويعيد `str` +2. يتوقف عن توليد الإخراج عند التسلسلات التي تم تمريرها في وسيط `stop` + +أنت بحاجة أيضًا إلى وسيط "الأدوات" الذي يقبل قائمة من "الأدوات". يمكنك توفير قائمة فارغة لـ "الأدوات"، ولكن استخدم صندوق الأدوات الافتراضي مع وسيط اختياري `add_base_tools=True`. + +الآن يمكنك إنشاء وكيل، مثل [`CodeAgent`], وتشغيله. وللراحة، نقدم أيضًا فئة [`HfEngine`] التي تستخدم `huggingface_hub.InferenceClient` تحت الغطاء. + +```python +from transformers import CodeAgent, HfEngine + +llm_engine = HfEngine(model="meta-llama/Meta-Llama-3-70B-Instruct") +agent = CodeAgent(tools=[], llm_engine=llm_engine, add_base_tools=True) + +agent.run( + "Could you translate this sentence from French, say it out loud and return the audio.", + sentence="Où est la boulangerie la plus proche?", +) +``` + +سيكون هذا مفيدًا في حالة الطوارئ عند الحاجة إلى الخبز الفرنسي! يمكنك حتى ترك وسيط `llm_engine` غير محدد، وسيتم إنشاء [`HfEngine`] افتراضيًا. + +```python +from transformers import CodeAgent + +agent = CodeAgent(tools=[], add_base_tools=True) + +agent.run( + "Could you translate this sentence from French, say it out loud and give me the audio.", + sentence="Où est la boulangerie la plus proche?", +) +``` + +لاحظ أننا استخدمنا وسيط "جملة" إضافي: يمكنك تمرير النص كوسيط إضافي إلى النموذج. + +يمكنك أيضًا استخدام هذا للإشارة إلى مسار الملفات المحلية أو البعيدة للنموذج لاستخدامها: + +```py +from transformers import ReactCodeAgent + +agent = ReactCodeAgent(tools=[], llm_engine=llm_engine, add_base_tools=True) + +agent.run("Why does Mike not know many people in New York?", audio="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/recording.mp3") +``` + + +تم تحديد موجه النظام ومحلل الإخراج تلقائيًا، ولكن يمكنك فحصهما بسهولة عن طريق استدعاء `system_prompt_template` على وكيلك. + +```python +print(agent.system_prompt_template) +``` + +من المهم أن تشرح بأكبر قدر ممكن من الوضوح المهمة التي تريد تنفيذها. +كل عملية [`~Agent.run`] مستقلة، وبما أن الوكيل مدعوم من LLM، فقد تؤدي الاختلافات الطفيفة في موجهك إلى نتائج مختلفة تمامًا. +يمكنك أيضًا تشغيل وكيل بشكل متتالي لمهام مختلفة: في كل مرة يتم فيها إعادة تهيئة سمات `agent.task` و`agent.logs`. + + +#### تنفيذ التعليمات البرمجية + +يقوم مفسر Python بتنفيذ التعليمات البرمجية على مجموعة من الإدخالات التي يتم تمريرها جنبًا إلى جنب مع أدواتك. +يجب أن يكون هذا آمنًا لأن الوظائف الوحيدة التي يمكن استدعاؤها هي الأدوات التي قدمتها (خاصة إذا كانت أدوات من Hugging Face فقط) ووظيفة الطباعة، لذا فأنت مقيد بالفعل بما يمكن تنفيذه. + +مفسر Python لا يسمح أيضًا بالاستيراد بشكل افتراضي خارج قائمة آمنة، لذا فإن جميع الهجمات الأكثر وضوحًا لا ينبغي أن تكون مشكلة. +يمكنك أيضًا الإذن باستيرادات إضافية عن طريق تمرير الوحدات النمطية المصرح بها كقائمة من السلاسل في وسيط `additional_authorized_imports` عند تهيئة [`ReactCodeAgent`] أو [`CodeAgent`]: + +```py +>>> from transformers import ReactCodeAgent + +>>> agent = ReactCodeAgent(tools=[], additional_authorized_imports=['requests', 'bs4']) +>>> agent.run("Could you get me the title of the page at url 'https://huggingface.co/blog'?") + +(...) +'Hugging Face – Blog' +``` + +سيتم إيقاف التنفيذ عند أي رمز يحاول تنفيذ عملية غير قانونية أو إذا كان هناك خطأ Python عادي في التعليمات البرمجية التي تم إنشاؤها بواسطة الوكيل. + +> [!WARNING] +> يمكن لـ LLM توليد رمز تعسفي سيتم تنفيذه بعد ذلك: لا تقم بإضافة أي استيرادات غير آمنة! + +### موجه النظام + +ينشئ الوكيل، أو بالأحرى LLM الذي يقود الوكيل، إخراجًا بناءً على موجه النظام. يمكن تخصيص موجه النظام وتصميمه للمهام المقصودة. على سبيل المثال، تحقق من موجه النظام لـ [`ReactCodeAgent`] (الإصدار أدناه مبسط قليلاً). + +```text +You will be given a task to solve as best you can. +You have access to the following tools: +<> + +To solve the task, you must plan forward to proceed in a series of steps, in a cycle of 'Thought:', 'Code:', and 'Observation:' sequences. + +At each step, in the 'Thought:' sequence, you should first explain your reasoning towards solving the task, then the tools that you want to use. +Then in the 'Code:' sequence, you shold write the code in simple Python. The code sequence must end with '/End code' sequence. +During each intermediate step, you can use 'print()' to save whatever important information you will then need. +These print outputs will then be available in the 'Observation:' field, for using this information as input for the next step. + +In the end you have to return a final answer using the `final_answer` tool. + +Here are a few examples using notional tools: +--- +{examples} + +Above example were using notional tools that might not exist for you. You only have acces to those tools: +<> +You also can perform computations in the python code you generate. + +Always provide a 'Thought:' and a 'Code:\n```py' sequence ending with '```' sequence. You MUST provide at least the 'Code:' sequence to move forward. + +Remember to not perform too many operations in a single code block! You should split the task into intermediate code blocks. +Print results at the end of each step to save the intermediate results. Then use final_answer() to return the final result. + +Remember to make sure that variables you use are all defined. + +Now Begin! +``` + +يتضمن موجه النظام: +- *مقدمة* تشرح كيف يجب أن يتصرف الوكيل والأدوات التي يجب عليه استخدامها. +- وصف لجميع الأدوات التي يتم تحديدها بواسطة رمز `<>` الذي يتم استبداله ديناميكيًا في وقت التشغيل بالأدوات التي يحددها المستخدم أو يختارها. + - يأتي وصف الأداة من سمات الأداة، `name`، و`description`، و`inputs` و`output_type`، وقالب `jinja2` بسيط يمكنك تحسينه. +- تنسيق الإخراج المتوقع. + +يمكنك تحسين موجه النظام، على سبيل المثال، عن طريق إضافة شرح لتنسيق الإخراج. + +للحصول على أقصى قدر من المرونة، يمكنك الكتابة فوق قالب موجه النظام بالكامل عن طريق تمرير موجه مخصص كوسيط إلى معلمة `system_prompt`. + +```python +from transformers import ReactJsonAgent +from transformers.agents import PythonInterpreterTool + +agent = ReactJsonAgent(tools=[PythonInterpreterTool()], system_prompt="{your_custom_prompt}") +``` + +> [!WARNING] +> يرجى التأكد من تحديد سلسلة `<>` في مكان ما في `template` حتى يكون الوكيل على علم +بالأدوات المتاحة. + + +### فحص تشغيل الوكيل + +فيما يلي بعض السمات المفيدة لفحص ما حدث بعد التشغيل: +- `agent.logs` تخزين سجلات مفصلة للوكيل. في كل خطوة من خطوات تشغيل الوكيل، يتم تخزين كل شيء في قاموس يتم إلحاقه بعد ذلك بـ `agent.logs`. +- يقوم تشغيل `agent.write_inner_memory_from_logs()` بإنشاء ذاكرة داخلية لسجلات الوكيل للنظام LLM لعرضها، كقائمة من رسائل الدردشة. تنتقل هذه الطريقة عبر كل خطوة من سجل الوكيل ولا تخزن سوى ما يهمها كرسالة: على سبيل المثال، سيحفظ موجه النظام والمهمة في رسائل منفصلة، ثم لكل خطوة سيخزن إخراج LLM كرسالة، وإخراج استدعاء الأداة كرسالة أخرى. استخدم هذا إذا كنت تريد عرضًا عامًا لما حدث - ولكن لن يتم نسخ كل سجل بواسطة هذه الطريقة. + +## الأدوات + +الأداة هي وظيفة ذرية لاستخدامها بواسطة وكيل. + +يمكنك على سبيل المثال التحقق من [`PythonInterpreterTool`]: لديه اسم ووصف ووصف الإدخال ونوع الإخراج، وطريقة `__call__` لأداء الإجراء. + +عند تهيئة الوكيل، يتم استخدام سمات الأداة لتوليد وصف للأداة يتم تضمينه في موجه النظام الخاص بالوكيل. يتيح هذا للوكيل معرفة الأدوات التي يمكنه استخدامها ولماذا. + +### صندوق الأدوات الافتراضي + +يأتي Transformers مع صندوق أدوات افتراضي لتمكين الوكلاء، والذي يمكنك إضافته إلى وكيلك عند التهيئة باستخدام وسيط `add_base_tools = True`: + +- **الإجابة على أسئلة المستند**: الإجابة على سؤال حول المستند (مثل ملف PDF) بتنسيق صورة ([Donut](./model_doc/donut)) +- **الإجابة على أسئلة الصور**: الإجابة على سؤال حول صورة ([VILT](./model_doc/vilt)) +- **التحدث إلى النص**: قم بتفريغ الكلام إلى نص ([Whisper](./model_doc/whisper)) +- **النص إلى كلام**: تحويل النص إلى كلام ([SpeechT5](./model_doc/speecht5)) +- **الترجمة**: ترجمة جملة معينة من لغة المصدر إلى لغة الهدف. +- **مفسر كود Python**: تشغيل كود Python الذي تم إنشاؤه بواسطة LLM في بيئة آمنة. لن يتم إضافة هذه الأداة إلى [`ReactJsonAgent`] إلا إذا استخدمت `add_base_tools=True`، نظرًا لأن الأدوات المستندة إلى التعليمات البرمجية يمكنها بالفعل تنفيذ كود Python +لا تترجم النصوص الخاصة ولا الأكواد البرمجية ولا الروابط ولا رموز HTML وCSS: + +يمكنك استخدام أداة يدويًا عن طريق استدعاء دالة [`load_tool`] وتحديد مهمة لتنفيذها. + +```python +from transformers import load_tool + +tool = load_tool("text-to-speech") +audio = tool("This is a text to speech tool") +``` + +### إنشاء أداة جديدة + +يمكنك إنشاء أداتك الخاصة لحالات الاستخدام التي لا تغطيها الأدوات الافتراضية من Hugging Face. +على سبيل المثال، دعنا نقوم بإنشاء أداة تعيد النموذج الأكثر تنزيلًا لمهمة معينة من Hub. + +ابدأ بالشيفرة أدناه. + +```python +from huggingface_hub import list_models + +task = "text-classification" + +model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) +print(model.id) +``` + +يمكن تحويل هذه الشيفرة إلى فئة ترث من الفئة العليا [`Tool`]. + +تحتاج الأداة المخصصة إلى: + +- خاصية `name`، والتي تمثل اسم الأداة نفسها. عادةً ما يصف الاسم ما تقوم به الأداة. بما أن الشيفرة تعيد النموذج الأكثر تنزيلًا لمهمة ما، دعنا نطلق عليها اسم `model_download_counter`. +- تستخدم خاصية `description` لملء موجه نظام الوكيل. +- خاصية `inputs`، والتي هي عبارة عن قاموس بمفاتيح "type" و"description". يحتوي على معلومات تساعد المفسر Python على اتخاذ خيارات مستنيرة بشأن الإدخال. +- خاصية `output_type`، والتي تحدد نوع الإخراج. +- طريقة `forward` والتي تحتوي على شيفرة الاستدلال التي سيتم تنفيذها. + +```python +from transformers import Tool +from huggingface_hub import list_models + +class HFModelDownloadsTool(Tool): + name = "model_download_counter" + description = ( + "This is a tool that returns the most downloaded model of a given task on the Hugging Face Hub. " + "It returns the name of the checkpoint." + ) + + inputs = { + "task": { + "type": "text", + "description": "the task category (such as text-classification, depth-estimation, etc)", + } + } + output_type = "text" + + def forward(self, task: str): + model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) + return model.id +``` + +الآن بعد أن أصبحت فئة `HfModelDownloadsTool` المخصصة جاهزة، يمكنك حفظها في ملف باسم `model_downloads.py` واستيرادها للاستخدام. + +```python +from model_downloads import HFModelDownloadsTool + +tool = HFModelDownloadsTool() +``` + +يمكنك أيضًا مشاركة أداتك المخصصة في Hub عن طريق استدعاء [`~Tool.push_to_hub`] على الأداة. تأكد من أنك قمت بإنشاء مستودع لها على Hub وأنك تستخدم رمز وصول للقراءة. + +```python +tool.push_to_hub("{your_username}/hf-model-downloads") +``` + +قم بتحميل الأداة باستخدام دالة [`~Tool.load_tool`] ومررها إلى معلمة `tools` في الوكيل الخاص بك. + +```python +from transformers import load_tool, CodeAgent + +model_download_tool = load_tool("m-ric/hf-model-downloads") +agent = CodeAgent(tools=[model_download_tool], llm_engine=llm_engine) +agent.run( + "Can you give me the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub?" +) +``` + +ستحصل على ما يلي: + +```text +======== New task ======== +Can you give me the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub? +==== Agent is executing the code below: +most_downloaded_model = model_download_counter(task="text-to-video") +print(f"The most downloaded model for the 'text-to-video' task is {most_downloaded_model}.") +==== +``` + +والناتج: + +`"النموذج الأكثر تنزيلًا لمهمة `text-to-video` هو ByteDance/AnimateDiff-Lightning."` + +### إدارة صندوق أدوات الوكيل الخاص بك + +إذا كنت قد قمت بالفعل بتهيئة وكيل، فمن غير الملائم إعادة تهيئته من الصفر باستخدام أداة تريد استخدامها. باستخدام مكتبة Transformers، يمكنك إدارة صندوق أدوات الوكيل عن طريق إضافة أداة أو استبدالها. + +دعنا نضيف `model_download_tool` إلى وكيل موجود تمت تهيئته بصندوق الأدوات الافتراضي فقط. + +```python +from transformers import CodeAgent + +agent = CodeAgent(tools=[], llm_engine=llm_engine, add_base_tools=True) +agent.toolbox.add_tool(model_download_tool) +``` + +الآن يمكننا الاستفادة من الأداة الجديدة وأداة تحويل النص إلى كلام السابقة: + +```python + agent.run( + "Can you read out loud the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub and return the audio?" + ) +``` + +| **Audio** | +|------------------------------------------------------------------------------------------------------------------------------------------------------| +|
+ +بشكل عام، نوصي باستخدام فئة `AutoTokenizer` وفئة `AutoModelFor` لتحميل مثيلات مُدربة مسبقًا من النماذج. سيساعدك هذا في تحميل البنية الصحيحة في كل مرة. في البرنامج التعليمي التالي، تعرف على كيفية استخدام المحلل اللغوي ومعالج الصور ومستخرج الميزات والمعالج الذي تم تحميله حديثًا لمعالجة مجموعة بيانات للضبط الدقيق. + + +أخيرًا، تسمح لك فئات `TFAutoModelFor` بتحميل نموذج مُدرب مسبقًا لمهمة معينة (راجع [هنا](model_doc/auto) للحصول على قائمة كاملة بالمهام المتاحة). على سبيل المثال، قم بتحميل نموذج لتصنيف التسلسل باستخدام [`TFAutoModelForSequenceClassification.from_pretrained`]: + +```py +>>> from transformers import TFAutoModelForSequenceClassification + +>>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") +``` + +أعد استخدام نفس نقطة التفتيش لتحميل بنية لمهمة مختلفة: + +```py +>>> from transformers import TFAutoModelForTokenClassification + +>>> model = TFAutoModelForTokenClassification.from_pretrained("distilbert/distilbert-base-uncased") +``` + +بشكل عام، نوصي باستخدام فئة `AutoTokenizer` وفئة `TFAutoModelFor` لتحميل مثيلات مُدربة مسبقًا من النماذج. سيساعدك هذا في تحميل البنية الصحيحة في كل مرة. في البرنامج التعليمي التالي، تعرف على كيفية استخدام المحلل اللغوي ومعالج الصور ومستخرج الميزات والمعالج الذي تم تحميله حديثًا لمعالجة مجموعة بيانات للضبط الدقيق. + + \ No newline at end of file From a2eaacb6fdcbe5c2cc5419953b47d00c86a6c8f0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:03 +0300 Subject: [PATCH 040/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/benchmarks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/benchmarks.md | 345 +++++++++++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) create mode 100644 docs/source/ar/benchmarks.md diff --git a/docs/source/ar/benchmarks.md b/docs/source/ar/benchmarks.md new file mode 100644 index 00000000000000..3648195933af4f --- /dev/null +++ b/docs/source/ar/benchmarks.md @@ -0,0 +1,345 @@ +# معايير الأداء + +> ⚠️ تنبيه: أدوات قياس الأداء من Hugging Face أصبحت قديمة، ويوصى باستخدام مكتبات قياس أداء خارجية لقياس سرعة وتعقيد الذاكرة في نماذج المحول. + +[[open-in-colab]] + +لنلق نظرة على كيفية قياس أداء نماذج 🤗 Transformers، وأفضل الممارسات، ومعايير الأداء المتاحة بالفعل. + +يمكن العثور على دفتر ملاحظات يشرح بالتفصيل كيفية قياس أداء نماذج 🤗 Transformers [هنا](https://github.com/huggingface/notebooks/tree/main/examples/benchmark.ipynb). + +## كيفية قياس أداء نماذج 🤗 Transformers + +تسمح الفئتان [`PyTorchBenchmark`] و [`TensorFlowBenchmark`] بقياس أداء نماذج 🤗 Transformers بمرونة. تتيح لنا فئات قياس الأداء قياس _الاستخدام الأقصى للذاكرة_ و _الوقت اللازم_ لكل من _الاستدلال_ و _التدريب_. + +> هنا، يتم تعريف _الاستدلال_ بواسطة تمرير إلى الأمام واحد، ويتم تعريف _التدريب_ بواسطة تمرير إلى الأمام والخلف. + +تتوقع فئات قياس الأداء [`PyTorchBenchmark`] و [`TensorFlowBenchmark`] كائنًا من النوع [`PyTorchBenchmarkArguments`] و [`TensorFlowBenchmarkArguments`]، على التوالي، للتنفيذ. [`PyTorchBenchmarkArguments`] و [`TensorFlowBenchmarkArguments`] هي فئات بيانات وتحتوي على جميع التكوينات ذات الصلة لفئة قياس الأداء المقابلة. في المثال التالي، يتم توضيح كيفية قياس أداء نموذج BERT من النوع _bert-base-cased_. + + + + +```py +>>> from transformers import PyTorchBenchmark, PyTorchBenchmarkArguments + +>>> args = PyTorchBenchmarkArguments(models=["google-bert/bert-base-uncased"], batch_sizes=[8], sequence_lengths=[8, 32, 128, 512]) +>>> benchmark = PyTorchBenchmark(args) +``` + + + +```py +>>> from transformers import TensorFlowBenchmark, TensorFlowBenchmarkArguments + +>>> args = TensorFlowBenchmarkArguments( +... models=["google-bert/bert-base-uncased"], batch_sizes=[8], sequence_lengths=[8, 32, 128, 512] +... ) +>>> benchmark = TensorFlowBenchmark(args) +``` + + + +هنا، يتم تمرير ثلاثة حجج إلى فئات بيانات حجة قياس الأداء، وهي `models` و `batch_sizes` و `sequence_lengths`. الحجة `models` مطلوبة وتتوقع `قائمة` من محددات هوية النموذج من [مركز النماذج](https://huggingface.co/models) تحدد حجج القائمة `batch_sizes` و `sequence_lengths` حجم `input_ids` الذي يتم قياس أداء النموذج عليه. هناك العديد من المعلمات الأخرى التي يمكن تكوينها عبر فئات بيانات حجة قياس الأداء. لمزيد من التفاصيل حول هذه المعلمات، يمكنك إما الرجوع مباشرة إلى الملفات `src/transformers/benchmark/benchmark_args_utils.py`، `src/transformers/benchmark/benchmark_args.py` (لـ PyTorch) و `src/transformers/benchmark/benchmark_args_tf.py` (لـ Tensorflow). أو، بدلاً من ذلك، قم بتشغيل أوامر shell التالية من الجذر لطباعة قائمة وصفية بجميع المعلمات القابلة للتكوين لـ PyTorch و Tensorflow على التوالي. + + + + +```bash +python examples/pytorch/benchmarking/run_benchmark.py --help +``` + +يمكن ببساطة تشغيل كائن قياس الأداء الذي تم تنفيذه عن طريق استدعاء `benchmark.run()`. + +```py +>>> results = benchmark.run() +>>> print(results) +==================== INFERENCE - SPEED - RESULT ==================== +-------------------------------------------------------------------------------- +Model Name Batch Size Seq Length Time in s +-------------------------------------------------------------------------------- +google-bert/bert-base-uncased 8 8 0.006 +google-bert/bert-base-uncased 8 32 0.006 +google-bert/bert-base-uncased 8 128 0.018 +google-bert/bert-base-uncased 8 512 0.088 +-------------------------------------------------------------------------------- + +==================== INFERENCE - MEMORY - RESULT ==================== +-------------------------------------------------------------------------------- +Model Name Batch Size Seq Length Memory in MB +-------------------------------------------------------------------------------- +google-bert/bert-base-uncased 8 8 1227 +google-bert/bert-base-uncased 8 32 1281 +google-bert/bert-base-uncased 8 128 1307 +google-bert/bert-base-uncased 8 512 1539 +-------------------------------------------------------------------------------- + +==================== ENVIRONMENT INFORMATION ==================== + +- transformers_version: 2.11.0 +- framework: PyTorch +- use_torchscript: False +- framework_version: 1.4.0 +- python_version: 3.6.10 +- system: Linux +- cpu: x86_64 +- architecture: 64bit +- date: 2020-06-29 +- time: 08:58:43.371351 +- fp16: False +- use_multiprocessing: True +- only_pretrain_model: False +- cpu_ram_mb: 32088 +- use_gpu: True +- num_gpus: 1 +- gpu: TITAN RTX +- gpu_ram_mb: 24217 +- gpu_power_watts: 280.0 +- gpu_performance_state: 2 +- use_tpu: False +``` + + + +```bash +python examples/tensorflow/benchmarking/run_benchmark_tf.py --help +``` + +يمكن ببساطة تشغيل كائن قياس الأداء الذي تم تنفيذه عن طريق استدعاء `benchmark.run()`. + +```py +>>> results = benchmark.run() +>>> print(results) +>>> results = benchmark.run() +>>> print(results) +==================== INFERENCE - SPEED - RESULT ==================== +-------------------------------------------------------------------------------- +Model Name Batch Size Seq Length Time in s +-------------------------------------------------------------------------------- +google-bert/bert-base-uncased 8 8 0.005 +google-bert/bert-base-uncased 8 32 0.008 +google-bert/bert-base-uncased 8 128 0.022 +google-bert/bert-base-uncased 8 512 0.105 +-------------------------------------------------------------------------------- + +==================== INFERENCE - MEMORY - RESULT ==================== +-------------------------------------------------------------------------------- +Model Name Batch Size Seq Length Memory in MB +-------------------------------------------------------------------------------- +google-bert/bert-base-uncased 8 8 1330 +google-bert/bert-base-uncased 8 32 1330 +google-bert/bert-base-uncased 8 128 1330 +google-bert/bert-base-uncased 8 512 1770 +-------------------------------------------------------------------------------- + +==================== ENVIRONMENT INFORMATION ==================== + +- transformers_version: 202.11.0 +- framework: Tensorflow +- use_xla: False +- framework_version: 2.2.0 +- python_version: 3.6.10 +- system: Linux +- cpu: x86_64 +- architecture: 64bit +- date: 2020-06-29 +- time: 09:26:35.617317 +- fp16: False +- use_multiprocessing: True +- only_pretrain_model: False +- cpu_ram_mb: 32088 +- use_gpu: True +- num_gpus: 1 +- gpu: TITAN RTX +- gpu_ram_mb: 24217 +- gpu_power_watts: 280.0 +- gpu_performance_state: 2 +- use_tpu: False +``` + + + +بشكل افتراضي، يتم قياس _الوقت_ و _الذاكرة المطلوبة_ لـ _الاستدلال_. في مثال الإخراج أعلاه، يُظهر القسمان الأولان النتيجة المقابلة لـ _وقت الاستدلال_ و _ذاكرة الاستدلال_. بالإضافة إلى ذلك، يتم طباعة جميع المعلومات ذات الصلة حول بيئة الحوسبة، على سبيل المثال نوع وحدة معالجة الرسومات (GPU)، والنظام، وإصدارات المكتبة، وما إلى ذلك، في القسم الثالث تحت _معلومات البيئة_. يمكن حفظ هذه المعلومات بشكل اختياري في ملف _.csv_ عند إضافة الحجة `save_to_csv=True` إلى [`PyTorchBenchmarkArguments`] و [`TensorFlowBenchmarkArguments`] على التوالي. في هذه الحالة، يتم حفظ كل قسم في ملف _.csv_ منفصل. يمكن اختيارًا تحديد مسار كل ملف _.csv_ عبر فئات بيانات حجة قياس الأداء. + +بدلاً من قياس أداء النماذج المُدربة مسبقًا عبر محدد هويتها، على سبيل المثال `google-bert/bert-base-uncased`، يمكن للمستخدم بدلاً من ذلك قياس أداء تكوين تعسفي لأي فئة نموذج متاحة. في هذه الحالة، يجب إدراج "قائمة" من التكوينات مع حجة قياس الأداء كما هو موضح أدناه. + + + + +```py +>>> from transformers import PyTorchBenchmark، PyTorchBenchmarkArguments، BertConfig + +>>> args = PyTorchBenchmarkArguments( +... models=["bert-base"، "bert-384-hid"، "bert-6-lay"]، batch_sizes=[8]، sequence_lengths=[8، 32، 128، 512] +... ) +>>> config_base = BertConfig() +>>> config_384_hid = BertConfig(hidden_size=384) +>>> config_6_lay = BertConfig(num_hidden_layers=6) + +>>> benchmark = PyTorchBenchmark(args، configs=[config_base، config_384_hid، config_6_lay]) +>>> benchmark.run() +==================== INFERENCE - SPEED - RESULT ==================== +-------------------------------------------------------------------------------- +Model Name Batch Size Seq Length Time in s +-------------------------------------------------------------------------------- +bert-base 8 128 0.006 +bert-base 8 512 0.006 +bert-base 8 128 0.018 +bert-base 8 512 0.088 +bert-384-hid 8 8 0.006 +bert-384-hid 8 32 0.006 +bert-384-hid 8 128 0.011 +bert-384-hid 8 512 0.054 +bert-6-lay 8 8 0.003 +bert-6-lay 8 32 0.004 +bert-6-lay 8 128 0.009 +bert-6-lay 8 512 0.044 +-------------------------------------------------------------------------------- + +==================== INFERENCE - MEMORY - RESULT ==================== +-------------------------------------------------------------------------------- +Model Name Batch Size Seq Length Memory in MB +## نتائج اختبار الأداء + +في هذا القسم، يتم قياس _وقت الاستدلال_ و _الذاكرة المطلوبة_ للاستدلال، لمختلف تكوينات `BertModel`. يتم عرض النتائج في جدول، مع تنسيق مختلف قليلاً لكل من PyTorch و TensorFlow. + +-------------------------------------------------------------------------------- +| اسم النموذج | حجم الدفعة | طول التسلسل | الذاكرة بالميغابايت | +-------------------------------------------------------------------------------- +| bert-base | 8 | 8 | 1277 | +| bert-base | 8 | 32 | 1281 | +| bert-base | 8 | 128 | 1307 | +| bert-base | 8 | 512 | 1539 | +| bert-384-hid | 8 | 8 | 1005 | +| bert-384-hid | 8 | 32 | 1027 | +| bert-384-hid | 8 | 128 | 1035 | +| bert-384-hid | 8 | 512 | 1255 | +| bert-6-lay | 8 | 8 | 1097 | +| bert-6-lay | 8 | 32 | 1101 | +| bert-6-lay | 8 | 128 | 1127 | +| bert-6-lay | 8 | 512 | 1359 | +-------------------------------------------------------------------------------- + +==================== معلومات البيئة ==================== + +- transformers_version: 2.11.0 +- framework: PyTorch +- use_torchscript: False +- framework_version: 1.4.0 +- python_version: 3.6.10 +- system: Linux +- cpu: x86_64 +- architecture: 64bit +- date: 2020-06-29 +- time: 09:35:25.143267 +- fp16: False +- use_multiprocessing: True +- only_pretrain_model: False +- cpu_ram_mb: 32088 +- use_gpu: True +- num_gpus: 1 +- gpu: TITAN RTX +- gpu_ram_mb: 24217 +- gpu_power_watts: 280.0 +- gpu_performance_state: 2 +- use_tpu: False +``` + + + +```py +>>> from transformers import TensorFlowBenchmark, TensorFlowBenchmarkArguments, BertConfig + +>>> args = TensorFlowBenchmarkArguments( +... models=["bert-base", "bert-384-hid", "bert-6-lay"], batch_sizes=[8], sequence_lengths=[8, 32, 128, 512] +... ) +>>> config_base = BertConfig() +>>> config_384_hid = BertConfig(hidden_size=384) +>>> config_6_lay = BertConfig(num_hidden_layers=6) + +>>> benchmark = TensorFlowBenchmark(args, configs=[config_base, config_384_hid, config_6_lay]) +>>> benchmark.run() +==================== نتائج السرعة في الاستدلال ==================== +-------------------------------------------------------------------------------- +| اسم النموذج | حجم الدفعة | طول التسلسل | الوقت بالثانية | +-------------------------------------------------------------------------------- +| bert-base | 8 | 8 | 0.005 | +| bert-base | 8 | 32 | 0.008 | +| bert-base | 8 | 128 | 0.022 | +| bert-base | 8 | 512 | 0.106 | +| bert-384-hid | 8 | 8 | 0.005 | +| bert-384-hid | 8 | 32 | 0.007 | +| bert-384-hid | 8 | 128 | 0.018 | +| bert-384-hid | 8 | 512 | 0.064 | +| bert-6-lay | 8 | 8 | 0.002 | +| bert-6-lay | 8 | 32 | 0.003 | +| bert-6-lay | 8 | 128 | 0.0011 | +| bert-6-lay | 8 | 512 | 0.074 | +-------------------------------------------------------------------------------- + +==================== نتائج الذاكرة في الاستدلال ==================== +-------------------------------------------------------------------------------- +| اسم النموذج | حجم الدفعة | طول التسلسل | الذاكرة بالميغابايت | +-------------------------------------------------------------------------------- +| اسم النموذج | حجم الدفعة | طول التسلسل | الذاكرة بالميغابايت | +-------------------------------------------------------------------------------- +| bert-base | 8 | 8 | 1330 | +| bert-base | 8 | 32 | 1330 | +| bert-base | 8 | 128 | 1330 | +| bert-base | 8 | 512 | 1770 | +| bert-384-hid | 8 | 8 | 1330 | +| bert-384-hid | 8 | 32 | 1330 | +| bert-384-hid | 8 | 128 | 1330 | +| bert-384-hid | 8 | 512 | 1540 | +| bert-6-lay | 8 | 8 | 1330 | +| bert-6-lay | 8 | 32 | 1330 | +| bert-6-lay | 8 | 128 | 1330 | +| bert-6-lay | 8 | 512 | 1540 | +-------------------------------------------------------------------------------- + +==================== معلومات البيئة ==================== + +- transformers_version: 2.11.0 +- framework: Tensorflow +- use_xla: False +- framework_version: 2.2.0 +- python_version: 3.6.10 +- system: Linux +- cpu: x86_64 +- architecture: 64bit +- date: 2020-06-29 +- time: 09:38:15.487125 +- fp16: False +- use_multiprocessing: True +- only_pretrain_model: False +- cpu_ram_mb: 32088 +- use_gpu: True +- num_gpus: 1 +- gpu: TITAN RTX +- gpu_ram_mb: 24217 +- gpu_power_watts: 280.0 +- gpu_performance_state: 2 +- use_tpu: False +``` + + + +مرة أخرى، يتم قياس _وقت الاستدلال_ و _الذاكرة المطلوبة_ للاستدلال، ولكن هذه المرة لتكوينات مخصصة لـ `BertModel`. يمكن أن تكون هذه الميزة مفيدة بشكل خاص عند اتخاذ قرار بشأن التكوين الذي يجب تدريب النموذج عليه. + +## أفضل الممارسات في اختبار الأداء + +يسرد هذا القسم بعض أفضل الممارسات التي يجب مراعاتها عند إجراء اختبار الأداء لنموذج ما. + +- حالياً، يتم دعم اختبار الأداء على جهاز واحد فقط. عند إجراء الاختبار على وحدة معالجة الرسوميات (GPU)، يوصى بأن يقوم المستخدم بتحديد الجهاز الذي يجب تشغيل التعليمات البرمجية عليه من خلال تعيين متغير البيئة `CUDA_VISIBLE_DEVICES` في الشل، على سبيل المثال `export CUDA_VISIBLE_DEVICES=0` قبل تشغيل التعليمات البرمجية. +- يجب تعيين الخيار `no_multi_processing` إلى `True` فقط لأغراض الاختبار والتصحيح. ولضمان قياس الذاكرة بدقة، يوصى بتشغيل كل اختبار ذاكرة في عملية منفصلة والتأكد من تعيين `no_multi_processing` إلى `True`. +- يجب دائمًا ذكر معلومات البيئة عند مشاركة نتائج اختبار أداء نموذج ما. يمكن أن تختلف النتائج اختلافًا كبيرًا بين أجهزة GPU المختلفة وإصدارات المكتبات، وما إلى ذلك، لذلك فإن نتائج الاختبار بمفردها ليست مفيدة جدًا للمجتمع. + +## مشاركة نتائج اختبار الأداء الخاص بك + +في السابق، تم إجراء اختبار الأداء لجميع النماذج الأساسية المتاحة (10 في ذلك الوقت) لقياس _وقت الاستدلال_، عبر العديد من الإعدادات المختلفة: باستخدام PyTorch، مع TorchScript وبدونها، باستخدام TensorFlow، مع XLA وبدونه. تم إجراء جميع هذه الاختبارات على وحدات المعالجة المركزية (CPU) (باستثناء XLA TensorFlow) ووحدات معالجة الرسوميات (GPU). + +يتم شرح هذا النهج بالتفصيل في [منشور المدونة هذا](https://medium.com/huggingface/benchmarking-transformers-pytorch-and-tensorflow-e2917fb891c2) وتتوفر النتائج [هنا](https://docs.google.com/spreadsheets/d/1sryqufw2D0XlUH4sq3e9Wnxu5EAQkaohzrJbd5HdQ_w/edit?usp=sharing). + +مع أدوات اختبار الأداء الجديدة، أصبح من الأسهل من أي وقت مضى مشاركة نتائج اختبار الأداء الخاص بك مع المجتمع: + +- [نتائج اختبار الأداء في PyTorch](https://github.com/huggingface/transformers/tree/main/examples/pytorch/benchmarking/README.md). +- [نتائج اختبار الأداء في TensorFlow](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/benchmarking/README.md). \ No newline at end of file From 7c84d915d9335074350e496d3b36f72cb7cf6cc4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:05 +0300 Subject: [PATCH 041/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/big=5Fmodels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/big_models.md | 200 +++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 docs/source/ar/big_models.md diff --git a/docs/source/ar/big_models.md b/docs/source/ar/big_models.md new file mode 100644 index 00000000000000..f16fbd2b47fde9 --- /dev/null +++ b/docs/source/ar/big_models.md @@ -0,0 +1,200 @@ +# إنشاء نموذج كبير + +تتمثل إحدى العقبات التي تحول دون الوصول إلى النماذج الكبيرة المُدربة مسبقًا في حجم الذاكرة المطلوبة. فعند تحميل نموذج PyTorch مُدرب مسبقًا، عادة ما تقوم بما يلي: + +1. إنشاء نموذج بوزن عشوائي. +2. تحميل الأوزان المُدربة مسبقًا. +3. وضع تلك الأوزان المُدربة مسبقًا في النموذج. + +يتطلب كل من الخطوتين الأوليين نسخة كاملة من النموذج في الذاكرة، وإذا كان وزن النموذج عدة غيغابايت، فقد لا تتوفر لديك ذاكرة كافية لنسختين منه. وتتفاقم هذه المشكلة في بيئات التدريب الموزعة لأن كل عملية تقوم بتحميل نموذج مُدرب مسبقًا وتخزين نسختين في الذاكرة. + +> [!TIP] +> يتم تهيئة النموذج الذي تم إنشاؤه عشوائيًا باستخدام تنسورات "فارغة"، والتي تشغل مساحة في الذاكرة دون ملئها. والقيم العشوائية هي أي شيء كان في هذا الجزء من الذاكرة في ذلك الوقت. ولتحسين سرعة التحميل، يتم تعيين معلمة [`_fast_init`](https://github.com/huggingface/transformers/blob/c9f6e5e35156e068b227dd9b15521767f6afd4d2/src/transformers/modeling_utils.py#L2710) افتراضيًا على `True` لتخطي التهيئة العشوائية لجميع الأوزان التي يتم تحميلها بشكل صحيح. + +سيوضح لك هذا الدليل كيف يمكن لمكتبة Transformers أن تساعدك في تحميل النماذج الكبيرة المُدربة مسبقًا على الرغم من متطلبات الذاكرة الخاصة بها. + +## نقاط التفتيش المجزأة + +اعتبارًا من الإصدار Transformers v4.18.0، يتم تجزئة أي نقطة تفتيش أكبر من 10 غيغابايت تلقائيًا بواسطة طريقة [`~PreTrainedModel.save_pretrained`](https://huggingface.co/docs/transformers/main_classes/model#transformers.PreTrainedModel.save_pretrained). حيث يتم تقسيمها إلى عدة نقاط تفتيش جزئية أصغر، ويتم إنشاء ملف فهرس يقوم بتعيين أسماء المعلمات إلى الملفات التي يتم تخزينها فيها. + +يتم التحكم في حجم الجزء الأقصى باستخدام معلمة `max_shard_size`، ولكن افتراضيًا يكون 5 غيغابايت، لأنه من الأسهل تشغيله على مثيلات GPU من الطبقة المجانية دون نفاد الذاكرة. + +على سبيل المثال، دعنا نقسم [BioMistral/BioMistral-7B](https://hf.co/BioMistral/BioMistral-7B). + +```py +>>> with tempfile.TemporaryDirectory() as tmp_dir: +... model.save_pretrained(tmp_dir, max_shard_size="5GB") +... print(sorted(os.listdir(tmp_dir))) +['config.json', 'generation_config.json', 'model-00001-of-00006.safetensors', 'model-00002-of-00006.safetensors', 'model-00003-of-00006.safetensors', 'model-00004-of-00006.safetensors', 'model-00005-of-00006.safetensors', 'model-00006-of-00006.safetensors', 'model.safetensors.index.json'] +``` + +يتم إعادة تحميل نقطة التفتيش المجزأة باستخدام طريقة [`~PreTrainedModel.from_pretrained`](https://huggingface.co/docs/transformers/main_classes/model#transformers.PreTrainedModel.from_pretrained). + +```py +>>> with tempfile.TemporaryDirectory() as tmp_dir: +... model.save_pretrained(tmp_dir, max_shard_size="5GB") +... new_model = AutoModel.from_pretrained(tmp_dir) +``` + +الميزة الرئيسية لنقاط التفتيش المجزأة للنماذج الكبيرة هي أنه يتم تحميل كل جزء بعد الجزء السابق، مما يحد من استخدام الذاكرة إلى حجم النموذج فقط وحجم الجزء الأكبر. + +يمكنك أيضًا تحميل نقطة تفتيش مجزأة مباشرة داخل نموذج بدون استخدام طريقة [`~PreTrainedModel.from_pretrained`](https://huggingface.co/docs/transformers/main_classes/model#transformers.PreTrainedModel.from_pretrained) (وهو ما يشبه طريقة `load_state_dict()` في PyTorch لنقطة تفتيش كاملة). في هذه الحالة، استخدم طريقة [`~modeling_utils.load_sharded_checkpoint`](https://huggingface.co/docs/transformers/main_classes/modeling_utils#transformers.modeling_utils.load_sharded_checkpoint). + +```py +>>> from transformers.modeling_utils import load_sharded_checkpoint + +>>> with tempfile.TemporaryDirectory() as tmp_dir: +... model.save_pretrained(tmp_dir, max_shard_size="5GB") +... load_sharded_checkpoint(model, tmp_dir) +``` + + +### البيانات التعريفية المشتركة Shared metadata + +يحدد ملف الفهرس المفاتيح الموجودة في نقطة التفتيش ومكان تخزين الأوزان المقابلة. ويمكن تحميل هذا الملف مثل أي ملف JSON آخر، ويمكنك الحصول على قاموس منه. + +```py +>>> import json + +>>> with tempfile.TemporaryDirectory() as tmp_dir: +... model.save_pretrained(tmp_dir, max_shard_size="5GB") +... with open(os.path.join(tmp_dir, "model.safetensors.index.json"), "r") as f: +... index = json.load(f) + +>>> print(index.keys()) +dict_keys(['metadata', 'weight_map']) +``` + +توفر مفتاح `metadata` حجم النموذج الإجمالي. + +```py +>>> index["metadata"] +{'total_size': 28966928384} +``` + +يقوم مفتاح `weight_map` بتعيين كل اسم معلمة (عادةً `state_dict` في نموذج PyTorch) إلى الجزء الذي يتم تخزينه فيه. + +```py +>>> index["weight_map"] +{'lm_head.weight': 'model-00006-of-00006.safetensors', + 'model.embed_tokens.weight': 'model-00001-of-00006.safetensors', + 'model.layers.0.input_layernorm.weight': 'model-00001-of-00006.safetensors', + 'model.layers.0.mlp.down_proj.weight': 'model-00001-of-00006.safetensors', + ... +} +``` + +## الاستدلال باستخدام النماذج الكبيرة في Accelerate + +> [!TIP] +> تأكد من تثبيت Accelerate v0.9.0 أو إصدار أحدث وPyTorch v1.9.0 أو إصدار أحدث. + +اعتبارًا من الإصدار Transformers v4.20.0، تم تعزيز طريقة [`~PreTrainedModel.from_pretrained`](https://huggingface.co/docs/transformers/main_classes/model#transformers.PreTrainedModel.from_pretrained) بميزة [الاستدلال باستخدام النماذج الكبيرة](https://hf.co/docs/accelerate/usage_guides/big_modeling) في Accelerate للتعامل بكفاءة مع النماذج الكبيرة جدًا! يقوم الاستدلال باستخدام النماذج الكبيرة بإنشاء *هيكل نموذج* على جهاز PyTorch [**meta**](https://pytorch.org/docs/main/meta.html). ولا يتم إنشاء المعلمات التي تم تهيئتها بشكل عشوائي إلا عند تحميل الأوزان المُدربة مسبقًا. وبهذه الطريقة، لن تحتفظ بنسختين من النموذج في الذاكرة في نفس الوقت (واحدة للنموذج الذي تم تهيئته بشكل عشوائي والأخرى للأوزان المُدربة مسبقًا)، ويصبح الحد الأقصى لاستهلاك الذاكرة هو حجم النموذج الكامل فقط. + +لتمكين الاستدلال باستخدام النماذج الكبيرة في مكتبة Transformers، قم بتعيين `low_cpu_mem_usage=True` في طريقة [`~PreTrainedModel.from_pretrained`](https://huggingface.co/docs/transformers/main_classes/model#transformers.PreTrainedModel.from_pretrained). + +```py +from transformers import AutoModelForCausalLM + +gemma = AutoModelForCausalLM.from_pretrained("google/gemma-7b", low_cpu_mem_usage=True) +``` + +يقوم Accelerate تلقائيًا بتوزيع أوزان النموذج عبر جميع الأجهزة المتاحة، بدءًا من الجهاز الأسرع (GPU) أولاً، ثم تفريغها إلى الأجهزة الأبطأ (CPU وحتى القرص الصلب). يتم تمكين ذلك عن طريق تعيين `device_map="auto"` في طريقة [`~PreTrainedModel.from_pretrained`](https://huggingface.co/docs/transformers/main_classes/model#transformers.PreTrainedModel.from_pretrained). وعند تمرير معلمة `device_map`، يتم تعيين `low_cpu_mem_usage` تلقائيًا إلى `True`، لذلك لا تحتاج إلى تحديدها. + +```py +from transformers import AutoModelForCausalLM + +# these loading methods are equivalent +gemma = AutoModelForCausalLM.from_pretrained("google/gemma-7b", device_map="auto") +gemma = AutoModelForCausalLM.from_pretrained("google/gemma-7b", device_map="auto", low_cpu_mem_usage=True) +``` + +يمكنك أيضًا كتابة خريطة الأجهزة الخاصة بك عن طريق تعيين كل طبقة إلى جهاز. يجب أن تقوم خريطة الأجهزة بتعيين جميع معلمات النموذج إلى جهاز، ولكن لا يلزم أن تحدد مكان وجود جميع الوحدات الفرعية لطبقة ما إذا كانت الطبقة بأكملها على نفس الجهاز. + +```python +device_map = {"model.layers.1": 0, "model.layers.14": 1, "model.layers.31": "cpu", "lm_head": "disk"} +``` + +يمكنك الوصول إلى خاصية `hf_device_map` لمعرفة كيفية تقسيم Accelerate للنموذج عبر الأجهزة. + +```py +gemma.hf_device_map +``` + +```python out +{'model.embed_tokens': 0, + 'model.layers.0': 0, + 'model.layers.1': 0, + 'model.layers.2': 0, + 'model.layers.3': 0, + 'model.layers.4': 0, + 'model.layers.5': 0, + 'model.layers.6': 0, + 'model.layers.7': 0, + 'model.layers.8': 0, + 'model.layers.9': 0, + 'model.layers.10': 0, + 'model.layers.11': 0, + 'model.layers.12': 0, + 'model.layers.13': 0, + 'model.layers.14': 'cpu', + 'model.layers.15': 'cpu', + 'model.layers.16': 'cpu', + 'model.layers.17': 'cpu', + 'model.layers.18': 'cpu', + 'model.layers.19': 'cpu', + 'model.layers.20': 'cpu', + 'model.layers.21': 'cpu', + 'model.layers.22': 'cpu', + 'model.layers.23': 'cpu', + 'model.layers.24': 'cpu', + 'model.layers.25': 'cpu', + 'model.layers.26': 'cpu', + 'model.layers.27': 'cpu', + 'model.layers.28': 'cpu', + 'model.layers.29': 'cpu', + 'model.layers.30': 'cpu', + 'model.layers.31': 'cpu', + 'model.norm': 'cpu', + 'lm_head': 'cpu'} +``` + +## نوع بيانات النموذج + +عادةً ما يتم إنشاء أوزان نموذج PyTorch كـ torch.float32، ويمكن أن يمثل ذلك مشكلة إذا حاولت تحميل نموذج كنوع بيانات مختلف. على سبيل المثال، ستحتاج إلى ضعف الذاكرة لتحميل الأوزان في torch.float32 ثم مرة أخرى لتحميلها في نوع البيانات المطلوب، مثل torch.float16. + +> [!WARNING] +> بسبب تصميم PyTorch، فإن معلمة `torch_dtype` تدعم فقط أنواع البيانات العائمة. + +للتجنب إهدار الذاكرة بهذه الطريقة، قم بتعيين معلمة `torch_dtype` بشكل صريح إلى نوع البيانات المطلوب أو قم بتعيين `torch_dtype="auto"` لتحميل الأوزان بأكثر أنماط الذاكرة المثالية (يتم اشتقاق نوع البيانات تلقائيًا من أوزان النموذج). + + + + +```py +from transformers import AutoModelForCausalLM + +gemma = AutoModelForCausalLM.from_pretrained("google/gemma-7b", torch_dtype=torch.float16) +``` + + + + +```py +from transformers import AutoModelForCausalLM + +gemma = AutoModelForCausalLM.from_pretrained("google/gemma-7b", torch_dtype="auto") +``` + + + + +يمكنك أيضًا تعيين نوع البيانات الذي سيتم استخدامه للنماذج التي تم إنشاؤها من الصفر. + +```python +import torch +from transformers import AutoConfig, AutoModel + +my_config = AutoConfig.from_pretrained("google/gemma-2b", torch_dtype=torch.float16) +model = AutoModel.from_config(my_config) +``` \ No newline at end of file From 12e57515acfb9b59a0c8dda8ea5180774f37222c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:06 +0300 Subject: [PATCH 042/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/chat=5Ftemplating.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/chat_templating.md | 536 ++++++++++++++++++++++++++++++ 1 file changed, 536 insertions(+) create mode 100644 docs/source/ar/chat_templating.md diff --git a/docs/source/ar/chat_templating.md b/docs/source/ar/chat_templating.md new file mode 100644 index 00000000000000..82cc65328b344d --- /dev/null +++ b/docs/source/ar/chat_templating.md @@ -0,0 +1,536 @@ +# قوالب نماذج الدردشة + +## مقدمة + +تعد **الدردشة** حالة استخدام شائعة بشكل متزايد لنماذج اللغة الكبيرة. في سياق الدردشة، بدلاً من الاستمرار في سلسلة نصية واحدة (كما هو الحال مع نموذج اللغة القياسي)، يستمر النموذج بدلاً من ذلك في محادثة تتكون من رسالة واحدة أو أكثر، لكل منها **دور**، مثل "المستخدم" أو "المساعد"، بالإضافة إلى نص الرسالة. + +تماما مثل التجزئة، تتوقع النماذج المختلفة تنسيقات إدخال مختلفة للغاية للدردشة. هذا هو السبب في أننا أضفنا **قوالب الدردشة** كميزة. قوالب الدردشة هي جزء من المحلل اللغوي. فهي تحدد كيفية تحويل المحادثات، الممثلة على شكل قوائم من الرسائل، إلى سلسلة واحدة قابلة للتحليل اللغوي بتنسيق النموذج المتوقع. + +دعونا نجعل هذا ملموسًا بمثال سريع باستخدام نموذج `BlenderBot`. لدى BlenderBot قالب افتراضي بسيط للغاية، والذي يضيف في الغالب مسافات بيضاء بين جولات الحوار: + +```python +>>> from transformers import AutoTokenizer +>>> tokenizer = AutoTokenizer.from_pretrained("facebook/blenderbot-400M-distill") + +>>> chat = [ +... {"role": "user", "content": "Hello, how are you?"}, +... {"role": "assistant", "content": "I'm doing great. How can I help you today?"}, +... {"role": "user", "content": "I'd like to show off how chat templating works!"}, +... ] + +>>> tokenizer.apply_chat_template(chat, tokenize=False) +" Hello, how are you? I'm doing great. How can I help you today? I'd like to show off how chat templating works!" +``` + +لاحظ كيف تم ضغط الدردشة بأكملها في سلسلة واحدة. إذا استخدمنا `tokenize=True`، وهو الإعداد الافتراضي، فسيتم أيضًا تحليل السلسلة نحويًا نيابة عنا. ولكن، لنشاهد قالبًا أكثر تعقيدًا في العمل، دعونا نستخدم نموذج `mistralai/Mistral-7B-Instruct-v0.1`. + +```python +>>> from transformers import AutoTokenizer +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1") + +>>> chat = [ +... {"role": "user", "content": "Hello, how are you?"}, +... {"role": "assistant", "content": "I'm doing great. How can I help you today?"}, +... {"role": "user", "content": "I'd like to show off how chat templating works!"}, +... ] + +>>> tokenizer.apply_chat_template(chat, tokenize=False) +"[INST] Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]" +``` + +لاحظ أن محلل اللغة قد أضاف هذه المرة الرموز التحكمية [INST] و[/INST] للإشارة إلى بداية ونهاية رسائل المستخدم (ولكن ليس رسائل المساعد!). تم تدريب Mistral-instruct على هذه الرموز، ولكن لم يتم تدريب BlenderBot عليها. + +## كيف أستخدم قوالب الدردشة؟ + +كما هو موضح في المثال أعلاه، من السهل استخدام قوالب الدردشة. قم ببساطة بإنشاء قائمة من الرسائل، مع مفاتيح `role` و`content`، ثم قم بتمريرها إلى طريقة [`~PreTrainedTokenizer.apply_chat_template`] . بمجرد قيامك بذلك، ستحصل على إخراج جاهز للاستخدام! عند استخدام قوالب الدردشة كإدخال لتوليد النموذج، فمن الجيد أيضًا استخدام `add_generation_prompt=True` لإضافة [مطالبات التوليد](#what-are-generation-prompts). + +فيما يلي مثال على إعداد الإدخال لـ `model.generate()`، باستخدام نموذج المساعد `Zephyr`: + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer + +checkpoint = "HuggingFaceH4/zephyr-7b-beta" +tokenizer = AutoTokenizer.from_pretrained(checkpoint) +model = AutoModelForCausalLM.from_pretrained(checkpoint) # قد ترغب في استخدام bfloat16 و/أو الانتقال إلى GPU هنا + +messages = [ + { + "role": "system", + "content": "You are a friendly chatbot who always responds in the style of a pirate", + }, + {"role": "user", "content": "How many helicopters can a human eat in one sitting?"}, + ] +tokenized_chat = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt") +print(tokenizer.decode(tokenized_chat[0])) +``` +سيؤدي هذا إلى سلسلة بتنسيق الإدخال الذي يتوقعه Zephyr. + +```النص +<|system|> +You are a friendly chatbot who always responds in the style of a pirate +<|user|> +How many helicopters can a human eat in one sitting? +<|assistant|> +``` + +الآن بعد أن تم تنسيق الإدخال بشكل صحيح لـ Zephyr، يمكننا استخدام النموذج لتوليد استجابة لسؤال المستخدم: + +```python +outputs = model.generate(tokenized_chat, max_new_tokens=128) +print(tokenizer.decode(outputs[0])) +``` + +سيؤدي هذا إلى ما يلي: + +```النص +<|system|> +You are a friendly chatbot who always responds in the style of a pirate +<|user|> +How many helicopters can a human eat in one sitting? +<|assistant|> +Matey, I'm afraid I must inform ye that humans cannot eat helicopters. Helicopters are not food, they are flying machines. Food is meant to be eaten, like a hearty plate o' grog, a savory bowl o' stew, or a delicious loaf o' bread. But helicopters, they be for transportin' and movin' around, not for eatin'. So, I'd say none, me hearties. None at all. +``` + +أوه، لقد كان الأمر سهلاً بعد كل شيء! + +## هل هناك خط أنابيب أوتوماتيكي للدردشة؟ + +نعم هناك! تدعم خطوط أنابيب التوليد النصي لدينا إدخالات الدردشة، مما يجعل من السهل استخدام نماذج الدردشة. في الماضي، كنا نستخدم فئة "ConversationalPipeline" مخصصة، ولكن تم الآن إيقافها وتم دمج وظائفها في [`TextGenerationPipeline`]. دعونا نجرب مثال Zephyr مرة أخرى، ولكن هذه المرة باستخدام خط أنابيب: + +```python +from transformers import pipeline + +pipe = pipeline("text-generation", "HuggingFaceH4/zephyr-7b-beta") +messages = [ + { + "role": "system", + "content": "You are a friendly chatbot who always responds in the style of a pirate", + }, + {"role": "user", "content": "How many helicopters can a human eat in one sitting?"}, +] +print(pipe(messages, max_new_tokens=128)[0]['generated_text'][-1]) # طباعة استجابة المساعد +``` + +```النص +{'role': 'assistant', 'content': "Matey, I'm afraid I must inform ye that humans cannot eat helicopters. Helicopters are not food, they are flying machines. Food is meant to be eaten, like a hearty plate o' grog, a savory bowl o' stew, or a delicious loaf o' bread. But helicopters, they be for transportin' and movin' around, not for eatin'. So, I'd say none, me hearties. None at all."} +``` + +سيتولى خط الأنابيب جميع تفاصيل التحليل اللغوي واستدعاء `apply_chat_template` نيابة عنك - بمجرد حصول النموذج على قالب دردشة، كل ما عليك فعله هو تهيئة خط الأنابيب وتمريره إلى قائمة الرسائل! + +## ما هي "مطالبات التوليد"؟ + +قد تلاحظ أن طريقة `apply_chat_template` لها حجة `add_generation_prompt`. تخبر هذه الحجة القالب بإضافة رموز تشير إلى بداية استجابة البوت. على سبيل المثال، ضع في اعتبارك الدردشة التالية: + +```python +messages = [ + {"role": "user", "content": "Hi there!"}, + {"role": "assistant", "content": "Nice to meet you!"}, + {"role": "user", "content": "Can I ask a question?"} +] +``` + +هكذا يبدو الأمر بدون مطالبة التوليد، باستخدام قالب ChatML الذي رأيناه في مثال Zephyr: + +```python +tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=False) +"""<|im_start|>user +Hi there!<|im_end|> +<|im_start|>assistant +Nice to meet you!<|im_end|> +<|im_start|>user +Can I ask a question?<|im_end|> +""" +``` + +وهكذا يبدو الأمر **مع** مطالبة التوليد: + +```python +tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) +"""<|im_start|>user +Hi there!<|im_end|> +<|im_start|>assistant +Nice to meet you!<|im_end|> +<|im_start|>user +Can I ask a question?<|im_end|> +<|im_start|>assistant +""" +``` + +لاحظ أننا أضفنا هذه المرة الرموز التي تشير إلى بداية استجابة البوت. يضمن هذا أنه عند توليد النموذج للنص، فسوف يكتب استجابة البوت بدلاً من القيام بشيء غير متوقع، مثل الاستمرار في رسالة المستخدم. تذكر، أن نماذج الدردشة لا تزال مجرد نماذج للغة - فهي مدربة على الاستمرار في النص، والدردشة هي مجرد نوع خاص من النص بالنسبة لهم! يجب توجيهها باستخدام الرموز التحكمية المناسبة، حتى تعرف ما الذي يجب عليها فعله. + +لا تحتاج جميع النماذج إلى مطالبات التوليد. بعض النماذج، مثل BlenderBot وLLaMA، ليس لديها أي رموز خاصة قبل استجابات البوت. في هذه الحالات، لن يكون لحجة `add_generation_prompt` أي تأثير. يعتمد التأثير الدقيق لـ `add_generation_prompt` على القالب المستخدم. + +## هل يمكنني استخدام قوالب الدردشة في التدريب؟ + +نعم! هذه طريقة جيدة لضمان مطابقة قالب الدردشة للرموز التي يراها النموذج أثناء التدريب. نوصي بتطبيق قالب الدردشة كخطوة ما قبل المعالجة لمجموعة البيانات الخاصة بك. بعد ذلك، يمكنك ببساطة الاستمرار كما هو الحال في أي مهمة نمذجة لغة أخرى. عند التدريب، يجب عليك عادةً تعيين `add_generation_prompt=False`، لأن الرموز المضافة لطلب استجابة المساعد لن تكون مفيدة أثناء التدريب. دعونا نرى مثالاً: + +```python +from transformers import AutoTokenizer +from datasets import Dataset + +tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta") + +chat1 = [ + {"role": "user", "content": "Which is bigger, the moon or the sun?"}, + {"role": "assistant", "content": "The sun."} +] +chat2 = [ + {"role": "user", "content": "Which is bigger, a virus or a bacterium?"}, + {"role": "assistant", "content": "A bacterium."} +] + +dataset = Dataset.from_dict({"chat": [chat1, chat2]}) +dataset = dataset.map(lambda x: {"formatted_chat": tokenizer.apply_chat_template(x["chat"], tokenize=False, add_generation_prompt=False)}) +print(dataset['formatted_chat'][0]) +``` +ونحصل على: + +```النص +<|user|> +Which is bigger, the moon or the sun? +<|assistant|> +The sun. +``` + +من هنا، استمر في التدريب كما تفعل مع مهمة نمذجة اللغة القياسية، باستخدام عمود `formatted_chat`. + + +إذا قمت بتنسيق النص باستخدام `apply_chat_template(tokenize=False)` ثم قمت بتحليله نحويًا في خطوة منفصلة، فيجب عليك تعيين الحجة `add_special_tokens=False`. إذا كنت تستخدم `apply_chat_template(tokenize=True)`، فلست بحاجة إلى القلق بشأن ذلك! + +بشكل افتراضي، يقوم بعض المحللين اللغويين بإضافة رموز خاصة مثل `` و `` إلى النص الذي يقومون بتحليلها نحويًا. يجب أن تتضمن قوالب الدردشة دائمًا جميع الرموز الخاصة التي تحتاجها، لذلك قد يؤدي إضافة رموز خاصة إضافية باستخدام الإعداد الافتراضي `add_special_tokens=True` إلى رموز خاصة غير صحيحة أو مكررة، مما قد يؤثر سلبًا على أداء النموذج. + + +## متقدم: إدخالات إضافية إلى قوالب الدردشة + +الحجة الوحيدة التي تتطلبها طريقة `apply_chat_template` هي `messages`. ومع ذلك، يمكنك تمرير أي حجة كلمة مفتاحية إلى `apply_chat_template` وستكون قابلة للوصول داخل القالب. يمنحك هذا الكثير من الحرية لاستخدام قوالب الدردشة للعديد من الأشياء. لا توجد قيود على أسماء هذه الحجج أو تنسيقاتها - يمكنك تمرير السلاسل أو القوائم أو القواميس أو أي شيء آخر تريده. + +ومع ذلك، هناك بعض الحالات الشائعة لاستخدام هذه الحجج الإضافية، مثل تمرير أدوات لاستدعاء الدالة، أو المستندات للتحصيل المعزز للتوليد. في هذه الحالات الشائعة، لدينا بعض التوصيات ذات الرأي حول أسماء هذه الحجج وتنسيقاتها، والتي يتم وصفها في الأقسام أدناه. نشجع مؤلفي النماذج على جعل قوالب الدردشة الخاصة بهم متوافقة مع هذا التنسيق، لتسهيل نقل التعليمات البرمجية لاستدعاء الأدوات بين النماذج. + +## متقدم: استخدام الأداة / استدعاء الدالة + +يمكن لنماذج "استخدام الأداة" اختيار استدعاء الدوال كأدوات خارجية قبل توليد إجابة. عند تمرير الأدوات إلى نموذج استخدام الأداة، يمكنك ببساطة تمرير قائمة من الدوال إلى حجة `tools`: + +```python +import datetime + +def current_time(): + """Get the current local time as a string.""" + return str(datetime.now()) + +def multiply(a: float, b: float): + """ + A function that multiplies two numbers + + Args: + a: The first number to multiply + b: The second number to multiply + """ + return a * b + +tools = [current_time, multiply] + +model_input = tokenizer.apply_chat_template( + messages, + tools=tools +) +``` + +لكي يعمل هذا بشكل صحيح، يجب عليك كتابة دالاتك بتنسيق أعلاه، حتى يمكن تحليلها بشكل صحيح كأدوات. على وجه التحديد، يجب عليك اتباع هذه القواعد: + +- يجب أن يكون للدالة اسم وصفي. +- يجب أن يكون لكل حجة نوع تلميح. +- يجب أن تحتوي الدالة على سلسلة توثيق بتنسيق Google القياسي (بمعنى وصف الدالة الأولي متبوعًا بكتلة `Args:` التي تصف الحجج، ما لم تكن الدالة لا تحتوي على أي حجج. +- لا تقم بتضمين الأنواع في كتلة `Args:` . بعبارة أخرى، اكتب `a: The first number to multiply`، وليس `a (int): The first number to multiply`. يجب أن تذهب تلميحات الأنواع في رأس الدالة بدلاً من ذلك. +- يمكن أن يكون للدالة نوع إرجاع وكتلة `Returns:` في السلسلة. ومع ذلك، فهذه اختيارية لأن معظم نماذج استخدام الأدوات تتجاهلها. + +### تمرير نتائج الأداة إلى النموذج + +يكفي رمز المثال أعلاه لإدراج الأدوات المتاحة لنموذجك، ولكن ماذا يحدث إذا أراد النموذج استخدام واحدة منها؟ إذا حدث ذلك، فيجب عليك: + +1. تحليل إخراج النموذج للحصول على اسم (أسماء) الأداة والحجج. +2. أضف استدعاء (استدعاءات) أداة النموذج إلى المحادثة. +3. استدعاء الدالة (الدالات) المقابلة بتلك الحجج. +4. أضف النتيجة (النتائج) إلى المحادثة + +### مثال كامل على استخدام الأداة + +دعونا نمر عبر مثال على استخدام الأداة، خطوة بخطوة. لهذا المثال، سنستخدم نموذج Hermes-2- +## إعداد محادثة للبوت الخاص بنا: + +```python +messages = [ + {"role": "system", "content": "You are a bot that responds to weather queries. You should reply with the unit used in the queried location."}, + {"role": "user", "content": "Hey, what's the temperature in Paris right now?"} +] +``` + +والآن، دعنا نطبق قالب الدردشة ونولد استجابة: + +```python +inputs = tokenizer.apply_chat_template(messages, chat_template="tool_use", tools=tools, add_generation_prompt=True, return_dict=True, return_tensors="pt") +inputs = {k: v.to(model.device) for k, v in inputs.items()} +out = model.generate(**inputs, max_new_tokens=128) +print(tokenizer.decode(out[0][len(inputs["input_ids"][0]):])) +``` + +ونحصل على: + +```text + +{"arguments": {"location": "Paris, France", "unit": "celsius"}, "name": "get_current_temperature"} +<|im_end|> +``` + +لقد قام النموذج باستدعاء الدالة مع وسائط صحيحة، بالصيغة التي طلبتها توثيق الدالة. لقد استنتج أننا نشير على الأرجح إلى باريس في فرنسا، وتذكر أنه باعتبارها موطن الوحدات الدولية، يجب عرض درجة الحرارة في فرنسا بالدرجة المئوية. + +دعنا نضيف استدعاء الأداة الخاص بالنموذج إلى المحادثة. لاحظ أننا نولد معرف استدعاء أداة عشوائيًا هنا. لا تستخدم جميع النماذج هذه المعرفات، ولكنها تسمح للنماذج بإصدار عدة استدعاءات للأدوات في نفس الوقت وتتبع الاستجابة المقابلة لكل استدعاء. يمكنك توليد هذه المعرفات بأي طريقة تريدها، ولكن يجب أن تكون فريدة داخل كل محادثة. + +```python +tool_call_id = "vAHdf3" # Random ID, should be unique for each tool call +tool_call = {"name": "get_current_temperature", "arguments": {"location": "Paris, France", "unit": "celsius"}} +messages.append({"role": "assistant", "tool_calls": [{"id": tool_call_id, "type": "function", "function": tool_call}]}) +``` + +الآن بعد أن أضفنا استدعاء الأداة إلى المحادثة، يمكننا استدعاء الدالة وإضافة النتيجة إلى المحادثة. نظرًا لأننا نستخدم دالة وهمية لهذا المثال والتي تعيد دائمًا 22.0، فيمكننا ببساطة إضافة تلك النتيجة مباشرةً. لاحظ معرف استدعاء الأداة - يجب أن يتطابق مع المعرف المستخدم في استدعاء الأداة أعلاه. + +```python +messages.append({"role": "tool", "tool_call_id": tool_call_id, "name": "get_current_temperature", "content": "22.0"}) +``` + +أخيرًا، دعنا نجعل المساعد يقرأ مخرجات الدالة ويكمل الدردشة مع المستخدم: + +```python +inputs = tokenizer.apply_chat_template(messages, chat_template="tool_use", tools=tools, add_generation_prompt=True, return_dict=True, return_tensors="pt") +inputs = {k: v.to(model.device) for k, v in inputs.items()} +out = model.generate(**inputs, max_new_tokens=128) +print(tokenizer.decode(out[0][len(inputs["input_ids"][0]):])) +``` + +ونحصل على: + +```text +The current temperature in Paris, France is 22.0 ° Celsius.<|im_end|> +``` + +على الرغم من أن هذا كان مجرد عرض توضيحي بسيط باستخدام أدوات وهمية ومحادثة ذات استدعاء واحد، إلا أن نفس التقنية تعمل مع أدوات حقيقية ومحادثات أطول. يمكن أن تكون هذه طريقة فعالة لتوسيع قدرات الوكلاء المحادثيين باستخدام معلومات في الوقت الفعلي، أو أدوات حسابية مثل الآلات الحاسبة، أو الوصول إلى قواعد بيانات كبيرة. + + +لا تستخدم جميع نماذج استخدام الأدوات جميع ميزات استدعاء الأدوات الموضحة أعلاه. يستخدم البعض معرفات استدعاء الأدوات، بينما يستخدم البعض الآخر ببساطة اسم الدالة ويقارن استدعاءات الأدوات بالنتائج باستخدام الترتيب، وهناك عدة نماذج لا تستخدم أيًا منهما ولا تصدر سوى استدعاء أداة واحد في كل مرة لتجنب الارتباك. إذا كنت تريد أن يكون رمزك متوافقًا مع أكبر عدد ممكن من النماذج، فإننا نوصي بهيكلة استدعاءات الأدوات الخاصة بك كما هو موضح هنا، وإعادة نتائج الأدوات بالترتيب الذي أصدرها النموذج. يجب أن تتعامل قوالب الدردشة على كل نموذج مع الباقي. + + +### فهم مخططات الأدوات + +يتم تحويل كل دالة تقوم بتمريرها إلى وسيطة "الأدوات" في "apply_chat_template" إلى [مخطط JSON](https://json-schema.org/learn/getting-started-step-by-step). يتم بعد ذلك تمرير هذه المخططات إلى قالب محادثة النموذج. وبعبارة أخرى، فإن نماذج استخدام الأدوات لا ترى دالاتك مباشرة، ولا ترى مطلقًا الرمز الموجود بداخلها. ما يهمها هو تعريفات الدالة والوسيطات التي تحتاج إلى تمريرها إليها - فهي تهتم بما تفعله الأدوات وكيفية استخدامها، وليس كيفية عملها! يتوقف الأمر عليك في قراءة مخرجاتها، والكشف عما إذا كانت قد طلبت استخدام أداة، وتمرير وسائطها إلى دالة الأداة، وإعادة الاستجابة في الدردشة. + +يجب أن يكون إنشاء مخططات JSON لتمريرها إلى القالب تلقائيًا وغير مرئي طالما أن دالاتك تتبع المواصفات الموضحة أعلاه، ولكن إذا واجهت مشكلات، أو إذا كنت تريد ببساطة مزيدًا من التحكم في التحويل، فيمكنك التعامل مع التحويل يدويًا. فيما يلي مثال على التحويل اليدوي للمخطط. + +```python +from transformers.utils import get_json_schema + +def multiply(a: float, b: float): + """ + A function that multiplies two numbers + + Args: + a: The first number to multiply + b: The second number to multiply + """ + return a * b + +schema = get_json_schema(multiply) +print(schema) +``` + +سيؤدي هذا إلى ما يلي: + +```json +{ + "type": "function", + "function": { + "name": "multiply", + "description": "A function that multiplies two numbers", + "parameters": { + "type": "object", + "properties": { + "a": { + "type": "number", + "description": "The first number to multiply" + }, + "b": { + "type": "number", + "description": "The second number to multiply" + } + }, + "required": ["a", "b"] + } + } +} +``` + +إذا كنت ترغب في ذلك، يمكنك تحرير هذه المخططات، أو حتى كتابتها من الصفر بنفسك دون استخدام `get_json_schema` على الإطلاق. يمكن تمرير مخططات JSON مباشرةً إلى وسيطة "الأدوات" في `apply_chat_template` - يمنحك هذا الكثير من القوة لتعريف مخططات دقيقة لوظائف أكثر تعقيدًا. ولكن كن حذرًا - كلما زاد تعقيد مخططاتك، زاد احتمال ارتباك النموذج عند التعامل معها! نوصي بالتوقيعات البسيطة للدالة حيثما أمكن، مع تقليل الوسائط (وخاصة الوسائط المعقدة والمستشعرة) إلى الحد الأدنى. + +فيما يلي مثال على تعريف المخططات يدويًا، وتمريرها مباشرةً إلى `apply_chat_template`: + +```python +# A simple function that takes no arguments +current_time = { + "type": "function", + "function": { + "name": "current_time", + "description": "Get the current local time as a string.", + "parameters": { + 'type': 'object', + 'properties': {} + } + } +} + +# A more complete function that takes two numerical arguments +multiply = { + 'type': 'function', + 'function': { + 'name': 'multiply', + 'description': 'A function that multiplies two numbers', + 'parameters': { + 'type': 'object', + 'properties': { + 'a': { + 'type': 'number', + 'description': 'The first number to multiply' + }, + 'b': { + 'type': 'number', 'description': 'The second number to multiply' + } + }, + 'required': ['a', 'b'] + } + } +} + +model_input = tokenizer.apply_chat_template( + messages, + tools = [current_time, multiply] +) +``` +عندما يكون لدى أداة تجزئة الرموز النصية عدة قوالب، ستكون `tokenizer.chat_template` عبارة عن `dict`، حيث يكون كل مفتاح هو اسم قالب. وللطريقة 'apply_chat_template' معالجة خاصة لأسماء القوالب المحددة: على وجه التحديد، فسوف تبحث عن قالب يسمى "default" في معظم الحالات، وسوف تثير خطأ إذا لم تجد واحدًا. ومع ذلك، إذا وجد قالب يسمى "tool_use" عندما يمرر المستخدم حجة "tools"، فسيتم استخدام ذلك بدلاً من ذلك. للوصول إلى القوالب بأسماء أخرى، قم بتمرير اسم القالب الذي تريده إلى وسيط "chat_template" من "apply_chat_template()". + +نحن نجد أن هذا يمكن أن يكون مربكًا بعض الشيء للمستخدمين، على الرغم من ذلك - لذا إذا كنت تكتب قالبًا بنفسك، فإننا نوصي بمحاولة وضعه في قالب واحد حيثما أمكن! + +## ما القالب الذي يجب أن أستخدمه؟ + +عند تعيين القالب لنموذج تم تدريبه بالفعل على الدردشة، يجب التأكد من أن القالب يتطابق تمامًا مع تنسيق الرسالة الذي شاهده النموذج أثناء التدريب، وإلا فمن المحتمل أن تواجه تدهورًا في الأداء. هذا صحيح حتى إذا كنت تدرب النموذج بشكل أكبر - فمن المحتمل أن تحصل على أفضل أداء إذا قمت بإبقاء رموز الدردشة ثابتة. هذا مشابه جدًا للتجزئة الرمزية - فأنت تحصل بشكل عام على أفضل أداء للاستدلال أو الضبط الدقيق عندما تتطابق بدقة مع التجزئة الرمزية المستخدمة أثناء التدريب. + +إذا كنت تدرب نموذجًا من الصفر، أو تقوم بضبط دقيق لنموذج لغة أساسي للدردشة، من ناحية أخرى، لديك حرية اختيار قالب مناسب! تتمتع LLMs بالذكاء الكافي للتعامل مع العديد من تنسيقات الإدخال المختلفة. أحد الخيارات الشائعة هو تنسيق "ChatML"، وهو خيار جيد ومرن للعديد من حالات الاستخدام. يبدو هكذا: + +``` +{%- for message in messages %} + {{- '<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n' }} +{%- endfor %} +``` + +إذا أعجبك هذا، فإليك نسخة جاهزة لوضعها في كودك. يتضمن الخط المفرد أيضًا دعمًا مفيدًا [لإرشادات التوليد](#what-are-generation-prompts)، ولكن لاحظ أنه لا يضيف رموز BOS أو EOS! إذا كان نموذجك يتوقع تلك، فلن يتم إضافتها تلقائيًا بواسطة "apply_chat_template" - بمعنى آخر، سيتم توكين النص باستخدام "add_special_tokens=False". هذا لتجنب التضارب المحتمل بين القالب ومنطق "add_special_tokens". إذا كان نموذجك يتوقع رموزًا خاصة، فتأكد من إضافتها إلى القالب! + +```python +tokenizer.chat_template = "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}" +``` + +يغلف هذا القالب كل رسالة بين الرمزين "<|im_start|>" و "<|im_end|>"، ويكتب ببساطة الدور كسلسلة، مما يسمح بالمرونة في الأدوار التي تتدرب عليها. يبدو الإخراج كما يلي: + +```text +<|im_start|>system +You are a helpful chatbot that will do its best not to say anything so stupid that people tweet about it.<|im_end|> +<|im_start|>user +How are you?<|im_end|> +<|im_start|>assistant +I'm doing great!<|im_end|> +``` + +تعد أدوار "user" و "system" و "assistant" هي المعيار للدردشة، ونوصي باستخدامها عندما يكون ذلك منطقيًا، خاصة إذا كنت تريد أن يعمل نموذجك بشكل جيد مع [`TextGenerationPipeline`]. ومع ذلك، فأنت لست مقيدًا بهذه الأدوار - القوالب مرنة للغاية، ويمكن أن تكون أي سلسلة دورًا. + + +## أريد إضافة بعض قوالب الدردشة! كيف أبدأ؟ + +إذا كان لديك أي نماذج دردشة، فيجب عليك تعيين سمة "tokenizer.chat_template" الخاصة بها واختبارها باستخدام [`~PreTrainedTokenizer.apply_chat_template`]، ثم دفع محدد التحليل اللغوي المحدث إلى Hub. ينطبق هذا حتى إذا لم تكن مالك النموذج - إذا كنت تستخدم نموذجًا بقالب دردشة فارغ، أو لا يزال يستخدم قالب الفئة الافتراضية، فيرجى فتح طلب سحب إلى مستودع النموذج حتى يمكن تعيين السمة بشكل صحيح! + +بمجرد تعيين السمة، هذا كل شيء، لقد انتهيت! ستعمل "tokenizer.apply_chat_template" الآن بشكل صحيح لهذا النموذج، مما يعني أنها مدعومة أيضًا بشكل تلقائي في أماكن مثل "TextGenerationPipeline"! + +من خلال التأكد من أن النماذج لديها هذه السمة، يمكننا التأكد من أن المجتمع بأكمله يستخدم القوة الكاملة للنماذج مفتوحة المصدر. لقد كانت عدم تطابق التنسيق تطارد المجال وتضر الأداء بهدوء لفترة طويلة جدًا - لقد حان الوقت لوضع حد لها! + +## متقدم: نصائح لكتابة القوالب + +إذا كنت غير معتاد على Jinja، فإننا نجد بشكل عام أن أسهل طريقة لكتابة قالب دردشة هي أولاً كتابة نص برمجي Python قصير يقوم بتنسيق الرسائل بالطريقة التي تريدها، ثم تحويل هذا النص إلى قالب. + +تذكر أن برنامج التعامل مع القوالب سيستلم سجل المحادثة كمتغير يسمى "messages". ستتمكن من الوصول إلى "messages" في قالبك تمامًا كما هو الحال في Python، مما يعني أنه يمكنك التكرار عبره باستخدام "{% for message in messages %}" أو الوصول إلى الرسائل الفردية باستخدام "{{ messages[0] }}"، على سبيل المثال. + +يمكنك أيضًا استخدام النصائح التالية لتحويل كودك إلى Jinja: + +### تقليم المسافات البيضاء + +بشكل افتراضي، ستطبع Jinja أي مسافات بيضاء تأتي قبل أو بعد كتلة. يمكن أن يكون هذا مشكلة لقوالب الدردشة، والتي تريد عادةً أن تكون دقيقة جدًا مع المسافات البيضاء! لتجنب ذلك، نوصي بشدة بكتابة قوالبك على النحو التالي: + +``` +{%- for message in messages %} + {{- message['role'] + message['content'] }} +{%- endfor %} +``` + +بدلاً من ذلك: + +``` +{% for message in messages %} + {{ message['role'] + message['content'] }} +{% endfor %} +``` + +سيؤدي إضافة "-" إلى إزالة أي مسافات بيضاء تأتي قبل الكتلة. يبدو المثال الثاني بريئًا، ولكن قد يتم تضمين السطر الجديد والمسافة البادئة في الإخراج، وهو على الأرجح ليس ما تريده! + +### حلقات for + +تبدو حلقات for في Jinja على النحو التالي: + +``` +{%- for message in messages %} + {{- message['content'] }} +{%- endfor %} +``` + +لاحظ أن ما بداخل كتلة `{{ expression }}` سيتم طباعته في الإخراج. يمكنك استخدام عوامل التشغيل مثل `+` لدمج السلاسل داخل كتل التعبير. + +### جمل الشرط + +تبدو جمل الشرط في Jinja على النحو التالي: + +``` +{%- if message['role'] == 'user' %} + {{- message['content'] }} +{%- endif %} +``` + +لاحظ كيف يستخدم Python المسافات البيضاء للإشارة إلى بدايات ونهايات كتل "for" و "if"، تتطلب Jinja منك إنهاءها بشكل صريح باستخدام "{% endfor %}" و "{% endif %}". + +### المتغيرات الخاصة + +داخل قالبك، ستتمكن من الوصول إلى قائمة "messages"، ولكن يمكنك أيضًا الوصول إلى العديد من المتغيرات الخاصة الأخرى. تشمل هذه الرموز الخاصة مثل "bos_token" و "eos_token"، بالإضافة إلى متغير "add_generation_prompt" الذي ناقشناه أعلاه. يمكنك أيضًا استخدام متغير "loop" للوصول إلى معلومات حول تكرار الحلقة الحالي، على سبيل المثال باستخدام "{% if loop.last %}" للتحقق مما إذا كانت الرسالة الحالية هي الرسالة الأخيرة في المحادثة. إليك مثال يجمع هذه الأفكار معًا لإضافة موجه إنشاء في نهاية المحادثة إذا كان "add_generation_prompt" هو "True": + +``` +{%- if loop.last and add_generation_prompt %} + {{- bos_token + 'Assistant:\n' }} +{%- endif %} +``` + +### التوافق مع Jinja غير Python +``` +{%- if loop.last and add_generation_prompt %} + {{- bos_token + 'Assistant:\n' }} +{%- endif %} +``` + +### التوافق مع Jinja غير Python + +هناك العديد من تطبيقات Jinja بلغات مختلفة. عادة ما يكون لها نفس بناء الجملة، ولكن الاختلاف الرئيسي هو أنه عند كتابة قالب في Python، يمكنك استخدام طرق Python، مثل ".lower()" على السلاسل أو ".items()" على القواميس. سيؤدي هذا إلى كسر إذا حاول شخص ما استخدام قالبك في تنفيذ غير Python لـ Jinja. تعد التطبيقات غير Python شائعة بشكل خاص في بيئات النشر، حيث تعد JS و Rust شائعة جدًا. + +لا تقلق، على الرغم من ذلك! هناك بعض التغييرات البسيطة التي يمكنك إجراؤها على قوالبك لضمان توافقها عبر جميع تطبيقات Jinja: + +- استبدل طرق Python بمرشحات Jinja. عادة ما يكون لها نفس الاسم، على سبيل المثال، يصبح "string.lower()" عبارة عن "string|lower"، ويصبح "dict.items()" عبارة عن "dict|items". أحد التغييرات الملحوظة هو أن "string.strip()" يصبح "string|trim". راجع [قائمة المرشحات المدمجة](https://jinja.palletsprojects.com/en/3.1.x/templates/#builtin-filters) في وثائق Jinja لمزيد من المعلومات. +- استبدل "True" و "False" و "None"، وهي خاصة بـ Python، بـ "true" و "false" و "none". +- قد يؤدي عرض قاموس أو قائمة مباشرة إلى نتائج مختلفة في التطبيقات الأخرى (على سبيل المثال، قد تتغير الإدخالات ذات الاقتباس المفرد إلى إدخالات مزدوجة الاقتباس). يمكن أن يساعد إضافة مرشح "tojson" في ضمان الاتساق هنا. \ No newline at end of file From 74547f6b7457298b51d00a41656797ad91be1d62 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:08 +0300 Subject: [PATCH 043/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/contributing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/contributing.md | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/source/ar/contributing.md diff --git a/docs/source/ar/contributing.md b/docs/source/ar/contributing.md new file mode 100644 index 00000000000000..ceae74f595c67b --- /dev/null +++ b/docs/source/ar/contributing.md @@ -0,0 +1,51 @@ +# كيفية المساهمة + +نحن نرحب بجميع المساهمات التي تتوافق مع أهداف هذا المشروع. إذا كانت لديك أي أفكار أو اقتراحات أو تصحيحات أو إضافات، يرجى عدم التردد في إنشاء طلب سحب (Pull Request). + +## قبل أن تبدأ + +يرجى التأكد من مراجعة قائمة المشكلات (Issues) المفتوحة قبل بدء العمل على مساهمتك. إذا كانت هناك مشكلة مشابهة لما تريد العمل عليه، فيرجى مناقشتها معنا قبل بدء العمل لتجنب أي ازدواجية في الجهود. + +## إرشادات الترجمة + +إذا كنت ترغب في المساهمة بترجمات، يرجى التأكد من اتباع الإرشادات التالية: + +1. استخدم اللغة العربية الفصحى الواضحة والسهلة الفهم. + +2. تأكد من دقة الترجمة ومعناها، خاصة عند ترجمة المصطلحات التقنية. + +3. قم بترجمة المحتوى النصي فقط، ولا تترجم أي أكواد برمجية أو رموز خاصة. + +4. إذا كانت هناك أي تعليقات أو ملاحظات في النص الأصلي، يرجى ترجمتها أيضاً. + +5. استخدم علامات الترقيم بشكل صحيح وفعال لتحسين وضوح النص المترجم. + +## طلبات السحب + +عند إرسال طلب سحب، يرجى التأكد من تضمين المعلومات التالية: + +1. وصف تفصيلي للتغييرات التي أجريتها. + +2. شرح حول سبب كون هذه التغييرات ضرورية أو مفيدة. + +3. إذا كان طلب السحب الخاص بك يتعلق بمشكلة مفتوحة، يرجى ذكر رقم المشكلة. + +4. قم بتضمين لقطات الشاشة أو أي مواد أخرى ذات صلة إذا لزم الأمر. + +## اختبار التغييرات + +قبل إرسال طلب السحب، يرجى التأكد من اختبار التغييرات التي أجريتها للتأكد من أنها تعمل بشكل صحيح ولا تسبب أي مشكلات. إذا كانت مساهمتك تتضمن تغييرات في التعليمات البرمجية، يرجى التأكد من إضافة اختبارات مناسبة أيضًا. + +## قواعد السلوك + +نحن نتوقع من جميع المساهمين اتباع قواعد السلوك الخاصة بنا في جميع تفاعلاتهم مع المشروع. يرجى الاطلاع على [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) لمزيد من المعلومات. + +## الاعتراف بالمساهمات + +نحن نقدر جميع المساهمات ونريد الاعتراف بجهودكم. سنقوم بتضمين اسمك في قائمة المساهمين عند قبول مساهمتك. إذا كنت لا تريد ذلك، يرجى إعلامنا. + +## الحصول على المساعدة + +إذا واجهتك أي مشكلات أو لديك أي أسئلة أثناء عملك على مساهمتك، لا تتردد في فتح مشكلة أو التواصل معنا. نحن سعداء دائمًا بمساعدة المساهمين الجدد والقدامى على حد سواء. + +شكرًا لك على اهتمامك بالمشروع، ونتطلع إلى مساهماتك! \ No newline at end of file From 286243f4c38cba4060bd983512c8797010a6da75 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:10 +0300 Subject: [PATCH 044/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/create=5Fa=5Fmodel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/create_a_model.md | 443 +++++++++++++++++++++++++++++++ 1 file changed, 443 insertions(+) create mode 100644 docs/source/ar/create_a_model.md diff --git a/docs/source/ar/create_a_model.md b/docs/source/ar/create_a_model.md new file mode 100644 index 00000000000000..92c09e421a0975 --- /dev/null +++ b/docs/source/ar/create_a_model.md @@ -0,0 +1,443 @@ +# إنشاء بنية مخصصة + +تستنتج فئة [`AutoClass`](model_doc/auto) تلقائيًا بنية النموذج وتقوم بتنزيل تكوين ووزن مسبقين. بشكل عام، نوصي باستخدام `AutoClass` لإنتاج كود غير مرتبط بنقطة تفتيش معينة. ولكن يمكن للمستخدمين الذين يريدون مزيدًا من التحكم في معلمات النموذج المحددة إنشاء نموذج مخصص من 🤗 Transformers من مجرد بضع فئات أساسية. قد يكون هذا مفيدًا بشكل خاص لأي شخص مهتم بدراسة نموذج 🤗 Transformers أو تدريبه أو إجراء تجارب عليه. في هذا الدليل، سنغوص بشكل أعمق في إنشاء نموذج مخصص بدون `AutoClass`. تعرف على كيفية: + +- تحميل تكوين النموذج وتخصيصه. +- إنشاء بنية نموذج. +- إنشاء محلل نحوي سريع وبطيء للنص. +- إنشاء معالج صور لمهام الرؤية. +- إنشاء مستخرج ميزات لمهام الصوت. +- إنشاء معالج للمهام متعددة الوسائط. + +## التكوين + +يشير [التكوين](main_classes/configuration) إلى السمات المحددة للنموذج. لكل تكوين نموذج سمات مختلفة؛ على سبيل المثال، تمتلك جميع نماذج NLP سمات `hidden_size` و`num_attention_heads` و`num_hidden_layers` و`vocab_size` المشتركة. تحدد هذه السمات عدد رؤوس الاهتمام أو الطبقات المخفية لبناء نموذج بها. + +الق نظرة فاحصة على [DistilBERT](model_doc/distilbert) عن طريق الوصول إلى [`DistilBertConfig`] لفحص سماته: + +```py +>>> from transformers import DistilBertConfig + +>>> config = DistilBertConfig() +>>> print(config) +DistilBertConfig { + "activation": "gelu", + "attention_dropout": 0.1, + "dim": 768, + "dropout": 0.1, + "hidden_dim": 3072, + "initializer_range": 0.02, + "max_position_embeddings": 512, + "model_type": "distilbert", + "n_heads": 12, + "n_layers": 6, + "pad_token_id": 0, + "qa_dropout": 0.1, + "seq_classif_dropout": 0.2, + "sinusoidal_pos_embds": false, + "transformers_version": "4.16.2", + "vocab_size": 30522 +} +``` + +يعرض [`DistilBertConfig`] جميع السمات الافتراضية المستخدمة لبناء [`DistilBertModel`] أساسي. جميع السمات قابلة للتخصيص، مما يخلق مساحة للتجريب. على سبيل المثال، يمكنك تخصيص نموذج افتراضي لـ: + +- تجربة دالة تنشيط مختلفة مع معلمة `activation`. +- استخدام نسبة إسقاط أعلى لاحتمالات الاهتمام مع معلمة `attention_dropout`. + +```py +>>> my_config = DistilBertConfig(activation="relu", attention_dropout=0.4) +>>> print(my_config) +DistilBertConfig { + "activation": "relu", + "attention_dropout": 0.4, + +``` + +يمكن تعديل سمات النموذج المدرب مسبقًا في دالة [`~PretrainedConfig.from_pretrained`] : + +```py +>>> my_config = DistilBertConfig.from_pretrained("distilbert/distilbert-base-uncased", activation="relu", attention_dropout=0.4) +``` + +بمجرد أن تصبح راضيًا عن تكوين نموذجك، يمكنك حفظه باستخدام [`~PretrainedConfig.save_pretrained`]. يتم تخزين ملف التكوين الخاص بك على أنه ملف JSON في دليل الحفظ المحدد: +بمجرد أن تصبح راضيًا عن تكوين نموذجك، يمكنك حفظه باستخدام [`~PretrainedConfig.save_pretrained`]. يتم تخزين ملف التكوين الخاص بك على أنه ملف JSON في دليل الحفظ المحدد: + +```py +>>> my_config.save_pretrained(save_directory="./your_model_save_path") +``` + +لإعادة استخدام ملف التكوين، قم بتحميله باستخدام [`~PretrainedConfig.from_pretrained`]: + +```py +>>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/config.json") +``` + + + +يمكنك أيضًا حفظ ملف التكوين الخاص بك كقاموس أو حتى كفرق بين سمات التكوين المخصص وسمات التكوين الافتراضي! راجع وثائق [التكوين](main_classes/configuration) لمزيد من التفاصيل. + + + + +## النموذج + +الخطوة التالية هي إنشاء [نموذج](main_classes/models). النموذج - الذي يشار إليه أيضًا بشكل فضفاض باسم الهندسة المعمارية - يحدد ما تفعله كل طبقة وما هي العمليات التي تحدث. تُستخدم سمات مثل `num_hidden_layers` من التكوين لتحديد الهندسة المعمارية. تشترك جميع النماذج في فئة الأساس [`PreTrainedModel`] وبعض الطرق الشائعة مثل تغيير حجم تضمين الإدخال وتشذيب رؤوس الاهتمام الذاتي. بالإضافة إلى ذلك، فإن جميع النماذج هي أيضًا إما [`torch.nn.Module`](https://pytorch.org/docs/stable/generated/torch.nn.Module.html)، [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model) أو [`flax.linen.Module`](https://flax.readthedocs.io/en/latest/api_reference/flax.linen/module.html) فئة فرعية. وهذا يعني أن النماذج متوافقة مع كل استخدام إطار عملها الخاص. + + + +قم بتحميل سمات التكوين المخصصة الخاصة بك في النموذج: + +```py +>>> from transformers import DistilBertModel + +>>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/config.json") +>>> model = DistilBertModel(my_config) +``` + +هذا ينشئ نموذجًا بقيم عشوائية بدلاً من الأوزان المسبقة التدريب. لن تتمكن من استخدام هذا النموذج لأي شيء مفيد حتى الآن حتى تقوم بتدريبه. التدريب عملية مكلفة وتستغرق وقتًا طويلاً. من الأفضل بشكل عام استخدام نموذج مُدرب مسبقًا للحصول على نتائج أفضل بشكل أسرع، مع استخدام جزء بسيط فقط من الموارد المطلوبة للتدريب. + +قم بإنشاء نموذج مُدرب مسبقًا باستخدام [`~PreTrainedModel.from_pretrained`]: + +```py +>>> model = DistilBertModel.from_pretrained("distilbert/distilbert-base-uncased") +``` + +عندما تقوم بتحميل الأوزان المُدربة مسبقًا، يتم تحميل تكوين النموذج الافتراضي تلقائيًا إذا كان النموذج مقدمًا من قبل 🤗 Transformers. ومع ذلك، يمكنك أيضًا استبدال - بعض أو كل - سمات تكوين النموذج الافتراضي بسماتك الخاصة إذا أردت ذلك: + +```py +>>> model = DistilBertModel.from_pretrained("distilbert/distilbert-base-uncased"، config=my_config) +``` + + +قم بتحميل سمات التكوين المخصصة الخاصة بك في النموذج: + +```py +>>> from transformers import TFDistilBertModel + +>>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/my_config.json") +>>> tf_model = TFDistilBertModel(my_config) +``` + +هذا ينشئ نموذجًا بقيم عشوائية بدلاً من الأوزان المسبقة التدريب. لن تتمكن من استخدام هذا النموذج لأي شيء مفيد حتى الآن حتى تقوم بتدريبه. التدريب عملية مكلفة وتستغرق وقتًا طويلاً. من الأفضل بشكل عام استخدام نموذج مُدرب مسبقًا للحصول على نتائج أفضل بشكل أسرع، مع استخدام جزء بسيط فقط من الموارد المطلوبة للتدريب. + +قم بإنشاء نموذج مُدرب مسبقًا باستخدام [`~TFPreTrainedModel.from_pretrained`]: + +```py +>>> tf_model = TFDistilBertModel.from_pretrained("distilbert/distilbert-base-uncased") +``` + +عندما تقوم بتحميل الأوزان المُدربة مسبقًا، يتم تحميل تكوين النموذج الافتراضي تلقائيًا إذا كان النموذج مقدمًا من قبل 🤗 Transformers. ومع ذلك، يمكنك أيضًا استبدال - بعض أو كل - سمات تكوين النموذج الافتراضي بسماتك الخاصة إذا أردت ذلك: + +```py +>>> tf_model = TFDistilBertModel.from_pretrained("distilbert/distilbert-base-uncased"، config=my_config) +``` + + + +### رؤوس النموذج + +في هذه المرحلة، لديك نموذج DistilBERT الأساسي الذي يخرج *حالات مخفية*. يتم تمرير الحالات المخفية كإدخالات لرأس النموذج لإنتاج الإخراج النهائي. يوفر 🤗 Transformers رأس نموذج مختلف لكل مهمة طالما أن النموذج يدعم المهمة (أي لا يمكنك استخدام DistilBERT لمهمة تسلسل إلى تسلسل مثل الترجمة). + + + +على سبيل المثال، [`DistilBertForSequenceClassification`] هو نموذج DistilBERT الأساسي برأس تصنيف تسلسل. رأس التصنيف التسلسلي هو طبقة خطية أعلى المخرجات المجمعة. + +```py +>>> from transformers import DistilBertForSequenceClassification + +>>> model = DistilBertForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") +``` + +أعد استخدام هذا نقطة التحقق لمهمة أخرى عن طريق التبديل إلى رأس نموذج مختلف. لمهمة الإجابة على الأسئلة، ستستخدم رأس النموذج [`DistilBertForQuestionAnswering`]. رأس الإجابة على الأسئلة مشابه لرأس التصنيف التسلسلي باستثناء أنه طبقة خطية أعلى حالات الإخراج المخفية. + +```py +>>> from transformers import DistilBertForQuestionAnswering + +>>> model = DistilBertForQuestionAnswering.from_pretrained("distilbert/distilbert-base-uncased") +``` + + +على سبيل المثال، [`TFDistilBertForSequenceClassification`] هو نموذج DistilBERT الأساسي برأس تصنيف تسلسل. رأس التصنيف التسلسلي هو طبقة خطية أعلى المخرجات المجمعة. + +```py +>>> from transformers import TFDistilBertForSequenceClassification + +>>> tf_model = TFDistilBertForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") +``` + +أعد استخدام هذا نقطة التحقق لمهمة أخرى عن طريق التبديل إلى رأس نموذج مختلف. لمهمة الإجابة على الأسئلة، ستستخدم رأس النموذج [`TFDistilBertForQuestionAnswering`]. رأس الإجابة على الأسئلة مشابه لرأس التصنيف التسلسلي باستثناء أنه طبقة خطية أعلى حالات الإخراج المخفية. + +```py +>>> from transformers import TFDistilBertForQuestionAnswering + +>>> tf_model = TFDistilBertForQuestionAnswering.from_pretrained("distilbert/distilbert-base-uncased") +``` + + + +## محول الرموز + +الفئة الأساسية الأخيرة التي تحتاجها قبل استخدام نموذج للبيانات النصية هي [محول الرموز](main_classes/tokenizer) لتحويل النص الخام إلى تنسورات. هناك نوعان من المحولات التي يمكنك استخدامها مع 🤗 Transformers: + +- [`PreTrainedTokenizer`]: تنفيذ Python لمحول الرموز. +- [`PreTrainedTokenizerFast`]: محول رموز من مكتبة [🤗 Tokenizer](https://huggingface.co/docs/tokenizers/python/latest/) المستندة إلى Rust الخاصة بنا. هذا النوع من المحول أسرع بشكل ملحوظ - خاصة أثناء توكين الدُفعات - بسبب تنفيذه في Rust. يوفر محول الرموز السريع أيضًا طرقًا إضافية مثل *مخطط الإزاحة* الذي يقوم بتعيين الرموز إلى كلماتها أو أحرفها الأصلية. + +يدعم كلا النوعين من المحولات طرقًا شائعة مثل الترميز وفك الترميز وإضافة رموز جديدة وإدارة الرموز الخاصة. + + + +لا يدعم كل نموذج محول رموز سريع. الق نظرة على هذا [جدول](index#supported-frameworks) للتحقق مما إذا كان النموذج يحتوي على دعم محول رموز سريع. + + + +إذا قمت بتدريب محول رموز مخصص، فيمكنك إنشاء واحد من ملف *المفردات* الخاص بك: + +```py +>>> from transformers import DistilBertTokenizer + +>>> my_tokenizer = DistilBertTokenizer(vocab_file="my_vocab_file.txt"، do_lower_case=False، padding_side="left") +``` + +من المهم أن تتذكر أن القاموس من محلل نحوي مخصص سيكون مختلفًا عن القاموس الذي تم إنشاؤه بواسطة محلل نحوي لنموذج مدرب مسبقًا. تحتاج إلى استخدام قاموس نموذج مدرب مسبقًا إذا كنت تستخدم نموذجًا مدربًا مسبقًا، وإلا فلن يكون للإدخالات معنى. قم بإنشاء محلل نحوي باستخدام قاموس نموذج مدرب مسبقًا باستخدام فئة [`DistilBertTokenizer`] : + +```py +>>> from transformers import DistilBertTokenizer + +>>> slow_tokenizer = DistilBertTokenizer.from_pretrained("distilbert/distilbert-base-uncased") +``` + +قم بإنشاء محلل نحوي سريع باستخدام فئة [`DistilBertTokenizerFast`] : + +```py +>>> from transformers import DistilBertTokenizerFast + +>>> fast_tokenizer = DistilBertTokenizerFast.from_pretrained("distilbert/distilbert-base-uncased") +``` + + + +افتراضيًا، سيحاول [`AutoTokenizer`] تحميل محلل نحوي سريع. يمكنك تعطيل هذا السلوك عن طريق تعيين `use_fast=False` في `from_pretrained`. + + + +## معالج الصور + +يقوم معالج الصور بمعالجة إدخالات الرؤية. إنه يرث من فئة الأساس [`~image_processing_utils.ImageProcessingMixin`]. + +للاستخدام، قم بإنشاء معالج صور مرتبط بالنموذج الذي تستخدمه. على سبيل المثال، قم بإنشاء [`ViTImageProcessor`] افتراضي إذا كنت تستخدم [ViT](model_doc/vit) لتصنيف الصور: + +```py +>>> from transformers import ViTImageProcessor + +>>> vit_extractor = ViTImageProcessor() +>>> print(vit_extractor) +ViTImageProcessor { + "do_normalize": true, + "do_resize": true, + "image_processor_type": "ViTImageProcessor", + "image_mean": [ + 0.5, + 0.5, + 0.5 + ], + "image_std": [ + 0.5, + 0.5, + 0.5 + ], + "resample": 2, + "size": 224 +} +``` + + + +إذا كنت لا تبحث عن أي تخصيص، فما عليك سوى استخدام طريقة `from_pretrained` لتحميل معلمات معالج الصور الافتراضية للنموذج. + + + +عدل أيًا من معلمات [`ViTImageProcessor`] لإنشاء معالج الصور المخصص الخاص بك: + +```py +>>> from transformers import ViTImageProcessor + +>>> my_vit_extractor = ViTImageProcessor(resample="PIL.Image.BOX", do_normalize=False, image_mean=[0.3, 0.3, 0.3]) +>>> print(my_vit_extractor) +ViTImageProcessor { + "do_normalize": false, + "do_resize": true, + "image_processor_type": "ViTImageProcessor", + "image_mean": [ + 0.3, + 0.3, + 0.3 + ], + "image_std": [ + 0.5, + 0.5, + 0.5 + ], + "resample": "PIL.Image.BOX", + "size": 224 +} +``` +## العمود الفقري + +
+ +
+ +تتكون نماذج رؤية الكمبيوتر من عمود فقري وعنق ورأس. يستخرج العمود الفقري الميزات من صورة الإدخال، ويجمع العنق الميزات المستخرجة ويعززها، ويتم استخدام الرأس للمهمة الرئيسية (مثل اكتشاف الكائنات). ابدأ عن طريق تهيئة عمود فقري في تكوين النموذج وحدد ما إذا كنت تريد تحميل أوزان مدربة مسبقًا أو تحميل أوزان مُهيأة بشكل عشوائي. بعد ذلك، يمكنك تمرير تكوين النموذج إلى رأس النموذج. + +على سبيل المثال، لتحميل [ResNet](../model_doc/resnet) backbone في نموذج [MaskFormer](../model_doc/maskformer) مع رأس تجزئة مثيل: + + + + +قم بتعيين `use_pretrained_backbone=True` لتحميل الأوزان المسبقة التدريب لـ ResNet للعمود الفقري. + +```py +from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation + +config = MaskFormerConfig(backbone="microsoft/resnet-50", use_pretrained_backbone=True) # تكوين العمود الفقري والعنق +model = MaskFormerForInstanceSegmentation(config) # الرأس +``` + + + + +قم بتعيين `use_pretrained_backbone=False` لتهيئة عمود فقري ResNet بشكل عشوائي. + +```py +from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation + +config = MaskFormerConfig(backbone="microsoft/resnet-50", use_pretrained_backbone=False) # تكوين العمود الفقري والعنق +model = MaskFormerForInstanceSegmentation(config) # الرأس +``` + +يمكنك أيضًا تحميل تكوين العمود الفقري بشكل منفصل ثم تمريره إلى تكوين النموذج. + +```py +from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, ResNetConfig + +backbone_config = ResNetConfig() +config = MaskFormerConfig(backbone_config=backbone_config) +model = MaskFormerForInstanceSegmentation(config) +``` + + + + +يتم تحميل نماذج [timm](https://hf.co/docs/timm/index) داخل نموذج باستخدام `use_timm_backbone=True` أو باستخدام [`TimmBackbone`] و [`TimmBackboneConfig`]. + +استخدم `use_timm_backbone=True` و `use_pretrained_backbone=True` لتحميل الأوزان المسبقة التدريب لـ timm للعمود الفقري. + +```python +from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation + +config = MaskFormerConfig(backbone="resnet50", use_pretrained_backbone=True, use_timm_backbone=True) # تكوين العمود الفقري والعنق +model = MaskFormerForInstanceSegmentation(config) # الرأس +``` + +قم بتعيين `use_timm_backbone=True` و `use_pretrained_backbone=False` لتحميل عمود فقري timm مبدئي عشوائي. + +```python +from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation + +config = MaskFormerConfig(backbone="resnet50", use_pretrained_backbone=False, use_timm_backbone=True) # تكوين العمود الفقري والعنق +model = MaskFormerForInstanceSegmentation(config) # الرأس +``` + +يمكنك أيضًا تحميل تكوين العمود الفقري واستخدامه لإنشاء `TimmBackbone` أو تمريره إلى تكوين النموذج. سيتم تحميل العمود الفقري لـ Timm الأوزان المسبقة التدريب بشكل افتراضي. قم بتعيين `use_pretrained_backbone=False` لتحميل الأوزان المبدئية العشوائية. + +```python +from transformers import TimmBackboneConfig, TimmBackbone + +backbone_config = TimmBackboneConfig("resnet50", use_pretrained_backbone=False) + +# قم بإنشاء مثيل من العمود الفقري +backbone = TimmBackbone(config=backbone_config) + +# قم بإنشاء نموذج باستخدام عمود فقري timm +from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation + +config = MaskFormerConfig(backbone_config=backbone_config) +model = MaskFormerForInstanceSegmentation(config) +``` + +## مستخرج الميزات + +يقوم مستخرج الميزات بمعالجة المدخلات الصوتية. يرث من فئة الأساس [`~feature_extraction_utils.FeatureExtractionMixin`]، وقد يرث أيضًا من فئة [`SequenceFeatureExtractor`] لمعالجة المدخلات الصوتية. + +للاستخدام، قم بإنشاء مستخرج ميزات مرتبط بالنموذج الذي تستخدمه. على سبيل المثال، قم بإنشاء مستخرج ميزات Wav2Vec2 الافتراضي إذا كنت تستخدم [Wav2Vec2](model_doc/wav2vec2) لتصنيف الصوت: + +```py +>>> from transformers import Wav2Vec2FeatureExtractor + +>>> w2v2_extractor = Wav2Vec2FeatureExtractor() +>>> print(w2v2_extractor) +Wav2Vec2FeatureExtractor { + "do_normalize": true, + "feature_extractor_type": "Wav2Vec2FeatureExtractor", + "feature_size": 1, + "padding_side": "right", + "padding_value": 0.0, + "return_attention_mask": false, + "sampling_rate": 16000 +} +``` + + + +إذا كنت لا تبحث عن أي تخصيص، فما عليك سوى استخدام طريقة `from_pretrained` لتحميل معلمات مستخرج الميزات الافتراضية للنموذج. + + + +قم بتعديل أي من معلمات [`Wav2Vec2FeatureExtractor`] لإنشاء مستخرج ميزات مخصص: + +```py +>>> from transformers import Wav2Vec2FeatureExtractor + +>>> w2v2_extractor = Wav2Vec2FeatureExtractor(sampling_rate=8000، do_normalize=False) +>>> print(w2v2_extractor) +Wav2Vec2FeatureExtractor { + "do_normalize": false, + "feature_extractor_type": "Wav2Vec2FeatureExtractor"، + "feature_size": 1، + "padding_side": "right"، + "padding_value": 0.0، + "return_attention_mask": false، + "sampling_rate": 8000 +} +``` + +## المعالج + +بالنسبة للنماذج التي تدعم مهام متعددة الوسائط، توفر مكتبة 🤗 Transformers فئة معالج تدمج بشكل ملائم فئات المعالجة مثل مستخرج الميزات ومقسّم الرموز في كائن واحد. على سبيل المثال، دعنا نستخدم [`Wav2Vec2Processor`] لمهمة التعرف التلقائي على الكلام (ASR). يقوم ASR بنقل الصوت إلى نص، لذلك ستحتاج إلى مستخرج ميزات ومقسّم رموز. + +قم بإنشاء مستخرج ميزات لمعالجة المدخلات الصوتية: + +```py +>>> from transformers import Wav2Vec2FeatureExtractor + +>>> feature_extractor = Wav2Vec2FeatureExtractor(padding_value=1.0, do_normalize=True) +``` + +قم بإنشاء مقسّم رموز لمعالجة المدخلات النصية: + +```py +>>> from transformers import Wav2Vec2CTCTokenizer + +>>> tokenizer = Wav2Vec2CTCTokenizer(vocab_file="my_vocab_file.txt") +``` + +قم بدمج مستخرج الميزات ومقسّم الرموز في [`Wav2Vec2Processor`]: + +```py +>>> from transformers import Wav2Vec2Processor + +>>> processor = Wav2Vec2Processor(feature_extractor=feature_extractor, tokenizer=tokenizer) +``` + +مع فئتين أساسيتين - التكوين والنموذج - وفئة معالجة مسبقة إضافية (مقسّم رموز أو معالج صورة أو مستخرج ميزات أو معالج)، يمكنك إنشاء أي من النماذج التي تدعمها مكتبة 🤗 Transformers. يمكن تكوين كل من هذه الفئات الأساسية، مما يسمح لك باستخدام السمات المحددة التي تريدها. يمكنك بسهولة إعداد نموذج للتدريب أو تعديل نموذج مسبق التدريب موجود للضبط الدقيق. \ No newline at end of file From 8caff12a9e7260b934b81d354332352d2f70ae0a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:12 +0300 Subject: [PATCH 045/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/debugging.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/debugging.md | 438 ++++++++++++++++++++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 docs/source/ar/debugging.md diff --git a/docs/source/ar/debugging.md b/docs/source/ar/debugging.md new file mode 100644 index 00000000000000..90eb8b06dcd58b --- /dev/null +++ b/docs/source/ar/debugging.md @@ -0,0 +1,438 @@ +# استكشاف الأخطاء وإصلاحها + +يمكن أن يكون التدريب على وحدات معالجة الرسومات (GPU) المتعددة مهمة صعبة، سواء كنت تواجه مشكلات في التثبيت أو مشكلات في الاتصال بين وحدات معالجة الرسومات الخاصة بك. يغطي دليل استكشاف الأخطاء وإصلاحها هذا بعض المشكلات التي قد تواجهها وكيفية حلها. + +## تثبيت CUDA في DeepSpeed + +إذا كنت تستخدم DeepSpeed، فمن المحتمل أنك قمت بتثبيته بالفعل باستخدام الأمر التالي. + +```bash +pip install deepspeed +``` + +يقوم DeepSpeed بتجميع كود CUDA C++ ويمكن أن يكون مصدرًا محتملًا للأخطاء عند بناء ملحقات PyTorch التي تتطلب CUDA. تعتمد هذه الأخطاء على كيفية تثبيت CUDA على نظامك، ويركز هذا القسم على PyTorch المبني باستخدام *CUDA 10.2*. + + + +بالنسبة لأي مشكلات أخرى في التثبيت، يرجى [فتح مشكلة](https://github.com/microsoft/DeepSpeed/issues) مع فريق DeepSpeed. + + + +### حزم أدوات CUDA غير المتطابقة + +يأتي PyTorch مع حزمة أدوات CUDA الخاصة به، ولكن لاستخدام DeepSpeed مع PyTorch، يجب أن يكون لديك إصدار متطابق من CUDA مثبت على مستوى النظام. على سبيل المثال، إذا قمت بتثبيت PyTorch مع `cudatoolkit==10.2` في بيئة Python الخاصة بك، فستحتاج أيضًا إلى تثبيت CUDA 10.2 على مستوى النظام. إذا لم يكن لديك CUDA مثبتًا على مستوى النظام، فيجب تثبيته أولاً. + +قد يختلف الموقع الدقيق من نظام إلى آخر، ولكن `usr/local/cuda-10.2` هو الموقع الأكثر شيوعًا على العديد من أنظمة Unix. عندما يتم إعداد CUDA بشكل صحيح وإضافته إلى متغير البيئة `PATH` الخاص بك، يمكنك العثور على موقع التثبيت باستخدام الأمر التالي: + +```bash +which nvcc +``` + +### حزم أدوات CUDA متعددة + +قد يكون لديك أيضًا أكثر من حزمة أدوات CUDA مثبتة على مستوى النظام. + +```bash +/usr/local/cuda-10.2 +/usr/local/cuda-11.0 +``` + +عادةً، يقوم مثبت الحزمة بتعيين المسارات إلى الإصدار الأخير الذي تم تثبيته. إذا فشلت حزمة البناء لأنها لا يمكنها العثور على الإصدار الصحيح من CUDA (على الرغم من تثبيته بالفعل على مستوى النظام)، فيجب عليك تكوين متغيرات البيئة `PATH` و`LD_LIBRARY_PATH` للإشارة إلى المسار الصحيح. + +الق نظرة على محتويات هذه المتغيرات البيئية أولاً: + +```bash +echo $PATH +echo $LD_LIBRARY_PATH +``` + +يسرد `PATH` مواقع الملفات القابلة للتنفيذ، و`LD_LIBRARY_PATH` يسرد أين تبحث عن المكتبات المشتركة. يتم منح الأولوية للمدخلات السابقة على اللاحقة، ويتم استخدام `:` للفصل بين الإدخالات المتعددة. لإخبار برنامج البناء بمكان العثور على حزمة أدوات CUDA المحددة التي تريدها، أدخل المسار الصحيح في القائمة أولاً. يقوم هذا الأمر بإلحاق المسار بالقيم الموجودة بدلاً من الكتابة فوقها. + +```bash +# adjust the version and full path if needed +export PATH=/usr/local/cuda-10.2/bin:$PATH +export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH +``` + +بالإضافة إلى ذلك، يجب عليك أيضًا التحقق من وجود الدلائل التي تقوم بتعيينها بالفعل. يحتوي الدليل الفرعي `lib64` على كائنات CUDA `.so` المختلفة (مثل `libcudart.so`) وعلى الرغم من أنه من غير المحتمل أن يقوم نظامك بتسميتها بشكل مختلف، يجب عليك التحقق من الأسماء الفعلية وتغييرها وفقًا لذلك. + +### إصدارات CUDA الأقدم + +في بعض الأحيان، قد ترفض إصدارات CUDA الأقدم البناء مع برامج التجميع الأحدث. على سبيل المثال، إذا كان لديك `gcc-9` ولكن CUDA يريد `gcc-7`. عادةً، يؤدي تثبيت حزمة أدوات CUDA الأحدث إلى تمكين الدعم لمجمع أحدث. + +يمكنك أيضًا تثبيت إصدار أقدم من المجمع بالإضافة إلى الإصدار الذي تستخدمه حاليًا (أو قد يكون مثبتًا بالفعل ولكنه غير مستخدم بشكل افتراضي ولا يمكن لنظام البناء رؤيته). لحل هذه المشكلة، يمكنك إنشاء رابط رمزي لمنح نظام البناء إمكانية رؤية المجمع الأقدم. + +```bash +# تكييف المسار مع نظامك +sudo ln -s /usr/bin/gcc-7 /usr/local/cuda-10.2/bin/gcc +sudo ln -s /usr/bin/g++-7 /usr/local/cuda-10.2/bin/g++ +``` + +### البناء المسبق + +إذا كنت لا تزال تواجه مشكلات في تثبيت DeepSpeed أو إذا كنت تقوم ببناء DeepSpeed في وقت التشغيل، فيمكنك محاولة البناء المسبق لوحدات DeepSpeed قبل تثبيتها. لإجراء بناء محلي لـ DeepSpeed: + +```bash +git clone https://github.com/microsoft/DeepSpeed/ +cd DeepSpeed +rm -rf build +TORCH_CUDA_ARCH_LIST="8.6" DS_BUILD_CPU_ADAM=1 DS_BUILD_UTILS=1 pip install . \ +--global-option="build_ext" --global-option="-j8" --no-cache -v \ +--disable-pip-version-check 2>&1 | tee build.log +``` + + + +لاستخدام NVMe offload، أضف معلمة `DS_BUILD_AIO=1` إلى أمر البناء وتأكد من تثبيت حزمة libaio-dev على مستوى النظام. + + + +بعد ذلك، سيتعين عليك تحديد بنية GPU الخاص بك عن طريق تحرير متغير `TORCH_CUDA_ARCH_LIST` (ابحث عن قائمة كاملة ببطاقات GPU من NVIDIA وبنيتها المقابلة على هذه [الصفحة](https://developer.nvidia.com/cuda-gpus)). للتحقق من إصدار PyTorch الذي يقابل بنيتك، قم بتشغيل الأمر التالي: + +```bash +python -c "import torch; print(torch.cuda.get_arch_list())" +``` + +ابحث عن البنية لـ GPU باستخدام الأمر التالي: + + + + +```bash +CUDA_VISIBLE_DEVICES=0 python -c "import torch; print(torch.cuda.get_device_capability())" +``` + + + + +للعثور على البنية لـ GPU `0`: + +```bash +CUDA_VISIBLE_DEVICES=0 python -c "import torch; \ +print(torch.cuda.get_device_properties(torch.device('cuda'))) +"_CudaDeviceProperties(name='GeForce RTX 3090'، major=8، minor=6، total_memory=24268MB، multi_processor_count=82)" +``` + +هذا يعني أن بنية GPU الخاص بك هي `8.6`. + + + + +إذا حصلت على `8، 6`، فيمكنك تعيين `TORCH_CUDA_ARCH_LIST="8.6"`. بالنسبة لوحدات معالجة الرسومات المتعددة ذات البنى المختلفة، قم بإدراجها مثل `TORCH_CUDA_ARCH_LIST="6.1;8.6"`. + +من الممكن أيضًا عدم تحديد `TORCH_CUDA_ARCH_LIST`، وسيقوم برنامج البناء تلقائيًا باستعلام بنية GPU للبناء. ومع ذلك، قد تتطابق أو لا تتطابق مع GPU الفعلي على الجهاز الهدف، ولهذا من الأفضل تحديد البنية الصحيحة بشكل صريح. + +بالنسبة للتدريب على أجهزة متعددة ذات الإعداد نفسه، ستحتاج إلى إنشاء عجلة ثنائية: + +```bash +git clone https://github.com/microsoft/DeepSpeed/ +cd DeepSpeed +rm -rf build +TORCH_CUDA_ARCH_LIST="8.6" DS_BUILD_CPU_ADAM=1 DS_BUILD_UTILS=1 \ +python setup.py build_ext -j8 bdist_wheel +``` + +ينشئ هذا الأمر عجلة ثنائية ستبدو شيئًا مثل `dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl`. الآن يمكنك تثبيت هذه العجلة محليًا أو على جهاز آخر. + +```bash +pip install deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl +``` + +## مشكلات شبكة Multi-GPU Debug + +عند التدريب أو الاستدلال باستخدام `DistributedDataParallel` وGPU متعددة، إذا واجهت مشكلة في الاتصال بين العمليات و/أو العقد، فيمكنك استخدام البرنامج النصي التالي لتشخيص مشكلات الشبكة. + +```bash +wget https://raw.githubusercontent.com/huggingface/transformers/main/scripts/distributed/torch-distributed-gpu-test.py +``` + +على سبيل المثال، لاختبار كيفية تفاعل وحدتي معالجة الرسومات (GPU) قم بما يلي: + +```bash +python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py +``` +إذا تمكنت كلتا العمليتين من التحدث إلى بعضهما البعض وتخصيص ذاكرة GPU، فسيقوم كل منهما بطباعة حالة "موافق". + +بالنسبة لوحدات معالجة الرسومات أو العقد الإضافية، قم بتعديل الحجج في البرنامج النصي. + +ستجد الكثير من التفاصيل داخل برنامج التشخيص وحتى وصفة حول كيفية تشغيله في بيئة SLURM. +بالنسبة لوحدات معالجة الرسومات أو العقد الإضافية، قم بتعديل الحجج في البرنامج النصي. + +ستجد الكثير من التفاصيل داخل برنامج التشخيص وحتى وصفة حول كيفية تشغيله في بيئة SLURM. + +تتمثل إحدى مستويات التصحيح الإضافية في إضافة متغير البيئة `NCCL_DEBUG=INFO` كما يلي: + +```bash +NCCL_DEBUG=INFO python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py +``` + +سيؤدي هذا إلى تفريغ الكثير من معلومات التصحيح المتعلقة بـ NCCL، والتي يمكنك بعد ذلك البحث عنها عبر الإنترنت إذا وجدت أنه يتم الإبلاغ عن بعض المشكلات. أو إذا لم تكن متأكدًا من كيفية تفسير الإخراج، فيمكنك مشاركة ملف السجل في مشكلة. + +## اكتشاف التدفق السفلي والفيضي + + + +تتوفر هذه الميزة حاليًا لـ PyTorch فقط. + + + + + +بالنسبة للتدريب متعدد وحدات معالجة الرسومات (GPU)، فإنه يتطلب DDP (`torch.distributed.launch`). + + + + + +يمكن استخدام هذه الميزة مع أي نموذج يعتمد على `nn.Module`. + + + +إذا بدأت في الحصول على `loss=NaN` أو إذا منع النموذج سلوكًا غير طبيعي آخر بسبب `inf` أو `nan` في التنشيطات أو الأوزان، فيجب اكتشاف المكان الذي يحدث فيه أول تدفق سفلي أو فيض وما الذي أدى إليه. لحسن الحظ، يمكنك القيام بذلك بسهولة عن طريق تنشيط وحدة نمطية خاصة ستقوم بالكشف التلقائي. + +إذا كنت تستخدم [`Trainer`]]، فكل ما عليك فعله هو إضافة: + +```bash +--debug underflow_overflow +``` + +إلى حجج سطر الأوامر العادية، أو تمرير `debug="underflow_overflow"` عند إنشاء كائن [`TrainingArguments`]. + +إذا كنت تستخدم حلقة التدريب الخاصة بك أو مدربًا آخر، فيمكنك تحقيق نفس الشيء باستخدام: + +```python +from transformers.debug_utils import DebugUnderflowOverflow + +debug_overflow = DebugUnderflowOverflow(model) +``` + +يقوم [`~debug_utils.DebugUnderflowOverflow`] بإدراج خطافات في النموذج الذي يقوم على الفور بعد كل مكالمة للأمام باختبار المتغيرات المدخلة والمخرجة وأوزان الوحدة النمطية المقابلة. بمجرد اكتشاف `inf` أو `nan` في عنصر واحد على الأقل من التنشيطات أو الأوزان، سيؤكد البرنامج ويطبع تقريرًا مثل هذا (تم اكتشافه باستخدام `google/mt5-small` في الدقة العائمة المختلطة fp16): + +``` +تم اكتشاف inf/nan أثناء batch_number=0 +أطر 21 الأخيرة: +الحد الأدنى المطلق الحد الأقصى المطلق البيانات الوصفية + encoder.block.1.layer.1.DenseReluDense.dropout Dropout +0.00e+00 2.57e+02 input[0] +0.00e+00 2.85e+02 output +[...] + encoder.block.2.layer.0 T5LayerSelfAttention +6.78e-04 3.15e+03 input[0] +2.65e-04 3.42e+03 output[0] + None output[1] +2.25e-01 1.00e+04 output[2] + encoder.block.2.layer.1.layer_norm T5LayerNorm +8.69e-02 4.18e-01 weight +2.65e-04 3.42e+03 input[0] +1.79e-06 4.65e+00 output + encoder.block.2.layer.1.DenseReluDense.wi_0 Linear +2.17e-07 4.50e+00 weight +1.79e-06 4.65e+00 input[0] +2.68e-06 3.70e+01 output + encoder.block.2.layer.1.DenseReluDense.wi_1 Linear +8.08e-07 2.66e+01 weight +1.79e-06 4.65e+00 input[0] +1.27e-04 2.37e+02 output + encoder.block.2.layer.1.DenseReluDense.wo Linear +1.01e-06 6.44e+00 weight +0.00e+00 9.74e+03 input[0] +3.18e-04 6.27e+04 output + encoder.block.2.layer.1.DenseReluDense T5DenseGatedGeluDense +1.79e-06 4.65e+00 input[0] +3.18e-04 6.27e+04 output + encoder.block.2.layer.1.dropout Dropout +3.18e-04 6.27e+04 input[0] +0.00e+00 inf output +``` + +تم تقصير إخراج المثال في المنتصف للإيجاز. +تم تقصير إخراج المثال في المنتصف للإيجاز. + +يعرض العمود الثاني قيمة أكبر عنصر مطلق، لذا إذا نظرت عن كثب إلى الأطر القليلة الأخيرة، فستجد أن الإدخالات والمخرجات كانت في نطاق `1e4`. لذا عندما تم إجراء هذا التدريب في الدقة العائمة المختلطة fp16، تجاوزت الخطوة الأخيرة (نظرًا لأن أكبر رقم قبل `inf` في `fp16` هو `64e3`). لتجنب الفيضانات في `fp16`، يجب أن تظل التنشيطات أقل بكثير من `1e4`، لأن `1e4 * 1e4 = 1e8`، لذلك فإن أي ضرب للمصفوفة بأحجام تنشيط كبيرة سيؤدي إلى حالة فيض رقمي. + +في بداية التتبع، يمكنك اكتشاف رقم الدفعة التي حدثت فيها المشكلة (هنا `تم اكتشاف inf/nan أثناء batch_number=0` يعني أن المشكلة حدثت في الدفعة الأولى). + +يبدأ كل إطار تم الإبلاغ عنه عن طريق إعلان الإدخال الكامل المؤهل المقابل للوحدة النمطية التي يتم الإبلاغ عنها في هذا الإطار. إذا نظرنا فقط إلى هذا الإطار: + +``` + encoder.block.2.layer.1.layer_norm T5LayerNorm +8.69e-02 4.18e-01 weight +2.65e-04 3.42e+03 input[0] +1.79e-06 4.65e+00 output +``` + +هنا، يشير "encoder.block.2.layer.1.layer_norm" إلى أنه كان طبقة التطبيع للطبقة الأولى، من الكتلة الثانية للencoder. والمكالمات المحددة لـ "forward" هي "T5LayerNorm". + +دعنا نلقي نظرة على الأطر القليلة الأخيرة من هذا التقرير: + +``` +Detected inf/nan during batch_number=0 +Last 21 forward frames: +abs min abs max metadata +[...] + encoder.block.2.layer.1.DenseReluDense.wi_0 Linear + +2.17e-07 4.50e+00 weight +1.79e-06 4.65e+00 input[0] +2.68e-06 3.70e+01 output + encoder.block.2.layer.1.DenseReluDense.wi_1 Linear + +8.08e-07 2.66e+01 weight +1.79e-06 4.65e+00 input[0] +1.27e-04 2.37e+02 output + encoder.block.2.layer.1.DenseReluDense.wo Linear + +1.01e-06 6.44e+00 weight +0.00e+00 9.74e+03 input[0] +3.18e-04 6.27e+04 output + encoder.block.2.layer.1.DenseReluDense T5DenseGatedGeluDense + +1.79e-06 4.65e+00 input[0] +3.18e-04 6.27e+04 output + encoder.block.2.layer.1.dropout Dropout + +3.18e-04 6.27e+04 input[0] +0.00e+00 inf output +``` + +يبلغ الإطار الأخير عن وظيفة "Dropout.forward" مع الإدخال الأول للإدخال الوحيد والإخراج الثاني +الإخراج الوحيد. يمكنك أن ترى أنه تم استدعاؤه من سمة "dropout" داخل فئة "DenseReluDense". يمكننا أن نرى +حدث ذلك أثناء الطبقة الأولى، من الكتلة الثانية، أثناء الدفعة الأولى. أخيرًا، كان الحد الأقصى المطلق +كانت عناصر الإدخال "6.27e+04" وكان نفس الإخراج "inf". + +يمكنك أن ترى هنا أن "T5DenseGatedGeluDense.forward" أسفر عن تنشيطات الإخراج، والتي كان الحد الأقصى المطلق لها +حوالي 62.7K، وهو قريب جدًا من الحد الأعلى لـ fp16 وهو 64K. في الإطار التالي لدينا "Dropout" الذي يعيد التطبيع +الأوزان، بعد أن قام بإلغاء تنشيط بعض العناصر، مما يدفع القيمة القصوى المطلقة إلى أكثر من 64K، ونحصل على +فيض (inf). + +كما ترى، فإن الأطر السابقة هي التي نحتاج إلى النظر فيها عندما تبدأ الأرقام في الدخول إلى أرقام كبيرة جدًا لـ fp16 +الأرقام. + +دعنا نقارن التقرير بالرمز من "models/t5/modeling_t5.py": + +```python +class T5DenseGatedGeluDense(nn.Module): + def __init__(self, config): + super().__init__() + self.wi_0 = nn.Linear(config.d_model, config.d_ff، bias=False) + self.wi_1 = nn.Linear(config.d_model, config.d_ff، bias=False) + self.wo = nn.Linear(config.d_ff, config.d_model، bias=False) + self.dropout = nn.Dropout(config.dropout_rate) + self.gelu_act = ACT2FN["gelu_new"] + + def forward(self, hidden_states): + hidden_gelu = self.gelu_act(self.wi_0(hidden_states)) + hidden_linear = self.wi_1(hidden_states) + hidden_states = hidden_gelu * hidden_linear + hidden_states = self.dropout(hidden_states) + hidden_states = self.wo(hidden_states) + return hidden_states +``` + +لم يعد من الصعب الآن رؤية مكالمة `dropout` ، وجميع المكالمات السابقة أيضًا. + +نظرًا لأن الكشف يحدث في خطاف للأمام، يتم طباعة هذه التقارير فورًا بعد كل عودة للأمام. + +بالعودة إلى التقرير الكامل، للتصرف بناءً عليه وإصلاح المشكلة، يلزم الرجوع إلى بعض الأطر حيث بدأت الأرقام في الارتفاع والتحويل على الأرجح إلى وضع "fp32" هنا، بحيث لا تفيض الأرقام عند الضرب أو جمعها. بالطبع، قد تكون هناك حلول أخرى. على سبيل المثال، يمكننا إيقاف تشغيل "amp" مؤقتًا إذا تم تشغيله، بعد نقل "forward" الأصلي إلى برنامج مساعد wrapper، مثل: + +```python +def _forward(self, hidden_states): + hidden_gelu = self.gelu_act(self.wi_0(hidden_states)) + hidden_linear = self.wi_1(hidden_states) + hidden_states = hidden_gelu * hidden_linear + hidden_states = self.dropout(hidden_states) + hidden_states = self.wo(hidden_states) + return hidden_states + + +import torch + + +def forward(self, hidden_states): + if torch.is_autocast_enabled(): + with torch.cuda.amp.autocast(enabled=False): + return self._forward(hidden_states) + else: + return self._forward(hidden_states) +``` + +نظرًا لأن الكاشف التلقائي يبلغ فقط عن المدخلات والمخرجات للأطر الكاملة، بمجرد أن تعرف أين تبحث، فقد ترغب في تحليل المراحل الوسيطة لأي دالة "forward" محددة أيضًا. في هذه الحالة، يمكنك استخدام وظيفة المساعدة `detect_overflow` لإدخال الكاشف حيث تريده، على سبيل المثال: + +```python +from debug_utils import detect_overflow + + +class T5LayerFF(nn.Module): + [...] + + def forward(self, hidden_states): + forwarded_states = self.layer_norm(hidden_states) + detect_overflow(forwarded_states, "after layer_norm") + forwarded_states = self.DenseReluDense(forwarded_states) + detect_overflow(forwarded_states, "after DenseReluDense") + return hidden_states + self.dropout(forwarded_states) +``` + +يمكنك أن ترى أننا أضفنا 2 من هذه الآن ونحن نتتبع إذا تم اكتشاف "inf" أو "nan" لـ "forwarded_states" في مكان ما بينهما. + +في الواقع، يقوم الكاشف بالفعل بالإبلاغ عن هذه المعلومات لأن كل مكالمة في المثال أعلاه هي `nn.Module`، ولكن دعنا نقول إذا كان لديك بعض الحسابات المباشرة المحلية، فهذا هو ما ستفعله. + +بالإضافة إلى ذلك، إذا كنت تقوم بتنفيذ المصحح في كودك الخاص، فيمكنك ضبط عدد الأطر المطبوعة من الإعداد الافتراضي، على سبيل المثال: + +```python +from transformers.debug_utils import DebugUnderflowOverflow + +debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100) +``` + +### تتبع قيمة الحد الأدنى والقصوى المطلقة الدفعة المحددة + +يمكن استخدام نفس فئة التصحيح لتتبع الدفعات مع ميزة الكشف عن التدفق السفلي/الفيضي. + +لنفترض أنك تريد مراقبة القيمة المطلقة الدنيا والقصوى لجميع مكونات كل مكالمة "forward" لدفعة معينة، والقيام بذلك فقط للدفعتين 1 و 3. ثم قم بتنفيذ هذه الفئة كما يلي: + +```python +debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3]) +``` + +والآن سيتم تتبع الدفعات الكاملة 1 و 3 باستخدام نفس التنسيق الذي يستخدمه كاشف التدفق السفلي/الفيضي. + +الدفعات مفهرسة من 0. + +هذا مفيد إذا كنت تعلم أن البرنامج يبدأ التصرف بشكل غير طبيعي بعد رقم دفعة معين، بحيث يمكنك الانتقال مباشرة إلى تلك المنطقة. فيما يلي إخراج عينة مقطوعة لمثل هذا التكوين: + +``` + *** بدء رقم الدفعة = 1 *** +القيمة الصغرى المطلقة القيمة القصوى المطلقة البيانات الوصفية + shared Embedding +1.01e-06 7.92e+02 weight +0.00e+00 2.47e+04 input[0] +5.36e-05 7.92e+02 output +[...] + decoder.dropout Dropout +1.60e-07 2.27e+01 input[0] +0.00e+00 2.52e+01 output + مكدس فك التشفير T5 + ليس إخراج tensor + lm_head Linear +1.01e-06 7.92e+02 weight +0.00e+00 1.11e+00 input[0] +6.06e-02 8.39e+01 output + T5ForConditionalGeneration + ليس إخراج tensor +*** بدء رقم الدفعة = 3 *** +القيمة الصغرى المطلقة القيمة القصوى المطلقة البيانات الوصفية + shared Embedding +1.01e-06 7.92e+02 weight +0.00e+00 2.78e+04 input[0] +5.36e-05 7.92e+02 output +[...] +``` + +هنا ستحصل على عدد كبير من الأطر التي تم تفريغها - بقدر ما كانت هناك مكالمات للأمام في نموذجك، لذلك قد يكون أو لا يكون ما تريده، ولكنه في بعض الأحيان قد يكون أسهل في استخدامه لأغراض التصحيح. على سبيل المثال، إذا بدأت المشكلة في الحدوث عند رقم الدفعة 150. لذا يمكنك تفريغ آثار الدفعات 149 و 150 ومقارنة المكان الذي بدأت فيه الأرقام في الاختلاف. + +يمكنك أيضًا تحديد رقم الدفعة الذي يجب إيقاف التدريب بعده، باستخدام ما يلي: + +```python +debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3], abort_after_batch_num=3) +``` \ No newline at end of file From 1887afd1df60e3ec9882e311ff1680ff6a94557c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:14 +0300 Subject: [PATCH 046/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/deepspeed.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/deepspeed.md | 1199 +++++++++++++++++++++++++++++++++++ 1 file changed, 1199 insertions(+) create mode 100644 docs/source/ar/deepspeed.md diff --git a/docs/source/ar/deepspeed.md b/docs/source/ar/deepspeed.md new file mode 100644 index 00000000000000..c16e0f692261ef --- /dev/null +++ b/docs/source/ar/deepspeed.md @@ -0,0 +1,1199 @@ +# DeepSpeed + +[DeepSpeed](https://www.deepspeed.ai/) هي مكتبة تحسين PyTorch تجعل التدريب الموزع فعالًا من حيث الذاكرة وسريعًا. وفي جوهره [مُحسِّن Zero Redundancy (ZeRO)](https://hf.co/papers/1910.02054) الذي يمكّن من تدريب النماذج الكبيرة على نطاق واسع. يعمل ZeRO في عدة مراحل: + +* ZeRO-1، تجزئة حالة المحسن عبر وحدات معالجة الرسومات (GPU) +* ZeRO-2، تجزئة التدرجات عبر وحدات معالجة الرسومات (GPU) +* ZeRO-3، تجزئة المعلمات عبر وحدات معالجة الرسومات (GPU) + +في البيئات المحدودة بوحدة معالجة الرسومات (GPU)، يمكّن ZeRO أيضًا من نقل ذاكرة المحسن والحساب من وحدة معالجة الرسومات (GPU) إلى وحدة المعالجة المركزية (CPU) لتناسب وتدريب النماذج الكبيرة حقًا على وحدة معالجة الرسومات (GPU) واحدة. تم دمج DeepSpeed مع فئة [`Trainer`] في Transformers لجميع مراحل ZeRO والنقل. كل ما عليك فعله هو توفير ملف تكوين أو يمكنك استخدام قالب مقدم. بالنسبة للاستدلال، تدعم Transformers ZeRO-3 والنقل لأنه يسمح بتحميل النماذج الضخمة. + +سيوضح لك هذا الدليل كيفية نشر التدريب باستخدام DeepSpeed، والميزات التي يمكنك تمكينها، وكيفية إعداد ملفات التكوين لمراحل ZeRO المختلفة، والنقل، والاستدلال، واستخدام DeepSpeed بدون [`Trainer`]. + +## التثبيت + +DeepSpeed متاح لتثبيته من PyPI أو Transformers (للحصول على خيارات تثبيت أكثر تفصيلاً، راجع تفاصيل تثبيت DeepSpeed [التفاصيل](https://www.deepspeed.ai/tutorials/advanced-install/) أو قراءة [README](https://github.com/microsoft/deepspeed#installation) على GitHub). + + + +إذا كنت تواجه صعوبات في تثبيت DeepSpeed، فراجع دليل تثبيت CUDA في DeepSpeed [دليل](../debugging#deepspeed-cuda-installation). في حين أن لدى DeepSpeed حزمة PyPI قابلة للتثبيت باستخدام pip، يوصى بشدة [بتثبيته من المصدر](https://www.deepspeed.ai/tutorials/advanced-install/#install-deepspeed-from-source) لمطابقة أجهزتك بشكل أفضل ولتدعم ميزات معينة، مثل 1-bit Adam، والتي ليست متاحة في توزيع PyPI. + + + + + + +```bash +pip install deepspeed +``` + + + + +```bash +pip install transformers[deepspeed] +``` + + + + +## متطلبات الذاكرة + +قبل البدء، من الجيد التحقق مما إذا كان لديك ذاكرة GPU وCPU كافية لتناسب نموذجك. توفر DeepSpeed أداة لتقدير متطلبات ذاكرة CPU/GPU. على سبيل المثال، لتقدير متطلبات الذاكرة لنموذج [bigscience/T0_3B](bigscience/T0_3B) على وحدة معالجة رسومات (GPU) واحدة: +```bash +$ python -c 'from transformers import AutoModel; \ +from deepspeed.runtime.zero.stage3 import estimate_zero3_model_states_mem_needs_all_live; \ +model = AutoModel.from_pretrained("bigscience/T0_3B"); \ +estimate_zero3_model_states_mem_needs_all_live(model, num_gpus_per_node=1, num_nodes=1)' +[...] +Estimated memory needed for params, optim states and gradients for a: +HW: Setup with 1 node, 1 GPU per node. +SW: Model with 2783M total params, 65M largest layer params. + per CPU | per GPU | Options + 70.00GB | 0.25GB | offload_param=cpu , offload_optimizer=cpu , zero_init=1 + 70.00GB | 0.25GB | offload_param=cpu , offload_optimizer=cpu , zero_init=0 + 62.23GB | 5.43GB | offload_param=none, offload_optimizer=cpu , zero_init=1 + 62.23GB | 5.43GB | offload_param=none, offload_optimizer=cpu , zero_init=0 + 0.37GB | 46.91GB | offload_param=none, offload_optimizer=none, zero_init=1 + 15.56GB | 46.91GB | offload_param=none, offload_optimizer=none, zero_init=0 +``` + +هذا يعني أنك إما بحاجة إلى وحدة معالجة رسومات (GPU) واحدة بسعة 80 جيجابايت دون نقل إلى وحدة المعالجة المركزية (CPU) أو وحدة معالجة رسومات (GPU) بسعة 8 جيجابايت ووحدة معالجة مركزية (CPU) بسعة 60 جيجابايت لنقلها إليها (هذه هي متطلبات الذاكرة للمعلمات وحالات المحسن والتدرجات فقط، وستحتاج إلى القليل من الذاكرة الإضافية لنوى CUDA والتنشيط). يجب عليك أيضًا مراعاة المقايضة بين التكلفة والسرعة لأنه سيكون من الأرخص استئجار أو شراء وحدة معالجة رسومات (GPU) أصغر ولكن سيستغرق تدريب نموذجك وقتًا أطول. + +إذا كانت لديك ذاكرة GPU كافية، فتأكد من تعطيل النقل إلى وحدة المعالجة المركزية (CPU)/NVMe لجعل كل شيء أسرع. + +## حدد مرحلة ZeRO + +بعد تثبيت DeepSpeed والحصول على فكرة أفضل عن متطلبات الذاكرة الخاصة بك، تتمثل الخطوة التالية في تحديد مرحلة ZeRO لاستخدامها. حسب الترتيب الأسرع والأكثر كفاءة في الذاكرة: + +| الأسرع | الأكثر كفاءة في الذاكرة | +|------------------|------------------| +| ZeRO-1 | ZeRO-3 + النقل | +| ZeRO-2 | ZeRO-3 | +| ZeRO-2 + النقل | ZeRO-2 + النقل | +| ZeRO-3 | ZeRO-2 | +| ZeRO-3 + النقل | ZeRO-1 | + +لمعرفة ما يناسبك، ابدأ بالنهج الأسرع وإذا نفدت من الذاكرة، فجرّب المرحلة التالية التي تكون أبطأ ولكنها أكثر كفاءة في الذاكرة. لا تتردد في العمل في أي اتجاه تفضله (بدءًا من الأكثر كفاءة في الذاكرة أو الأسرع) لاكتشاف التوازن المناسب بين السرعة واستخدام الذاكرة. + +يمكنك استخدام عملية عامة (ابدأ بحجم دفعة يبلغ 1): + +1. تمكين نقاط تفتيش التدرج +2. جرب ZeRO-2 +3. جرب ZeRO-2 ونقل المحسن +4. جرب ZeRO-3 +5. جرب ZeRO-3 ونقل المعلمات إلى وحدة المعالجة المركزية (CPU) +6. جرب ZeRO-3 ونقل المعلمات والمحسن إلى وحدة المعالجة المركزية (CPU) +7. جرب تقليل القيم الافتراضية المختلفة مثل شعاع بحث أضيق إذا كنت تستخدم طريقة [`~GenerationMixin.generate`] +8. جرب الدقة المختلطة نصفية الدقة (fp16 على معماريات GPU الأقدم وbf16 على Ampere) على الأوزان ذات الدقة الكاملة +9. أضف المزيد من الأجهزة إذا أمكن أو قم بتمكين Infinity لنقل المعلمات والمحسن إلى NVMe +10. بمجرد عدم نفاد الذاكرة، قم بقياس الإنتاجية الفعالة ثم حاول زيادة حجم الدفعة قدر الإمكان لتعظيم كفاءة وحدة معالجة الرسومات (GPU) +11. أخيرًا، حاول تحسين إعداد التدريب الخاص بك عن طريق تعطيل بعض ميزات النقل أو استخدام مرحلة ZeRO أسرع وزيادة/تقليل حجم الدفعة للعثور على أفضل مقايضة بين السرعة واستخدام الذاكرة + + +## ملف تكوين DeepSpeed + +يعمل DeepSpeed مع فئة [`Trainer`] من خلال ملف تكوين يحتوي على جميع المعلمات اللازمة لتكوين كيفية إعداد تشغيل التدريب الخاص بك. عندما تنفذ نص البرنامج النصي للتدريب، يقوم DeepSpeed بتسجيل التكوين الذي تلقاه من [`Trainer`] في وحدة التحكم حتى تتمكن من رؤية التكوين المستخدم بالضبط. + + + + +يمكنك العثور على قائمة كاملة بخيارات تكوين DeepSpeed في مرجع تكوين DeepSpeed JSON [المرجع](https://www.deepspeed.ai/docs/config-json/). يمكنك أيضًا العثور على أمثلة عملية مختلفة لتكوين DeepSpeed على مستودع [DeepSpeedExamples](https://github.com/microsoft/DeepSpeedExamples) أو المستودع الرئيسي [DeepSpeed](https://github.com/microsoft/DeepSpeed). للعثور بسرعة على أمثلة محددة، يمكنك: + +```bash +git clone https://github.com/microsoft/DeepSpeedExamples +cd DeepSpeedExamples +find . -name '*json' +# find examples with the Lamb optimizer +grep -i Lamb $(find . -name '*json') +``` + + + +يتم تمرير ملف تكوين DeepSpeed كمسار إلى ملف JSON إذا كنت تقوم بالتدريب من واجهة سطر الأوامر أو ككائن `dict` متداخل إذا كنت تستخدم [`Trainer`] في إعداد دفتر الملاحظات. + + + + +```py +TrainingArguments(..., deepspeed="path/to/deepspeed_config.json") +``` + + + + +```py +ds_config_dict = dict(scheduler=scheduler_params, optimizer=optimizer_params) +args = TrainingArguments(..., deepspeed=ds_config_dict) +trainer = Trainer(model, args, ...) +``` + + + + +### معلمات DeepSpeed وTrainer + +هناك ثلاثة أنواع من معلمات التكوين: + +1. بعض معلمات التكوين مشتركة بين [`Trainer`] وDeepSpeed، ويمكن أن يكون من الصعب تحديد الأخطاء عندما تكون هناك تعريفات متضاربة. لتسهيل الأمر، يتم تكوين هذه المعلمات المشتركة من خلال حجة سطر الأوامر [`Trainer`]. + +2. يتم اشتقاق بعض معلمات التكوين تلقائيًا من تكوين النموذج، لذلك لا تحتاج إلى ضبط هذه القيم يدويًا. يستخدم [`Trainer`] قيمة التكوين `auto` لتحديد القيمة الأكثر صحة أو كفاءة. يمكنك تعيين معلمات التكوين الخاصة بك بشكل صريح، ولكن يجب عليك التأكد من اتفاق حجج [`Trainer`] ومعلمات تكوين DeepSpeed. قد تسبب عدم التطابقات فشل التدريب بطرق يصعب اكتشافها! + +3. بعض معلمات التكوين المحددة لـ DeepSpeed فقط والتي تحتاج إلى إعدادها يدويًا بناءً على احتياجات التدريب الخاصة بك. + +يمكنك أيضًا تعديل تكوين DeepSpeed وتحرير [`TrainingArguments`] منه: + +1. قم بإنشاء أو تحميل تكوين DeepSpeed لاستخدامه كالتكوين الرئيسي +2. قم بإنشاء كائن [`TrainingArguments`] بناءً على قيم تكوين DeepSpeed هذه + +يقوم [`Trainer`] بحساب بعض القيم، مثل `scheduler.params.total_num_steps`، أثناء التدريب. + +### تكوين ZeRO + +هناك ثلاثة تكوينات، لكل منها مرحلة ZeRO مختلفة. المرحلة 1 ليست مثيرة للاهتمام من حيث قابلية التوسع، ويركز هذا الدليل على المرحلتين 2 و3. يحتوي تكوين `zero_optimization` على جميع الخيارات لتمكينها وكيفية تكوينها. للحصول على شرح أكثر تفصيلاً لكل معلمة، راجع مرجع تكوين DeepSpeed JSON [المرجع](https://www.deepspeed.ai/docs/config-json/). + + +لا يتحقق DeepSpeed من أسماء المعلمات وأي أخطاء إملائية تعود إلى الإعداد الافتراضي للمعلمة. يمكنك مشاهدة رسائل تسجيل تشغيل محرك DeepSpeed لمعرفة القيم التي سيتم استخدامها. + + + +يجب إعداد التكوينات التالية باستخدام DeepSpeed لأن [`Trainer`] لا يوفر حجج سطر الأوامر المكافئة. + + + + +يقسم ZeRO-1 حالات المحسن عبر وحدات معالجة الرسومات (GPU)، ويمكنك توقع زيادة طفيفة في السرعة. يمكن إعداد تكوين ZeRO-1 على النحو التالي: + +```yml +{ + "zero_optimization": { + "stage": 1 + } +} +``` + + + + +يقسم ZeRO-2 المحسن والتدرجات عبر وحدات معالجة الرسومات (GPU). تُستخدم هذه المرحلة في المقام الأول للتدريب نظرًا لعدم أهمية ميزاتها للاستدلال. بعض المعلمات المهمة التي يجب تكوينها لتحقيق أداء أفضل تشمل: +* يجب تمكين `offload_optimizer` لتقليل استخدام ذاكرة وحدة معالجة الرسومات (GPU). +* عندما يتم تعيين `overlap_comm` على `true`، فإنه يتداول زيادة استخدام ذاكرة وحدة معالجة الرسومات (GPU) لتقليل الكمون allreduce. تستخدم هذه الميزة 4.5x قيم `allgather_bucket_size` و`reduce_bucket_size`. في هذا المثال، يتم تعيينها على `5e8` مما يعني أنها تتطلب 9 جيجابايت من ذاكرة وحدة معالجة الرسومات (GPU). إذا كانت ذاكرة وحدة معالجة الرسومات (GPU) لديك 8 جيجابايت أو أقل، فيجب عليك تقليل `overlap_comm` لتقليل متطلبات الذاكرة ومنع خطأ نفاد الذاكرة (OOM). +* يتداول `allgather_bucket_size` و`reduce_bucket_size` ذاكرة وحدة معالجة الرسومات (GPU) المتاحة مقابل السرعة. كلما صغرت قيمهما، كلما كان الاتصال أبطأ وزادت ذاكرة وحدة معالجة الرسومات (GPU) المتاحة. يمكنك الموازنة، على سبيل المثال، بين ما إذا كان حجم الدفعة الأكبر أكثر أهمية من وقت التدريب البطيء قليلاً. +* `round_robin_gradients` متاح في DeepSpeed 0.4.4 لنقل CPU. فهو يوازي نسخ التدرج إلى ذاكرة CPU بين الرتب عن طريق تجزئة التدرج الدقيق. تنمو الفائدة في الأداء مع خطوات تراكم التدرج (المزيد من النسخ بين خطوات المحسن) أو عدد وحدات معالجة الرسومات (GPU) (زيادة التوازي). + +```yml +{ + "zero_optimization": { + "stage": 2, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "allgather_partitions": true, + "allgather_bucket_size": 5e8, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 5e8, + "contiguous_gradients": true, + "round_robin_gradients": true + } +} +``` + + + + +يقوم ZeRO-3 بتجزئة المحسن والتدرج والمعلمات عبر وحدات معالجة الرسومات. على عكس ZeRO-2، يمكن أيضًا استخدام ZeRO-3 للاستنتاج، بالإضافة إلى التدريب، لأنه يسمح بتحميل نماذج كبيرة على وحدات معالجة الرسومات متعددة. بعض المعلمات المهمة للتكوين تشمل: + +* `device: "cpu"` يمكن أن يساعد إذا كنت تواجه مشكلة في نفاد ذاكرة وحدة معالجة الرسومات (GPU) ولديك ذاكرة CPU مجانية متاحة. يسمح هذا بإلغاء تحميل معلمات النموذج إلى وحدة المعالجة المركزية (CPU). +* `pin_memory: true` يمكن أن يحسن الإنتاجية، ولكن يصبح مقدار أقل من الذاكرة متاحًا للعمليات الأخرى لأن الذاكرة المثبتة محجوزة لعملية محددة طلبتها وعادة ما يتم الوصول إليها بشكل أسرع من ذاكرة وحدة المعالجة المركزية (CPU) العادية. +* `stage3_max_live_parameters` هو الحد الأعلى لعدد المعلمات الكاملة التي تريد الاحتفاظ بها في وحدة معالجة الرسومات في أي وقت. قلل من هذه القيمة إذا واجهت خطأ OOM. +* `stage3_max_reuse_distance` هي قيمة لتحديد متى يتم استخدام معلمة مرة أخرى في المستقبل، وهي تساعد في اتخاذ قرار بشأن ما إذا كان يجب التخلص من المعلمة أو الاحتفاظ بها. إذا كان سيتم إعادة استخدام المعلمة (إذا كانت القيمة أقل من `stage3_max_reuse_distance`)، فيتم الاحتفاظ بها لتقليل التخزين المؤقت للاتصال. هذا مفيد للغاية عندما يتم تمكين التحقق من التنشيط وتريد الاحتفاظ بالمعلمة في إعادة حساب التمرير إلى الأمام حتى تمريرة الخلف. ولكن قلل من هذه القيمة إذا واجهت خطأ OOM. +* `stage3_gather_16bit_weights_on_model_save` توحيد أوزان fp16 عند حفظ نموذج. بالنسبة للنماذج الكبيرة وحدات معالجة الرسومات متعددة، هذا مكلف من حيث الذاكرة والسرعة. يجب تمكينه إذا كنت تخطط لاستئناف التدريب. +* `sub_group_size` يتحكم في المعلمات التي يتم تحديثها أثناء خطوة المحسن. يتم تجميع المعلمات في دلوات من `sub_group_size` ويتم تحديث كل دلو في وقت واحد. عند استخدامه مع NVMe offload، `sub_group_size` يحدد متى يتم نقل حالات النموذج من وإلى ذاكرة وحدة المعالجة المركزية أثناء خطوة التحسين. يمنع هذا نفاد ذاكرة وحدة المعالجة المركزية (CPU) للنماذج الكبيرة للغاية. يمكن ترك `sub_group_size` بقيمته الافتراضية إذا لم تكن تستخدم NVMe offload، ولكن قد ترغب في تغييره إذا: + + 1. واجه خطأ OOM أثناء خطوة المحسن. في هذه الحالة، قلل من `sub_group_size` لتقليل استخدام الذاكرة المؤقتة للذاكرة المؤقتة. + 2. تستغرق خطوة المحسن وقتًا طويلاً. في هذه الحالة، قم بزيادة `sub_group_size` لتحسين استخدام النطاق الترددي نتيجة زيادة مخازن البيانات. + +* `reduce_bucket_size`، و`stage3_prefetch_bucket_size`، و`stage3_param_persistence_threshold` تعتمد على حجم مخفي للنموذج. يُنصح بتعيين هذه القيم إلى `auto` والسماح لـ [`Trainer`] بتعيين القيم تلقائيًا. + +```yml +{ + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "offload_param": { + "device": "cpu", + "pin_memory": true + }, + "overlap_comm": true, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": "auto", + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": 1e9, + "stage3_max_reuse_distance": 1e9, + "stage3_gather_16bit_weights_on_model_save": true + } +} +``` + +يمكنك استخدام [`deepspeed.zero.Init`](https://deepspeed.readthedocs.io/en/latest/zero3.html#deepspeed.zero.Init) كمدير سياق لتهيئة نموذج بشكل أسرع: + +```py +from transformers import T5ForConditionalGeneration, T5Config +import deepspeed + +with deepspeed.zero.Init(): + config = T5Config.from_pretrained("google-t5/t5-small") + model = T5ForConditionalGeneration(config) +``` + +بالنسبة للنماذج المدربة مسبقًا، يجب أن يحتوي ملف تكوين DeepSped على "is_deepspeed_zero3_enabled: true" المحدد في [`TrainingArguments`] وأن يكون لديه تكوين ZeRO ممكّن. يجب إنشاء كائن [`TrainingArguments`] **قبل** استدعاء نموذج [`~PreTrainedModel.from_pretrained`]. + +```py +from transformers import AutoModel, Trainer, TrainingArguments + +training_args = TrainingArguments(..., deepspeed=ds_config) +model = AutoModel.from_pretrained("google-t5/t5-small") +trainer = Trainer(model=model, args=training_args, ...) +``` + +ستحتاج إلى ZeRO-3 إذا لم تتسع الأوزان fp16 على GPU واحدة. إذا كنت قادرًا على تحميل أوزان fp16، فتأكد من تحديد "torch_dtype=torch.float16" في [`~PreTrainedModel.from_pretrained`]. + +هناك اعتبار آخر لـ ZeRO-3 وهو إذا كان لديك عدة وحدات GPU، ولا تحتوي وحدة GPU واحدة على جميع المعلمات ما لم تكن المعلمات للطبقة التي يتم تنفيذها حاليًا. للوصول إلى جميع المعلمات من جميع الطبقات في وقت واحد، مثل تحميل أوزان النموذج المسبق التدريب في [`~PreTrainedModel.from_pretrained`]، يتم تحميل طبقة واحدة في كل مرة وتقسيمها فورًا إلى جميع وحدات GPU. ويرجع ذلك إلى أنه بالنسبة للنماذج الكبيرة جدًا، لا يمكن تحميل الأوزان على وحدة GPU واحدة ثم توزيعها عبر وحدات GPU الأخرى بسبب قيود الذاكرة. + +إذا صادفت وزن معلمة نموذج يشبه ما يلي، حيث "tensor([1.])" أو حجم المعلمة هو 1 بدلاً من شكل متعدد الأبعاد أكبر، فهذا يعني أن المعلمة مقسمة وهذا هو عنصر نائب ZeRO-3. + +```py +tensor([1.0], device="cuda:0"، dtype=torch.float16، يتطلب_grad = صحيح) +``` + + + +للحصول على مزيد من المعلومات حول تهيئة النماذج الكبيرة باستخدام ZeRO-3 والوصول إلى المعلمات، راجع دليلي [بناء النماذج الضخمة](https://deepspeed.readthedocs.io/en/latest/zero3.html#constructing-massive-models) و [جمع المعلمات](https://deepspeed.readthedocs.io/en/latest/zero3.html#gathering-parameters). + + + +### تكوين NVMe + +تسمح [ZeRO-Infinity](https://hf.co/papers/2104.07857) بتفريغ حالات النموذج إلى وحدة المعالجة المركزية و/أو NVMe لتوفير المزيد من الذاكرة. تسمح خوارزميات التجزئة والتبليط الذكية لكل GPU بإرسال واستقبال كميات صغيرة جدًا من البيانات أثناء التفريغ بحيث يمكن لجهاز NVMe الحديث أن يحتوي على مجموعة ذاكرة إجمالية أكبر من الذاكرة المتاحة لعملية التدريب الخاصة بك. تتطلب ZeRO-Infinity ZeRO-3. + +اعتمادًا على ذاكرة CPU و/أو NVMe المتوفرة، يمكنك تفريغ كل من [حالات المحسن](https://www.deepspeed.ai/docs/config-json/#optimizer-offloading) و [المعلمات](https://www.deepspeed.ai/docs/config-json/#parameter-offloading)، أو واحدة فقط منهما، أو لا شيء. يجب أيضًا التأكد من أن "nvme_path" يشير إلى جهاز NVMe، لأنه على الرغم من أنه لا يزال يعمل مع محرك أقراص ثابت عادي أو محرك أقراص صلبة، إلا أنه سيكون أبطأ بكثير. مع NVMe حديث، يمكنك توقع سرعات نقل ذروة تبلغ حوالي 3.5 جيجابايت/ثانية للقراءة وحوالي 3 جيجابايت/ثانية لعمليات الكتابة. أخيرًا، [قم بتشغيل معيار](https://github.com/microsoft/DeepSpeed/issues/998) على إعداد التدريب الخاص بك لتحديد تكوين "aio" الأمثل. + +يحدد ملف تكوين ZeRO-3/Infinity أدناه معظم قيم المعلمات إلى "auto"، ولكن يمكنك أيضًا إضافة هذه القيم يدويًا. + +```yml +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + + "optimizer": { + "type": "AdamW"، + "params": { + "lr": "auto"، + "betas": "auto"، + "eps": "auto"، + "weight_decay": "auto" + } + }, + + "scheduler": { + "type": "WarmupLR"، + "params": { + "warmup_min_lr": "auto"، + "warmup_max_lr": "auto"، + "warmup_num_steps": "auto" + } + }, + + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "nvme"، + "nvme_path": "/local_nvme"، + "pin_memory": true، + "buffer_count": 4، + "fast_init": false + }, + "offload_param": { + "device": "nvme"، + "nvme_path": "/local_nvme"، + "pin_memory": true، + "buffer_count": 5، + "buffer_size": 1e8، + "max_in_cpu": 1e9 + }، + "aio": { + "block_size": 262144، + "queue_depth": 32، + "thread_count": 1، + "single_submit": false، + "overlap_events": true + }، + "overlap_comm": true، + "contiguous_gradients": true، + "sub_group_size": 1e9، + "reduce_bucket_size": "auto"، + "stage3_prefetch_bucket_size": "auto"، + "stage3_param_persistence_threshold": "auto"، + "stage3_max_live_parameters": 1e9، + "stage3_max_reuse_distance": 1e9، + "stage3_gather_16bit_weights_on_model_save": true + }، + + "gradient_accumulation_steps": "auto"، + "gradient_clipping": "auto"، + "steps_per_print": 2000، + "train_batch_size": "auto"، + "train_micro_batch_size_per_gpu": "auto"، + "wall_clock_breakdown": false +} +``` + +## ميزات DeepSpeed + +هناك عدد من المعلمات المهمة التي يجب تحديدها في ملف تكوين DeepSpeed والتي يتم وصفها بإيجاز في هذا القسم. + +### نقطة تفتيش التنشيط/التدرج + +تتطلب نقطة تفتيش التنشيط والتدرج سرعة أكبر مقابل ذاكرة GPU أكبر، مما يتيح لك التغلب على السيناريوهات التي تنفد فيها ذاكرة GPU أو زيادة حجم دفعتك لتحقيق أداء أفضل. لتمكين هذه الميزة: + +1. بالنسبة لنموذج Hugging Face، قم بتعيين "model.gradient_checkpointing_enable()" أو "--gradient_checkpointing" في [`Trainer`]. +2. بالنسبة للنموذج غير Hugging Face، استخدم واجهة برمجة تطبيقات DeepSpeed [Activation Checkpointing API](https://deepspeed.readthedocs.io/en/latest/activation-checkpointing.html). يمكنك أيضًا استبدال رمز نمذجة المحولات واستبدال "torch.utils.checkpoint" بواجهة برمجة التطبيقات DeepSpeed. هذا النهج أكثر مرونة لأنه يمكنك تفريغ التنشيطات للأمام إلى ذاكرة وحدة المعالجة المركزية بدلاً من إعادة حسابها. + +### المحسن والمجدول + +يمكن مزج محسن DeepSpeed ومحول النماذج وجدولة مواعيده طالما أنك لا تقوم بتمكين "offload_optimizer". عندما يتم تمكين "offload_optimizer"، يمكنك استخدام محسن غير DeepSpeed (باستثناء LAMB) طالما أنه يحتوي على كل من التنفيذ CPU و GPU. + + +يمكن تعيين معلمات المحسن والمجدول لملف التكوين من سطر الأوامر لتجنب الأخطاء التي يصعب العثور عليها. على سبيل المثال، إذا تم تعيين معدل التعلم على قيمة مختلفة في مكان آخر، فيمكنك تجاوزه من سطر الأوامر. وبصرف النظر عن معلمات المحسن والمجدول، سيتعين عليك التأكد من أن حجج سطر الأوامر لـ [`Trainer`] تتطابق مع تكوين DeepSpeed. + + + + + + +تقدم DeepSpeed العديد من [المحسنات](https://www.deepspeed.ai/docs/config-json/#optimizer-parameters) (Adam و AdamW و OneBitAdam و LAMB)، ولكن يمكنك أيضًا استيراد محسنات أخرى من PyTorch. إذا لم تقم بتكوين المحسن في التكوين، فإن [`Trainer`] يحدد تلقائيًا AdamW ويستخدم إما القيم المقدمة أو القيم الافتراضية للمعلمات التالية من سطر الأوامر: "lr"، "adam_beta1"، "adam_beta2"، "adam_epsilon"، "weight_decay". + +يمكنك تعيين المعلمات إلى "auto" أو إدخال قيمك المرغوبة يدويًا. + +```yaml +{ + "optimizer": { + "type": "AdamW"، + "params": { + "lr": "auto"، + "betas": "auto"، + "eps": "auto"، + "weight_decay": "auto" + } + } +} +``` + +يمكنك أيضًا استخدام محسن غير مدعوم عن طريق إضافة ما يلي إلى تكوين المستوى الأعلى. + +```yaml +{ + "zero_allow_untested_optimizer": true +} +``` + +من DeepSpeed==0.8.3، إذا كنت تريد استخدام التفريغ، فستحتاج أيضًا إلى إضافة ما يلي إلى تكوين المستوى الأعلى لأن التفريغ يعمل بشكل أفضل مع محسن CPU Adam الخاص بـ DeepSpeed. + +```yaml +{ + "zero_force_ds_cpu_optimizer": false +} +``` + + + + +تدعم DeepSpeed مجدول معدلات التعلم LRRangeTest و OneCycle و WarmupLR و WarmupDecayLR [schedulers](https://www.deepspeed.ai/docs/config-json/#scheduler-parameters). + +يوفر المحولون و DeepSpeed نفس المجدولين: + +* WarmupLR هو نفسه مثل `--lr_scheduler_type constant_with_warmup` في المحولون +* WarmupDecayLR هو نفسه مثل `--lr_scheduler_type linear` في المحولون (هذا هو المجدول الافتراضي المستخدم في المحولون) + +إذا لم تقم بتكوين المجدول في التكوين، فإن [`Trainer`] يحدد تلقائيًا WarmupDecayLR ويستخدم إما القيم المقدمة أو القيم الافتراضية للمعلمات التالية من سطر الأوامر: "warmup_min_lr"، "warmup_max_lr"، "warmup_num_steps"، "total_num_steps" (يتم حسابها تلقائيًا أثناء وقت التشغيل إذا لم يتم توفير "max_steps"). + +يمكنك تعيين المعلمات إلى "auto" أو إدخال قيمك المرغوبة يدويًا. + +```yaml +{ + "scheduler": { + "type": "WarmupDecayLR"، + "params": { + "total_num_steps": "auto"، + "warmup_min_lr": "auto"، + "warmup_max_lr": "auto"، + "warmup_num_steps": "auto" + } + } +} +``` + + + + +### الدقة + +تدعم Deepspeed الدقة fp32 و fp16 و bf16 المختلطة. + + + + +إذا لم يعمل نموذجك بشكل جيد مع الدقة المختلطة، على سبيل المثال إذا لم يتم تدريبه مسبقًا في الدقة المختلطة، فقد تواجه مشكلات في الفيض أو نقصان قد يتسبب في فقدان NaN. في هذه الحالات، يجب استخدام الدقة fp32 الكاملة عن طريق تعطيل وضع fp16 الافتراضي بشكل صريح. + +```yaml +{ + "fp16": { + "enabled": false + } +} +``` + +بالنسبة لوحدات GPU Ampere و PyTorch > 1.7، فإنه يتحول تلقائيًا إلى تنسيق [tf32] الأكثر كفاءة (https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices) لبعض العمليات ولكن النتائج لا تزال في fp32. يمكنك التحكم فيه من [`Trainer`] عن طريق تعيين "--tf32" لتمكينه، و "--tf32 0" أو "--no_tf32" لتعطيله. + + + +### تكوين fp16 مماثل لـ PyTorch AMP + +لتقليل استخدام الذاكرة وتسريع سرعة التدريب، يمكنك تكوين الدقة المختلطة fp16 المشابهة لـ PyTorch AMP. يقوم [Trainer] تلقائيًا بتمكين أو تعطيل fp16 بناءً على قيمة args.fp16_backend، ويمكنك تعيين باقي التكوين. يتم تمكين fp16 من سطر الأوامر عند تمرير الحجج التالية: --fp16، --fp16_backend amp أو --fp16_full_eval. + +```yaml +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + } +} +``` + +للحصول على خيارات تدريب DeepSpeed fp16 الإضافية، راجع مرجع [خيارات تدريب FP16](https://www.deepspeed.ai/docs/config-json/#fp16-training-options). + +### تكوين دقة مختلطة fp16 مماثلة لـ Apex + +لإعداد دقة مختلطة fp16 مماثلة لـ Apex، قم بضبط التكوين كما هو موضح أدناه باستخدام "auto" أو قيمك الخاصة. يقوم [Trainer] تلقائيًا بتكوين amp بناءً على قيم args.fp16_backend وargs.fp16_opt_level. يمكن أيضًا تمكينه من سطر الأوامر عند تمرير الحجج التالية: --fp16، --fp16_backend apex أو --fp16_opt_level 01. + +```yaml +{ + "amp": { + "enabled": "auto", + "opt_level": "auto" + } +} +``` + +### استخدام bf16 + +لاستخدام bf16، ستحتاج إلى DeepSpeed==0.6.0 على الأقل. يحتوي bf16 على نفس النطاق الديناميكي مثل fp32 ولا يتطلب ضبط مقياس الخسارة. ومع ذلك، إذا كنت تستخدم [تراكم الخرج](#gradient-accumulation) مع bf16، يتم تراكم الخرج في bf16، والذي قد لا يكون مرغوبًا فيه لأن تنسيق الدقة المنخفضة هذا يمكن أن يؤدي إلى تراكم الخسارة. + +يمكن إعداد bf16 في ملف التكوين أو تمكينه من سطر الأوامر عند تمرير الحجج التالية: --bf16 أو --bf16_full_eval. + +```yaml +{ + "bf16": { + "enabled": "auto" + } +} +``` + +### حجم الدُفعة + +يمكن تكوين حجم الدفعة تلقائيًا أو تحديده صراحةً. إذا اخترت استخدام خيار "auto"، فسيقوم [Trainer] بتعيين train_micro_batch_size_per_gpu إلى قيمة args.per_device_train_batch_size وtrain_batch_size إلى args.world_size * args.per_device_train_batch_size * args.gradient_accumulation_steps. + +```yaml +{ + "train_micro_batch_size_per_gpu": "auto", + "train_batch_size": "auto" +} +``` + +### تراكم الخرج + +يمكن تكوين تراكم الخرج تلقائيًا أو تحديده صراحةً. إذا اخترت استخدام خيار "auto"، فسيقوم [Trainer] بتعيينه إلى قيمة args.gradient_accumulation_steps. + +```yaml +{ + "gradient_accumulation_steps": "auto" +} +``` + +### قص الخرج + +يمكن تكوين قص الخرج تلقائيًا أو تحديده صراحةً. إذا اخترت استخدام خيار "auto"، فسيقوم [Trainer] بتعيينه إلى قيمة args.max_grad_norm. + +```yaml +{ + "gradient_clipping": "auto" +} +``` + +### نوع بيانات الاتصال + +بالنسبة لعمليات الجمعيات التواصلية مثل عمليات التخفيض والجمع والتشتت، يتم استخدام نوع بيانات منفصل. + +يتم تنفيذ جميع عمليات الجمع والتشتت بنفس نوع البيانات الموجودة في البيانات. على سبيل المثال، إذا كنت تتدرب باستخدام bf16، فسيتم أيضًا جمع البيانات في bf16 لأن التجميع عملية غير مسببة للخسارة. + +عمليات التخفيض مسببة للخسارة، على سبيل المثال عند حساب متوسط الخرج عبر وحدات معالجة الرسوميات (GPU) متعددة. عندما يتم تنفيذ الاتصال في fp16 أو bf16، من المحتمل أن يكون مسببًا للخسارة لأن إضافة أرقام متعددة في دقة منخفضة ليست دقيقة. وينطبق هذا بشكل خاص على bf16 الذي يتمتع بدقة أقل من fp16. لهذا السبب، يكون fp16 هو الافتراضي لعمليات التخفيض لأن الخسارة ضئيلة عند حساب متوسط الخرج. + +يمكنك اختيار نوع بيانات الاتصال عن طريق تعيين معلمة communication_data_type في ملف التكوين. على سبيل المثال، يؤدي اختيار fp32 إلى إضافة قدر صغير من النفقات العامة، ولكنه يضمن أن يتم تراكم عملية التخفيض في fp32 وعند جاهزته، يتم تحويله إلى تنسيق الدقة النصفية الذي تتدرب فيه. + +```yaml +{ + "communication_data_type": "fp32" +} +``` + +## النشر +```yaml +{ + "communication_data_type": "fp32" +} +``` + +## النشر + +يمكن نشر DeepSpeed بواسطة برامج الإطلاق المختلفة مثل [torchrun](https://pytorch.org/docs/stable/elastic/run.html)، أو برنامج إطلاق DeepSpeed، أو [Accelerate](https://huggingface.co/docs/accelerate/basic_tutorials/launch#using-accelerate-launch). لنشره، أضف --deepspeed ds_config.json إلى سطر أوامر [Trainer]. يُنصح باستخدام أداة DeepSpeed [`add_config_arguments`](https://deepspeed.readthedocs.io/en/latest/initialize.html#argument-parsing) لإضافة أي حجج سطر أوامر ضرورية إلى رمزك. + +سيوضح لك هذا الدليل كيفية نشر DeepSpeed باستخدام برنامج إطلاق DeepSpeed لمجموعات التدريب المختلفة. يمكنك الاطلاع على هذا [المنشور](https://github.com/huggingface/transformers/issues/8771#issuecomment-759248400) للحصول على أمثلة استخدام أكثر عملية. + +### النشر على وحدات معالجة الرسوميات (GPU) المتعددة + +لنشر DeepSpeed على وحدات معالجة الرسوميات (GPU) المتعددة، أضف معلمة --num_gpus. إذا كنت تريد استخدام جميع وحدات معالجة الرسوميات (GPU) المتوفرة، فلا يلزم إضافة --num_gpus. يستخدم المثال أدناه وحدتي معالجة رسوميات (GPU). + +```bash +deepspeed --num_gpus=2 examples/pytorch/translation/run_translation.py \ +--deepspeed tests/deepspeed/ds_config_zero3.json \ +--model_name_or_path google-t5/t5-small --per_device_train_batch_size 1 \ +--output_dir output_dir --overwrite_output_dir --fp16 \ +--do_train --max_train_samples 500 --num_train_epochs 1 \ +--dataset_name wmt16 --dataset_config "ro-en" \ +--source_lang en --target_lang ro +``` + +### النشر على وحدة معالجة رسوميات (GPU) واحدة + +لنشر DeepSpeed على وحدة معالجة رسوميات (GPU) واحدة، أضف معلمة --num_gpus. لا يلزم تعيين هذه القيمة صراحةً إذا كان لديك وحدة معالجة رسوميات (GPU) واحدة فقط لأن DeepSpeed ينشر جميع وحدات معالجة الرسوميات (GPU) التي يمكنه رؤيتها على عقدة معينة. + +```bash +deepspeed --num_gpus=1 examples/pytorch/translation/run_translation.py \ +--deepspeed tests/deepspeed/ds_config_zero2.json \ +--model_name_or_path google-t5/t5-small --per_device_train_batch_size 1 \ +--output_dir output_dir --overwrite_output_dir --fp16 \ +--do_train --max_train_samples 500 --num_train_epochs 1 \ +--dataset_name wmt16 --dataset_config "ro-en" \ +--source_lang en --target_lang ro +``` + +ما زال DeepSpeed مفيدًا مع وحدة معالجة رسوميات (GPU) واحدة فقط لأنه يمكنك: + +1. نقل بعض الحسابات والذاكرة إلى وحدة المعالجة المركزية (CPU) لتحرير المزيد من موارد وحدة معالجة الرسوميات (GPU) لكي يستخدمها نموذجك لحجم دفعة أكبر أو نموذج كبير جدًا لا يمكنه عادةً أن يتناسب. +2. تقليل تجزئة الذاكرة باستخدام نظام إدارة ذاكرة وحدة معالجة الرسوميات (GPU) الذكي الذي يسمح أيضًا بتناسب النماذج والدفعات الأكبر حجمًا. + + + +قم بتعيين قيم allgather_bucket_size وreduce_bucket_size إلى 2e8 في ملف تكوين [Zero-2](#zero-configuration) للحصول على أداء أفضل على وحدة معالجة رسوميات (GPU) واحدة. + + + +### النشر على عدة عقد + +العقدة هي وحدة معالجة رسوميات (GPU) واحدة أو أكثر لتشغيل عبء العمل. يعد الإعداد متعدد العقد إعدادًا أكثر قوة ويمكن إطلاقه باستخدام برنامج إطلاق DeepSpeed. بالنسبة لهذا الدليل، دعنا نفترض وجود عقدتين بثماني وحدات معالجة رسوميات (GPU) لكل منهما. يمكن الوصول إلى العقدة الأولى باستخدام ssh hostname1 والعقدة الثانية باستخدام ssh hostname2. يجب أن تتمكن كلتا العقدتين من التواصل مع بعضهما البعض محليًا عبر ssh بدون كلمة مرور. + +يتوقع DeepSpeed افتراضيًا أن يستخدم إعدادك متعدد العقد تخزينًا مشتركًا. إذا لم يكن الأمر كذلك ولا يمكن لكل عقدة سوى رؤية نظام الملفات المحلي، فيجب عليك ضبط ملف التكوين لتضمين ["checkpoint"](https://www.deepspeed.ai/docs/config-json/#checkpoint-options) للسماح بالتحميل بدون الوصول إلى نظام ملفات مشترك: + +```yaml +{ + "checkpoint": { + "use_node_local_storage": true + } +} +``` + +يمكنك أيضًا استخدام حجة `--save_on_each_node` الخاصة بـ [Trainer] لإضافة "checkpoint" أعلاه تلقائيًا إلى تكوينك. + +### استخدام torchrun + +بالنسبة لـ [torchrun](https://pytorch.org/docs/stable/elastic/run.html)، يجب عليك تسجيل الدخول إلى كل عقدة عبر ssh وتشغيل الأمر التالي على كل منهما. ينتظر برنامج الإطلاق حتى تتم مزامنة كلتا العقدتين قبل بدء التدريب. +```bash +torchrun --nproc_per_node=8 --nnode=2 --node_rank=0 --master_addr=hostname1 \ +--master_port=9901 your_program.py --deepspeed ds_config.json +``` + +### استخدام برنامج إطلاق DeepSpeed + +بالنسبة لبرنامج إطلاق DeepSpeed، ابدأ بإنشاء ملف hostfile. + +```bash +hostname1 slots=8 +hostname2 slots=8 +``` + +بعد ذلك، يمكنك بدء التدريب باستخدام الأمر التالي. يقوم برنامج إطلاق DeepSpeed تلقائيًا ببدء الأمر على كلتا العقدتين في نفس الوقت. + +```bash +deepspeed --num_gpus 8 --num_nodes 2 --hostfile hostfile --master_addr hostname1 --master_port=9901 \ +your_program.py --deepspeed ds_config.json +``` + +راجع دليل [تكوين الموارد (متعدد العقد)](https://www.deepspeed.ai/getting-started/#resource-configuration-multi-node) للحصول على مزيد من التفاصيل حول تكوين موارد الحوسبة متعددة العقد. + +### SLURM + +في بيئة SLURM، سيتعين عليك تكييف نص SLURM النصي مع بيئة SLURM الخاصة بك. قد يبدو مثال لنص SLURM على النحو التالي: + +```bash +#SBATCH --job-name=test-nodes # الاسم +#SBATCH --nodes=2 # العقد +#SBATCH --ntasks-per-node=1 # حاسم - مهمة واحدة فقط لكل توزيع لكل عقدة! +#SBATCH --cpus-per-task=10 # عدد الأنوية لكل المهام +#SBATCH --gres=gpu:8 # عدد وحدات معالجة الرسوميات (GPU) +#SBATCH --time 20:00:00 # وقت التنفيذ الأقصى (ساعة:دقيقة:ثانية) +#SBATCH --output=%x-%j.out # اسم ملف الإخراج + +export GPUS_PER_NODE=8 +export MASTER_ADDR=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1) +export MASTER_PORT=9901 + +srun --jobid $SLURM_JOBID bash -c 'python -m torch.distributed.run \ + --nproc_per_node $GPUS_PER_NODE --nnodes $SLURM_NNODES --node_rank $SLURM_PROCID \ + --master_addr $MASTER_ADDR --master_port $MASTER_PORT \ +your_program.py --deepspeed ds_config.json' +``` + +بعد ذلك، يمكنك جدولة نشرك متعدد العقد باستخدام الأمر التالي الذي يبدأ التدريب في وقت واحد على جميع العقد. + +```bash +sbatch launch.slurm +``` + +### دفتر الملاحظات + +لا يدعم برنامج إطلاق DeepSpeed النشر من دفتر الملاحظات، لذلك سيتعين عليك محاكاة بيئة موزعة. ومع ذلك، فإن هذا يعمل فقط لوحدة معالجة رسوميات (GPU) واحدة. إذا كنت تريد استخدام أكثر من وحدة معالجة رسوميات (GPU) واحدة، فيجب عليك استخدام بيئة متعددة العمليات لكي يعمل DeepSpeed. وهذا يعني أنه يتعين عليك استخدام برنامج إطلاق DeepSpeed الذي لا يمكن محاكاته كما هو موضح هنا. + +```py +# يتطلب DeepSpeed بيئة موزعة حتى عند استخدام عملية واحدة فقط. +# هذه تحاكي برنامج الإطلاق في دفتر الملاحظات +import os + +os.environ["MASTER_ADDR"] = "localhost" +osMultiplier.environ["MASTER_PORT"] = "9994" # غيّره إذا حدث خطأ " Runaway: Address already in use" +os.environ["RANK"] = "0" +os.environ["LOCAL_RANK"] = "0" +os.environ["WORLD_SIZE"] = "1" + +# الآن تابع كالمعتاد، بالإضافة إلى تمرير ملف تكوين DeepSpeed +training_args = TrainingArguments(..., deepspeed="ds_config_zero3.json") +trainer = Trainer(...) +trainer.train() +``` + +إذا كنت تريد إنشاء ملف التكوين أثناء التنقل في دفتر الملاحظات في الدليل الحالي، فيمكنك تخصيص خلية لذلك. + +```py +%%bash +cat <<'EOT' > ds_config_zero3.json +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "offload_param": { + "device": "cpu", + "pin_memory": true + }, + "overlap_comm": true, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": "auto", + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": 1e9, + "stage3_max_reuse_distance": 1e9, + "stage3_gather_16bit_weights_on_model_save": true + }, + + "gradient_accumulation_steps": "auto", + "gradient_clipping": "auto", + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "wall_clock_breakdown": false +} +EOT +``` + +إذا كان نص البرنامج النصي للتدريب موجودًا في ملف وليس في خلية دفتر ملاحظات، فيمكنك تشغيل `deepspeed` بشكل طبيعي من shell في خلية دفتر ملاحظات. على سبيل المثال، لتشغيل `run_translation.py`: + +```py +!git clone https://github.com/huggingface/transformers +!cd transformers؛ deepspeed examples/pytorch/translation/run_translation.py ... +``` + +يمكنك أيضًا استخدام `%%bash` magic وكتابة التعليمات البرمجية متعددة الأسطر لتشغيل برنامج shell، ولكن لن تتمكن من عرض السجلات حتى اكتمال التدريب. مع `%%bash` magic، لا تحتاج إلى محاكاة بيئة موزعة. + +```py +%%bash + +git clone https://github.com/huggingface/transformers +cd transformers +deepspeed examples/pytorch/translation/run_translation.py ... +``` + +## حفظ أوزان النموذج + +يحتفظ DeepSpeed بأوزان الدقة الكاملة الرئيسية fp32 في ملفات نقطة تفتيش محسن مخصصة (نمط glob يشبه `global_step*/*optim_states.pt`) ويتم حفظها في نقطة تفتيش عادية. + + + + +يحفظ النموذج الذي تم تدريبه باستخدام ZeRO-2 أوزان pytorch_model.bin في fp16. لحفظ أوزان النموذج في fp16 لنموذج تم تدريبه باستخدام ZeRO-3، يجب عليك تعيين `"stage3_gather_16bit_weights_on_model_save": true` لأن أوزان النموذج مجزأة عبر وحدات معالجة الرسومات متعددة. وإلا، فإن [`Trainer`] لن يحفظ الأوزان في fp16 ولن يقوم بإنشاء ملف pytorch_model.bin. هذا لأن حالة DeepSpeed's state_dict تحتوي على عنصر نائب بدلاً من الأوزان الحقيقية ولن تتمكن من تحميلها. + +```yaml +{ + "zero_optimization": { + "stage3_gather_16bit_weights_on_model_save": true + } +} +``` + + + + +لا يجب حفظ أوزان الدقة الكاملة أثناء التدريب لأنها قد تتطلب الكثير من الذاكرة. من الأفضل عادةً حفظ أوزان fp32 دون اتصال بمجرد اكتمال التدريب. ولكن إذا كان لديك الكثير من ذاكرة وحدة المعالجة المركزية (CPU) المجانية، فيمكن حفظ أوزان الدقة الكاملة أثناء التدريب. يغطي هذا القسم كلاً من النهج عبر الإنترنت وغير المتصل. + +### عبر الإنترنت Online + +يجب أن يكون قد تم حفظ نقطة تفتيش واحدة على الأقل لتحميل أحدث نقطة تفتيش كما هو موضح فيما يلي: + +```py +from transformers.trainer_utils import get_last_checkpoint +from deepspeed.utils.zero_to_fp32 import load_state_dict_from_zero_checkpoint + +checkpoint_dir = get_last_checkpoint(trainer.args.output_dir) +fp32_model = load_state_dict_from_zero_checkpoint(trainer.model، checkpoint_dir) +``` + +إذا قمت بتمكين المعلمة `--load_best_model_at_end` لتتبع أفضل نقطة تفتيش في [`TrainingArguments`]]، فيمكنك إنهاء التدريب أولاً وحفظ النموذج النهائي بشكل صريح. بعد ذلك، يمكنك إعادة تحميله كما هو موضح أدناه: + +```py +from deepspeed.utils.zero_to_fp32 import load_state_dict_from_zero_checkpoint + +checkpoint_dir = os.path.join(trainer.args.output_dir، "checkpoint-final") +trainer.deepspeed.save_checkpoint(checkpoint_dir) +fp32_model = load_state_dict_from_zero_checkpoint(trainer.model، checkpoint_dir) +``` + + + +بمجرد تشغيل load_state_dict_from_zero_checkpoint، لم يعد النموذج قابلًا للاستخدام في DeepSpeed في سياق نفس التطبيق. ستحتاج إلى تهيئة محرك DeepSpeed مرة أخرى لأن model.load_state_dict(state_dict) تزيل كل سحر DeepSpeed منه. استخدم هذا فقط في نهاية التدريب. + + + +يمكنك أيضًا استخراج وحمل حالة fp32 الأوزان: + +```py +from deepspeed.utils.zero_to_fp32 import get_fp32_state_dict_from_zero_checkpoint + +state_dict = get_fp32_state_dict_from_zero_checkpoint(checkpoint_dir) # موجود بالفعل على وحدة المعالجة المركزية +model = model.cpu() +model.load_state_dict(state_dict) +``` + +### غير متصل Offline + +يوفر DeepSpeed نص برمجي zero_to_fp32.py في المستوى الأعلى لمجلد checkpoint لاستخراج الأوزان في أي نقطة. هذا نص برمجي مستقل ولا تحتاج إلى ملف تكوين أو [Trainer]. + +على سبيل المثال، إذا كان مجلد checkpoint الخاص بك يبدو كالتالي: + +```bash +$ ls -l output_dir/checkpoint-1/ +-rw-rw-r-- 1 stas stas 1.4K Mar 27 20:42 config.json +drwxrwxr-x 2 stas stas 4.0K Mar 25 19:52 global_step1/ +-rw-rw-r-- Multiplier stas 12 Mar 27 13:16 latest +-rw-rw-r-- 1 stas stas 827K Mar 27 20:42 optimizer.pt +-rw-rw-r-- 1 stas stas 231M Mar 27 20:42 pytorch_model.bin +-rw-rw-r-- 1 stas stas 623 Mar 27 20:42 scheduler.pt +-rw-rw-r-- 1 stas stas 1.8K Mar 27 20:42 special_tokens_map.json +-rw-rw-r-- 1 stas stas 774K Mar 27 20:42 spiece.model +-rw-rw-r-- 1 stas stas 1.9K Mar 27 20:42 tokenizer_config.json +-rw-rw-r-- 1 stas stas 339 Mar 27 20:42 trainer_state.json +-rw-rw-r-- 1 stas stas 2.3K Mar 27 20:42 training_args.bin +-rwxrw-r-- 1 stas stas 5.5K Mar 27 13:16 zero_to_fp32.py* +``` + +لإعادة بناء أوزان fp32 من نقطة تفتيش DeepSpeed (ZeRO-2 أو ZeRO-3) subfolder `global_step1`، قم بتشغيل الأمر التالي لإنشاء وتوحيد أوزان fp32 الكاملة من وحدات GPU متعددة في ملف pytorch_model.bin واحد. يكتشف النص البرمجي تلقائيًا المجلد الفرعي الذي يحتوي على نقطة التفتيش. + +```py +python zero_to_fp32.py . pytorch_model.bin +``` + + + +قم بتشغيل `python zero_to_fp32.py -h` لمزيد من تفاصيل الاستخدام. يتطلب النص البرمجي 2x RAM العام لأوزان fp32 النهائية. + + + + + + +## ZeRO Inference + +[استنتاج الصفر](https://www.deepspeed.ai/2022/09/09/zero-inference.html) يضع أوزان النموذج في ذاكرة CPU أو NVMe لتجنب إرهاق وحدة معالجة الرسومات GPU مما يجعل من الممكن تشغيل الاستدلال باستخدام نماذج ضخمة على وحدة معالجة الرسومات GPU. لا يتطلب الاستدلال أي كميات إضافية كبيرة من الذاكرة لحالات المحسن والتدرجات، لذا يمكنك ملاءمة دفعات و/أو تسلسلات أطول على نفس الأجهزة. + +يستخدم استنتاج الصفر نفس ملف التكوين مثل [الصفر-3](#zero-configuration)، وتكوينات الصفر-2 والصفر-1 لا تعمل لأنها لا توفر أي فوائد للاستدلال. + +لتشغيل استدلال الصفر، مرر حجج التدريب المعتادة إلى فئة [TrainingArguments] وأضف الحجة --do_eval. + +```bash +deepspeed --num_gpus=2 your_program.py --do_eval --deepspeed ds_config.json +``` + +## تكامل DeepSpeed غير المدرب + +يعمل DeepSpeed أيضًا مع Transformers بدون فئة [Trainer]. تتم معالجة هذا بواسطة [HfDeepSpeedConfig] التي تهتم فقط بجمع معلمات الصفر-3 وتقسيم نموذج عبر وحدات معالجة الرسومات GPU متعددة عند استدعاء [~ PreTrainedModel.from_pretrained]. + + + +إذا كنت تريد أن تتم معالجة كل شيء تلقائيًا، فجرّب استخدام DeepSpeed مع [Trainer]! ستحتاج إلى اتباع [توثيق DeepSpeed](https://www.deepspeed.ai/)، وقم يدويًا بتكوين قيم المعلمات في ملف التكوين (لا يمكنك استخدام القيمة "auto"). + + + +لنشر الصفر-3 بكفاءة، يجب عليك إنشاء مثيل كائن [HfDeepSpeedConfig] قبل النموذج والاحتفاظ بذلك الكائن نشطًا: + + + + +```py +from transformers.integrations import HfDeepSpeedConfig +from transformers import AutoModel +import deepspeed + + + +```py +from transformers.integrations import HfDeepSpeedConfig +from transformers import AutoModel +import deepspeed + +ds_config = {...} # كائن تكوين DeepSpeed أو المسار إلى الملف +# يجب تشغيله قبل إنشاء مثيل النموذج للكشف عن الصفر 3 +dschf = HfDeepSpeedConfig(ds_config) # احتفظ بهذا الكائن نشطًا +model = AutoModel.from_pretrained("openai-community/gpt2") +engine = deepspeed.initialize(model=model, config_params=ds_config, ...) +``` + + + + +[HfDeepSpeedConfig] غير مطلوب للصفر-1 أو الصفر-2. + +```py +from transformers.integrations import HfDeepSpeedConfig +from transformers import AutoModel, AutoConfig +import deepspeed + +ds_config = {...} # كائن تكوين DeepSpeed أو المسار إلى الملف +# يجب تشغيله قبل إنشاء مثيل النموذج للكشف عن الصفر 3 +dschf = HfDeepSpeedConfig(ds_config) # احتفظ بهذا الكائن نشطًا +config = AutoConfig.from_pretrained("openai-community/gpt2") +model = AutoModel.from_config(config) +engine = deepspeed.initialize(model=model, config_params=ds_config, ...) +``` + + + + +### ZeRO Inference غير المدرب + +لتشغيل استدلال الصفر بدون [مدرب] في الحالات التي لا يمكنك فيها وضع نموذج على وحدة معالجة الرسومات GPU واحدة، جرّب استخدام وحدات معالجة الرسومات GPU الإضافية و/أو التفريغ إلى ذاكرة CPU. الدقة المهمة التي يجب فهمها هنا هي أنه يمكن لمعمارية الصفر معالجة مدخلات مختلفة على وحدات معالجة الرسومات GPU المختلفة بالتوازي. + +تأكد من: + +* تعطيل التفريغ إلى وحدة المعالجة المركزية إذا كان لديك ذاكرة GPU كافية (نظرًا لأنه يبطئ الأمور). +* تمكين bf16 إذا كان لديك GPU Ampere أو أحدث للتسريع. إذا لم يكن لديك أحد هذه المعالجات الرسومية، فيمكنك تمكين fp16 طالما أنك لا تستخدم نموذجًا مدربًا في bf16 (نماذج T5) لأنه قد يؤدي إلى خطأ في الفيض. + +الق نظرة على النص البرمجي التالي للحصول على فكرة أفضل حول كيفية تشغيل استدلال الصفر بدون [مدرب] على نموذج لن يناسب وحدة معالجة الرسومات GPU واحدة. + +```py +#!/usr/bin/env python + +# This script demonstrates how to use Deepspeed ZeRO in an inference mode when one can't fit a model +# into a single GPU +# +# 1. Use 1 GPU with CPU offload +# 2. Or use multiple GPUs instead +# +# First you need to install deepspeed: pip install deepspeed +# +# Here we use a 3B "bigscience/T0_3B" model which needs about 15GB GPU RAM - so 1 largish or 2 +# small GPUs can handle it. or 1 small GPU and a lot of CPU memory. +# +# To use a larger model like "bigscience/T0" which needs about 50GB, unless you have an 80GB GPU - +# you will need 2-4 gpus. And then you can adapt the script to handle more gpus if you want to +# process multiple inputs at once. +# +# The provided deepspeed config also activates CPU memory offloading, so chances are that if you +# have a lot of available CPU memory and you don't mind a slowdown you should be able to load a +# model that doesn't normally fit into a single GPU. If you have enough GPU memory the program will +# run faster if you don't want offload to CPU - so disable that section then. +# +# To deploy on 1 gpu: +# +# deepspeed --num_gpus 1 t0.py +# or: +# python -m torch.distributed.run --nproc_per_node=1 t0.py +# +# To deploy on 2 gpus: +# +# deepspeed --num_gpus 2 t0.py +# or: +# python -m torch.distributed.run --nproc_per_node=2 t0.py + +from transformers import AutoTokenizer, AutoConfig, AutoModelForSeq2SeqLM +from transformers.integrations import HfDeepSpeedConfig +import deepspeed +import os +import torch + +os.environ["TOKENIZERS_PARALLELISM"] = "false" # To avoid warnings about parallelism in tokenizers + +# distributed setup +local_rank = int(os.getenv("LOCAL_RANK", "0")) +world_size = int(os.getenv("WORLD_SIZE", "1")) +torch.cuda.set_device(local_rank) +deepspeed.init_distributed() + +model_name = "bigscience/T0_3B" + +config = AutoConfig.from_pretrained(model_name) +model_hidden_size = config.d_model + +# batch size has to be divisible by world_size, but can be bigger than world_size +train_batch_size = 1 * world_size + +# ds_config notes +# +# - enable bf16 if you use Ampere or higher GPU - this will run in mixed precision and will be +# faster. +# +# - for older GPUs you can enable fp16, but it'll only work for non-bf16 pretrained models - e.g. +# all official t5 models are bf16-pretrained +# +# - set offload_param.device to "none" or completely remove the `offload_param` section if you don't +# - want CPU offload +# +# - if using `offload_param` you can manually finetune stage3_param_persistence_threshold to control +# - which params should remain on gpus - the larger the value the smaller the offload size +# +# For in-depth info on Deepspeed config see +# https://huggingface.co/docs/transformers/main/main_classes/deepspeed + +# keeping the same format as json for consistency, except it uses lower case for true/false +# fmt: off +ds_config = { + "fp16": { + "enabled": False + }, + "bf16": { + "enabled": False + }, + "zero_optimization": { + "stage": 3, + "offload_param": { + "device": "cpu", + "pin_memory": True + }, + "overlap_comm": True, + "contiguous_gradients": True, + "reduce_bucket_size": model_hidden_size * model_hidden_size, + "stage3_prefetch_bucket_size": 0.9 * model_hidden_size * model_hidden_size, + "stage3_param_persistence_threshold": 10 * model_hidden_size + }, + "steps_per_print": 2000, + "train_batch_size": train_batch_size, + "train_micro_batch_size_per_gpu": 1, + "wall_clock_breakdown": False +} +# fmt: on + +# next line instructs transformers to partition the model directly over multiple gpus using +# deepspeed.zero.Init when model's `from_pretrained` method is called. +# +# **it has to be run before loading the model AutoModelForSeq2SeqLM.from_pretrained(model_name)** +# +# otherwise the model will first be loaded normally and only partitioned at forward time which is +# less efficient and when there is little CPU RAM may fail +dschf = HfDeepSpeedConfig(ds_config) # keep this object alive + +# now a model can be loaded. +model = AutoModelForSeq2SeqLM.from_pretrained(model_name) + +# initialise Deepspeed ZeRO and store only the engine object +ds_engine = deepspeed.initialize(model=model, config_params=ds_config)[0] +ds_engine.module.eval() # inference + +# Deepspeed ZeRO can process unrelated inputs on each GPU. So for 2 gpus you process 2 inputs at once. +# If you use more GPUs adjust for more. +# And of course if you have just one input to process you then need to pass the same string to both gpus +# If you use only one GPU, then you will have only rank 0. +rank = torch.distributed.get_rank() +if rank == 0: + text_in = "Is this review positive or negative? Review: this is the best cast iron skillet you will ever buy" +elif rank == 1: + text_in = "Is this review positive or negative? Review: this is the worst restaurant ever" + +tokenizer = AutoTokenizer.from_pretrained(model_name) +inputs = tokenizer.encode(text_in, return_tensors="pt").to(device=local_rank) +with torch.no_grad(): + outputs = ds_engine.module.generate(inputs, synced_gpus=True) +text_out = tokenizer.decode(outputs[0], skip_special_tokens=True) +print(f"rank{rank}:\n in={text_in}\n out={text_out}") +``` +احفظ البرنامج النصي باسم t0.py وابدأ تشغيله: + +```bash +$ deepspeed --num_gpus 2 t0.py +rank0: + in=Is this review positive or negative? Review: this is the best cast iron skillet you will ever buy + out=Positive +rank1: + in=Is this review positive or negative? Review: this is the worst restaurant ever + out=negative +``` + +هذا مثال بسيط جدًا، وستحتاج إلى تكييفه مع حالتك الاستخدام. + +### توليد + +يتطلب استخدام وحدات معالجة الرسومات متعددة باستخدام ZeRO-3 للمولد مزامنة وحدات معالجة الرسومات عن طريق تعيين `synced_gpus=True` في طريقة [`~GenerationMixin.generate`]. وإلا، إذا انتهت إحدى وحدات معالجة الرسومات من التوليد قبل الأخرى، فسيعلق النظام بأكمله لأن وحدات معالجة الرسومات المتبقية لم تتلق شظية الوزن من وحدة معالجة الرسومات التي انتهت أولاً. + +بالنسبة لـ Transformers>=4.28، إذا تم تعيين `synced_gpus` تلقائيًا على `True` إذا تم اكتشاف وحدات معالجة الرسومات المتعددة أثناء التوليد. + +## استكشاف الأخطاء وإصلاحها + +عندما تواجه مشكلة، يجب أن تفكر فيما إذا كان DeepSpeed هو سبب المشكلة لأنه غالبًا ما لا يكون كذلك (ما لم يكن من الواضح جدًا ويمكنك رؤية وحدات DeepSpeed في الاستثناء)! يجب أن تكون الخطوة الأولى هي إعادة المحاولة دون DeepSpeed، وإذا استمرت المشكلة، فيمكنك الإبلاغ عن المشكلة. إذا كانت المشكلة متعلقة بمشكلة أساسية في DeepSpeed وغير مرتبطة بتكامل Transformers، فقم بفتح مشكلة في [مستودع DeepSpeed](https://github.com/microsoft/DeepSpeed). + +بالنسبة للمشكلات المتعلقة بتكامل Transformers، يرجى تقديم المعلومات التالية: + +* ملف تكوين DeepSpeed الكامل + +* وسائط سطر الأوامر لـ [`Trainer`]]، أو وسائط [`TrainingArguments`] إذا كنت تقوم بكتابة برنامج نصي لإعداد [`Trainer`] بنفسك (لا تقم بإلقاء [`TrainingArguments`] الذي يحتوي على عشرات الإدخالات غير ذات الصلة) + +* الإخراج من: + +```bash +python -c 'import torch؛ print(f"torch: {torch.__version__}")' +python -c 'import transformers؛ print(f"transformers: {transformers.__version__}")' +python -c 'import deepspeed؛ print(f"deepspeed: {deepspeed.__version__}")' +``` + +* رابط إلى Google Colab دفتر ملاحظات لإعادة إنتاج المشكلة + +* إذا كان من المستحيل، مجموعة بيانات قياسية وغير مخصصة يمكننا استخدامها أيضًا لمحاولة استخدام مثال موجود لإعادة إنتاج المشكلة معه + +توفر الأقسام التالية دليلًا لحل اثنتين من أكثر المشكلات شيوعًا. + +### عملية DeepSpeed قتلت عند بدء التشغيل + +عندما يتم إنهاء عملية DeepSpeed أثناء الإطلاق دون تتبع المكدس، فهذا يعني عادةً أن البرنامج حاول تخصيص المزيد من ذاكرة وحدة المعالجة المركزية (CPU) أكثر مما لدى نظامك أو حاولت العملية تخصيص المزيد من ذاكرة وحدة المعالجة المركزية (CPU) مما يؤدي إلى قيام نظام التشغيل بإنهاء العملية. في هذه الحالة، تحقق مما إذا كان ملف التكوين الخاص بك يحتوي على `offload_optimizer` أو `offload_param` أو كلاهما تم تكوينه لإلغاء التحميل إلى وحدة المعالجة المركزية (CPU). + +إذا كان لديك NVMe وZeRO-3، فقم بتجربة الإلغاء إلى NVMe ([تقدير](https://deepspeed.readthedocs.io/en/latest/memory.html) متطلبات الذاكرة لنموذجك). + +### فقدان NaN + +غالبًا ما يحدث فقدان NaN عندما يتم تدريب نموذج مسبقًا في bf16 ثم تحاول استخدامه مع fp16 (وهو أمر مهم بشكل خاص للنماذج المدربة على TPU). لحل هذا، استخدم fp32 أو bf16 إذا كان الأجهزة الخاصة بك تدعمها (TPU، Ampere GPUs أو أحدث). + +قد تكون المشكلة الأخرى متعلقة باستخدام fp16. على سبيل المثال، إذا كان هذا هو تكوين fp16 الخاص بك: + +```yaml +{ + "fp16": { + "enabled": "auto"، + "loss_scale": 0، + "loss_scale_window": 1000، + "initial_scale_power": 16، + "hysteresis": 2، + "min_loss_scale": 1 + } +} +``` + +قد تشاهد رسائل `OVERFLOW!` التالية في السجلات: + +```bash +0%| | 0/189 [00:00 Date: Wed, 7 Aug 2024 21:42:16 +0300 Subject: [PATCH 047/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/llm=5Ftutorial=5Foptimization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/llm_tutorial_optimization.md | 634 ++++++++++++++++++++ 1 file changed, 634 insertions(+) create mode 100644 docs/source/ar/llm_tutorial_optimization.md diff --git a/docs/source/ar/llm_tutorial_optimization.md b/docs/source/ar/llm_tutorial_optimization.md new file mode 100644 index 00000000000000..dd1779fac23c8f --- /dev/null +++ b/docs/source/ar/llm_tutorial_optimization.md @@ -0,0 +1,634 @@ +# تحسين نماذج اللغة الكبيرة من أجل السرعة والذاكرة + +[[open-in-colab]] + +تحقق نماذج اللغة الكبيرة (LLMs) مثل GPT3/4، [Falcon](https://huggingface.co/tiiuae/falcon-40b)، و [Llama](https://huggingface.co/meta-llama/Llama-2-70b-hf) تقدمًا سريعًا في قدرتها على أداء المهام التي تركز على الإنسان، مما يجعلها أدوات أساسية في الصناعات القائمة على المعرفة الحديثة. +لا يزال نشر هذه النماذج في المهام الواقعية يمثل تحديًا، ومع ذلك: + +- لكي تظهر نماذج اللغة الكبيرة قدرات فهم وتوليد النصوص القريبة من قدرات الإنسان، فإنها تتطلب حاليًا أن تتكون من مليارات المعلمات (انظر [كابلان وآخرون](https://arxiv.org/abs/2001.08361)، [وي وآخرون](https://arxiv.org/abs/2206.07682)). وهذا بدوره يزيد من متطلبات الذاكرة للاستنتاج. +- في العديد من المهام الواقعية، تحتاج نماذج اللغة الكبيرة إلى معلومات سياقية موسعة. يتطلب ذلك قدرة النموذج على إدارة تسلسلات الإدخال الطويلة جدًا أثناء الاستدلال. + +تكمن صعوبة هذه التحديات في تعزيز القدرات الحسابية والذاكرة لنماذج اللغة الكبيرة، خاصة عند التعامل مع تسلسلات الإدخال الموسعة. + +في هذا الدليل، سنستعرض التقنيات الفعالة لنشر نماذج اللغة الكبيرة بكفاءة: + +1. **دقة أقل:** أظهرت الأبحاث أن العمل بدقة رقمية مخفضة، وهي [8 بت و4 بت](./main_classes/quantization.md) يمكن أن يحقق مزايا حسابية دون انخفاض كبير في أداء النموذج. + +2. **الاهتمام الفلاش:** إن Flash Attention هو تباين لخوارزمية الاهتمام التي لا توفر فقط نهجًا أكثر كفاءة في استخدام الذاكرة، ولكنها تحقق أيضًا كفاءة متزايدة بسبب الاستخدام الأمثل لذاكرة GPU. + +3. **الابتكارات المعمارية:** بالنظر إلى أن نماذج اللغة الكبيرة يتم نشرها دائمًا بنفس الطريقة أثناء الاستدلال، أي توليد النص التنبؤي مع سياق الإدخال الطويل، فقد تم اقتراح بنيات نموذج متخصصة تسمح بالاستدلال الأكثر كفاءة. أهم تقدم في بنيات النماذج هنا هو [عذر](https://arxiv.org/abs/2108.12409)، [الترميز الدوار](https://arxiv.org/abs/2104.09864)، [الاهتمام متعدد الاستعلامات (MQA)](https://arxiv.org/abs/1911.02150) و [مجموعة الاهتمام بالاستعلام (GQA)]((https://arxiv.org/abs/2305.13245)). + +على مدار هذا الدليل، سنقدم تحليلًا للتوليد التنبئي من منظور المنسوج. نتعمق في مزايا وعيوب تبني دقة أقل، ونقدم استكشافًا شاملاً لخوارزميات الاهتمام الأحدث، ونناقش بنيات نماذج نماذج اللغة الكبيرة المحسنة. أثناء القيام بذلك، نقوم بتشغيل أمثلة عملية توضح كل تحسينات الميزات. + +## 1. دقة أقل + +يمكن فهم متطلبات ذاكرة نماذج اللغة الكبيرة بشكل أفضل من خلال النظر إلى نموذج اللغة الكبيرة على أنها مجموعة من المصفوفات والمتجهات الوزنية، وإدخالات النص على أنها تسلسل من المتجهات. فيما يلي، سيتم استخدام تعريف "الأوزان" للإشارة إلى جميع مصفوفات الأوزان والمتجهات في النموذج. +في وقت كتابة هذا الدليل، تتكون نماذج اللغة الكبيرة من مليارات المعلمات على الأقل. يتم تشكيل كل معلمة من رقم عشري، على سبيل المثال `4.5689` والذي يتم تخزينه عادةً بتنسيق [float32](https://en.wikipedia.org/wiki/Single-precision_floating-point_format)، [bfloat16](https://en.wikipedia.org/wiki/Bfloat16_floating-point_format)، أو [float16](https://en.wikipedia.org/wiki/Half-precision_floating-point_format) . يسمح لنا هذا بحساب متطلبات الذاكرة لتحميل نموذج اللغة الكبيرة في الذاكرة بسهولة: + +> *يتطلب تحميل أوزان نموذج به X مليار معلمة حوالي 4 * X جيجابايت من ذاكرة الفيديو العشوائية (VRAM) بدقة float32* + +ومع ذلك، نادرًا ما يتم تدريب النماذج في الوقت الحالي بدقة float32 الكاملة، ولكن عادةً ما تكون بدقة bfloat16 أو بشكل أقل في تنسيق float16. لذلك، تصبح القاعدة الإرشادية كما يلي: + +> *يتطلب تحميل أوزان نموذج به X مليار معلمة حوالي 2 * X جيجابايت من ذاكرة الفيديو العشوائية (VRAM) بدقة bfloat16/float16* + +بالنسبة لإدخالات النص الأقصر (أقل من 1024 رمزًا)، فإن متطلبات الذاكرة للاستدلال تهيمن عليها إلى حد كبير متطلبات الذاكرة لتحميل الأوزان. لذلك، دعنا نفترض، في الوقت الحالي، أن متطلبات الذاكرة للاستدلال تساوي متطلبات الذاكرة لتحميل النموذج في ذاكرة GPU VRAM. + +ولإعطاء بعض الأمثلة على مقدار ذاكرة الفيديو العشوائية (VRAM) التي يتطلبها تحميل نموذج بتنسيق bfloat16 تقريبًا: + +- **GPT3** يتطلب 2 \* 175 جيجا بايت = **350 جيجا بايت** VRAM +- [**بلوم**](https://huggingface.co/bigscience/bloom) يتطلب 2 \* 176 جيجا بايت = **352 جيجا بايت** VRAM +- [**Llama-2-70b**](https://huggingface.co/meta-llama/Llama-2-70b-hf) يتطلب 2 \* 70 جيجا بايت = **140 جيجا بايت** VRAM +- [**Falcon-40b**](https://huggingface.co/tiiuae/falcon-40b) يتطلب 2 \* 40 جيجا بايت = **80 جيجا بايت** VRAM +- [**MPT-30b**](https://huggingface.co/mosaicml/mpt-30b) يتطلب 2 \* 30 جيجا بايت = **60 جيجا بايت** VRAM +- [**bigcode/starcoder**](https://huggingface.co/bigcode/starcoder) يتطلب 2 \* 15.5 = **31 جيجا بايت** VRAM + +اعتبارًا من كتابة هذه الوثيقة، تعد شريحة GPU الأكبر في السوق هي A100 & H100 التي توفر 80 جيجابايت من ذاكرة الفيديو العشوائية (VRAM). تتطلب معظم النماذج المدرجة أعلاه أكثر من 80 جيجابايت فقط لتحميلها، وبالتالي فهي تتطلب بالضرورة [موازاة التنسور](https://huggingface.co/docs/transformers/perf_train_gpu_many#tensor-parallelism) و/أو [موازاة الأنابيب](https://huggingface.co/docs/transformers/perf_train_gpu_many#naive-model-parallelism-vertical-and-pipeline-parallelism). + +🤗 لا يدعم Transformers موازاة التنسور خارج الصندوق لأنه يتطلب كتابة بنية النموذج بطريقة محددة. إذا كنت مهتمًا بكتابة نماذج بطريقة صديقة لموازاة التنسور، فلا تتردد في إلقاء نظرة على [مكتبة الاستدلال بتوليد النص](https://github.com/huggingface/text-generation-inference/tree/main/server/text_generation_server/models/custom_modeling). + +تدعم موازاة الأنابيب البسيطة خارج الصندوق. للقيام بذلك، قم بتحميل النموذج باستخدام `device="auto"` والذي سيقوم تلقائيًا بوضع الطبقات المختلفة على وحدات معالجة الرسومات (GPU) المتاحة كما هو موضح [هنا](https://huggingface.co/docs/accelerate/v0.22.0/en/concept_guides/big_model_inference). +لاحظ، مع ذلك، أنه في حين أن موازاة الأنابيب البسيطة فعالة للغاية، إلا أنها لا تعالج مشكلات عدم نشاط وحدة معالجة الرسومات (GPU). لهذا، تكون موازاة الأنابيب المتقدمة مطلوبة كما هو موضح [هنا](https://huggingface.co/docs/transformers/en/perf_train_gpu_many#naive-model-parallelism-vertical-and-pipeline-parallelism). + +إذا كان لديك حق الوصول إلى عقدة 8 x 80 جيجابايت A100، فيمكنك تحميل BLOOM كما يلي + +```bash +!pip install transformers accelerate bitsandbytes optimum +``` +```python +from transformers import AutoModelForCausalLM + +model = AutoModelForCausalLM.from_pretrained("bigscience/bloom", device_map="auto", pad_token_id=0) +``` + +من خلال استخدام `device_map="auto"` سيتم توزيع طبقات الاهتمام بالتساوي عبر جميع وحدات معالجة الرسومات (GPU) المتاحة. +من خلال استخدام `device_map="auto"` سيتم توزيع طبقات الاهتمام بالتساوي عبر جميع وحدات معالجة الرسومات (GPU) المتاحة. + +في هذا الدليل، سنستخدم [bigcode/octocoder](https://huggingface.co/bigcode/octocoder) لأنه يمكن تشغيله على شريحة جهاز GPU A100 ذات 40 جيجا بايت. لاحظ أن جميع تحسينات الذاكرة والسرعة التي سنطبقها من الآن فصاعدًا تنطبق بالتساوي على النماذج التي تتطلب موازاة النماذج أو التنسور. + +نظرًا لأن النموذج محمل بتنسيق bfloat16، فباستخدام قاعدتنا الإرشادية أعلاه، نتوقع أن تكون متطلبات الذاكرة لتشغيل الاستدلال باستخدام `bigcode/octocoder` حوالي 31 جيجا بايت من ذاكرة الفيديو العشوائية (VRAM). دعنا نجرب. + +نقوم أولاً بتحميل النموذج والمحلل اللغوي ثم نقوم بتمرير كلاهما إلى كائن [pipeline](https://huggingface.co/docs/transformers/main_classes/pipelines) في Transformers. + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline +import torch + +model = AutoModelForCausalLM.from_pretrained("bigcode/octocoder", torch_dtype=torch.bfloat16, device_map="auto", pad_token_id=0) +tokenizer = AutoTokenizer.from_pretrained("bigcode/octocoder") + +pipe = pipeline("text-generation", model=model, tokenizer=tokenizer) +``` + +```python +prompt = "Question: Please write a function in Python that transforms bytes to Giga bytes.\n\nAnswer:" + +result = pipe(prompt, max_new_tokens=60)[0]["generated_text"][len(prompt):] +result +``` + +**الإخراج**: +``` +Here is a Python function that transforms bytes to Giga bytes:\n\n```python\ndef bytes_to_giga_bytes(bytes):\n return bytes / 1024 / 1024 / 1024\n```\n\nThis function takes a single +``` + +رائع، يمكننا الآن استخدام النتيجة مباشرة لتحويل البايت إلى جيجا بايت. + +```python +def bytes_to_giga_bytes(bytes): + return bytes / 1024 / 1024 / 1024 +``` + +دعونا نستدعي [`torch.cuda.max_memory_allocated`](https://pytorch.org/docs/stable/generated/torch.cuda.max_memory_allocated.html) لقياس ذروة تخصيص ذاكرة وحدة معالجة الرسومات (GPU). + +```python +bytes_to_giga_bytes(torch.cuda.max_memory_allocated()) +``` + +**الإخراج**: +```bash +29.0260648727417 +``` + +قريب بما يكفي من حسابنا التقريبي! يمكننا أن نرى أن الرقم غير صحيح تمامًا لأن الانتقال من البايت إلى الكيلوبايت يتطلب الضرب في 1024 بدلاً من 1000. لذلك يمكن أيضًا فهم صيغة التقريب على أنها حساب "بحد أقصى X جيجا بايت". +لاحظ أنه إذا حاولنا تشغيل النموذج بدقة float32 الكاملة، فستكون هناك حاجة إلى 64 جيجا بايت من ذاكرة الفيديو العشوائية (VRAM). + +> يتم تدريب جميع النماذج تقريبًا بتنسيق bfloat16 في الوقت الحالي، ولا يوجد سبب لتشغيل النموذج بدقة float32 الكاملة إذا [كانت وحدة معالجة الرسومات (GPU) الخاصة بك تدعم bfloat16](https://discuss.pytorch.org/t/bfloat16-native-support/117155/5). لن توفر دقة float32 نتائج استدلال أفضل من الدقة التي تم استخدامها لتدريب النموذج. + +إذا لم تكن متأكدًا من تنسيق تخزين أوزان النموذج على Hub، فيمكنك دائمًا الاطلاع على تكوين نقطة التفتيش في `"torch_dtype"`، على سبيل المثال [هنا](https://huggingface.co/meta-llama/Llama-2-7b-hf/blob/6fdf2e60f86ff2481f2241aaee459f85b5b0bbb9/config.json#L21). يوصى بتعيين النموذج إلى نفس نوع الدقة كما هو مكتوب في التكوين عند التحميل باستخدام `from_pretrained(..., torch_dtype=...)` إلا إذا كان النوع الأصلي هو float32، وفي هذه الحالة يمكن استخدام `float16` أو `bfloat16` للاستدلال. + + +دعونا نحدد وظيفة `flush(...)` لتحرير جميع الذاكرة المخصصة بحيث يمكننا قياس ذروة ذاكرة وحدة معالجة الرسومات (GPU) المخصصة بدقة. + +```python +del pipe +del model + +import gc +import torch + +def flush(): + gc.collect() + torch.cuda.empty_cache() + torch.cuda.reset_peak_memory_stats() +``` + +دعونا نستدعيه الآن للتجربة التالية. + +```python +flush() +``` +في الإصدار الأخير من مكتبة Accelerate، يمكنك أيضًا استخدام طريقة مساعدة تسمى `release_memory()` + +```python +from accelerate.utils import release_memory +# ... + +release_memory(model) +``` +```python +from accelerate.utils import release_memory +# ... + +release_memory(model) +``` + +والآن ماذا لو لم يكن لدى وحدة معالجة الرسومات (GPU) لديك 32 جيجا بايت من ذاكرة الفيديو العشوائية (VRAM)؟ لقد وجد أن أوزان النماذج يمكن تحويلها إلى 8 بتات أو 4 بتات دون خسارة كبيرة في الأداء (انظر [Dettmers et al.](https://arxiv.org/abs/2208.07339)). +يمكن تحويل النموذج إلى 3 بتات أو 2 بتات مع فقدان مقبول في الأداء كما هو موضح في ورقة [GPTQ](https://arxiv.org/abs/2210.17323) 🤯. + +دون الدخول في الكثير من التفاصيل، تهدف مخططات التحويل إلى تقليل دقة الأوزان مع محاولة الحفاظ على دقة نتائج النموذج كما هي (*أي* أقرب ما يمكن إلى bfloat16). +لاحظ أن التحويل يعمل بشكل خاص جيدًا لتوليد النص حيث كل ما نهتم به هو اختيار *مجموعة الرموز الأكثر احتمالًا التالية* ولا نهتم حقًا بالقيم الدقيقة لتوزيع الرمز التالي *logit*. +كل ما يهم هو أن توزيع الرمز التالي *logit* يظل كما هو تقريبًا بحيث تعطي عملية `argmax` أو `topk` نفس النتائج. + +هناك تقنيات تحويل مختلفة، والتي لن نناقشها بالتفصيل هنا، ولكن بشكل عام، تعمل جميع تقنيات التحويل كما يلي: + +- 1. قم بتحويل جميع الأوزان إلى الدقة المستهدفة +- 2. قم بتحميل الأوزان المحولة، ومرر تسلسل الإدخال من المتجهات بتنسيق bfloat16 +- 3. قم بتحويل الأوزان ديناميكيًا إلى bfloat1 +لم أترجم النصوص الخاصة ولا الأكواد البرمجية ولا الروابط ولا رموز HTML و CSS، كما طلبت. + +--- + +يعد \\( \mathbf{X} = (\mathbf{x}_1, ... \mathbf{x}_{N}) \\) بالتالي تسلسل الإدخال إلى طبقة الاهتمام. وستتكون كل من الإسقاطات \\( \mathbf{Q} \\) و \\( \mathbf{K} \\) من \\( N \\) من المتجهات مما يؤدي إلى أن يكون حجم \\( \mathbf{QK}^T \\) هو \\( N^2 \\). + +عادة ما يكون لدى LLMs العديد من رؤوس الاهتمام، وبالتالي يتم إجراء العديد من حسابات الاهتمام الذاتي بالتوازي. +وبافتراض أن LLM لديها 40 رأس اهتمام وتعمل بدقة bfloat16، يمكننا حساب متطلبات الذاكرة لتخزين مصفوفات \\( \mathbf{QK^T} \\) لتكون \\( 40 * 2 * N^2 \\) بايت. بالنسبة لـ \\( N=1000 \\)، لا يلزم سوى حوالي 50 ميجابايت من VRAM، ولكن بالنسبة لـ \\( N=16000 \\) سنحتاج إلى 19 جيجابايت من VRAM، وبالنسبة لـ \\( N=100,000 \\) سنحتاج إلى ما يقرب من 1 تيرابايت فقط لتخزين مصفوفات \\( \mathbf{QK}^T \\). + +باختصار، سرعان ما يصبح خوارزمية الاهتمام الذاتي الافتراضية مكلفة للغاية من حيث الذاكرة بالنسبة لسياقات الإدخال الكبيرة. + +مع تحسن LLMs في فهم النص وتوليد النص، يتم تطبيقها على مهام متزايدة التعقيد. في حين أن النماذج كانت تتعامل سابقًا مع ترجمة أو تلخيص بضع جمل، فإنها الآن تدير صفحات كاملة، مما يتطلب القدرة على معالجة أطوال إدخال واسعة. + +كيف يمكننا التخلص من متطلبات الذاكرة الباهظة للتطويلات المدخلة الكبيرة؟ نحن بحاجة إلى طريقة جديدة لحساب آلية الاهتمام الذاتي التي تتخلص من مصفوفة \\( QK^T \\). [طريقه داو وآخرون.](Https://arxiv.org/abs/2205.14135) طوروا بالضبط مثل هذا الخوارزمية الجديدة وأطلقوا عليها اسم **Flash Attention**. + +باختصار، يكسر الاهتمام الفلاشي حساب \\( \mathbf{V} \times \operatorname{Softmax}(\mathbf{QK}^T\\)) ويحسب بدلاً من ذلك قطعًا أصغر من الإخراج عن طريق التكرار عبر العديد من خطوات حساب Softmax: + +$$ \textbf{O}_i \leftarrow s^a_{ij} * \textbf{O}_i + s^b_{ij} * \mathbf{V}_{j} \times \operatorname{Softmax}(\mathbf{QK}^T_{i,j}) \text{ for multiple } i, j \text{ iterations} $$ + +مع \\( s^a_{ij} \\) و \\( s^b_{ij} \\) كونها بعض إحصائيات التطبيع softmax التي يجب إعادة حسابها لكل \\( i \\) و \\( j \\). + +يرجى ملاحظة أن Flash Attention بالكامل أكثر تعقيدًا إلى حد ما ويتم تبسيطه بشكل كبير هنا حيث أن التعمق كثيرًا يخرج عن نطاق هذا الدليل. القارئ مدعو لإلقاء نظرة على ورقة Flash Attention المكتوبة جيدًا [1] لمزيد من التفاصيل. + +الفكرة الرئيسية هنا هي: + +> من خلال تتبع إحصائيات التطبيع softmax واستخدام بعض الرياضيات الذكية، يعطي Flash Attention **مخرجات متطابقة رقميًا** مقارنة بطبقة الاهتمام الذاتي الافتراضية بتكلفة ذاكرة لا تزيد خطيًا مع \\( N \\). + +عند النظر إلى الصيغة، قد يقول المرء بديهيًا أن الاهتمام الفلاشي يجب أن يكون أبطأ بكثير مقارنة بصيغة الاهتمام الافتراضية حيث يلزم إجراء المزيد من الحسابات. في الواقع، يتطلب Flash Attention المزيد من عمليات الفاصلة العائمة مقارنة بالاهتمام العادي حيث يجب إعادة حساب إحصائيات التطبيع softmax باستمرار (راجع [الورقة](https://arxiv.org/abs/2205.14135) لمزيد من التفاصيل إذا كنت مهتمًا) + +> ومع ذلك، فإن الاهتمام الفلاشي أسرع بكثير في الاستدلال مقارنة بالاهتمام الافتراضي الذي يأتي من قدرته على تقليل الطلبات على ذاكرة GPU الأبطأ ذات النطاق الترددي العالي (VRAM)، والتركيز بدلاً من ذلك على ذاكرة SRAM الأسرع الموجودة على الشريحة. + +من الناحية الأساسية، يتأكد Flash Attention من إمكانية إجراء جميع عمليات الكتابة والقراءة الوسيطة باستخدام ذاكرة SRAM السريعة الموجودة على الشريحة بدلاً من الاضطرار إلى الوصول إلى ذاكرة VRAM الأبطأ لحساب متجه الإخراج \\( \mathbf{O} \\). + +من الناحية العملية، لا يوجد حاليًا أي سبب **عدم** استخدام الاهتمام الفلاشي إذا كان متاحًا. الخوارزمية تعطي نفس المخرجات رياضيا، وأسرع وأكثر كفاءة في استخدام الذاكرة. + +لنلقِ نظرة على مثال عملي. + +لنلقِ نظرة على مثال عملي. + +يحصل نموذج OctoCoder الخاص بنا الآن على موجه إدخال أطول بشكل كبير يتضمن ما يسمى *موجه النظام*. تُستخدم موجهات النظام لتوجيه LLM إلى مساعد أفضل مصمم لمهام المستخدمين. +فيما يلي، نستخدم موجه النظام الذي سيجعل OctoCoder مساعد ترميز أفضل. + +```python +system_prompt = """Below are a series of dialogues between various people and an AI technical assistant. +The assistant tries to be helpful, polite, honest, sophisticated, emotionally aware, and humble but knowledgeable. +The assistant is happy to help with code questions and will do their best to understand exactly what is needed. +It also tries to avoid giving false or misleading information, and it caveats when it isn't entirely sure about the right answer. +That said, the assistant is practical really does its best, and doesn't let caution get too much in the way of being useful. + +The Starcoder models are a series of 15.5B parameter models trained on 80+ programming languages from The Stack (v1.2) (excluding opt-out requests). +The model uses Multi Query Attention, was trained using the Fill-in-the-Middle objective, and with 8,192 tokens context window for a trillion tokens of heavily deduplicated data. +----- + +Question: Write a function that takes two lists and returns a list that has alternating elements from each input list. + +Answer: Sure. Here is a function that does that. + +def alternating(list1, list2): + results = [] + for i in range(len(list1)): + results.append(list1[i]) + results.append(list2[i]) + return results + +Question: Can you write some test cases for this function? + +Answer: Sure, here are some tests. + +assert alternating([10, 20, 30], [1, 2, 3]) == [10, 1, 20, 2, 30, 3] +assert alternating([True, False], [4, 5]) == [True, 4, False, 5] +assert alternating([], []) == [] + +Question: Modify the function so that it returns all input elements when the lists have uneven length. The elements from the longer list should be at the end. + +Answer: Here is the modified function. + +def alternating(list1, list2): + results = [] + for i in range(min(len(list1), len(list2))): + results.append(list1[i]) + results.append(list2[i]) + if len(list1) > len(list2): + results.extend(list1[i+1:]) + else: + results.extend(list2[i+1:]) + return results +----- +""" +``` +لأغراض التوضيح، سنكرر موجه النظام عشر مرات بحيث يكون طول الإدخال طويلاً بما يكفي لملاحظة وفورات ذاكرة Flash Attention. +نضيف موجه النص الأصلي "سؤال: يرجى كتابة وظيفة في Python تقوم بتحويل البايتات إلى جيجا بايت. + +```python +long_prompt = 10 * system_prompt + prompt +``` + +نقوم بتنفيذ نموذجنا مرة أخرى بدقة bfloat16. + +```python +model = AutoModelForCausalLM.from_pretrained("bigcode/octocoder", torch_dtype=torch.bfloat16, device_map="auto") +tokenizer = AutoTokenizer.from_pretrained("bigcode/octocoder") + +pipe = pipeline("text-generation", model=model, tokenizer=tokenizer) +``` + +دعنا الآن نقوم بتشغيل النموذج تمامًا مثلما كان من قبل *بدون اهتمام فلاشي* وقياس متطلبات ذاكرة GPU وقت الذروة ووقت الاستدلال. + +```python +import time + +start_time = time.time() +result = pipe(long_prompt, max_new_tokens=60)[0]["generated_text"][len(long_prompt):] + +print(f"Generated in {time.time() - start_time} seconds.") +result +``` + +**الإخراج**: +``` +تم التوليد في 10.96854019165039 ثانية. +بالتأكيد. إليك وظيفة للقيام بذلك. + +def bytes_to_giga(bytes): +return bytes / 1024 / 1024 / 1024 + +الإجابة: بالتأكيد. إليك وظيفة للقيام بذلك. + +ديف +``` + +نحصل على نفس الإخراج كما كان من قبل، ولكن هذه المرة، يقوم النموذج بتكرار الإجابة عدة مرات حتى يتم قطعها عند 60 رمزًا. ليس من المستغرب أننا كررنا موجه النظام عشر مرات لأغراض التوضيح وبالتالي قمنا بتشغيل النموذج لتكرار نفسه. + +**ملاحظة** لا ينبغي تكرار موجه النظام عشر مرات في التطبيقات الواقعية - مرة واحدة كافية! + +دعنا نقيس متطلبات ذاكرة GPU وقت الذروة. + +```python +bytes_to_giga_bytes(torch.cuda.max_memory_allocated()) +``` + +**الإخراج**: +``` +37.668193340301514 +``` + +كما نرى، فإن متطلبات ذاكرة GPU وقت الذروة أعلى بكثير مما كانت عليه في البداية، وهو ما يرجع إلى حد كبير إلى تسلسل الإدخال الأطول. أيضًا، يستغرق التوليد أكثر من دقيقة بقليل الآن. + +نستدعي `flush()` لتحرير ذاكرة GPU لتجربتنا التالية. + +```python +flush() +``` + +لمقارنة، دعونا نقوم بتشغيل نفس الدالة، ولكن تمكين الاهتمام فلاش بدلا من ذلك. +للقيام بذلك، نقوم بتحويل النموذج إلى [BetterTransformer](Https://huggingface.co/docs/optimum/bettertransformer/overview) ومن خلال القيام بذلك تمكين PyTorch's [SDPA self-attention](Https://pytorch.org/docs/master/generated/torch.nn.functional.scaled_dot_product_attention) والتي بدورها قادرة على استخدام الاهتمام فلاش. + +```python +model.to_bettertransformer() +``` + +الآن نقوم بتشغيل نفس مقتطف التعليمات البرمجية بالضبط كما كان من قبل وتحت الغطاء سوف تستخدم المحولات الاهتمام فلاش. + +```py +start_time = time.time() +with torch.backends.cuda.sdp_kernel(enable_flash=True, enable_math=False, enable_mem_efficient=False): + result = pipe(long_prompt, max_new_tokens=60)[0]["generated_text"][len(long_prompt):] + +print(f"Generated in {time.time() - start_time} seconds.") +result +``` + +**الإخراج**: +``` +تم التوليد في 3.0211617946624756 ثانية. +بالتأكيد. إليك وظيفة للقيام بذلك. + +def bytes_to_giga(bytes): +return bytes / 1024 / 1024 / 1024 + +الإجابة: بالتأكيد. إليك وظيفة للقيام بذلك. + +ديف +``` + +نحصل على نفس النتيجة بالضبط كما كان من قبل، ولكن يمكننا ملاحظة تسريع كبير بفضل الاهتمام فلاش. + +دعنا نقيس استهلاك الذاكرة لآخر مرة. + +```python +bytes_to_giga_bytes(torch.cuda.max_memory_allocated()) +``` + +**الإخراج**: +``` +32.617331981658936 +``` + +ونحن تقريبا مرة أخرى إلى ذاكرة GPU الذروة الأصلية لدينا 29GB. + +يمكننا أن نلاحظ أننا نستخدم فقط حوالي 100 ميجابايت إضافية من ذاكرة GPU عند تمرير تسلسل إدخال طويل جدًا مع الاهتمام فلاش مقارنة بتمرير تسلسل إدخال قصير كما فعلنا في البداية. + +```py +flush() +``` + +لمزيد من المعلومات حول كيفية استخدام Flash Attention، يرجى الاطلاع على [صفحة doc هذه](Https://huggingface.co/docs/transformers/en/perf_infer_gpu_one#flashattention-2). + +## 3. الابتكارات المعمارية + +حتى الآن، نظرنا في تحسين الكفاءة الحسابية والذاكرة من خلال: + +- صب الأوزان في تنسيق دقة أقل +- استبدال خوارزمية الاهتمام الذاتي بإصدار أكثر كفاءة من حيث الذاكرة والحساب + +دعونا الآن نلقي نظرة على كيفية تغيير بنية LLM بحيث تكون أكثر فعالية وكفاءة للمهام التي تتطلب مدخلات نصية طويلة، على سبيل المثال: +- استرجاع الأسئلة المعززة، +- تلخيص، +- الدردشة + +لاحظ أن "الدردشة" لا تتطلب من LLM التعامل مع مدخلات نصية طويلة فحسب، بل تتطلب أيضًا أن يكون LLM قادرًا على التعامل بكفاءة مع الحوار ذهابًا وإيابًا بين المستخدم والمساعد (مثل ChatGPT). + +بمجرد تدريبها، يصبح من الصعب تغيير بنية LLM الأساسية، لذلك من المهم مراعاة مهام LLM مسبقًا وتحسين بنية النموذج وفقًا لذلك. +هناك مكونان مهمان لبنية النموذج يصبحان بسرعة عنق زجاجة للذاكرة و/أو الأداء لتسلسلات الإدخال الكبيرة. + +- الترميزات الموضعية +- ذاكرة التخزين المؤقت للقيمة الرئيسية + +دعنا نلقي نظرة على كل مكون بمزيد من التفاصيل + +### 3.1 تحسين الترميزات الموضعية لـ LLMs + +يضع الاهتمام الذاتي كل رمز في علاقة مع رموز أخرى. +كمثال، يمكن أن تبدو مصفوفة \\( \operatorname{Softmax}(\mathbf{QK}^T) \\) لتسلسل الإدخال النصي *"مرحبًا"، "أنا"، "أحب"، "أنت"* كما يلي: + +![](/blog/assets/163_optimize_llm/self_attn_tokens.png) + +يتم منح كل رمز كلمة كتلة احتمال يتم من خلالها الاهتمام بجميع رموز الكلمات الأخرى، وبالتالي يتم وضعها في علاقة مع جميع رموز الكلمات الأخرى. على سبيل المثال، تحضر كلمة *"الحب"* كلمة *"مرحبًا"* بنسبة 5%، و *"أنا"* بنسبة 30%، ونفسها بنسبة 65%. + +سيواجه LLM القائم على الاهتمام الذاتي، ولكن بدون الترميزات الموضعية، صعوبات كبيرة في فهم مواضع نصوص الإدخال بالنسبة لبعضها البعض. +ويرجع ذلك إلى أن درجة الاحتمال التي يحسبها \\( \mathbf{QK}^T \\) تربط كل رمز كلمة بكل رمز كلمة أخرى في حسابات \\( O (1) \\) بغض النظر عن مسافة الموضع النسبي بينهما. +لذلك، بالنسبة إلى LLM بدون ترميزات موضعية، يبدو أن كل رمز له نفس المسافة إلى جميع الرموز الأخرى، على سبيل المثال، سيكون من الصعب التمييز بين *"مرحبًا أنا أحبك"* و *"أنت تحبني مرحبًا"*. + +لكي يفهم LLM ترتيب الجملة، يلزم وجود *إشارة* إضافية ويتم تطبيقها عادةً في شكل *الترميزات الموضعية* (أو ما يُطلق عليه أيضًا *الترميزات الموضعية*). +لم يتم ترجمة النص الخاص والروابط وأكواد HTML وCSS بناءً على طلبك. + +--- + +يُستخدم *ALiBi* في العديد من أهم نماذج اللغة الكبيرة المستخدمة اليوم، مثل: + +- [**MPT**](https://huggingface.co/mosaicml/mpt-30b) +- [**BLOOM**](https://huggingface.co/bigscience/bloom) + +يمكن لكل من ترميزات الموضع *RoPE* و *ALiBi* الاستقراء إلى أطوال إدخال لم يتم ملاحظتها أثناء التدريب، في حين ثبت أن الاستقراء يعمل بشكل أفضل بكثير خارج الصندوق لـ *ALiBi* مقارنة بـ *RoPE*. +بالنسبة لـ ALiBi، ما عليك سوى زيادة قيم مصفوفة الموضع المثلث السفلي لمطابقة طول تسلسل الإدخال. +بالنسبة لـ *RoPE*، يؤدي الحفاظ على نفس \\( \theta \\) الذي تم استخدامه أثناء التدريب إلى نتائج سيئة عند تمرير إدخالات نصية أطول بكثير من تلك التي شوهدت أثناء التدريب، راجع [Press et al.](https://arxiv.org/abs/2108.12409). ومع ذلك، وجد المجتمع بعض الحيل الفعالة التي تقوم بتعديل \\( \theta \\)، مما يسمح لترميزات الموضع *RoPE* بالعمل بشكل جيد لتسلسلات إدخال النص المستقرئة (راجع [هنا](https://github.com/huggingface/transformers/pull/24653)). + +> كل من RoPE و ALiBi عبارة عن ترميزات موضع نسبي *لا* يتم تعلمها أثناء التدريب، ولكن بدلاً من ذلك تستند إلى الحدس التالي: + - يجب إعطاء الإشارات الموضعية حول إدخالات النص مباشرة إلى مصفوفة \\( QK^T \\) لطبقة الاهتمام الذاتي + - يجب تحفيز LLM لتعلم ترميزات موضعية ثابتة *نسبية* المسافة لبعضها البعض + - كلما ابتعدت رموز إدخال النص عن بعضها البعض، انخفض احتمال الاستعلام والقيمة. كل من RoPE و ALiBi يقللان من احتمال الاستعلام والمفتاح للرموز البعيدة عن بعضها البعض. يقوم RoPE بذلك عن طريق تقليل منتج المتجه من خلال زيادة الزاوية بين متجهات الاستعلام والمفتاح. تضيف ALiBi أرقامًا كبيرة سالبة إلى المنتج الاتجاهي + +في الختام، من الأفضل تدريب نماذج اللغة الكبيرة المراد نشرها في مهام تتطلب التعامل مع إدخالات نصية كبيرة باستخدام ترميزات موضعية نسبية، مثل RoPE و ALiBi. لاحظ أيضًا أنه حتى إذا تم تدريب نموذج لغة كبيرة باستخدام RoPE و ALiBi على طول ثابت يبلغ، على سبيل المثال، \\( N_1 = 2048 \\)، فيمكن استخدامه عمليًا بإدخالات نصية أكبر بكثير من \\( N_1 \\)، مثل \\( N_2 = 8192> N_1 \\) عن طريق استقراء الترميزات الموضعية. + +### 3.2 ذاكرة التخزين المؤقت للمفتاح والقيمة + +تعمل عملية توليد النص ذاتي التراجع باستخدام نماذج اللغة الكبيرة عن طريق إدخال تسلسل إدخال بشكل تكراري، وأخذ عينات من الرمز التالي، وإلحاق الرمز التالي بتسلسل الإدخال، والاستمرار في ذلك حتى ينتج نموذج اللغة الكبيرة رمزًا يشير إلى انتهاء التوليد. + +يرجى الاطلاع على [دليل إنشاء النص الخاص بـ Transformer](https://huggingface.co/docs/transformers/llm_tutorial#generate-text) للحصول على شرح مرئي أفضل لكيفية عمل التوليد ذاتي التراجع. + +دعنا ننفذ مقتطفًا قصيرًا من التعليمات البرمجية لإظهار كيفية عمل التوليد ذاتي التراجع في الممارسة. ببساطة، سنأخذ الرمز الأكثر احتمالًا عبر `torch.argmax`. + +```python +input_ids = tokenizer(prompt, return_tensors="pt")["input_ids"].to("cuda") + +for _ in range(5): + next_logits = model(input_ids)["logits"][:, -1:] + next_token_id = torch.argmax(next_logits,dim=-1) + + input_ids = torch.cat([input_ids, next_token_id], dim=-1) + print("shape of input_ids", input_ids.shape) + +generated_text = tokenizer.batch_decode(input_ids[:, -5:]) +generated_text +``` + +**الإخراج**: +``` +shape of input_ids torch.Size([1, 21]) +shape of input_ids torch.Size([1, 22]) +shape of input_ids torch.Size([1, 23]) +shape of input_ids torch.Size([1, 24]) +shape of input_ids torch.Size([1, 25]) +[' Here is a Python function'] +``` + +كما نرى، في كل مرة نزيد من رموز إدخال النص بالرمز الذي تم أخذ عينات منه للتو. + +باستثناءات قليلة جدًا، يتم تدريب نماذج اللغة الكبيرة باستخدام [هدف نمذجة اللغة السببية](https://huggingface.co/docs/transformers/tasks/language_modeling#causal-language-modeling) وبالتالي يتم قناع المثلث العلوي لمصفوفة نتيجة الاهتمام - وهذا هو السبب في ترك نتائج الاهتمام فارغة (*أي لها احتمال 0*) في المخططين أعلاه. للحصول على ملخص سريع حول نمذجة اللغة السببية، يمكنك الرجوع إلى مدونة [*Illustrated Self Attention*](https://jalammar.github.io/illustrated-gpt2/#part-2-illustrated-self-attention). + +ونتيجة لذلك، *لا* تعتمد الرموز *أبدًا* على الرموز السابقة، وبشكل أكثر تحديدًا، لا يتم أبدًا وضع المتجه \\( \mathbf{q}_i \\) في علاقة مع أي متجهات المفاتيح والقيم \\( \mathbf{k}_j، \mathbf{v}_j \\) إذا \\( j> i \\). بدلاً من ذلك، يحضر \\( \mathbf{q}_i \\) فقط إلى متجهات المفاتيح والقيم السابقة \\( \mathbf{k}_{m < i}، \mathbf{v}_{m < i} \text{ , for } m \in \{0، \ ldots i - 1\} \\). لتقليل الحسابات غير الضرورية، يمكن تخزين ذاكرة التخزين المؤقت لكل طبقة للمفاتيح ومتجهات القيم لجميع الخطوات الزمنية السابقة. + +فيما يلي، سنطلب من نموذج اللغة الكبيرة استخدام ذاكرة التخزين المؤقت للمفاتيح والقيم عن طريق استردادها وإرسالها لكل عملية توجيه. +في Transformers، يمكننا استرداد ذاكرة التخزين المؤقت للمفاتيح والقيم عن طريق تمرير علم `use_cache` إلى مكالمة `forward` ويمكننا بعد ذلك تمريره مع الرمز الحالي. + +```python +past_key_values = None # past_key_values is the key-value cache +generated_tokens = [] +next_token_id = tokenizer(prompt, return_tensors="pt")["input_ids"].to("cuda") + +for _ in range(5): + next_logits, past_key_values = model(next_token_id, past_key_values=past_key_values, use_cache=True).to_tuple() + next_logits = next_logits[:, -1:] + next_token_id = torch.argmax(next_logits, dim=-1) + + print("shape of input_ids", next_token_id.shape) + print("length of key-value cache", len(past_key_values[0][0])) # past_key_values are of shape [num_layers, 0 for k, 1 for v, batch_size, length, hidden_dim] + generated_tokens.append(next_token_id.item()) + +generated_text = tokenizer.batch_decode(generated_tokens) +generated_text +``` + +**output**: +``` +shape of input_ids torch.Size([1, 1]) +length of key-value cache 20 +shape of input_ids torch.Size([1, 1]) +length of key-value cache 21 +shape of input_ids torch.Size([1, 1]) +length of key-value cache 22 +shape of input_ids torch.Size([1, 1]) +length of key-value cache 23 +shape of input_ids torch.Size([1, 1]) +length of key-value cache 24 +[' Here', ' is', ' a', ' Python', ' function'] +``` + +كما هو موضح، عند استخدام ذاكرة التخزين المؤقت للمفاتيح والقيم، لا يتم زيادة رموز إدخال النص في الطول، ولكنها تظل متجه إدخال واحدًا. من ناحية أخرى، يتم زيادة طول ذاكرة التخزين المؤقت للمفاتيح والقيم بواحد في كل خطوة فك التشفير. + +> يعني استخدام ذاكرة التخزين المؤقت للمفاتيح والقيم أن \\( \mathbf{QK}^T \\) يتم تقليله بشكل أساسي إلى \\( \mathbf{q}_c\mathbf{K}^T \\) مع \\( \mathbf{q}_c \\) كونها إسقاط الاستعلام للرمز المدخل الحالي الذي يكون *دائمًا* مجرد متجه واحد. + +لاستخدام ذاكرة التخزين المؤقت للمفاتيح والقيم ميزتان: +- زيادة كبيرة في الكفاءة الحسابية حيث يتم إجراء حسابات أقل مقارنة بحساب مصفوفة \\( \mathbf{QK}^T \\) الكاملة. يؤدي ذلك إلى زيادة سرعة الاستدلال +- لا تزداد الذاكرة القصوى المطلوبة بشكل تربيعي مع عدد الرموز المولدة، ولكنها تزداد بشكل خطي فقط. + +> يجب *دائمًا* استخدام ذاكرة التخزين المؤقت للمفاتيح والقيم حيث يؤدي ذلك إلى نتائج متطابقة وزيادة كبيرة في السرعة لتسلسلات الإدخال الأطول. ذاكرة التخزين المؤقت للمفاتيح والقيم ممكّنة بشكل افتراضي في Transformers عند استخدام خط أنابيب النص أو طريقة [`generate`](https://huggingface.co/docs/transformers/main_classes/text_generation). + + + + +لاحظ أنه على الرغم من نصيحتنا باستخدام ذاكرة التخزين المؤقت للمفاتيح والقيم، فقد يكون إخراج نموذج اللغة الكبيرة مختلفًا قليلاً عند استخدامها. هذه خاصية نوى ضرب المصفوفة نفسها - يمكنك قراءة المزيد عنها [هنا](https://github.com/huggingface/transformers/issues/25420#issuecomment-1775317535). + + + +#### 3.2.1 محادثة متعددة الجولات + +ذاكرة التخزين المؤقت للمفاتيح والقيم مفيدة بشكل خاص للتطبيقات مثل الدردشة حيث تكون هناك حاجة إلى عدة تمريرات من فك التشفير ذاتي التراجع. دعنا نلقي نظرة على مثال. + +``` +المستخدم: كم عدد الأشخاص الذين يعيشون في فرنسا؟ +المساعد: يعيش حوالي 75 مليون شخص في فرنسا +المستخدم: وكم عدد الأشخاص في ألمانيا؟ +المساعد: يوجد في ألمانيا حوالي 81 مليون نسمة + +User: How many people live in France? +Assistant: Roughly 75 million people live in France +User: And how many are in Germany? +Assistant: Germany has ca. 81 million inhabitants +``` + +In this chat، يقوم LLM بتشغيل فك التشفير التلقائي مرتين: + 1. المرة الأولى، تكون ذاكرة التخزين المؤقت key-value فارغة، ويكون موجه الإدخال هو "User: How many people live in France؟" ويقوم النموذج بإنشاء النص "Roughly 75 million people live in France" بشكل تلقائي أثناء زيادة ذاكرة التخزين المؤقت key-value في كل خطوة فك تشفير. + 2. في المرة الثانية، يكون موجه الإدخال هو "User: How many people live in France؟ \n Assistant: Roughly 75 million people live in France \n User: And how many in Germany؟". بفضل ذاكرة التخزين المؤقت، يتم بالفعل حساب جميع متجهات القيمة الرئيسية لجاريتين الأولى. لذلك يتكون موجه الإدخال فقط من "User: And how many in Germany؟". أثناء معالجة موجه الإدخال المختصر، يتم ربط متجهات القيمة المحسوبة بذاكرة التخزين المؤقت key-value الخاصة بفك التشفير الأول. يتم بعد ذلك إنشاء إجابة المساعد الثانية "Germany has ca. 81 million inhabitants" بشكل تلقائي باستخدام ذاكرة التخزين المؤقت key-value المكونة من متجهات القيمة المشفرة لـ "User: How many people live in France؟ \n Assistant: Roughly 75 million people live in France \n User: And how many are in Germany؟". + +يجب ملاحظة أمرين هنا: + 1. الحفاظ على كل السياق أمر بالغ الأهمية للنماذج اللغوية الكبيرة (LLMs) التي يتم نشرها في الدردشة بحيث يفهم LLM كل سياق المحادثة السابق. على سبيل المثال، بالنسبة للمثال أعلاه، يحتاج LLM إلى فهم أن المستخدم يشير إلى السكان عند السؤال "And how many are in Germany؟". + 2. ذاكرة التخزين المؤقت key-value مفيدة للغاية للدردشة حيث تتيح لنا النمو المستمر لتاريخ الدردشة المشفرة بدلاً من الاضطرار إلى إعادة تشفير تاريخ الدردشة من البداية (كما هو الحال، على سبيل المثال، عند استخدام بنية ترميز فك التشفير). + +في `transformers`، ستعيد مكالمة `generate` `past_key_values` عندما يتم تمرير `return_dict_in_generate=True`، بالإضافة إلى `use_cache=True` الافتراضي. لاحظ أنه غير متوفر بعد من خلال واجهة `pipeline`. + +```python +# Generation as usual +prompt = system_prompt + "Question: Please write a function in Python that transforms bytes to Giga bytes.\n\nAnswer: Here" +model_inputs = tokenizer(prompt، return_tensors='pt') +generation_output = model.generate(**model_inputs، max_new_tokens=60، return_dict_in_generate=True) +decoded_output = tokenizer.batch_decode(generation_output.sequences)[0] + +# Piping the returned `past_key_values` to speed up the next conversation round +prompt = decoded_output + "\nQuestion: How can I modify the function above to return Mega bytes instead?\n\nAnswer: Here" +model_inputs = tokenizer(prompt، return_tensors='pt') +generation_output = model.generate( + **model_inputs، + past_key_values=generation_output.past_key_values، + max_new_tokens=60، + return_dict_in_generate=True +) +tokenizer.batch_decode(generation_output.sequences)[0][len(prompt):] +``` + +**Output**: +``` + هي نسخة معدلة من الدالة التي تعيد ميجا بايت بدلاً من ذلك. + +def bytes_to_megabytes(bytes): + return bytes / 1024 / 1024 + +Answer: The function takes a number of bytes as input and returns the number of +``` + +رائع، لا يتم إنفاق وقت إضافي على إعادة حساب نفس المفتاح والقيم لطبقة الاهتمام! ومع ذلك، هناك شيء واحد يجب ملاحظته. في حين أن ذروة الذاكرة المطلوبة لمصفوفة \\( \mathbf{QK}^T \\) يتم تقليلها بشكل كبير، فإن الاحتفاظ بذاكرة التخزين المؤقت key-value في الذاكرة يمكن أن يصبح مكلفًا جدًا من حيث الذاكرة لسلاسل الإدخال الطويلة أو الدردشة متعددة الجولات. تذكر أن ذاكرة التخزين المؤقت key-value بحاجة إلى تخزين متجهات القيمة الرئيسية لجميع متجهات الإدخال السابقة \\( \mathbf{x}_i \text{، لـ } i \in \{1، \ ldots، c - 1\} \\) لجميع طبقات الاهتمام الذاتي وكل رؤوس الاهتمام. + +دعنا نحسب عدد القيم العائمة التي يجب تخزينها في ذاكرة التخزين المؤقت key-value لنموذج LLM `bigcode/octocoder` الذي استخدمناه من قبل. +يبلغ عدد القيم العائمة ضعف طول التسلسل مضروبًا في عدد رؤوس الاهتمام مضروبًا في بعد رأس الاهتمام ومضروبًا في عدد الطبقات. +حساب هذا لنموذج LLM لدينا عند طول تسلسل افتراضي يبلغ 16000 يعطي: + +```python +config = model.config +2 * 16_000 * config.n_layer * config.n_head * config.n_embd // config.n_head +``` + +**Output**: +``` +7864320000 +``` + +Roughly 8 مليار قيمة عائمة! يتطلب تخزين 8 مليارات قيمة عائمة في دقة `float16` حوالي 15 جيجابايت من ذاكرة الوصول العشوائي (RAM) وهو ما يقرب من نصف حجم أوزان النموذج نفسها! +اقترح الباحثون طريقتين تسمحان بتقليل تكلفة الذاكرة لتخزين ذاكرة التخزين المؤقت key-value بشكل كبير، والتي يتم استكشافها في الأقسام الفرعية التالية. + +#### 3.2.2 Multi-Query-Attention (MQA) + +[Multi-Query-Attention](https://arxiv.org/abs/1911.02150) اقترحها Noam Shazeer في ورقته *Fast Transformer Decoding: One Write-Head is All You Need*. كما يقول العنوان، اكتشف Noam أنه بدلاً من استخدام `n_head` من أوزان إسقاط القيمة الرئيسية، يمكن استخدام زوج واحد من أوزان إسقاط رأس القيمة التي يتم مشاركتها عبر جميع رؤوس الاهتمام دون أن يتدهور أداء النموذج بشكل كبير. + +> باستخدام زوج واحد من أوزان إسقاط رأس القيمة، يجب أن تكون متجهات القيمة الرئيسية \\( \mathbf{k}_i، \mathbf{v}_i \\) متطابقة عبر جميع رؤوس الاهتمام والتي بدورها تعني أننا بحاجة فقط إلى تخزين زوج إسقاط قيمة رئيسي واحد في ذاكرة التخزين المؤقت بدلاً من `n_head` منها. + +نظرًا لأن معظم LLMs تستخدم ما بين 20 و100 رأس اهتمام، فإن MQA يقلل بشكل كبير من استهلاك الذاكرة لذاكرة التخزين المؤقت key-value. بالنسبة إلى LLM المستخدم في هذا الدفتر، يمكننا تقليل استهلاك الذاكرة المطلوبة من 15 جيجابايت إلى أقل من 400 ميجابايت عند طول تسلسل الإدخال 16000. + +بالإضافة إلى توفير الذاكرة، يؤدي MQA أيضًا إلى تحسين الكفاءة الحسابية كما هو موضح في ما يلي. +في فك التشفير التلقائي، يجب إعادة تحميل متجهات القيمة الرئيسية الكبيرة، ودمجها مع زوج متجه القيمة الحالي، ثم إدخالها في \\( \mathbf{q}_c\mathbf{K}^T \\) الحساب في كل خطوة. بالنسبة لفك التشفير التلقائي، يمكن أن تصبح عرض النطاق الترددي للذاكرة المطلوبة لإعادة التحميل المستمر عنق زجاجة زمنيًا خطيرًا. من خلال تقليل حجم متجهات القيمة الرئيسية، يجب الوصول إلى ذاكرة أقل، وبالتالي تقليل عنق الزجاجة في عرض النطاق الترددي للذاكرة. لمزيد من التفاصيل، يرجى إلقاء نظرة على [ورقة Noam](https://arxiv.org/abs/1911.02150). + +الجزء المهم الذي يجب فهمه هنا هو أن تقليل عدد رؤوس الاهتمام بالقيمة الرئيسية إلى 1 لا معنى له إلا إذا تم استخدام ذاكرة التخزين المؤقت للقيمة الرئيسية. يظل الاستهلاك الذروي لذاكرة النموذج لمرور واحد للأمام بدون ذاكرة التخزين المؤقت للقيمة الرئيسية دون تغيير لأن كل رأس اهتمام لا يزال لديه متجه استعلام فريد بحيث يكون لكل رأس اهتمام مصفوفة \\( \mathbf{QK}^T \\) مختلفة. + +شهدت MQA اعتمادًا واسع النطاق من قبل المجتمع ويتم استخدامها الآن بواسطة العديد من LLMs الأكثر شهرة: + +- [**Falcon**](https://huggingface.co/tiiuae/falcon-40b) +- [**PaLM**](https://arxiv.org/abs/2204.02311) +- [**MPT**](https://huggingface.co/mosaicml/mpt-30b) +- [**BLOOM**](https://huggingface.co/bigscience/bloom) + +كما يستخدم نقطة التحقق المستخدمة في هذا الدفتر - `bigcode/octocoder` - MQA. + +#### 3.2.3 مجموعة الاستعلام الاهتمام (GQA) + +[مجموعة الاستعلام الاهتمام](https://arxiv.org/abs/2305.13245)، كما اقترح Ainslie et al. من Google، وجد أن استخدام MQA يمكن أن يؤدي غالبًا إلى تدهور الجودة مقارنة باستخدام إسقاطات رأس القيمة الرئيسية المتعددة. تجادل الورقة بأنه يمكن الحفاظ على أداء النموذج بشكل أكبر عن طريق تقليل عدد أوزان إسقاط رأس الاستعلام بشكل أقل حدة. بدلاً من استخدام وزن إسقاط قيمة رئيسية واحدة فقط، يجب استخدام `n كخاتمة، من المستحسن بشدة استخدام GQA أو MQA إذا تم نشر LLM باستخدام فك التشفير التلقائي ويتطلب التعامل مع تسلسلات الإدخال الكبيرة كما هو الحال على سبيل المثال للدردشة. + + +## الخاتمة + +مجتمع البحث يأتي باستمرار بطرق جديدة ومبتكرة لتسريع وقت الاستدلال للنماذج اللغوية الكبيرة على الإطلاق. كمثال، أحد اتجاهات البحث الواعدة هو [فك التشفير التخميني](https://arxiv.org/abs/2211.17192) حيث تقوم "الرموز السهلة" بإنشائها نماذج اللغة الأصغر والأسرع ويتم إنشاء "الرموز الصعبة" فقط بواسطة LLM نفسه. إن التعمق في التفاصيل يتجاوز نطاق هذا الدفتر، ولكن يمكن قراءته في هذه [تدوينة المدونة اللطيفة](https://huggingface.co/blog/assisted-generation). + +السبب في أن LLMs الضخمة مثل GPT3/4، وLlama-2-70b، وClaude، وPaLM يمكن أن تعمل بسرعة كبيرة في واجهات الدردشة مثل [Hugging Face Chat](https://huggingface.co/chat/) أو ChatGPT يرجع إلى حد كبير إلى التحسينات المذكورة أعلاه في الدقة والخوارزميات والهندسة المعمارية. +في المستقبل، ستكون أجهزة التسريع مثل وحدات معالجة الرسومات (GPUs) ووحدات معالجة الرسومات (TPUs)، وما إلى ذلك... ستكون أسرع فقط وستسمح بمزيد من الذاكرة، ولكن يجب دائمًا التأكد من استخدام أفضل الخوارزميات والهندسة المعمارية المتاحة للحصول على أكبر قدر من المال \ No newline at end of file From 143ba84cbe069e2d54110f4b99f35bb829b775ae Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:18 +0300 Subject: [PATCH 048/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftorch=5Fcompile.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_torch_compile.md | 297 +++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 docs/source/ar/perf_torch_compile.md diff --git a/docs/source/ar/perf_torch_compile.md b/docs/source/ar/perf_torch_compile.md new file mode 100644 index 00000000000000..34bbc800ddfc7a --- /dev/null +++ b/docs/source/ar/perf_torch_compile.md @@ -0,0 +1,297 @@ +# تسريع الاستنتاج باستخدام torch.compile() + +يهدف هذا الدليل إلى تقديم معيار لقياس التحسينات في سرعة الاستنتاج التي تم تقديمها مع [torch.compile()](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) [لنماذج الرؤية الحاسوبية في 🤗 Transformers](https://huggingface.co/models؟pipeline_tag=image-classification&library=transformers&sort=trending). + +## فوائد torch.compile + +بناءً على النموذج وبطاقة GPU، يوفر torch.compile() تسريعًا يصل إلى 30% أثناء الاستنتاج. لاستخدام torch.compile()، ما عليك سوى تثبيت أي إصدار من torch أعلى من 2.0. + +يستغرق تجميع نموذج وقتًا، لذا فهو مفيد إذا كنت تقوم بتجميع النموذج مرة واحدة فقط بدلاً من كل مرة تقوم فيها بالاستنتاج. لتجميع أي نموذج رؤية حاسوبية من اختيارك، قم بالاستدعاء `torch.compile()` على النموذج كما هو موضح أدناه: + +```diff +from transformers import AutoModelForImageClassification + +model = AutoModelForImageClassification.from_pretrained(MODEL_ID).to("cuda") ++ model = torch.compile(model) +``` + +يأتي `compile()` مع أوضاع متعددة للتجميع، والتي تختلف بشكل أساسي في وقت التجميع وعبء الاستدلال. يستغرق الأمر `max-autotune` وقتًا أطول من `reduce-overhead` ولكنه يؤدي إلى استدلال أسرع. الوضع الافتراضي هو الأسرع للتجميع ولكنه ليس بكفاءة `reduce-overhead` لوقت الاستدلال. في هذا الدليل، استخدمنا الوضع الافتراضي. يمكنك معرفة المزيد عنه [هنا](https://pytorch.org/get-started/pytorch-2.0/#user-experience). + +قمنا باختبار `torch.compile` مع نماذج رؤية حاسوبية مختلفة، ومهمات، وأنواع الأجهزة، وأحجام الدفعات على إصدار `torch` 2.0.1. + +## كود المعيار المرجعي + +فيما يلي يمكنك العثور على كود المعيار المرجعي لكل مهمة. نقوم بتسخين وحدة معالجة الرسومات (GPU) قبل الاستدلال ونأخذ متوسط وقت 300 استدلال، باستخدام نفس الصورة في كل مرة. + +### تصنيف الصور مع ViT + +```python +import torch +from PIL import Image +import requests +import numpy as np +from transformers import AutoImageProcessor, AutoModelForImageClassification + +url = 'http://images.cocodataset.org/val2017/000000039769.jpg' +image = Image.open(requests.get(url, stream=True).raw) + +processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224") +model = AutoModelForImageClassification.from_pretrained("google/vit-base-patch16-224").to("cuda") +model = torch.compile(model) + +processed_input = processor(image, return_tensors='pt').to(device="cuda") + +with torch.no_grad(): + _ = model(**processed_input) +``` + +#### اكتشاف الكائنات مع DETR + +```python +from transformers import AutoImageProcessor, AutoModelForObjectDetection + +processor = AutoImageProcessor.from_pretrained("facebook/detr-resnet-50") +model = AutoModelForObjectDetection.from_pretrained("facebook/detr-resnet-50").to("cuda") +model = torch.compile(model) + +texts = ["a photo of a cat", "a photo of a dog"] +inputs = processor(text=texts, images=image, return_tensors="pt").to("cuda") + +with torch.no_grad(): + _ = model(**inputs) +``` + +#### تجزئة الصورة مع Segformer + +```python +from transformers import SegformerImageProcessor, SegformerForSemanticSegmentation +with torch.no_grad(): + _ = model(**inputs) +``` + +#### تجزئة الصورة مع Segformer + +```python +from transformers import SegformerImageProcessor, SegformerForSemanticSegmentation + +processor = SegformerImageProcessor.from_pretrained("nvidia/segformer-b0-finetuned-ade-512-512") +model = SegformerForSemanticSegmentation.from_pretrained("nvidia/segformer-b0-finetuned-ade-512-512").to("cuda") +model = torch.compile(model) +seg_inputs = processor(images=image, return_tensors="pt").to("cuda") + +with torch.no_grad(): + _ = model(**seg_inputs) +``` + +فيما يلي قائمة بالنماذج التي أجرينا عليها المعيار المرجعي. + +**تصنيف الصور** +- [google/vit-base-patch16-224](https://huggingface.co/google/vit-base-patch16-224) +- [microsoft/beit-base-patch16-224-pt22k-ft22k](https://huggingface.co/microsoft/beit-base-patch16-224-pt22k-ft22k) +- [facebook/convnext-large-224](https://huggingface.co/facebook/convnext-large-224) +- [microsoft/resnet-50](https://huggingface.co/microsoft/resnet-50) + +**تجزئة الصورة** +- [nvidia/segformer-b0-finetuned-ade-512-512](https://huggingface.co/nvidia/segformer-b0-finetuned-ade-512-512) +- [facebook/mask2former-swin-tiny-coco-panoptic](https://huggingface.co/facebook/mask2former-swin-tiny-coco-panoptic) +- [facebook/maskformer-swin-base-ade](https://huggingface.co/facebook/maskformer-swin-base-ade) +- [google/deeplabv3_mobilenet_v2_1.0_513](https://huggingface.co/google/deeplabv3_mobilenet_v2_1.0_513) + +**اكتشاف الكائنات** +- [google/owlvit-base-patch32](https://huggingface.co/google/owlvit-base-patch32) +- [facebook/detr-resnet-101](https://huggingface.co/facebook/detr-resnet-101) +- [microsoft/conditional-detr-resnet-50](https://huggingface.co/microsoft/conditional-detr-resnet-50) + +فيما يلي يمكنك العثور على رسومات بيانية لمدد الاستدلال مع وبدون `torch.compile()` والنسب المئوية للتحسين لكل نموذج في أجهزة وأحجام دفعات مختلفة. + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +![مدة المقارنة على V100 بحجم دفعة 1](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/torch_compile/v100_1_duration.png) + +![النسبة المئوية للتحسين على T4 بحجم دفعة 4](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/torch_compile/T4_4_percentage.png) + +فيما يلي يمكنك العثور على مدد الاستدلال بالمللي ثانية لكل نموذج مع وبدون `compile()`. لاحظ أن OwlViT يؤدي إلى OOM في أحجام الدفعات الأكبر. + +### A100 (حجم الدفعة: 1) + +| المهمة/النموذج | الإصدار 2.0 من torch -
بدون تجميع | الإصدار 2.0 من torch -
تجميع | +|:---:|:---:|:---:| +| تصنيف الصور/ViT | 9.325 | 7.584 | +| تجزئة الصورة/Segformer | 11.759 | 10.500 | +| اكتشاف الكائنات/OwlViT | 24.978 | 18.420 | +| تصنيف الصور/BeiT | 11.282 | 8.448 | +| اكتشاف الكائنات/DETR | 34.619 | 19.040 | +| تصنيف الصور/ConvNeXT | 10.410 | 10.208 | +| تصنيف الصور/ResNet | 6.531 | 4.124 | +| تجزئة الصورة/Mask2former | 60.188 | 49.117 | +| تجزئة الصورة/Maskformer | 75.764 | 59.487 | +| تجزئة الصورة/MobileNet | 8.583 | 3.974 | +| اكتشاف الكائنات/Resnet-101 | 36.276 | 18.197 | +| اكتشاف الكائنات/Conditional-DETR | 31.219 | 17.993 | +### A100 (حجم الدفعة: 4) + +| المهمة/النموذج | الإصدار 2.0 من torch -
بدون تجميع | الإصدار 2.0 من torch -
تجميع | +|:---:|:---:|:---:| +| تصنيف الصور/ViT | 14.832 | 14.499 | +| تجزئة الصورة/Segformer | 18.838 | 16.476 | +| تصنيف الصور/BeiT | 13.205 | 13.048 | +| اكتشاف الكائنات/DETR | 48.657 | 32.418| +| تصنيف الصور/ConvNeXT | 22.940 | 21.631 | +| تصنيف الصور/ResNet | 6.657 | 4.268 | +| تجزئة الصورة/Mask2former | 74.277 | 61.781 | +| تجزئة الصورة/Maskformer | 180.700 | 159.116 | +| تجزئة الصورة/MobileNet | 14.174 | 8.515 | +| اكتشاف الكائنات/Resnet-101 | 68.101 | 44.998 | +| اكتشاف الكائنات/Conditional-DETR | 56.470 | 35.552 | + +### A100 (حجم الدفعة: 16) + +| المهمة/النموذج | الإصدار 2.0 من torch -
بدون تجميع | الإصدار 2.0 من torch -
تجميع | +|:---:|:---:|:---:| +| تصنيف الصور/ViT | 40.944 | 40.010 | +| تجزئة الصورة/Segformer | 37.005 | 31.144 | +| تصنيف الصور/BeiT | 41.854 | 41.048 | +| اكتشاف الكائنات/DETR | 164.382 | 161.902 | +| تصنيف الصور/ConvNeXT | 82.258 | 75.561 | +| تصنيف الصور/ResNet | 7.018 | 5.024 | +| تجزئة الصورة/Mask2former | 178.945 | 154.814 | +| تجزئة الصورة/Maskformer | 638.570 | 579.826 | +| تجزئة الصورة/MobileNet | 51.693 | 30.310 | +| اكتشاف الكائنات/Resnet-101 | 232.887 | 155.021 | +| اكتشاف الكائنات/Conditional-DETR | 180.491 | 124.032 | + +### V100 (حجم الدفعة: 1) + +| المهمة/النموذج | الإصدار 2.0 من torch -
بدون تجميع | الإصدار 2.0 من torch -
تجميع | +|:---:|:---:|:---:| +| تصنيف الصور/ViT | 10.495 | 6.00 | +| تجزئة الصورة/Segformer | 13.321 | 5.862 | +| اكتشاف الكائنات/OwlViT | 25.769 | 22.395 | +| تصنيف الصور/BeiT | 11.347 | 7.234 | +| اكتشاف الكائنات/DETR | 33.951 | 19.388 | +| تصنيف الصور/ConvNeXT | 11.623 | 10.412 | +| تصنيف الصور/ResNet | 6.484 | 3.820 | +| تجزئة الصورة/Mask2former | 64.640 | 49.873 | +| تجزئة الصورة/Maskformer | 95.532 | 72.207 | +| تجزئة الصورة/MobileNet | 9.217 | 4.753 | +| اكتشاف الكائنات/Resnet-101 | 52.818 | 28.367 | +| اكتشاف الكائنات/Conditional-DETR | 39.512 | 20.816 | + +### V100 (حجم الدفعة: 4) + +| المهمة/النموذج | الإصدار 2.0 من torch -
بدون تجميع | الإصدار 2.0 من torch -
تجميع | +|:---:|:---:|:---:| +| تصنيف الصور/ViT | 15.181 | 14.501 | +| تجزئة الصورة/Segformer | 16.787 | 16.188 | +| تصنيف الصور/BeiT | 15.171 | 14.753 | +| اكتشاف الكائنات/DETR | 88.529 | 64.195 | +| تصنيف الصور/ConvNeXT | 29.574 | 27.085 | +| تصنيف الصور/ResNet | 6.109 | 4.731 | +| تجزئة الصورة/Mask2former | 90.402 | 76.926 | +| تجزئة الصورة/Maskformer | 234.261 | 205.456 | +| تجزئة الصورة/MobileNet | 24.623 | 14.816 | +| اكتشاف الكائنات/Resnet-101 | 134.672 | 101.304 | +| اكتشاف الكائنات/Conditional-DETR | 97.464 | 69.739 | + +### T4 (batch size: 16) + +| **Task/Model** | **torch 2.0 -
no compile** | **torch 2.0 -
compile** | +|:---:|:---:|:---:| +| Image Classification/ViT | 163.914 | 160.907 | +| Image Segmentation/Segformer | 192.412 | 163.620 | +| Image Classification/BeiT | 188.978 | 187.976 | +| Object Detection/DETR | OOM | OOM | +| Image Classification/ConvNeXT | 422.886 | 388.078 | +| Image Classification/ResNet | 44.114 | 37.604 | +| Image Segmentation/Mask2former | 756.337 | 695.291 | +| Image Segmentation/Maskformer | 2842.940 | 2656.88 | +| Image Segmentation/MobileNet | 299.003 | 201.942 | +| Object Detection/Resnet-101 | 1619.505 | 1262.758 | +| Object Detection/Conditional-DETR | 1137.513 | 897.390| + +## PyTorch Nightly +We also benchmarked on PyTorch nightly (2.1.0dev, find the wheel [here](https://download.pytorch.org/whl/nightly/cu118)) and observed improvement in latency both for uncompiled and compiled models. + +### A100 + +| **Task/Model** | **Batch Size** | **torch 2.0 - no compile** | **torch 2.0 -
compile** | +|:---:|:---:|:---:|:---:| +| Image Classification/BeiT | Unbatched | 12.462 | 6.954 | +| Image Classification/BeiT | 4 | 14.109 | 12.851 | +| Image Classification/BeiT | 16 | 42.179 | 42.147 | +| Object Detection/DETR | Unbatched | 30.484 | 15.221 | +| Object Detection/DETR | 4 | 46.816 | 30.942 | +| Object Detection/DETR | 16 | 163.749 | 163.706 | + +### T4 + +| **Task/Model** | **Batch Size** | **torch 2.0 -
no compile** | **torch 2.0 -
compile** | +|:---:|:---:|:---:|:---:| +| Image Classification/BeiT | Unbatched | 14.408 | 14.052 | +| Image Classification/BeiT | 4 | 47.381 | 46.604 | +| Image Classification/BeiT | 16 | 42.179 | 42.147 | +| Object Detection/DETR | Unbatched | 68.382 | 53.481 | +| Object Detection/DETR | 4 | 269.615 | 204.785 | +| Object Detection/DETR | 16 | OOM | OOM | + +### V100 + +| **Task/Model** | **Batch Size** | **torch 2.0 -
no compile** | **torch 2.0 -
compile** | +|:---:|:---:|:---:|:---:| +| Image Classification/BeiT | Unbatched | 13.477 | 7.926 | +| Image Classification/BeiT | 4 | 15.103 | 14.378 | +| Image Classification/BeiT | 16 | 52.517 | 51.691 | +| Object Detection/DETR | Unbatched | 28.706 | 19.077 | +| Object Detection/DETR | 4 | 88.402 | 62.949| +| Object Detection/DETR | 16 | OOM | OOM | + + +## Reduce Overhead +We benchmarked `reduce-overhead` compilation mode for A100 and T4 in Nightly. + +### A100 + +| **Task/Model** | **Batch Size** | **torch 2.0 -
no compile** | **torch 2.0 -
compile** | +|:---:|:---:|:---:|:---:| +| Image Classification/ConvNeXT | Unbatched | 11.758 | 7.335 | +| Image Classification/ConvNeXT | 4 | 23.171 | 21.490 | +| Image Classification/ResNet | Unbatched | 7.435 | 3.801 | +| Image Classification/ResNet | 4 | 7.261 | 2.187 | +| Object Detection/Conditional-DETR | Unbatched | 32.823 | 11.627 | +| Object Detection/Conditional-DETR | 4 | 50.622 | 33.831 | +| Image Segmentation/MobileNet | Unbatched | 9.869 | 4.244 | +| Image Segmentation/MobileNet | 4 | 14.385 | 7.946 | + + +### T4 + +| **Task/Model** | **Batch Size** | **torch 2.0 -
no compile** | **torch 2.0 -
compile** | +|:---:|:---:|:---:|:---:| +| Image Classification/ConvNeXT | Unbatched | 32.137 | 31.84 | +| Image Classification/ConvNeXT | 4 | 120.944 | 110.209 | +| Image Classification/ResNet | Unbatched | 9.761 | 7.698 | +| Image Classification/ResNet | 4 | 15.215 | 13.871 | +| Object Detection/Conditional-DETR | Unbatched | 72.150 | 57.660 | +| Object Detection/Conditional-DETR | 4 | 301.494 | 247.543 | +| Image Segmentation/MobileNet | Unbatched | 22.266 | 19.339 | +| Image Segmentation/MobileNet | 4 | 78.311 | 50.983 | \ No newline at end of file From c7ecd864a2efc3af67e2aaff973b351f71e9a6a3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:20 +0300 Subject: [PATCH 049/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fcpu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_train_cpu.md | 67 ++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/source/ar/perf_train_cpu.md diff --git a/docs/source/ar/perf_train_cpu.md b/docs/source/ar/perf_train_cpu.md new file mode 100644 index 00000000000000..ba1110a8e38f59 --- /dev/null +++ b/docs/source/ar/perf_train_cpu.md @@ -0,0 +1,67 @@ +# التدريب الفعال على وحدة المعالجة المركزية + +يركز هذا الدليل على التدريب الفعال للنماذج الكبيرة على وحدة المعالجة المركزية. + +## الدقة المختلطة مع IPEX +تستخدم الدقة المختلطة أنواع البيانات ذات الدقة الفردية (fp32) ونصف الدقة (bf16/fp16) في نموذج لتسريع التدريب أو الاستدلال مع الحفاظ على الكثير من دقة الدقة الفردية. تدعم وحدات المعالجة المركزية الحديثة مثل الجيل الثالث والرابع من معالجات Intel® Xeon® Scalable الدقة bf16 بشكلٍ أصلي، لذلك يجب أن تحصل على أداء أفضل بشكلٍ افتراضي من خلال تمكين التدريب على الدقة المختلطة باستخدام bf16. + +لزيادة تحسين أداء التدريب، يمكنك استخدام Intel® Extension لـ PyTorch (IPEX)، وهي مكتبة مبنية على PyTorch وتضيف دعمًا إضافيًا على مستوى بنية تعليمات CPU مثل Intel® Advanced Vector Extensions 512 Vector Neural Network Instructions (Intel® AVX512-VNNI)، وIntel® Advanced Matrix Extensions (Intel® AMX) لتعزيز الأداء على معالجات Intel. ومع ذلك، لا يُضمن أن يكون للأجهزة التي تحتوي على AVX2 فقط (مثل AMD أو معالجات Intel الأقدم) أداء أفضل في ظل IPEX. + +تم تمكين الدقة المختلطة التلقائية (AMP) لواجهات برمجة التطبيقات الخلفية لوحدة المعالجة المركزية منذ PyTorch 1.10. كما يتم دعم AMP لـ bf16 على وحدات المعالجة المركزية وتحسين مشغل bf16 في IPEX وتم نقله جزئيًا إلى الفرع الرئيسي لـ PyTorch. يمكنك الحصول على أداء أفضل وتجربة مستخدم محسّنة مع AMP IPEX. + +تحقق من مزيد من المعلومات التفصيلية حول [الدقة المختلطة التلقائية](https://intel.github.io/intel-extension-for-pytorch/cpu/latest/tutorials/features/amp.html). + +### تثبيت IPEX: + +يتبع إصدار IPEX إصدار PyTorch، لتثبيته عبر pip: + +| إصدار PyTorch | إصدار IPEX | +| :---------------: | :----------: | +| 2.1.x | 2.1.100+cpu | +| 2.0.x | 2.0.100+cpu | +| 1.13 | 1.13.0+cpu | +| 1.12 | 1.12.300+cpu | + +يرجى تشغيل `pip list | grep torch` للحصول على إصدار PyTorch، بحيث يمكنك الحصول على اسم إصدار IPEX. +```bash +pip install intel_extension_for_pytorch== -f https://developer.intel.com/ipex-whl-stable-cpu +``` +يمكنك التحقق من أحدث الإصدارات في [ipex-whl-stable-cpu](https://developer.intel.com/ipex-whl-stable-cpu) إذا لزم الأمر. + +تحقق من المزيد من الطرق لتثبيت [IPEX](https://intel.github.io/intel-extension-for-pytorch/cpu/latest/tutorials/installation.html). + +### الاستخدام في Trainer +لتمكين الدقة المختلطة التلقائية مع IPEX في Trainer، يجب على المستخدمين إضافة `use_ipex` و`bf16` و`no_cuda` في وسائط الأوامر التدريبية. + +خذ مثالاً على حالات الاستخدام في [تحويلات الأسئلة والأجوبة](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) + +- التدريب باستخدام IPEX مع الدقة المختلطة التلقائية BF16 على وحدة المعالجة المركزية: +
 python run_qa.py \
+--model_name_or_path google-bert/bert-base-uncased \
+--dataset_name squad \
+--do_train \
+--do_eval \
+--per_device_train_batch_size 12 \
+--learning_rate 3e-5 \
+--num_train_epochs 2 \
+--max_seq_length 384 \
+--doc_stride 128 \
+--output_dir /tmp/debug_squad/ \
+--use_ipex \
+--bf16 \
+--use_cpu
+ +إذا كنت تريد تمكين `use_ipex` و`bf16` في نصك البرمجي، فقم بإضافة هذه المعلمات إلى `TrainingArguments` على النحو التالي: +```diff +training_args = TrainingArguments( + output_dir=args.output_path, ++ bf16=True, ++ use_ipex=True, ++ use_cpu=True, + **kwargs +) +``` + +### مثال عملي + +مقال المدونة: [تسريع تحويلات PyTorch باستخدام Intel Sapphire Rapids](https://huggingface.co/blog/intel-sapphire-rapids) \ No newline at end of file From bcb7d31561074d94abde3e510d29559f2231b1c3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:22 +0300 Subject: [PATCH 050/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Ftpu=5Ftf.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/perf_train_tpu_tf.md | 152 ++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 docs/source/ar/perf_train_tpu_tf.md diff --git a/docs/source/ar/perf_train_tpu_tf.md b/docs/source/ar/perf_train_tpu_tf.md new file mode 100644 index 00000000000000..f463bbf5395d36 --- /dev/null +++ b/docs/source/ar/perf_train_tpu_tf.md @@ -0,0 +1,152 @@ +# التدريب على وحدة معالجة tensor (TPU) باستخدام TensorFlow + + + +إذا كنت لا تحتاج إلى تفسيرات مطولة وتريد فقط الاطلاع على أمثلة من أكواد TPU لتبدأ بها، يمكنك الاطلاع على [دفتر الملاحظات الخاص بنا حول مثال TPU](https://colab.research.google.com/github.com/huggingface/notebooks/blob/main/examples/tpu_training-tf.ipynb) + + + +### ما هي وحدة معالجة tensor (TPU)؟ + +وحدة معالجة tensor (TPU) هي **وحدة معالجة tensor**، وهي عبارة عن أجهزة مصممة من قبل Google وتستخدم لتسريع عمليات الحساب داخل الشبكات العصبية، تمامًا مثل وحدات معالجة الرسوميات (GPUs). يمكن استخدامها لكل من تدريب الشبكة والاستدلال. يتم الوصول إليها بشكل عام من خلال خدمات الحوسبة السحابية الخاصة بـ Google، ولكن يمكن أيضًا الوصول إلى وحدات TPU الصغيرة مباشرة ومجانًا عبر Google Colab وKaggle Kernels. + +نظرًا لأن [جميع نماذج TensorFlow في مكتبة 🤗 Transformers هي نماذج Keras](https://huggingface.co/blog/tensorflow-philosophy)، فإن معظم الطرق في هذه الوثيقة تنطبق بشكل عام على التدريب على وحدة TPU لأي نموذج Keras! ومع ذلك، هناك بعض النقاط المحددة الخاصة بنظام HuggingFace (hug-o-system؟) للنماذج والمجموعات، وسنحرص على الإشارة إليها عند الوصول إليها. + +### ما هي أنواع وحدات TPU المتاحة؟ + +غالبًا ما يكون المستخدمون الجدد محتارين جدًا بسبب نطاق وحدات TPU، والطرق المختلفة للوصول إليها. أول تمييز رئيسي يجب فهمه هو الفرق بين **عقد TPU** و**آلات TPU الافتراضية (VMs)**. + +عندما تستخدم **عقدة TPU**، فأنت بشكل فعال تقوم بالوصول غير المباشر إلى وحدة TPU عن بعد. ستحتاج إلى آلة افتراضية منفصلة، والتي ستقوم بتهيئة شبكتك وخط أنابيب بياناتك ومن ثم إرسالها إلى العقدة البعيدة. عندما تستخدم وحدة TPU على Google Colab، فأنت تقوم بالوصول إليها على طريقة **عقدة TPU**. + +يمكن أن يكون لاستخدام عقد TPU بعض السلوكيات غير المتوقعة للغاية بالنسبة للأشخاص الذين لم يعتادوا عليها! على وجه الخصوص، نظرًا لأن وحدة TPU تقع على نظام مختلف فعليًا عن الجهاز الذي تشغل عليه كود Python الخاص بك، لا يمكن أن تكون بياناتك محلية على جهازك - سيؤدي أي خط أنابيب للبيانات يحمل من التخزين الداخلي لجهازك إلى الفشل التام! بدلاً من ذلك، يجب تخزين البيانات في Google Cloud Storage حيث يمكن لخط أنابيب البيانات الوصول إليها، حتى عندما يعمل الخط على عقدة TPU البعيدة. + + + +إذا كان بإمكانك وضع جميع بياناتك في الذاكرة كـ `np.ndarray` أو `tf.Tensor`، فيمكنك حينئذٍ تشغيل `fit()` على تلك البيانات حتى عند استخدام Colab أو عقدة TPU، دون الحاجة إلى تحميلها إلى Google Cloud Storage. + + + + + +**🤗نصيحة خاصة بـ Hugging Face🤗:** ستؤدي كل من طريقتي `Dataset.to_tf_dataset()` وغلافها عالي المستوى `model.prepare_tf_dataset()`، والتي ستراها في جميع أمثلة كود TF لدينا، إلى الفشل على عقدة TPU. والسبب في ذلك هو أنه على الرغم من أنهما تنشئان `tf.data.Dataset`، إلا أنهما لا تنشئان خط أنابيب "خالص" `tf.data` ويستخدمان `tf.numpy_function` أو `Dataset.from_generator()` لدفق البيانات من مجموعة HuggingFace الأساسية. هذه المجموعة الأساسية HuggingFace مدعومة ببيانات موجودة على قرص محلي ولا يمكن لعقدة TPU البعيدة قراءتها. + + + +الطريقة الثانية للوصول إلى وحدة TPU هي عبر **آلة TPU الافتراضية (VM)**. عند استخدام آلة TPU الافتراضية، فأنت تتصل مباشرة بالجهاز الذي تتصل به وحدة TPU، تمامًا مثل التدريب على آلة GPU افتراضية. تعد آلات TPU الافتراضية أسهل عمومًا في العمل معها، خاصة عندما يتعلق الأمر بخط أنابيب بياناتك. لا تنطبق جميع التحذيرات المذكورة أعلاه على آلات TPU الافتراضية! + +هذه وثيقة ذات رأي، لذا إليك رأينا: **تجنب استخدام عقدة TPU إذا أمكن ذلك.** فهو أكثر تعقيدًا وصعوبة في التصحيح من آلات TPU الافتراضية. ومن المحتمل أيضًا ألا يتم دعمه في المستقبل - لا يمكن الوصول إلى أحدث وحدة TPU من Google، وهي TPUv4، إلا كآلة TPU افتراضية، مما يشير إلى أن عقد TPU ستصبح بشكل متزايد طريقة وصول "تراثية". ومع ذلك، ندرك أن الوصول المجاني الوحيد لوحدة TPU هو عبر Colab وKaggle Kernels، والتي تستخدم عقدة TPU - لذا سنحاول شرح كيفية التعامل معها إذا كان عليك ذلك! راجع [دفتر ملاحظات مثال TPU](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/tpu_training-tf.ipynb) للحصول على أمثلة من الأكواد التي توضح ذلك بمزيد من التفصيل. + +### ما هي أحجام وحدات TPU المتاحة؟ + +تشغل وحدة TPU واحدة (v2-8/v3-8/v4-8) 8 نسخ. توجد وحدات TPU في **مجموعات** يمكنها تشغيل مئات أو آلاف النسخ في وقت واحد. عندما تستخدم أكثر من وحدة TPU واحدة ولكن أقل من مجموعة كاملة (على سبيل المثال، v3-32)، يشار إلى أسطول وحدة TPU الخاصة بك باسم **شريحة المجموعة**. + +عندما تقوم بالوصول إلى وحدة TPU مجانية عبر Colab، تحصل بشكل عام على وحدة TPU واحدة من نوع v2-8. + +### ما المقصود بـ XLA وكيف ترتبط بوحدات TPU؟ + +XLA عبارة عن مترجم مُحسِّن، يستخدمه كل من TensorFlow وJAX. في JAX، يعد XLA هو المترجم الوحيد، بينما في TensorFlow فهو اختياري (ولكن إلزامي على وحدة TPU!). أسهل طريقة لتمكينه عند تدريب نموذج Keras هي تمرير الحجة `jit_compile=True` إلى `model.compile()`. إذا لم تحصل على أي أخطاء وكان الأداء جيدًا، فهذه علامة رائعة على أنك مستعد للانتقال إلى وحدة TPU! + +غالبًا ما يكون التصحيح على وحدة TPU أكثر صعوبة منه على وحدة المعالجة المركزية/وحدة معالجة الرسوميات (CPU/GPU)، لذا نوصي بتشغيل كودك على وحدة المعالجة المركزية/وحدة معالجة الرسوميات (CPU/GPU) مع XLA أولاً قبل تجربته على وحدة TPU. بالطبع، لا يلزمك التدريب لفترة طويلة - فقط لخطوات قليلة للتأكد من أن نموذجك وخط أنابيب بياناتك يعملان كما تتوقع. + + + +عادةً ما يكون الكود المترجم بواسطة XLA أسرع - لذا حتى إذا لم تكن تخطط لتشغيله على وحدة TPU، فإن إضافة `jit_compile=True` يمكن أن يحسن أداءك. تأكد من ملاحظة التحذيرات أدناه حول توافق XLA، على الرغم من ذلك! + + + + + +**نصيحة من تجربة مؤلمة:** على الرغم من أن استخدام `jit_compile=True` طريقة جيدة للحصول على زيادة في السرعة واختبار ما إذا كان كود وحدة المعالجة المركزية/وحدة معالجة الرسوميات (CPU/GPU) متوافقًا مع XLA، إلا أنه يمكن أن يسبب الكثير من المشكلات إذا تركته عند التدريب الفعلي على وحدة TPU. سيحدث التجميع بواسطة XLA ضمنيًا على وحدة TPU، لذا تذكر إزالة هذا السطر قبل تشغيل كودك بالفعل على وحدة TPU! + + + +### كيف أجعل نموذجي متوافقًا مع XLA؟ + +في العديد من الحالات، من المحتمل أن يكون كودك متوافقًا بالفعل مع XLA! ومع ذلك، هناك بعض الأشياء التي تعمل في TensorFlow العادي والتي لا تعمل في XLA. لقد قمنا بتلخيصها في ثلاث قواعد أساسية أدناه: + + + +**🤗نصيحة خاصة بـ HuggingFace🤗:** لقد بذلنا الكثير من الجهد في إعادة كتابة نماذج TensorFlow ووظائف الخسارة الخاصة بنا لتكون متوافقة مع XLA. نماذجنا ووظائف الخسارة لدينا تلتزم بشكل عام بالقاعدتين #1 و#2 بشكل افتراضي، لذا يمكنك تخطيها إذا كنت تستخدم نماذج `transformers`. لكن لا تنسى هذه القواعد عند كتابة نماذجك ووظائف الخسارة الخاصة بك! + + + +#### قاعدة XLA رقم 1: لا يمكن أن يحتوي كودك على "شروط تعتمد على البيانات" + +ما يعنيه ذلك هو أنه لا يمكن لأي عبارة `if` أن تعتمد على القيم الموجودة داخل `tf.Tensor`. على سبيل المثال، لا يمكن تجميع كتلة الكود هذه باستخدام XLA! + +```python +if tf.reduce_sum(tensor) > 10: + tensor = tensor / 2.0 +``` + +قد يبدو هذا تقييدًا صارمًا في البداية، ولكن معظم أكواد الشبكات العصبية لا تحتاج إلى القيام بذلك. يمكنك غالبًا الالتفاف حول هذا التقييد باستخدام `tf.cond` (راجع الوثائق [هنا](https://www.tensorflow.org/api_docs/python/tf/cond)) أو عن طريق إزالة الشرط وإيجاد خدعة رياضية ذكية باستخدام متغيرات المؤشر بدلاً من ذلك، مثل ما يلي: + +```python +sum_over_10 = tf.cast(tf.reduce_sum(tensor) > 10, tf.float32) +tensor = tensor / (1.0 + sum_over_10) +``` +```python +sum_over_10 = tf.cast(tf.reduce_sum(tensor) > 10, tf.float32) +tensor = tensor / (1.0 + sum_over_10) +``` + +لهذا الكود نفس التأثير تمامًا مثل الكود أعلاه، ولكن عن طريق تجنب الشرط، نضمن أنه سيتم تجميعه بواسطة XLA دون مشاكل! + +#### قاعدة XLA رقم 2: لا يمكن أن يحتوي كودك على "أشكال تعتمد على البيانات" + +ما يعنيه ذلك هو أن شكل جميع كائنات `tf.Tensor` في كودك لا يمكن أن يعتمد على قيمها. على سبيل المثال، لا يمكن تجميع الدالة `tf.unique` باستخدام XLA، لأنها تعيد `tensor` يحتوي على مثيل واحد من كل قيمة فريدة في الإدخال. سيكون شكل هذا الإخراج مختلفًا بوضوح اعتمادًا على مدى تكرار الإدخال `Tensor`، لذا يرفض XLA التعامل معه! + +بشكل عام، تلتزم معظم أكواد الشبكات العصبية بالقاعدة #2 بشكل افتراضي. ومع ذلك، هناك بعض الحالات الشائعة التي تصبح فيها مشكلة. أحد الأمثلة الشائعة جدًا هو عندما تستخدم **قناع التسمية**، عن طريق ضبط تسمياتك على قيمة سالبة للإشارة إلى أنه يجب تجاهل هذه المواضع عند حساب الخسارة. إذا نظرت إلى وظائف الخسارة في NumPy أو PyTorch التي تدعم قناع التسمية، فستشاهد غالبًا كودًا مثل هذا يستخدم [الفهرسة البوليانية](https://numpy.org/doc/stable/user/basics.indexing.html#boolean-array-indexing): + +```python +label_mask = labels >= 0 +masked_outputs = outputs[label_mask] +masked_labels = labels[label_mask] +loss = compute_loss(masked_outputs, masked_labels) +mean_loss = torch.mean(loss) +``` + +هذا الكود مقبول تمامًا في NumPy أو PyTorch، ولكنه معطوب في XLA! لماذا؟ لأن شكل `masked_outputs` و`masked_labels` يعتمد على عدد المواضع المقنعة - مما يجعلها **شكلًا يعتمد على البيانات**. ومع ذلك، تمامًا مثل القاعدة #1، يمكننا غالبًا إعادة كتابة هذا الكود لإنتاج نفس الإخراج تمامًا دون أي أشكال تعتمد على البيانات. + +```python +label_mask = tf.cast(labels >= 0, tf.float32) +loss = compute_loss(outputs, labels) +loss = loss * label_mask # Set negative label positions to 0 +mean_loss = tf.reduce_sum(loss) / tf.reduce_sum(label_mask) +``` + +هنا، نتجنب الأشكال التي تعتمد على البيانات عن طريق حساب الخسارة لكل موضع، ولكن نقوم بإلغاء تحديد المواضع المقنعة في كل من البسط والمقام عند حساب المتوسط، مما ينتج عنه نفس النتيجة مثل كتلة الكود الأولى مع الحفاظ على التوافق مع XLA. لاحظ أننا نستخدم نفس الحيلة كما في القاعدة #1 - تحويل `tf.bool` إلى `tf.float32` واستخدامه كمتغير مؤشر. هذه حيلة مفيدة حقًا، لذا تذكرها إذا كنت بحاجة إلى تحويل كودك الخاص إلى XLA! + +#### قاعدة XLA رقم 3: سيتعين على XLA إعادة تجميع نموذجك لكل شكل إدخال مختلف يراه + +هذه هي القاعدة الكبيرة. ما يعنيه ذلك هو أنه إذا كانت أشكال الإدخال لديك متغيرة جدًا، فسيتعين على XLA إعادة تجميع نموذجك مرارًا وتكرارًا، مما سيخلق مشكلات كبيرة في الأداء. غالبًا ما ينشأ هذا في نماذج معالجة اللغات الطبيعية، حيث تكون نصوص الإدخال ذات أطوال متغيرة بعد التمييز. في الطرائق الأخرى، تكون الأشكال الثابتة أكثر شيوعًا وهذه القاعدة أقل إشكالية. + +كيف يمكنك الالتفاف حول القاعدة #3؟ المفتاح هو **التقسيم** - إذا قمت بتقسيم جميع إدخالاتك إلى نفس الطول، ثم استخدمت `attention_mask`، فيمكنك الحصول على نفس النتائج كما لو كنت تستخدم أشكالًا متغيرة، ولكن دون أي مشكلات في XLA. ومع ذلك، يمكن أن يتسبب التقسيم المفرط في حدوث تباطؤ شديد أيضًا - إذا قمت بتقسيم جميع عيناتك إلى الطول الأقصى في مجموعة البيانات بأكملها، فقد ينتهي بك الأمر بمجموعات تتكون من رموز التقسيم التي لا نهاية لها، والتي ستستهلك الكثير من الطاقة الحاسوبية والذاكرة! + +لا يوجد حل مثالي لهذه المشكلة. ومع ذلك، يمكنك تجربة بعض الحيل. إحدى الحيل المفيدة للغاية هي **تقسيم مجموعات العينات إلى مضاعفات لعدد مثل 32 أو 64 رمزًا**. غالبًا ما يزيد هذا من عدد الرموز قليلاً، ولكنه يقلل بشكل كبير من عدد الأشكال الفريدة للإدخال، لأن كل شكل إدخال يجب أن يكون الآن مضاعفًا لـ 32 أو 64. عدد أقل من الأشكال الفريدة للإدخال يعني عدد أقل من عمليات التجميع بواسطة XLA! + + + + +**🤗نصيحة خاصة بـ HuggingFace🤗:** تحتوي طرق التمييز ومجمعات البيانات لدينا على طرق يمكن أن تساعدك هنا. يمكنك استخدام `padding="max_length"` أو `padding="longest"` عند استدعاء طرق التمييز للحصول على بيانات مقسمة. تحتوي طرق التمييز ومجمعات البيانات لدينا أيضًا على حجة `pad_to_multiple_of` التي يمكنك استخدامها لتقليل عدد الأشكال الفريدة للإدخال التي تشاهدها! + + + +### كيف أقوم بتدريب نموذجي بالفعل على وحدة TPU؟ + +بمجرد أن يصبح تدريبك متوافقًا مع XLA (وإذا كنت تستخدم عقدة TPU / Colab) وتم إعداد مجموعة بياناتك بشكل مناسب، فإن التشغيل على وحدة TPU يكون سهلاً بشكل مدهش! كل ما تحتاج إلى تغييره حقًا في كودك هو إضافة بضع أسطر لتهيئة وحدة TPU الخاصة بك، والتأكد من إنشاء نموذجك ومجموعة بياناتك داخل نطاق `TPUStrategy`. الق نظرة على [دفتر ملاحظات مثال TPU](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/tpu_training-tf.ipynb) لمشاهدة ذلك في الواقع! + +### الخلاصة + +كان هناك الكثير هنا، لذا دعونا نلخص بقائمة مراجعة سريعة يمكنك اتباعها عندما تريد إعداد نموذجك للتدريب على TPU: + +- تأكد من اتباع تعليماتك لقواعد XLA الثلاثة +- قم بتجميع نموذجك باستخدام `jit_compile=True` على CPU/GPU وتأكد من أنه يمكنك تدريبه باستخدام XLA +- إما تحميل مجموعة البيانات الخاصة بك في الذاكرة أو استخدام نهج تحميل مجموعة البيانات المتوافق مع TPU (راجع [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/tpu_training-tf.ipynb)) +- قم بترحيل تعليماتك البرمجية إما إلى Colab (مع تعيين المعجل إلى "TPU") أو جهاز ظاهري TPU على Google Cloud +- إضافة رمز بادئ TPU (راجع [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/tpu_training-tf.ipynb)) +- إنشاء `TPUStrategy` الخاص بك والتأكد من أن تحميل مجموعة البيانات وإنشاء النموذج داخل `strategy.scope()` (راجع [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/tpu_training-tf.ipynb)) +- لا تنس أن تأخذ `jit_compile=True` مرة أخرى عندما تنتقل إلى TPU! +- 🙏🙏🙏🥺🥺🥺 +- استدعاء model.fit() +- لقد فعلت ذلك! \ No newline at end of file From 043596987d3f0fb17620d993bd9fc448dad89139 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:24 +0300 Subject: [PATCH 051/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/performance.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/performance.md | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/source/ar/performance.md diff --git a/docs/source/ar/performance.md b/docs/source/ar/performance.md new file mode 100644 index 00000000000000..d9de8227eaff7d --- /dev/null +++ b/docs/source/ar/performance.md @@ -0,0 +1,42 @@ +# الأداء وقابلية التوسع + +يتطلب تدريب نماذج المحول الكبيرة ونشرها في الإنتاج تحديات مختلفة. أثناء التدريب، قد يتطلب النموذج ذاكرة GPU أكبر مما هو متاح أو يظهر سرعة تدريب بطيئة. في مرحلة النشر، قد يواجه النموذج صعوبة في التعامل مع الإنتاجية المطلوبة في بيئة الإنتاج. + +تهدف هذه الوثيقة إلى مساعدتك في التغلب على هذه التحديات وإيجاد الإعداد الأمثل لحالتك الاستخدام. يتم تقسيم الأدلة إلى أقسام التدريب والاستدلال، حيث يأتي كل منها بتحديات وحلول مختلفة. في كل قسم، ستجد أدلة منفصلة لتكوينات الأجهزة المختلفة، مثل GPU واحد مقابل GPU متعدد للتدريب أو وحدة المعالجة المركزية (CPU) مقابل GPU للاستدلال. + +استخدم هذه الوثيقة كنقطة انطلاق للانتقال إلى الأساليب التي تتوافق مع سيناريوك. + +## تدريب + +يتطلب التدريب الفعال لنماذج المحول الكبيرة مسرعًا مثل وحدة معالجة الرسومات (GPU) أو وحدة معالجة الرسومات المبرمجة (TPU). الحالة الأكثر شيوعًا هي عندما يكون لديك وحدة معالجة رسومات واحدة. يمكن تطبيق الطرق التي يمكنك استخدامها لتحسين كفاءة التدريب على وحدة معالجة رسومات واحدة على إعدادات أخرى مثل وحدة معالجة الرسومات المتعددة. ومع ذلك، هناك أيضًا تقنيات خاصة بوحدة معالجة الرسومات المتعددة أو التدريب على وحدة المعالجة المركزية (CPU). نغطيها في أقسام منفصلة. + +* [أساليب وأدوات التدريب الفعال على وحدة معالجة الرسومات (GPU) واحدة](perf_train_gpu_one): ابدأ من هنا لمعرفة الأساليب الشائعة التي يمكن أن تساعد في تحسين استخدام ذاكرة وحدة معالجة الرسومات (GPU)، أو تسريع التدريب، أو كليهما. +* [قسم التدريب متعدد وحدات معالجة الرسومات (GPU)](perf_train_gpu_many): استكشف هذا القسم لمعرفة المزيد من طرق التحسين التي تنطبق على إعدادات وحدة معالجة الرسومات (GPU) المتعددة، مثل موازاة البيانات، والمؤشرات، والخطوط. +* [قسم التدريب على وحدة المعالجة المركزية (CPU)](perf_train_cpu): تعرف على التدريب على الدقة المختلطة على وحدة المعالجة المركزية (CPU). +* [التدريب الفعال على وحدات المعالجة المركزية (CPU) المتعددة](perf_train_cpu_many): تعرف على التدريب الموزع على وحدة المعالجة المركزية (CPU). +* [التدريب على وحدة معالجة الرسومات المبرمجة (TPU) باستخدام TensorFlow](perf_train_tpu_tf): إذا كنت جديدًا على وحدات معالجة الرسومات المبرمجة (TPU)، فارجع إلى هذا القسم للحصول على مقدمة موجهة للتدريب على وحدات معالجة الرسومات المبرمجة (TPU) واستخدام XLA. +* [الأجهزة المخصصة للتدريب](perf_hardware): احصل على نصائح وحيل عند بناء جهاز التعلم العميق الخاص بك. +* [بحث فراغي باستخدام واجهة برمجة التطبيقات Trainer](hpo_train) + +## الاستدلال + +يمكن أن يكون الاستدلال الفعال باستخدام نماذج كبيرة في بيئة إنتاج أمرًا صعبًا مثل تدريبها. في الأقسام التالية، نتعرف على الخطوات اللازمة لتشغيل الاستدلال على وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات (GPU) واحدة/متعددة. + +* [الاستدلال على وحدة المعالجة المركزية (CPU) واحدة](perf_infer_cpu) +* [الاستدلال على وحدة معالجة الرسومات (GPU) واحدة](perf_infer_gpu_one) +* [الاستدلال متعدد وحدات معالجة الرسومات (GPU)](perf_infer_gpu_one) +* [تكامل XLA لنماذج TensorFlow](tf_xla) + + +## التدريب والاستدلال + +هنا ستجد تقنيات ونصائح وحيل تنطبق سواء كنت تدرب نموذجًا، أو تقوم بالاستدلال باستخدامه. + +* [إنشاء نموذج كبير](big_models) +* [استكشاف أخطاء مشكلات الأداء](debugging) + +## المساهمة + +هذه الوثيقة بعيدة عن الاكتمال وهناك الكثير مما يجب إضافته، لذا إذا كان لديك إضافات أو تصحيحات لإجرائها، فالرجاء عدم التردد في فتح PR أو إذا لم تكن متأكدًا، ابدأ في Issue ويمكننا مناقشة التفاصيل هناك. + +عند إجراء مساهمات أن A أفضل من B، يرجى محاولة تضمين معيار قابل للتكرار و/أو رابط لمصدر تلك المعلومات (ما لم تأتي مباشرة منك). \ No newline at end of file From 04af667fab128c9cb8144a50f7d3d27232bd886c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:26 +0300 Subject: [PATCH 052/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/pipeline=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/pipeline_tutorial.md | 316 ++++++++++++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100644 docs/source/ar/pipeline_tutorial.md diff --git a/docs/source/ar/pipeline_tutorial.md b/docs/source/ar/pipeline_tutorial.md new file mode 100644 index 00000000000000..45dd025f7cdf11 --- /dev/null +++ b/docs/source/ar/pipeline_tutorial.md @@ -0,0 +1,316 @@ +# خطوط الأنابيب للاستنتاج + +يجعل [`pipeline`] من السهل استخدام أي نموذج من [Hub](https://huggingface.co/models) للاستنتاج لأي مهام خاصة باللغة أو الرؤية الحاسوبية أو الكلام أو متعددة الوسائط. حتى إذا لم يكن لديك خبرة في طريقة معينة أو لم تكن على دراية بالرمز الأساسي وراء النماذج، فيمكنك لا تزال استخدامها للاستنتاج باستخدام [`pipeline`]! سوف يُعلمك هذا البرنامج التعليمي ما يلي: + +* استخدام [`pipeline`] للاستنتاج. +* استخدم محللًا أو نموذجًا محددًا. +* استخدم [`pipeline`] للمهام الصوتية والبصرية والمتعددة الوسائط. + + + +الق نظرة على وثائق [`pipeline`] للحصول على قائمة كاملة بالمهام المدعومة والمعلمات المتاحة. + + + +## استخدام الأنابيب + +على الرغم من أن لكل مهمة خط أنابيب [`pipeline`] مرتبط بها، إلا أنه من الأبسط استخدام تجريد خط الأنابيب العام [`pipeline`] الذي يحتوي على جميع خطوط الأنابيب الخاصة بالمهمة. يقوم [`pipeline`] تلقائيًا بتحميل نموذج افتراضي وفئة معالجة مسبقة قادرة على الاستدلال لمهمتك. دعنا نأخذ مثال استخدام [`pipeline`] للتعرف التلقائي على الكلام (ASR)، أو تحويل الكلام إلى نص. + +1. ابدأ بإنشاء [`pipeline`] وحدد مهمة الاستدلال: + +```py +>>> from transformers import pipeline + +>>> transcriber = pipeline(task="automatic-speech-recognition") +``` + +2. مرر إدخالك إلى [`pipeline`]. في حالة التعرف على الكلام، يكون هذا ملف إدخال صوتي: + +```py +>>> transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac") +{'text': 'I HAVE A DREAM BUT ONE DAY THIS NATION WILL RISE UP LIVE UP THE TRUE MEANING OF ITS TREES'} +``` + +هل هذه هي النتيجة التي كنت تبحث عنها؟ تحقق من بعض [نماذج التعرف على الكلام الأكثر تنزيلًا](https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&sort=trending) +على Hub لمعرفة ما إذا كان بإمكانك الحصول على نسخة منقحة أفضل. + +دعونا نجرب نموذج [Whisper large-v2](https://huggingface.co/openai/whisper-large) من OpenAI. تم إصدار Whisper بعد عامين من إصدار Wav2Vec2، وتم تدريبه على ما يقرب من 10 أضعاف كمية البيانات. وبهذه الصفة، فإنه يتفوق على Wav2Vec2 في معظم المعايير المرجعية لأسفل البئر. كما أن لديها الفائدة الإضافية المتمثلة في التنبؤ بعلامات الترقيم وعلامات الحالة، والتي لا يمكن تحقيقها مع Wav2Vec2. + +دعونا نجربها هنا لنرى كيف تؤدي: + +```py +>>> transcriber = pipeline(model="openai/whisper-large-v2") +>>> transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac") +{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.'} +``` + +الآن تبدو هذه النتيجة أكثر دقة! للحصول على مقارنة متعمقة حول Wav2Vec2 مقابل Whisper، راجع [دورة Audio Transformers](https://huggingface.co/learn/audio-course/chapter5/asr_models). +نحن نشجعك بشدة على التحقق من Hub للحصول على نماذج بلغات مختلفة، ونماذج متخصصة في مجالك، وأكثر من ذلك. +يمكنك التحقق من نتائج النموذج ومقارنتها مباشرة من متصفحك على Hub لمعرفة ما إذا كان يناسبها +أو التعامل مع الحالات الحدية بشكل أفضل من غيرها. +وإذا لم تجد نموذجًا لحالتك الاستخدام، فيمكنك دائمًا البدء في [التدريب](training) الخاص بك! + +إذا كان لديك عدة مدخلات، فيمكنك تمرير إدخالك كقائمة: +إذا كان لديك عدة مدخلات، فيمكنك تمرير إدخالك كقائمة: + +```py +transcriber( + [ + "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac", + "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac", + ] +) +``` + +تعد خطوط الأنابيب رائعة للتجريب نظرًا لأن التبديل من نموذج إلى آخر أمر بسيط؛ ومع ذلك، هناك بعض الطرق لتحسينها لأحمال عمل أكبر من التجريب. راجع الأدلة التالية التي تتناول بالتفصيل التكرار عبر مجموعات البيانات الكاملة أو استخدام خطوط الأنابيب في خادم ويب: +من الوثائق: +* [استخدام خطوط الأنابيب على مجموعة بيانات](#using-pipelines-on-a-dataset) +* [استخدام خطوط الأنابيب لخادم ويب](./pipeline_webserver) + +## المعلمات + +يدعم [`pipeline`] العديد من المعلمات؛ بعضها خاص بالمهمة، والبعض الآخر عام لجميع خطوط الأنابيب. +بشكل عام، يمكنك تحديد المعلمات في أي مكان تريده: + +```py +transcriber = pipeline(model="openai/whisper-large-v2", my_parameter=1) + +out = transcriber(...) # سيتم استخدام هذا `my_parameter=1`. +out = transcriber(..., my_parameter=2) # سيتم تجاوز هذا واستخدام `my_parameter=2`. +out = transcriber(...) # سيتم الرجوع إلى استخدام `my_parameter=1`. +``` + +دعونا نلقي نظرة على 3 مهمة: + +### الجهاز + +إذا كنت تستخدم `device=n`، فإن خط الأنابيب يضع النموذج تلقائيًا على الجهاز المحدد. +سيعمل هذا بغض النظر عما إذا كنت تستخدم PyTorch أو Tensorflow. + +```py +transcriber = pipeline(model="openai/whisper-large-v2", device=0) +``` + +إذا كان النموذج كبيرًا جدًا بالنسبة لوحدة معالجة الرسومات (GPU) واحدة، وأنت تستخدم PyTorch، فيمكنك تعيين `torch_dtype='float16'` لتمكين الاستدلال بدقة FP16. عادةً ما لا يتسبب ذلك في حدوث انخفاضات كبيرة في الأداء، ولكن تأكد من تقييمه على نماذجك! + +بدلاً من ذلك، يمكنك تعيين `device_map="auto"` لتحديد كيفية تحميل مخزنات النموذج وتخزينها تلقائيًا. يتطلب استخدام حجة `device_map` حزمة 🤗 [Accelerate](https://huggingface.co/docs/accelerate): + +```bash +pip install --upgrade accelerate +``` + +تقوم الشفرة التالية بتحميل مخزنات النموذج وتخزينها تلقائيًا عبر الأجهزة: + +```py +transcriber = pipeline(model="openai/whisper-large-v2", device_map="auto") +``` + +لاحظ أنه إذا تم تمرير `device_map="auto"`، فلا توجد حاجة لإضافة حجة `device=device` عند إنشاء خط الأنابيب الخاص بك، فقد تواجه بعض السلوكيات غير المتوقعة! + +### حجم الدفعة + +بشكل افتراضي، لن تقوم خطوط الأنابيب بتجزئة الاستدلال لأسباب موضحة بالتفصيل [هنا](https://huggingface.co/docs/transformers/main_classes/pipelines#pipeline-batching). والسبب هو أن التجزئة ليست أسرع بالضرورة، ويمكن أن تكون أبطأ في الواقع في بعض الحالات. + +ولكن إذا نجحت في حالتك الاستخدام، فيمكنك استخدام ما يلي: + +```py +transcriber = pipeline(model="openai/whisper-large-v2", device=0, batch_size=2) +audio_filenames = [f"https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/{i}.flac" for i in range(1, 5)] +texts = transcriber(audio_filenames) +``` + +هذا يشغل خط الأنابيب على ملفات الصوت الأربعة المقدمة، ولكنه سيمررها في دفعات من 2 +إلى النموذج (الذي يوجد على وحدة معالجة الرسومات (GPU)، حيث من المرجح أن تساعد التجزئة) دون الحاجة إلى أي رمز إضافي منك. +يجب أن تتطابق الإخراج دائمًا مع ما كنت ستحصل عليه دون التجزئة. المقصود منه فقط كطريقة لمساعدتك في الحصول على مزيد من السرعة من خط الأنابيب. + +يمكن لخطوط الأنابيب أيضًا تخفيف بعض تعقيدات التجزئة لأنه، بالنسبة لبعض خطوط الأنابيب، يجب تقسيم عنصر واحد (مثل ملف صوتي طويل) إلى أجزاء متعددة لمعالجته بواسطة نموذج. يقوم خط الأنابيب بأداء هذه التجزئة [*batch batching*](./main_classes/pipelines#pipeline-chunk-batching) نيابة عنك. + +### معلمات خاصة بالمهمة + +توفر جميع المهام معلمات خاصة بالمهمة تتيح المرونة والخيارات الإضافية لمساعدتك في أداء عملك. +على سبيل المثال، تحتوي طريقة [`transformers.AutomaticSpeechRecognitionPipeline.__call__`] على معلمة `return_timestamps` التي تبدو واعدة لترجمة مقاطع الفيديو: +```py +>>> transcriber = pipeline(model="openai/whisper-large-v2", return_timestamps=True) +>>> transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac") +{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.', 'chunks': [{'timestamp': (0.0, 11.88), 'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its'}, {'timestamp': (11.88, 12.38), 'text': ' creed.'}]} +``` + +كما ترون، استنتج النموذج النص وأخرج أيضًا **متى** تم نطق الجمل المختلفة. + +تتوفر العديد من المعلمات لكل مهمة، لذا تحقق من مرجع API لكل مهمة لمعرفة ما يمكنك العبث به! +على سبيل المثال، تحتوي [`~transformers.AutomaticSpeechRecognitionPipeline`] على معلمة `chunk_length_s` مفيدة +للعمل على ملفات الصوت الطويلة جدًا (على سبيل المثال، ترجمة الأفلام أو مقاطع الفيديو التي تستغرق ساعة) والتي لا يمكن للنموذج التعامل معها بمفرده: + +```python +>>> transcriber = pipeline(model="openai/whisper-large-v2", chunk_length_s=30) +>>> transcriber("https://huggingface.co/datasets/reach-vb/random-audios/resolve/main/ted_60.wav") +{'text': " So in college, I was a government major, which means I had to write a lot of papers. Now, when a normal student writes a paper, they might spread the work out a little like this. So, you know. You get started maybe a little slowly, but you get enough done in the first week that with some heavier days later on, everything gets done and things stay civil. And I would want to do that like that. That would be the plan. I would have it all ready to go, but then actually the paper would come along, and then I would kind of do this. And that would happen every single paper. But then came my 90-page senior thesis, a paper you're supposed to spend a year on. I knew for a paper like that, my normal workflow was not an option, it was way too big a project. So I planned things out and I decided I kind of had to go something like this. This is how the year would go. So I'd start off light and I'd bump it up"} +``` + +إذا لم تتمكن من العثور على معلمة قد تساعدك حقًا، فلا تتردد في [طلبها](https://github.com/huggingface/transformers/issues/new?assignees=&labels=feature&template=feature-request.yml)! + + +## استخدام خطوط الأنابيب على مجموعة بيانات + +يمكن أيضًا تشغيل خط الأنابيب للاستدلال على مجموعة بيانات كبيرة. أسهل طريقة نوصي بها للقيام بذلك هي باستخدام مؤشر: + +```py +def data(): + for i in range(1000): + yield f"My example {i}" + + +pipe = pipeline(model="openai-community/gpt2", device=0) +generated_characters = 0 +for out in pipe(data()): + generated_characters += len(out[0]["generated_text"]) +``` + +يقوم المؤشر `data()` بإرجاع كل نتيجة، ويعترف خط الأنابيب تلقائيًا +الإدخال قابل للتحديد ويبدأ في جلب البيانات أثناء +يستمر في معالجتها على وحدة معالجة الرسومات (GPU) (يستخدم هذا [DataLoader](https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader) تحت الغطاء). +هذا أمر مهم لأنك لا تحتاج إلى تخصيص ذاكرة لمجموعة البيانات بأكملها +ويمكنك تغذية وحدة معالجة الرسومات (GPU) بأسرع ما يمكن. + +نظرًا لأن التجزئة قد تسرع الأمور، فقد يكون من المفيد ضبط معلمة `batch_size` هنا. + +أبسط طريقة للتنقل خلال مجموعة بيانات هي فقط تحميل واحدة من 🤗 [Datasets](https://github.com/huggingface/datasets/): + +```py +# KeyDataset هي أداة مساعدة ستقوم فقط بإخراج العنصر الذي نهتم به. +from transformers.pipelines.pt_utils import KeyDataset +from datasets import load_dataset + +pipe = pipeline(model="hf-internal-testing/tiny-random-wav2vec2", device=0) +dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation[:10]") + +for out in pipe(KeyDataset(dataset, "audio")): + print(out) +``` + +## استخدام خطوط الأنابيب لخادم ويب + + +إن إنشاء محرك استدلال هو موضوع معقد يستحق صفحته الخاصة. + + +[Link](./pipeline_webserver) + +## خط أنابيب الرؤية + +إن استخدام [`pipeline`] لمهام الرؤية مماثل تمامًا. + +حدد مهمتك ومرر صورتك إلى المصنف. يمكن أن تكون الصورة رابطًا أو مسارًا محليًا أو صورة مشفرة بتنسيق base64. على سبيل المثال، ما نوع القطط الموضح أدناه؟ + +![pipeline-cat-chonk](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg) + +```py +>>> from transformers import pipeline + +>>> vision_classifier = pipeline(model="google/vit-base-patch16-224") +>>> preds = vision_classifier( +... images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg" +... ) +>>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds] +>>> preds +[{'score': 0.4335, 'label': 'lynx, catamount'}, {'score': 0.0348, 'label': 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor'}, {'score': 0.0324, 'label': 'snow leopard, ounce, Panthera uncia'}, {'score': 0.0239, 'label': 'Egyptian cat'}, {'score': 0.0229, 'label': 'tiger cat'}] +``` + +## خط أنابيب النص + +إن استخدام [`pipeline`] لمهام NLP مماثل تمامًا. + +```py +>>> from transformers import pipeline + +>>> # هذا النموذج هو نموذج "zero-shot-classification". +>>> # سيصنف النص، ولكن يمكنك اختيار أي تسمية قد تتخيلها +>>> classifier = pipeline(model="facebook/bart-large-mnli") +>>> classifier( +... "I have a problem with my iphone that needs to be resolved asap!!", +... candidate_labels=["urgent", "not urgent", "phone", "tablet", "computer"], +... ) +{'sequence': 'I have a problem with my iphone that needs to be resolved asap!!', 'labels': ['urgent', 'phone', 'computer', 'not urgent', 'tablet'], 'scores': [0.504, 0.479, 0.013, 0.003, 0.002]} +``` + +## خط أنابيب متعدد الوسائط + +تدعم [`pipeline`] أكثر من طريقة واحدة. على سبيل المثال، تجمع مهمة الإجابة على الأسئلة المرئية (VQA) بين النص والصورة. لا تتردد في استخدام أي رابط صورة تريده وسؤال تريد طرحه حول الصورة. يمكن أن تكون الصورة عنوان URL أو مسارًا محليًا للصورة. + +على سبيل المثال، إذا كنت تستخدم هذه [صورة الفاتورة](https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png): + +```py +>>> from transformers import pipeline + +>>> vqa = pipeline(model="impira/layoutlm-document-qa") +>>> output = vqa( +... image="https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png", +... question="What is the invoice number?", +... ) +>>> output[0]["score"] = round(output[0]["score"], 3) +>>> output +[{'score': 0.425, 'answer': 'us-001', 'start': 16, 'end': 16}] +``` + + + +لتشغيل المثال أعلاه، تحتاج إلى تثبيت [`pytesseract`](https://pypi.org/project/pytesseract/) بالإضافة إلى 🤗 Transformers: + +```bash +sudo apt install -y tesseract-ocr +pip install pytesseract +``` + + + +## استخدام `pipeline` على نماذج كبيرة مع 🤗 `accelerate`: + +يمكنك بسهولة تشغيل `pipeline` على نماذج كبيرة باستخدام 🤗 `accelerate`! أولاً، تأكد من تثبيت `accelerate` باستخدام `pip install accelerate`. + +قم أولاً بتحميل نموذجك باستخدام `device_map="auto"`! سنستخدم `facebook/opt-1.3b` كمثال لنا. + +```py +# pip install accelerate +import torch +from transformers import pipeline + +pipe = pipeline(model="facebook/opt-1.3b", torch_dtype=torch.bfloat16, device_map="auto") +output = pipe("This is a cool example!", do_sample=True, top_p=0.95) +``` + +يمكنك أيضًا تمرير نماذج محملة بـ 8 بت إذا قمت بتثبيت `bitsandbytes` وإضافة الحجة `load_in_8bit=True` + +```py +# pip install accelerate bitsandbytes +import torch +from transformers import pipeline + +pipe = pipeline(model="facebook/opt-1.3b", device_map="auto", model_kwargs={"load_in_8bit": True}) +output = pipe("This is a cool example!", do_sample=True, top_p=0.95) +``` + +لاحظ أنه يمكنك استبدال نقطة التفتيش بأي نموذج من Hugging Face يدعم تحميل النماذج الكبيرة، مثل BLOOM. + +## إنشاء عروض توضيحية ويب من خطوط الأنابيب باستخدام `gradio` + +يتم دعم خطوط الأنابيب تلقائيًا في [Gradio](https://github.com/gradio-app/gradio/)، وهي مكتبة تجعل إنشاء تطبيقات تعليم الآلة الجميلة والسهلة الاستخدام على الويب أمرًا سهلاً. أولاً، تأكد من تثبيت Gradio: + +``` +pip install gradio +``` + +بعد ذلك، يمكنك إنشاء عرض توضيحي ويب حول خط أنابيب تصنيف الصور (أو أي خط أنابيب آخر) في سطر واحد من التعليمات البرمجية عن طريق استدعاء وظيفة [`Interface.from_pipeline`](https://www.gradio.app/docs/interface#interface-from-pipeline) في Gradio لإطلاق خط الأنابيب. يقوم هذا بإنشاء واجهة بديهية للسحب والإفلات في مستعرضك: + +```py +from transformers import pipeline +import gradio as gr + +pipe = pipeline("image-classification", model="google/vit-base-patch16-224") + +gr.Interface.from_pipeline(pipe).launch() +``` + + +![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/panda-classification.png) + +بشكل افتراضي، يعمل العرض التوضيحي على خادم محلي. إذا كنت تريد مشاركتها مع الآخرين، فيمكنك إنشاء رابط عام مؤقت عن طريق تعيين `share=True` في `launch()`. يمكنك أيضًا استضافة عرضك التوضيحي على [Hugging Face Spaces](https://huggingface.co/spaces) للحصول على رابط دائم. \ No newline at end of file From f864e2bd805d580107f8c722a08800ced34812d3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:28 +0300 Subject: [PATCH 053/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/pr=5Fchecks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/pr_checks.md | 185 ++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 docs/source/ar/pr_checks.md diff --git a/docs/source/ar/pr_checks.md b/docs/source/ar/pr_checks.md new file mode 100644 index 00000000000000..47acadf65c3ad0 --- /dev/null +++ b/docs/source/ar/pr_checks.md @@ -0,0 +1,185 @@ +# الفحوصات على طلب سحب (Pull Request) + +عند فتح طلب سحب على 🤗 Transformers، سيتم تشغيل عدد كبير من الفحوصات للتأكد من أن التصحيح الذي تقوم بإضافته لا يتسبب في كسر أي شيء موجود. وتنقسم هذه الفحوصات إلى أربعة أنواع: +- الاختبارات العادية +- بناء الوثائق +- أسلوب كتابة الكود والوثائق +- اتساق المستودع العام + +في هذه الوثيقة، سنحاول شرح ماهية هذه الفحوصات المختلفة والسبب وراءها، بالإضافة إلى كيفية تصحيح الأخطاء فيها محلياً في حال فشل أحدها في طلب السحب الخاص بك. + +ملاحظة: من الناحية المثالية، تتطلب هذه الفحوصات أن يكون لديك تثبيت تطويري: + +```bash +pip install transformers[dev] +``` + +أو لتثبيت قابل للتحرير: + +```bash +pip install -e .[dev] +``` + +داخل مستودع Transformers. نظرًا لأن عدد التبعيات الاختيارية لـ Transformers قد زاد بشكل كبير، فمن المحتمل ألا تتمكن من الحصول عليها جميعًا. إذا فشل التثبيت الإنمائي، فتأكد من تثبيت إطار عمل التعلم العميق الذي تعمل به (PyTorch أو TensorFlow و/أو Flax) ثم قم بتشغيل الأمر التالي: + +```bash +pip install transformers[quality] +``` + +أو لتثبيت قابل للتحرير: + +```bash +pip install -e .[quality] +``` + +## الاختبارات + +جميع الوظائف التي تبدأ بـ `ci/circleci: run_tests_` تقوم بتشغيل أجزاء من مجموعة اختبارات Transformers. يركز كل من هذه الوظائف على جزء من المكتبة في بيئة معينة: على سبيل المثال، تقوم وظيفة `ci/circleci: run_tests_pipelines_tf` بتشغيل اختبار الأنابيب في بيئة مثبت فيها TensorFlow فقط. + +ملاحظة: لتجنب تشغيل الاختبارات عندما لا يكون هناك تغيير حقيقي في الوحدات النمطية التي تختبرها، يتم تشغيل جزء فقط من مجموعة الاختبارات في كل مرة: يتم تشغيل أداة مساعدة لتحديد الاختلافات في المكتبة بين ما قبل وما بعد طلب السحب (ما يعرضه GitHub في علامة التبويب "تغييرات الملفات") ويختار الاختبارات التي تأثرت بهذا الاختلاف. يمكن تشغيل هذه الأداة المساعدة محليًا باستخدام الأمر التالي: + +```bash +python utils/tests_fetcher.py +``` + +من جذر مستودع Transformers. ستقوم بما يلي: + +1. التحقق من كل ملف في الاختلافات إذا كانت التغييرات في الكود أو فقط في التعليقات أو التوثيق. يتم الاحتفاظ فقط بالملفات التي بها تغييرات حقيقية في الكود. +2. إنشاء خريطة داخلية تعطي لكل ملف من ملفات كود المصدر للمكتبة جميع الملفات التي تؤثر عليها بشكل متكرر. يقال إن الوحدة النمطية أ تؤثر على الوحدة النمطية ب إذا كانت الوحدة النمطية ب تستورد الوحدة النمطية أ. بالنسبة للتأثير المتكرر، نحتاج إلى سلسلة من الوحدات النمطية التي تنتقل من الوحدة النمطية أ إلى الوحدة النمطية ب والتي تستورد كل منها الوحدة النمطية السابقة. +3. تطبيق هذه الخريطة على الملفات التي تم جمعها في الخطوة 1، والتي تعطينا قائمة بملفات النموذج التي تأثرت بطلب السحب. +4. تعيين كل من هذه الملفات إلى ملف (ملفات) الاختبار المقابلة والحصول على قائمة الاختبارات التي سيتم تشغيلها. + +عند تنفيذ البرنامج النصي محليًا، يجب أن تحصل على نتائج الخطوات 1 و3 و4 مطبوعة وبالتالي معرفة الاختبارات التي يتم تشغيلها. كما سيقوم البرنامج النصي بإنشاء ملف باسم `test_list.txt` يحتوي على قائمة الاختبارات التي سيتم تشغيلها، ويمكنك تشغيلها محليًا باستخدام الأمر التالي: + +```bash +python -m pytest -n 8 --dist=loadfile -rA -s $(cat test_list.txt) +``` + +وللتأكد فقط، يتم أيضًا تشغيل مجموعة الاختبارات الكاملة يوميًا. + +## بناء الوثائق +```bash +python -m pytest -n 8 --dist=loadfile -rA -s $(cat test_list.txt) +``` + +وللتأكد فقط، يتم أيضًا تشغيل مجموعة الاختبارات الكاملة يوميًا. + +## بناء الوثائق + +تقوم وظيفة `build_pr_documentation` ببناء وإنشاء معاينة للوثائق للتأكد من أن كل شيء يبدو على ما يرام بمجرد دمج طلب السحب الخاص بك. سيقوم بوت بإضافة رابط لمعاينة الوثائق في طلب السحب الخاص بك. يتم تحديث أي تغييرات تجريها على طلب السحب تلقائيًا في المعاينة. إذا فشلت عملية بناء الوثائق، فانقر فوق **تفاصيل** بجانب الوظيفة الفاشلة لمعرفة أين حدث الخطأ. غالبًا ما يكون الخطأ بسيطًا مثل ملف مفقود في `toctree`. + +إذا كنت مهتمًا ببناء أو معاينة الوثائق محليًا، فراجع ملف [`README.md`](https://github.com/huggingface/transformers/tree/main/docs) في مجلد الوثائق. + +## أسلوب كتابة الكود والوثائق + +يتم تطبيق تنسيق الكود على جميع ملفات المصدر والأمثلة والاختبارات باستخدام `black` و`ruff`. لدينا أيضًا أداة مخصصة للعناية بتنسيق التوثيقات وملفات `rst` (`utils/style_doc.py`)، وكذلك ترتيب الاستيراد الكسول الذي يتم تنفيذه في ملفات `__init__.py` الخاصة بـ Transformers (`utils/custom_init_isort.py`). يمكن إطلاق كل هذا عن طريق تنفيذ الأمر التالي: + +```bash +make style +``` + +وتتحقق CI من تطبيق هذه التنسيقات داخل فحص `ci/circleci: check_code_quality`. كما يقوم بتشغيل `ruff`، الذي سيلقي نظرة أساسية على كودك وسيشتكي إذا وجد متغيرًا غير معرف، أو متغيرًا غير مستخدم. لتشغيل هذا الفحص محليًا، استخدم الأمر التالي: + +```bash +make quality +``` + +قد يستغرق هذا الكثير من الوقت، لذا لتشغيل نفس الشيء على الملفات التي قمت بتعديلها في الفرع الحالي فقط، قم بتشغيل الأمر التالي: + +```bash +make fixup +``` + +سيقوم هذا الأمر الأخير أيضًا بتشغيل جميع الفحوصات الإضافية لاتساق المستودع. دعونا نلقي نظرة عليها. + +## اتساق المستودع + +هذا يجمع جميع الاختبارات للتأكد من أن طلب السحب الخاص بك يترك المستودع في حالة جيدة، ويتم تنفيذه بواسطة فحص `ci/circleci: check_repository_consistency`. يمكنك تشغيل هذا الفحص محليًا عن طريق تنفيذ ما يلي: + +```bash +make repo-consistency +``` + +وهذا يتحقق من أن: + +- جميع الأشياء المضافة إلى init موثقة (يتم تنفيذها بواسطة `utils/check_repo.py`) +- تحتوي جميع ملفات `__init__.py` على نفس المحتوى في قسميها (يتم تنفيذها بواسطة `utils/check_inits.py`) +- جميع الأكواد المحددة على أنها نسخة من وحدة نمطية أخرى متسقة مع الأصل (يتم تنفيذها بواسطة `utils/check_copies.py`) +- تحتوي جميع فئات التهيئة على الأقل نقطة تفتيش صالحة مذكورة في توثيقاتها (يتم تنفيذها بواسطة `utils/check_config_docstrings.py`) +- تحتوي جميع فئات التهيئة فقط على السمات المستخدمة في ملفات النمذجة المقابلة (يتم تنفيذها بواسطة `utils/check_config_attributes.py`) +- تحتوي ترجمات READMEs وفهرس الوثائق على نفس قائمة النماذج مثل README الرئيسي (يتم تنفيذها بواسطة `utils/check_copies.py`) +- الجداول التي يتم إنشاؤها تلقائيًا في الوثائق محدثة (يتم تنفيذها بواسطة `utils/check_table.py`) +- تحتوي المكتبة على جميع الأشياء المتاحة حتى إذا لم يتم تثبيت جميع التبعيات الاختيارية (يتم تنفيذها بواسطة `utils/check_dummies.py`) +- جميع التوثيقات توثق الحجج في توقيع الكائن بشكل صحيح (يتم تنفيذها بواسطة `utils/check_docstrings.py`) + +إذا فشل هذا الفحص، فإن العنصرين الأولين يتطلبان إصلاحًا يدويًا، ويمكن إصلاح العناصر الأربعة الأخيرة تلقائيًا عن طريق تشغيل الأمر التالي: + +```bash +make fix-copies +``` + +وتتعلق الفحوصات الإضافية بطلبات السحب التي تضيف نماذج جديدة، خاصةً أن: + +- جميع النماذج المضافة موجودة في خريطة تلقائية (يتم تنفيذها بواسطة `utils/check_repo.py`) + +- جميع النماذج تمت اختبارها بشكل صحيح (يتم تنفيذها بواسطة `utils/check_repo.py`) + + + +### فحص النسخ + +نظرًا لأن مكتبة Transformers لديها آراء قوية فيما يتعلق بكود النماذج، ويجب تنفيذ كل نموذج بالكامل في ملف واحد دون الاعتماد على نماذج أخرى، فقد أضفنا آلية للتحقق مما إذا كانت نسخة كود طبقة نموذج معين تظل متسقة مع الأصل. بهذه الطريقة، عندما يكون هناك إصلاح للأخطاء، يمكننا معرفة جميع النماذج الأخرى المتأثرة واختيار تمرير التعديل أو كسر النسخة. + + + +إذا كان الملف نسخة كاملة من ملف آخر، فيجب تسجيله في ثابت `FULL_COPIES` في ملف `utils/check_copies.py`. + + + +تعتمد هذه الآلية على التعليقات من النوع `# Copied from xxx`. يجب أن يحتوي `xxx` على المسار الكامل إلى الفئة أو الدالة التي يتم نسخها أدناه. على سبيل المثال، `RobertaSelfOutput` هي نسخة مباشرة من فئة `BertSelfOutput`، لذا يمكنك أن ترى [هنا](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L289) أنه يحتوي على تعليق: + +```py +# Copied from transformers.models.bert.modeling_bert.BertSelfOutput +``` + +ملاحظة: بدلاً من تطبيق هذا على فئة كاملة، يمكنك تطبيقه على الطرق ذات الصلة التي يتم نسخها من. على سبيل المثال [هنا](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L598) يمكنك أن ترى كيف يتم نسخ `RobertaPreTrainedModel._init_weights` من الطريقة نفسها في `BertPreTrainedModel` مع التعليق: + +```py +# Copied from transformers.models.bert.modeling_bert.BertPreTrainedModel._init_weights +``` + +في بعض الأحيان، تكون النسخة مطابقة تمامًا باستثناء الأسماء: على سبيل المثال في `RobertaAttention`، نستخدم `RobertaSelfAttention` بدلاً من `BertSelfAttention` ولكن بخلاف ذلك، يكون الكود مطابقًا تمامًا. ولهذا السبب يدعم `# Copied from` استبدالات السلاسل البسيطة بالبناء التالي: `Copied from xxx with foo->bar`. وهذا يعني أن الكود منسوخ مع جميع مثيلات `foo` التي يتم استبدالها بـ `bar`. يمكنك أن ترى كيف يتم استخدامه [هنا](https://github.com/huggingface/transformers/blob/2bd7a27a671fd1d98059124024f580f8f5c0f3b5/src/transformers/models/roberta/modeling_roberta.py#L304C1-L304C86) في `RobertaAttention` مع التعليق: + +```py +# Copied from transformers.models.bert.modeling_bert.BertAttention with Bert->Roberta +``` + +ملاحظة: لا ينبغي أن تكون هناك أي مسافات حول السهم (ما لم تكن المسافة جزءًا من النمط الذي سيتم استبداله بالطبع). + +يمكنك إضافة عدة أنماط مفصولة بفواصل. على سبيل المثال، هنا `CamemberForMaskedLM` هو نسخة مباشرة من `RobertaForMaskedLM` مع استبدالين: `Roberta` إلى `Camembert` و`ROBERTA` إلى `CAMEMBERT`. يمكنك أن ترى [هنا](https://github.com/huggingface/transformers/blob/15082a9dc6950ecae63a0d3e5060b2fc7f15050a/src/transformers/models/camembert/modeling_camembert.py#L929) كيف يتم ذلك مع التعليق: + +```py +# Copied from transformers.models.roberta.modeling_roberta.RobertaForMaskedLM with Roberta->Camembert, ROBERTA->CAMEMBERT +``` + +إذا كانت الأسبقية مهمة (لأن أحد الاستبدالات قد يتعارض مع استبدال سابق)، يتم تنفيذ الاستبدالات من اليسار إلى اليمين. + + + +إذا غيرت الاستبدالات التنسيق (إذا قمت باستبدال اسم قصير باسم طويل جدًا، على سبيل المثال)، يتم التحقق من النسخة بعد تطبيق التنسيق التلقائي. + + + +وهناك طريقة أخرى عندما تكون الأنماط مجرد أشكال مختلفة لحالة الاستبدال نفسها (مع متغيرات الأحرف الكبيرة والصغيرة) هي إضافة خيار `all-casing`. [هنا](https://github.com/huggingface/transformers/blob/15082a9dc6950ecae63a0d3e5060b2fc7f15050a/src/transformers/models/mobilebert/modeling_mobilebert.py#L1237) مثال في `MobileBertForSequenceClassification` مع التعليق: +```py +# Copied from transformers.models.bert.modeling_bert.BertForSequenceClassification with Bert->MobileBert all-casing +``` + +في هذه الحالة، يتم نسخ الكود من `BertForSequenceClassification` عن طريق استبدال ما يلي: +- `Bert` بـ `MobileBert` (على سبيل المثال عند استخدام `MobileBertModel` في التهيئة) +- `bert` بـ `mobilebert` (على سبيل المثال عند تحديد `self.mobilebert`) +- `BERT` بـ `MOBILEBERT` (في ثابت `MOBILEBERT_INPUTS_DOCSTRING`) \ No newline at end of file From 329e7c5bfe98268d895d74b7e56d02b4a10af49d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:30 +0300 Subject: [PATCH 054/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/preprocessing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/preprocessing.md | 391 ++++++++++++++++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 docs/source/ar/preprocessing.md diff --git a/docs/source/ar/preprocessing.md b/docs/source/ar/preprocessing.md new file mode 100644 index 00000000000000..b4bbda7a0b3c51 --- /dev/null +++ b/docs/source/ar/preprocessing.md @@ -0,0 +1,391 @@ +# معالجة مسبقة + +[[open-in-colab]] + +قبل أن تتمكن من تدريب نموذج على مجموعة بيانات، يجب معالجتها مسبقًا إلى تنسيق إدخال النموذج المتوقع. سواء كانت بياناتك نصية أو صورًا أو صوتًا، فيجب تحويلها وتجميعها في دفعات من المنسوجات. يوفر 🤗 Transformers مجموعة من فئات المعالجة المسبقة للمساعدة في إعداد بياناتك للنموذج. في هذا البرنامج التعليمي، ستتعلم أنه بالنسبة لـ: + +* للنص، استخدم [مُعرِّف الرموز](./main_classes/tokenizer) لتحويل النص إلى تسلسل من الرموز، وإنشاء تمثيل رقمي للرموز، وتجميعها في منسوجات. +* للكلام والصوت، استخدم [مستخرج الميزات](./main_classes/feature_extractor) لاستخراج ميزات متسلسلة من أشكال موجات الصوت وتحويلها إلى منسوجات. +* تستخدم مدخلات الصورة [ImageProcessor](./main_classes/image_processor) لتحويل الصور إلى منسوجات. +* تستخدم الإدخالات متعددة الوسائط [معالجًا](./main_classes/processors) لدمج مُعرِّف الرموز ومستخرج الميزات أو معالج الصور. + + + +`AutoProcessor` **يعمل دائمًا** ويختار تلقائيًا الفئة الصحيحة للنموذج الذي تستخدمه، سواء كنت تستخدم مُعرِّف رموز أو معالج صور أو مستخرج ميزات أو معالجًا. + + + +قبل البدء، قم بتثبيت 🤗 Datasets حتى تتمكن من تحميل بعض مجموعات البيانات لتجربتها: + +```bash +pip install datasets +``` + +## معالجة اللغة الطبيعية + + + +أداة المعالجة المسبقة الرئيسية للبيانات النصية هي [مُعرِّف الرموز](main_classes/tokenizer). يقوم مُعرِّف الرموز بتقسيم النص إلى *رموز* وفقًا لمجموعة من القواعد. يتم تحويل الرموز إلى أرقام ثم إلى منسوجات، والتي تصبح إدخالات النموذج. تتم إضافة أي إدخالات إضافية مطلوبة بواسطة النموذج بواسطة مُعرِّف الرموز. + + + +إذا كنت تخطط لاستخدام نموذج مُدرب مسبقًا، فمن المهم استخدام مُعرِّف الرموز المُدرب مسبقًا المقترن به. يضمن ذلك تقسيم النص بنفس الطريقة التي تم بها تقسيم مجموعة بيانات ما قبل التدريب، واستخدام نفس الرموز المقابلة للفهرس (يُشار إليها عادةً باسم *vocab*) أثناء التدريب المسبق. + + + +ابدأ بتحميل مُعرِّف رموز مُدرب مسبقًا باستخدام طريقة [`AutoTokenizer.from_pretrained`]. يقوم هذا بتنزيل *vocab* الذي تم تدريب النموذج عليه: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased") +``` + +ثم مرر نصك إلى مُعرِّف الرموز: + +```py +>>> encoded_input = tokenizer("Do not meddle in the affairs of wizards, for they are subtle and quick to anger.") +>>> print(encoded_input) +{'input_ids': [101, 2079, 2025, 19960, 10362, 1999, 1996, 3821, 1997, 16657, 1010, 2005, 2027, 2024, 11259, 1998, 4248, 2000, 4963, 1012, 102], + 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +``` + +يعيد مُعرِّف الرموز قاموسًا يحتوي على ثلاثة عناصر مهمة: + +* [input_ids](glossary#input-ids) هي الفهارس المقابلة لكل رمز في الجملة. +* [attention_mask](glossary#attention-mask) يشير إلى ما إذا كان يجب الاهتمام بالرمز أم لا. +* [token_type_ids](glossary#token-type-ids) يحدد التسلسل الذي ينتمي إليه الرمز عندما يكون هناك أكثر من تسلسل واحد. + +أعد إدخالك عن طريق فك ترميز `input_ids`: +أعد إدخالك عن طريق فك ترميز `input_ids`: + +```py +>>> tokenizer.decode(encoded_input["input_ids"]) +'[CLS] Do not meddle in the affairs of wizards, for they are subtle and quick to anger. [SEP]' +``` + +كما ترى، أضاف مُعرِّف الرموز رمزين خاصين - `CLS` و`SEP` (مصنف وفاصل) - إلى الجملة. لا تحتاج جميع النماذج إلى +رموز خاصة، ولكن إذا فعلوا ذلك، فإن مُعرِّف الرموز يضيفها تلقائيًا لك. + +إذا كان هناك عدة جمل تريد معالجتها مسبقًا، فقم بتمريرها كقائمة إلى مُعرِّف الرموز: + +```py +>>> batch_sentences = [ +... "But what about second breakfast?", +... "Don't think he knows about second breakfast, Pip.", +... "What about elevensies?", +... ] +>>> encoded_inputs = tokenizer(batch_sentences) +>>> print(encoded_inputs) +{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102], + [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], + [101, 1327, 1164, 5450, 23434, 136, 102]], + 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0]], + 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1]]} +``` + +### الحشو Padding + +ليست الجمل دائمًا بنفس الطول، والذي يمكن أن يكون مشكلة لأن المنسوجات، إدخالات النموذج، تحتاج إلى شكل موحد. التبطين هو استراتيجية لضمان أن تكون المنسوجات مستطيلة عن طريق إضافة رمز *padding* خاص إلى الجمل الأقصر. + +قم بتعيين معلمة `padding` إلى `True` لتبطين التسلسلات الأقصر في الدفعة لمطابقة التسلسل الأطول: + +```py +>>> batch_sentences = [ +... "But what about second breakfast?", +... "Don't think he knows about second breakfast, Pip.", +... "What about elevensies?", +... ] +>>> encoded_input = tokenizer(batch_sentences, padding=True) +>>> print(encoded_input) +{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0], + [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], + [101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]], + 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], + 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, Multiplier, 1, 1, 1, 1, 0، 0، 0، 0، 0، 0، 0، 0]]} +``` + +تم الآن تبطين الجملتين الأولى والثالثة بـ `0` لأنهما أقصر. + +### البتر Truncation + +من ناحية أخرى من الطيف، قد يكون التسلسل طويلًا جدًا بالنسبة للنموذج للتعامل معه. في هذه الحالة، ستحتاج إلى بتر التسلسل إلى طول أقصر. + +قم بتعيين معلمة `truncation` إلى `True` لتقليم تسلسل إلى الطول الأقصى الذي يقبله النموذج: + +```py +>>> batch_sentences = [ +... "But what about second breakfast?", +... "Don't think he knows about second breakfast, Pip.", +... "What about elevensies?", +... ] +>>> encoded_input = tokenizer(batch_sentences, padding=True, truncation=True) +>>> print(encoded_input) +{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0], + [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], + [101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]], + 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0، 0، 0، 0، 0]]، + 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0، 0، 0، 0], + [1, 1, 1, 1, 1, 1, 1، 1، 1، 1، 1، 1، 1، 1، 1، 1], + [1، 1، 1، 1، 1، 1، 1، 0، 0، 0، 0، 0، 0، 0، 0، 0]]} +``` + + + + +تحقق من دليل المفاهيم [Padding and truncation](./pad_truncation) لمعرفة المزيد حول وسادات وحجج البتر المختلفة. + + + +### بناء التنسرات Build tensors + +أخيرًا، تريد أن يقوم مُعرِّف الرموز بإرجاع التنسرات الفعلية التي يتم تغذيتها في النموذج. + +قم بتعيين معلمة `return_tensors` إلى إما `pt` لـ PyTorch، أو `tf` لـ TensorFlow: + + + + +```py +>>> batch_sentences = [ +... "But what about second breakfast?", +... "Don't think he knows about second breakfast, Pip.", +... "What about elevensies?", +... ] +>>> encoded_input = tokenizer(batch_sentences, padding=True, truncation=True, return_tensors="pt") +>>> print(encoded_input) +{'input_ids': tensor([[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0], + [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], + [101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]]), + 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), + 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]])} +``` + + +```py +>>> batch_sentences = [ +... "But what about second breakfast?", +... "Don't think he knows about second breakfast, Pip.", +... "What about elevensies?", +... ] +>>> encoded_input = tokenizer(batch_sentences, padding=True, truncation=True, return_tensors="tf") +>>> print(encoded_input) +{'input_ids': + +عادة ما تتبع معالجة الصور المسبقة شكلاً من أشكال زيادة الصور. كل من معالجة الصور المسبقة وزيادة الصور تحويل بيانات الصور، ولكنها تخدم أغراضًا مختلفة: + +* تغيير الصور عن طريق زيادة الصور بطريقة يمكن أن تساعد في منع الإفراط في التجهيز وزيادة متانة النموذج. يمكنك أن تكون مبدعًا في كيفية زيادة بياناتك - ضبط السطوع والألوان، والمحاصيل، والدوران، تغيير الحجم، التكبير، إلخ. ومع ذلك، كن حذرًا من عدم تغيير معنى الصور باستخدام الزيادات الخاصة بك. +* تضمن معالجة الصور المسبقة أن تتطابق الصور مع تنسيق الإدخال المتوقع للنموذج. عند ضبط نموذج رؤية الكمبيوتر بدقة، يجب معالجة الصور بالضبط كما كانت عند تدريب النموذج لأول مرة. + +يمكنك استخدام أي مكتبة تريدها لزيادة الصور. لمعالجة الصور المسبقة، استخدم `ImageProcessor` المرتبط بالنموذج. + + + +قم بتحميل مجموعة بيانات [food101](https://huggingface.co/datasets/food101) (راجع دليل 🤗 [Datasets tutorial](https://huggingface.co/docs/datasets/load_hub) لمزيد من التفاصيل حول كيفية تحميل مجموعة بيانات) لمعرفة كيف يمكنك استخدام معالج الصور مع مجموعات بيانات رؤية الكمبيوتر: + + + +استخدم معلمة `split` من 🤗 Datasets لتحميل عينة صغيرة فقط من الانقسام التدريبي نظرًا لأن مجموعة البيانات كبيرة جدًا! + + + +```py +>>> from datasets import load_dataset + +>>> dataset = load_dataset("food101", split="train[:100]") +``` + +بعد ذلك، الق نظرة على الصورة مع ميزة 🤗 Datasets [`Image`](https://huggingface.co/docs/datasets/package_reference/main_classes?highlight=image#datasets.Image): + +```py +>>> dataset[0]["image"] +``` + +
+ +
+ +قم بتحميل معالج الصور باستخدام [`AutoImageProcessor.from_pretrained`]: + +```py +>>> from transformers import AutoImageProcessor + +>>> image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224") +``` + +أولاً، دعنا نضيف بعض الزيادات إلى الصور. يمكنك استخدام أي مكتبة تفضلها، ولكن في هذا الدليل، سنستخدم وحدة [`transforms`](https://pytorch.org/vision/stable/transforms.html) من torchvision. إذا كنت مهتمًا باستخدام مكتبة زيادة بيانات أخرى، فتعرف على كيفية القيام بذلك في [دفاتر Albumentations](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification_albumentations.ipynb) أو [دفاتر Kornia](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification_kornia.ipynb). + +1. هنا نستخدم [`Compose`](https://pytorch.org/vision/master/generated/torchvision.transforms.Compose.html) لربط بعض التحولات معًا - [`RandomResizedCrop`](https://pytorch.org/vision/main/generated/torchvision.transforms.RandomResizedCrop.html) و [`ColorJitter`](https://pytorch.org/vision/main/generated/torchvision.transforms.ColorJitter.html). +لاحظ أنه بالنسبة لتغيير الحجم، يمكننا الحصول على متطلبات حجم الصورة من `image_processor`. بالنسبة لبعض النماذج، يُتوقع ارتفاع وعرض محددان بالضبط، بينما بالنسبة للنماذج الأخرى، يتم تحديد `shortest_edge` فقط. + +```py +>>> from torchvision.transforms import RandomResizedCrop, ColorJitter, Compose + +>>> size = ( +... image_processor.size["shortest_edge"] +... if "shortest_edge" in image_processor.size +... else (image_processor.size["height"], image_processor.size["width"]) +... ) + +>>> _transforms = Compose([RandomResizedCrop(size), ColorJitter(brightness=0.5, hue=0.5)]) +``` + +2. يقبل النموذج [`pixel_values`](model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel.forward.pixel_values) +كإدخال له. يمكن لـ `ImageProcessor` التعامل مع تطبيع الصور، وتوليد التنسورات المناسبة. +قم بإنشاء دالة تجمع بين زيادة الصور ومعالجة الصور المسبقة لمجموعة من الصور وتوليد `pixel_values`: + +```py +>>> def transforms(examples): +... images = [_transforms(img.convert("RGB")) for img in examples["image"]] +... examples["pixel_values"] = image_processor(images, do_resize=False, return_tensors="pt")["pixel_values"] +... return examples +``` + + + +في المثال أعلاه، قمنا بتعيين `do_resize=False` لأننا قمنا بالفعل بتغيير حجم الصور في تحويل زيادة الصور، +واستفدنا من خاصية `size` من `image_processor` المناسب. إذا لم تقم بتغيير حجم الصور أثناء زيادة الصور، +فاترك هذا المعلمة. بشكل افتراضي، ستتعامل `ImageProcessor` مع تغيير الحجم. + +إذا كنت ترغب في تطبيع الصور كجزء من تحويل زيادة الصور، فاستخدم قيم `image_processor.image_mean`، +و `image_processor.image_std`. + + +3. ثم استخدم 🤗 Datasets[`~datasets.Dataset.set_transform`] لتطبيق التحولات أثناء التنقل: +```py +>>> dataset.set_transform(transforms) +``` + +4. الآن عند الوصول إلى الصورة، ستلاحظ أن معالج الصور قد أضاف `pixel_values`. يمكنك تمرير مجموعة البيانات المعالجة إلى النموذج الآن! + +```py +>>> dataset[0].keys() +``` + +هكذا تبدو الصورة بعد تطبيق التحولات. تم اقتصاص الصورة بشكل عشوائي وتختلف خصائص الألوان بها. + +```py +>>> import numpy as np +>>> import matplotlib.pyplot as plt + +>>> img = dataset[0]["pixel_values"] +>>> plt.imshow(img.permute(1, 2, 0)) +``` + +
+ +
+ + + +بالنسبة للمهام مثل الكشف عن الأشياء، والتجزئة الدلالية، والتجزئة المثالية، والتجزئة الشاملة، يوفر `ImageProcessor` +أساليب ما بعد المعالجة. تحول هذه الأساليب المخرجات الخام للنموذج إلى تنبؤات ذات معنى مثل صناديق الحدود، +أو خرائط التجزئة. + + + +### الحشو Pad + +في بعض الحالات، على سبيل المثال، عند ضبط نموذج [DETR](./model_doc/detr) بدقة، يقوم النموذج بتطبيق زيادة المقياس في وقت التدريب. قد يتسبب ذلك في اختلاف أحجام الصور في دفعة واحدة. يمكنك استخدام [`DetrImageProcessor.pad`] +من [`DetrImageProcessor`] وتعريف `collate_fn` مخصص لتجميع الصور معًا. + +```py +>>> def collate_fn(batch): +... pixel_values = [item["pixel_values"] for item in batch] +... encoding = image_processor.pad(pixel_values, return_tensors="pt") +... labels = [item["labels"] for item in batch] +... batch = {} +... batch["pixel_values"] = encoding["pixel_values"] +... batch["pixel_mask"] = encoding["pixel_mask"] +... batch["labels"] = labels +... return batch +``` + +## متعدد الوسائط Mulimodal + +بالنسبة للمهام التي تتضمن إدخالات متعددة الوسائط، ستحتاج إلى معالج [processor](main_classes/processors) لإعداد مجموعة البيانات الخاصة بك للنمذجة. يربط المعالج بين كائنين للمعالجة مثل الرموز المميزة ومستخرج الميزات. + +قم بتحميل مجموعة بيانات [LJ Speech](https://huggingface.co/datasets/lj_speech) (راجع دليل 🤗 [Datasets tutorial](https://huggingface.co/docs/datasets/load_hub) لمزيد من التفاصيل حول كيفية تحميل مجموعة بيانات) لمعرفة كيف يمكنك استخدام معالج للتعرف التلقائي على الكلام (ASR): + +```py +>>> from datasets import load_dataset + +>>> lj_speech = load_dataset("lj_speech", split="train") +``` + +بالنسبة لـ ASR، فأنت تركز بشكل أساسي على `audio` و `text` لذا يمكنك إزالة الأعمدة الأخرى: + +```py +>>> lj_speech = lj_speech.map(remove_columns=["file", "id", "normalized_text"]) +``` + +الآن الق نظرة على أعمدة `audio` و `text`: +```py +>>> lj_speech = lj_speech.map(remove_columns=["file", "id", "normalized_text"]) +``` + +الآن الق نظرة على أعمدة `audio` و `text`: + +```py +>>> lj_speech[0]["audio"] +{'array': array([-7.3242188e-04, -7.6293945e-04, -6.4086914e-04, ..., + 7.3242188e-04, 2.1362305e-04, 6.1035156e-05], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/917ece08c95cf0c4115e45294e3cd0dee724a1165b7fc11798369308a465bd26/LJSpeech-1.1/wavs/LJ001-0001.wav', + 'sampling_rate': 22050} + +>>> lj_speech[0]["text"] +'Printing, in the only sense with which we are at present concerned, differs from most if not from all the arts and crafts represented in the Exhibition' +``` + +تذكر أنه يجب عليك دائمًا [إعادة أخذ العينات](preprocessing#audio) لمعدل أخذ العينات في مجموعة البيانات الصوتية الخاصة بك لمطابقة معدل أخذ العينات في مجموعة البيانات المستخدمة لتدريب النموذج مسبقًا! + +```py +>>> lj_speech = lj_speech.cast_column("audio", Audio(sampling_rate=16_000)) +``` + +قم بتحميل معالج باستخدام [`AutoProcessor.from_pretrained`]: + +```py +>>> from transformers import AutoProcessor + +>>> processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h") +``` + +1. قم بإنشاء دالة لمعالجة بيانات الصوت الموجودة في `array` إلى `input_values`، ورموز `text` إلى `labels`. هذه هي المدخلات للنموذج: + +```py +>>> def prepare_dataset(example): +... audio = example["audio"] + +... example.update(processor(audio=audio["array"], text=example["text"], sampling_rate=16000)) + +... return example +``` + +2. قم بتطبيق دالة `prepare_dataset` على عينة: + +```py +>>> prepare_dataset(lj_speech[0]) +``` + +لقد أضاف المعالج الآن `input_values` و `labels`، وتم أيضًا إعادة أخذ العينات لمعدل أخذ العينات بشكل صحيح إلى 16 كيلو هرتز. يمكنك تمرير مجموعة البيانات المعالجة إلى النموذج الآن! \ No newline at end of file From 3bbe70a1da48a6f54a5bde44d78e305be7eaa9f5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:31 +0300 Subject: [PATCH 055/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quicktour.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quicktour.md | 541 ++++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 docs/source/ar/quicktour.md diff --git a/docs/source/ar/quicktour.md b/docs/source/ar/quicktour.md new file mode 100644 index 00000000000000..4b683e0d206678 --- /dev/null +++ b/docs/source/ar/quicktour.md @@ -0,0 +1,541 @@ +# جولة سريعة + +[[open-in-colab]] + +ابدأ باستخدام مكتبة 🤗 Transformers! سواء كنت مطورًا أو مستخدمًا عاديًا، ستساعدك هذه الجولة السريعة على البدء وستُظهر لك كيفية استخدام [`pipeline`] للاستنتاج، وتحميل نموذج مُدرب مسبقًا ومعالج مُسبق مع [AutoClass](./model_doc/auto)، وتدريب نموذج بسرعة باستخدام PyTorch أو TensorFlow. إذا كنت مبتدئًا، نوصي بالاطلاع على دروسنا أو [الدورة](https://huggingface.co/course/chapter1/1) للحصول على شرح أكثر تعمقًا للمفاهيم التي تم تقديمها هنا. + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +!pip install transformers datasets evaluate accelerate +``` + +ستحتاج أيضًا إلى تثبيت إطار عمل التعلم الآلي المفضل لديك: + + + + +```bash +pip install torch +``` + + + +```bash +pip install tensorflow +``` + + + +## خط الأنابيب + + + +يمثل [`pipeline`] أسهل وأسرع طريقة لاستخدام نموذج مُدرب مسبقًا للاستنتاج. يمكنك استخدام [`pipeline`] جاهزًا للعديد من المهام عبر طرائق مختلفة، والتي يظهر بعضها في الجدول أدناه: + + + +للاطلاع على القائمة الكاملة للمهام المتاحة، راجع [مرجع واجهة برمجة التطبيقات الخاصة بخط الأنابيب](./main_classes/pipelines). + + + + +| **المهمة** | **الوصف** | **الطريقة** | **معرف خط الأنابيب** | +|------------------------------|--------------------------------------------------------------------------------------------------------------|-----------------|-----------------------------------------------| +| تصنيف النص | تعيين تسمية إلى تسلسل نص معين | NLP | pipeline(task=“sentiment-analysis”) | +| توليد النص | توليد نص بناءً على موجه معين | NLP | pipeline(task=“text-generation”) | +| تلخيص | توليد ملخص لتسلسل نص أو مستند | NLP | pipeline(task=“summarization”) | +| تصنيف الصور | تعيين تسمية لصورة معينة | رؤية حاسوبية | pipeline(task=“image-classification”) | +| تجزئة الصورة | تعيين تسمية لكل بكسل فردي في الصورة (يدعم التجزئة الدلالية، والمجملة، وتجزئة مثيلات) | رؤية حاسوبية | pipeline(task=“image-segmentation”) | +| اكتشاف الأشياء | التنبؤ بحدود الأشياء وفئاتها في صورة معينة | رؤية حاسوبية | pipeline(task=“object-detection”) | +| تصنيف الصوت | تعيين تسمية لبيانات صوتية معينة | صوتي | pipeline(task=“audio-classification”) | +| التعرف على الكلام التلقائي | نسخ الكلام إلى نص | صوتي | pipeline(task=“automatic-speech-recognition”) | +| الإجابة على الأسئلة البصرية | الإجابة على سؤال حول الصورة، مع إعطاء صورة وسؤال | متعدد الوسائط | pipeline(task=“vqa”) | +| الإجابة على أسئلة المستندات | الإجابة على سؤال حول المستند، مع إعطاء مستند وسؤال | متعدد الوسائط | pipeline(task="document-question-answering") | +| كتابة تعليق على الصورة | إنشاء تعليق على صورة معينة | متعدد الوسائط | pipeline(task="image-to-text") | + +ابدأ بإنشاء مثيل من [`pipeline`] وتحديد المهمة التي تريد استخدامه لها. في هذا الدليل، ستستخدم خط الأنابيب للتحليل النصي كنموذج: + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline("sentiment-analysis") +``` + +يقوم [`pipeline`] بتنزيل وتخزين نسخة احتياطية من نموذج افتراضي [مُدرب مسبقًا](https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english) ومعالج للتحليل النصي. الآن يمكنك استخدام `classifier` على النص المستهدف: + +```py +>>> classifier("We are very happy to show you the 🤗 Transformers library.") +[{'label': 'POSITIVE', 'score': 0.9998}] +``` + +إذا كان لديك أكثر من إدخال واحد، قم بتمرير إدخالاتك كقائمة إلى [`pipeline`] لإرجاع قائمة من القواميس: + +```py +>>> results = classifier(["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."]) +>>> for result in results: +... print(f"label: {result['label']}, with score: {round(result['score'], 4)}") +label: POSITIVE, with score: 0.9998 +label: NEGATIVE, with score: 0.5309 +``` +يمكن لخط الأنابيب أيضًا أن يتنقل خلال مجموعة بيانات كاملة لأي مهمة تريدها. كمثال على ذلك، دعنا نختار التعرف على الكلام التلقائي كمهمة لنا: + +```py +>>> import torch +>>> from transformers import pipeline + +>>> speech_recognizer = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-base-960h") +``` + +قم بتحميل مجموعة بيانات صوتية (راجع دليل البدء السريع لـ 🤗 Datasets [Quick Start](https://huggingface.co/docs/datasets/quickstart#audio) للحصول على مزيد من التفاصيل) التي تريد التنقل خلالها. على سبيل المثال، قم بتحميل مجموعة بيانات [MInDS-14](https://huggingface.co/datasets/PolyAI/minds14): + +```py +>>> from datasets import load_dataset, Audio + +>>> dataset = load_dataset("PolyAI/minds14", name="en-US", split="train") # doctest: +IGNORE_RESULT +``` + +يجب التأكد من أن معدل أخذ العينات لمجموعة البيانات يتطابق مع معدل أخذ العينات الذي تم تدريب [`facebook/wav2vec2-base-960h`](https://huggingface.co/facebook/wav2vec2-base-960h) عليه: + +```py +>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=speech_recognizer.feature_extractor.sampling_rate)) +``` + +يتم تحميل الملفات الصوتية وإعادة أخذ العينات تلقائيًا عند استدعاء العمود "audio". +استخرج المصفوفات الموجية الخام من أول 4 عينات ومررها كقائمة إلى خط الأنابيب: + +```py +>>> result = speech_recognizer(dataset[:4]["audio"]) +>>> print([d["text"] for d in result]) +['I WOULD LIKE TO SET UP A JOINT ACCOUNT WITH MY PARTNER HOW DO I PROCEED WITH DOING THAT', "FONDERING HOW I'D SET UP A JOIN TO HELL T WITH MY WIFE AND WHERE THE AP MIGHT BE", "I I'D LIKE TOY SET UP A JOINT ACCOUNT WITH MY PARTNER I'M NOT SEEING THE OPTION TO DO IT ON THE APSO I CALLED IN TO GET SOME HELP CAN I JUST DO IT OVER THE PHONE WITH YOU AND GIVE YOU THE INFORMATION OR SHOULD I DO IT IN THE AP AN I'M MISSING SOMETHING UQUETTE HAD PREFERRED TO JUST DO IT OVER THE PHONE OF POSSIBLE THINGS", 'HOW DO I FURN A JOINA COUT'] +``` + +بالنسبة لمجموعات البيانات الأكبر حيث تكون الإدخالات كبيرة (كما هو الحال في الكلام أو الرؤية)، سترغب في تمرير مولد بدلاً من قائمة لتحميل جميع الإدخالات في الذاكرة. راجع [مرجع واجهة برمجة التطبيقات الخاصة بخط الأنابيب](./main_classes/pipelines) للحصول على مزيد من المعلومات. + +### استخدام نموذج ومعالج آخرين في خط الأنابيب + +يمكن لخط الأنابيب [`pipeline`] استيعاب أي نموذج من [Hub](https://huggingface.co/models)، مما يجعله سهل التكيف مع حالات الاستخدام الأخرى. على سبيل المثال، إذا كنت تريد نموذجًا قادرًا على التعامل مع النص الفرنسي، فاستخدم العلامات على Hub لتصفية نموذج مناسب. تعيد النتيجة الأولى المرشحة نموذج BERT متعدد اللغات [BERT model](https://huggingface.co/nlptown/bert-base-multilingual-uncased-sentiment) الذي تم ضبطه مسبقًا للتحليل النصي والذي يمكنك استخدامه للنص الفرنسي: + +```py +>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment" +``` + + + +استخدم [`AutoModelForSequenceClassification`] و [`AutoTokenizer`] لتحميل النموذج المُدرب مسبقًا ومعالجته المرتبط به (مزيد من المعلومات حول `AutoClass` في القسم التالي): + +```py +>>> from transformers import AutoTokenizer, AutoModelForSequenceClassification + +>>> model = AutoModelForSequenceClassification.from_pretrained(model_name) +>>> tokenizer = AutoTokenizer.from_pretrained(model_name) +``` + + +استخدم [`TFAutoModelForSequenceClassification`] و [`AutoTokenizer`] لتحميل النموذج المُدرب مسبقًا ومعالجته المرتبط به (مزيد من المعلومات حول `TFAutoClass` في القسم التالي): + +```py +>>> from transformers import AutoTokenizer, TFAutoModelForSequenceClassification + +>>> model = TFAutoModelForSequenceClassification.from_pretrained(model_name) +>>> tokenizer = AutoTokenizer.from_pretrained(model_name) +``` + + + +حدد النموذج والمعالج في [`pipeline`]. الآن يمكنك تطبيق `classifier` على النص الفرنسي: + +```py +>>> classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer) +>>> classifier("Nous sommes très heureux de vous présenter la bibliothèque 🤗 Transformers.") +[{'label': '5 stars', 'score': 0.7273}] +``` +إذا لم تتمكن من العثور على نموذج لحالتك الاستخدامية، فستحتاج إلى ضبط نموذج مُدرب مسبقًا على بياناتك. اطلع على [دليل الضبط الدقيق](./training) للتعرف على كيفية القيام بذلك. وأخيرًا، بعد ضبط نموذجك المُدرب مسبقًا، يرجى مراعاة [المشاركة](./model_sharing) بالنموذج مع المجتمع على Hub لدمقرطة التعلم الآلي للجميع! 🤗 + +## AutoClass + + + +في الخلفية، تعمل فئات [`AutoModelForSequenceClassification`] و [`AutoTokenizer`] معًا لتشغيل خط الأنابيب الذي استخدمته أعلاه. تعتبر [AutoClass](./model_doc/auto) اختصارًا يقوم تلقائيًا باسترداد بنية نموذج مُدرب مسبقًا من اسمه أو مساره. كل ما عليك فعله هو تحديد فئة `AutoClass` المناسبة لمهمتك وفئة المعالجة المرتبطة بها. + +لنعد إلى المثال من القسم السابق ولنرى كيف يمكنك استخدام `AutoClass` لتكرار نتائج خط الأنابيب. + +### AutoTokenizer + +يتولى المعالج مسؤولية معالجة النص إلى مصفوفة من الأرقام كإدخالات لنموذج معين. هناك قواعد متعددة تحكم عملية المعالجة، بما في ذلك كيفية تقسيم كلمة وما هو المستوى الذي يجب أن تنقسم فيه الكلمات (تعرف على المزيد حول المعالجة في [ملخص المعالج](./tokenizer_summary)). أهم شيء يجب تذكره هو أنك تحتاج إلى إنشاء مثيل للمعالج بنفس اسم النموذج لضمان استخدامك لقواعد المعالجة نفسها التي تم تدريب النموذج عليها. + +قم بتحميل معالج باستخدام [`AutoTokenizer`]: + +```py +>>> from transformers import AutoTokenizer + +>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment" +>>> tokenizer = AutoTokenizer.from_pretrained(model_name) +``` + +مرر نصك إلى المعالج: + +```py +>>> encoding = tokenizer("We are very happy to show you the 🤗 Transformers library.") +>>> print(encoding) +{'input_ids': [101, 11312, 10320, 12495, 19308, 10114, 11391, 10855, 10103, 100, 58263, 13299, 119, 102], + 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +``` + +يعيد المعالج قاموسًا يحتوي على: + +* [input_ids](./glossary#input-ids): التمثيلات الرقمية لرموزك. +* [attention_mask](./glossary#attention-mask): تشير إلى الرموز التي يجب الاهتمام بها. + +يمكن للمعالج أيضًا قبول قائمة من الإدخالات، وتقسيم النص وإكماله لإرجاع دفعة ذات طول موحد: + + + + +```py +>>> pt_batch = tokenizer( +... ["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."], +... padding=True, +... truncation=True, +... max_length=512, +... return_tensors="pt", +... ) +``` + + + +```py +>>> tf_batch = tokenizer( +... ["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."], +... padding=True, +... truncation=True, +... max_length=512, +... return_tensors="tf", +... ) +``` + + + + + +اطلع على [الدليل التمهيدي للمعالجة المسبقة](./preprocessing) للحصول على مزيد من التفاصيل حول المعالجة، وكيفية استخدام [`AutoImageProcessor`] و [`AutoFeatureExtractor`] و [`AutoProcessor`] لمعالجة الصور والصوت والإدخالات متعددة الوسائط. + + + +### AutoModel + + + +تقدم مكتبة 🤗 Transformers طريقة بسيطة وموحدة لتحميل مثيلات مُدربة مسبقًا. وهذا يعني أنه يمكنك تحميل [`AutoModel`] كما لو كنت تقوم بتحميل [`AutoTokenizer`]. الفرق الوحيد هو اختيار فئة [`AutoModel`] المناسبة للمهمة. بالنسبة لتصنيف النص (أو التسلسل)، يجب عليك تحميل [`AutoModelForSequenceClassification`]: + +```py +>>> from transformers import AutoModelForSequenceClassification + +>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment" +>>> pt_model = AutoModelForSequenceClassification.from_pretrained(model_name) +``` + + + +راجع [ملخص المهمة](./task_summary) للاطلاع على المهام التي تدعمها فئة [`AutoModel`]. + + + +الآن قم بتمرير دفعة الإدخالات المُعالجة مسبقًا مباشرة إلى النموذج. كل ما عليك فعله هو فك تعبئة القاموس عن طريق إضافة `**`: + +## تدريب النموذج + +الآن، مرر دفعة المدخلات المعالجة مسبقًا مباشرة إلى النموذج. ما عليك سوى فك تعبئة القاموس عن طريق إضافة `**`: + +```py +>>> pt_outputs = pt_model(**pt_batch) +``` + +يقوم النموذج بإخراج التنشيطات النهائية في سمة `logits`. طبق دالة softmax على `logits` لاسترداد الاحتمالات: + +```py +>>> from torch import nn + +>>> pt_predictions = nn.functional.softmax(pt_outputs.logits, dim=-1) +>>> print(pt_predictions) +tensor([[0.0021, 0.0018, 0.0115, 0.2121, 0.7725], + [0.2084, 0.1826, 0.1969, 0.1755, 0.2365]], grad_fn=) +``` + + +يوفر 🤗 Transformers طريقة بسيطة وموحدة لتحميل مثيلات مُدربة مسبقًا. وهذا يعني أنه يمكنك تحميل [`TFAutoModel`] مثل تحميل [`AutoTokenizer`]. والفرق الوحيد هو تحديد [`TFAutoModel`] الصحيح للمهمة. للتصنيف النصي (أو التسلسلي)، يجب تحميل [`TFAutoModelForSequenceClassification`]: + +```py +>>> from transformers import TFAutoModelForSequenceClassification + +>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment" +>>> tf_model = TFAutoModelForSequenceClassification.from_pretrained(model_name) +``` + + + +راجع [ملخص المهام](./task_summary) للمهام المدعومة بواسطة فئة [`AutoModel`]. + + + +الآن، مرر دفعة المدخلات المعالجة مسبقًا مباشرة إلى النموذج. يمكنك تمرير المصفوفات كما هي: + +```py +>>> tf_outputs = tf_model(tf_batch) +``` + +يقوم النموذج بإخراج التنشيطات النهائية في سمة `logits`. طبق دالة softmax على `logits` لاسترداد الاحتمالات: + +```py +>>> import tensorflow as tf + +>>> tf_predictions = tf.nn.softmax(tf_outputs.logits, axis=-1) +>>> tf_predictions # doctest: +IGNORE_RESULT +``` + + + + + +تخرج جميع نماذج 🤗 Transformers (PyTorch أو TensorFlow) المصفوفات *قبل* دالة التنشيط النهائية (مثل softmax) لأن دالة التنشيط النهائية غالبًا ما تكون مدمجة مع الخسارة. مخرجات النموذج عبارة عن فئات بيانات خاصة، لذلك يتم استكمال سماتها تلقائيًا في IDE. وتتصرف مخرجات النموذج مثل زوج مرتب أو قاموس (يمكنك الفهرسة باستخدام عدد صحيح أو شريحة أو سلسلة)، وفي هذه الحالة، يتم تجاهل السمات التي تكون None. + + + +### حفظ النموذج + + + +بمجرد ضبط نموذجك، يمكنك حفظه مع برنامج الترميز الخاص به باستخدام [`PreTrainedModel.save_pretrained`]: + +```py +>>> pt_save_directory = "./pt_save_pretrained" +>>> tokenizer.save_pretrained(pt_save_directory) # doctest: +IGNORE_RESULT +>>> pt_model.save_pretrained(pt_save_directory) +``` + +عندما تكون مستعدًا لاستخدام النموذج مرة أخرى، أعد تحميله باستخدام [`PreTrainedModel.from_pretrained`]: + +```py +>>> pt_model = AutoModelForSequenceClassification.from_pretrained("./pt_save_pretrained") +``` + + +بمجرد ضبط نموذجك، يمكنك حفظه مع برنامج الترميز الخاص به باستخدام [`TFPreTrainedModel.save_pretrained`]: + +```py +>>> tf_save_directory = "./tf_save_pretrained" +>>> tokenizer.save_pretrained(tf_save_directory) # doctest: +IGNORE_RESULT +>>> tf_model.save_pretrained(tf_save_directory) +``` + +عندما تكون مستعدًا لاستخدام النموذج مرة أخرى، أعد تحميله باستخدام [`TFPreTrainedModel.from_pretrained`]: + +```py +>>> tf_model = TFAutoModelForSequenceClassification.from_pretrained("./tf_save_pretrained") +``` + + + +من الميزات الرائعة في 🤗 Transformers القدرة على حفظ نموذج وإعادة تحميله كنموذج PyTorch أو TensorFlow. يمكن أن يحول معامل `from_pt` أو `from_tf` النموذج من إطار عمل إلى آخر: + + + + +```py +>>> from transformers import AutoModel + +>>> tokenizer = AutoTokenizer.from_pretrained(tf_save_directory) +>>> pt_model = AutoModelForSequenceClassification.from_pretrained(tf_save_directory, from_tf=True) +``` + + + +```py +>>> from transformers import TFAutoModel + +>>> tokenizer = AutoTokenizer.from_pretrained(pt_save_directory) +>>> tf_model = TFAutoModelForSequenceClassification.from_pretrained(pt_save_directory, from_pt=True) +``` + + + + +## بناء نموذج مخصص + +يمكنك تعديل فئة تكوين النموذج لتغيير كيفية بناء النموذج. يحدد التكوين سمات النموذج، مثل عدد الطبقات المخفية أو رؤوس الاهتمام. تبدأ من الصفر عند تهيئة نموذج من فئة تكوين مخصص. يتم تهيئة سمات النموذج بشكل عشوائي، ويجب تدريب النموذج قبل استخدامه للحصول على نتائج ذات معنى. + +ابدأ باستيراد [`AutoConfig`]. ثم قم بتحميل النموذج المُدرب مسبقًا الذي تريد تعديله. ضمن [`AutoConfig.from_pretrained`]. يمكنك تحديد السمة التي تريد تغييرها، مثل عدد رؤوس الاهتمام: + +```py +>>> from transformers import AutoConfig + +>>> my_config = AutoConfig.from_pretrained("distilbert/distilbert-base-uncased", n_heads=12) +``` + + + +قم بإنشاء نموذج من تكوينك المخصص باستخدام [`AutoModel.from_config`]: + +```py +>>> from transformers import AutoModel + +>>> my_model = AutoModel.from_config(my_config) +``` + + +قم بإنشاء نموذج من تكوينك المخصص باستخدام [`TFAutoModel.from_config`]: + +```py +>>> from transformers import TFAutoModel + +>>> my_model = TFAutoModel.from_config(my_config) +``` + + + +الق نظرة على دليل [إنشاء بنية مخصصة](./create_a_model) لمزيد من المعلومات حول بناء التكوينات المخصصة. + +## المدرب - حلقة تدريب محسنة لـ PyTorch + +جميع النماذج عبارة عن [`torch.nn.Module`](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) قياسية، لذا يمكنك استخدامها في أي حلقة تدريب نموذجية. في حين يمكنك كتابة حلقة التدريب الخاصة بك، يوفر 🤗 Transformers فئة [`Trainer`] لـ PyTorch، والتي تحتوي على حلقة التدريب الأساسية وتضيف وظائف إضافية لميزات مثل التدريب الموزع، والدقة المختلطة، والمزيد. + +وفقًا لمهمتك، ستقوم عادةً بتمرير المعلمات التالية إلى [`Trainer`]: + +1. ستبدأ بـ [`PreTrainedModel`] أو [`torch.nn.Module`](https://pytorch.org/docs/stable/nn.html#torch.nn.Module): + + ```py + >>> from transformers import AutoModelForSequenceClassification + + >>> model = AutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") + ``` + +2. تحتوي [`TrainingArguments`] على فرط معلمات النموذج التي يمكنك تغييرها مثل معدل التعلم، وحجم الدفعة، وعدد العصور التي يجب التدريب عليها. يتم استخدام القيم الافتراضية إذا لم تحدد أي حجج تدريب: + + ```py + >>> from transformers import TrainingArguments + + >>> training_args = TrainingArguments( + ... output_dir="path/to/save/folder/", + ... learning_rate=2e-5, + ... per_device_train_batch_size=8, + ... per_device_eval_batch_size=8, + ... num_train_epochs=2, + ... ) + ``` + +3. قم بتحميل فئة معالجة مسبقة مثل برنامج الترميز، أو معالج الصور، أو مستخرج الميزات، أو المعالج: + + ```py + >>> from transformers import AutoTokenizer + + >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") + ``` + +4. قم بتحميل مجموعة بيانات: + + ```py + >>> from datasets import load_dataset + + >>> dataset = load_dataset("rotten_tomatoes") # doctest: +IGNORE_RESULT + ``` + +5. قم بإنشاء دالة لترميز مجموعة البيانات: + + ```py + >>> def tokenize_dataset(dataset): + ... return tokenizer(dataset["text"]) + ``` + + ثم قم بتطبيقه على مجموعة البيانات بأكملها باستخدام [`~datasets.Dataset.map`]: + + ```py + >>> dataset = dataset.map(tokenize_dataset, batched=True) + ``` + +6. [`DataCollatorWithPadding`] لإنشاء دفعة من الأمثلة من مجموعة البيانات الخاصة بك: + + ```py + >>> from transformers import DataCollatorWithPadding + + >>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer) + ``` + +الآن قم بتجميع جميع هذه الفئات في [`Trainer`]: + +```py +>>> from transformers import Trainer + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=dataset["train"], +... eval_dataset=dataset["test"], +... tokenizer=tokenizer, +... data_collator=data_collator, +... ) # doctest: +SKIP +``` +عندما تكون مستعدًا، اتصل بـ [`~Trainer.train`] لبدء التدريب: + +```py +>>> trainer.train() # doctest: +SKIP +``` + + + +بالنسبة للمهام - مثل الترجمة أو تلخيص - التي تستخدم نموذج تسلسل إلى تسلسل، استخدم فئات [`Seq2SeqTrainer`] و [`Seq2SeqTrainingArguments`] بدلاً من ذلك. + + + +يمكنك تخصيص سلوك حلقة التدريب عن طريق إنشاء فئة فرعية من الطرق داخل [`Trainer`]. يسمح لك ذلك بتخصيص ميزات مثل دالة الخسارة، والمحسن، والمجدول. راجع مرجع [`Trainer`] للتعرف على الطرق التي يمكن إنشاء فئات فرعية منها. + +والطريقة الأخرى لتخصيص حلقة التدريب هي باستخدام [المستدعيات](./main_classes/callback). يمكنك استخدام المستدعيات للاندماج مع المكتبات الأخرى وفحص حلقة التدريب للإبلاغ عن التقدم أو إيقاف التدريب مبكرًا. لا تعدل المستدعيات أي شيء في حلقة التدريب نفسها. لتخصيص شيء مثل دالة الخسارة، تحتاج إلى إنشاء فئة فرعية من [`Trainer`] بدلاً من ذلك. + +## التدريب باستخدام TensorFlow + +جميع النماذج عبارة عن [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model) قياسية، لذا يمكن تدريبها في TensorFlow باستخدام واجهة برمجة تطبيقات Keras. يوفر 🤗 Transformers طريقة [`~TFPreTrainedModel.prepare_tf_dataset`] لتحميل مجموعة البيانات الخاصة بك بسهولة كـ `tf.data.Dataset` حتى تتمكن من البدء في التدريب على الفور باستخدام طرق `compile` و`fit` في Keras. + +1. ستبدأ بـ [`TFPreTrainedModel`] أو [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model): + + ```py + >>> from transformers import TFAutoModelForSequenceClassification + + >>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") + ``` + +2. قم بتحميل فئة معالجة مسبقة مثل برنامج الترميز، أو معالج الصور، أو مستخرج الميزات، أو المعالج: + + ```py + >>> from transformers import AutoTokenizer + + >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") + ``` + +3. قم بإنشاء دالة لترميز مجموعة البيانات: + + ```py + >>> def tokenize_dataset(dataset): + ... return tokenizer(dataset["text"]) # doctest: +SKIP + ``` + +4. قم بتطبيق برنامج الترميز على مجموعة البيانات بأكملها باستخدام [`~datasets.Dataset.map`] ثم مرر مجموعة البيانات وبرنامج الترميز إلى [`~TFPreTrainedModel.prepare_tf_dataset`]. يمكنك أيضًا تغيير حجم الدفعة وخلط مجموعة البيانات هنا إذا أردت: + + ```py + >>> dataset = dataset.map(tokenize_dataset) # doctest: +SKIP + >>> tf_dataset = model.prepare_tf_dataset( + ... dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer + ... ) # doctest: +SKIP + ``` + +5. عندما تكون مستعدًا، يمكنك استدعاء `compile` و`fit` لبدء التدريب. لاحظ أن جميع نماذج Transformers لديها دالة خسارة ذات صلة بالمهمة بشكل افتراضي، لذا فأنت لست بحاجة إلى تحديد واحدة ما لم ترغب في ذلك: + + ```py + >>> from tensorflow.keras.optimizers import Adam + + >>> model.compile(optimizer='adam') # لا توجد وسيطة دالة الخسارة! + >>> model.fit(tf_dataset) # doctest: +SKIP + ``` + +## ماذا بعد؟ + +الآن بعد أن أكملت الجولة السريعة في 🤗 Transformers، راجع أدلةنا وتعرف على كيفية القيام بأشياء أكثر تحديدًا مثل كتابة نموذج مخصص، وضبط نموذج لمهمة، وكيفية تدريب نموذج باستخدام نص برمجي. إذا كنت مهتمًا بمعرفة المزيد عن المفاهيم الأساسية لـ 🤗 Transformers، فاحصل على فنجان من القهوة واطلع على أدلة المفاهيم الخاصة بنا! \ No newline at end of file From f2fa1ad6bf4f34b49ef193f8fbabdadd61afeed6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:33 +0300 Subject: [PATCH 056/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/run=5Fscripts.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/run_scripts.md | 218 ++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 docs/source/ar/run_scripts.md diff --git a/docs/source/ar/run_scripts.md b/docs/source/ar/run_scripts.md new file mode 100644 index 00000000000000..650e0dbdaf8b61 --- /dev/null +++ b/docs/source/ar/run_scripts.md @@ -0,0 +1,218 @@ +# التدريب باستخدام سكريبت + +بالإضافة إلى دفاتر الملاحظات [notebooks](./notebooks) الخاصة بـ 🤗 Transformers، هناك أيضًا نصوص برمجية توضيحية تُظهر كيفية تدريب نموذج لمهمة باستخدام [PyTorch](https://github.com/huggingface/transformers/tree/main/examples/pytorch) أو [TensorFlow](https://github.com/huggingface/transformers/tree/main/examples/tensorflow) أو [JAX/Flax](https://github.com/huggingface/transformers/tree/main/examples/flax). + +كما ستجد النصوص البرمجية التي استخدمناها في [مشاريع الأبحاث](https://github.com/huggingface/transformers/tree/main/examples/research_projects) و [الأمثلة القديمة](https://github.com/huggingface/transformers/tree/main/examples/legacy) والتي ساهم بها المجتمع بشكل أساسي. هذه النصوص البرمجية غير مدعومة بشكل نشط وقد تتطلب إصدارًا محددًا من مكتبة 🤗 Transformers والذي من المحتمل أن يكون غير متوافق مع الإصدار الأحدث من المكتبة. + +لا يُتوقع أن تعمل النصوص البرمجية التوضيحية بشكل مباشر على كل مشكلة، وقد تحتاج إلى تكييف النص البرمجي مع المشكلة التي تحاول حلها. ولمساعدتك في ذلك، تعرض معظم النصوص البرمجية كيفية معالجة البيانات قبل التدريب بشكل كامل، مما يتيح لك تحريرها حسب الحاجة لحالتك الاستخدام. + +بالنسبة لأي ميزة ترغب في تنفيذها في نص برمجي توضيحي، يرجى مناقشتها في [المنتدى](https://discuss.huggingface.co/) أو في [قضية](https://github.com/huggingface/transformers/issues) قبل إرسال طلب سحب. وفي حين أننا نرحب بإصلاح الأخطاء، فمن غير المرجح أن نقوم بدمج طلب سحب الذي يضيف المزيد من الوظائف على حساب قابلية القراءة. + +سيوضح هذا الدليل كيفية تشغيل نص برمجي توضيحي للتدريب على الملخص في [PyTorch](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization) و [TensorFlow](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/summarization). يُتوقع أن تعمل جميع الأمثلة مع كلا الإطارين ما لم يُنص على خلاف ذلك. + +## الإعداد + +لتشغيل الإصدار الأحدث من النصوص البرمجية التوضيحية بنجاح، يجب عليك **تثبيت 🤗 Transformers من المصدر** في بيئة افتراضية جديدة: + +```bash +git clone https://github.com/huggingface/transformers +cd transformers +pip install . +``` + +بالنسبة للإصدارات الأقدم من النصوص البرمجية التوضيحية، انقر فوق الزر أدناه: +```bash +git clone https://github.com/huggingface/transformers +cd transformers +pip install . +``` + +بالنسبة للإصدارات الأقدم من النصوص البرمجية التوضيحية، انقر فوق الزر أدناه: + +
+ أمثلة للإصدارات الأقدم من 🤗 Transformers + +
+ +ثم قم بالتبديل إلى النسخة الحالية من 🤗 Transformers إلى إصدار محدد، مثل v3.5.1 على سبيل المثال: + +```bash +git checkout tags/v3.5.1 +``` + +بعد إعداد إصدار المكتبة الصحيح، انتقل إلى مجلد الأمثلة الذي تختاره وقم بتثبيت المتطلبات المحددة: + +```bash +pip install -r requirements.txt +``` + +## تشغيل نص برمجي + + + + +- يقوم النص البرمجي التوضيحي بتنزيل مجموعة بيانات ومعالجتها مسبقًا من مكتبة 🤗 [Datasets](https://huggingface.co/docs/datasets). +- ثم يقوم النص البرمجي بضبط نموذج بيانات دقيق باستخدام [Trainer](https://huggingface.co/docs/transformers/main_classes/trainer) على بنية تدعم الملخص. +- يوضح المثال التالي كيفية ضبط نموذج [T5-small](https://huggingface.co/google-t5/t5-small) على مجموعة بيانات [CNN/DailyMail](https://huggingface.co/datasets/cnn_dailymail). +- يتطلب نموذج T5 حجة `source_prefix` إضافية بسبب الطريقة التي تم تدريبه بها. يتيح هذا المطالبة لـ T5 معرفة أن هذه مهمة ملخص. + +```bash +python examples/pytorch/summarization/run_summarization.py \ + --model_name_or_path google-t5/t5-small \ + --do_train \ + --do_eval \ + --dataset_name cnn_dailymail \ + --dataset_config "3.0.0" \ + --source_prefix "summarize: " \ + --output_dir /tmp/tst-summarization \ + --per_device_train_batch_size=4 \ + --per_device_eval_batch_size=4 \ + --overwrite_output_dir \ + --predict_with_generate +``` + + + +- يقوم النص البرمجي التوضيحي بتنزيل مجموعة بيانات ومعالجتها مسبقًا من مكتبة 🤗 [Datasets](https://huggingface.co/docs/datasets/). +- ثم يقوم النص البرمجي بضبط نموذج بيانات دقيق باستخدام Keras على بنية تدعم الملخص. +- يوضح المثال التالي كيفية ضبط نموذج [T5-small](https://huggingface.co/google-t5/t5-small) على مجموعة بيانات [CNN/DailyMail](https://huggingface.co/datasets/cnn_dailymail). +- يتطلب نموذج T5 حجة `source_prefix` إضافية بسبب الطريقة التي تم تدريبه بها. يتيح هذا المطالبة لـ T5 معرفة أن هذه مهمة ملخص. + +```bash +python examples/tensorflow/summarization/run_summarization.py \ + --model_name_or_path google-t5/t5-small \ + --dataset_name cnn_dailymail \ + --dataset_config "3.0.0" \ + --output_dir /tmp/tst-summarization \ + --per_device_train_batch_size 8 \ + --per_device_eval_batch_size 16 \ + --num_train_epochs 3 \ + --do_train \ + --do_eval +``` + + + +## التدريب الموزع والدقة المختلطة + +يدعم [Trainer](https://huggingface.co/docs/transformers/main_classes/trainer) التدريب الموزع والدقة المختلطة، مما يعني أنه يمكنك أيضًا استخدامه في نص برمجي. لتمكين كلتا الميزتين: + +- أضف حجة `fp16` لتمكين الدقة المختلطة. +- قم بتعيين عدد وحدات معالجة الرسومات (GPUs) التي تريد استخدامها باستخدام حجة `nproc_per_node`. + +```bash +torchrun \ + --nproc_per_node 8 pytorch/summarization/run_summarization.py \ + --fp16 \ + --model_name_or_path google-t5/t5-small \ + --do_train \ + --do_eval \ + --dataset_name cnn_dailymail \ + --dataset_config "3.0.0" \ + --source_prefix "summarize: " \ + --output_dir /tmp/tst-summarization \ + --per_device_train_batch_size=4 \ + --per_device_eval_batch_size=4 \ + --overwrite_output_dir \ + --predict_with_generate +``` + +تستخدم نصوص TensorFlow البرمجية استراتيجية [`MirroredStrategy`](https://www.tensorflow.org/guide/distributed_training#mirroredstrategy) للتدريب الموزع، ولا تحتاج إلى إضافة أي حجج إضافية إلى النص البرمجي التدريبي. سيستخدم نص TensorFlow البرمجي وحدات معالجة الرسومات (GPUs) متعددة بشكل افتراضي إذا كانت متوفرة. + +## تشغيل نص برمجي على وحدة معالجة الدقة الفائقة (TPU) + + + + +تُعد وحدات معالجة الدقة الفائقة (TPUs) مصممة خصيصًا لتسريع الأداء. يدعم PyTorch وحدات معالجة الدقة الفائقة (TPUs) مع [XLA](https://www.tensorflow.org/xla) مجمع الدقة الفائقة للتعلم العميق (راجع [هنا](https://github.com/pytorch/xla/blob/master/README.md) لمزيد من التفاصيل). لاستخدام وحدة معالجة الدقة الفائقة (TPU)، قم بتشغيل نص `xla_spawn.py` البرمجي واستخدم حجة `num_cores` لتعيين عدد وحدات معالجة الدقة الفائقة (TPU) التي تريد استخدامها. + +```bash +python xla_spawn.py --num_cores 8 \ + summarization/run_summarization.py \ + --model_name_or_path google-t5/t5-small \ + --do_train \ + --do_eval \ + --dataset_name cnn_dailymail \ + --dataset_config "3.0.0" \ + --source_prefix "summarize: " \ + --output_dir /tmp/tst-summarization \ + --per_device_train_batch_size=4 \ + --per_device_eval_batch_size=4 \ + --overwrite_output_dir \ + --predict_with_generate +``` + + + +تُعد وحدات معالجة الدقة الفائقة (TPUs) مصممة خصيصًا لتسريع الأداء. تستخدم نصوص TensorFlow البرمجية استراتيجية [`TPUStrategy`](https://www.tensorflow.org/guide/distributed_training#tpustrategy) للتدريب على وحدات معالجة الدقة الفائقة (TPUs). لاستخدام وحدة معالجة الدقة الفائقة (TPU)، قم بتمرير اسم مورد وحدة معالجة الدقة الفائقة (TPU) إلى حجة `tpu`. +```bash +python run_summarization.py \ + --tpu name_of_tpu_resource \ + --model_name_or_path google-t5/t5-small \ + --dataset_name cnn_dailymail \ + --dataset_config "3.0.0" \ + --output_dir /tmp/tst-summarization \ + --per_device_train_batch_size 8 \ + --per_device_eval_batch_size 16 \ + --num_train_epochs 3 \ + --do_train \ + --do_eval +``` + + + +## تشغيل نص برمجي باستخدام 🤗 Accelerate + +🤗 [Accelerate](https://huggingface.co/docs/accelerate) هي مكتبة خاصة بـ PyTorch فقط توفر طريقة موحدة لتدريب نموذج على عدة أنواع من الإعدادات (الاعتماد على وحدة المعالجة المركزية (CPU) فقط، أو وحدات معالجة الرسومات (GPUs) المتعددة، أو وحدات معالجة الدقة الفائقة (TPUs)) مع الحفاظ على الرؤية الكاملة لحلقة تدريب PyTorch. تأكد من تثبيت 🤗 Accelerate إذا لم يكن لديك بالفعل: + +> ملاحظة: نظرًا لأن Accelerate في حالة تطوير سريع، يجب تثبيت إصدار Git من Accelerate لتشغيل النصوص البرمجية. +```bash +pip install git+https://github.com/huggingface/accelerate +``` + +بدلاً من نص `run_summarization.py` البرمجي، يجب عليك استخدام نص `run_summarization_no_trainer.py` البرمجي. ستكون النصوص البرمجية المدعومة من 🤗 Accelerate لها ملف `task_no_trainer.py` في المجلد. ابدأ بتشغيل الأمر التالي لإنشاء وحفظ ملف تكوين: + +```bash +accelerate config +``` + +اختبر إعدادك للتأكد من أنه تم تكوينه بشكل صحيح: + +```bash +accelerate test +``` + +الآن أنت مستعد لبدء التدريب: + +```bash +accelerate launch run_summarization_no_trainer.py \ + --model_name_or_path google-t5/t5-small \ + --dataset_name cnn \ No newline at end of file From c8e8c4f5b46d3ef727827f6b4016f652aab895d9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:35 +0300 Subject: [PATCH 057/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/task=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/task_summary.md | 323 +++++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 docs/source/ar/task_summary.md diff --git a/docs/source/ar/task_summary.md b/docs/source/ar/task_summary.md new file mode 100644 index 00000000000000..eab5f78682ed79 --- /dev/null +++ b/docs/source/ar/task_summary.md @@ -0,0 +1,323 @@ +# ما الذي يمكن أن تفعله مكتبة 🤗 Transformers؟ + +🤗 Transformers هي مكتبة تضم نماذج مُدربة مسبقًا رائدة في مجال معالجة اللغات الطبيعية (NLP)، ورؤية الكمبيوتر، ومعالجة الصوت والمهام الكلامية. لا تحتوي المكتبة على نماذج المحول فحسب، بل تحتوي أيضًا على نماذج غير محولة مثل الشبكات التلافيفية الحديثة لمهام رؤية الكمبيوتر. إذا نظرت إلى بعض أكثر المنتجات الاستهلاكية شيوعًا اليوم، مثل الهواتف الذكية والتطبيقات وأجهزة التلفزيون، فمن المحتمل أن يكون هناك نوع من تقنية التعلم العميق وراءها. هل تريد إزالة كائن الخلفية من صورة التقطتها بهاتفك الذكي؟ هذا مثال على مهمة التجزئة الشاملة (لا تقلق إذا لم تكن تعرف معنى ذلك بعد، فسوف نصفه في الأقسام التالية!). + +تقدم هذه الصفحة نظرة عامة على مهام الكلام والصوت ورؤية الكمبيوتر ومعالجة اللغات الطبيعية المختلفة التي يمكن حلها باستخدام مكتبة 🤗 Transformers في ثلاثة أسطر فقط من التعليمات البرمجية! + +## الصوت + +تختلف مهام معالجة الصوت والكلام قليلاً عن الطرائق الأخرى بشكل أساسي لأن الصوت كإدخال هو إشارة مستمرة. على عكس النص، لا يمكن تقسيم الموجة الصوتية الخام بشكل مرتب في أجزاء منفصلة بالطريقة التي يمكن بها تقسيم الجملة إلى كلمات. وللتغلب على هذا، يتم عادةً أخذ عينات من الإشارة الصوتية الخام على فترات منتظمة. إذا قمت بأخذ المزيد من العينات ضمن فترة زمنية، يكون معدل العينات أعلى، ويشبه الصوت بشكل أوثق مصدر الصوت الأصلي. + +قامت الطرق السابقة بمعالجة الصوت لاستخراج الميزات المفيدة منه. أصبح من الشائع الآن البدء بمهام معالجة الصوت والكلام عن طريق إدخال الموجة الصوتية الخام مباشرة في مشفر الميزات لاستخراج تمثيل صوتي. وهذا يبسط خطوة المعالجة المسبقة ويسمح للنموذج بتعلم أهم الميزات. + +### تصنيف الصوت + +تصنيف الصوت هو مهمة تقوم بوضع علامات على بيانات الصوت من مجموعة محددة مسبقًا من الفئات. إنه فئة واسعة مع العديد من التطبيقات المحددة، والتي تشمل: + +* تصنيف المشهد الصوتي: وضع علامة على الصوت باستخدام تسمية المشهد ("المكتب"، "الشاطئ"، "الملعب") +* اكتشاف الأحداث الصوتية: وضع علامة على الصوت باستخدام تسمية حدث صوتي ("بوق السيارة"، "نداء الحوت"، "كسر الزجاج") +* وضع العلامات: وضع علامة على الصوت الذي يحتوي على أصوات متعددة (أغاني الطيور، وتحديد المتحدث في اجتماع) +* تصنيف الموسيقى: وضع علامة على الموسيقى بتسمية النوع ("معدن"، "هيب هوب"، "البلد") + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline(task="audio-classification", model="superb/hubert-base-superb-er") +>>> preds = classifier("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac") +>>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds] +>>> preds +[{'score': 0.4532, 'label': 'hap'}, + {'score': 0.3622, 'label': 'sad'}, + {'score': 0.0943, 'label': 'neu'}, + {'score': 0.0903, 'label': 'ang'}] +``` + +### التعرف التلقائي على الكلام + +يقوم التعرف التلقائي على الكلام (ASR) بنقل الكلام إلى نص. إنه أحد أكثر المهام الصوتية شيوعًا ويرجع ذلك جزئيًا إلى أن الكلام هو شكل طبيعي جدًا من أشكال التواصل البشري. اليوم، يتم تضمين أنظمة ASR في منتجات التكنولوجيا "الذكية" مثل مكبرات الصوت والهواتف والسيارات. يمكننا أن نطلب من مساعدينا الافتراضيين تشغيل الموسيقى، وضبط التذكيرات، وإخبارنا بالطقس. +ولكن أحد التحديات الرئيسية التي ساعدت عليها هندسات المحول هي اللغات منخفضة الموارد. من خلال التدريب المسبق على كميات كبيرة من بيانات الكلام، يمكن أن يؤدي ضبط دقة النموذج على ساعة واحدة فقط من بيانات الكلام المُوسم في لغة منخفضة الموارد إلى نتائج عالية الجودة مقارنة بأنظمة ASR السابقة التي تم تدريبها على بيانات موسومة أكثر بـ 100 مرة. + +```py +>>> from transformers import pipeline + +>>> transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-small") +>>> transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac") +{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.'} +``` + +## رؤية الكمبيوتر + +كانت إحدى مهام رؤية الكمبيوتر الأولى والأكثر نجاحًا في التعرف على صور رموز البريد باستخدام [شبكة عصبية تلافيفية (CNN)](glossary#convolution). تتكون الصورة من بكسلات، ولكل بكسل قيمة رقمية. وهذا يجعل من السهل تمثيل صورة كمصفوفة من قيم البكسل. يصف كل مزيج خاص من قيم البكسل ألوان الصورة. + +هناك طريقتان عامتان يمكن من خلالهما حل مهام رؤية الكمبيوتر: + +1. استخدام التلافيف لتعلم الميزات الهرمية لصورة من الميزات منخفضة المستوى إلى الأشياء المجردة عالية المستوى. +2. تقسيم صورة إلى رقع واستخدام محول ليتعلم تدريجياً كيف ترتبط كل رقعة صورة ببعضها البعض لتشكيل صورة. على عكس النهج التصاعدي الذي تفضله شبكة CNN، هذا يشبه إلى حد ما البدء بصورة ضبابية ثم جعلها تدريجياً أكثر وضوحًا. + +### تصنيف الصور + +يقوم تصنيف الصور بوضع علامة على صورة كاملة من مجموعة محددة مسبقًا من الفئات. مثل معظم مهام التصنيف، هناك العديد من حالات الاستخدام العملية لتصنيف الصور، والتي تشمل: + +* الرعاية الصحية: وضع علامة على الصور الطبية للكشف عن الأمراض أو مراقبة صحة المريض +* البيئة: وضع علامة على صور الأقمار الصناعية لرصد إزالة الغابات، أو إبلاغ إدارة الأراضي البرية أو اكتشاف حرائق الغابات +* الزراعة: وضع علامة على صور المحاصيل لمراقبة صحة النبات أو صور الأقمار الصناعية لرصد استخدام الأراضي +* علم البيئة: وضع علامة على صور الأنواع الحيوانية أو النباتية لرصد أعداد الحياة البرية أو تتبع الأنواع المهددة بالانقراض + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline(task="image-classification") +>>> preds = classifier( +... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg" +... ) +>>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds] +>>> print(*preds, sep="\n") +{'score': 0.4335, 'label': 'lynx, catamount'} +{'score': 0.0348, 'label': 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor'} +{'score': 0.0324, 'label': 'snow leopard, ounce, Panthera uncia'} +{'score': 0.0239, 'label': 'Egyptian cat'} +{'score': 0.0229, 'label': 'tiger cat'} +``` + +### كشف الأشياء + +على عكس تصنيف الصور، يقوم كشف الأشياء بتحديد عدة أشياء داخل صورة ومواضع الأشياء في صورة (يحددها مربع الإحاطة). بعض تطبيقات كشف الأشياء تشمل: + +* المركبات ذاتية القيادة: اكتشاف الأشياء المرورية اليومية مثل المركبات الأخرى والمشاة وإشارات المرور +* الاستشعار عن بعد: مراقبة الكوارث، والتخطيط الحضري، والتنبؤ بالطقس +* اكتشاف العيوب: اكتشاف الشقوق أو الأضرار الهيكلية في المباني، وعيوب التصنيع + +```py +>>> from transformers import pipeline + +>>> detector = pipeline(task="object-detection") +>>> preds = detector( +... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg" +... ) +>>> preds = [{"score": round(pred["score"], 4), "label": pred["label"], "box": pred["box"]} for pred in preds] +>>> preds +[{'score': 0.9865, + 'label': 'cat', + 'box': {'xmin': 178, 'ymin': 154, 'xmax': 882, 'ymax': 598}}] +``` + +### تجزئة الصورة + +تجزئة الصورة هي مهمة على مستوى البكسل تقوم بتخصيص كل بكسل في صورة لفئة. إنه يختلف عن كشف الأشياء، والذي يستخدم صناديق الإحاطة لوضع علامات على الأشياء والتنبؤ بها في صورة لأن التجزئة أكثر دقة. يمكن لتجزئة الكائنات اكتشاف الأشياء على مستوى البكسل. هناك عدة أنواع من تجزئة الصور: + +* تجزئة مثيلات: بالإضافة إلى وضع علامة على فئة كائن، فإنه أيضًا يضع علامات على كل مثيل مميز لكائن ("الكلب-1"، "الكلب-2") +* التجزئة الشاملة: مزيج من التجزئة الدلالية ومثيلات التجزئة؛ فهو يضع علامة على كل بكسل مع فئة دلالية **و** كل مثيل مميز لكائن + +تساعد مهام التجزئة في المركبات ذاتية القيادة على إنشاء خريطة على مستوى البكسل للعالم من حولها حتى تتمكن من التنقل بأمان حول المشاة والمركبات الأخرى. كما أنها مفيدة للتصوير الطبي، حيث يمكن لدقة المهمة أن تساعد في تحديد الخلايا أو ميزات الأعضاء غير الطبيعية. يمكن أيضًا استخدام تجزئة الصور في التجارة الإلكترونية لتجربة الملابس افتراضيًا أو إنشاء تجارب الواقع المعزز من خلال تراكب الأشياء في العالم الحقيقي من خلال الكاميرا الخاصة بك. + +```py +>>> from transformers import pipeline + +>>> segmenter = pipeline(task="image-segmentation") +>>> preds = segmenter( +... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg" +... ) +>>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds] +>>> print(*preds, sep="\n") +{'score': 0.9879, 'label': 'LABEL_184'} +{'score': 0.9973, 'label': 'snow'} +{'score': 0.9972, 'label': 'cat'} +``` + +### تقدير العمق + +يقوم تقدير العمق بالتنبؤ بمسافة كل بكسل في صورة من الكاميرا. تعد هذه المهمة لرؤية الكمبيوتر مهمة بشكل خاص لفهم المشهد وإعادة الإعمار. على سبيل المثال، في السيارات ذاتية القيادة، تحتاج المركبات إلى فهم مدى بعد الأشياء مثل المشاة ولافتات المرور والمركبات الأخرى لتجنب العقبات والاصطدامات. تساعد معلومات العمق أيضًا في بناء التمثيلات ثلاثية الأبعاد من الصور ثنائية الأبعاد ويمكن استخدامها لإنشاء تمثيلات ثلاثية الأبعاد عالية الجودة للهياكل البيولوجية أو المباني. + +هناك نهجان لتقدير العمق: + +* ستيريو: يتم تقدير العمق عن طريق مقارنة صورتين لنفس الصورة من زوايا مختلفة قليلاً +* أحادية العين: يتم تقدير العمق من صورة واحدة + +```py +>>> from transformers import pipeline + +>>> depth_estimator = pipeline(task="depth-estimation") +>>> preds = depth_estimator( +... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg" +... ) +``` + +## معالجة اللغات الطبيعية + +تعد مهام NLP من بين أكثر أنواع المهام شيوعًا لأن النص هو طريقة طبيعية جدًا للتواصل معنا. وللحصول على نص بتنسيق يتعرف عليه النموذج، يجب توكيده. وهذا يعني تقسيم تسلسل النص إلى كلمات أو أجزاء كلمات منفصلة (رموز) ثم تحويل هذه الرموز إلى أرقام. ونتيجة لذلك، يمكنك تمثيل تسلسل نصي كتسلسل من الأرقام، وبمجرد حصولك على تسلسل من الأرقام، يمكن إدخاله في نموذج لحل جميع أنواع مهام NLP! + +### تصنيف النصوص + +مثل مهام التصنيف في أي طريقة، يقوم تصنيف النص بوضع علامة على تسلسل نصي (يمكن أن يكون على مستوى الجملة أو فقرة أو مستند) من مجموعة محددة مسبقًا من الفئات. هناك العديد من التطبيقات العملية لتصنيف النصوص، والتي تشمل: + +* تحليل المشاعر: وضع علامة على النص وفقًا لبعض القطبية مثل `الإيجابية` أو `السلبية` والتي يمكن أن تُعلم وتدعم عملية صنع القرار في مجالات مثل السياسة والمالية والتسويق +* تصنيف المحتوى: وضع علامة على النص وفقًا لبعض الموضوعات للمساعدة في تنظيم المعلومات وتصفيتها في الأخبار والتغذية وسائل التواصل الاجتماعي (`الطقس`، `الرياضة`، `التمويل`، إلخ) + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline(task="sentiment-analysis") +>>> preds = classifier("Hugging Face is the best thing since sliced bread!") +>>> preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds] +>>> preds +[{'score': 0.9991, 'label': 'POSITIVE'}] +``` + +### تصنيف الرموز + +في أي مهمة NLP، تتم معالجة النص عن طريق فصل تسلسل النص إلى كلمات أو أجزاء كلمات منفصلة. هذه هي ما يعرف باسم [الرموز](glossary#token). يقوم تصنيف الرموز بتخصيص تسمية لكل رمز من مجموعة محددة مسبقًا من الفئات. + +هناك نوعان شائعان من تصنيف الرموز: + +* التعرف على الكيانات المسماة (NER): وضع علامة على الرمز وفقًا لفئة الكيان مثل المنظمة أو الشخص أو الموقع أو التاريخ. يعد NER شائعًا بشكل خاص في الإعدادات الطبية الحيوية، حيث يمكنه وضع علامات على الجينات والبروتينات وأسماء الأدوية. +* وضع العلامات النحوية (POS): وضع علامة على الرمز وفقًا لجزء الكلام الخاص به مثل الاسم أو الفعل أو الصفة. POS مفيد لمساعدة أنظمة الترجمة على فهم كيفية اختلاف كلمتين متطابقتين نحويًا (المصرف كاسم مقابل المصرف كفعل). + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline(task="ner") +>>> preds = classifier("Hugging Face is a French company based in New York City.") +>>> preds = [ +... { +... "entity": pred["entity"], +... "score": round(pred["score"], 4), +... "index": pred["index"], +... "word": pred["word"], +... "start": pred["start"], +... "end": pred["end"], +... } +... for pred in preds +... ] +>>> print(*preds, sep="\n") +{'entity': 'I-ORG', 'score': 0.9968, 'index': 1, 'word': 'Hu', 'start': 0, 'end': 2} +{'entity': 'I-ORG', 'score': 0.9293, 'index': 2, 'word': '##gging', 'start': 2, 'end': 7} +{'entity': 'I-ORG', 'score': 0.9763, 'index': 3, 'word': 'Face', 'start': 8, 'end': 12} +{'entity': 'I-MISC', 'score': 0.9983, 'index': 6, 'word': 'French', 'start': 18, 'end': 24} +{'entity': 'I-LOC', 'score': 0.999, 'index': 10, 'word': 'New', 'start': 42, 'end': 45} +{'entity': 'I-LOC', 'score': 0.9987, 'index': 11, 'word': 'York', 'start': 46, 'end': 50} +{'entity': 'I-LOC', 'score': 0.9992, 'index': 12, 'word': 'City', 'start': 51, 'end': 55} +``` +### الإجابة على الأسئلة + +الإجابة على الأسئلة هي مهمة أخرى على مستوى الرمز تعيد إجابة على سؤال، أحيانًا مع السياق (مفتوح المجال) وأحيانًا بدون سياق (مجال مغلق). تحدث هذه المهمة كلما سألنا مساعدًا افتراضيًا شيئًا مثل ما إذا كان المطعم مفتوحًا. يمكن أن يساعد أيضًا في دعم العملاء أو الدعم الفني ويساعد محركات البحث في استرداد المعلومات ذات الصلة التي تطلبها. + +هناك نوعان شائعان من الإجابة على الأسئلة: + +* الاستخراجية: بالنظر إلى سؤال وبعض السياق، فإن الإجابة هي جزء من النص من السياق الذي يجب على النموذج استخراجه +* التلخيصي: بالنظر إلى سؤال وبعض السياق، يتم إنشاء الإجابة من السياق؛ يتعامل نهج [`Text2TextGenerationPipeline`] مع هذا النهج التلخيصي بدلاً من [`QuestionAnsweringPipeline`] الموضح أدناه + + +```py +>>> from transformers import pipeline + +>>> question_answerer = pipeline(task="question-answering") +>>> preds = question_answerer( +... question="What is the name of the repository?", +... context="The name of the repository is huggingface/transformers", +... ) +>>> print( +... f"score: {round(preds['score'], 4)}, start: {preds['start']}, end: {preds['end']}, answer: {preds['answer']}" +... ) +score: 0.9327, start: 30, end: 54, answer: huggingface/transformers +``` + +### التلخيص + +ينشئ التلخيص نسخة أقصر من نص من نص أطول مع محاولة الحفاظ على معظم معنى المستند الأصلي. التلخيص هو مهمة تسلسل إلى تسلسل؛ فهو يخرج تسلسل نص أقصر من الإدخال. هناك الكثير من الوثائق الطويلة التي يمكن تلخيصها لمساعدة القراء على فهم النقاط الرئيسية بسرعة. مشاريع القوانين والوثائق القانونية والمالية وبراءات الاختراع والأوراق العلمية هي مجرد أمثلة قليلة للوثائق التي يمكن تلخيصها لتوفير وقت القراء وخدمة كمساعد للقراءة. + +مثل الإجابة على الأسئلة، هناك نوعان من التلخيص: + +* الاستخراجية: تحديد واستخراج الجمل الأكثر أهمية من النص الأصلي +* التلخيصي: إنشاء ملخص الهدف (الذي قد يتضمن كلمات جديدة غير موجودة في وثيقة الإدخال) من النص الأصلي؛ يستخدم النهج التلخيصي [`SummarizationPipeline`] + +```py +>>> from transformers import pipeline + +>>> summarizer = pipeline(task="summarization") +>>> summarizer( +... "In this work, we presented the Transformer, the first sequence transduction model based entirely on attention, replacing the recurrent layers most commonly used in encoder-decoder architectures with multi-headed self-attention. For translation tasks, the Transformer can be trained significantly faster than architectures based on recurrent or convolutional layers. On both WMT 2014 English-to-German and WMT 2014 English-to-French translation tasks, we achieve a new state of the art. In the former task our best model outperforms even all previously reported ensembles." +... ) +[{'summary_text': ' The Transformer is the first sequence transduction model based entirely on attention . It replaces the recurrent layers most commonly used in encoder-decoder architectures with multi-headed self-attention . For translation tasks, the Transformer can be trained significantly faster than architectures based on recurrent or convolutional layers .'}] +``` + +### الترجمة + +تترجم الترجمة تسلسل نص بلغة واحدة إلى لغة أخرى. من المهم مساعدة الأشخاص من خلفيات مختلفة على التواصل مع بعضهم البعض، ومساعدة المحتوى على الوصول إلى جمهور أوسع، وحتى أن يكون أداة تعليمية لمساعدة الأشخاص على تعلم لغة جديدة. إلى جانب التلخيص، تعد الترجمة مهمة تسلسل إلى تسلسل، مما يعني أن النموذج يتلقى تسلسل إدخال ويعيد تسلسل الإخراج المستهدف. + +في الأيام الأولى، كانت نماذج الترجمة في الغالب أحادية اللغة، ولكن مؤخرًا، كان هناك اهتمام متزايد بالنماذج متعددة اللغات التي يمكنها الترجمة بين العديد من أزواج اللغات. + +```py +>>> from transformers import pipeline + +>>> text = "translate English to French: Hugging Face is a community-based open-source platform for machine learning." +>>> translator = pipeline(task="translation", model="google-t5/t5-small") +>>> translator(text) +[{'translation_text': "Hugging Face est une tribune communautaire de l'apprentissage des machines."}] +``` + +### نمذجة اللغة + +نمذجة اللغة هي مهمة التنبؤ بكلمة في تسلسل نص. لقد أصبح مهمة NLP شائعة للغاية لأن النموذج اللغوي المسبق التدريب يمكن أن يتم ضبطه بشكل دقيق للعديد من مهام التدفق السفلي الأخرى. في الآونة الأخيرة، كان هناك الكثير من الاهتمام بنماذج اللغة الكبيرة (LLMs) التي توضح التعلم الصفري أو القليل من التعلم. وهذا يعني أن النموذج يمكنه حل المهام التي لم يتم تدريبه عليها بشكل صريح! يمكن استخدام نماذج اللغة لإنشاء نص سلس ومقنع، على الرغم من أنه يجب أن تكون حذرًا لأن النص قد لا يكون دائمًا دقيقًا. + +هناك نوعان من نمذجة اللغة: + +* السببية: هدف النموذج هو التنبؤ بالرمز التالي في تسلسل، ويتم إخفاء الرموز المستقبلية + +```py +>>> from transformers import pipeline + +>>> prompt = "Hugging Face is a community-based open-source platform for machine learning." +>>> generator = pipeline(task="text-generation") +>>> generator(prompt) # doctest: +SKIP +``` + +* الأقنعة: هدف النموذج هو التنبؤ برمز مقنع في تسلسل مع الوصول الكامل إلى الرموز في التسلسل + +```py +>>> text = "Hugging Face is a community-based open-source for machine learning." +>>> fill_mask = pipeline(task="fill-mask") +>>> preds = fill_mask(text, top_k=1) +>>> preds = [ +... { +... "score": round(pred["score"], 4), +... "token": pred["token"], +... "token_str": pred["token_str"], +... "sequence": pred["sequence"], +... } +... for pred in preds +... ] +>>> preds +[{'score': 0.2236, + 'token': 1761, + 'token_str': ' platform', + 'sequence': 'Hugging Face is a community-based open-source platform for machine learning.'}] +``` + +## متعدد الوسائط: + +تتطلب المهام متعددة الوسائط من النموذج معالجة وسائط بيانات متعددة (نص أو صورة أو صوت أو فيديو) لحل مشكلة معينة. يعد إنشاء عنوان الصورة مثالاً على مهمة متعددة الوسائط حيث يأخذ النموذج صورة كإدخال وينتج تسلسل نصي يصف الصورة أو بعض خصائصها. + +على الرغم من أن النماذج متعددة الوسائط تعمل مع أنواع بيانات أو طرائق مختلفة، إلا أن خطوات المعالجة المسبقة تساعد النموذج داخليًا على تحويل جميع أنواع البيانات إلى تضمينات (متجهات أو قوائم من الأرقام التي تحتوي على معلومات ذات معنى حول البيانات). بالنسبة لمهمة مثل إنشاء عنوان للصورة، يتعلم النموذج العلاقات بين تضمينات الصور وتضمينات النص. + +### الإجابة على أسئلة المستندات: + +الإجابة على أسئلة المستندات هي مهمة تقوم بالإجابة على أسئلة اللغة الطبيعية من مستند. على عكس مهمة الإجابة على الأسئلة على مستوى الرمز التي تأخذ النص كإدخال، فإن الإجابة على أسئلة المستندات تأخذ صورة لمستند كإدخال بالإضافة إلى سؤال حول المستند وتعيد الإجابة. يمكن استخدام الإجابة على أسئلة المستندات لتفسير المستندات المهيكلة واستخراج المعلومات الرئيسية منها. في المثال أدناه، يمكن استخراج المبلغ الإجمالي والتغيير المستحق من الإيصال. + +```py +>>> from transformers import pipeline +>>> from PIL import Image +>>> import requests + +>>> url = "https://huggingface.co/datasets/hf-internal-testing/example-documents/resolve/main/jpeg_images/2.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> doc_question_answerer = pipeline("document-question-answering", model="magorshunov/layoutlm-invoices") +>>> preds = doc_question_answerer( +... question="ما هو المبلغ الإجمالي؟", +... image=image, +... ) +>>> preds +[{'score': 0.8531, 'answer': '17,000', 'start': 4, 'end': 4}] +``` + +نأمل أن تكون هذه الصفحة قد زودتك ببعض المعلومات الأساسية حول جميع أنواع المهام في كل طريقة وأهمية كل منها العملية. في القسم التالي، ستتعلم كيف تعمل مكتبة 🤗 Transformers لحل هذه المهام. \ No newline at end of file From 1eaea6410a70ffdf45cb8186319b8638cbf92022 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:37 +0300 Subject: [PATCH 058/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks=5Fexplained.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks_explained.md | 279 ++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 docs/source/ar/tasks_explained.md diff --git a/docs/source/ar/tasks_explained.md b/docs/source/ar/tasks_explained.md new file mode 100644 index 00000000000000..826be566f0b856 --- /dev/null +++ b/docs/source/ar/tasks_explained.md @@ -0,0 +1,279 @@ +# كيف تحل نماذج 🤗 Transformers المهام + +في [ما الذي يمكن أن تفعله نماذج 🤗 Transformers](task_summary)، تعلمت عن معالجة اللغات الطبيعية (NLP)، والخطاب والصوت، ورؤية الكمبيوتر، وبعض التطبيقات المهمة لها. ستنظر هذه الصفحة عن كثب في كيفية حل النماذج لهذه المهام وتوضيح ما يحدث تحت الغطاء. هناك العديد من الطرق لحل مهمة معينة، وقد تنفذ بعض النماذج تقنيات معينة أو حتى تتناول المهمة من زاوية جديدة، ولكن بالنسبة لنماذج Transformer، فإن الفكرة العامة هي نفسها. وبفضل تصميمها المرن، فإن معظم النماذج هي متغير لمبنى مشفر أو فك تشفير أو ترميز-فك تشفير. بالإضافة إلى نماذج Transformer، تحتوي مكتبتنا أيضًا على العديد من الشبكات العصبية التلافيفية (CNNs)، والتي لا تزال تستخدم حتى اليوم لمهام رؤية الكمبيوتر. سنشرح أيضًا كيف تعمل شبكة CNN الحديثة. + +لشرح كيفية حل المهام، سنشرح ما يحدث داخل النموذج لإخراج تنبؤات مفيدة. + +- [Wav2Vec2](model_doc/wav2vec2) لتصنيف الصوت والتعرف التلقائي على الكلام (ASR) +- [Vision Transformer (ViT)](model_doc/vit) و [ConvNeXT](model_doc/convnext) لتصنيف الصور +- [DETR](model_doc/detr) للكشف عن الأشياء +- [Mask2Former](model_doc/mask2former) لتجزئة الصورة +- [GLPN](model_doc/glpn) لتقدير العمق +- [BERT](model_doc/bert) لمهام NLP مثل تصنيف النصوص، وتصنيف الرموز، والإجابة على الأسئلة التي تستخدم مشفرًا +- [GPT2](model_doc/gpt2) لمهام NLP مثل توليد النصوص التي تستخدم فك تشفير +- [BART](model_doc/bart) لمهام NLP مثل الملخص والترجمة التي تستخدم ترميز-فك تشفير + + + +قبل المتابعة، من الجيد أن يكون لديك بعض المعرفة الأساسية بهندسة Transformer الأصلية. إن معرفة كيفية عمل المشفرات وفك التشفير والاهتمام سوف تساعدك في فهم كيفية عمل نماذج Transformer المختلفة. إذا كنت مبتدئًا أو بحاجة إلى مراجعة، فراجع [دورتنا](https://huggingface.co/course/chapter1/4؟fw=pt) لمزيد من المعلومات! + + + +## الكلام والصوت + +[Wav2Vec2](model_doc/wav2vec2) هو نموذج ذاتي الإشراف تم تدريبه مسبقًا على بيانات الكلام غير الموسومة وتم ضبط دقته على بيانات موسومة لتصنيف الصوت والتعرف التلقائي على الكلام. + +
+ +
+ +يحتوي هذا النموذج على أربعة مكونات رئيسية: + +1. *مشفّر الميزات* يأخذ الموجة الصوتية الخام، ويقوم بتطبيعها إلى متوسط صفري وانحراف معياري بوحدة، وتحويلها إلى تسلسل من متجهات الميزات التي يبلغ طول كل منها 20 مللي ثانية. + +2. الموجات مستمرة بطبيعتها، لذلك لا يمكن تقسيمها إلى وحدات منفصلة مثل تسلسل النص الذي يمكن تقسيمه إلى كلمات. ولهذا السبب يتم تمرير متجهات الميزات إلى *وحدة التكميم*، والتي تهدف إلى تعلم وحدات الكلام المنفصلة. يتم اختيار وحدة الكلام من مجموعة من كلمات الرمز، والمعروفة باسم *كتاب الرموز* (يمكنك اعتبار هذا بمثابة المفردات). يتم اختيار المتجه أو وحدة الكلام، التي تمثل أفضل تمثيل لإدخال الصوت المستمر، من كتاب الرموز، ثم يتم تمريره عبر النموذج. +3. يتم إخفاء حوالي نصف متجهات الميزات بشكل عشوائي، ويتم تغذية متجه الميزة المخفية في *شبكة السياق*، والتي تعد مشفر Transformer الذي يضيف أيضًا تضمينات موضعية نسبية. + +4. الهدف من التدريب المسبق لشبكة السياق هو *مهمة تناقضية*. يجب على النموذج التنبؤ بالتمثيل الحقيقي للكلام الكمي للتنبؤ المخفي من مجموعة من التمثيلات الكاذبة، مما يشجع النموذج على العثور على متجه السياق الأكثر تشابهًا ووحدة الكلام الكمي (علامة التصنيف). + +الآن بعد أن تم تدريب Wav2Vec2 مسبقًا، يمكنك ضبط دقته على بياناتك لتصنيف الصوت أو التعرف التلقائي على الكلام! + +### تصنيف الصوت + +لاستخدام النموذج الذي تم تدريبه مسبقًا لتصنيف الصوت، أضف رأس تصنيف تسلسلي أعلى نموذج Wav2Vec2 الأساسي. رأس التصنيف هو طبقة خطية تقبل الحالات المخفية للمشفر. تمثل الحالات المخفية الميزات التي تم تعلمها من كل إطار صوتي والذي يمكن أن يكون له أطوال مختلفة. لتحويلها إلى متجه ثابت الطول، يتم تجميع الحالات المخفية أولاً ثم تحويلها إلى احتمالات عبر تسميات الفئات. يتم حساب خسارة الانتروبيا الصافية بين الاحتمالات والهدف للعثور على الفئة الأكثر احتمالًا. + +هل أنت مستعد لتجربة تصنيف الصوت؟ تحقق من دليلنا الكامل [تصنيف الصوت](tasks/audio_classification) لمعرفة كيفية ضبط دقة Wav2Vec2 واستخدامه للاستدلال! + +### التعرف التلقائي على الكلام + +لاستخدام النموذج الذي تم تدريبه مسبقًا للتعرف التلقائي على الكلام، أضف رأس نمذجة اللغة أعلى نموذج Wav2Vec2 الأساسي لـ [تصنيف الوقت الاتصالي (CTC)](glossary#connectionist-temporal-classification-ctc). رأس نمذجة اللغة عبارة عن طبقة خطية تقبل الحالات المخفية للمشفر وتحويلها إلى احتمالات. يمثل كل احتمال فئة رمزية (يأتي عدد الرموز من مفردات المهمة). يتم حساب خسارة CTC بين الاحتمالات والأهداف للعثور على تسلسل الرموز الأكثر احتمالًا، والتي يتم فك تشفيرها بعد ذلك إلى نسخة. + +هل أنت مستعد لتجربة التعرف التلقائي على الكلام؟ تحقق من دليلنا الكامل [التعرف التلقائي على الكلام](tasks/asr) لمعرفة كيفية ضبط دقة Wav2Vec2 واستخدامه للاستدلال! + +## رؤية الكمبيوتر + +هناك طريقتان لتناول مهام رؤية الكمبيوتر: + +1. قم بتقسيم الصورة إلى تسلسل من الرقع ومعالجتها بالتوازي مع Transformer. +2. استخدم شبكة عصبية تلافيفية حديثة، مثل [ConvNeXT](model_doc/convnext)، والتي تعتمد على الطبقات التلافيفية ولكنها تعتمد تصاميم الشبكات الحديثة. + + + +يقوم النهج الثالث بمزج المحولات مع التلافيف (على سبيل المثال، [Convolutional Vision Transformer](model_doc/cvt) أو [LeViT](model_doc/levit)). لن نناقشها لأنها تجمع ببساطة بين النهجين اللذين ندرسهما هنا. + + + +يتم استخدام ViT و ConvNeXT بشكل شائع لتصنيف الصور، ولكن بالنسبة لمهام الرؤية الأخرى مثل اكتشاف الأشياء والتجزئة وتقدير العمق، سنلقي نظرة على DETR و Mask2Former و GLPN، على التوالي؛ هذه النماذج مناسبة بشكل أفضل لتلك المهام. + +### تصنيف الصور + +يمكن استخدام كل من ViT و ConvNeXT لتصنيف الصور؛ الفرق الرئيسي هو أن ViT يستخدم آلية اهتمام بينما يستخدم ConvNeXT التلافيف. + +#### المحول Transformer + +[ViT](model_doc/vit) يستبدل التلافيف تمامًا بهندسة Transformer نقية. إذا كنت على دراية بـ Transformer الأصلي، فأنت بالفعل في طريقك إلى فهم ViT. + +
+ +
+ +كان التغيير الرئيسي الذي قدمه ViT هو كيفية تغذية الصور إلى Transformer: +قدم ViT التغيير الرئيسي في كيفية تغذية الصور إلى Transformer: + +1. يتم تقسيم الصورة إلى رقع مربعة غير متداخلة، يتم تحويل كل منها إلى متجه أو *تضمين رقعة*. يتم إنشاء تضمينات الرقع من طبقة تلافيفية ثنائية الأبعاد 2D والتي تقوم بإنشاء أبعاد الإدخال الصحيحة (والتي بالنسبة إلى Transformer الأساسي هي 768 قيمة لكل تضمين رقعة). إذا كان لديك صورة 224x224 بكسل، فيمكنك تقسيمها إلى 196 رقعة صورة 16x16. تمامًا مثل كيفية تمييز النص إلى كلمات، يتم "تمييز" الصورة إلى تسلسل من الرقع. + +2. يتم إضافة *تضمين قابل للتعلم* - رمز خاص `[CLS]` - إلى بداية تضمينات الرقع تمامًا مثل BERT. يتم استخدام الحالة المخفية النهائية للرمز `[CLS]` كإدخال لرأس التصنيف المرفق؛ يتم تجاهل الإخراج الآخر. تساعد هذه الرموز النموذج على تعلم كيفية ترميز تمثيل الصورة. + +3. الشيء الأخير الذي يجب إضافته إلى تضمينات الرقع والتضمينات القابلة للتعلم هو *تضمينات الموضع* لأن النموذج لا يعرف كيفية ترتيب رقع الصورة. تضمينات الموضع قابلة للتعلم أيضًا ولها نفس حجم تضمينات الرقع. أخيرًا، يتم تمرير جميع التضمينات إلى مشفر Transformer. + +4. يتم تمرير الإخراج، وتحديدًا الإخراج مع الرمز `[CLS]`، إلى رأس الإدراك المتعدد الطبقات (MLP). الهدف من التدريب المسبق لـ ViT هو التصنيف البسيط. مثل رؤوس التصنيف الأخرى، يحول رأس MLP الإخراج إلى احتمالات عبر تسميات الفئات ويحسب خسارة الانتروبيا الصافية للعثور على الفئة الأكثر احتمالًا. + +هل أنت مستعد لتجربة تصنيف الصور؟ تحقق من دليلنا الكامل [تصنيف الصور](tasks/image_classification) لمعرفة كيفية ضبط دقة ViT واستخدامه للاستدلال! + +#### CNN + + + +يوضح هذا القسم بشكل موجز عمليات التجميع، ولكن سيكون من المفيد أن يكون لديك فهم مسبق لكيفية تغيير شكل الصورة وحجمها. إذا كنت غير معتاد على التجميعات، تحقق من [شبكات التجميع العصبية الفصل](https://github.com/fastai/fastbook/blob/master/13_convolutions.ipynb) من كتاب fastai! + + + +[ConvNeXT](model_doc/convnext) هو بنية CNN تعتمد تصاميم الشبكات الجديدة والحديثة لتحسين الأداء. ومع ذلك، لا تزال التجميعات في قلب النموذج. من منظور عالي المستوى، [التجميع](glossary#convolution) هو عملية حيث يتم ضرب مصفوفة أصغر (*kernel*) بمقطع صغير من بكسلات الصورة. يحسب بعض الميزات منه، مثل نسيج معين أو انحناء خط. ثم ينزلق إلى النافذة التالية من البكسلات؛ المسافة التي تقطعها التجميع تسمى *الخطوة*. + +
+ +
+ +تجميع أساسي بدون حشو أو خطوة، مأخوذ من دليل الحساب التجميعي للتعلم العميق. + +يمكنك إدخال هذا الإخراج إلى طبقة تجميع أخرى، ومع كل طبقة متتالية، تتعلم الشبكة أشياء أكثر تعقيدًا وتجريدية مثل الهوت دوج أو الصواريخ. بين طبقات التجميع، من الشائع إضافة طبقة تجميع لتقليل الأبعاد وجعل النموذج أكثر قوة ضد تباين موضع ميزة. + +
+ +
+ +يقوم ConvNeXT بتحديث شبكة CNN بطرق خمس: + +1. تغيير عدد الكتل في كل مرحلة و"patchify" صورة باستخدام خطوة أكبر وحجم نواة مطابق. تجعل استراتيجية التجزئة غير المتداخلة هذه مشابهة للطريقة التي يقسم بها ViT صورة إلى رقع. + +2. تقلص طبقة *العنق الزجاجي* عدد القنوات ثم تستعيدها لأنها أسرع في إجراء تجميع 1x1، ويمكنك زيادة العمق. يقوم عنق الزجاجة المعكوس بالعكس عن طريق توسيع عدد القنوات وتقلصها، وهو أكثر كفاءة في الذاكرة. + +3. استبدل طبقة التجميع 3x3 النموذجية في طبقة عنق الزجاجة بـ *التجميع بالعمق*، والذي يطبق تجميعًا على كل قناة إدخال بشكل منفصل ثم يقوم بتراصها مرة أخرى في النهاية. هذا يوسع عرض الشبكة لتحسين الأداء. + +4. لدى ViT مجال استقبال عالمي مما يعني أنه يمكنه رؤية المزيد من الصورة في وقت واحد بفضل آلية الاهتمام الخاصة به. تحاول ConvNeXT محاكاة هذا التأثير عن طريق زيادة حجم النواة إلى 7x7. + +5. يقوم ConvNeXT أيضًا بإجراء العديد من تغييرات تصميم الطبقة التي تحاكي نماذج المحول. هناك عدد أقل من طبقات التنشيط والطبقات العادية، يتم تبديل دالة التنشيط إلى GELU بدلاً من ReLU، ويستخدم LayerNorm بدلاً من BatchNorm. + +يتم تمرير الإخراج من كتل التجميع إلى رأس تصنيف يحول الإخراج إلى احتمالات ويحسب الخسارة المتقاطعة للعثور على التصنيف الأكثر احتمالاً. + +### اكتشاف الكائنات + +[DETR](model_doc/detr)، *DEtection TRansformer*، هو نموذج اكتشاف كائنات من البداية إلى النهاية يجمع بين CNN مع محول المشفر-فك التشفير. + +
+ +
+ +1. يأخذ العمود الفقري CNN *المدرب مسبقًا* صورة، ممثلة بقيم بكسلاتها، وينشئ خريطة ميزات منخفضة الدقة لها. يتم تطبيق تجميع 1x1 على خريطة الميزات لتقليل الأبعاد، ويتم إنشاء خريطة ميزات جديدة بتمثيل صورة عالي المستوى. نظرًا لأن المحول هو نموذج تسلسلي، يتم تسطيح خريطة الميزات إلى تسلسل من متجهات الميزات التي يتم دمجها مع تضمينات الموضع. + +2. يتم تمرير متجهات الميزات إلى المشفر، والذي يتعلم تمثيلات الصورة باستخدام طبقات الاهتمام الخاصة به. بعد ذلك، يتم دمج حالات المشفر المخفية مع *استعلامات الكائن* في فك التشفير. استعلامات الكائن هي تضمينات مكتسبة تركز على مناطق مختلفة من الصورة، ويتم تحديثها أثناء مرورها عبر كل طبقة اهتمام. يتم تمرير حالات فك التشفير المخفية إلى شبكة تغذية إلى الأمام التي تتنبأ بإحداثيات مربع الحدود وتصنيف العلامة لكل استعلام كائن، أو `no object` إذا لم يكن هناك أي منها. + + يفك تشفير كل استعلام كائن بالتوازي لإخراج *N* تنبؤات نهائية، حيث *N* هو عدد الاستعلامات. على عكس نموذج التلقائي النموذجي الذي يتنبأ بعنصر واحد في كل مرة، فإن اكتشاف الكائنات هو مهمة تنبؤ مجموعة (`bounding box`، `class label`) التي تقوم بـ *N* تنبؤات في مرور واحد. + +3. يستخدم DETR *خسارة المطابقة ثنائية* أثناء التدريب لمقارنة عدد ثابت من التنبؤات بمجموعة ثابتة من علامات التصنيف الحقيقية. إذا كان هناك عدد أقل من علامات التصنيف الحقيقية في مجموعة من العلامات *N*، فيتم حشوها باستخدام فئة `no object`. تشجع وظيفة الخسارة هذه DETR على العثور على تعيين واحد لواحد بين التنبؤات وعلامات التصنيف الحقيقية. إذا لم تكن مربعات الحدود أو علامات التصنيف صحيحة، يتم تكبد خسارة. وبالمثل، إذا تنبأ DETR بكائن غير موجود، فإنه يتم معاقبته. وهذا يشجع DETR على العثور على كائنات أخرى في الصورة بدلاً من التركيز على كائن بارز حقًا. + +يتم إضافة رأس اكتشاف كائن أعلى DETR للعثور على تصنيف العلامة وإحداثيات مربع الحدود. هناك مكونان لرأس اكتشاف الكائنات: طبقة خطية لتحويل حالات فك التشفير المخفية إلى احتمالات عبر علامات التصنيف، وMLP للتنبؤ بمربع الحدود. + +هل أنت مستعد لتجربة يدك في اكتشاف الكائنات؟ تحقق من دليلنا الكامل [دليل اكتشاف الكائنات](tasks/object_detection) لمعرفة كيفية ضبط DETR واستخدامه للاستدلال! + +### تجزئة الصورة + +[Mask2Former](model_doc/mask2former) هو بنية عالمية لحل جميع أنواع مهام تجزئة الصورة. عادةً ما تكون نماذج التجزئة التقليدية مصممة خصيصًا لمهمة فرعية معينة من مهام تجزئة الصورة، مثل مثيل أو تجزئة دلالية أو تجزئة بانوبتيك. يُنشئ Mask2Former كلًا من تلك المهام كمشكلة *تصنيف الأقنعة*. يصنف تصنيف الأقنعة البكسلات إلى *N* مقاطع، ويتنبأ بـ *N* أقنعة وتصنيفها المقابل لعلامة التسمية لمقابل صورة معينة. سنشرح كيفية عمل Mask2Former في هذا القسم، وبعد ذلك يمكنك تجربة ضبط SegFormer في النهاية. + +
+ +
+ +هناك ثلاثة مكونات رئيسية لـ Mask2Former: + +1. العمود الفقري [Swin](model_doc/swin) يقبل صورة وينشئ خريطة ميزات ذات دقة منخفضة من 3 عمليات تجميع متتالية 3x3. + +2. يتم تمرير خريطة الميزات إلى *فك تشفير البكسل* الذي يقوم تدريجياً بزيادة حجم ميزات الدقة المنخفضة إلى تضمينات لكل بكسل. في الواقع، يقوم فك تشفير البكسل بإنشاء ميزات متعددة النطاقات (تحتوي على كل من الميزات منخفضة وعالية الدقة) بدقة 1/32 و1/16 و1/8 من الصورة الأصلية. + +3. يتم تغذية كل من خرائط الميزات ذات المقاييس المختلفة هذه بشكل متتالي إلى طبقة واحدة من طبقات فك التشفير في كل مرة لالتقاط الأجسام الصغيرة من ميزات الدقة العالية. المفتاح إلى Mask2Former هو آلية *الاهتمام المقنع* في فك التشفير. على عكس الاهتمام المتقاطع الذي يمكن أن يركز على الصورة بأكملها، يركز الاهتمام المقنع فقط على منطقة معينة من الصورة. هذا أسرع ويؤدي إلى أداء أفضل لأن الميزات المحلية لصورة كافية للنموذج للتعلم منها. + +4. مثل [DETR](tasks_explained#object-detection)، يستخدم Mask2Former أيضًا استعلامات كائن مكتسبة ويجمعها مع ميزات الصورة من فك تشفير البكسل لإجراء تنبؤ مجموعة (`class label`، `mask prediction`). يتم تمرير حالات فك التشفير المخفية إلى طبقة خطية وتحويلها إلى احتمالات عبر علامات التصنيف. يتم حساب الخسارة المتقاطعة بين الاحتمالات وعلامة التسمية لتحديد الأكثر احتمالاً. + + يتم إنشاء تنبؤات الأقنعة عن طريق الجمع بين تضمينات البكسل وحالات فك التشفير المخفية النهائية. يتم حساب الخسارة المتقاطعة سيجمويد وخسارة النرد بين الاحتمالات والقناع الحقيقي لتحديد القناع الأكثر احتمالاً. + +هل أنت مستعد لتجربة يدك في اكتشاف الكائنات؟ تحقق من دليلنا الكامل [دليل تجزئة الصورة](tasks/semantic_segmentation) لمعرفة كيفية ضبط SegFormer واستخدامه للاستدلال! + +### تقدير العمق + +[GLPN](model_doc/glpn)، شبكة المسار العالمية المحلية، هي محول ل تقدير العمق الذي يجمع بين مشفر [SegFormer](model_doc/segformer) مع فك تشفير خفيف الوزن. + +
+ +
+ +1. مثل ViT، يتم تقسيم الصورة إلى تسلسل من الرقع، باستثناء أن هذه رقع الصورة أصغر. هذا أفضل لمهام التنبؤ الكثيفة مثل التجزئة أو تقدير العمق. يتم تحويل رقع الصورة إلى تضمينات رقعة (راجع قسم [تصنيف الصور](#image-classification) لمزيد من التفاصيل حول كيفية إنشاء تضمينات الرقع)، والتي يتم تغذيتها إلى المشفر. + +2. يقبل المشفر تضمينات الرقع، ويمررها عبر عدة كتل مشفرة. يتكون كل كتلة من طبقات الاهتمام وMix-FFN. الغرض من هذا الأخير هو توفير معلومات الموضع. في نهاية كل كتلة مشفرة توجد طبقة *دمج الرقع* لإنشاء تمثيلات هرمية. يتم دمج ميزات كل مجموعة من الرقع المجاورة، ويتم تطبيق طبقة خطية على الميزات المجمعة لتقليل عدد الرقع إلى دقة 1/4. يصبح هذا الإدخال للكتلة المشفرة التالية، حيث تتم تكرار هذه العملية بأكملها حتى تحصل على ميزات الصورة بدقة 1/8 و1/16 و1/32. + +3. يقوم فك تشفير خفيف الوزن بأخذ خريطة الميزات الأخيرة (مقياس 1/32) من المشفر وزيادة حجمها إلى مقياس 1/16. من هنا، يتم تمرير الميزة إلى وحدة *دمج الميزات الانتقائية (SFF)*، والتي تقوم باختيار ودمج الميزات المحلية والعالمية من خريطة اهتمام لكل ميزة ثم زيادة حجمها إلى 1/8. تتم إعادة هذه العملية حتى تصبح الميزات فك التشفير بنفس حجم الصورة الأصلية. يتم تمرير الإخراج عبر طبقتين من طبقات التجميع ثم يتم تطبيق تنشيط سيجمويد للتنبؤ بعمق كل بكسل. + +## معالجة اللغات الطبيعية + +تم تصميم محول Transformer في الأصل للترجمة الآلية، ومنذ ذلك الحين أصبح في الواقع البنية الافتراضية لحل جميع مهام NLP. تناسب بعض المهام بنية المشفر في المحول، في حين أن البعض الآخر أكثر ملاءمة لفك التشفير. لا تزال مهام أخرى تستخدم بنية المشفر-فك التشفير في المحول. + +### تصنيف النصوص + +[BERT](model_doc/bert) هو نموذج قائم على المشفر فقط وهو أول نموذج ينفذ بشكل فعال ثنائية الاتجاه العميقة لتعلم تمثيلات أغنى للنص من خلال الاهتمام بالكلمات على كلا الجانبين. + +1. يستخدم BERT التمييز إلى [WordPiece](tokenizer_summary#wordpiece) لإنشاء تضمين رمز للنص. للتمييز بين جملة واحدة وزوج من الجمل، تتم إضافة رمز خاص `[SEP]` للتفريق بينهما. تتم إضافة رمز خاص `[CLS]` إلى بداية كل تسلسل نصي. ويتم استخدام الإخراج النهائي مع الرمز `[CLS]` كإدخال لرأس التصنيف لمهام التصنيف. كما يضيف BERT تضمينًا للجزء للإشارة إلى ما إذا كان الرمز ينتمي إلى الجملة الأولى أو الثانية في زوج من الجمل. + +2. يتم تدريب BERT المسبق باستخدام هدفين: نمذجة اللغة المقنعة وتوقع الجملة التالية. في نمذجة اللغة المقنعة، يتم إخفاء نسبة مئوية معينة من رموز الإدخال بشكل عشوائي، ويجب على النموذج التنبؤ بها. يحل هذا مشكلة ثنائية الاتجاه، حيث يمكن للنموذج أن يغش ويرى جميع الكلمات و"يتنبأ" بالكلمة التالية. تتم تمرير الحالات المخفية النهائية للرموز المقنعة المتوقعة إلى شبكة تغذية أمامية مع softmax عبر المفردات للتنبؤ بالكلمة المقنعة. + + الهدف الثاني من التدريب المسبق هو توقع الجملة التالية. يجب على النموذج التنبؤ بما إذا كانت الجملة B تتبع الجملة A. نصف الوقت تكون الجملة B هي الجملة التالية، والنصف الآخر من الوقت، تكون الجملة B عبارة عشوائية. يتم تمرير التنبؤ، سواء كانت الجملة التالية أم لا، إلى شبكة تغذية أمامية مع softmax عبر الفئتين (`IsNext` و`NotNext`). + +3. يتم تمرير تضمينات الإدخال عبر عدة طبقات مشفرة لإخراج بعض الحالات المخفية النهائية. + +لاستخدام النموذج المسبق التدريب لتصنيف النصوص، أضف رأس تصنيف تسلسل أعلى نموذج BERT الأساسي. رأس تصنيف التسلسل هو طبقة خطية تقبل الحالات المخفية النهائية وتقوم بتحويل خطي لتحويلها إلى logits. يتم حساب الخسارة المتقاطعة بين logits والهدف للعثور على التصنيف الأكثر احتمالًا. + +هل أنت مستعد لتجربة يدك في تصنيف النصوص؟ تحقق من دليل تصنيف النص الكامل الخاص بنا لمعرفة كيفية ضبط نموذج DistilBERT واستخدامه للاستنتاج! + +### تصنيف الرموز + +لاستخدام BERT لمهام تصنيف الرموز مثل التعرف على الكيانات المسماة (NER)، أضف رأس تصنيف الرموز أعلى نموذج BERT الأساسي. رأس تصنيف الرمز هو طبقة خطية تقبل الحالات المخفية النهائية وتقوم بتحويل خطي لتحويلها إلى logits. يتم حساب الخسارة المتقاطعة بين logits وكل رمز للعثور على التصنيف الأكثر احتمالًا. + +هل أنت مستعد لتجربة يدك في تصنيف الرموز؟ تحقق من دليل تصنيف الرموز الكامل الخاص بنا لمعرفة كيفية ضبط نموذج DistilBERT واستخدامه للاستنتاج! + +### الإجابة على الأسئلة + +لاستخدام BERT للإجابة على الأسئلة، أضف رأس تصنيف المدى أعلى نموذج BERT الأساسي. تقبل هذه الطبقة الخطية الحالات المخفية النهائية وتقوم بتحويل خطي لحساب logits `span` البداية والنهاية المقابلة للإجابة. يتم حساب الخسارة المتقاطعة بين logits وموضع التصنيف للعثور على أكثر نطاقات النص احتمالًا المقابلة للإجابة. + +هل أنت مستعد لتجربة يدك في الإجابة على الأسئلة؟ تحقق من دليل الإجابة على الأسئلة الكامل الخاص بنا لمعرفة كيفية ضبط نموذج DistilBERT واستخدامه للاستنتاج! + + + +💡 لاحظ مدى سهولة استخدام BERT لمهام مختلفة بمجرد تدريبه مسبقًا. كل ما تحتاج إليه هو إضافة رأس محدد إلى النموذج المسبق التدريب للتلاعب بالحالات المخفية إلى الإخراج المطلوب! + + + +### توليد النصوص + +[GPT-2](model_doc/gpt2) هو نموذج قائم على فك التشفير فقط تم تدريبه المسبق على كمية كبيرة من النصوص. يمكنه توليد نص مقنع (على الرغم من أنه ليس دائمًا صحيحًا!) بالنظر إلى موجه واستكمال مهام NLP الأخرى مثل الإجابة على الأسئلة على الرغم من أنه لم يتم تدريبه بشكل صريح على ذلك. + +
+ +
+ +1. يستخدم GPT-2 [ترميز الأزواج البايتية (BPE)](tokenizer_summary#byte-pair-encoding-bpe) لتمييز الكلمات وتوليد تضمين الرمز. يتم إضافة الترميزات الموضعية إلى تضمينات الرموز للإشارة إلى موضع كل رمز في التسلسل. يتم تمرير تضمينات الإدخال عبر عدة كتل فك تشفير لإخراج بعض الحالات المخفية النهائية. داخل كل كتلة فك تشفير، يستخدم GPT-2 طبقة *اهتمام ذاتي مقنع* مما يعني أن GPT-2 لا يمكنه الاهتمام بالرموز المستقبلية. يُسمح له فقط بالاهتمام بالرموز الموجودة على اليسار. يختلف هذا عن رمز [`mask`] الخاص بـ BERT لأنه، في الاهتمام الذاتي المقنع، يتم استخدام قناع اهتمام لتحديد الدرجة إلى `0` للرموز المستقبلية. + +2. يتم تمرير الإخراج من فك التشفير إلى رأس نمذجة اللغة، والذي يقوم بتحويل خطي لتحويل الحالات المخفية إلى logits. التصنيف هو الرمز التالي في التسلسل، والذي يتم إنشاؤه عن طريق تحويل logits إلى اليمين بمقدار واحد. يتم حساب الخسارة المتقاطعة بين logits المنقولة والتصنيفات لإخراج الرمز التالي الأكثر احتمالًا. + +يستند هدف التدريب المسبق لـ GPT-2 بالكامل إلى نمذجة اللغة السببية، والتنبؤ بالكلمة التالية في تسلسل. يجعل هذا GPT-2 جيدًا بشكل خاص في المهام التي تتضمن توليد النص. + +هل أنت مستعد لتجربة يدك في توليد النص؟ تحقق من دليل نمذجة اللغة السببية الكامل الخاص بنا لمعرفة كيفية ضبط نموذج DistilGPT-2 واستخدامه للاستنتاج! + + + +للحصول على مزيد من المعلومات حول توليد النص، راجع دليل استراتيجيات توليد النص! + + + +### تلخيص + +تم تصميم نماذج المشفر-فك التشفير مثل [BART](model_doc/bart) و [T5](model_doc/t5) لنمط تسلسل إلى تسلسل لمهمة التلخيص. سنشرح كيف يعمل BART في هذا القسم، ثم يمكنك تجربة ضبط T5 في النهاية. + +
+ +
+ +1. تتشابه بنية المشفر BART كثيرًا مع BERT وتقبل رمزًا وتضمينًا موضعيًا للنص. يتم تدريب BART المسبق عن طريق إتلاف الإدخال ثم إعادة بنائه باستخدام فك التشفير. على عكس المشفرات الأخرى ذات استراتيجيات الإتلاف المحددة، يمكن لـ BART تطبيق أي نوع من الإتلاف. ومع ذلك، فإن استراتيجية إتلاف "ملء النص" تعمل بشكل أفضل. في ملء النص، يتم استبدال عدد من نطاقات النص برمز **واحد** [`mask`]. هذا أمر مهم لأن النموذج يجب أن يتنبأ بالرموز المقنعة، ويعلّم النموذج التنبؤ بعدد الرموز المفقودة. يتم تمرير تضمينات الإدخال والنطاقات المقنعة عبر المشفر لإخراج بعض الحالات المخفية النهائية، ولكن على عكس BERT، لا يضيف BART شبكة تغذية أمامية نهائية في النهاية للتنبؤ بكلمة. + +2. يتم تمرير إخراج المشفر إلى فك التشفير، والذي يجب أن يتنبأ بالرموز المقنعة وأي رموز غير تالفة من إخراج المشفر. يمنح هذا فك التشفير سياقًا إضافيًا للمساعدة في استعادة النص الأصلي. يتم تمرير الإخراج من فك التشفير إلى رأس نمذجة اللغة، والذي يقوم بتحويل خطي لتحويل الحالات المخفية إلى logits. يتم حساب الخسارة المتقاطعة بين logits والتصنيف، وهو مجرد الرمز المنقول إلى اليمين. + +هل أنت مستعد لتجربة يدك في التلخيص؟ تحقق من دليل التلخيص الكامل الخاص بنا لمعرفة كيفية ضبط نموذج T5 واستخدامه للاستنتاج! + + + +للحصول على مزيد من المعلومات حول توليد النص، راجع دليل استراتيجيات توليد النص! + + + +### الترجمة + +الترجمة هي مثال آخر على مهمة التسلسل إلى التسلسل، مما يعني أنه يمكنك استخدام نموذج المشفر-فك التشفير مثل [BART](model_doc/bart) أو [T5](model_doc/t5) للقيام بذلك. سنشرح كيف يعمل BART في هذا القسم، ثم يمكنك تجربة ضبط T5 في النهاية. + +يتكيف BART مع الترجمة عن طريق إضافة مشفر منفصل يتم تهيئته بشكل عشوائي لتعيين لغة المصدر إلى إدخال يمكن فك تشفيره إلى لغة الهدف. يتم تمرير تضمينات هذا المشفر الجديد إلى المشفر المسبق التدريب بدلاً من تضمينات الكلمات الأصلية. يتم تدريب مشفر المصدر عن طريق تحديث مشفر المصدر والتضمينات الموضعية وتضمينات الإدخال باستخدام الخسارة المتقاطعة من إخراج النموذج. يتم تجميد معلمات النموذج في هذه الخطوة الأولى، ويتم تدريب جميع معلمات النموذج معًا في الخطوة الثانية. + +تمت متابعة BART منذ ذلك الحين بواسطة إصدار متعدد اللغات، mBART، مصمم للترجمة ومدرب مسبقًا على العديد من اللغات المختلفة. + +هل أنت مستعد لتجربة يدك في الترجمة؟ تحقق من دليل الترجمة الكامل الخاص بنا لمعرفة كيفية ضبط نموذج T5 واستخدامه للاستنتاج! + + + +للحصول على مزيد من المعلومات حول توليد النص، راجع دليل استراتيجيات توليد النص! + + \ No newline at end of file From 42be0ccc31acbb71cd8a0a24302da30a998f48b3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:39 +0300 Subject: [PATCH 059/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tokenizer=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tokenizer_summary.md | 247 ++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 docs/source/ar/tokenizer_summary.md diff --git a/docs/source/ar/tokenizer_summary.md b/docs/source/ar/tokenizer_summary.md new file mode 100644 index 00000000000000..50fdd10ab06203 --- /dev/null +++ b/docs/source/ar/tokenizer_summary.md @@ -0,0 +1,247 @@ +# ملخص المحللات + +[[open-in-colab]] + +في هذه الصفحة، سنلقي نظرة فاحصة على عملية التحليل. + + + +كما رأينا في [برنامج تعليمي حول المعالجة المسبقة](preprocessing)، فإن تحليل النص يقسمه إلى كلمات أو +الرموز الفرعية، والتي يتم بعد ذلك تحويلها إلى معرفات من خلال جدول بحث. يعد تحويل الكلمات أو الرموز الفرعية إلى معرفات +مباشرًا، لذا في هذا الملخص، سنركز على تقسيم النص إلى كلمات أو رموز فرعية (أي تحليل النص). +وبشكل أكثر تحديدًا، سنلقي نظرة على الأنواع الثلاثة الرئيسية من المحللات المستخدمة في 🤗 المحولات: [ترميز الأزواج البايتية +(BPE)](#byte-pair-encoding)، [WordPiece](#wordpiece)، و [SentencePiece](#sentencepiece)، ونعرض أمثلة +على نوع المحلل الذي يستخدمه كل نموذج. + +لاحظ أنه في كل صفحة نموذج، يمكنك الاطلاع على وثائق المحلل المرتبط لمعرفة نوع المحلل +الذي استخدمه النموذج المُدرب مسبقًا. على سبيل المثال، إذا نظرنا إلى [`BertTokenizer`]، يمكننا أن نرى +أن النموذج يستخدم [WordPiece](#wordpiece). + +## مقدمة + +إن تقسيم النص إلى أجزاء أصغر هو مهمة أصعب مما تبدو، وهناك طرق متعددة للقيام بذلك. +على سبيل المثال، دعنا نلقي نظرة على الجملة `"Don't you love 🤗 Transformers? We sure do."` + + + +تتمثل إحدى الطرق البسيطة لتحليل هذا النص في تقسيمه حسب المسافات، والذي من شأنه أن يعطي: + +``` +["Don't", "you", "love", "🤗", "Transformers?", "We", "sure", "do."] +``` + +هذه خطوة أولى معقولة، ولكن إذا نظرنا إلى الرموز `"Transformers?"` و `"do."`، فإننا نلاحظ أن +علامات الترقيم ملحقة بالكلمات `"Transformer"` و `"do"`، وهو أمر غير مثالي. يجب أن نأخذ +علامات الترقيم في الاعتبار حتى لا يضطر النموذج إلى تعلم تمثيل مختلف للكلمة وكل رمز ترقيم محتمل +قد يليها، الأمر الذي من شأنه أن ينفجر عدد التمثيلات التي يجب على النموذج تعلمها. +مع مراعاة علامات الترقيم، فإن تحليل نصنا المثالي سيعطي: + +``` +["Don", "'", "t", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."] +``` + +أفضل. ومع ذلك، من غير الملائم كيفية تعامل التحليل مع الكلمة `"Don't"`. `"Don't"` تعني +`"do not"`، لذا سيكون من الأفضل تحليلها على أنها `["Do"، "n't"]`. هنا تبدأ الأمور في التعقيد، +وهو جزء من سبب امتلاك كل نموذج لنوع المحلل الخاص به. اعتمادًا على القواعد التي نطبقها لتحليل النص، +يتم إنشاء إخراج محلل مختلف لنفس النص. لن يؤدي النموذج المُدرب مسبقًا إلى الأداء بشكل صحيح إلا إذا قمت بإطعامه +تم تحليل الإدخال باستخدام نفس القواعد التي تم استخدامها لتحليل بيانات التدريب الخاصة به. + +[spaCy](https://spacy.io/) و [موسى](http://www.statmt.org/moses/?n=Development.GetStarted) هما محللان قائمان على القواعد +شائعان. عند تطبيقها على مثالنا، فإن *spaCy* و *Moses* ستخرج شيئًا مثل: + +``` +["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."] +``` +``` +["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."] +``` + +كما يمكنك أن ترى، يتم هنا استخدام التحليل المكاني وعلامات الترقيم، وكذلك التحليل القائم على القواعد. يعد التحليل المكاني وعلامات الترقيم والتحليل القائم على القواعد كلاهما مثالين على تحليل الكلمات، والذي يتم تعريفه بشكل فضفاض +كتقسيم الجمل إلى كلمات. في حين أنها الطريقة الأكثر بديهية لتقسيم النصوص إلى أجزاء أصغر، +يمكن أن تؤدي طريقة التحليل هذه إلى مشكلات لمجموعات النصوص الضخمة. في هذه الحالة، عادةً ما يؤدي التحليل المكاني وعلامات الترقيم +إلى إنشاء مفردات كبيرة جدًا (مجموعة من جميع الكلمات والرموز الفريدة المستخدمة). على سبيل المثال، يستخدم [Transformer XL](model_doc/transfo-xl) التحليل المكاني وعلامات الترقيم، مما يؤدي إلى حجم مفردات يبلغ 267735! + +يفرض حجم المفردات الكبير هذا على النموذج أن يكون لديه مصفوفة تضمين ضخمة كطبقة الإدخال والإخراج، مما +يؤدي إلى زيادة كل من التعقيد الزمني والذاكرة. بشكل عام، نادرًا ما يكون لدى نماذج المحولات حجم مفردات +أكبر من 50000، خاصة إذا تم تدريبها مسبقًا على لغة واحدة فقط. + +لذا إذا كان التحليل المكاني وعلامات الترقيم البسيطة غير مرضية، فلماذا لا نقوم ببساطة بالتحليل على الأحرف؟ + + + +في حين أن تحليل الأحرف بسيط للغاية ومن شأنه أن يقلل بشكل كبير من التعقيد الزمني والذاكرة، إلا أنه يجعل من الصعب +على النموذج تعلم تمثيلات المدخلات ذات معنى. على سبيل المثال، يعد تعلم تمثيل مستقل عن السياق +للحرف "t" أكثر صعوبة من تعلم تمثيل مستقل عن السياق لكلمة +"اليوم". لذلك، غالبًا ما يكون تحليل الأحرف مصحوبًا بفقدان الأداء. لذا للحصول على أفضل ما في +العالمين، تستخدم نماذج المحولات تهجينًا بين تحليل مستوى الكلمة وتحليل مستوى الأحرف يسمى تحليل **subword**. + +## تحليل subword + + + +تعتمد خوارزميات تحليل subword على المبدأ القائل بأن الكلمات المستخدمة بشكل متكرر لا ينبغي تقسيمها إلى +رموز فرعية أصغر، ولكن يجب تحليل الكلمات النادرة إلى رموز فرعية ذات معنى. على سبيل المثال، قد يتم اعتبار "annoyingly" +كلمة نادرة ويمكن تحليلها إلى "annoying" و "ly". كل من "annoying" و "ly" +كـ subwords مستقلة ستظهر بشكل متكرر أكثر في حين أن معنى "annoyingly" يتم الاحتفاظ به من خلال +المعنى المركب لـ "annoying" و "ly". هذا مفيد بشكل خاص في اللغات التراصية مثل التركية، +حيث يمكنك تشكيل كلمات طويلة (تقريبًا) بشكل تعسفي عن طريق ربط الرموز الفرعية معًا. + +يسمح تحليل subword للنموذج بأن يكون له حجم مفردات معقول مع القدرة على تعلم +تمثيلات مستقلة عن السياق ذات معنى. بالإضافة إلى ذلك، يمكّن تحليل subword النموذج من معالجة الكلمات التي لم يسبق له +رؤيتها من قبل، عن طريق تحليلها إلى رموز فرعية معروفة. على سبيل المثال، يقوم المحلل [`~transformers.BertTokenizer`] بتحليل +"لدي GPU جديد!" كما يلي: + +```py +>>> from transformers import BertTokenizer + +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased") +>>> tokenizer.tokenize("I have a new GPU!") +["i", "have", "a", "new", "gp", "##u", "!"] +``` + +نظرًا لأننا نأخذ في الاعتبار النموذج غير المحدد، فقد تم تحويل الجملة إلى أحرف صغيرة أولاً. يمكننا أن نرى أن الكلمات `["i"، "have"، "a"، "new"]` موجودة في مفردات المحلل، ولكن الكلمة "gpu" غير موجودة. وبالتالي، يقوم المحلل بتقسيم "gpu" إلى رموز فرعية معروفة: `["gp" و "##u"]`. يعني "##" أنه يجب +ربط بقية الرمز بالرمز السابق، دون مسافة (للترميز أو عكس التحليل). + +كمثال آخر، يقوم المحلل [`~transformers.XLNetTokenizer`] بتحليل نصنا المثالي كما يلي: + +```py +>>> from transformers import XLNetTokenizer + +>>> tokenizer = XLNetTokenizer.from_pretrained("xlnet/xlnet-base-cased") +>>> tokenizer.tokenize("Don't you love 🤗 Transformers? We sure do.") +["▁Don", "'", "t", "▁you", "▁love", "▁"، "🤗"، "▁"، "Transform"، "ers"، "؟"، "▁We"، "▁sure"، "▁do"، "."] +``` +سنعود إلى معنى تلك `"▁"` عندما نلقي نظرة على [SentencePiece](#sentencepiece). كما يمكنك أن ترى، +تم تقسيم الكلمة النادرة "Transformers" إلى الرموز الفرعية الأكثر تكرارًا `"Transform"` و `"ers"`. + +دعنا الآن نلقي نظرة على كيفية عمل خوارزميات تحليل subword المختلفة. لاحظ أن جميع خوارزميات التحليل +هذه تعتمد على بعض أشكال التدريب الذي يتم عادةً على مجموعة البيانات التي سيتم تدريبها +النموذج المقابل عليه. + + + +### ترميز الأزواج البايتية (BPE) + +تم تقديم ترميز الأزواج البايتية (BPE) في [الترجمة الآلية العصبية للكلمات النادرة باستخدام وحدات subword (Sennrich et +al.، 2015)](https://arxiv.org/abs/1508.07909). يعتمد BPE على محلل مسبق يقسم بيانات التدريب إلى +كلمات. يمكن أن يكون التحليل المسبق بسيطًا مثل التحليل المكاني، على سبيل المثال [GPT-2](model_doc/gpt2)، [RoBERTa](model_doc/roberta). تشمل التحليلات المسبقة الأكثر تقدمًا التحليل القائم على القواعد، على سبيل المثال [XLM](model_doc/xlm)، +[FlauBERT](model_doc/flaubert) الذي يستخدم موسى لمعظم اللغات، أو [GPT](model_doc/openai-gpt) الذي يستخدم +spaCy و ftfy، لحساب تكرار كل كلمة في مجموعة بيانات التدريب. + +بعد التحليل المسبق، يتم إنشاء مجموعة من الكلمات الفريدة وقد تم تحديد تكرار كل كلمة في +تم تحديد بيانات التدريب. بعد ذلك، يقوم BPE بإنشاء مفردات أساسية تتكون من جميع الرموز التي تحدث في مجموعة الكلمات الفريدة ويتعلم قواعد الدمج لتشكيل رمز جديد من رمزين من المفردات الأساسية. إنه يفعل ذلك حتى +تصل المفردات إلى حجم المفردات المطلوب. لاحظ أن حجم المفردات هو فرط معلمة لتحديد +قبل تدريب المحلل. + +كمثال، دعنا نفترض أنه بعد التحليل المسبق، تم تحديد مجموعة الكلمات التالية بما في ذلك تكرارها: + +``` +("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5) +``` + +وبالتالي، فإن المفردات الأساسية هي `["b"، "g"، "h"، "n"، "p"، "s"، "u"]`. من خلال تقسيم جميع الكلمات إلى رموز من +المفردات الأساسية، نحصل على: + +``` +("h" "u" "g"، 10)، ("p" "u" "g"، 5)، ("p" "u" "n"، 12)، ("b" "u" "n"، 4)، ("h" "u" "g" "s"، 5) +``` + +بعد ذلك، يقوم BPE بعدد مرات حدوث كل زوج من الرموز المحتملة ويختار زوج الرموز الذي يحدث بشكل متكرر. في +في المثال أعلاه، يحدث "h" متبوعًا بـ "u" _10 + 5 = 15_ مرة (10 مرات في 10 مرات +حدوث "hug"، 5 مرات في 5 مرات حدوث "hugs"). ومع ذلك، فإن أكثر أزواج الرموز شيوعًا هو "u" متبوعًا +بواسطة "g"، والتي تحدث _10 + 5 + 5 = 20_ مرة في المجموع. وبالتالي، فإن أول قاعدة دمج يتعلمها المحلل هي تجميع جميع +رموز "u" التي تتبعها "g" معًا. بعد ذلك، يتم إضافة "ug" إلى المفردات. تصبح مجموعة الكلمات + +``` +("h" "ug"، 10)، ("p" "ug"، 5)، ("p" "u" "n"، 12)، ("b" "u" "n"، 4)، ("h" "ug" "s"، 5) +``` + +بعد ذلك، يحدد BPE ثاني أكثر أزواج الرموز شيوعًا. إنه "u" متبوعًا بـ "n"، والذي يحدث 16 مرة. "u"، +يتم دمج "n" في "un" ويضاف إلى المفردات. ثالث أكثر أزواج الرموز شيوعًا هو "h" متبوعًا +بواسطة "ug"، والتي تحدث 15 مرة. مرة أخرى يتم دمج الزوج ويتم إضافة "hug" إلى المفردات. + +في هذه المرحلة، تكون المفردات هي `["b"، "g"، "h"، "n"، "p"، "s"، "u"، "ug"، "un"، "hug"]` ومجموعة الكلمات الفريدة لدينا +تمثيله كما يلي: + +``` +("hug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("hug" "s", 5) +``` + +بافتراض أن تدريب ترميز الأزواج البايتية سيتوقف عند هذه النقطة، فسيتم تطبيق قواعد الدمج التي تم تعلمها +بعد ذلك على كلمات جديدة (طالما أن هذه الكلمات الجديدة لا تشمل رموزًا لم تكن في المفردات الأساسية). على سبيل المثال، +سيتم تحليل كلمة "bug" إلى `["b"، "ug"]` ولكن سيتم تحليل "mug" على أنها `[""، "ug"]` نظرًا لأن +الرمز "m" غير موجود في المفردات الأساسية. بشكل عام، لا يتم استبدال الأحرف الفردية مثل "m" بالرمز +"" لأن بيانات التدريب تتضمن عادةً حدوثًا واحدًا على الأقل لكل حرف، ولكن من المحتمل أن يحدث ذلك +لرموز خاصة جدًا مثل الرموز التعبيرية. +كما ذكرنا سابقًا، فإن حجم المفردات، أي حجم المفردات الأساسية + عدد عمليات الدمج، هو فرط معلمة +لاختيار. على سبيل المثال، لدى [GPT](model_doc/openai-gpt) حجم مفردات يبلغ 40478 منذ أن كان لديهم 478 حرفًا أساسيًا +واختاروا التوقف عن التدريب بعد 40000 عملية دمج. + +#### ترميز الأزواج البايتية على مستوى البايت + +قد تكون المفردات الأساسية التي تتضمن جميع الأحرف الأساسية كبيرة جدًا إذا *على سبيل المثال* تم اعتبار جميع أحرف اليونيكود +كأحرف أساسية. لذا، ليكون لديك مفردات أساسية أفضل، يستخدم [GPT-2](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) البايتات +كالمفردات الأساسية، وهي حيلة ذكية لإجبار المفردات الأساسية على أن تكون بحجم 256 مع ضمان +أن يتم تضمين كل حرف أساسي في المفردات. مع بعض القواعد الإضافية للتعامل مع علامات الترقيم، يمكن لمحلل GPT2 +تحليل أي نص دون الحاجة إلى رمز . لدى [GPT-2](model_doc/gpt) حجم مفردات يبلغ 50257، والذي يتوافق مع رموز 256 base byte، ورمز خاص لنهاية النص والرموز التي تم تعلمها باستخدام 50000 عملية دمج. + + + +### WordPiece + +WordPiece هو خوارزمية توكنز subword المستخدمة لـ [BERT](model_doc/bert)، [DistilBERT](model_doc/distilbert)، و [Electra](model_doc/electra). تم توضيح الخوارزمية في [البحث الصوتي الياباني والكوري +(Schuster et al.، 2012)](https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/37842.pdf) وهو مشابه جدًا +BPE. أولاً، يقوم WordPiece بتكوين المفردات لتضمين كل حرف موجود في بيانات التدريب +وتعلم تدريجياً عددًا معينًا من قواعد الدمج. على عكس BPE، لا يختار WordPiece أكثر +زوج الرموز المتكررة، ولكن تلك التي تزيد من احتمال بيانات التدريب بمجرد إضافتها إلى المفردات. + +لذا، ماذا يعني هذا بالضبط؟ بالإشارة إلى المثال السابق، فإن زيادة احتمال بيانات التدريب تعادل إيجاد زوج الرموز، الذي يكون احتمال تقسيمه على احتمالات رمزه الأول تليها +رمزه الثاني هو الأكبر بين جميع أزواج الرموز. *مثال* `"u"`، تليها `"g"` كانت قد اندمجت فقط إذا كان احتمال `"ug"` مقسومًا على `"u"`، `"g"` كان سيكون أكبر من أي زوج آخر +من الرموز. بديهيًا، WordPiece مختلف قليلاً عن BPE في أنه يقيم ما يفقده عن طريق دمج رمزين +للتأكد من أنه يستحق ذلك. + + + +### Unigram + +Unigram هو خوارزمية توكنيز subword التي تم تقديمها في [تنظيم subword: تحسين نماذج الترجمة الشبكة العصبية +نماذج مع مرشحين subword متعددة (Kudo، 2018)](https://arxiv.org/pdf/1804.10959.pdf). على عكس BPE أو +WordPiece، يقوم Unigram بتكوين مفرداته الأساسية إلى عدد كبير من الرموز ويقللها تدريجياً للحصول على مفردات أصغر. يمكن أن تتوافق المفردات الأساسية على سبيل المثال مع جميع الكلمات المسبقة التوكنز والسلاسل الفرعية الأكثر شيوعًا. لا يتم استخدام Unigram مباشرة لأي من النماذج في المحولات، ولكنه يستخدم بالاقتران مع [SentencePiece](#sentencepiece). + +في كل خطوة تدريب، يحدد خوارزمية Unigram خسارة (غالبًا ما يتم تعريفها على أنها اللوغاريتم) عبر بيانات التدريب بالنظر إلى المفردات الحالية ونموذج اللغة unigram. بعد ذلك، بالنسبة لكل رمز في المفردات، يحسب الخوارزمية مقدار زيادة الخسارة الإجمالية إذا تم إزالة الرمز من المفردات. ثم يقوم Unigram بإزالة p (مع p عادة ما تكون 10% أو 20%) في المائة من الرموز التي تكون زيادة الخسارة فيها هي الأدنى، *أي* تلك +الرموز التي تؤثر أقل على الخسارة الإجمالية عبر بيانات التدريب. تتكرر هذه العملية حتى تصل المفردات إلى الحجم المطلوب. يحتفظ خوارزمية Unigram دائمًا بالشخصيات الأساسية بحيث يمكن توكنز أي كلمة. + +نظرًا لأن Unigram لا يعتمد على قواعد الدمج (على عكس BPE وWordPiece)، فإن للخوارزمية عدة طرق +توكنز نص جديد بعد التدريب. على سبيل المثال، إذا كان محول Unigram المدرب يعرض المفردات: + +``` +["b"، "g"، "h"، "n"، "p"، "s"، "u"، "ug"، "un"، "hug"]، +``` + +يمكن توكنز `"hugs"` على أنه `["hug"، "s"]`، أو `["h"، "ug"، "s"]` أو `["h"، "u"، "g"، "s"]`. إذن ماذا +لاختيار؟ يحفظ Unigram احتمال كل رمز في فيلق التدريب بالإضافة إلى حفظ المفردات بحيث +يمكن حساب احتمال كل توكنز ممكن بعد التدريب. ببساطة، يختار الخوارزمية الأكثر +توكنز المحتملة في الممارسة، ولكنه يوفر أيضًا إمكانية أخذ عينات من توكنز ممكن وفقًا لاحتمالاتها. + +تتم تعريف هذه الاحتمالات بواسطة الخسارة التي يتم تدريب المحول عليها. بافتراض أن بيانات التدريب تتكون +من الكلمات \\(x_{1}، \dots، x_{N}\\) وأن مجموعة جميع التوكنزات الممكنة لكلمة \\(x_{i}\\) هي +يتم تعريفها على أنها \\(S(x_{i})\\)، ثم يتم تعريف الخسارة الإجمالية على النحو التالي + +$$\mathcal{L} = -\sum_{i=1}^{N} \log \left ( \sum_{x \in S(x_{i})} p(x) \right )$$ + + + +### SentencePiece + +تحتوي جميع خوارزميات توكنز الموصوفة حتى الآن على نفس المشكلة: من المفترض أن النص المدخل يستخدم المسافات لفصل الكلمات. ومع ذلك، لا تستخدم جميع اللغات المسافات لفصل الكلمات. أحد الحلول الممكنة هو استخدام اللغة +محدد مسبق محدد، *مثال* [XLM](model_doc/xlm) يستخدم محددًا صينيًا ويابانيًا وتايلانديًا محددًا مسبقًا. +لحل هذه المشكلة بشكل عام، [SentencePiece: A simple and language independent subword tokenizer and +detokenizer for Neural Text Processing (Kudo et al.، 2018)](https://arxiv.org/pdf/1808.06226.pdf) يتعامل مع الإدخال +كتدفق إدخال خام، وبالتالي يشمل المسافة في مجموعة الأحرف التي سيتم استخدامها. ثم يستخدم خوارزمية BPE أو unigram +لإنشاء المفردات المناسبة. + +يستخدم [`XLNetTokenizer`] SentencePiece على سبيل المثال، وهو أيضًا سبب تضمين +تم تضمين حرف `"▁"` في المفردات. فك التشفير باستخدام SentencePiece سهل للغاية نظرًا لأنه يمكن دائمًا دمج الرموز واستبدال `"▁"` بمسافة. + +تستخدم جميع نماذج المحولات في المكتبة التي تستخدم SentencePiece بالاقتران مع unigram. أمثلة على النماذج +باستخدام SentencePiece هي [ALBERT](model_doc/albert)، [XLNet](model_doc/xlnet)، [Marian](model_doc/marian)، و [T5](model_doc/t5). \ No newline at end of file From e045bbccedcbd7406daaa6dc14a88b7c4ce374ec Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:41 +0300 Subject: [PATCH 060/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/trainer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/trainer.md | 584 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 584 insertions(+) create mode 100644 docs/source/ar/trainer.md diff --git a/docs/source/ar/trainer.md b/docs/source/ar/trainer.md new file mode 100644 index 00000000000000..984946491361ad --- /dev/null +++ b/docs/source/ar/trainer.md @@ -0,0 +1,584 @@ +# Trainer + +تتيح وحدة [`Trainer`] حلقة تدريب وتقييم كاملة لنماذج PyTorch المنفذة في مكتبة Transformers. كل ما عليك فعله هو تمرير القطع الضرورية للتدريب (النموذج، والمحلل الرمزي، ومجموعة البيانات، ووظيفة التقييم، وفرط معلمات التدريب، إلخ)، وتتعامل فئة [`Trainer`] مع الباقي. يجعل هذا الأمر أسهل لبدء التدريب بشكل أسرع دون كتابة حلقة التدريب الخاصة بك يدويًا. ولكن في الوقت نفسه، فإن [`Trainer`] قابل للتخصيص للغاية ويوفر الكثير من خيارات التدريب حتى تتمكن من تخصيصه وفقًا لاحتياجات التدريب الخاصة بك بالضبط. + + + +بالإضافة إلى فئة [`Trainer`], توفر مكتبة Transformers أيضًا فئة [`Seq2SeqTrainer`] للمهام التسلسلية إلى التسلسلية مثل الترجمة أو الموجز. هناك أيضًا فئة [`~trl.SFTTrainer`] من مكتبة [TRL](https://hf.co/docs/trl) التي تغلف فئة [`Trainer`] وهي مُحُسَّنة لتدريب نماذج اللغة مثل Llama-2 وMistral باستخدام تقنيات التوليد اللغوي. كما يدعم [`~trl.SFTTrainer`] ميزات مثل حزم التسلسل، وLoRA، والتحويل الكمي، وDeepSpeed للتحجيم بكفاءة إلى أي حجم نموذج. + +
+ +لا تتردد في الاطلاع على [مرجع API](./main_classes/trainer) لهذه الفئات الأخرى من النوع [`Trainer`] لمعرفة المزيد حول متى يتم استخدام كل منها. بشكل عام، [`Trainer`] هو الخيار الأكثر تنوعًا ومناسبًا لمجموعة واسعة من المهام. تم تصميم [`Seq2SeqTrainer`] للمهام التسلسلية إلى التسلسلية، و [`~trl.SFTTrainer`] مصمم لتدريب نماذج اللغة. + +
+ +قبل البدء، تأكد من تثبيت [Accelerate](https://hf.co/docs/accelerate) - وهي مكتبة لتمكين وتشغيل التدريب على PyTorch عبر بيئات موزعة. + +```bash +pip install accelerate + +# upgrade +pip install accelerate --upgrade +``` + +يوفر هذا الدليل نظرة عامة على فئة [`Trainer`]. + +## الاستخدام الأساسي + +تتضمن وحدة [`Trainer`] كل التعليمات البرمجية التي ستجدها في حلقة تدريب أساسية: + +1. قم بتنفيذ خطوة تدريب لحساب الخسارة +2. احسب المشتقات باستخدام طريقة [`~accelerate.Accelerator.backward`] +3. تحديث الأوزان بناءً على المشتقات +4. كرر هذه العملية حتى تصل إلى عدد محدد مسبقًا من العصور + +تفصل فئة [`Trainer`] كل هذه التعليمات البرمجية حتى لا تضطر إلى القلق بشأن كتابة حلقة تدريب يدويًا في كل مرة أو إذا كنت بدأت للتو في PyTorch والتدريب. كل ما عليك فعله هو توفير المكونات الأساسية المطلوبة للتدريب، مثل نموذج ومجموعة بيانات، وتتعامل فئة [`Trainer`] مع كل شيء آخر. + +إذا كنت تريد تحديد أي خيارات تدريب أو فرط معلمات، فيمكنك العثور عليها في فئة [`TrainingArguments`]. على سبيل المثال، دعنا نحدد أين يتم حفظ النموذج في `output_dir` ودفع النموذج إلى Hub بعد التدريب مع `push_to_hub=True`. + +```py +from transformers import TrainingArguments + +training_args = TrainingArguments( + output_dir="your-model"، + learning_rate=2e-5, + per_device_train_batch_size=16, + per_device_eval_batch_size=16, + num_train_epochs=2, + weight_decay=0.01, + eval_strategy="epoch"، + save_strategy="epoch"، + load_best_model_at_end=True, + push_to_hub=True, +) +``` +مرر `training_args` إلى [`Trainer`] جنبًا إلى جنب مع نموذج، ومجموعة بيانات، وشئ لمعالجة مجموعة البيانات مسبقًا (حسب نوع البيانات، فقد يكون محللًا رمزيًا أو مستخرج ميزات أو معالج صور)، ومجمع بيانات، ووظيفة لحساب المقاييس التي تريد تتبعها أثناء التدريب. + +أخيرًا، اتصل بوظيفة [`~Trainer.train`] لبدء التدريب! + +```py +from transformers import Trainer + +trainer = Trainer( + model=model, + args=training_args, + train_dataset=dataset["train"]، + eval_dataset=dataset["test"]، + tokenizer=tokenizer, + data_collator=data_collator, + compute_metrics=compute_metrics, +) + +trainer.train() +``` + +### نقاط المراقبة + +تحفظ فئة [`Trainer`] نقاط مراقبة النموذج في الدليل المحدد في معلمة `output_dir` من [`TrainingArguments`]. ستجد نقاط المراقبة المحفوظة في مجلد فرعي يسمى `checkpoint-000` حيث تتوافق الأرقام في النهاية مع خطوة التدريب. إن حفظ نقاط المراقبة مفيد لاستئناف التدريب لاحقًا. + +```py +# استأنف من أحدث نقطة مراقبة +trainer.train(resume_from_checkpoint=True) + +# استأنف من نقطة مراقبة محددة محفوظة في دليل الإخراج +trainer.train(resume_from_checkpoint="your-model/checkpoint-1000") +``` + +يمكنك حفظ نقاط المراقبة الخاصة بك (حالة المحسن غير محفوظة بشكل افتراضي) إلى Hub عن طريق تعيين `push_to_hub=True` في [`TrainingArguments`] لالتزامها ودفعها. الخيارات الأخرى لاتخاذ القرار بشأن كيفية حفظ نقاط المراقبة الخاصة بك هي الإعداد في معلمة [`hub_strategy`](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments.hub_strategy): + +* `hub_strategy="checkpoint"` يدفع أحدث نقطة مراقبة إلى مجلد فرعي يسمى "last-checkpoint" يمكنك استئناف التدريب منه +* `hub_strategy="all_checkpoints"` يدفع جميع نقاط المراقبة إلى الدليل المحدد في `output_dir` (سترى نقطة مراقبة واحدة لكل مجلد في مستودع النموذج الخاص بك) + +عندما تستأنف التدريب من نقطة مراقبة، تحاول [`Trainer`] الحفاظ على حالات RNG Python وNumPy وPyTorch كما كانت عندما تم حفظ نقطة المراقبة. ولكن لأن PyTorch لديها العديد من الإعدادات الافتراضية غير الحتمية، فإن حالات RNG ليست مضمونة لتكون هي نفسها. إذا كنت تريد تمكين الحتمية الكاملة، فراجع دليل [Controlling sources of randomness](https://pytorch.org/docs/stable/notes/randomness#controlling-sources-of-randomness) لمعرفة ما يمكنك تمكينه لجعل تدريبك حتميًا تمامًا. ضع في اعتبارك أنه من خلال جعل إعدادات معينة حتمية، فقد يكون التدريب أبطأ. + +## تخصيص المدرب + +في حين أن فئة [`Trainer`] مصممة لتكون سهلة الوصول وسهلة الاستخدام، فإنها توفر أيضًا الكثير من قابلية التخصيص للمستخدمين المغامرين. يمكن تجاوز العديد من طرق [`Trainer`] وتخصيصها لدعم الوظائف التي تريدها، دون الحاجة إلى إعادة كتابة حلقة التدريب بأكملها من الصفر لاستيعابها. تتضمن هذه الطرق ما يلي: + +* [`~Trainer.get_train_dataloader`] ينشئ DataLoader تدريب +* [`~Trainer.get_eval_dataloader`] ينشئ DataLoader تقييم +* [`~Trainer.get_test_dataloader`] ينشئ DataLoader اختبار +* [`~Trainer.log`] يسجل معلومات حول مختلف الكائنات التي تراقب التدريب +* [`~Trainer.create_optimizer_and_scheduler`] ينشئ محسنًا ومخططًا لمعدل التعلم إذا لم يتم تمريرهما في `__init__`؛ يمكن أيضًا تخصيص هذه الوظائف بشكل منفصل باستخدام [`~Trainer.create_optimizer`] و [`~Trainer.create_scheduler`] على التوالي +* [`~Trainer.compute_loss`] يحسب الخسارة على دفعة من إدخالات التدريب +* [`~Trainer.training_step`] يؤدي خطوة التدريب +* [`~Trainer.prediction_step`] يؤدي خطوة التنبؤ والاختبار +* [`~Trainer.evaluate`] يقيم النموذج ويعيد مقاييس التقييم +* [`~Trainer.predict`] يجعل التنبؤات (مع المقاييس إذا كانت العلامات متاحة) على مجموعة الاختبار + +على سبيل المثال، إذا كنت تريد تخصيص طريقة [`~Trainer.compute_loss`] لاستخدام خسارة مرجحة بدلاً من ذلك. + +```py +from torch import nn +from transformers import Trainer +على سبيل المثال، إذا كنت تريد تخصيص طريقة [`~Trainer.compute_loss`] لاستخدام خسارة مرجحة بدلاً من ذلك. + +```py +from torch import nn +from transformers import Trainer + +class CustomTrainer(Trainer): + def compute_loss(self, model, inputs, return_outputs=False): + labels = inputs.pop("labels") + # forward pass + outputs = model(**inputs) + logits = outputs.get("logits") + # compute custom loss for 3 labels with different weights + loss_fct = nn.CrossEntropyLoss(weight=torch.tensor([1.0, 2.0, 3.0], device=model.device)) + loss = loss_fct(logits.view(-1, self.model.config.num_labels), labels.view(-1)) + return (loss, outputs) if return_outputs else loss +``` + +### الاستدعاءات Callbacks + +خيار آخر لتخصيص [`Trainer`] هو استخدام [callbacks](callbacks). لا *تغير* الاستدعاءات أي شيء في حلقة التدريب. إنهم يفحصون حالة حلقة التدريب ثم ينفذون بعض الإجراءات (مثل الإيقاف المبكر أو تسجيل النتائج، إلخ) اعتمادًا على الحالة. وبعبارة أخرى، لا يمكن استخدام الاستدعاء لتنفيذ شيء مثل وظيفة خسارة مخصصة، ويجب عليك تجاوز طريقة [`~Trainer.compute_loss`] لذلك. + +على سبيل المثال، إذا كنت تريد إضافة استدعاء إيقاف مبكر إلى حلقة التدريب بعد 10 خطوات. + +```py +from transformers import TrainerCallback + +class EarlyStoppingCallback(TrainerCallback): + def __init__(self, num_steps=10): + self.num_steps = num_steps + + def on_step_end(self, args, state, control, **kwargs): + if state.global_step >= self.num_steps: + return {"should_training_stop": True} + else: + return {} +``` + +ثم مرره إلى معلمة `callback` في [`Trainer`]. + +```py +from transformers import Trainer + +trainer = Trainer( + model=model, + args=training_args, + train_dataset=dataset["train"]، + eval_dataset=dataset["test"]، + tokenizer=tokenizer, + data_collator=data_collator, + compute_metrics=compute_metrics, + callback=[EarlyStoppingCallback()], +) +``` + +## التسجيل Logging + + + +راجع مرجع [API](./main_classes/logging) للتسجيل للحصول على مزيد من المعلومات حول مستويات التسجيل المختلفة. + + + +يتم تعيين [`Trainer`] إلى `logging.INFO` بشكل افتراضي والذي يبلغ عن الأخطاء والتحذيرات ومعلومات أساسية أخرى. يتم تعيين نسخة [`Trainer`] - في البيئات الموزعة - إلى `logging.WARNING` والتي تبلغ فقط عن الأخطاء والتحذيرات. يمكنك تغيير مستوى التسجيل باستخدام معلمات [`log_level`](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments.log_level) و [`log_level_replica`](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments.log_level_replica) في [`TrainingArguments`]. + +لتهيئة إعداد مستوى السجل لكل عقدة، استخدم معلمة [`log_on_each_node`](https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.TrainingArguments.log_on_each_node) لتحديد ما إذا كان سيتم استخدام مستوى السجل على كل عقدة أو فقط على العقدة الرئيسية. + + + +يحدد [`Trainer`] مستوى السجل بشكل منفصل لكل عقدة في طريقة [`Trainer.__init__`]، لذا فقد ترغب في النظر في تعيين هذا الإعداد في وقت سابق إذا كنت تستخدم وظائف Transformers الأخرى قبل إنشاء كائن [`Trainer`]. + + + +على سبيل المثال، لتعيين رمزك الرئيسي ووحداتك لاستخدام نفس مستوى السجل وفقًا لكل عقدة: + +```py +logger = logging.getLogger(__name__) + +logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s"، + datefmt="%m/%d/%Y %H:%M:%S"، + handlers=[logging.StreamHandler(sys.stdout)], +) + +log_level = training_args.get_process_log_level() +logger.setLevel(log_level) +datasets.utils.logging.set_verbosity(log_level) +transformers.utils.logging.set_verbosity(log_level) + +trainer = Trainer(...) +``` + +استخدم تركيبات مختلفة من `log_level` و `log_level_replica` لتهيئة ما يتم تسجيله على كل من العقد. + + + +استخدم تركيبات مختلفة من `log_level` و `log_level_replica` لتهيئة ما يتم تسجيله على كل من العقد. + + + + +```bash +my_app.py ... --log_level warning --log_level_replica error +``` + + + + +أضف معلمة `log_on_each_node 0` لبيئات متعددة العقد. + +```bash +my_app.py ... --log_level warning --log_level_replica error --log_on_each_node 0 + +# set to only report errors +my_app.py ... --log_level error --log_level_replica error --log_on_each_node 0 +``` + + + + +## NEFTune + +[NEFTune](https://hf.co/papers/2310.05914) هي تقنية يمكن أن تحسن الأداء عن طريق إضافة ضجيج إلى متجهات التعلم أثناء التدريب. لتمكينه في [`Trainer`], قم بتعيين معلمة `neftune_noise_alpha` في [`TrainingArguments`] للتحكم في مقدار الضوضاء المضافة. + +```py +from transformers import TrainingArguments, Trainer + +training_args = TrainingArguments(..., neftune_noise_alpha=0.1) +trainer = Trainer(..., args=training_args) +``` + +يتم تعطيل NEFTune بعد التدريب لاستعادة طبقة التعلم الأصلية لتجنب أي سلوك غير متوقع. + +## GaLore + +Gradient Low-Rank Projection (GaLore) هي استراتيجية تدريب فعالة من حيث الذاكرة ذات رتبة منخفضة تسمح بالتعلم الكامل للبارامترات ولكنها أكثر كفاءة من حيث الذاكرة من أساليب التكيف ذات الرتبة المنخفضة الشائعة، مثل LoRA. + +أولاً، تأكد من تثبيت المستودع الرسمي لـ GaLore: + +```bash +pip install galore-torch +``` + +ثم قم ببساطة بإضافة واحد من `["galore_adamw"، "galore_adafactor"، "galore_adamw_8bit"]` في `optim` جنبًا إلى جنب مع `optim_target_modules`، والتي يمكن أن تكون قائمة من السلاسل أو regex أو المسار الكامل المقابل لأسماء الوحدات النمطية المستهدفة التي تريد تكييفها. فيما يلي مثال على النص البرمجي من البداية إلى النهاية (تأكد من `pip install trl datasets`): + +```python +import torch +import datasets +import trl + +from transformers import TrainingArguments, AutoConfig, AutoTokenizer, AutoModelForCausalLM + +train_dataset = datasets.load_dataset('imdb', split='train') + +args = TrainingArguments( + output_dir="./test-galore"، + max_steps=100, + per_device_train_batch_size=2, + optim="galore_adamw"، + optim_target_modules=[r".*.attn.*"، r".*.mlp.*"] +) + +model_id = "google/gemma-2b" + +config = AutoConfig.from_pretrained(model_id) + +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_config(config).to(0) + +trainer = trl.SFTTrainer( + model=model, + args=args, + train_dataset=train_dataset, + dataset_text_field='text', + max_seq_length=512, +) + +trainer.train() +``` + +لإرسال الحجج الإضافية المدعومة بواسطة GaLore، يجب عليك إرسال `optim_args` بشكل صحيح، على سبيل المثال: + +```python +import torch +import datasets +import trl + +from transformers import TrainingArguments, AutoConfig, AutoTokenizer, AutoModelForCausalLM + +train_dataset = datasets.load_dataset('imdb', split='train') + +args = TrainingArguments( + output_dir="./test-galore", + max_steps=100, + per_device_train_batch_size=2, + optim="galore_adamw", + optim_target_modules=[r".*.attn.*", r".*.mlp.*"], + optim_args="rank=64, update_proj_gap=100, scale=0.10", +) + +model_id = "google/gemma-2b" + +config = AutoConfig.from_pretrained(model_id) + +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_config(config).to(0) + +trainer = trl.SFTTrainer( + model=model, + args=args, + train_dataset=train_dataset, + dataset_text_field='text', + max_seq_length=512, +) + +trainer.train() +``` +يمكنك قراءة المزيد حول الطريقة في [المستودع الأصلي](https://github.com/jiaweizzhao/GaLore) أو [الورقة](https://arxiv.org/abs/2403.03507). + +حاليًا، يمكنك فقط تدريب الطبقات الخطية التي تعتبر طبقات GaLore وستستخدم التحلل من الرتبة المنخفضة للتدريب بينما سيتم تحسين الطبقات المتبقية بالطريقة التقليدية. + +لاحظ أنه سيستغرق الأمر بعض الوقت قبل بدء التدريب (~3 دقائق لنموذج 2B على NVIDIA A100)، ولكن يجب أن يسير التدريب بسلاسة بعد ذلك. + +يمكنك أيضًا إجراء تحسين الطبقة عن طريق إضافة الملحق `layerwise` إلى اسم المحسن مثل ما يلي: + +```python +import torch +import datasets +import trl + +from transformers import TrainingArguments، AutoConfig، AutoTokenizer، AutoModelForCausalLM + +train_dataset = datasets.load_dataset('imdb'، split='train') + +args = TrainingArguments( + output_dir="./test-galore"، + max_steps=100، + per_device_train_batch_size=2، + optim="galore_adamw_layerwise"، + optim_target_modules=[r".*.attn.*"، r".*.mlp.*"] +) + +model_id = "google/gemma-2b" + +config = AutoConfig.from_pretrained(model_id) + +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_config(config).to(0) + +trainer = trl.SFTTrainer( + model=model، + args=args، + train_dataset=train_dataset، + dataset_text_field='text'، + max_seq_length=512، +) + +trainer.train() +``` + +لاحظ أن تحسين الطبقة تجريبي إلى حد ما ولا يدعم DDP (Distributed Data Parallel)، وبالتالي يمكنك تشغيل نص البرنامج النصي للتدريب على وحدة معالجة الرسومات (GPU) واحدة فقط. يرجى الاطلاع على [هذا القسم المناسب](https://github.com/jiaweizzhao/GaLore?tab=readme-ov-file#train-7b-model-with-a-single-gpu-with-24gb-memory) لمزيد من التفاصيل. قد لا تدعم الميزات الأخرى مثل تقليم التدرجات أو DeepSpeed، إلخ. من الصندوق. يرجى [إثارة مشكلة على GitHub](https://github.com/huggingface/transformers/issues) إذا واجهتك مثل هذه المشكلة. + +## محسنات LOMO + +تم تقديم محسنات LOMO في [التدريب على المعلمات الكاملة لنماذج اللغة الكبيرة باستخدام موارد محدودة](https://hf.co/papers/2306.09782) و [AdaLomo: تحسين ذاكرة منخفضة بمعدل تعلم متكيف](https://hf.co/papers/2310.10195). +يتكون كلاهما من طريقة تحسين المعلمة الكاملة الفعالة. تدمج محسنات LOMO حساب التدرج وتحديث المعلمة في خطوة واحدة لتقليل استخدام الذاكرة. محسنات LOMO المدعومة هي `"lomo"` و `"adalomo"`. أولاً قم بتثبيت LOMO من pypi `pip install lomo-optim` أو قم بتثبيته من المصدر باستخدام `pip install git+https://github.com/OpenLMLab/LOMO.git`. + + + +وفقًا للمؤلفين، يوصى باستخدام `AdaLomo` بدون `grad_norm` للحصول على أداء أفضل وسرعة أعلى. + + + +فيما يلي نص برمجي بسيط يوضح كيفية ضبط نموذج [google/gemma-2b](https://huggingface.co/google/gemma-2b) على مجموعة بيانات IMDB في الدقة الكاملة: + +```python +import torch +import datasets +from transformers import TrainingArguments، AutoTokenizer، AutoModelForCausalLM +import trl + +train_dataset = datasets.load_dataset('imdb'، split='train') + +args = TrainingArguments( + output_dir="./test-lomo"، + max_steps=100، + per_device_train_batch_size=4، + optim="adalomo"، + gradient_checkpointing=True، + logging_strategy="steps"، + logging_steps=1، + learning_rate=2e-6، + save_strategy="no"، + run_name="lomo-imdb"، +) + +model_id = "google/gemma-2b" + +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_pretrained(model_id، low_cpu_mem_usage=True).to(0) + +trainer = trl.SFTTrainer( + model=model، + args=args، + train_dataset=train_dataset، + dataset_text_field='text'، + max_seq_length=1024، +) + +trainer.train() +``` + +## تسريع ومدرب + +تتمتع فئة [`Trainer`] بالقوة من خلال [تسريع](https://hf.co/docs/accelerate)، وهي مكتبة لتدريب نماذج PyTorch بسهولة في بيئات موزعة مع دعم التكاملات مثل [FullyShardedDataParallel (FSDP)](https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/) و [DeepSpeed](https://www.deepspeed.ai/). + + + +تعرف على المزيد حول استراتيجيات تجزئة FSDP، وإلغاء تحميل وحدة المعالجة المركزية (CPU)، والمزيد مع [`Trainer`] في [دليل Fully Sharded Data Parallel](fsdp). + + + +لاستخدام Accelerate مع [`Trainer`]]، قم بتشغيل الأمر [`accelerate.config`](https://huggingface.co/docs/accelerate/package_reference/cli#accelerate-config) لإعداد التدريب لبيئة التدريب الخاصة بك. يقوم هذا الأمر بإنشاء `config_file.yaml` الذي سيتم استخدامه عند تشغيل نص البرنامج النصي للتدريب. على سبيل المثال، بعض تكوينات المثال التي يمكنك إعدادها هي: + + + + +```yml +compute_environment: LOCAL_MACHINE +distributed_type: MULTI_GPU +downcast_bf16: 'no' +gpu_ids: all +machine_rank: 0 #change rank as per the node +main_process_ip: 192.168.20.1 +main_process_port: 9898 +main_training_function: main +mixed_precision: fp16 +num_machines: 2 +num_processes: 8 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + + + + +```yml +compute_environment: LOCAL_MACHINE +distributed_type: FSDP +downcast_bf16: 'no' +fsdp_config: + fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP + fsdp_backward_prefetch_policy: BACKWARD_PRE + fsdp_forward_prefetch: true + fsdp_offload_params: false + fsdp_sharding_strategy: 1 + fsdp_state_dict_type: FULL_STATE_DICT + fsdp_sync_module_states: true + fsdp_transformer_layer_cls_to_wrap: BertLayer + fsdp_use_orig_params: true +machine_rank: 0 +main_training_function: main +mixed_precision: bf16 +num_machines: 1 +num_processes: 2 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + + + + +```yml +compute_environment: LOCAL_MACHINE +deepspeed_config: + deepspeed_config_file: /home/user/configs/ds_zero3_config.json + zero3_init_flag: true +distributed_type: DEEPSPEED +downcast_bf16: 'no' +machine_rank: 0 +main_training_function: main +num_machines: 1 +num_processes: 4 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + + + + +```yml +compute_environment: LOCAL_MACHINE +deepspeed_config: + gradient_accumulation_steps: 1 + gradient_clipping: 0.7 + offload_optimizer_device: cpu + offload_param_device: cpu + zero3_init_flag: true + zero_stage: 2 +distributed_type: DEEPSPEED +downcast_bf16: 'no' +machine_rank: 0 +main_training_function: main +mixed_precision: bf16 +num_machines: 1 +num_processes: 4 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + + + +إن الأمر [`accelerate_launch`](https://huggingface.co/docs/accelerate/package_reference/cli#accelerate-launch) هو الطريقة الموصى بها لتشغيل نص البرنامج النصي للتدريب على نظام موزع باستخدام Accelerate و [`Trainer`] مع المعلمات المحددة في `config_file.yaml`. يتم حفظ هذا الملف في مجلد ذاكرة التخزين المؤقت لـ Accelerate ويتم تحميله تلقائيًا عند تشغيل `accelerate_launch`. + +على سبيل المثال، لتشغيل نص البرنامج النصي للتدريب [run_glue.py](https://github.com/huggingface/transformers/blob/f4db565b695582891e43a5e042e5d318e28f20b8/examples/pytorch/text-classification/run_glue.py#L4) مع تكوين FSDP: + +```bash +accelerate launch \ + ./examples/pytorch/text-classification/run_glue.py \ + --model_name_or_path google-bert/bert-base-cased \ + --task_name $TASK_NAME \ + --do_train \ + --do_eval \ + --max_seq_length 128 \ + --per_device_train_batch_size 16 \ + --learning_rate 5e-5 \ + --num_train_epochs 3 \ + --output_dir /tmp/$TASK_NAME/ \ + --overwrite_output_dir +``` + +يمكنك أيضًا تحديد المعلمات من ملف `config_file.yaml` مباشرة في سطر الأوامر: + +```bash +accelerate launch --num_processes=2 \ + --use_fsdp \ + --mixed_precision=bf16 \ + --fsdp_auto_wrap_policy=TRANSFORMER_BASED_WRAP \ + --fsdp_transformer_layer_cls_to_wrap="BertLayer" \ + --fsdp_sharding_strategy=1 \ + --fsdp_state_dict_type=FULL_STATE_DICT \ + ./examples/pytorch/text-classification/run_glue.py + --model_name_or_path google-bert/bert-base-cased \ + --task_name $TASK_NAME \ + --do_train \ + --do_eval \ + --max_seq_length 128 \ + --per_device_train_batch_size 16 \ + --learning_rate 5e-5 \ + --num_train_epochs 3 \ + --output_dir /tmp/$TASK_NAME/ \ + --overwrite_output_dir +``` + +تحقق من [إطلاق نص البرنامج النصي Accelerate](https://huggingface.co/docs/accelerate/basic_tutorials/launch) لمعرفة المزيد حول `accelerate_launch` والتكوينات المخصصة. \ No newline at end of file From eae1a2f3243a22bc5cc393f77aac3d42ace1e2a1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:43 +0300 Subject: [PATCH 061/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tflite.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tflite.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/source/ar/tflite.md diff --git a/docs/source/ar/tflite.md b/docs/source/ar/tflite.md new file mode 100644 index 00000000000000..94869df30fc800 --- /dev/null +++ b/docs/source/ar/tflite.md @@ -0,0 +1,40 @@ +# التصدير إلى TFLite + +[TensorFlow Lite](https://www.tensorflow.org/lite/guide) هو إطار عمل خفيف الوزن لنشر نماذج التعلم الآلي على الأجهزة المحدودة الموارد، مثل الهواتف المحمولة، والأنظمة المدمجة، وأجهزة إنترنت الأشياء (IoT). تم تصميم TFLite لتشغيل النماذج وتحسينها بكفاءة على هذه الأجهزة ذات الطاقة الحاسوبية والذاكرة واستهلاك الطاقة المحدودة. + +يتم تمثيل نموذج TensorFlow Lite بتنسيق محمول فعال خاص يتم تحديده بواسطة امتداد الملف `.tflite`. + +🤗 Optimum يقدم وظيفة لتصدير نماذج 🤗 Transformers إلى TFLite من خلال الوحدة النمطية `exporters.tflite`. بالنسبة لقائمة هندسات النماذج المدعومة، يرجى الرجوع إلى [وثائق 🤗 Optimum](https://huggingface.co/docs/optimum/exporters/tflite/overview). + +لتصدير نموذج إلى TFLite، قم بتثبيت التبعيات المطلوبة: + +```bash +pip install optimum[exporters-tf] +``` + +للاطلاع على جميع الحجج المتاحة، راجع [وثائق 🤗 Optimum](https://huggingface.co/docs/optimum/main/en/exporters/tflite/usage_guides/export_a_model)، أو عرض المساعدة في سطر الأوامر: + +```bash +optimum-cli export tflite --help +``` + +لتصدير نقطة تفتيش نموذج من 🤗 Hub، على سبيل المثال، `google-bert/bert-base-uncased`، قم بتشغيل الأمر التالي: + +```bash +optimum-cli export tflite --model google-bert/bert-base-uncased --sequence_length 128 bert_tflite/ +``` + +يجب أن تشاهد السجلات التي تشير إلى التقدم وتعرض المكان الذي تم فيه حفظ `model.tflite` الناتج، مثل هذا: + +```bash +Validating TFLite model... + -[✓] TFLite model output names match reference model (logits) + - Validating TFLite Model output "logits": + -[✓] (1, 128, 30522) matches (1, 128, 30522) + -[x] values not close enough, max diff: 5.817413330078125e-05 (atol: 1e-05) +The TensorFlow Lite export succeeded with the warning: The maximum absolute difference between the output of the reference model and the TFLite exported model is not within the set tolerance 1e-05: +- logits: max diff = 5.817413330078125e-05. + The exported model was saved at: bert_tflite +``` + +يوضح المثال أعلاه تصدير نقطة تفتيش من 🤗 Hub. عند تصدير نموذج محلي، تأكد أولاً من حفظ ملفات أوزان النموذج ومحول الرموز في نفس الدليل (`local_path`). عند استخدام CLI، قم بتمرير `local_path` إلى حجة `model` بدلاً من اسم نقطة التفتيش على 🤗 Hub. \ No newline at end of file From 29c50fae677c275e689e355dc07c5b8eabcf1444 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:45 +0300 Subject: [PATCH 062/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tf=5Fxla.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tf_xla.md | 171 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 docs/source/ar/tf_xla.md diff --git a/docs/source/ar/tf_xla.md b/docs/source/ar/tf_xla.md new file mode 100644 index 00000000000000..2ac80ac0eb07c0 --- /dev/null +++ b/docs/source/ar/tf_xla.md @@ -0,0 +1,171 @@ +# تكامل XLA لنماذج TensorFlow + +[[open-in-colab]] + +الجبر الخطي المعجل، الذي يُطلق عليه XLA، هو مترجم لتسريع وقت تشغيل نماذج TensorFlow. من [الوثائق الرسمية](https://www.tensorflow.org/xla): + +> XLA (Accelerated Linear Algebra) هو مترجم خاص بالمجال للجبر الخطي يمكنه تسريع نماذج TensorFlow دون إجراء أي تغييرات على شفرة المصدر. + +إن استخدام XLA في TensorFlow أمر بسيط - فهو يأتي مضمنًا داخل مكتبة `tensorflow`، ويمكن تشغيله باستخدام وسيط `jit_compile` في أي دالة لإنشاء الرسم البياني مثل [`tf.function`](https://www.tensorflow.org/guide/intro_to_graphs). عند استخدام أساليب Keras مثل `fit()` و`predict()`، يمكنك تمكين XLA ببساطة عن طريق تمرير وسيط `jit_compile` إلى `model.compile()`. ومع ذلك، لا تقتصر XLA على هذه الأساليب - يمكن أيضًا استخدامها لتسريع أي دالة `tf.function` عشوائية. + +تمت إعادة كتابة العديد من أساليب TensorFlow في 🤗 Transformers لتكون متوافقة مع XLA، بما في ذلك توليد النصوص لنماذج مثل [GPT2](https://huggingface.co/docs/transformers/model_doc/gpt2) و[T5](https://huggingface.co/docs/transformers/model_doc/t5) و[OPT](https://huggingface.co/docs/transformers/model_doc/opt)، بالإضافة إلى معالجة الكلام لنماذج مثل [Whisper](https://huggingface.co/docs/transformers/model_doc/whisper). + +في حين أن مقدار التسريع الدقيق يعتمد إلى حد كبير على النموذج، فقد لاحظنا تسريعًا يبلغ حوالي 100x لنماذج توليد النصوص TensorFlow داخل 🤗 Transformers. سيوضح هذا المستند كيفية استخدام XLA لهذه النماذج للحصول على أقصى قدر من الأداء. كما سنقدم روابط إلى موارد إضافية إذا كنت مهتمًا بمعرفة المزيد حول المعايير وتفكيرنا في تصميم التكامل مع XLA. + +## تشغيل وظائف TF باستخدام XLA + +لنأخذ في الاعتبار النموذج التالي في TensorFlow: + +```py +import tensorflow as tf + +model = tf.keras.Sequential( + [tf.keras.layers.Dense(10, input_shape=(10,), activation="relu"), tf.keras.layers.Dense(5, activation="softmax")] +) +``` + +يقبل النموذج أعلاه إدخالات ذات بعد `(10, )`. يمكننا استخدام النموذج لتشغيل عملية تمرير أمامي كما يلي: + +```py +# Generate random inputs for the model. +batch_size = 16 +input_vector_dim = 10 +random_inputs = tf.random.normal((batch_size, input_vector_dim)) + +# Run a forward pass. +_ = model(random_inputs) +``` + +لتشغيل عملية التمرير الأمامي باستخدام دالة مجمعة بواسطة XLA، سنحتاج إلى القيام بما يلي: + +```py +xla_fn = tf.function(model, jit_compile=True) +_ = xla_fn(random_inputs) +``` + +تُستخدم دالة `call()` الافتراضية للنموذج لتجميع رسم بياني XLA. ولكن إذا كان هناك أي دالة أخرى للنموذج تريد تجميعها في XLA، فيمكنك أيضًا القيام بذلك: + +```py +my_xla_fn = tf.function(model.my_xla_fn, jit_compile=True) +``` + +## تشغيل نموذج توليد نص TF باستخدام XLA من 🤗 Transformers + +لتمكين التوليد المعجل بواسطة XLA داخل 🤗 Transformers، يجب أن يكون لديك إصدار حديث من `transformers` مثبتًا. يمكنك تثبيته عن طريق تشغيل: + +```bash +pip install transformers --upgrade +``` + +ثم يمكنك تشغيل الشفرة التالية: + +```py +import tensorflow as tf +from transformers import AutoTokenizer, TFAutoModelForCausalLM +```bash +pip install transformers --upgrade +``` + +ثم يمكنك تشغيل الشفرة التالية: + +```py +import tensorflow as tf +from transformers import AutoTokenizer, TFAutoModelForCausalLM + +# سيحدث خطأ إذا لم يتم تثبيت الإصدار الأدنى من Transformers. +from transformers.utils import check_min_version + +check_min_version("4.21.0") + + +tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2", padding_side="left", pad_token="") +model = TFAutoModelForCausalLM.from_pretrained("openai-community/gpt2") +input_string = ["TensorFlow is"] + +# سطر واحد لإنشاء دالة توليد XLA +xla_generate = tf.function(model.generate, jit_compile=True) + +tokenized_input = tokenizer(input_string, return_tensors="tf") +generated_tokens = xla_generate(**tokenized_input, num_beams=2) + +decoded_text = tokenizer.decode(generated_tokens[0], skip_special_tokens=True) +print(f"Generated -- {decoded_text}") +# تم التوليد -- TensorFlow هو إطار تطبيق مفتوح المصدر ومفتوح المصدر ومفتوح المصدر +``` + +كما تلاحظ، فإن تمكين XLA على `generate()` هو مجرد سطر واحد من الشفرة. تظل بقية الشفرة دون تغيير. ومع ذلك، هناك بعض الأشياء التي يجب مراعاتها في مقتطف الشفرة أعلاه والتي تخص XLA تحديدًا. يجب أن تكون على دراية بها لتحقيق التسريعات التي يمكن أن توفرها XLA. نناقش هذه الأمور في القسم التالي. + +## الأشياء التي يجب مراعاتها + +عندما تقوم بتنفيذ دالة ممكّنة لـ XLA (مثل `xla_generate()` أعلاه) للمرة الأولى، فسوف تحاول داخليًا استنتاج رسم الحساب، وهو أمر يستغرق وقتًا طويلاً. تُعرف هذه العملية باسم ["التتبع"](https://www.tensorflow.org/guide/intro_to_graphs#when_is_a_function_tracing). + +قد تلاحظ أن وقت التوليد ليس سريعًا. لن تحتاج عمليات الاستدعاء المتتالية لـ `xla_generate()` (أو أي دالة أخرى ممكّنة لـ XLA) إلى استنتاج رسم الحساب، بشرط أن تتبع الإدخالات إلى الدالة نفس الشكل الذي تم بناء رسم الحساب به في البداية. في حين أن هذا ليس مشكلة بالنسبة للطرائق ذات أشكال الإدخال الثابتة (مثل الصور)، يجب الانتباه إذا كنت تعمل مع طرائق ذات شكل إدخال متغير (مثل النص). + +لضمان عمل `xla_generate()` دائمًا مع أشكال الإدخال نفسها، يمكنك تحديد وسيطات `padding` عند استدعاء tokenizer. + +```py +import tensorflow as tf +from transformers import AutoTokenizer, TFAutoModelForCausalLM + +tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2", padding_side="left", pad_token="") +model = TFAutoModelForCausalLM.from_pretrained("openai-community/gpt2") +input_string = ["TensorFlow is"] + +xla_generate = tf.function(model.generate, jit_compile=True) + +# هنا، نقوم باستدعاء tokenizer مع خيارات الحشو. +tokenized_input = tokenizer(input_string, pad_to_multiple_of=8, padding=True, return_tensors="tf") + +generated_tokens = xla_generate(**tokenized_input, num_beams=2) +decoded_text = tokenizer.decode(generated_tokens[0], skip_special_tokens=True) +print(f"Generated -- {decoded_text}") +``` + +بهذه الطريقة، يمكنك التأكد من أن الإدخالات إلى `xla_generate()` ستتلقى دائمًا إدخالات ذات الشكل الذي تم تتبعه به، مما يؤدي إلى تسريع وقت التوليد. يمكنك التحقق من ذلك باستخدام الشفرة التالية: + +```py +import time +import tensorflow as tf +from transformers import AutoTokenizer, TFAutoModelForCausalLM + +tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2", padding_side="left", pad_token="") +model = TFAutoModelForCausalLM.from_pretrained("openai-community/gpt2") + +xla_generate = tf.function(model.generate, jit_compile=True) + +for input_string in ["TensorFlow is", "TensorFlow is a", "TFLite is a"]: + tokenized_input = tokenizer(input_string, pad_to_multiple_of=8, padding=True, return_tensors="tf") + start = time.time_ns() + generated_tokens = xla_generate(**tokenized_input, num_beams=2) + end = time.time_ns() + print(f"Execution time -- {(end - start) / 1e6:.1f} ms\n") +``` + +على وحدة معالجة الرسوميات (GPU) Tesla T4، يمكنك توقع المخرجات كما يلي: + +```bash +Execution time -- 30819.6 ms +على وحدة معالجة الرسوميات (GPU) Tesla T4، يمكنك توقع المخرجات كما يلي: + +```bash +Execution time -- 30819.6 ms + +Execution time -- 79.0 ms + +Execution time -- 78.9 ms +``` +تستغرق المكالمة الأولى إلى `xla_generate()` وقتًا طويلاً بسبب التتبع، ولكن المكالمات المتتالية أسرع بكثير. ضع في اعتبارك أن أي تغيير في خيارات التوليد في أي نقطة سيؤدي إلى إعادة التتبع، مما يؤدي إلى بطء وقت التوليد. + +لم نغطِ جميع خيارات توليد النصوص التي يوفرها 🤗 Transformers في هذه الوثيقة. نشجعك على قراءة الوثائق للحصول على حالات استخدام متقدمة. + +## موارد إضافية + +نترككم هنا ببعض الموارد الإضافية إذا كنت ترغب في التعمق في XLA في 🤗 Transformers بشكل عام. + +* [يوفر دفتر الملاحظات هذا من Colab](https://colab.research.google.com/github/huggingface/blog/blob/main/notebooks/91_tf_xla_generate.ipynb) عرضًا توضيحيًا تفاعليًا إذا كنت ترغب في العبث بنماذج التوليد المتوافقة مع XLA (مثل [T5](https://huggingface.co/docs/transformers/model_doc/t5)) والترميز فك الترميز (مثل [GPT2](https://huggingface.co/docs/transformers/model_doc/gpt2)). +* [تقدم هذه التدوينة](https://huggingface.co/blog/tf-xla-generate) نظرة عامة على معايير المقارنة للنماذج المتوافقة مع XLA بالإضافة إلى مقدمة سهلة الاستخدام لـ XLA في TensorFlow. +* [تناقش هذه التدوينة](https://blog.tensorflow.org/2022/11/how-hugging-face-improved-text-generation-performance-with-xla.html) تفكيرنا في التصميم وراء إضافة دعم XLA إلى نماذج TensorFlow في 🤗 Transformers. +* المشاركات الموصى بها لمعرفة المزيد حول XLA ورسومات TensorFlow بشكل عام: + * [XLA: مترجم محسّن لتعلم الآلة](https://www.tensorflow.org/xla) + * [مقدمة إلى الرسوم البيانية وtf.function](https://www.tensorflow.org/guide/intro_to_graphs) + * [أداء أفضل مع tf.function](https://www.tensorflow.org/guide/function) \ No newline at end of file From 3efbee3c96eaea5f8bc765766b8bca8b4313448f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:47 +0300 Subject: [PATCH 063/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/torchscript.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/torchscript.md | 158 ++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 docs/source/ar/torchscript.md diff --git a/docs/source/ar/torchscript.md b/docs/source/ar/torchscript.md new file mode 100644 index 00000000000000..ac02974ddb27ae --- /dev/null +++ b/docs/source/ar/torchscript.md @@ -0,0 +1,158 @@ +# التصدير إلى TorchScript + + + +هذه هي بداية تجاربنا مع TorchScript ولا زلنا نستكشف قدراته مع نماذج المدخلات المتغيرة الحجم. إنه مجال اهتمامنا وسنعمق تحليلنا في الإصدارات القادمة، مع المزيد من أمثلة التعليمات البرمجية، وتنفيذ أكثر مرونة، ومقاييس مقارنة بين التعليمات البرمجية المستندة إلى Python مع TorchScript المترجمة. + + + +وفقًا لـ [وثائق TorchScript](https://pytorch.org/docs/stable/jit.html): + +> TorchScript هي طريقة لإنشاء نماذج قابلة للتسلسل والتحسين من تعليمات PyTorch البرمجية. + +هناك وحدتان من PyTorch، [JIT and TRACE](https://pytorch.org/docs/stable/jit.html)، تتيحان للمطورين تصدير نماذجهم لإعادة استخدامها في برامج أخرى مثل برامج C++ الموجهة نحو الكفاءة. + +نقدم واجهة تتيح لك تصدير نماذج 🤗 Transformers إلى TorchScript بحيث يمكن إعادة استخدامها في بيئة مختلفة عن برامج Python المستندة إلى PyTorch. هنا نشرح كيفية تصدير نماذجنا واستخدامها باستخدام TorchScript. + +يتطلب تصدير نموذج أمرين: + +- إنشاء مثيل للنموذج باستخدام علم `torchscript` +- تمرير إلى الأمام باستخدام مدخلات وهمية + +تنطوي هذه الضرورات على عدة أمور يجب على المطورين توخي الحذر بشأنها كما هو مفصل أدناه. + +## علم TorchScript والأوزان المرتبطة + +علم `torchscript` ضروري لأن معظم نماذج اللغة 🤗 Transformers لها أوزان مرتبطة بين طبقة `Embedding` وطبقة `Decoding`. لا يسمح لك TorchScript بتصدير النماذج التي تحتوي على أوزان مرتبطة، لذلك من الضروري فصل الأوزان ونسخها مسبقًا. + +النماذج التي تم إنشاؤها باستخدام علم `torchscript` لها طبقة `Embedding` و`Decoding` منفصلة، مما يعني أنه لا ينبغي تدريبها لاحقًا. سيؤدي التدريب إلى عدم تزامن الطبقتين، مما يؤدي إلى نتائج غير متوقعة. + +هذا لا ينطبق على النماذج التي لا تحتوي على رأس نموذج اللغة، حيث لا تحتوي على أوزان مرتبطة. يمكن تصدير هذه النماذج بأمان دون علم `torchscript`. + +## المدخلات الوهمية والأطوال القياسية + +تُستخدم المدخلات الوهمية للمرور الأمامي للنموذج. بينما يتم تمرير قيم المدخلات عبر الطبقات، تقوم PyTorch بتتبع العمليات المختلفة التي يتم تنفيذها على كل مصفوفة. ثم يتم استخدام هذه العمليات المسجلة لإنشاء *تتبع* النموذج. + +يتم إنشاء التتبع بالنسبة لأبعاد المدخلات. وبالتالي، فهو مقيد بأبعاد المدخلات الوهمية، ولن يعمل لأي طول تسلسل أو حجم دفعة آخر. عند المحاولة بحجم مختلف، يتم رفع الخطأ التالي: + +``` +`يجب أن يتطابق الحجم الموسع للمصفوفة (3) مع الحجم الموجود (7) في البعد 2 غير المفرد` +``` + +نوصي بتتبع النموذج باستخدام حجم إدخال وهمي أكبر على الأقل مثل أكبر إدخال سيتم إطعامه للنموذج أثناء الاستدلال. يمكن أن تساعد الحشوة في ملء القيم المفقودة. ومع ذلك، نظرًا لأنه يتم تتبع النموذج باستخدام حجم إدخال أكبر، فإن أبعاد المصفوفة ستكون كبيرة أيضًا، مما يؤدي إلى مزيد من الحسابات. + +كن حذرًا من إجمالي عدد العمليات التي تتم على كل إدخال واتبع الأداء عن كثب عند تصدير نماذج طول التسلسل المتغيرة. + +## استخدام TorchScript في Python +كن حذرًا من إجمالي عدد العمليات التي تتم على كل إدخال واتبع الأداء عن كثب عند تصدير نماذج طول التسلسل المتغيرة. + +## استخدام TorchScript في Python + +يوضح هذا القسم كيفية حفظ النماذج وتحميلها، بالإضافة إلى كيفية استخدام التتبع للاستدلال. + +### حفظ نموذج + +لتصدير `BertModel` مع TorchScript، قم بإنشاء مثيل لـ `BertModel` من فئة `BertConfig` ثم احفظه على القرص تحت اسم الملف `traced_bert.pt`: + +```python +from transformers import BertModel, BertTokenizer, BertConfig +import torch + +enc = BertTokenizer.from_pretrained("google-bert/bert-base-uncased") + +# Tokenizing input text +text = "[CLS] Who was Jim Henson ? [SEP] Jim Henson was a puppeteer [SEP]" +tokenized_text = enc.tokenize(text) + +# Masking one of the input tokens +masked_index = 8 +tokenized_text[masked_index] = "[MASK]" +indexed_tokens = enc.convert_tokens_to_ids(tokenized_text) +segments_ids = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1] + +# Creating a dummy input +tokens_tensor = torch.tensor([indexed_tokens]) +segments_tensors = torch.tensor([segments_ids]) +dummy_input = [tokens_tensor, segments_tensors] + +# Initializing the model with the torchscript flag +# Flag set to True even though it is not necessary as this model does not have an LM Head. +config = BertConfig( + vocab_size_or_config_json_file=32000, + hidden_size=768, + num_hidden_layers=12, + num_attention_heads=12, + intermediate_size=3072, + torchscript=True, +) + +# Instantiating the model +model = BertModel(config) + +# The model needs to be in evaluation mode +model.eval() + +# If you are instantiating the model with *from_pretrained* you can also easily set the TorchScript flag +model = BertModel.from_pretrained("google-bert/bert-base-uncased", torchscript=True) + +# Creating the trace +traced_model = torch.jit.trace(model, [tokens_tensor, segments_tensors]) +torch.jit.save(traced_model, "traced_bert.pt") +``` + +### تحميل نموذج + +الآن يمكنك تحميل `BertModel` المحفوظ سابقًا، `traced_bert.pt`، من القرص واستخدامه على `dummy_input` الذي تم تهيئته مسبقًا: + +```python +loaded_model = torch.jit.load("traced_bert.pt") +loaded_model.eval() + +all_encoder_layers, pooled_output = loaded_model(*dummy_input) +``` + +### استخدام نموذج تم تتبعه للاستدلال + +استخدم النموذج الذي تم تتبعه للاستدلال باستخدام أسلوب `__call__` الخاص به: + +```python +traced_model(tokens_tensor, segments_tensors) +``` + +## نشر نماذج Hugging Face TorchScript على AWS باستخدام Neuron SDK + +قدمت AWS عائلة [Amazon EC2 Inf1](https://aws.amazon.com/ec2/instance-types/inf1/) من مثيلات لخفض التكلفة وأداء التعلم الآلي عالي الأداء في السحابة. تعمل مثيلات Inf1 بواسطة شريحة Inferentia من AWS، وهي مسرع أجهزة مخصص، متخصص في أعباء عمل الاستدلال للتعلم العميق. [AWS Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/#) هي SDK لـ Inferentia التي تدعم تتبع نماذج المحولات وتحسينها للنشر على Inf1. توفر Neuron SDK ما يلي: + +1. واجهة برمجة تطبيقات سهلة الاستخدام مع تغيير سطر واحد من التعليمات البرمجية لتتبع نموذج TorchScript وتحسينه للاستدلال في السحابة. +2. تحسينات الأداء الجاهزة للاستخدام [تحسين التكلفة والأداء](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/benchmark/>). +3. دعم نماذج Hugging Face المحولات المبنية باستخدام إما [بايثون](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/pytorch/bert_tutorial/tutorial_pretrained_bert.html) أو [تنسورفلو](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/tensorflow/huggingface_bert/huggingface_bert.html). + +### الآثار المترتبة +### الآثار المترتبة + +تعمل نماذج المحولات المستندة إلى بنية [BERT (تمثيلات الترميز ثنائية الاتجاه من المحولات)](https://huggingface.co/docs/transformers/main/model_doc/bert) أو متغيراتها مثل [distilBERT](https://huggingface.co/docs/transformers/main/model_doc/distilbert) و [roBERTa](https://huggingface.co/docs/transformers/main/model_doc/roberta) بشكل أفضل على Inf1 للمهام غير التوليدية مثل الإجابة على الأسئلة الاستخراجية، وتصنيف التسلسلات، وتصنيف الرموز. ومع ذلك، يمكن تكييف مهام توليد النصوص للعمل على Inf1 وفقًا لهذا [برنامج تعليمي AWS Neuron MarianMT](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/pytorch/transformers-marianmt.html). يمكن العثور على مزيد من المعلومات حول النماذج التي يمكن تحويلها من الصندوق على Inferentia في قسم [ملاءمة بنية النموذج](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/models/models-inferentia.html#models-inferentia) من وثائق Neuron. + +### التبعيات + +يتطلب استخدام AWS Neuron لتحويل النماذج [بيئة SDK Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/pytorch-neuron/index.html#installation-guide) والتي تأتي مسبقًا على [AMI للتعلم العميق من AWS](https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-inferentia-launching.html). + +### تحويل نموذج لـ AWS Neuron + +قم بتحويل نموذج لـ AWS NEURON باستخدام نفس التعليمات البرمجية من [استخدام TorchScript في Python](torchscript#using-torchscript-in-python) لتتبع `BertModel`. قم باستيراد امتداد إطار عمل `torch.neuron` للوصول إلى مكونات Neuron SDK من خلال واجهة برمجة تطبيقات Python: + +```python +from transformers import BertModel, BertTokenizer, BertConfig +import torch +import torch.neuron +``` + +كل ما عليك فعله هو تعديل السطر التالي: + +```diff +- torch.jit.trace(model, [tokens_tensor, segments_tensors]) ++ torch.neuron.trace(model, [token_tensor, segments_tensors]) +``` + +يتيح ذلك لـ Neuron SDK تتبع النموذج وتحسينه لمثيلات Inf1. + +لمعرفة المزيد حول ميزات AWS Neuron SDK والأدوات ودروس البرامج التعليمية والتحديثات الأخيرة، يرجى الاطلاع على [وثائق AWS NeuronSDK](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/index.html). \ No newline at end of file From 36fa78defc975d4cef52f29f3c4a4a48e1b7cc0c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:49 +0300 Subject: [PATCH 064/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/training.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/training.md | 412 +++++++++++++++++++++++++++++++++++++ 1 file changed, 412 insertions(+) create mode 100644 docs/source/ar/training.md diff --git a/docs/source/ar/training.md b/docs/source/ar/training.md new file mode 100644 index 00000000000000..42922b3b0d3b81 --- /dev/null +++ b/docs/source/ar/training.md @@ -0,0 +1,412 @@ +# ضبط نموذج مُدرب مسبقًا + +هناك فوائد كبيرة لاستخدام نموذج مُدرب مسبقًا. فهو يقلل من تكاليف الحوسبة، وبصمتك الكربونية، ويتيح لك استخدام أحدث النماذج دون الحاجة إلى تدريبها من الصفر. توفر مكتبة 🤗 Transformers إمكانية الوصول إلى آلاف النماذج المُدربة مسبقًا لمجموعة واسعة من المهام. عندما تستخدم نموذجًا مُدربًا مسبقًا، فإنك تقوم بتدريبه على مجموعة بيانات خاصة بمهمتك. يُعرف ذلك بالضبط الدقيق، وهي تقنية تدريب قوية للغاية. في هذا البرنامج التعليمي، سوف تقوم بضبط نموذج مُدرب مسبقًا باستخدام إطار عمل للتعلم العميق من اختيارك: + +* ضبط نموذج مُدرب مسبقًا باستخدام 🤗 Transformers [`Trainer`]. +* ضبط نموذج مُدرب مسبقًا في TensorFlow باستخدام Keras. +* ضبط نموذج مُدرب مسبقًا في PyTorch الأصلي. + + + +## إعداد مجموعة بيانات + +قبل أن تتمكن من ضبط نموذج مُدرب مسبقًا، قم بتنزيل مجموعة بيانات وإعدادها للتدريب. أظهر البرنامج التعليمي السابق كيفية معالجة البيانات للتدريب، والآن لديك الفرصة لاختبار تلك المهارات! + +ابدأ بتحميل مجموعة بيانات [Yelp Reviews](https://huggingface.co/datasets/yelp_review_full): + +```py +>>> from datasets import load_dataset + +>>> dataset = load_dataset("yelp_review_full") +>>> dataset["train"][100] +{'label': 0, + 'text': 'My expectations for McDonalds are t rarely high. But for one to still fail so spectacularly...that takes something special!\\nThe cashier took my friends\'s order, then promptly ignored me. I had to force myself in front of a cashier who opened his register to wait on the person BEHIND me. I waited over five minutes for a gigantic order that included precisely one kid\'s meal. After watching two people who ordered after me be handed their food, I asked where mine was. The manager started yelling at the cashiers for \\"serving off their orders\\" when they didn\'t have their food. But neither cashier was anywhere near those controls, and the manager was the one serving food to customers and clearing the boards.\\nThe manager was rude when giving me my order. She didn\'t make sure that I had everything ON MY RECEIPT, and never even had the decency to apologize that I felt I was getting poor service.\\nI\'ve eaten at various McDonalds restaurants for over 30 years. I\'ve worked at more than one location. I expect bad days, bad moods, and the occasional mistake. But I have yet to have a decent experience at this store. It will remain a place I avoid unless someone in my party needs to avoid illness from low blood sugar. Perhaps I should go back to the racially biased service of Steak n Shake instead!'} +``` + +كما تعلم الآن، تحتاج إلى أداة تعلم علامات الترقيم لمعالجة النص وتضمين استراتيجية للتعامل مع أي أطوال متسلسلة متغيرة. لمعالجة مجموعة البيانات الخاصة بك في خطوة واحدة، استخدم طريقة 🤗 Datasets [`map`](https://huggingface.co/docs/datasets/process#map) لتطبيق دالة معالجة مسبقة على مجموعة البيانات بأكملها: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased") + + +>>> def tokenize_function(examples): +... return tokenizer(examples["text"], padding="max_length", truncation=True) +>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased") + + +>>> def tokenize_function(examples): +... return tokenizer(examples["text"], padding="max_length", truncation=True) + + +>>> tokenized_datasets = dataset.map(tokenize_function, batched=True) +``` + +إذا كنت ترغب، يمكنك إنشاء مجموعة فرعية أصغر من مجموعة البيانات الكاملة لضبطها لتقليل الوقت الذي تستغرقه: + +```py +>>> small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000)) +>>> small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000)) +``` + + + +## التدريب + +في هذه المرحلة، يجب عليك اتباع القسم الذي يتوافق مع الإطار الذي تريد استخدامه. يمكنك استخدام الروابط +في شريط التنقل الأيمن للقفز إلى الإطار الذي تريده - وإذا كنت تريد إخفاء كل المحتوى لإطار معين، +فاستخدم الزر في الركن العلوي الأيمن من كتلة الإطار! + + + + + +## التدريب باستخدام PyTorch Trainer + +تقدم مكتبة 🤗 Transformers فئة [`Trainer`] مُحسّنة لتدريب نماذج 🤗 Transformers، مما يسهل بدء التدريب دون الحاجة إلى كتابة حلقة التدريب الخاصة بك يدويًا. تدعم واجهة برمجة تطبيقات [`Trainer`] مجموعة واسعة من خيارات التدريب والميزات مثل التسجيل، وتراكم التدرجات، والدقة المختلطة. + +ابدأ بتحميل نموذجك وتحديد عدد التصنيفات المتوقعة. من بطاقة مجموعة بيانات Yelp Review [dataset card](https://huggingface.co/datasets/yelp_review_full#data-fields)، تعرف أنه يوجد خمسة تصنيفات: + +```py +>>> from transformers import AutoModelForSequenceClassification + +>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-cased", num_labels=5) +``` + + + +سترى تحذيرًا بشأن بعض أوزان النموذج المُدرب مسبقًا التي لم يتم استخدامها وبعض الأوزان التي تم تهيئتها بشكل عشوائي. لا تقلق، هذا أمر طبيعي تمامًا! يتم التخلص من رأس النموذج المُدرب مسبقًا لشبكة BERT، ويتم استبداله برأس تصنيف مُهيأ بشكل عشوائي. سوف تقوم بضبط رأس النموذج الجديد هذا على مهمة تصنيف التسلسل، ونقل معرفة النموذج المُدرب مسبقًا إليه. + + + +### فرط المعالم + +بعد ذلك، قم بإنشاء فئة [`TrainingArguments`] والتي تحتوي على جميع فرط المعالم التي يمكنك ضبطها بالإضافة إلى أعلام لتنشيط خيارات التدريب المختلفة. بالنسبة لهذا البرنامج التعليمي، يمكنك البدء بفرط المعالم الافتراضية [hyperparameters](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments)، ولكن لا تتردد في تجربتها للعثور على الإعدادات المثلى. + +حدد مكان حفظ نقاط الفحص من تدريبك: + +```py +>>> from transformers import TrainingArguments + +>>> training_args = TrainingArguments(output_dir="test_trainer") +``` + +### التقييم + +لا يقوم [`Trainer`] تلقائيًا بتقييم أداء النموذج أثناء التدريب. ستحتاج إلى تمرير دالة إلى [`Trainer`] لحساب الإبلاغ عن المقاييس. توفر مكتبة [🤗 Evaluate](https://huggingface.co/docs/evaluate/index) دالة [`accuracy`](https://huggingface.co/spaces/evaluate-metric/accuracy) بسيطة يمكنك تحميلها باستخدام الدالة [`evaluate.load`] (راجع هذا [الدليل السريع](https://huggingface.co/docs/evaluate/a_quick_tour) لمزيد من المعلومات): + +```py +>>> import numpy as np +>>> import evaluate + +>>> metric = evaluate.load("accuracy") +``` + +قم بالاتصال بـ [`~evaluate.compute`] على `metric` لحساب دقة تنبؤاتك. قبل تمرير تنبؤاتك إلى `compute`، تحتاج إلى تحويل logits إلى تنبؤات (تذكر أن جميع نماذج 🤗 Transformers تعيد logits): + +```py +>>> def compute_metrics(eval_pred): +... logits، labels = eval_pred +... التوقعات = np.argmax (logits، المحور = -1) +... return metric.compute (التنبؤات = التوقعات، المراجع = العلامات) +``` + +إذا كنت ترغب في مراقبة مقاييس التقييم الخاصة بك أثناء الضبط الدقيق، فحدد معلمة `eval_strategy` في حجج التدريب الخاصة بك للإبلاغ عن المقياس في نهاية كل حقبة: + +```py +>>> from transformers import TrainingArguments, Trainer + +>>> training_args = TrainingArguments(output_dir="test_trainer", eval_strategy="epoch") +``` + +### المدرب + +قم بإنشاء كائن [`Trainer`] باستخدام نموذجك، وحجج التدريب، ومجموعات البيانات التدريبية والاختبارية، ودالة التقييم: + +```py +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=small_train_dataset, +... eval_dataset=small_eval_dataset, +... compute_metrics=compute_metrics, +... ) +``` + +ثم قم بضبط نموذجك عن طريق استدعاء [`~transformers.Trainer.train`]: + +```py +>>> trainer.train() +``` + + + + + + +## تدريب نموذج TensorFlow باستخدام Keras + +يمكنك أيضًا تدريب نماذج 🤗 Transformers في TensorFlow باستخدام واجهة برمجة تطبيقات Keras! + +### تحميل البيانات لـ Keras + +عندما تريد تدريب نموذج 🤗 Transformers باستخدام واجهة برمجة تطبيقات Keras، فأنت بحاجة إلى تحويل مجموعة البيانات الخاصة بك إلى تنسيق يفهمه +Keras. إذا كانت مجموعة البيانات الخاصة بك صغيرة، فيمكنك ببساطة تحويلها بالكامل إلى مصفوفات NumPy وإرسالها إلى Keras. +دعونا نجرب ذلك أولاً قبل أن نقوم بأي شيء أكثر تعقيدًا. + +أولاً، قم بتحميل مجموعة بيانات. سنستخدم مجموعة بيانات CoLA من معيار [GLUE benchmark](https://huggingface.co/datasets/glue)، +نظرًا لأنه مهمة تصنيف نص ثنائي بسيطة، وسنأخذ فقط قسم التدريب الآن. + +```py +from datasets import load_dataset + +dataset = load_dataset("glue"، "cola") +dataset = dataset ["train"] # خذ فقط قسم التدريب الآن +``` + +بعد ذلك، قم بتحميل أداة تعلم علامات الترقيم وقم بترميز البيانات كمصفوفات NumPy. لاحظ أن التصنيفات هي بالفعل قائمة من 0 و 1، +لذا يمكننا ببساطة تحويل ذلك مباشرة إلى مصفوفة NumPy بدون ترميز! + +```py +from transformers import AutoTokenizer +import numpy as np + +tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased") +tokenized_data = tokenizer(dataset["sentence"], return_tensors="np", padding=True) +# Tokenizer returns a BatchEncoding, but we convert that to a dict for Keras +tokenized_data = dict(tokenized_data) + +labels = np.array(dataset["label"]) # Label is already an array of 0 and 1 +``` + +أخيرًا، قم بتحميل وتجميع وتناسب النموذج. لاحظ أن نماذج Transformers تحتوي جميعها على دالة خسارة ذات صلة بالمهمة بشكل افتراضي، لذا فأنت لست بحاجة إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +from transformers import TFAutoModelForSequenceClassification +from tensorflow.keras.optimizers import Adam + +# تحميل وتجميع النموذج الخاص بنا +model = TFAutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-cased") +# معدلات التعلم المنخفضة أفضل غالبًا لضبط النماذج الدقيقة +model.compile(optimizer=Adam(3e-5)) # لا توجد دالة خسارة! + +model.fit(tokenized_data, labels) +``` + + + +أنت لست مضطرًا لتمرير دالة خسارة إلى نماذجك عند تجميعها! تختار نماذج Hugging Face تلقائيًا +دالة خسارة مناسبة لمهمتها وهندسة نموذجها إذا تُركت هذه الحجة فارغة. يمكنك دائمًا +تجاوز ذلك عن طريق تحديد دالة خسارة بنفسك إذا كنت تريد ذلك! + + + +يعمل هذا النهج بشكل رائع لمجموعات البيانات الصغيرة، ولكن بالنسبة لمجموعات البيانات الأكبر، فقد تجد أنه يصبح مشكلة. لماذا؟ +لأن المصفوفة المرمزة والتصنيفات يجب أن يتم تحميلها بالكامل في الذاكرة، ولأن NumPy لا يتعامل مع +المصفوفات "المسننة"، لذا يجب أن يتم ترميز كل عينة بالطول الأقصى للعينة في مجموعة البيانات بأكملها. سيؤدي ذلك إلى زيادة حجم المصفوفة لديك، وستبطئ جميع رموز الترقيم من عملية التدريب أيضًا! + +### تحميل البيانات كـ tf.data.Dataset + +إذا كنت تريد تجنب إبطاء التدريب، فيمكنك تحميل بياناتك كـ `tf.data.Dataset` بدلاً من ذلك. على الرغم من أنه يمكنك كتابة خط أنابيب `tf.data` الخاص بك إذا كنت تريد، إلا أن لدينا طريقتين مختصرتين للقيام بذلك: +- [`~TFPreTrainedModel.prepare_tf_dataset`]: هذه هي الطريقة التي نوصي بها في معظم الحالات. نظرًا لأنه طريقة +على نموذجك، فيمكنه فحص النموذج لتحديد الأعمدة القابلة للاستخدام كمدخلات للنموذج تلقائيًا، +واستبعاد الأعمدة الأخرى لإنشاء مجموعة بيانات أبسط وأكثر كفاءة. +- [`~datasets.Dataset.to_tf_dataset`]: هذه الطريقة أكثر أساسية، وهي مفيدة عندما تريد التحكم بدقة في كيفية +إنشاء مجموعة البيانات الخاصة بك، عن طريق تحديد أعمدة `columns` و `label_cols` المحددة التي سيتم تضمينها. + +قبل أن تتمكن من استخدام [`~TFPreTrainedModel.prepare_tf_dataset`]، ستحتاج إلى إضافة نواتج أداة تعلم علامات الترقيم إلى مجموعة البيانات الخاصة بك كأعمدة، كما هو موضح في +عينة التعليمات البرمجية التالية: + +```py +def tokenize_dataset (data): +# ستتم إضافة مفاتيح القاموس الذي تمت إعادته كأعمدة إلى مجموعة البيانات +return tokenizer(data["text"]) + + +dataset = dataset.map(tokenize_dataset) +``` + +تذكر أن مجموعات بيانات Hugging Face يتم تخزينها على القرص بشكل افتراضي، لذا فلن يؤدي ذلك إلى تضخيم استخدام الذاكرة لديك! بمجرد إضافة الأعمدة، يمكنك بث الدفعات من مجموعة البيانات وإضافة الترميز إلى كل دفعة، مما يقلل بشكل كبير من عدد رموز الترقيم مقارنة بترميز مجموعة البيانات بأكملها. + + +```py +>>> tf_dataset = model.prepare_tf_dataset(dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer) +``` + +لاحظ أنه في عينة التعليمات البرمجية أعلاه، تحتاج إلى تمرير أداة تعلم علامات الترقيم إلى `prepare_tf_dataset` حتى تتمكن من ترميز الدفعات بشكل صحيح أثناء تحميلها. +إذا كانت جميع العينات في مجموعة البيانات الخاصة بك بنفس الطول ولم يكن الترميز ضروريًا، فيمكنك تخطي هذا الحجة. +إذا كنت بحاجة إلى القيام بشيء أكثر تعقيدًا من مجرد ترميز العينات (على سبيل المثال، إفساد الرموز للنمذجة اللغوية المُقنعة)، +فيمكنك استخدام حجة `collate_fn` بدلاً من ذلك لتمرير دالة يتم استدعاؤها لتحويل +قائمة العينات إلى دفعة وتطبيق أي معالجة مسبقة تريدها. راجع أمثلةنا [examples](https://github.com/huggingface/transformers/tree/main/examples) أو +[دفاتر الملاحظات](https://huggingface.co/docs/transformers/notebooks) لرؤية هذا النهج في العمل. + +بمجرد إنشاء `tf.data.Dataset`، يمكنك تجميع النموذج وتناسبه كما هو الحال من قبل: + +```py +model.compile(optimizer=Adam(3e-5)) # No loss argument! + +model.fit(tf_dataset) +``` + + + + + +## تدريب في PyTorch الأصلي + + + + + +[`Trainer`] يهتم بحلقة التدريب ويسمح لك بضبط نموذج في سطر واحد من التعليمات البرمجية. بالنسبة للمستخدمين الذين يفضلون كتابة حلقة التدريب الخاصة بهم، يمكنك أيضًا ضبط نموذج 🤗 Transformers في PyTorch الأصلي. + +في هذه المرحلة، قد تحتاج إلى إعادة تشغيل دفتر الملاحظات الخاص بك أو تنفيذ التعليمات البرمجية التالية لتحرير بعض الذاكرة: + +```py +حذف النموذج +حذف المدرب +torch.cuda.empty_cache() +``` + +بعد ذلك، قم بمعالجة `tokenized_dataset` يدويًا لإعداده للتدريب. + +1. إزالة عمود `text` لأن النموذج لا يقبل النص الخام كإدخال: + + ```py + >>> tokenized_datasets = tokenized_datasets.remove_columns(["text"]) + ``` + +2. إعادة تسمية عمود `label` إلى `labels` لأن النموذج يتوقع أن يكون الاسم `labels`: + + ```py + >>> tokenized_datasets = tokenized_datasets.rename_column("label"، "labels") + ``` + +3. قم بتعيين تنسيق مجموعة البيانات لإرجاع مؤشرات PyTorch بدلاً من القوائم: + + ```py + >>> tokenized_datasets.set_format("torch") + ``` + +بعد ذلك، قم بإنشاء مجموعة فرعية أصغر من مجموعة البيانات كما هو موضح سابقًا لتسريع الضبط الدقيق: + +```py +>>> small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000)) +>>> small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000)) +``` + +### DataLoader + +قم بإنشاء `DataLoader` لمجموعات بيانات التدريب والاختبار الخاصة بك حتى تتمكن من التكرار عبر دفعات البيانات: + +```py +>>> from torch.utils.data import DataLoader + +>>> train_dataloader = DataLoader(small_train_dataset، shuffle=True، batch_size=8) +>>> eval_dataloader = DataLoader(small_eval_dataset، batch_size=8) +``` + +قم بتحميل نموذجك مع عدد التصنيفات المتوقعة: + +```py +>>> from transformers import AutoModelForSequenceClassification + +>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-cased"، num_labels=5) +``` + +### المحسن ومخطط معدل التعلم + +قم بإنشاء محسن ومخطط معدل تعلم لضبط النموذج الدقيق. دعنا نستخدم [`AdamW`](https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html) المحسن من PyTorch: + +```py +>>> from torch.optim import AdamW + +>>> optimizer = AdamW(model.parameters()، lr=5e-5) +``` + +قم بإنشاء مخطط معدل التعلم الافتراضي من [`Trainer`]: + +```py +>>> from transformers import get_scheduler + +>>> num_epochs = 3 +>>> num_training_steps = num_epochs * len(train_dataloader) +>>> lr_scheduler = get_scheduler( +... name="linear"، optimizer=optimizer، num_warmup_steps=0، num_training_steps=num_training_steps +... ) +``` + +أخيرًا، حدد `device` لاستخدام وحدة معالجة الرسومات (GPU) إذا كان لديك حق الوصول إليها. وإلا، فقد يستغرق التدريب على وحدة المعالجة المركزية (CPU) عدة ساعات بدلاً من دقائق قليلة. + +```py +>>> import torch + +>>> device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") +>>> model.to(device) +``` + + + +احصل على وصول مجاني إلى وحدة معالجة رسومات سحابية إذا لم يكن لديك واحدة مع دفتر ملاحظات مستضاف مثل [Colaboratory](https://colab.research.google.com/) أو [SageMaker StudioLab](https://studiolab.sagemaker.aws/). + + + +رائع، الآن أنت مستعد للتدريب! 🥳 + +### حلقة التدريب + +لمراقبة تقدم التدريب الخاص بك، استخدم مكتبة [tqdm](https://tqdm.github.io/) لإضافة شريط تقدم فوق عدد خطوات التدريب: + +```py +>>> from tqdm.auto import tqdm + +>>> progress_bar = tqdm(range(num_training_steps)) + +>>> model.train() +>>> for epoch in range(num_epochs): +... for batch in train_dataloader: +... batch = {k: v.to(device) for k، v in batch.items()} +... outputs = model(**batch) +... loss = outputs.loss +... loss.backward() + +... optimizer.step() +... lr_scheduler.step() +... optimizer.zero_grad() +... progress_bar.update(1) +``` + +### تقييم + +تمامًا كما أضفت وظيفة تقييم إلى [`Trainer`]]، تحتاج إلى القيام بنفس الشيء عندما تكتب حلقة التدريب الخاصة بك. ولكن بدلاً من حساب الإبلاغ عن المقياس في نهاية كل حقبة، هذه المرة ستقوم بتجميع جميع الدفعات باستخدام [`~evaluate.add_batch`] وحساب المقياس في النهاية. + +```py +>>> import evaluate + +>>> metric = evaluate.load("accuracy") +>>> model.eval() +>>> for batch in eval_dataloader: +... batch = {k: v.to(device) for k، v in batch.items()} +... with torch.no_grad(): +... outputs = model(**batch) + +... logits = outputs.logits +... predictions = torch.argmax(logits، dim=-1) +... metric.add_batch(predictions=predictions، references=batch["labels"]) + +>>> metric.compute() +``` + + + + + +## موارد إضافية + +لمزيد من الأمثلة على الضبط الدقيق، راجع: + +- [🤗 أمثلة المحولات](https://github.com/huggingface/transformers/tree/main/examples) تتضمن + النصوص البرمجية لتدريب مهام NLP الشائعة في PyTorch وTensorFlow. + +- [🤗 دفاتر ملاحظات المحولات](notebooks) يحتوي على دفاتر ملاحظات مختلفة حول كيفية ضبط نموذج لمهمة محددة في PyTorch وTensorFlow. \ No newline at end of file From eace2b198b3471a154a6d55f96a5e810be09246a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:51 +0300 Subject: [PATCH 065/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/testing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/testing.md | 1170 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1170 insertions(+) create mode 100644 docs/source/ar/testing.md diff --git a/docs/source/ar/testing.md b/docs/source/ar/testing.md new file mode 100644 index 00000000000000..c87584d94027a5 --- /dev/null +++ b/docs/source/ar/testing.md @@ -0,0 +1,1170 @@ +# الاختبار + +دعونا نلقي نظرة على كيفية اختبار نماذج 🤗 Transformers وكيف يمكنك كتابة اختبارات جديدة وتحسين الاختبارات الحالية. + +هناك مجموعتا اختبار في المستودع: + +1. `tests` -- اختبارات لواجهة برمجة التطبيقات العامة +2. `examples` -- اختبارات للتطبيقات المختلفة التي ليست جزءًا من واجهة برمجة التطبيقات + +## كيفية اختبار المحولات + +1. بمجرد إرسال طلب سحب (PR)، يتم اختباره باستخدام 9 وظائف CircleCi. تتم إعادة اختبار كل التزام جديد لهذا الطلب. يتم تحديد هذه الوظائف في [ملف التكوين](https://github.com/huggingface/transformers/tree/main/.circleci/config.yml)، بحيث يمكنك، إذا لزم الأمر، إعادة إنشاء نفس البيئة على جهازك. + + لا تقوم وظائف CI هذه بتشغيل الاختبارات `@slow`. + +2. هناك 3 وظائف يتم تشغيلها بواسطة [GitHub Actions](https://github.com/huggingface/transformers/actions): + + - [تكامل مركز الشعلة](https://github.com/huggingface/transformers/tree/main/.github/workflows/github-torch-hub.yml): يتحقق مما إذا كان تكامل مركز الشعلة يعمل. + - [ذاتي الاستضافة (الدفع)](https://github.com/huggingface/transformers/tree/main/.github/workflows/self-push.yml): تشغيل الاختبارات السريعة على وحدة معالجة الرسوميات (GPU) فقط على الالتزامات على `main`. لا يتم تشغيله إلا إذا تم تحديث الالتزام على `main` للرمز في أحد المجلدات التالية: `src`، `tests`، `.github` (لمنع التشغيل عند إضافة بطاقات نموذج، دفاتر الملاحظات، إلخ). + - [منفذ ذاتي الاستضافة](https://github.com/huggingface/transformers/tree/main/.github/workflows/self-scheduled.yml): تشغيل الاختبارات العادية والبطيئة على وحدة معالجة الرسوميات (GPU) في `tests` و`examples`: + + ```bash + RUN_SLOW=1 pytest tests/ + RUN_SLOW=1 pytest examples/ + ``` + + يمكن ملاحظة النتائج [هنا](https://github.com/huggingface/transformers/actions). + +## تشغيل الاختبارات + +### اختيار الاختبارات التي سيتم تشغيلها + +تتطرق هذه الوثيقة إلى العديد من التفاصيل حول كيفية تشغيل الاختبارات. إذا كنت بعد قراءة كل شيء، لا تزال بحاجة إلى مزيد من التفاصيل، فستجدها [هنا](https://docs.pytest.org/en/latest/usage.html). + +فيما يلي بعض الطرق الأكثر فائدة لتشغيل الاختبارات. + +تشغيل الكل: + +```console +pytest +``` + +أو: + +```bash +make test +``` + +لاحظ أن الأخير محدد على النحو التالي: + +```bash +python -m pytest -n auto --dist=loadfile -s -v ./tests/ +``` + +الذي يخبر pytest بالقيام بما يلي: + +- تشغيل أكبر عدد ممكن من عمليات الاختبار مثل النوى المركزية (التي قد تكون كثيرة جدًا إذا لم يكن لديك الكثير من ذاكرة الوصول العشوائي!) +- التأكد من أن جميع الاختبارات من نفس الملف سيتم تشغيلها بواسطة نفس عملية الاختبار +- لا تلتقط الإخراج +- تشغيل في الوضع التفصيلي + +### الحصول على قائمة بجميع الاختبارات + +جميع اختبارات مجموعة الاختبار: + +```bash +pytest --collect-only -q +``` + +جميع اختبارات ملف اختبار معين: + +```bash +pytest tests/test_optimization.py --collect-only -q +``` + +### تشغيل وحدة اختبار محددة + +لتشغيل وحدة اختبار فردية: + +```bash +pytest tests/utils/test_logging.py +``` + +### تشغيل اختبارات محددة + +نظرًا لاستخدام unittest داخل معظم الاختبارات، لتشغيل اختبارات فرعية محددة، تحتاج إلى معرفة اسم فئة unittest التي تحتوي على تلك الاختبارات. على سبيل المثال، يمكن أن يكون: + +```bash +pytest tests/test_optimization.py::OptimizationTest::test_adam_w +``` + +هنا: + +- `tests/test_optimization.py` - الملف الذي يحتوي على الاختبارات +- `OptimizationTest` - اسم الفئة +- `test_adam_w` - اسم دالة الاختبار المحددة + +إذا احتوى الملف على عدة فئات، فيمكنك اختيار تشغيل اختبارات فئة معينة فقط. على سبيل المثال: + +```bash +pytest tests/test_optimization.py::OptimizationTest +``` + +سيقوم بتشغيل جميع الاختبارات داخل تلك الفئة. + +كما ذكرنا سابقًا، يمكنك معرفة الاختبارات الموجودة داخل فئة `OptimizationTest` بتشغيل: + +```bash +pytest tests/test_optimization.py::OptimizationTest --collect-only -q +``` + +يمكنك تشغيل الاختبارات باستخدام تعبيرات الكلمات الرئيسية. + +لتشغيل الاختبارات التي يحتوي اسمها على `adam` فقط: + +```bash +pytest -k adam tests/test_optimization.py +``` + +يمكن استخدام `and` المنطقية و`or` للإشارة إلى ما إذا كان يجب مطابقة جميع الكلمات الرئيسية أو أي منها. يمكن استخدام `not` لنفي. + +لتشغيل جميع الاختبارات باستثناء تلك التي يحتوي اسمها على `adam`: + +```bash +pytest -k "not adam" tests/test_optimization.py +``` + +ويمكنك الجمع بين النمطين في واحد: + +```bash +pytest -k "ada and not adam" tests/test_optimization.py +``` + +على سبيل المثال، لتشغيل كل من `test_adafactor` و`test_adam_w`، يمكنك استخدام: + +```bash +pytest -k "test_adafactor or test_adam_w" tests/test_optimization.py +``` + +لاحظ أننا نستخدم `or` هنا، لأننا نريد مطابقة أي من الكلمات الرئيسية لإدراج الاثنين. + +إذا كنت تريد تضمين الاختبارات التي تحتوي على كلا النمطين فقط، فيجب استخدام `and`: + +```bash +pytest -k "test and ada" tests/test_optimization.py +``` + +### تشغيل اختبارات `accelerate` + +في بعض الأحيان، تحتاج إلى تشغيل اختبارات `accelerate` على نماذجك. للقيام بذلك، يمكنك فقط إضافة `-m accelerate_tests` إلى أمرك، إذا كنت تريد تشغيل هذه الاختبارات على `OPT`، فقم بتشغيل: + +```bash +RUN_SLOW=1 pytest -m accelerate_tests tests/models/opt/test_modeling_opt.py +``` + +### تشغيل اختبارات التوثيق + +لاختبار ما إذا كانت أمثلة التوثيق صحيحة، يجب التأكد من أن `doctests` ناجحة. + +كمثال، دعنا نستخدم [docstring لـ `WhisperModel.forward`](https://github.com/huggingface/transformers/blob/main/src/transformers/models/whisper/modeling_whisper.py#L1017-L1035): + +```python +r""" +Returns: + +Example: +```python +>>> import torch +>>> from transformers import WhisperModel, WhisperFeatureExtractor +>>> from datasets import load_dataset +>>> model = WhisperModel.from_pretrained("openai/whisper-base") +>>> feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-base") +>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +>>> inputs = feature_extractor(ds[0]["audio"]["array"], return_tensors="pt") +>>> input_features = inputs.input_features +>>> decoder_input_ids = torch.tensor([[1, 1]]) * model.config.decoder_start_token_id +>>> last_hidden_state = model(input_features, decoder_input_ids=decoder_input_ids).last_hidden_state +>>> list(last_hidden_state.shape) +[1, 2, 512] +```""" +``` + +قم ببساطة بتشغيل السطر التالي لاختبار كل مثال docstring تلقائيًا في الملف المطلوب: + +```bash +pytest --doctest-modules +``` + +إذا كان للملف ملحق markdown، فيجب إضافة الحجة `--doctest-glob="*.md"`. + +### تشغيل الاختبارات المعدلة فقط + +يمكنك تشغيل الاختبارات المتعلقة بالملفات أو الفروع غير المرحلية (وفقًا لـ Git) باستخدام [pytest-picked](https://github.com/anapaulagomes/pytest-picked). هذه طريقة رائعة لاختبار ما إذا كانت التغييرات التي أجريتها لم تكسر أي شيء بسرعة، حيث لن تقوم بتشغيل الاختبارات المتعلقة بالملفات التي لم تلمسها. + +```bash +pip install pytest-picked +``` + +```bash +pytest --picked +``` + +سيتم تشغيل جميع الاختبارات من الملفات والمجلدات التي تم تعديلها ولكن لم يتم ارتكابها بعد. +: هذا دليل سريع حول كيفية تشغيل اختباراتنا. + +### إعادة تشغيل الاختبارات التي فشلت تلقائيًا عند تعديل المصدر +يوفر [pytest-xdist](https://github.com/pytest-dev/pytest-xdist) ميزة مفيدة جدًا تتمثل في اكتشاف جميع الاختبارات التي فشلت، ثم انتظار تعديل الملفات وإعادة تشغيل الاختبارات التي فشلت باستمرار حتى تنجح أثناء إصلاحها. بحيث لا تحتاج إلى إعادة تشغيل pytest بعد إجراء الإصلاح. ويستمر هذا حتى نجاح جميع الاختبارات، وبعد ذلك يتم إجراء تشغيل كامل مرة أخرى. + +```bash +pip install pytest-xdist +``` + +للدخول إلى الوضع: `pytest -f` أو `pytest --looponfail` + +يتم اكتشاف تغييرات الملف عن طريق النظر في دلائل الجذر looponfailroots ومحتوياتها بالكامل (بشكل متكرر). إذا لم ينجح الافتراضي لهذه القيمة، فيمكنك تغييره في مشروعك عن طريق تعيين خيار تكوين في setup.cfg: + +```ini +[tool:pytest] +looponfailroots = transformers tests +``` + +أو ملفات pytest.ini/tox.ini: + +```ini +[pytest] +looponfailroots = transformers tests +``` + +سيؤدي هذا إلى البحث فقط عن تغييرات الملفات في دلائل المقابلة، المحددة نسبيًا إلى دليل ملف ini. + +[pytest-watch](https://github.com/joeyespo/pytest-watch) هو تنفيذ بديل لهذه الوظيفة. + +### تخطي نموذج الاختبار +إذا كنت تريد تشغيل جميع نماذج الاختبار، باستثناء بعضها، فيمكنك استبعادها عن طريق إعطاء قائمة صريحة بالاختبارات التي سيتم تشغيلها. على سبيل المثال، لتشغيل الكل باستثناء اختبارات test_modeling_*.py: + +```bash +pytest *ls -1 tests/*py | grep -v test_modeling* +``` + +### مسح الحالة +يجب مسح ذاكرة التخزين المؤقت في عمليات البناء CI وعندما تكون العزلة مهمة (ضد السرعة): + +```bash +pytest --cache-clear tests +``` + +### تشغيل الاختبارات بالتوازي +كما ذكر سابقًا، يقوم make test بتشغيل الاختبارات بالتوازي عبر المكون الإضافي pytest-xdist (`-n X` argument، على سبيل المثال `-n 2` لتشغيل وظيفتين متوازيتين). + +يسمح خيار `--dist=` في pytest-xdist بالتحكم في كيفية تجميع الاختبارات. ويضع `--dist=loadfile` الاختبارات الموجودة في ملف واحد في نفس العملية. + +نظرًا لأن ترتيب الاختبارات المنفذة مختلف ولا يمكن التنبؤ به، إذا أدى تشغيل مجموعة الاختبارات باستخدام pytest-xdist إلى حدوث فشل (مما يعني وجود بعض الاختبارات المقترنة غير المكتشفة)، فاستخدم [pytest-replay](https://github.com/ESSS/pytest-replay) لإعادة تشغيل الاختبارات بنفس الترتيب، والذي يجب أن يساعد في تقليل تسلسل الفشل هذا إلى الحد الأدنى. + +### ترتيب الاختبار والتكرار +من الجيد تكرار الاختبارات عدة مرات، بالتسلسل، أو بشكل عشوائي، أو في مجموعات، للكشف عن أي أخطاء محتملة في التبعية المتبادلة والمتعلقة بالحالة (الإنهاء). والتكرار المتعدد المباشر جيد للكشف عن بعض المشكلات التي تكشفها الطبيعة العشوائية لتعلم الآلة. + +#### تكرار الاختبارات +- [pytest-flakefinder](https://github.com/dropbox/pytest-flakefinder): + +```bash +pip install pytest-flakefinder +``` + +ثم قم بتشغيل كل اختبار عدة مرات (50 بشكل افتراضي): + +```bash +pytest --flake-finder --flake-runs=5 tests/test_failing_test.py +``` + + +هذه الإضافة لا تعمل مع العلامة -n من pytest-xdist. + + + +هناك إضافة أخرى تسمى pytest-repeat، لكنها لا تعمل مع unittest. + + +#### تشغيل الاختبارات بترتيب عشوائي +```bash +pip install pytest-random-order +``` + +مهم: سيؤدي وجود pytest-random-order إلى جعل الاختبارات عشوائية تلقائيًا، دون الحاجة إلى إجراء أي تغييرات في التكوين أو خيارات سطر الأوامر. + +كما هو موضح سابقًا، يسمح هذا باكتشاف الاختبارات المقترنة - حيث تؤثر حالة أحد الاختبارات على حالة اختبار آخر. عندما يتم تثبيت pytest-random-order، فإنه سيطبع البذرة العشوائية التي استخدمها لتلك الجلسة، على سبيل المثال: + +```bash +pytest tests +[...] +Using --random-order-bucket=module +Using --random-order-seed=573663 +``` + +حتى أنه إذا فشلت تسلسل معين، فيمكنك إعادة إنتاجه عن طريق إضافة تلك البذرة الدقيقة، على سبيل المثال: + +```bash +pytest --random-order-seed=573663 +[...] +Using --random-order-bucket=module +Using --random-order-seed=573663 +``` + +سيؤدي ذلك إلى إعادة إنتاج الترتيب الدقيق فقط إذا كنت تستخدم نفس قائمة الاختبارات (أو عدم وجود قائمة على الإطلاق). وبمجرد أن تبدأ في تضييق قائمة الاختبارات يدويًا، فلن تتمكن بعد ذلك من الاعتماد على البذرة، ولكن يجب عليك إدراجها يدويًا بالترتيب الدقيق الذي فشلت فيه وإخبار pytest بعدم جعلها عشوائية بدلاً من ذلك باستخدام `--random-order-bucket=none`، على سبيل المثال: + +```bash +pytest --random-order-bucket=none tests/test_a.py tests/test_c.py tests/test_b.py +``` + +لإيقاف التشويش لجميع الاختبارات: + +```bash +pytest --random-order-bucket=none +``` + +بشكل افتراضي، يتم ضمنيًا استخدام `--random-order-bucket=module`، والذي سيقوم بخلط الملفات على مستوى الوحدات النمطية. ويمكنه أيضًا الخلط على مستويات "class" و"package" و"global" و"none". للحصول على التفاصيل الكاملة، يرجى الاطلاع على [وثائقه](https://github.com/jbasko/pytest-random-order). + +بديل آخر للعشوائية هو: [`pytest-randomly`](https://github.com/pytest-dev/pytest-randomly). لهذه الوحدة النمطية وظائف/واجهة مشابهة جدًا، ولكنها لا تحتوي على أوضاع الدلاء المتاحة في pytest-random-order. ولديها نفس المشكلة في فرض نفسها بمجرد تثبيتها. + +### الاختلافات في المظهر والشعور +#### pytest-sugar +[pytest-sugar](https://github.com/Frozenball/pytest-sugar) هي إضافة تحسن المظهر والشعور، وتضيف شريط تقدم، وتظهر الاختبارات التي تفشل والتأكيد على الفور. يتم تنشيطه تلقائيًا عند التثبيت. + +```bash +pip install pytest-sugar +``` + +لتشغيل الاختبارات بدونها، قم بتشغيل: + +```bash +pytest -p no:sugar +``` + +أو إلغاء تثبيتها. + +#### الإبلاغ عن اسم كل اختبار فرعي وتقدمه +لاختبار واحد أو مجموعة من الاختبارات عبر pytest (بعد pip install pytest-pspec): + +```bash +pytest --pspec tests/test_optimization.py +``` + +#### إظهار الاختبارات الفاشلة على الفور +[pytest-instafail](https://github.com/pytest-dev/pytest-instafail) تعرض حالات الفشل والأخطاء على الفور بدلاً من الانتظار حتى نهاية جلسة الاختبار. + +```bash +pip install pytest-instafail +``` + +```bash +pytest --instafail +``` +## إلى GPU أو عدم التوجه إلى GPU + +على إعداد ممكّن لـ GPU، لاختبار الوضع الخاص بـ CPU فقط، أضف "CUDA_VISIBLE_DEVICES=": + +```bash +CUDA_VISIBLE_DEVICES="" pytest tests/utils/test_logging.py +``` + +أو إذا كان لديك عدة وحدات GPU، فيمكنك تحديد أيها سيتم استخدامه بواسطة "pytest". على سبيل المثال، لاستخدام وحدة GPU الثانية فقط إذا كان لديك وحدات GPU "0" و"1"، يمكنك تشغيل ما يلي: + +```bash +CUDA_VISIBLE_DEVICES="1" pytest tests/utils/test_logging.py +``` + +هذا مفيد عندما تريد تشغيل مهام مختلفة على وحدات GPU مختلفة. + +يجب تشغيل بعض الاختبارات على وضع CPU فقط، بينما يمكن تشغيل اختبارات أخرى على CPU أو GPU أو TPU، وهناك اختبارات أخرى يجب تشغيلها على وحدات GPU متعددة. ويتم استخدام زخارف التخطي التالية لتحديد متطلبات الاختبارات فيما يتعلق بـ CPU/GPU/TPU: + +- `require_torch` - سيتم تشغيل هذا الاختبار فقط تحت torch + +- `require_torch_gpu` - مثل `require_torch` بالإضافة إلى أنه يتطلب وحدة GPU واحدة على الأقل + +- `require_torch_multi_gpu` - مثل `require_torch` بالإضافة إلى أنه يتطلب وحدتي GPU على الأقل + +- `require_torch_non_multi_gpu` - مثل `require_torch` بالإضافة إلى أنه يتطلب صفر أو وحدة GPU واحدة + +- `require_torch_up_to_2_gpus` - مثل `require_torch` بالإضافة إلى أنه يتطلب صفر أو وحدة أو وحدتي GPU + +- `require_torch_xla` - مثل `require_torch` بالإضافة إلى أنه يتطلب وحدة TPU واحدة على الأقل + +دعونا نوضح متطلبات وحدة GPU في الجدول التالي: + +| عدد وحدات GPU | الزخرف | +|---------|----------------------------| +| >= 0 | `@require_torch` | +| >= 1 | `@require_torch_gpu` | +| >= 2 | `@require_torch_multi_gpu` | +| < 2 | `@require_torch_non_multi_gpu` | +| < 3 | `@require_torch_up_to_2_gpus` | + +على سبيل المثال، إليك اختبار يجب تشغيله فقط عندما تكون هناك وحدتي GPU أو أكثر متاحتين وتم تثبيت pytorch: + +```python no-style +@require_torch_multi_gpu +def test_example_with_multi_gpu(): +``` + +إذا تطلب الاختبار وجود `tensorflow`، فيجب استخدام الزخرف `require_tf`. على سبيل المثال: + +```python no-style +@require_tf +def test_tf_thing_with_tensorflow(): +``` + +يمكن تكديس هذه الزخارف فوق بعضها البعض. على سبيل المثال، إذا كان الاختبار بطيئًا ويتطلب وحدة GPU واحدة على الأقل في pytorch، فيمكنك إعداده على النحو التالي: + +```python no-style +@require_torch_gpu +@slow +def test_example_slow_on_gpu(): +``` + +يقوم بعض الزخارف مثل `@parametrized` بإعادة كتابة أسماء الاختبارات، لذلك يجب إدراج زخارف التخطي `@require_*` في النهاية لكي تعمل بشكل صحيح. وفيما يلي مثال على الاستخدام الصحيح: + +```python no-style +@parameterized.expand(...) +@require_torch_multi_gpu +def test_integration_foo(): +``` + +لا توجد هذه المشكلة في الترتيب مع `@pytest.mark.parametrize`، فيمكنك وضعه أولاً أو آخرًا وسيظل يعمل. ولكنه يعمل فقط مع non-unittests. + +داخل الاختبارات: + +- عدد وحدات GPU المتاحة: + +```python +from transformers.testing_utils import get_gpu_count + +n_gpu = get_gpu_count() # يعمل مع torch و tf +``` + +## الاختبار باستخدام PyTorch خلفية أو جهاز محدد + +لتشغيل مجموعة الاختبارات على جهاز PyTorch محدد، أضف `TRANSFORMERS_TEST_DEVICE="$device"` حيث `$device` هو backend المستهدف. على سبيل المثال، لاختبار وضع CPU فقط: + +```bash +TRANSFORMERS_TEST_DEVICE="cpu" pytest tests/utils/test_logging.py +``` + +تكون هذه المتغيرات مفيدة لاختبار backends PyTorch مخصصة أو أقل شيوعًا مثل `mps` أو `xpu` أو `npu`. ويمكن أيضًا استخدامها لتحقيق نفس تأثير `CUDA_VISIBLE_DEVICES` عن طريق استهداف وحدات GPU محددة أو الاختبار في وضع CPU فقط. + +قد تتطلب بعض الأجهزة استيرادًا إضافيًا بعد استيراد `torch` للمرة الأولى. ويمكن تحديد هذا باستخدام متغير البيئة `TRANSFORMERS_TEST_BACKEND`: + +```bash +TRANSFORMERS_TEST_BACKEND="torch_npu" pytest tests/utils/test_logging.py +``` + +قد تتطلب backends البديلة أيضًا استبدال وظائف محددة للجهاز. على سبيل المثال، قد تحتاج إلى استبدال `torch.cuda.manual_seed` بوظيفة تعيين البذور المحددة للجهاز مثل `torch.npu.manual_seed` أو `torch.xpu.manual_seed` لتعيين البذور العشوائية بشكل صحيح على الجهاز. ولتحديد backend جديد مع وظائف محددة للجهاز عند تشغيل مجموعة الاختبارات، قم بإنشاء ملف مواصفات Python باسم `spec.py` بالتنسيق التالي: + +```python +import torch +import torch_npu # بالنسبة إلى xpu، استبدله بـ `import intel_extension_for_pytorch` +# !! يمكن إضافة استيرادات إضافية هنا !! + +# تحديد اسم الجهاز (مثل 'cuda' أو 'cpu' أو 'npu' أو 'xpu' أو 'mps') +DEVICE_NAME = 'npu' + +# تحديد backends المحددة للجهاز لإرسالها. +# إذا لم يتم تحديدها، فسيتم الرجوع إلى 'default' في 'testing_utils.py` +MANUAL_SEED_FN = torch.npu.manual_seed +EMPTY_CACHE_FN = torch.npu.empty_cache +DEVICE_COUNT_FN = torch.npu.device_count +``` + +يسمح هذا التنسيق أيضًا بتحديد أي استيرادات إضافية مطلوبة. لاستخدام هذا الملف لاستبدال الطرق المكافئة في مجموعة الاختبارات، قم بتعيين متغير البيئة `TRANSFORMERS_TEST_DEVICE_SPEC` إلى مسار ملف المواصفات، على سبيل المثال `TRANSFORMERS_TEST_DEVICE_SPEC=spec.py`. + +حاليًا، يتم دعم `MANUAL_SEED_FN` و`EMPTY_CACHE_FN` و`DEVICE_COUNT_FN` فقط للتفويض المحدد للجهاز. + +## التدريب الموزع + +لا يمكن لـ `pytest` التعامل مع التدريب الموزع مباشرةً. إذا تم محاولة ذلك - فإن العمليات الفرعية لا تقوم بالشيء الصحيح وتنتهي بالتفكير في أنها `pytest` وتبدأ في تشغيل مجموعة الاختبارات في حلقات. ولكنه يعمل إذا قام أحد بتشغيل عملية عادية تقوم بعد ذلك بتشغيل العديد من العمال وإدارة أنابيب الإدخال/الإخراج. + +وفيما يلي بعض الاختبارات التي تستخدمها: + +- [test_trainer_distributed.py](https://github.com/huggingface/transformers/tree/main/tests/trainer/test_trainer_distributed.py) + +- [test_deepspeed.py](https://github.com/huggingface/transformers/tree/main/tests/deepspeed/test_deepspeed.py) + +للانتقال مباشرةً إلى نقطة التنفيذ، ابحث عن مكالمة `execute_subprocess_async` في تلك الاختبارات. + +ستحتاج إلى وحدتي GPU على الأقل لمشاهدة هذه الاختبارات أثناء العمل: + +```bash +CUDA_VISIBLE_DEVICES=0,1 RUN_SLOW=1 pytest -sv tests/test_trainer_distributed.py +``` + +## التقاط الإخراج + +أثناء تنفيذ الاختبار، يتم التقاط أي إخراج يتم إرساله إلى `stdout` و`stderr`. إذا فشل أحد الاختبارات أو طريقة الإعداد، فسيتم عادةً عرض الإخراج المقابل الذي تم التقاطه جنبًا إلى جنب مع تتبع فشل. + +لإيقاف التقاط الإخراج والحصول على `stdout` و`stderr` بشكل طبيعي، استخدم `-s` أو `--capture=no`: + +```bash +pytest -s tests/utils/test_logging.py +``` + +لإرسال نتائج الاختبار إلى إخراج بتنسيق JUnit: + +```bash +pytest tests --junitxml=result.xml +``` + +## التحكم في الألوان + +لعدم استخدام أي لون (على سبيل المثال، الأصفر على خلفية بيضاء غير قابل للقراءة): + +```bash +pytest --color=no tests/utils/test_logging.py +``` + +## إرسال تقرير الاختبار إلى خدمة Pastebin عبر الإنترنت + +إنشاء عنوان URL لكل فشل في الاختبار: + +```bash +pytest --pastebin=failed tests/utils/test_logging.py +``` + +سيقوم هذا بإرسال معلومات تشغيل الاختبار إلى خدمة Paste عن بُعد وتوفير عنوان URL لكل فشل. يمكنك اختيار الاختبارات كالمعتاد أو إضافة -x إذا كنت تريد إرسال فشل واحد فقط على سبيل المثال. + +إنشاء عنوان URL لسجل جلسة الاختبار بالكامل: + +```bash +pytest --pastebin=all tests/utils/test_logging.py +``` + +## كتابة الاختبارات + +تعتمد اختبارات 🤗 transformers على `unittest`، ولكن يتم تشغيلها بواسطة `pytest`، لذلك يمكن استخدام ميزات كلا النظامين في معظم الوقت. + +يمكنك قراءة [هنا](https://docs.pytest.org/en/stable/unittest.html) عن الميزات المدعومة، ولكن الشيء المهم الذي يجب تذكره هو أن معظم مؤشرات `pytest` لا تعمل. ولا يتم دعم المعلمات أيضًا، ولكننا نستخدم الوحدة النمطية `parameterized` التي تعمل بطريقة مشابهة. +### المعلمة + +غالبًا ما تكون هناك حاجة لتشغيل نفس الاختبار عدة مرات، ولكن باستخدام حجج مختلفة. يمكن القيام بذلك من داخل الاختبار، ولكن بعد ذلك لا توجد طريقة لتشغيل هذا الاختبار لمجموعة واحدة فقط من الحجج. + +```python +# test_this1.py +import unittest +from parameterized import parameterized + + +class TestMathUnitTest(unittest.TestCase): + @parameterized.expand( + [ + ("negative", -1.5, -2.0), + ("integer", 1, 1.0), + ("large fraction", 1.6, 1), + ] + ) + def test_floor(self, name, input, expected): + assert_equal(math.floor(input), expected) +``` + +الآن، بشكل افتراضي، سيتم تشغيل هذا الاختبار 3 مرات، وفي كل مرة يتم تعيين الحجج الثلاث الأخيرة لـ `test_floor` إلى الحجج المقابلة في قائمة المعلمات. + +ويمكنك تشغيل مجموعات "negative" و "integer" فقط من المعلمات باستخدام: + +```bash +pytest -k "negative and integer" tests/test_mytest.py +``` + +أو جميع المجموعات الفرعية باستثناء "negative" باستخدام: + +```bash +pytest -k "not negative" tests/test_mytest.py +``` + +بالإضافة إلى استخدام عامل تصفية `-k` المذكور أعلاه، يمكنك معرفة الاسم الدقيق لكل اختبار فرعي وتشغيل أي منها أو جميعها باستخدام أسمائها الدقيقة. + +```bash +pytest test_this1.py --collect-only -q +``` + +وسوف يسرد: + +```bash +test_this1.py::TestMathUnitTest::test_floor_0_negative +test_this1.py::TestMathUnitTest::test_floor_1_integer +test_this1.py::TestMathUnitTest::test_floor_2_large_fraction +``` + +لذا الآن يمكنك تشغيل اختبارين فرعيين محددين فقط: + +```bash +pytest test_this1.py::TestMathUnitTest::test_floor_0_negative test_this1.py::TestMathUnitTest::test_floor_1_integer +``` + +تتوافق الوحدة النمطية [parameterized](https://pypi.org/project/parameterized/)، الموجودة بالفعل في تبعيات المطور في `transformers`، مع كلا النوعين: `unittests` و `pytest` tests. + +ومع ذلك، إذا لم يكن الاختبار عبارة عن `unittest`، فيمكنك استخدام `pytest.mark.parametrize` (أو قد ترى أنها مستخدمة في بعض الاختبارات الموجودة، خاصةً تحت `examples`). + +هنا نفس المثال، ولكن هذه المرة باستخدام مؤشر `pytest` `parametrize`: + +```python +# test_this2.py +import pytest + + +@pytest.mark.parametrize( +"name, input, expected", +[ +("negative", -1.5, -2.0), +("integer", 1, 1.0), +("large fraction", 1.6, 1), +], +) +def test_floor(name, input, expected): +assert_equal(math.floor(input), expected) +``` + +مثل `parameterized`، يمكنك التحكم الدقيق في الاختبارات الفرعية التي يتم تشغيلها باستخدام `pytest.mark.parametrize` إذا لم تقم وظيفة التصفية `-k` بالمهمة. باستثناء أن دالة المعلمة هذه تُنشئ مجموعة مختلفة قليلاً من الأسماء للاختبارات الفرعية. فيما يلي كيفية ظهورها: + +```bash +pytest test_this2.py --collect-only -q +``` + +وسوف يسرد: + +```bash +test_this2.py::test_floor[integer-1-1.0] +test_this2.py::test_floor[negative--1.5--2.0] +test_this2.py::test_floor[large fraction-1.6-1] +``` + +لذا الآن يمكنك تشغيل الاختبار المحدد فقط: + +```bash +pytest test_this2.py::test_floor[negative--1.5--2.0] test_this2.py::test_floor[integer-1-1.0] +``` + +كما في المثال السابق. + +### الملفات والمجلدات + +في الاختبارات، نحتاج غالبًا إلى معرفة مكان وجود الأشياء بالنسبة لملف الاختبار الحالي، وهذا ليس أمرًا بسيطًا لأن الاختبار قد يتم استدعاؤه من أكثر من دليل أو قد يكون موجودًا في مجلدات فرعية بدرجات مختلفة. تقوم فئة المساعدة `transformers.test_utils.TestCasePlus` بحل هذه المشكلة عن طريق فرز جميع المسارات الأساسية وتوفير وصول سهل إليها: + +- كائنات `pathlib` (جميعها محددة بالكامل): + +- `test_file_path` - مسار ملف الاختبار الحالي، أي `__file__` + +- `test_file_dir` - الدليل الذي يحتوي على ملف الاختبار الحالي + +- `tests_dir` - دليل مجموعة اختبارات `tests` + +- `examples_dir` - دليل مجموعة اختبارات `examples` + +- `repo_root_dir` - دليل مستودع + +- `src_dir` - دليل `src` (أي حيث يوجد المجلد الفرعي `transformers`) + +- المسارات المعبرة كسلاسل - نفس ما سبق ولكن هذه الأساليب تعيد المسارات كسلاسل، بدلاً من كائنات `pathlib`: + +- `test_file_path_str` + +- `test_file_dir_str` + +- `tests_dir_str` + +- `examples_dir_str` + +- `repo_root_dir_str` + +- `src_dir_str` + +لبدء استخدام هذه الطرق، كل ما تحتاجه هو التأكد من أن الاختبار موجود في فئة فرعية من `transformers.test_utils.TestCasePlus`. على سبيل المثال: + +```python +from transformers.testing_utils import TestCasePlus + + +class PathExampleTest(TestCasePlus): +def test_something_involving_local_locations(self): +data_dir = self.tests_dir / "fixtures/tests_samples/wmt_en_ro" +``` + +إذا لم تكن بحاجة إلى التعامل مع المسارات عبر `pathlib` أو إذا كنت بحاجة فقط إلى مسار كسلسلة، فيمكنك دائمًا استدعاء `str()` على كائن `pathlib` أو استخدام الأساليب التي تنتهي بـ `_str`. على سبيل المثال: + +```python +from transformers.testing_utils import TestCasePlus + + +class PathExampleTest(TestCasePlus): +def test_something_involving_stringified_locations(self): +examples_dir = self.examples_dir_str +``` + +### الملفات والمجلدات المؤقتة + +يعد استخدام الملفات والمجلدات المؤقتة الفريدة أمرًا ضروريًا لتشغيل الاختبارات بشكل متوازي، بحيث لا تكتب الاختبارات فوق بيانات بعضها البعض. كما نريد حذف الملفات والمجلدات المؤقتة في نهاية كل اختبار قام بإنشائها. لذلك، من الضروري استخدام حزم مثل `tempfile`، والتي تلبي هذه الاحتياجات. + +ومع ذلك، عند تصحيح أخطاء الاختبارات، تحتاج إلى القدرة على رؤية ما يتم إدخاله في الملف أو الدليل المؤقت وتريد معرفة مساره الدقيق وعدم جعله عشوائيًا في كل مرة يتم فيها إعادة تشغيل الاختبار. + +تعد فئة المساعدة `transformers.test_utils.TestCasePlus` أفضل للاستخدام في مثل هذه الأغراض. إنها فئة فرعية من `unittest.TestCase`، لذلك يمكننا بسهولة أن نرث منها في وحدات الاختبار. + +هنا مثال على استخدامها: + +```python +from transformers.testing_utils import TestCasePlus + + +class ExamplesTests(TestCasePlus): +def test_whatever(self): +tmp_dir = self.get_auto_remove_tmp_dir() +``` + +ينشئ هذا الكود دليلًا مؤقتًا فريدًا، ويحدد `tmp_dir` إلى موقعه. + +- إنشاء دليل مؤقت فريد: + +```python +def test_whatever(self): +tmp_dir = self.get_auto_remove_tmp_dir() +``` + +سيحتوي `tmp_dir` على المسار إلى الدليل المؤقت الذي تم إنشاؤه. سيتم إزالته تلقائيًا في نهاية الاختبار. + +- إنشاء دليل مؤقت من اختياري، والتأكد من أنه فارغ قبل بدء الاختبار وعدم إفراغه بعد الاختبار. + +```python +def test_whatever(self): +tmp_dir = self.get_auto_remove_tmp_dir("./xxx") +``` + +هذا مفيد للتصحيح عندما تريد مراقبة دليل محدد وتريد التأكد من أن الاختبارات السابقة لم تترك أي بيانات هناك. + +- يمكنك تجاوز السلوك الافتراضي عن طريق تجاوز وسيطي `before` و `after` مباشرةً، مما يؤدي إلى أحد السلوكيات التالية: + +- `before=True`: سيتم دائمًا مسح الدليل المؤقت في بداية الاختبار. + +- `before=False`: إذا كان الدليل المؤقت موجودًا بالفعل، فستبقى أي ملفات موجودة فيه. + +- `after=True`: سيتم دائمًا حذف الدليل المؤقت في نهاية الاختبار. + +- `after=False`: سيتم دائمًا ترك الدليل المؤقت دون تغيير في نهاية الاختبار. + + + +لتشغيل ما يعادل `rm -r` بأمان، لا يُسمح إلا بالدلائل الفرعية لمستخرج مستودع المشروع إذا تم استخدام `tmp_dir` صريح، بحيث لا يتم عن طريق الخطأ مسح أي جزء مهم من نظام الملفات مثل `/tmp` أو ما شابه ذلك. يرجى دائمًا تمرير المسارات التي تبدأ بـ `./`. + + + + + +يمكن لكل اختبار تسجيل عدة مجلدات مؤقتة وسيتم إزالتها جميعًا تلقائيًا، ما لم يُطلب خلاف ذلك. + + + +### التغلب المؤقت على sys.path + +إذا كنت بحاجة إلى تجاوز `sys.path` مؤقتًا لاستيراد اختبار آخر، على سبيل المثال، فيمكنك استخدام مدير السياق `ExtendSysPath`. مثال: + +```python +import os +from transformers.testing_utils import ExtendSysPath + +bindir = os.path.abspath(os.path.dirname(__file__)) +with ExtendSysPath(f"{bindir}/.."): +from test_trainer import TrainerIntegrationCommon # noqa +``` +### تجاوز الاختبارات + +هذا مفيد عندما يتم اكتشاف خطأ ويتم كتابة اختبار جديد، ولكن لم يتم إصلاح الخطأ بعد. حتى نتمكن من الالتزام به في المستودع الرئيسي، يجب أن نتأكد من أنه تم تخطيه أثناء `make test`. + +الطرق: + +- **تجاوز** يعني أنك تتوقع أن يمر اختبارك فقط إذا تم استيفاء بعض الشروط، وإلا يجب على pytest أن يتجاوز تشغيل الاختبار بالكامل. ومن الأمثلة الشائعة على ذلك تجاوز الاختبارات الخاصة بنظام Windows فقط على منصات غير Windows، أو تجاوز الاختبارات التي تعتمد على مورد خارجي غير متوفر في الوقت الحالي (مثل قاعدة بيانات). + +- **xfail** يعني أنك تتوقع فشل الاختبار لسبب ما. ومن الأمثلة الشائعة على ذلك اختبار ميزة لم يتم تنفيذها بعد، أو خطأ لم يتم إصلاحه بعد. عندما ينجح الاختبار على الرغم من توقع فشله (تمت تسميته بـ pytest.mark.xfail)، فهو xpass وسيتم الإبلاغ عنه في ملخص الاختبار. + +أحد الاختلافات المهمة بين الاثنين هو أن `skip` لا يشغل الاختبار، و`xfail` يفعل ذلك. لذا إذا كان الكود المعيب يتسبب في حالة سيئة ستؤثر على الاختبارات الأخرى، فلا تستخدم `xfail`. + +#### التنفيذ + +- إليك كيفية تخطي اختبار كامل دون شروط: + +```python no-style +@unittest.skip(reason="this bug needs to be fixed") +def test_feature_x(): +``` + +أو عبر pytest: + +```python no-style +@pytest.mark.skip(reason="this bug needs to be fixed") +``` + +أو بطريقة `xfail`: + +```python no-style +@pytest.mark.xfail +def test_feature_x(): +``` + +فيما يلي كيفية تخطي اختبار بناءً على فحوصات داخلية داخل الاختبار: + +```python +def test_feature_x(): +if not has_something(): +pytest.skip("unsupported configuration") +``` + +أو الوحدة النمطية بأكملها: + +```python +import pytest + +if not pytest.config.getoption("--custom-flag"): +pytest.skip("--custom-flag is missing, skipping tests", allow_module_level=True) +``` + +أو بطريقة `xfail`: + +```python +def test_feature_x(): +pytest.xfail("expected to fail until bug XYZ is fixed") +``` + +- فيما يلي كيفية تخطي جميع الاختبارات في وحدة نمطية إذا كان هناك استيراد مفقود: + +```python +docutils = pytest.importorskip("docutils", minversion="0.3") +``` + +- تخطي اختبار بناءً على شرط: + +```python no-style +@pytest.mark.skipif(sys.version_info < (3,6), reason="requires python3.6 or higher") +def test_feature_x(): +``` + +أو: + +```python no-style +@unittest.skipIf(torch_device == "cpu", "Can't do half precision") +def test_feature_x(): +``` + +أو تخطي الوحدة النمطية بأكملها: + +```python no-style +@pytest.mark.skipif(sys.platform == 'win32', reason="does not run on windows") +class TestClass(): +def test_feature_x(self): +``` + +لمزيد من التفاصيل والأمثلة والطرق، راجع [هنا](https://docs.pytest.org/en/latest/skipping.html). + +### الاختبارات البطيئة + +مكتبة الاختبارات تتزايد باستمرار، ويستغرق بعض الاختبارات دقائق للتشغيل، لذلك لا يمكننا تحمل الانتظار لمدة ساعة حتى تكتمل مجموعة الاختبارات على CI. لذلك، مع بعض الاستثناءات للاختبارات الأساسية، يجب وضع علامة على الاختبارات البطيئة كما هو موضح في المثال أدناه: + +```python no-style +from transformers.testing_utils import slow +@slow +def test_integration_foo(): +``` + +بمجرد وضع علامة على الاختبار على أنه `@slow`، لتشغيل هذه الاختبارات، قم بتعيين متغير البيئة `RUN_SLOW=1`، على سبيل المثال: + +```bash +RUN_SLOW=1 pytest tests +``` + +يقوم بعض الديكورات مثل `@parameterized` بإعادة كتابة أسماء الاختبارات، لذلك يجب إدراج `@slow` وبقية الديكورات `@require_*` في النهاية حتى تعمل بشكل صحيح. فيما يلي مثال على الاستخدام الصحيح: + +```python no-style +@parameterized.expand(...) +@slow +def test_integration_foo(): +``` + +كما هو موضح في بداية هذه الوثيقة، يتم تشغيل الاختبارات البطيئة وفقًا لجدول زمني، بدلاً من فحوصات CI في PRs. لذلك من الممكن أن يتم تفويت بعض المشكلات أثناء تقديم طلب سحب وسيتم دمجها. سيتم اكتشاف هذه المشكلات أثناء مهمة CI المجدولة التالية. ولكن هذا يعني أيضًا أنه من المهم تشغيل الاختبارات البطيئة على جهازك قبل تقديم طلب السحب. + +فيما يلي آلية صنع القرار لاختيار الاختبارات التي يجب وضع علامة عليها على أنها بطيئة: + +إذا كان الاختبار يركز على أحد المكونات الداخلية للمكتبة (على سبيل المثال، ملفات النمذجة، أو ملفات التمييز، أو الأنابيب)، فيجب علينا تشغيل هذا الاختبار في مجموعة الاختبارات غير البطيئة. إذا كان يركز على جانب آخر من جوانب المكتبة، مثل الوثائق أو الأمثلة، فيجب علينا تشغيل هذه الاختبارات في مجموعة الاختبارات البطيئة. وبعد ذلك، لتنقيح هذا النهج، يجب أن تكون لدينا استثناءات: + +- يجب وضع علامة على جميع الاختبارات التي تحتاج إلى تنزيل مجموعة كبيرة من الأوزان أو مجموعة بيانات أكبر من ~50 ميجابايت (على سبيل المثال، اختبارات تكامل النماذج أو المحلل اللغوي أو الأنابيب) على أنها بطيئة. إذا كنت تقوم بإضافة نموذج جديد، فيجب عليك إنشاء وتحميل إصدار مصغر منه (بأوزان عشوائية) لاختبارات التكامل. يتم مناقشة ذلك في الفقرات التالية. + +- يجب وضع علامة على جميع الاختبارات التي تحتاج إلى إجراء تدريب غير مُستَهدف بشكل خاص ليكون سريعًا على أنها بطيئة. + +- يمكننا تقديم استثناءات إذا كانت بعض هذه الاختبارات التي يجب ألا تكون بطيئة بطيئة للغاية، ووضع علامة عليها على أنها `@slow`. تعد اختبارات النمذجة التلقائية، التي تقوم بحفظ وتحميل ملفات كبيرة على القرص، مثالًا جيدًا على الاختبارات التي تم وضع علامة عليها على أنها `@slow`. + +- إذا اكتمل الاختبار في أقل من ثانية واحدة على CI (بما في ذلك عمليات التنزيل إن وجدت)، فيجب أن يكون اختبارًا طبيعيًا بغض النظر عن ذلك. + +بشكل جماعي، يجب أن تغطي جميع الاختبارات غير البطيئة المكونات الداخلية المختلفة بالكامل، مع الحفاظ على سرعتها. على سبيل المثال، يمكن تحقيق تغطية كبيرة من خلال الاختبار باستخدام نماذج مصغرة تم إنشاؤها خصيصًا بأوزان عشوائية. تحتوي هذه النماذج على الحد الأدنى من عدد الطبقات (على سبيل المثال، 2)، وحجم المفردات (على سبيل المثال، 1000)، وما إلى ذلك. بعد ذلك، يمكن لاختبارات `@slow` استخدام نماذج كبيرة وبطيئة لإجراء اختبارات نوعية. لمشاهدة استخدام هذه، ما عليك سوى البحث عن النماذج *tiny* باستخدام: + +```bash +grep tiny tests examples +``` + +فيما يلي مثال على [script](https://github.com/huggingface/transformers/tree/main/scripts/fsmt/fsmt-make-tiny-model.py) الذي أنشأ النموذج المصغر [stas/tiny-wmt19-en-de](https://huggingface.co/stas/tiny-wmt19-en-de). يمكنك ضبطه بسهولة على الهندسة المعمارية المحددة لنموذجك. + +من السهل قياس وقت التشغيل بشكل غير صحيح إذا كان هناك، على سبيل المثال، إشراف على تنزيل نموذج ضخم، ولكن إذا قمت باختباره محليًا، فسيتم تخزين الملفات التي تم تنزيلها مؤقتًا وبالتالي لن يتم قياس وقت التنزيل. لذلك، تحقق من تقرير سرعة التنفيذ في سجلات CI بدلاً من ذلك (إخراج `pytest --durations=0 tests`). + +هذا التقرير مفيد أيضًا للعثور على القيم الشاذة البطيئة التي لم يتم وضع علامة عليها على هذا النحو، أو التي تحتاج إلى إعادة كتابتها لتكون سريعة. إذا لاحظت أن مجموعة الاختبارات بدأت تصبح بطيئة على CI، فسيظهر أعلى قائمة بهذا التقرير أبطأ الاختبارات. +## اختبار إخراج stdout/stderr + +لاختبار الدوال التي تكتب في stdout و/أو stderr، يمكن للاختبار الوصول إلى هذه التدفقات باستخدام نظام capsys في pytest كما يلي: + +```python +import sys + + +def print_to_stdout(s): + print(s) + + +def print_to_stderr(s): + sys.stderr.write(s) + + +def test_result_and_stdout(capsys): + msg = "Hello" + print_to_stdout(msg) + print_to_stderr(msg) + out, err = capsys.readouterr() # استهلاك تدفقات الإخراج التي تم التقاطها + # اختياري: إذا كنت تريد إعادة تشغيل التدفقات التي تم استهلاكها: + sys.stdout.write(out) + sys.stderr.write(err) + # الاختبار: + assert msg in out + assert msg in err +``` + +وبالطبع، في معظم الأحيان، ستأتي stderr كجزء من استثناء، لذلك يجب استخدام try/except في هذه الحالة: + +```python +def raise_exception(msg): + raise ValueError(msg) + + +def test_something_exception(): + msg = "Not a good value" + error = "" + try: + raise_exception(msg) + except Exception as e: + error = str(e) + assert msg in error, f"{msg} موجود في الاستثناء:\n{error}" +``` + +هناك طريقة أخرى لالتقاط stdout وهي عبر contextlib.redirect_stdout: + +```python +from io import StringIO +from contextlib import redirect_stdout + + +def print_to_stdout(s): + print(s) + + +def test_result_and_stdout(): + msg = "Hello" + buffer = StringIO() + with redirect_stdout(buffer): + print_to_stdout(msg) + out = buffer.getvalue() + # اختياري: إذا كنت تريد إعادة تشغيل التدفقات التي تم استهلاكها: + sys.stdout.write(out) + # الاختبار: + assert msg in out +``` + +هناك مشكلة محتملة مهمة عند التقاط stdout وهي أنها قد تحتوي على أحرف \r التي تقوم في عملية الطباعة العادية بإعادة تعيين كل ما تم طباعته حتى الآن. لا توجد مشكلة مع pytest، ولكن مع pytest -s، يتم تضمين هذه الأحرف في المخزن المؤقت، لذلك لكي تتمكن من تشغيل الاختبار مع أو بدون -s، يجب عليك إجراء تنظيف إضافي للإخراج الذي تم التقاطه باستخدام re.sub(r'~.*\r', '', buf, 0, re.M). + +ولكن بعد ذلك، لدينا مساعد سياق wrapper للتعامل مع كل ذلك تلقائيًا، بغض النظر عما إذا كان يحتوي على أحرف \r أم لا، لذلك فهو ببساطة: + +```python +from transformers.testing_utils import CaptureStdout + +with CaptureStdout() as cs: + function_that_writes_to_stdout() +print(cs.out) +``` + +هنا مثال اختبار كامل: + +```python +from transformers.testing_utils import CaptureStdout + +msg = "Secret message\r" +final = "Hello World" +with CaptureStdout() as cs: + print(msg + final) +assert cs.out == final + "\n", f"captured: {cs.out}, expecting {final}" +``` + +إذا كنت تريد التقاط stderr، استخدم فئة CaptureStderr بدلاً من ذلك: + +```python +from transformers.testing_utils import CaptureStderr + +with CaptureStderr() as cs: + function_that_writes_to_stderr() +print(cs.err) +``` + +إذا كنت بحاجة إلى التقاط كلا التدفقين في نفس الوقت، استخدم فئة CaptureStd الأساسية: + +```python +from transformers.testing_utils import CaptureStd + +with CaptureStd() as cs: + function_that_writes_to_stdout_and_stderr() +print(cs.err, cs.out) +``` + +أيضًا، للمساعدة في تصحيح مشكلات الاختبار، تقوم مديري السياق هؤلاء بشكل افتراضي بإعادة تشغيل التدفقات التي تم التقاطها تلقائيًا عند الخروج من السياق. + +## التقاط تدفق سجل + +إذا كنت بحاجة إلى التحقق من إخراج سجل معين، فيمكنك استخدام CaptureLogger: + +```python +from transformers import logging +from transformers.testing_utils import CaptureLogger + +msg = "Testing 1, 2, 3" +logging.set_verbosity_info() +logger = logging.get_logger("transformers.models.bart.tokenization_bart") +with CaptureLogger(logger) as cl: + logger.info(msg) +assert cl.out, msg + "\n" +``` + +## الاختبار باستخدام متغيرات البيئة + +إذا كنت تريد اختبار تأثير متغيرات البيئة لاختبار معين، فيمكنك استخدام الديكور المساعد mockenv في transformers.testing_utils: + +```python +from transformers.testing_utils import mockenv + + +class HfArgumentParserTest(unittest.TestCase): + @mockenv(TRANSFORMERS_VERBOSITY="error") + def test_env_override(self): + env_level_str = os.getenv("TRANSFORMERS_VERBOSITY", None) +``` + +في بعض الأحيان، يحتاج برنامج خارجي إلى الاستدعاء، والذي يتطلب ضبط PYTHONPATH في os.environ لتضمين مسارات محلية متعددة. وهنا تأتي فئة المساعدة TestCasePlus في transformers.test_utils للمساعدة: + +```python +from transformers.testing_utils import TestCasePlus + + +class EnvExampleTest(TestCasePlus): + def test_external_prog(self): + env = self.get_env() + # الآن قم باستدعاء البرنامج الخارجي، ومرر إليه env +``` + +اعتمادًا على ما إذا كان ملف الاختبار موجودًا في مجموعة اختبارات tests أو examples، فسيقوم بإعداد env[PYTHONPATH] بشكل صحيح لتضمين أحد هذين الدليلين، وكذلك دليل src لضمان إجراء الاختبار على المستودع الحالي، وأخيرًا مع أي env[PYTHONPATH] الذي تم ضبطه بالفعل قبل استدعاء الاختبار إذا كان هناك أي شيء. + +تُنشئ طريقة المساعدة هذه نسخة من كائن os.environ، لذلك يظل الكائن الأصلي سليمًا. + +## الحصول على نتائج قابلة للتكرار + +في بعض الحالات، قد ترغب في إزالة العشوائية من اختباراتك. للحصول على نتائج متطابقة وقابلة للتكرار، ستحتاج إلى تثبيت البذرة: + +```python +seed = 42 + +# مولد الأرقام العشوائية في بايثون +import random + +random.seed(seed) + +# مولدات الأرقام العشوائية في باي تورش +import torch + +torch.manual_seed(seed) +torch.backends.cudnn.deterministic = True +if torch.cuda.is_available(): + torch.cuda.manual_seed_all(seed) + +# مولد الأرقام العشوائية في نومبي +import numpy as np + +np.random.seed(seed) + +# مولد الأرقام العشوائية في تنسرفلو +tf.random.set_seed(seed) +``` + +## تصحيح الاختبارات + +لبدء مصحح الأخطاء في نقطة التحذير، قم بما يلي: + +```bash +pytest tests/utils/test_logging.py -W error::UserWarning --pdb +``` + +## العمل مع سير عمل إجراءات جيت هاب + +لتشغيل مهمة CI ذاتية الدفع، يجب عليك: + +1. إنشاء فرع جديد على أصل transformers (ليس فرعًا!). +2. يجب أن يبدأ اسم الفرع بـ ci_ أو ci- (يؤدي main أيضًا إلى تشغيله، ولكن لا يمكننا إجراء PRs على main). يتم تشغيله أيضًا فقط لمسارات محددة - يمكنك العثور على التعريف المحدث في حالة تغييره منذ كتابة هذه الوثيقة [هنا](https://github.com/huggingface/transformers/blob/main/.github/workflows/self-push.yml) تحت *دفع*. +3. قم بإنشاء طلب سحب من هذا الفرع. +4. بعد ذلك، يمكنك رؤية المهمة تظهر [هنا](https://github.com/huggingface/transformers/actions/workflows/self-push.yml). قد لا يتم تشغيله على الفور إذا كان هناك تراكم. +## تجربة ميزات CI التجريبية + +يمكن أن تكون تجربة ميزات CI مشكلة محتملة لأنها قد تتعارض مع التشغيل الطبيعي لـ CI. لذلك، إذا كان يجب إضافة ميزة CI جديدة، فيجب القيام بذلك على النحو التالي. + +1. قم بإنشاء مهمة مخصصة جديدة لاختبار ما يحتاج إلى اختبار. +2. يجب أن تنجح المهمة الجديدة دائمًا حتى تعطينا علامة ✓ خضراء (التفاصيل أدناه). +3. اتركها تعمل لبضعة أيام لترى أن مجموعة متنوعة من أنواع طلبات السحب يتم تشغيلها عليها (فروع مستودع المستخدم، والفروع غير المتفرعة، والفروع المنشأة من خلال تحرير ملف واجهة مستخدم github.com مباشرة، والدفعات القسرية المختلفة، إلخ - هناك الكثير) أثناء مراقبة سجلات الوظيفة التجريبية (ليس الوظيفة الكلية خضراء لأنه دائمًا ما يكون أخضرًا عن قصد). +4. عندما يكون من الواضح أن كل شيء صلب، قم بدمج التغييرات الجديدة في الوظائف الموجودة. + +بهذه الطريقة، لن تتعارض التجارب على وظيفة CI نفسها مع سير العمل العادي. + +والآن، كيف يمكننا جعل الوظيفة تنجح دائمًا أثناء تطوير ميزة CI الجديدة؟ + +تدعم بعض أنظمة CI، مثل TravisCI ignore-step-failure وستبلغ عن نجاح الوظيفة بشكل عام، ولكن CircleCI وGithub Actions لا تدعمان ذلك اعتبارًا من وقت كتابة هذا التقرير. + +لذلك، يمكن استخدام الحل البديل التالي: + +1. `set +euo pipefail` في بداية أمر التشغيل لقمع معظم حالات الفشل المحتملة في نص Bash البرمجي. +2. يجب أن يكون الأمر الأخير ناجحًا: `echo "done"` أو فقط `true` سيفعل ذلك + +فيما يلي مثال: + +```yaml +- run: +name: run CI experiment +command: | +set +euo pipefail +echo "setting run-all-despite-any-errors-mode" +this_command_will_fail +echo "but bash continues to run" +# emulate another failure +false +# but the last command must be a success +echo "during experiment do not remove: reporting success to CI, even if there were failures" +``` + +بالنسبة للأوامر البسيطة، يمكنك أيضًا القيام بما يلي: + +```bash +cmd_that_may_fail || true +``` + +بالطبع، بمجرد الرضا عن النتائج، قم بدمج الخطوة التجريبية أو الوظيفة مع بقية الوظائف العادية، مع إزالة `set +euo pipefail` أو أي أشياء أخرى قد تكون أضفتها لضمان عدم تدخل الوظيفة التجريبية في التشغيل الطبيعي لـ CI. + +كانت هذه العملية برمتها ستكون أسهل بكثير إذا كان بإمكاننا فقط تعيين شيء مثل `allow-failure` للخطوة التجريبية، والسماح لها بالفشل دون التأثير على الحالة العامة لطلبات السحب. ولكن، كما ذكر سابقًا، لا تدعم CircleCI وGithub Actions ذلك في الوقت الحالي. + +يمكنك التصويت على هذه الميزة ومعرفة مكانها في هذه المواضيع الخاصة بـ CI: + +- [Github Actions:](https://github.com/actions/toolkit/issues/399) +- [CircleCI:](https://ideas.circleci.com/ideas/CCI-I-344) + +## تكامل DeepSpeed + +بالنسبة لطلب سحب يتضمن تكامل DeepSpeed، ضع في اعتبارك أن إعداد CI الخاص بطلبات سحب CircleCI لا يحتوي على وحدات معالجة رسومية (GPU). يتم تشغيل الاختبارات التي تتطلب وحدات معالجة رسومية (GPU) على نظام تكامل مستمر مختلف ليليًا. وهذا يعني أنه إذا حصلت على تقرير CI ناجح في طلب السحب الخاص بك، فهذا لا يعني أن اختبارات DeepSpeed قد نجحت. + +لتشغيل اختبارات DeepSpeed: + +```bash +RUN_SLOW=1 pytest tests/deepspeed/test_deepspeed.py +``` + +يتطلب إجراء أي تغييرات على تعليمات برمجة النماذج أو أمثلة PyTorch تشغيل اختبارات حديقة الحيوانات أيضًا. + +```bash +RUN_SLOW=1 pytest tests/deepspeed +``` \ No newline at end of file From c56e49ed814825e6dfdc1d1b248e8a9b5eb41a77 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:52 +0300 Subject: [PATCH 066/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/troubleshooting.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/troubleshooting.md | 167 ++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 docs/source/ar/troubleshooting.md diff --git a/docs/source/ar/troubleshooting.md b/docs/source/ar/troubleshooting.md new file mode 100644 index 00000000000000..dd08daea0e4ad8 --- /dev/null +++ b/docs/source/ar/troubleshooting.md @@ -0,0 +1,167 @@ +# استكشاف الأخطاء وإصلاحها + +في بعض الأحيان تحدث الأخطاء، لكننا هنا للمساعدة! يغطي هذا الدليل بعضًا من أكثر المشكلات شيوعًا التي رأيناها وكيفية حلها. ومع ذلك، لا يُقصد بهذا الدليل أن يكون مجموعة شاملة من كل مشكلة في مكتبة Hugging Face Transformers. للحصول على مزيد من المساعدة في استكشاف أخطائك وإصلاحها، جرّب ما يلي: + +1. اطلب المساعدة على [المنتديات](https://discuss.huggingface.co/). هناك فئات محددة يمكنك نشر سؤالك فيها، مثل [المبتدئين](https://discuss.huggingface.co/c/beginners/5) أو [Hugging Face Transformers](https://discuss.huggingface.co/c/transformers/9). تأكد من كتابة منشور جيد وواضح على المنتدى مع بعض التعليمات البرمجية القابلة للتكرار لزيادة احتمالية حل مشكلتك! + +2. قم بإنشاء [قضية](https://github.com/huggingface/transformers/issues/new/choose) في مستودع Hugging Face Transformers إذا كانت هناك مشكلة متعلقة بالمكتبة. حاول تضمين أكبر قدر ممكن من المعلومات التي تصف المشكلة لمساعدتنا في معرفة ما هو الخطأ وكيفية إصلاحه. + +3. تحقق من دليل [الهجرة](migration) إذا كنت تستخدم إصدارًا أقدم من مكتبة Hugging Face Transformers حيث تم تقديم بعض التغييرات المهمة بين الإصدارات. + +للحصول على مزيد من التفاصيل حول استكشاف الأخطاء وإصلاحها والحصول على المساعدة، راجع [الفصل 8](https://huggingface.co/course/chapter8/1?fw=pt) من دورة Hugging Face. + +## بيئات جدار الحماية + +تكون بعض مثيلات GPU في السحابة وإعدادات الشبكة الداخلية محمية بجدار حماية من الاتصالات الخارجية، مما يؤدي إلى حدوث خطأ في الاتصال. عندما تحاول تعليمات البرنامج النصي تنزيل أوزان النموذج أو مجموعات البيانات، سيتوقف التنزيل ثم ينتهي بخطأ مثل: + +``` +ValueError: Connection error, and we cannot find the requested files in the cached path. +Please try again or make sure your Internet connection is on. +``` + +في هذه الحالة، يجب عليك تشغيل مكتبة Hugging Face Transformers في [وضع عدم الاتصال](installation#offline-mode) لتجنب خطأ الاتصال. + +## CUDA نفاد الذاكرة + +يمكن أن يكون تدريب النماذج الكبيرة التي تحتوي على ملايين المعلمات أمرًا صعبًا بدون الأجهزة المناسبة. أحد الأخطاء الشائعة التي قد تواجهها عند نفاد ذاكرة GPU هو: + +``` +CUDA out of memory. Tried to allocate 256.00 MiB (GPU 0; 11.17 GiB total capacity; 9.70 GiB already allocated; 179.81 MiB free; 9.85 GiB reserved in total by PyTorch) +``` + +فيما يلي بعض الحلول المحتملة التي يمكنك تجربتها لتقليل استخدام الذاكرة: + +- قلل من قيمة [`per_device_train_batch_size`](main_classes/trainer#transformers.TrainingArguments.per_device_train_batch_size) في [`TrainingArguments`]. + +- حاول استخدام [`gradient_accumulation_steps`](main_classes/trainer#transformers.TrainingArguments.gradient_accumulation_steps) في [`TrainingArguments`] لزيادة حجم الدُفعة بشكل فعال. + + +راجع دليل [الأداء](performance) لمزيد من التفاصيل حول تقنيات توفير الذاكرة. + + +## عدم القدرة على تحميل نموذج TensorFlow محفوظ + +تقوم طريقة TensorFlow [model.save](https://www.tensorflow.org/tutorials/keras/save_and_load#save_the_entire_model) بحفظ النموذج بالكامل - الهندسة المعمارية، الأوزان، تكوين التدريب - في ملف واحد. ومع ذلك، عند تحميل ملف النموذج مرة أخرى، قد تواجه خطأ لأن مكتبة Hugging Face Transformers قد لا تقوم بتحميل جميع الكائنات المتعلقة بـ TensorFlow في ملف النموذج. لتجنب المشكلات عند حفظ نماذج TensorFlow وتحميلها، نوصي بما يلي: + +- احفظ أوزان النموذج كملف `h5` باستخدام [`model.save_weights`](https://www.tensorflow.org/tutorials/keras/save_and_load#save_the_entire_model) ثم أعد تحميل النموذج باستخدام [`~TFPreTrainedModel.from_pretrained`]: + +```بايثون +>>> from transformers import TFPreTrainedModel +>>> from tensorflow import keras + +>>> model.save_weights("some_folder/tf_model.h5") +>>> model = TFPreTrainedModel.from_pretrained("some_folder") +``` + +- احفظ النموذج باستخدام [`~TFPretrainedModel.save_pretrained`] وقم بتحميله مرة أخرى باستخدام [`~TFPreTrainedModel.from_pretrained`]: + +```بايثون +>>> from transformers import TFPreTrainedModel + +>>> model.save_pretrained("path_to/model") +>>> model = TFPreTrainedModel.from_pretrained("path_to/model") +``` + +## ImportError + +خطأ شائع آخر قد تواجهه، خاصة إذا كان نموذجًا تم إصداره حديثًا، هو `ImportError`: + +``` +ImportError: cannot import name 'ImageGPTImageProcessor' from 'transformers' (unknown location) +``` + +بالنسبة لأنواع الأخطاء هذه، تحقق من أن لديك أحدث إصدار من مكتبة Hugging Face Transformers مثبتًا للوصول إلى أحدث النماذج: + +```bash +pip install transformers --upgrade +``` + +## خطأ CUDA: تم تشغيل التأكيد على جانب الجهاز + +في بعض الأحيان، قد تواجه خطأ CUDA عامًا حول خطأ في كود الجهاز. + +``` +RuntimeError: CUDA error: device-side assert triggered +``` + +يجب عليك محاولة تشغيل الكود على وحدة المعالجة المركزية (CPU) أولاً للحصول على رسالة خطأ أكثر دقة. أضف متغير البيئة التالي في بداية كودك للتبديل إلى وحدة المعالجة المركزية: + +```بايثون +>>> import os + +>>> os.environ["CUDA_VISIBLE_DEVICES"] = "" +``` + +الخيار الآخر هو الحصول على تتبع مكدس أفضل من GPU. أضف متغير البيئة التالي في بداية كودك للحصول على تتبع المكدس للإشارة إلى مصدر الخطأ: + +```بايثون +>>> import os + +>>> os.environ["CUDA_LAUNCH_BLOCKING"] = "1" +``` + +## إخراج غير صحيح عند عدم إخفاء رموز الحشو + +في بعض الحالات، قد يكون الإخراج `hidden_state` غير صحيح إذا تضمنت `input_ids` رموز حشو. ولإثبات ذلك، قم بتحميل نموذج ومصنف الرموز. يمكنك الوصول إلى `pad_token_id` للنموذج لمعرفة قيمته. قد تكون `pad_token_id` `None` لبعض النماذج، ولكن يمكنك دائمًا تعيينها يدويًا. + +```بايثون +>>> from transformers import AutoModelForSequenceClassification +>>> import torch + +>>> model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased") +>>> model.config.pad_token_id +0 +``` + +يوضح المثال التالي الإخراج بدون إخفاء رموز الحشو: + +```بايثون +>>> input_ids = torch.tensor([[7592, 2057, 2097, 2393, 9611, 2115], [7592, 0, 0, 0, 0, 0]]) +>>> output = model(input_ids) +>>> print(output.logits) +tensor([[ 0.0082, -0.2307], +[ 0.1317, -0.1683]], grad_fn=) +``` + +هذا هو الإخراج الفعلي للتسلسل الثاني: + +```بايثون +>>> input_ids = torch.tensor([[7592]]) +>>> output = model(input_ids) +>>> print(output.logits) +tensor([[-0.1008, -0.4061]], grad_fn=) +``` + +يجب عليك في معظم الوقت توفير `attention_mask` للنموذج لتجاهل رموز الحشو لتجنب هذا الخطأ الصامت. الآن يتطابق إخراج التسلسل الثاني مع الإخراج الفعلي: + + +يقوم المصنف الرموز افتراضيًا بإنشاء `attention_mask` لك بناءً على إعدادات المصنف الرموز الافتراضية. + + +```بايثون +>>> attention_mask = torch.tensor([[1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0]]) +>>> output = model(input_ids, attention_mask=attention_mask) +>>> print(output.logits) +tensor([[ 0.0082, -0.2307], +[-0.1008, -0.4061]], grad_fn=) +``` + +لا تقوم مكتبة Hugging Face Transformers تلقائيًا بإنشاء `attention_mask` لإخفاء رمز الحشو إذا كان موجودًا لأن: + +- بعض النماذج ليس لها رمز حشو. + +- بالنسبة لبعض الاستخدامات، يريد المستخدمون أن ينتبه النموذج إلى رمز الحشو. +## ValueError: فئة التكوين غير المعترف بها XYZ لهذا النوع من AutoModel + +بشكل عام، نوصي باستخدام فئة [`AutoModel`] لتحميل مثيلات مُدربة مسبقًا من النماذج. يمكن لهذه الفئة أن تستنتج وتُحمل تلقائيًا البنية الصحيحة من نقطة تفتيش معينة بناءً على التكوين. إذا رأيت هذا الخطأ `ValueError` عند تحميل نموذج من نقطة تفتيش، فهذا يعني أن الفئة التلقائية لم تتمكن من العثور على خريطة من التكوين في نقطة التفتيش المعطاة إلى نوع النموذج الذي تحاول تحميله. وغالبًا ما يحدث هذا عندما لا تدعم نقطة التفتيش مهمة معينة. + +على سبيل المثال، سترى هذا الخطأ في المثال التالي لأنه لا يوجد GPT2 للإجابة على الأسئلة: + +```py +>>> from transformers import AutoProcessor, AutoModelForQuestionAnswering + +>>> processor = AutoProcessor.from_pretrained("openai-community/gpt2-medium") +>>> model = AutoModelForQuestionAnswering.from_pretrained("openai-community/gpt2-medium") +ValueError: Unrecognized configuration class for this kind of AutoModel: AutoModelForQuestionAnswering. +Model type should be one of AlbertConfig, BartConfig, BertConfig, BigBirdConfig, BigBirdPegasusConfig, BloomConfig, ... +``` \ No newline at end of file From 889431173b2b11b0b9ff6142d10103256b0095f6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:54 +0300 Subject: [PATCH 067/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/aqlm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/aqlm.md | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/source/ar/quantization/aqlm.md diff --git a/docs/source/ar/quantization/aqlm.md b/docs/source/ar/quantization/aqlm.md new file mode 100644 index 00000000000000..88605b9dcf3f20 --- /dev/null +++ b/docs/source/ar/quantization/aqlm.md @@ -0,0 +1,42 @@ +# AQLM + +> [!TIP] +> جرب AQLM على [Google Colab](https://colab.research.google.com/drive/1-xZmBRXT5Fm3Ghn4Mwa2KRypORXb855X?usp=sharing)! + +Additive Quantization of Language Models ([AQLM](https://arxiv.org/abs/2401.06118)) هي طريقة لضغط نماذج اللغة الكبيرة. فهو يقوم بضغط العديد من الأوزان معًا ويستفيد من أوجه الترابط بينها. يمثل AQLM مجموعات من 8-16 وزنًا على أنها مجموع العديد من الرموز الشفرية. + +يتم تحقيق دعم الاستدلال لـ AQLM في مكتبة `aqlm`. تأكد من تثبيته لتشغيل النماذج (ملاحظة: تعمل aqlm فقط مع python>=3.10): + +```bash +pip install aqlm[gpu,cpu] +``` + +توفر المكتبة نوى فعالة لكل من GPU وCPU الاستدلال والتدريب. + +يمكن العثور على التعليمات حول كيفية ضغط النماذج بنفسك، بالإضافة إلى جميع التعليمات البرمجية ذات الصلة، في مستودع GitHub [المناسب](https://github.com/Vahe1994/AQLM). لتشغيل نماذج AQLM، قم ببساطة بتحميل نموذج تمت ضغطه باستخدام AQLM: + +```python +from transformers import AutoTokenizer, AutoModelForCausalLM + +quantized_model = AutoModelForCausalLM.from_pretrained( + "ISTA-DASLab/Mixtral-8x7b-AQLM-2Bit-1x16-hf", + torch_dtype="auto", + device_map="auto" +) +tokenizer = AutoTokenizer.from_pretrained("ISTA-DASLab/Mixtral-8x7b-AQLM-2Bit-1x16-hf") +``` + +## PEFT + +بدءًا من الإصدار `aqlm 1.0.2`، يدعم AQLM الضبط الدقيق الفعال للبارامترات في شكل [LoRA](https://huggingface.co/docs/peft/package_reference/lora) المدمج في مكتبة [PEFT](https://huggingface.co/blog/peft). + +## تكوينات AQLM + +تختلف إعدادات ضغط AQLM بشكل أساسي في عدد كتب الرموز المستخدمة بالإضافة إلى أحجام كتب الرموز بالبتات. فيما يلي أكثر الإعدادات شيوعًا، بالإضافة إلى نوى الاستدلال التي تدعمها: + +| Kernel | عدد كتب الرموز | حجم كتاب الرموز، بت | التدوين | الدقة | تسريع | استدلال GPU سريع | استدلال CPU سريع | +|---|---------------------|---------------------|----------|-------------|-------------|--------------------|--------------------| +| Triton | K | N | KxN | - | حتى ~0.7x | ✅ | ❌ | +| CUDA | 1 | 16 | 1x16 | الأفضل | حتى ~1.3x | ✅ | ❌ | +| CUDA | 2 | 8 | 2x8 | جيد | حتى ~3.0x | ✅ | ❌ | +| Numba | K | 8 | Kx8 | جيد | حتى ~4.0x | ❌ | ✅ | \ No newline at end of file From 80db82c8b4e4388f9c5290c3de539816d6c388b5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:56 +0300 Subject: [PATCH 068/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/awq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/awq.md | 215 +++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 docs/source/ar/quantization/awq.md diff --git a/docs/source/ar/quantization/awq.md b/docs/source/ar/quantization/awq.md new file mode 100644 index 00000000000000..7f145d4a016115 --- /dev/null +++ b/docs/source/ar/quantization/awq.md @@ -0,0 +1,215 @@ +# AWQ + +[Activation-aware Weight Quantization (AWQ)](https://hf.co/papers/2306.00978) لا تقوم بضغط جميع الأوزان في النموذج، وبدلاً من ذلك، تحافظ على نسبة صغيرة من الأوزان المهمة لأداء LLM. وهذا يقلل بشكل كبير من فقدان الضغط بحيث يمكنك تشغيل النماذج بدقة 4 بت دون أي تدهور في الأداء. + +هناك العديد من المكتبات لضغط النماذج باستخدام خوارزمية AWQ، مثل [llm-awq](https://github.com/mit-han-lab/llm-awq) أو [autoawq](https://github.com/casper-hansen/AutoAWQ) أو [optimum-intel](https://huggingface.co/docs/optimum/main/en/intel/optimization_inc). تدعم مكتبة Transformers تحميل النماذج المضغوطة باستخدام مكتبتي llm-awq وautoawq. سيُظهر لك هذا الدليل كيفية تحميل النماذج المضغوطة باستخدام مكتبة autoawq، ولكن العملية مماثلة للنماذج المضغوطة باستخدام llm-awq. + +تأكد من تثبيت autoawq: + +```bash +pip install autoawq +``` + +يمكن تحديد النماذج المضغوطة باستخدام AWQ عن طريق التحقق من سمة `quantization_config` في ملف [config.json](https://huggingface.co/TheBloke/zephyr-7B-alpha-AWQ/blob/main/config.json) للنموذج: + +```json +{ + "_name_or_path": "/workspace/process/huggingfaceh4_zephyr-7b-alpha/source", + "architectures": [ + "MistralForCausalLM" + ], + ... + ... + ... + "quantization_config": { + "quant_method": "awq", + "zero_point": true, + "group_size": 128, + "bits": 4, + "version": "gemm" + } +} +``` + +يتم تحميل النموذج المضغوط باستخدام طريقة [`~PreTrainedModel.from_pretrained`]. إذا قمت بتحميل نموذجك على وحدة المعالجة المركزية (CPU)، فتأكد من نقله إلى جهاز GPU أولاً. استخدم معلمة `device_map` لتحديد مكان وضع النموذج: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer + +model_id = "TheBloke/zephyr-7B-alpha-AWQ" +model = AutoModelForCausalLM.from_pretrained(model_id, device_map="cuda:0") +``` + +يتم تلقائيًا تعيين الأوزان الأخرى إلى fp16 بشكل افتراضي عند تحميل نموذج مضغوط باستخدام AWQ لأسباب تتعلق بالأداء. إذا كنت تريد تحميل هذه الأوزان الأخرى بتنسيق مختلف، فاستخدم معلمة `torch_dtype`: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer + +model_id = "TheBloke/zephyr-7B-alpha-AWQ" +model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32) +``` + +يمكن أيضًا دمج ضغط AWQ مع [FlashAttention-2](../perf_infer_gpu_one#flashattention-2) لتسريع الاستنتاج بشكل أكبر: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer + +model = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-AWQ", attn_implementation="flash_attention_2", device_map="cuda:0") +``` + +## الوحدات المندمجة + +تقدم الوحدات المندمجة (Fused modules) دقة وأداء محسنين، وهي مدعومة بشكل افتراضي لوحدات AWQ لمعماريتي [Llama](https://huggingface.co/meta-llama) و[Mistral](https://huggingface.co/mistralai/Mistral-7B-v0.1)، ولكن يمكنك أيضًا دمج وحدات AWQ للمعماريات غير المدعومة. + + + +لا يمكن دمج الوحدات المندمجة مع تقنيات التحسين الأخرى مثل FlashAttention-2. + + + + + + + +لا يمكن دمج الوحدات المندمجة مع تقنيات التحسين الأخرى مثل FlashAttention-2. + + + +لتمكين الوحدات المندمجة للمعماريات المدعومة، قم بإنشاء تكوين [`AwqConfig`] وتعيين معلمتي `fuse_max_seq_len` و`do_fuse=True`. معلمة `fuse_max_seq_len` هي الطول الإجمالي للتسلسل، ويجب أن تشمل طول السياق وطول التوليد المتوقع. يمكنك تعيينه إلى قيمة أكبر ليكون آمنًا. + +على سبيل المثال، لدمج وحدات AWQ لنموذج [TheBloke/Mistral-7B-OpenOrca-AWQ](https://huggingface.co/TheBloke/Mistral-7B-OpenOrca-AWQ). + +```python +import torch +from transformers import AwqConfig, AutoModelForCausalLM + +model_id = "TheBloke/Mistral-7B-OpenOrca-AWQ" + +quantization_config = AwqConfig( + bits=4, + fuse_max_seq_len=512, + do_fuse=True, +) + +model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config).to(0) +``` + +تم اختبار نموذج [TheBloke/Mistral-7B-OpenOrca-AWQ](https://huggingface.co/TheBloke/Mistral-7B-OpenOrca-AWQ) باستخدام `batch_size=1` مع الوحدات المندمجة وغير المندمجة. + +
وحدة غير مندمجة
+ +| Batch Size | Prefill Length | Decode Length | Prefill tokens/s | Decode tokens/s | Memory (VRAM) | +|-------------:|-----------------:|----------------:|-------------------:|------------------:|:----------------| +| 1 | 32 | 32 | 60.0984 | 38.4537 | 4.50 GB (5.68%) | +| 1 | 64 | 64 | 1333.67 | 31.6604 | 4.50 GB (5.68%) | +| 1 | 128 | 128 | 2434.06 | 31.6272 | 4.50 GB (5.68%) | +| 1 | 256 | 256 | 3072.26 | 38.1731 | 4.50 GB (5.68%) | +| 1 | 512 | 512 | 3184.74 | 31.6819 | 4.59 GB (5.80%) | +| 1 | 1024 | 1024 | 3148.18 | 36.8031 | 4.81 GB (6.07%) | +| 1 | 2048 | 2048 | 2927.33 | 35.2676 | 5.73 GB (7.23%) | + +
وحدة مندمجة
+ +| Batch Size | Prefill Length | Decode Length | Prefill tokens/s | Decode tokens/s | Memory (VRAM) | +|-------------:|-----------------:|----------------:|-------------------:|------------------:|:----------------| +| 1 | 32 | 32 | 81.4899 | 80.2569 | 4.00 GB (5.05%) | +| 1 | 64 | 64 | 1756.1 | 106.26 | 4.00 GB (5.05%) | +| 1 | 128 | 128 | 2479.32 | 105.631 | 4.00 GB (5.06%) | +| 1 | 256 | 256 | 1813.6 | 85.7485 | 4.01 GB (5.06%) | +| 1 | 512 | 512 | 2848.9 | 97.701 | 4.11 GB (5.19%) | +| 1 | 1024 | 1024 | 3044.35 | 87.7323 | 4.41 GB (5.57%) | +| 1 | 2048 | 2048 | 2715.11 | 89.4709 | 5.57 GB (7.04%) | + +تم أيضًا اختبار سرعة وسرعة نقل الوحدات المندمجة وغير المندمجة باستخدام مكتبة [optimum-benchmark](https://github.com/huggingface/optimum-benchmark). + +
+
+ generate throughput per batch size +
forward peak memory/batch size
+
+
+ forward latency per batch size +
generate throughput/batch size
+
+
+ +
+ + +بالنسبة للمعماريات التي لا تدعم الوحدات المندمجة بعد، يجب عليك إنشاء خريطة دمج مخصصة لتحديد الوحدات التي تحتاج إلى الدمج باستخدام معلمة `modules_to_fuse`. على سبيل المثال، لدمج وحدات AWQ لنموذج [TheBloke/Yi-34B-AWQ](https://huggingface.co/TheBloke/Yi-34B-AWQ). + +```python +import torch +from transformers import AwqConfig, AutoModelForCausalLM + +model_id = "TheBloke/Yi-34B-AWQ" + +quantization_config = AwqConfig( + bits=4, + fuse_max_seq_len=512, + modules_to_fuse={ + "attention": ["q_proj", "k_proj", "v_proj", "o_proj"], + "layernorm": ["ln1", "ln2", "norm"], + "mlp": ["gate_proj", "up_proj", "down_proj"], + "use_alibi": False, + "num_attention_heads": 56, + "num_key_value_heads": 8, + "hidden_size": 7168 + } +) + +model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config).to(0) +``` + +يجب أن تشمل معلمة `modules_to_fuse` ما يلي: + +- `"attention"`: أسماء طبقات الاهتمام التي سيتم دمجها بالترتيب التالي: query، key، value، وطبقة الإسقاط الإخراجي. إذا كنت لا تريد دمج هذه الطبقات، قم بتمرير قائمة فارغة. +- `"layernorm"`: أسماء جميع طبقات LayerNorm التي تريد استبدالها بطبقة LayerNorm مدمجة مخصصة. إذا كنت لا تريد دمج هذه الطبقات، قم بتمرير قائمة فارغة. +- `"mlp"`: أسماء طبقات MLP التي تريد دمجها في طبقة MLP واحدة بالترتيب التالي: (gate (dense، layer، post-attention) / up / down layers). +- `"use_alibi"`: إذا كان نموذجك يستخدم ALiBi positional embedding. +- `"num_attention_heads"`: عدد رؤوس الاهتمام. +- `"num_key_value_heads"`: عدد رؤوس القيمة الرئيسية التي يجب استخدامها لتنفيذ Query Attention مجمعة (GQA). إذا كان `num_key_value_heads=num_attention_heads`، فسيستخدم النموذج Multi Head Attention (MHA)، إذا كان `num_key_value_heads=1`، فسيستخدم النموذج Multi Query Attention (MQA)، وإلا سيتم استخدام GQA. +- `"hidden_size"`: بُعد التمثيلات المخفية. + + +
+ + + +## دعم ExLlama-v2 + +تدعم الإصدارات الحديثة من `autoawq` نواة ExLlama-v2 لعمليات التعبئة فك التشفير بشكل أسرع. للبدء، قم أولاً بتثبيت أحدث إصدار من `autoawq` عن طريق تشغيل: + +```bash +pip install git+https://github.com/casper-hansen/AutoAWQ.git +``` + +ابدأ بالمرور عبر تكوين `AwqConfig()` مع `version="exllama"`. + +```python +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfig + +quantization_config = AwqConfig(version="exllama") + +model = AutoModelForCausalLM.from_pretrained( + "TheBloke/Mistral-7B-Instruct-v0.1-AWQ", + quantization_config=quantization_config, + device_map="auto", +) + +input_ids = torch.randint(0, 100, (1, 128), dtype=torch.long, device="cuda") +output = model(input_ids) +print(output.logits) + +tokenizer = AutoTokenizer.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-AWQ") +input_ids = tokenizer.encode("How to make a cake", return_tensors="pt").to(model.device) +output = model.generate(input_ids, do_sample=True, max_length=50, pad_token_id=50256) +print(tokenizer.decode(output[0], skip_special_tokens=True)) +``` + + + +ملاحظة: هذه الميزة مدعومة على معالجات الرسومات AMD. + + \ No newline at end of file From a88f5814a2b75a3081b53d9074ae4824fb6ed567 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:42:58 +0300 Subject: [PATCH 069/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/contribute.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/contribute.md | 52 +++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/source/ar/quantization/contribute.md diff --git a/docs/source/ar/quantization/contribute.md b/docs/source/ar/quantization/contribute.md new file mode 100644 index 00000000000000..918bac19c371b8 --- /dev/null +++ b/docs/source/ar/quantization/contribute.md @@ -0,0 +1,52 @@ +# المساهمة بطريقة تحجيم كمي جديدة + +يدعم Transformers ويدمج العديد من طرق التحجيم الكمي مثل QLoRA وGPTQ وLLM.int8 وAWQ. ومع ذلك، هناك نهج أخرى للتحجيم غير مدمجة بعد. لتسهيل إضافة طرق التحجيم الكمي هذه واستخدامها مع نماذج Transformers، يجب استخدام فئة [`HfQuantizer`]. تم تصميم فئة [`HfQuantizer`] كفئة مساعدة داخلية لإضافة طريقة تحجيم بدلاً من شيء تطبقه على كل وحدة PyTorch. + +سيوضح هذا الدليل كيفية دمج طريقة تحجيم كمي جديدة مع فئة [`HfQuantizer`]. + +## المتطلبات + +قبل دمج طريقة تحجيم كمي جديدة في Transformers، تأكد من أن الطريقة التي تحاول إضافتها تلبي المتطلبات الأساسية التالية. تدعم طرق التحجيم الكمي التي يمكن تشغيلها حاليًا مع وحدات PyTorch فقط. + +- طريقة التحجيم الكمي متاحة من خلال حزمة Python التي يمكن لأي شخص تثبيتها عبر pip (من الجيد أيضًا إذا كان بإمكانك تثبيت الحزمة من المصدر فقط). من الناحية المثالية، يتم تضمين نوى مسبقة التجميع في حزمة pip. +- يمكن تشغيل الطريقة على الأجهزة الشائعة الاستخدام (وحدة المعالجة المركزية، وحدة معالجة الرسوميات، ...). +- يتم لف الطريقة في `nn.Module` (على سبيل المثال، `Linear8bitLt`، `Linear4bit`)، ويجب أن يكون للطبقة الخطية المحجّمة التعريف التالي: + +```py +class Linear4bit(nn.Module): + def __init__(self, ...): + ... + + def forward(self, x): + return my_4bit_kernel(x, self.weight, self.bias) +``` + +بهذه الطريقة، يمكن تحجيم نماذج Transformers بسهولة عن طريق استبدال بعض مثيلات `nn.Linear` بالفصل المستهدف. + +- يجب أن تكون طريقة التحجيم قابلة للتسلسل. يمكنك حفظ الأوزان المحجّمة محليًا أو دفعها إلى Hub. +- تأكد من أن الحزمة التي تحتوي على نوى التحجيم/البدائية مستقرة (بدون تغييرات متكررة وكاسرة). + +بالنسبة لبعض طرق التحجيم الكمي، فقد تتطلب "التحجيم المسبق" للنماذج من خلال معايرة البيانات (مثل AWQ). في هذه الحالة، نفضل فقط دعم الاستدلال في Transformers والسماح لمكتبة الجهات الخارجية التي تحتفظ بها مجتمع ML بالتعامل مع تحجيم النموذج نفسه. + +## إنشاء فئة HFQuantizer جديدة + +1. قم بإنشاء فئة تكوين تحجيم جديدة داخل [src/transformers/utils/quantization_config.py](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/utils/quantization_config.py) وتأكد من عرض تكوين التحجيم الجديد داخل كائن المبادرة الرئيسي لـ Transformers عن طريق إضافته إلى [`_import_structure`](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/__init__.py#L1088) في [src/transformers/__init__.py](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/__init__.py). +2. قم بإنشاء ملف جديد داخل [src/transformers/quantizers/](https://github.com/huggingface/transformers/tree/abbffc4525566a48a9733639797c812301218b83/src/transformers/quantizers) يسمى `quantizer_your_method.py`، واجعله يرث من [src/transformers/quantizers/base.py::HfQuantizer](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/quantizers/base.py#L28). تأكد من إضافة المحجّم الجديد وتكوين التحجيم في التخطيط التلقائي للتحجيم في [src/transformers/quantizers/auto.py](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/quantizers/auto.py). + +3. حدد سمات الفئة التالية/طرق الخصائص لطريقة التحجيم الكمي الخاصة بك: + +* `requires_calibration`: ما إذا كانت طريقة التحجيم تتطلب عملية معايرة البيانات. إذا تم تعيينه على `True`، فيمكنك فقط دعم الاستدلال (مع الأوزان المحجّمة) وليس الاستدلال والتحجيم. +* `required_packages`: قائمة من السلاسل من الحزم المطلوبة لاستخدام الأوزان المحجّمة. قد تحتاج إلى تحديد بعض طرق المساعدة الجديدة مثل `is_auto_awq_available` في [transformers/src/utils/import_utils.py](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/utils/import_utils.py). +* `requires_parameters_quantization`: مطلوب فقط إذا كانت طريقة التحجيم الخاصة بك تتطلب اهتمامًا إضافيًا بكائن `nn.Parameter` الأساسي. على سبيل المثال، يستخدم bitsandbytes `Params4bit` و`Int8Param`، والذي يتطلب بعض الاهتمام الإضافي عند تحجيم النموذج. تقوم معظم طرق التحجيم الحديثة بتعبئة الأوزان int2/int4 داخل أوزان `torch.uint8`، لذا يجب ألا تكون هذه العلامة مطلوبة حقًا (يتم تعيينها افتراضيًا على `False`). +* `is_serializable`: طريقة خاصية لتحديد ما إذا كانت الطريقة قابلة للتسلسل أم لا. +* `is_trainable`: طريقة خاصية لتحديد ما إذا كان يمكن ضبط نماذج دقيقة أعلى طريقة التحجيم الكمي (مع أو بدون نهج PEFT). + +4. اكتب أساليب `validate_environment` و`update_torch_dtype`. يتم استدعاء هذه الطرق قبل إنشاء النموذج المحجّم لضمان استخدام المستخدمين للتكوين الصحيح. يمكنك الاطلاع على كيفية القيام بذلك في المحجّمات الأخرى. + +5. اكتب طريقة `_process_model_before_weight_loading`. في Transformers، يتم تهيئة النماذج المحجّمة أولاً على الجهاز "الميتا" قبل تحميل الأوزان. وهذا يعني أن طريقة `_process_model_before_weight_loading` تهتم بتشغيل هيكل النموذج لاستبدال بعض الوحدات (مثل `nn.Linear`) بالوحدات المستهدفة (وحدات التحجيم). يمكنك تحديد منطق استبدال الوحدة أو أي طريقة مساعدة أخرى عن طريق إنشاء ملف جديد في [transformers/src/integrations/](https://github.com/huggingface/transformers/tree/abbffc4525566a48a9733639797c812301218b83/src/transformers/integrations) وتعريض الطرق ذات الصلة في ملف `__init__.py` لهذا المجلد. نقطة الانطلاق الأفضل ستكون إلقاء نظرة على طرق التحجيم الكمي الأخرى مثل [quantizer_awq.py](https://github.com/huggingface/transformers/blob/abbffc4525566a48a9733639797c812301218b83/src/transformers/quantizers/quantizer_awq.py). + +6. اكتب طريقة `_process_model_after_weight_loading`. تمكّن هذه الطريقة من تنفيذ ميزات إضافية تتطلب تشغيل النموذج بعد تحميل الأوزان. + +7. قم بتوثيق كل شيء! تأكد من توثيق طريقة التحجيم الكمي الخاصة بك عن طريق إضافة ملف جديد ضمن `docs/source/en/quantization` وإضافة صف جديد في الجدول في `docs/source/en/quantization/overview.md`. + +8. أضف الاختبارات! يجب عليك إضافة الاختبارات عن طريق إضافة الحزمة أولاً في Dockerfile الليلي الخاص بنا داخل `docker/transformers-quantization-latest-gpu` ثم إضافة ملف اختبار جديد في `tests/quantization/xxx`. لا تتردد في التحقق من كيفية تنفيذه لطرق التحجيم الكمي الأخرى. \ No newline at end of file From 77c9464e4209aa02cb4efc844de2b3e6c1063640 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:00 +0300 Subject: [PATCH 070/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/eetq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/eetq.md | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/source/ar/quantization/eetq.md diff --git a/docs/source/ar/quantization/eetq.md b/docs/source/ar/quantization/eetq.md new file mode 100644 index 00000000000000..3128c797d786c9 --- /dev/null +++ b/docs/source/ar/quantization/eetq.md @@ -0,0 +1,35 @@ +# EETQ + +تدعم مكتبة [EETQ](https://github.com/NetEase-FuXi/EETQ) التجزئة ذات الوزن فقط لكل قناة int8 لمعالجات NVIDIA GPU. وتُستمد أنوية GEMM و GEMV عالية الأداء من FasterTransformer و TensorRT-LLM. ولا يتطلب الأمر وجود مجموعة بيانات معايرة، كما لا يلزم إجراء التجزئة المسبقة لنموذجك. وعلاوة على ذلك، يكون تدهور الدقة طفيفًا بفضل التجزئة لكل قناة. + +تأكد من تثبيت eetq من [صفحة الإصدار](https://github.com/NetEase-FuXi/EETQ/releases) + +``` +pip install --no-cache-dir https://github.com/NetEase-FuXi/EETQ/releases/download/v1.0.0/EETQ-1.0.0+cu121+torch2.1.2-cp310-cp310-linux_x86_64.whl +``` + +أو عبر كود المصدر https://github.com/NetEase-FuXi/EETQ. يتطلب EETQ قدرة CUDA <= 8.9 و >= 7.0 + +``` +git clone https://github.com/NetEase-FuXi/EETQ.git +cd EETQ/ +git submodule update --init --recursive +pip install . +``` + +يمكن تجزئة نموذج غير مجزأ عبر "from_pretrained". + +```py +from transformers import AutoModelForCausalLM, EetqConfig +path = "/path/to/model" +quantization_config = EetqConfig("int8") +model = AutoModelForCausalLM.from_pretrained(path, device_map="auto", quantization_config=quantization_config) +``` + +يمكن حفظ النموذج المجزأ عبر "save_pretrained" وإعادة استخدامه مرة أخرى عبر "from_pretrained". + +```py +quant_path = "/path/to/save/quantized/model" +model.save_pretrained(quant_path) +model = AutoModelForCausalLM.from_pretrained(quant_path, device_map="auto") +``` \ No newline at end of file From d6378edf02dc7028dfbee23da4f91ea41cea206d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:02 +0300 Subject: [PATCH 071/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/optimum.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/optimum.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/source/ar/quantization/optimum.md diff --git a/docs/source/ar/quantization/optimum.md b/docs/source/ar/quantization/optimum.md new file mode 100644 index 00000000000000..c5aeb0a9f4e530 --- /dev/null +++ b/docs/source/ar/quantization/optimum.md @@ -0,0 +1,3 @@ +# Optimum + +تدعم مكتبة [Optimum](https://huggingface.co/docs/optimum/index) الضبط الدقيق لـ Intel و Furiosa و ONNX Runtime و GPTQ ووظائف الضبط الدقيق PyTorch من المستوى الأدنى. ضع في اعتبارك استخدام Optimum للضبط الدقيق إذا كنت تستخدم أجهزة محسّنة ومحددة مثل معالجات Intel أو Furiosa NPUs أو مسرع نماذج مثل ONNX Runtime. \ No newline at end of file From 1b725a0517793d26bd23a74cd5074e0efde27d39 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:04 +0300 Subject: [PATCH 072/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/overview.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/overview.md | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/source/ar/quantization/overview.md diff --git a/docs/source/ar/quantization/overview.md b/docs/source/ar/quantization/overview.md new file mode 100644 index 00000000000000..eee88edbac37f4 --- /dev/null +++ b/docs/source/ar/quantization/overview.md @@ -0,0 +1,42 @@ +# الضغط الكمي + +تركز تقنيات الضغط الكمي على تمثيل البيانات باستخدام معلومات أقل مع محاولة عدم فقدان الكثير من الدقة. وهذا يعني غالباً تحويل نوع البيانات لتمثيل نفس المعلومات بعدد أقل من البتات. على سبيل المثال، إذا كانت أوزان النموذج مخزنة كنقاط عائمة 32 بت ويتم ضغطها إلى نقاط عائمة 16 بت، فإن حجم النموذج ينخفض إلى النصف، مما يسهل تخزينه ويقلل من استخدام الذاكرة. كما يمكن للدقة المنخفضة تسريع الاستدلال لأن إجراء الحسابات يستغرق وقتًا أقل عند استخدام عدد أقل من البتات. + + + +إذا كنت مهتمًا بإضافة طريقة ضغط كمي جديدة إلى Transformers، فيمكنك قراءة دليل [HfQuantizer](./contribute) لمعرفة كيفية القيام بذلك! + + + + + +إذا كنت جديدًا في مجال الضغط الكمي، نوصي بالاطلاع على هذه الدورات الودية للمبتدئين حول الضغط الكمي بالتعاون مع DeepLearning.AI: + +* [أساسيات الضغط الكمي مع Hugging Face](https://www.deeplearning.ai/short-courses/quantization-fundamentals-with-hugging-face/) +* [الضغط الكمي بشكل معمق](https://www.deeplearning.ai/short-courses/quantization-in-depth/) + + + +## متى تستخدم أي طريقة؟ + +طور المجتمع العديد من طرق الضغط الكمي لمختلف حالات الاستخدام. باستخدام مكتبة Transformers، يمكنك تشغيل أي من هذه الطرق المتكاملة حسب حالتك الاستخدامية، لأن لكل طريقة مزايا وعيوب. + +على سبيل المثال، تتطلب بعض طرق الضغط الكمي معايرة النموذج باستخدام مجموعة بيانات للضغط بشكل أكثر دقة و"شدة" (حتى 1-2 بت)، في حين أن الطرق الأخرى تعمل مباشرة مع الضغط أثناء التنقل. + +هناك معيار آخر يجب مراعاته وهو التوافق مع الجهاز المستهدف. هل تريد إجراء الضغط الكمي على وحدة المعالجة المركزية CPU أو وحدة معالجة الرسوميات GPU أو Apple silicon؟ + +باختصار، فإن دعم مجموعة واسعة من طرق الضغط الكمي يتيح لك اختيار أفضل طريقة لمتطلباتك. + +استخدم الجدول أدناه للمساعدة في تحديد طريقة الضغط الكمي التي يجب استخدامها. + +| طريقة الضغط الكمي | الضغط أثناء التنقل | CPU | CUDA GPU | RoCm GPU (AMD) | Metal (Apple Silicon) | دعم torch.compile() | عدد البتات | يدعم الضبط الدقيق (من خلال PEFT) | قابل للتسلسل باستخدام 🤗 Transformers | الدعم في 🤗 Transformers | رابط المكتبة | +|-------------------------------------|-------------------------|-----|----------|----------------|-----------------------|-------------------------|----------------|-------------------------------------|--------------|------------------------|---------------------------------------------| +| [AQLM](./aqlm) | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 1 / 2 | 🟢 | 🟢 | 🟢 | https://github.com/Vahe1994/AQLM | +| [AWQ](./awq) | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | ? | 4 | 🟢 | 🟢 | 🟢 | https://github.com/casper-hansen/AutoAWQ | +| [bitsandbytes](./bitsandbytes) | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 4 / 8 | 🟢 | 🟢 | 🟢 | https://github.com/TimDettmers/bitsandbytes | +| [EETQ](./eetq) | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | ? | 8 | 🟢 | 🟢 | 🟢 | https://github.com/NetEase-FuXi/EETQ | +| GGUF / GGML (llama.cpp) | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | 🔴 | 1 - 8 | 🔴 | [انظر قسم GGUF](../gguf) | [انظر قسم GGUF](../gguf) | https://github.com/ggerganov/llama.cpp | +| [GPTQ](./gptq) | 🔴 | 🔴 | 🟢 | 🟢 | 🔴 | 🔴 | 2 - 3 - 4 - 8 | 🟢 | 🟢 | 🟢 | https://github.com/AutoGPTQ/AutoGPTQ | +| [HQQ](./hqq) | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🟢 | 1 - 8 | 🟢 | 🔴 | 🟢 | https://github.com/mobiusml/hqq/ | +| [Quanto](./quanto) | 🟢 | 🟢 | 🟢 | 🔴 | 🟢 | 🟢 | 2 / 4 / 8 | 🔴 | 🔴 | 🟢 | https://github.com/huggingface/quanto | +| [FBGEMM_FP8](./fbgemm_fp8.md) | 🟢 | 🔴 | 🟢 | 🔴 | 🔴 | 🔴 | 8 | 🔴 | 🟢 | 🟢 | https://github.com/pytorch/FBGEMM | \ No newline at end of file From cd4a4ef5416b4be25ad17f80d2bed1afc3eb7013 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:06 +0300 Subject: [PATCH 073/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/quanto.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/quanto.md | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/source/ar/quantization/quanto.md diff --git a/docs/source/ar/quantization/quanto.md b/docs/source/ar/quantization/quanto.md new file mode 100644 index 00000000000000..e572bbffaa0870 --- /dev/null +++ b/docs/source/ar/quantization/quanto.md @@ -0,0 +1,66 @@ + + +# Quanto + + + +جرب Quanto + transformers مع هذا [notebook](https://colab.research.google.com/drive/16CXfVmtdQvciSh9BopZUDYcmXCDpvgrT?usp=sharing)! + + + + +[🤗 Quanto](https://github.com/huggingface/quanto) هي مكتبة PyTorch للتحويل الكمي متعددة الاستخدامات. طريقة التكميم المستخدمة هي التكميم الخطي. يوفر Quanto العديد من الميزات الفريدة مثل: + +- تكميم الأوزان (`float8`,`int8`,`int4`,`int2`) +- تكميم التنشيط (`float8`,`int8`) +- لا يعتمد على طريقة الإدخال (مثل CV، LLM) +- لا يعتمد على الجهاز (مثل CUDA، MPS، CPU) +- التوافق مع `torch.compile` +- من السهل إضافة نواة مخصصة لجهاز محدد +- يدعم التدريب الواعي بالتكميم + + +قبل البدء، تأكد من تثبيت المكتبات التالية: + +```bash +pip install quanto accelerate transformers +``` + +الآن يمكنك تحويل نموذج إلى الشكل الكمي عن طريق تمرير [`QuantoConfig`] object في طريقة [`~PreTrainedModel.from_pretrained`]. تعمل هذه الطريقة مع أي نموذج في أي طريقة للإدخال، طالما أنه يحتوي على طبقات `torch.nn.Linear`. + +لا يدعم التكامل مع مكتبة المحولات سوى تكميم الأوزان. بالنسبة لحالات الاستخدام الأكثر تعقيدًا مثل تكميم التنشيط والمعايرة والتدريب الواعي بالتكميم، يجب استخدام مكتبة [quanto](https://github.com/huggingface/quanto) بدلاً من ذلك. + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer, QuantoConfig + +model_id = "facebook/opt-125m" +tokenizer = AutoTokenizer.from_pretrained(model_id) +quantization_config = QuantoConfig(weights="int8") +quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="cuda:0", quantization_config=quantization_config) +``` + +لاحظ أن التسلسل الهرمي غير مدعوم حتى الآن مع المحولات ولكنها قادمة قريبًا! إذا كنت تريد حفظ النموذج، فيمكنك استخدام مكتبة quanto بدلاً من ذلك. + +تستخدم مكتبة Quanto خوارزمية التكميم الخطي للتحويل الكمي. على الرغم من أن هذه تقنية تحويل كمي أساسية، إلا أننا نحصل على نتائج جيدة جدًا! الق نظرة على المعيار المرجعي التالي (llama-2-7b على مقياس الحيرة). يمكنك العثور على المزيد من المعايير المرجعية [هنا](https://github.com/huggingface/quanto/tree/main/bench/generation) + +
+
+ llama-2-7b-quanto-perplexity +
+
+ +تتمتع المكتبة بمرونة كافية لتكون متوافقة مع معظم خوارزميات تحسين PTQ. وتتمثل الخطة المستقبلية في دمج الخوارزميات الأكثر شعبية بأكثر الطرق سلاسة (AWQ، Smoothquant). \ No newline at end of file From 9416a555b255b4bf2a84a721255b467cb00cfb6c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:08 +0300 Subject: [PATCH 074/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/gptq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/gptq.md | 105 ++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 docs/source/ar/quantization/gptq.md diff --git a/docs/source/ar/quantization/gptq.md b/docs/source/ar/quantization/gptq.md new file mode 100644 index 00000000000000..a4433d82b278de --- /dev/null +++ b/docs/source/ar/quantization/gptq.md @@ -0,0 +1,105 @@ +# GPTQ + + + +جرب تكميم GPTQ مع PEFT في هذا [notebook](https://colab.research.google.com/drive/1_TIrmuKOFhuRRiTWN94iLKUFu6ZX4ceb?usp=sharing) وتعرف على المزيد حول تفاصيله في هذه [التدوينة](https://huggingface.co/blog/gptq-integration)! + + + +تنفذ مكتبة [AutoGPTQ](https://github.com/PanQiWei/AutoGPTQ) خوارزمية GPTQ، وهي تقنية تكميم بعد التدريب حيث يتم تكميم كل صف في مصفوفة الأوزان بشكل مستقل لإيجاد نسخة من الأوزان التي تقلل من الخطأ. يتم تكميم هذه الأوزان إلى int4، ولكن يتم استعادتها إلى fp16 أثناء الاستدلال. يمكن أن يوفر هذا استخدام الذاكرة الخاصة بك بمقدار 4x لأن أوزان int4 يتم إلغاء تكميمها في نواة مدمجة بدلاً من الذاكرة العالمية لوحدة معالجة الرسومات (GPU)، ويمكنك أيضًا توقع تسريع في الاستدلال لأن استخدام عرض نطاق ترددي أقل يستغرق وقتًا أقل في التواصل. + +قبل البدء، تأكد من تثبيت المكتبات التالية: + +```bash +pip install auto-gptq +pip install --upgrade accelerate optimum transformers +``` + +ولتكميم نموذج (مدعوم حاليًا للنصوص فقط)، يلزمك إنشاء فئة [`GPTQConfig`] وتعيين عدد البتات التي سيتم تكميمها، ومجموعة بيانات لمعايرة الأوزان من أجل التكميم، ومحلل رموز لإعداد مجموعة البيانات. + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig + +model_id = "facebook/opt-125m" +tokenizer = AutoTokenizer.from_pretrained(model_id) +gptq_config = GPTQConfig(bits=4, dataset="c4", tokenizer=tokenizer) +``` + +يمكنك أيضًا تمرير مجموعة البيانات الخاصة بك كقائمة من السلاسل النصية، ولكن يوصى بشدة باستخدام نفس مجموعة البيانات من ورقة GPTQ. + +```py +dataset = ["auto-gptq is an easy-to-use model quantization library with user-friendly apis, based on GPTQ algorithm."] +gptq_config = GPTQConfig(bits=4, dataset=dataset, tokenizer=tokenizer) +``` + +قم بتحميل نموذج لتكميمه ومرر `gptq_config` إلى طريقة [`~AutoModelForCausalLM.from_pretrained`]. قم بتعيين `device_map="auto"` لنقل النموذج تلقائيًا إلى وحدة المعالجة المركزية (CPU) للمساعدة في تثبيت النموذج في الذاكرة، والسماح بنقل وحدات النموذج بين وحدة المعالجة المركزية ووحدة معالجة الرسومات (GPU) للتكميم. + +```py +quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quantization_config=gptq_config) +``` + +إذا كنت تعاني من نفاد الذاكرة لأن مجموعة البيانات كبيرة جدًا، فإن النقل إلى القرص غير مدعوم. إذا كان الأمر كذلك، فحاول تمرير معلمة `max_memory` لتحديد مقدار الذاكرة التي سيتم استخدامها على جهازك (GPU وCPU): + +```py +quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", max_memory={0: "30GiB", 1: "46GiB", "cpu": "30GiB"}, quantization_config=gptq_config) +``` + + + +اعتمادًا على عتادك، قد يستغرق تكميم نموذج من الصفر بعض الوقت. قد يستغرق تكميم نموذج [facebook/opt-350m](https://huggingface.co/facebook/opt-350m) حوالي 5 دقائق على وحدة معالجة الرسومات (GPU) من Google Colab من الفئة المجانية، ولكنه سيستغرق حوالي 4 ساعات لتكميم نموذج بمعلمات 175B على NVIDIA A100. قبل تكميم نموذج، من الجيد التحقق من Hub لمعرفة ما إذا كان هناك بالفعل إصدار مُكمم من GPTQ للنموذج. + + +
+ +بمجرد تكميم نموذجك، يمكنك دفعه إلى Hub مع محلل الرموز حيث يمكن مشاركته والوصول إليه بسهولة. استخدم طريقة [`~PreTrainedModel.push_to_hub`] لحفظ [`GPTQConfig`]: + +```py +quantized_model.push_to_hub("opt-125m-gptq") +tokenizer.push_to_hub("opt-125m-gptq") +``` + +يمكنك أيضًا حفظ نموذجك المُكمم محليًا باستخدام طريقة [`~PreTrainedModel.save_pretrained`]. إذا تم تكميم النموذج باستخدام معلمة `device_map`، فتأكد من نقل النموذج بالكامل إلى وحدة معالجة الرسومات (GPU) أو وحدة المعالجة المركزية (CPU) قبل حفظه. على سبيل المثال، لحفظ النموذج على وحدة المعالجة المركزية (CPU): + +```py +quantized_model.save_pretrained("opt-125m-gptq") +tokenizer.save_pretrained("opt-125m-gptq") + +# إذا تم التكميم باستخدام device_map +quantized_model.to("cpu") +quantized_model.save_pretrained("opt-125m-gptq") +``` + +قم بتحميل نموذج مُكمم باستخدام طريقة [`~PreTrainedModel.from_pretrained`]. قم بتعيين `device_map="auto"` لتوزيع النموذج تلقائيًا على جميع وحدات معالجة الرسومات (GPU) المتوفرة لتحميل النموذج بشكل أسرع دون استخدام ذاكرة أكثر من اللازم. + +```py +from transformers import AutoModelForCausalLM + +model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto") +``` + +## ExLlama + +[ExLlama](https://github.com/turboderp/exllama) هو تنفيذ Python/C++/CUDA لنموذج [Llama](model_doc/llama) مصمم للاستدلال بشكل أسرع مع أوزان GPTQ ذات 4 بتات (تحقق من هذه [الاختبارات المعيارية](https://github.com/huggingface/optimum/tree/main/tests/benchmark#gptq-benchmark)). يتم تنشيط نواة ExLlama بشكل افتراضي عند إنشاء كائن [`GPTQConfig`]. لزيادة تسريع الاستدلال، استخدم نواة [ExLlamaV2](https://github.com/turboderp/exllamav2) عن طريق تكوين معلمة `exllama_config`: + +```py +import torch +from transformers import AutoModelForCausalLM, GPTQConfig + +gptq_config = GPTQConfig(bits=4, exllama_config={"version":2}) +model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto", quantization_config=gptq_config) +``` + + + +يتم دعم النماذج ذات 4 بتات فقط، ونوصي بتعطيل نواة ExLlama إذا كنت تقوم بتعديل نموذج مُكمم باستخدام PEFT. + + + +تدعم نواة ExLlama فقط عندما يكون النموذج بالكامل على وحدة معالجة الرسومات (GPU). إذا كنت تقوم بالاستدلال على وحدة المعالجة المركزية (CPU) باستخدام AutoGPTQ (الإصدار > 0.4.2)، فستحتاج إلى تعطيل نواة ExLlama. وهذا يكتب فوق السمات المتعلقة بنواة ExLlama في تكوين التكميم لملف config.json. + +```py +import torch +from transformers import AutoModelForCausalLM, GPTQConfig +gptq_config = GPTQConfig(bits=4, use_exllama=False) +model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="cpu", quantization_config=gptq_config) +``` \ No newline at end of file From 3338c3b2237ef66c507899e38fb46cafaaee5a91 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:10 +0300 Subject: [PATCH 075/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/hqq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/hqq.md | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/source/ar/quantization/hqq.md diff --git a/docs/source/ar/quantization/hqq.md b/docs/source/ar/quantization/hqq.md new file mode 100644 index 00000000000000..4a0b1bec14fa24 --- /dev/null +++ b/docs/source/ar/quantization/hqq.md @@ -0,0 +1,67 @@ + + +# HQQ + +ينفذ Half-Quadratic Quantization (HQQ) التكميم أثناء التنقل من خلال التحسين السريع والمتين. لا يتطلب بيانات المعايرة ويمكن استخدامه لتكميم أي نموذج. +يرجى الرجوع إلى الحزمة الرسمية لمزيد من التفاصيل. + +بالنسبة للتثبيت، نوصي باستخدام النهج التالي للحصول على أحدث إصدار وبناء نواة CUDA المقابلة: +``` +pip install hqq +``` + +لتكميم نموذج، تحتاج إلى إنشاء [`HqqConfig`]. هناك طريقتان للقيام بذلك: +``` Python +from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig + +# الطريقة 1: ستستخدم جميع الطبقات الخطية نفس تكوين التكميم +quant_config = HqqConfig(nbits=8, group_size=64, quant_zero=False, quant_scale=False, axis=0) #يتم استخدام axis=0 بشكل افتراضي +``` + +``` Python +# الطريقة 2: ستستخدم كل طبقة خطية بنفس العلامة تكوين تكميم مخصص +q4_config = {'nbits':4, 'group_size':64, 'quant_zero':False, 'quant_scale':False} +q3_config = {'nbits':3, 'group_size':32, 'quant_zero':False, 'quant_scale':False} +quant_config = HqqConfig(dynamic_config={ + 'self_attn.q_proj':q4_config, + 'self_attn.k_proj':q4_config, + 'self_attn.v_proj':q4_config, + 'self_attn.o_proj':q4_config, + + 'mlp.gate_proj':q3_config, + 'mlp.up_proj' :q3_config, + 'mlp.down_proj':q3_config, +}) +``` + +النهج الثاني مثير للاهتمام بشكل خاص لتكميم Mixture-of-Experts (MoEs) لأن الخبراء أقل تأثرًا بإعدادات التكميم المنخفضة. + +بعد ذلك، قم ببساطة بتكميم النموذج كما يلي +``` Python +model = transformers.AutoModelForCausalLM.from_pretrained( + model_id, + torch_dtype=torch.float16, + device_map="cuda", + quantization_config=quant_config +) +``` + +## وقت التشغيل الأمثل + +يدعم HQQ واجهات برمجة تطبيقات خلفية مختلفة، بما في ذلك PyTorch النقي ونواة CUDA المخصصة لإلغاء التكميم. هذه الواجهات الخلفية مناسبة للجيل القديم من وحدات معالجة الرسومات (GPUs) وتدريب peft/QLoRA. +للحصول على استدلال أسرع، يدعم HQQ نواة 4-bit المدمجة (TorchAO وMarlin)، والتي تصل إلى 200 رمز/ثانية على 4090 واحد. +للحصول على مزيد من التفاصيل حول كيفية استخدام واجهات برمجة التطبيقات الخلفية، يرجى الرجوع إلى https://github.com/mobiusml/hqq/?tab=readme-ov-file#backend \ No newline at end of file From a4b2a6d0e3a95d61915ad13ead3e0a976ee08caf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:11 +0300 Subject: [PATCH 076/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/bitsandbytes.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/bitsandbytes.md | 303 ++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 docs/source/ar/quantization/bitsandbytes.md diff --git a/docs/source/ar/quantization/bitsandbytes.md b/docs/source/ar/quantization/bitsandbytes.md new file mode 100644 index 00000000000000..3f4ecae3a9156b --- /dev/null +++ b/docs/source/ar/quantization/bitsandbytes.md @@ -0,0 +1,303 @@ +# bitsandbytes + +[bitsandbytes](https://github.com/TimDettmers/bitsandbytes) هي أسهل طريقة لضغط نموذج إلى 8 بت و4 بت. تضاعف الضغط إلى 8 بت من تأثير القيم الشاذة على أداء النموذج من خلال ضرب القيم الشاذة في fp16 مع غير الشاذة في int8، وتحويل قيم غير الشاذة مرة أخرى إلى fp16، ثم جمعها معًا لإرجاع الأوزان في fp16. يضغط الضغط إلى 4 بت النموذج بشكل أكبر، ويستخدم عادةً مع [QLoRA](https://hf.co/papers/2305.14314) لضبط دقة النماذج الضخمة للغة (LLMs). + +لاستخدام bitsandbytes، تأكد من تثبيت المكتبات التالية: + + + + +```bash +pip install transformers accelerate bitsandbytes>0.37.0 +``` + + + + +```bash +pip install bitsandbytes>=0.39.0 +pip install --upgrade accelerate transformers +``` + + + + +الآن يمكنك ضغط نموذج عن طريق تمرير `BitsAndBytesConfig` إلى طريقة [`~PreTrainedModel.from_pretrained`] . يعمل هذا مع أي نموذج في أي طريقة، طالما أنه يدعم التحميل باستخدام Accelerate ويحتوي على طبقات `torch.nn.Linear` . + + + + +يضاعف الضغط إلى 8 بت من استخدام الذاكرة، وبالنسبة للنماذج الكبيرة، قم بتعيين `device_map="auto"` لاستخدام وحدات معالجة الرسومات (GPUs) المتوفرة بكفاءة: + +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_8bit=True) + +model_8bit = AutoModelForCausalLM.from_pretrained( + "bigscience/bloom-1b7", + quantization_config=quantization_config +) +``` + +بشكل افتراضي، يتم تحويل جميع الوحدات النمطية الأخرى مثل `torch.nn.LayerNorm` إلى `torch.float16`. يمكنك تغيير نوع بيانات هذه الوحدات النمطية باستخدام معلمة `torch_dtype` إذا أردت: + +```py +import torch +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_8bit=True) + +model_8bit = AutoModelForCausalLM.from_pretrained( + "facebook/opt-350m", + quantization_config=quantization_config, + torch_dtype=torch.float32 +) +model_8bit.model.decoder.layers[-1].final_layer_norm.weight.dtype +``` + +بمجرد ضغط نموذج إلى 8 بت، لا يمكنك دفع الأوزان المضغوطة إلى Hub إلا إذا كنت تستخدم أحدث إصدار من Transformers وbitsandbytes. إذا كان لديك أحدث الإصدارات، فيمكنك دفع النموذج 8 بت إلى Hub باستخدام طريقة [`~PreTrainedModel.push_to_hub`] . يتم أولاً دفع ملف تكوين الضغط، يليه أوزان النموذج المضغوط. + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_8bit=True) + +model = AutoModelForCausalLM.from_pretrained( + "bigscience/bloom-560m", + quantization_config=quantization_config +) +tokenizer = AutoTokenizer.from_pretrained("bigscience/bloom-560m") + +model.push_to_hub("bloom-560m-8bit") +``` + + + + +يقلل الضغط إلى 4 بت من استخدام الذاكرة بمقدار 4 مرات، وبالنسبة للنماذج الكبيرة، قم بتعيين `device_map="auto"` لاستخدام وحدات معالجة الرسومات (GPUs) المتوفرة بكفاءة: + +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_Multiplier = BitsAndBytesConfig(load_in_4bit=True) +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_4bit=True) + +model_4bit = AutoModelForCausalLM.from_pretrained( + "bigscience/bloom-1b7", + quantization_config=quantization_config +) +``` + +بشكل افتراضي، يتم تحويل جميع الوحدات النمطية الأخرى مثل `torch.nn.LayerNorm` إلى `torch.float16`. يمكنك تغيير نوع بيانات هذه الوحدات النمطية باستخدام معلمة `torch_dtype` إذا أردت: + +```py +import torch +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_4bit=True) + +model_4bit = AutoModelForCausalLM.from_pretrained( + "facebook/opt-350m", + quantization_config=quantization_config, + torch_dtype=torch.float32 +) +model_4bit.model.decoder.layers[-1].final_layer_norm.weight.dtype +``` + +إذا كان لديك `bitsandbytes>=0.41.3`، فيمكنك تسلسل نماذج 4 بت ودفعها على Hugging Face Hub. ما عليك سوى استدعاء `model.push_to_hub()` بعد تحميله بدقة 4 بت. يمكنك أيضًا حفظ نماذج 4 بت المتسلسلة محليًا باستخدام أمر `model.save_pretrained()` . + + + + + + +يتم دعم التدريب باستخدام أوزان 8 بت و4 بت فقط لتدريب المعلمات *الإضافية* . + + + +يمكنك التحقق من بصمة الذاكرة الخاصة بك باستخدام طريقة `get_memory_footprint` : + +```py +print(model.get_memory_footprint()) +``` + +يمكن تحميل النماذج المضغوطة من طريقة [`~PreTrainedModel.from_pretrained`] دون الحاجة إلى تحديد معلمات `load_in_8bit` أو `load_in_4bit` : + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer + +model = AutoModelForCausalLM.from_pretrained("{your_username}/bloom-560m-8bit", device_map="auto") +``` + +## 8-بت (LLM.int8() خوارزمية) + + + +تعرف على المزيد حول تفاصيل الضغط إلى 8 بت في [منشور المدونة](https://huggingface.co/blog/hf-bitsandbytes-integration) هذا! + + + +يستكشف هذا القسم بعض الميزات المحددة لنماذج 8 بت، مثل التفريغ وعتبات القيم الشاذة ومتجاوزة تحويل الوحدة النمطية والضبط الدقيق. + +### التفريغ + +8 بت يمكن أن تقوم النماذج بتفريغ الأوزان بين وحدة المعالجة المركزية (CPU) ووحدات معالجة الرسومات (GPU) لدعم تناسب النماذج الكبيرة جدًا في الذاكرة. يتم تخزين الأوزان المرسلة إلى وحدة المعالجة المركزية (CPU) فعليًا في **float32**، ولا يتم تحويلها إلى 8 بت. على سبيل المثال، لتمكين التفريغ لنموذج [bigscience/bloom-1b7](https://huggingface.co/bigscience/bloom-1b7) ، ابدأ بإنشاء [`BitsAndBytesConfig`]: + +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(llm_int8_enable_fp32_cpu_offload=True) +``` + +قم بتصميم خريطة جهاز مخصصة لتناسب كل شيء على وحدة معالجة الرسومات (GPU) الخاصة بك باستثناء `lm_head` ، والتي ستقوم بتفريغها إلى وحدة المعالجة المركزية (CPU): + +```py +device_map = { + "transformer.word_embeddings": 0, + "transformer.word_embeddings_layernorm": 0, + "lm_head": "cpu", + "transformer.h": 0, + "transformer.ln_f": 0, +} +``` + +الآن قم بتحميل نموذجك باستخدام `device_map` مخصص و `quantization_config` : + +```py +model_8bit = AutoModelForCausalLM.from_pretrained( + "bigscience/bloom-1b7", + device_map=device_map, + quantization_config=quantization_config, +) +``` + +### عتبة القيم الشاذة + +"القيمة الشاذة" هي قيمة حالة مخفية أكبر من عتبة معينة، ويتم حساب هذه القيم في fp16. في حين أن القيم موزعة عادة ([-3.5، 3.5])، يمكن أن يكون هذا التوزيع مختلفًا جدًا للنماذج الكبيرة ([-60، 6] أو [6، 60]). يعمل الضغط إلى 8 بت بشكل جيد للقيم ~5، ولكن بعد ذلك، هناك عقوبة أداء كبيرة. العتبة الافتراضية جيدة هي 6، ولكن قد تكون هناك حاجة إلى عتبة أقل للنماذج الأقل استقرارًا (نماذج صغيرة أو ضبط دقيق). + +لإيجاد أفضل عتبة لنموذجك، نوصي بالتجربة باستخدام معلمة `llm_int8_threshold` في [`BitsAndBytesConfig`]: + +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +model_id = "bigscience/bloom-1b7" + +quantization_config = BitsAndBytesConfig( + llm_int8_threshold=10, +) +```py +from transformers import AutoModelForCausalLM, BitsAndBytesConfig + +model_id = "bigscience/bloom-1b7" + +quantization_config = BitsAndBytesConfig( + llm_int8_threshold=10, +) + +model_8bit = AutoModelForCausalLM.from_pretrained( + model_id, + device_map=device_map, + quantization_config=quantization_config, +) +``` + +### تخطي تحويل الوحدة النمطية + +بالنسبة لبعض النماذج، مثل [Jukebox](model_doc/jukebox)، لا تحتاج إلى ضغط كل وحدة نمطية إلى 8 بت والتي يمكن أن تسبب عدم استقرار في الواقع. مع Jukebox، هناك عدة وحدات `lm_head` يجب تخطيها باستخدام معلمة `llm_int8_skip_modules` في [`BitsAndBytesConfig`]: + +```py +from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +model_id = "bigscience/bloom-1b7" + +quantization_config = BitsAndBytesConfig( + llm_int8_skip_modules=["lm_head"], +) + +model_8bit = AutoModelForCausalLM.from_pretrained( + model_id, + device_map="auto", + quantization_config=quantization_config, +) +``` + +### الضبط الدقيق + +مع مكتبة [PEFT](https://github.com/huggingface/peft) ، يمكنك ضبط دقة النماذج الكبيرة مثل [flan-t5-large](https://huggingface.co/google/flan-t5-large) و [facebook/opt-6.7b](https://huggingface.co/facebook/opt-6.7b) باستخدام الضغط إلى 8 بت. لا تحتاج إلى تمرير معلمة `device_map` للتدريب لأنه سيقوم تلقائيًا بتحميل نموذجك على وحدة معالجة الرسومات (GPU). ومع ذلك، يمكنك لا تزال تخصيص خريطة الجهاز مع معلمة `device_map` إذا كنت ترغب في ذلك (`device_map="auto"` يجب أن تستخدم فقط للاستدلال). + +## 4-بت (خوارزمية QLoRA) + + + +جرب الضغط إلى 4 بت في هذا [دفتر الملاحظات](https://colab.research.google.com/drive/1ge2F1QSK8Q7h0hn3YKuBCOAS0bK8E0wf) وتعرف على المزيد حول تفاصيله في [منشور المدونة](https://huggingface.co/blog/4bit-transformers-bitsandbytes) هذا. + + + +يستكشف هذا القسم بعض الميزات المحددة لنماذج 4 بت، مثل تغيير نوع بيانات الحساب، واستخدام نوع بيانات Normal Float 4 (NF4)، واستخدام الضغط المتداخل. + +### نوع بيانات الحساب + +لزيادة سرعة الحساب، يمكنك تغيير نوع البيانات من float32 (القيمة الافتراضية) إلى bf16 باستخدام معلمة `bnb_4bit_compute_dtype` في [`BitsAndBytesConfig`]: + +```py +import torch +from transformers import BitsAndBytesConfig + +quantization_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16) +``` + +### Normal Float 4 (NF4) + +NF4 هو نوع بيانات 4 بت من ورقة [QLoRA](https://hf.co/papers/2305.14314) ، تم تكييفه مع الأوزان المبدئية من توزيع عادي. يجب عليك استخدام NF4 للتدريب على نماذج الأساس 4 بت. يمكن تكوين هذا باستخدام معلمة `bnb_4bit_quant_type` في [`BitsAndBytesConfig`]: + +```py +from transformers import BitsAndBytesConfig + +nf4_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_quant_type="nf4", +) + +model_nf4 = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=nf4_config) +``` + +بالنسبة للاستدلال، لا يكون لنوع `bnb_4bit_quant_type` تأثير كبير على الأداء. ومع ذلك، للبقاء متسقًا مع أوزان النموذج، يجب عليك استخدام قيم `bnb_4bit_compute_dtype` و `torch_dtype` . + +### الضغط المتداخل + +الضغط المتداخل هو تقنية يمكن أن توفر ذاكرة إضافية دون تكلفة أداء إضافية. تقوم هذه الميزة بضغط الأوزان المضغوطة بالفعل لتوفر 0.4 بت/معلمة إضافية. على سبيل المثال، مع الضغط المتداخل، يمكنك ضبط نموذج [Llama-13b](https://huggingface.co/meta-llama/Llama-2-13b) بدقة على وحدة معالجة الرسومات (GPU) NVIDIA T4 بسعة 16 جيجابايت مع طول تسلسل يبلغ 1024، وحجم دفعة يبلغ 1، وتمكين تراكم التدرجات مع 4 خطوات. + +```py +from transformers import BitsAndBytesConfig + +double_quant_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_use_double_quant=True, +) + +model_double_quant = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-13b", quantization_config=double_quant_config) +``` + +## فك ضغط نماذج `bitsandbytes` + +بمجرد ضغط نموذج، يمكنك فك ضغطه إلى الدقة الأصلية ولكن قد يؤدي ذلك إلى فقدان جودة النموذج قليلاً. تأكد من أن لديك ذاكرة وصول عشوائي (RAM) لوحدة معالجة الرسومات (GPU) كافية لتناسب النموذج الذي تم فك ضغطه. + +```python +from transformers import AutoModelForCausalLM, BitsAndBytesConfig, AutoTokenizer + +model_id = "facebook/opt-125m" + +model = AutoModelForCausalLM.from_pretrained(model_id, BitsAndBytesConfig(load_in_4bit=True)) +tokenizer = AutoTokenizer.from_pretrained(model_id) + +model.dequantize() + +text = tokenizer("Hello my name is", return_tensors="pt").to(0) + +out = model.generate(**text) +print(tokenizer.decode(out[0])) +``` \ No newline at end of file From 37495b826fcb6f4b27c942d7d201d27625d152a5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:13 +0300 Subject: [PATCH 077/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/quantization/fbgemm=5Ffp8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/quantization/fbgemm_fp8.md | 59 +++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/quantization/fbgemm_fp8.md diff --git a/docs/source/ar/quantization/fbgemm_fp8.md b/docs/source/ar/quantization/fbgemm_fp8.md new file mode 100644 index 00000000000000..0712084b99ae9c --- /dev/null +++ b/docs/source/ar/quantization/fbgemm_fp8.md @@ -0,0 +1,59 @@ + + +# FBGEMM FP8 + +مع طريقة FBGEMM FP8 quantization، يمكنك تحويل نموذجك إلى صيغة FP8 (W8A8): + +- سيتم تحويل أوزان النموذج إلى 8 بت (FP8) لكل قناة. +- سيتم تحويل تنشيط النموذج إلى 8 بت (FP8) لكل رمز. + +تعتمد هذه الطريقة على مكتبة FBGEMM [https://github.com/pytorch/FBGEMM] التي توفر عمليات فعالة لضرب المصفوفات ذات الدقة المنخفضة للدفعات الصغيرة، كما تدعم تقنيات تقليل فقدان الدقة مثل التحويل الكمي row-wise والتحويل الكمي outlier-aware. + +> [!TIP] +> أنت بحاجة إلى وحدة معالجة رسومات GPU ذات قدرة حاسوبية >=9 (مثل H100) + +قبل البدء، تأكد من تثبيت المكتبات التالية بأحدث إصداراتها: + +```bash +pip install --upgrade accelerate fbgemm-gpu torch +``` + +إذا واجهتك مشكلات مع مكتبة fbgemm-gpu وtorch، فقد تحتاج إلى تثبيت الإصدار الليلي. يمكنك اتباع التعليمات [هنا](https://pytorch.org/FBGEMM/fbgemm_gpu-development/InstallationInstructions.html#fbgemm-gpu-install-libraries:~:text=found%20here.-,Install%20the%20FBGEMM_GPU%20Package,-Install%20through%20PyTorch). + + +```py +from transformers import FbgemmFp8Config, AutoModelForCausalLM, AutoTokenizer + +model_name = "meta-llama/Meta-Llama-3-8B" +quantization_config = FbgemmFp8Config() +quantized_model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", quantization_config=quantization_config) + +tokenizer = AutoTokenizer.from_pretrained(model_name) +input_text = "ما هو عشاءنا الليلة؟" +input_ids = tokenizer(input_text, return_tensors="pt").to("cuda") + +output = quantized_model.generate(**input_ids, max_new_tokens=10) +print(tokenizer.decode(output[0], skip_special_tokens=True)) +``` + +يمكن حفظ النموذج المحول باستخدام `saved_pretrained` وإعادة استخدامه مرة أخرى عبر `from_pretrained`. + +```py +quant_path = "/path/to/save/quantized/model" +model.save_pretrained(quant_path) +model = AutoModelForCausalLM.from_pretrained(quant_path, device_map="auto") +``` \ No newline at end of file From 998c60653e1677d43a42e3d48ba292ff0991bb36 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:15 +0300 Subject: [PATCH 078/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/document=5Fquestion=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/document_question_answering.md | 381 ++++++++++++++++++ 1 file changed, 381 insertions(+) create mode 100644 docs/source/ar/tasks/document_question_answering.md diff --git a/docs/source/ar/tasks/document_question_answering.md b/docs/source/ar/tasks/document_question_answering.md new file mode 100644 index 00000000000000..de7bae1b710b51 --- /dev/null +++ b/docs/source/ar/tasks/document_question_answering.md @@ -0,0 +1,381 @@ +# الإجابة على الأسئلة الواردة في الوثيقة + +[[open-in-colab]] + +الإجابة على الأسئلة الواردة في الوثيقة، والتي يشار إليها أيضًا باسم الإجابة المرئية على الأسئلة الواردة في الوثيقة، هي مهمة تتضمن تقديم إجابات على الأسئلة المطروحة حول صور المستندات. المدخلات إلى النماذج التي تدعم هذه المهمة هي عادة مزيج من الصورة والسؤال، والناتج هو إجابة معبر عنها باللغة الطبيعية. تستخدم هذه النماذج أوضاعًا متعددة، بما في ذلك النص، ومواضع الكلمات (حدود الإحداثيات)، والصورة نفسها. + +يوضح هذا الدليل كيفية: + +- ضبط نموذج LayoutLMv2 الدقيق على مجموعة بيانات DocVQA. +- استخدام نموذجك المضبوط دقيقًا للاستنتاج. + + + +لمعرفة جميع التصميمات ونقاط التحقق المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/image-to-text) + + + +يحل LayoutLMv2 مهمة الإجابة على الأسئلة الواردة في الوثيقة عن طريق إضافة رأس للإجابة على الأسئلة أعلى حالات الرموز النهائية للرموز، للتنبؤ بمواضع رموز البدء والنهاية للإجابة. وبعبارة أخرى، تتم معاملة المشكلة على أنها إجابة استخراجية: استخراج قطعة المعلومات التي تجيب على السؤال، بالنظر إلى السياق. يأتي السياق من إخراج محرك التعرف الضوئي على الحروف، وهو هنا Tesseract من Google. + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية. يعتمد LayoutLMv2 على detectron2 و torchvision و tesseract. + +```bash +pip install -q transformers datasets +``` + +```bash +pip install 'git+https://github.com/facebookresearch/detectron2.git' +pip install torchvision +``` + +```bash +sudo apt install tesseract-ocr +pip install -q pytesseract +``` + +بمجرد تثبيت جميع التبعيات، أعد تشغيل وقت التشغيل الخاص بك. + +نحن نشجعك على مشاركة نموذجك مع المجتمع. قم بتسجيل الدخول إلى حساب Hugging Face الخاص بك لتحميله إلى 🤗 Hub. +عند المطالبة، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +دعونا نحدد بعض المتغيرات العالمية. + +```py +>>> model_checkpoint = "microsoft/layoutlmv2-base-uncased" +>>> batch_size = 4 +``` + +## تحميل البيانات + +في هذا الدليل، نستخدم عينة صغيرة من DocVQA المعالجة مسبقًا والتي يمكنك العثور عليها على 🤗 Hub. إذا كنت ترغب في استخدام مجموعة DocVQA الكاملة، فيمكنك التسجيل وتنزيلها من [الصفحة الرئيسية لـ DocVQA](https://rrc.cvc.uab.es/?ch=17). إذا قمت بذلك، للمتابعة مع هذا الدليل، تحقق من [كيفية تحميل الملفات إلى مجموعة بيانات 🤗](https://huggingface.co/docs/datasets/loading#local-and-remote-files). + +```py +>>> from datasets import load_dataset + +>>> dataset = load_dataset("nielsr/docvqa_1200_examples") +>>> dataset +DatasetDict({ + train: Dataset({ + features: ['id', 'image', 'query', 'answers', 'words', 'bounding_boxes', 'answer'], + num_rows: 1000 + }) + test: Dataset({ + features: ['id', 'image', 'query', 'answers', 'words', 'bounding_boxes', 'answer'], + num_rows: 200 + }) +}) +``` + +كما ترى، تم تقسيم مجموعة البيانات إلى مجموعات تدريب واختبار بالفعل. الق نظرة على مثال عشوائي للتعرف على الميزات. + +```py +>>> dataset["train"].features +``` +كما ترى، تم تقسيم مجموعة البيانات إلى مجموعات تدريب واختبار بالفعل. الق نظرة على مثال عشوائي للتعرف على الميزات. + +```py +>>> dataset["train"].features +``` + +هذا ما تمثله الحقول الفردية: +* `id`: معرف المثال +* `image`: كائن PIL.Image.Image يحتوي على صورة المستند +* `query`: سلسلة الاستعلام - سؤال اللغة الطبيعية المطروح، بعدة لغات +* `answers`: قائمة الإجابات الصحيحة التي قدمها المعلقون البشريون +* `words` و `bounding_boxes`: نتائج التعرف الضوئي على الحروف، والتي لن نستخدمها هنا +* `answer`: إجابة تمت مطابقتها بواسطة نموذج مختلف لن نستخدمه هنا + +دعونا نترك فقط الأسئلة باللغة الإنجليزية، ونقوم بإسقاط ميزة "الإجابة" التي يبدو أنها تحتوي على تنبؤات بواسطة نموذج آخر. +سنقوم أيضًا بأخذ الإجابة الأولى من مجموعة الإجابات التي قدمها المعلقون. أو يمكنك أخذ عينة عشوائية منها. + +```py +>>> updated_dataset = dataset.map(lambda example: {"question": example["query"]["en"]}, remove_columns=["query"]) +>>> updated_dataset = updated_dataset.map( +... lambda example: {"answer": example["answers"][0]}, remove_columns=["answer", "answers"] +... ) +``` + +لاحظ أن نقطة التحقق LayoutLMv2 التي نستخدمها في هذا الدليل تم تدريبها مع `max_position_embeddings = 512` (يمكنك +العثور على هذه المعلومات في ملف `config.json` الخاص بنقطة التحقق [هنا](https://huggingface.co/microsoft/layoutlmv2-base-uncased/blob/main/config.json#L18)). +يمكننا تقليص الأمثلة ولكن لتجنب الموقف الذي قد تكون فيه الإجابة في نهاية مستند طويل وتنتهي مقتطعة، +هنا سنقوم بإزالة الأمثلة القليلة التي من المحتمل أن ينتهي فيها تضمينها إلى أكثر من 512. +إذا كانت معظم المستندات في مجموعة البيانات الخاصة بك طويلة، فيمكنك تنفيذ إستراتيجية النافذة المنزلقة - تحقق من [هذا الدفتر](https://github.com/huggingface/notebooks/blob/main/examples/question_answering.ipynb) للحصول على التفاصيل. + +```py +>>> updated_dataset = updated_dataset.filter(lambda x: len(x["words"]) + len(x["question"].split()) < 512) +``` + +في هذه المرحلة، دعنا نزيل أيضًا ميزات التعرف الضوئي على الحروف من هذه المجموعة من البيانات. هذه هي نتيجة التعرف الضوئي على الحروف لضبط نموذج مختلف. لا يزالون بحاجة إلى بعض المعالجة إذا أردنا استخدامها، لأنها لا تتطابق مع متطلبات الإدخال +من النموذج الذي نستخدمه في هذا الدليل. بدلاً من ذلك، يمكننا استخدام [`LayoutLMv2Processor`] على البيانات الأصلية لكل من التعرف الضوئي على الحروف +والتنفيذ. بهذه الطريقة سنحصل على المدخلات التي تتطابق مع الإدخال المتوقع للنموذج. إذا كنت تريد معالجة الصور يدويًا، +تحقق من وثائق نموذج [`LayoutLMv2`](../model_doc/layoutlmv2) لمعرفة تنسيق الإدخال الذي يتوقعه النموذج. + +```py +>>> updated_dataset = updated_dataset.remove_columns("words") +>>> updated_dataset = updated_dataset.remove_columns("bounding_boxes") +``` + +أخيرًا، لن يكون استكشاف البيانات مكتملاً إذا لم نلقي نظرة على مثال على الصورة. + +```py +>>> updated_dataset["train"][11]["image"] +``` + +
+ مثال DocVQA +
+ +## معالجة البيانات مسبقًا + +مهمة الإجابة على الأسئلة الواردة في الوثيقة هي مهمة متعددة الوسائط، ويجب التأكد من معالجة المدخلات من كل وسيط +وفقًا لتوقعات النموذج. دعونا نبدأ بتحميل [`LayoutLMv2Processor`]، والذي يجمع داخليًا بين معالج الصور الذي يمكنه التعامل مع بيانات الصور ومعالج الرموز الذي يمكنه تشفير بيانات النص. + +```py +>>> from transformers import AutoProcessor + +>>> processor = AutoProcessor.from_pretrained(model_checkpoint) +``` + +### معالجة صور المستندات +```py +>>> from transformers import AutoProcessor + +>>> processor = AutoProcessor.from_pretrained(model_checkpoint) +``` + +### معالجة صور المستندات + +أولاً، دعونا نقوم بإعداد صور المستندات للنموذج بمساعدة `image_processor` من المعالج. +بحكم التوصيف، يقوم معالج الصور بإعادة تحجيم الصور إلى 224x224، والتأكد من أن لديها الترتيب الصحيح لقنوات الألوان، +تطبيق التعرف الضوئي على الحروف باستخدام Tesseract للحصول على الكلمات وحدود الإحداثيات المعيارية. في هذا البرنامج التعليمي، هذه الافتراضيات هي بالضبط ما نحتاجه. +اكتب دالة تطبق المعالجة الافتراضية على دفعة من الصور وتعيد نتائج التعرف الضوئي على الحروف. + +```py +>>> image_processor = processor.image_processor + + +>>> def get_ocr_words_and_boxes(examples): +... images = [image.convert("RGB") for image in examples["image"]] +... encoded_inputs = image_processor(images) + +... examples["image"] = encoded_inputs.pixel_values +... examples["words"] = encoded_inputs.words +... examples["boxes"] = encoded_inputs.boxes + +... return examples +``` + +لتطبيق هذه المعالجة المسبقة على مجموعة البيانات بأكملها بطريقة سريعة، استخدم [`~datasets.Dataset.map`]. + +```py +>>> dataset_with_ocr = updated_dataset.map(get_ocr_words_and_boxes, batched=True, batch_size=2) +``` + +### معالجة بيانات النص + +بمجرد تطبيق التعرف الضوئي على الصور، نحتاج إلى تشفير الجزء النصي من مجموعة البيانات لإعدادها للنموذج. +ينطوي هذا على تحويل الكلمات وحدود الإحداثيات التي حصلنا عليها في الخطوة السابقة إلى مستوى الرمز `input_ids` و `attention_mask` +، `token_type_ids` و `bbox`. لمعالجة النص، سنحتاج إلى `tokenizer` من المعالج. + +```py +>>> tokenizer = processor.tokenizer +``` + +بالإضافة إلى المعالجة المذكورة أعلاه، نحتاج أيضًا إلى إضافة العلامات إلى النموذج. بالنسبة لنماذج `xxxForQuestionAnswering` في 🤗 Transformers، +تتكون العلامات من `start_positions` و `end_positions`، والتي تشير إلى الرمز الموجود في +بداية ونهاية الإجابة. + +دعونا نبدأ بذلك. قم بتعريف دالة مساعدة يمكنها العثور على قائمة فرعية (الإجابة المقسمة إلى كلمات) في قائمة أكبر (قائمة الكلمات). + +ستأخذ هذه الدالة كإدخال قائمتين، `words_list` و `answer_list`. ثم سيقوم بالتنقل عبر `words_list` والتحقق +إذا كان الكلمة الحالية في `words_list` (words_list [i]) متساوية مع الكلمة الأولى من answer_list (answer_list [0]) وإذا +كانت القائمة الفرعية لـ `words_list` بدءًا من الكلمة الحالية وطولها متساوٍ `مع answer_list`. +إذا كان هذا الشرط صحيحًا، فهذا يعني أنه تم العثور على تطابق، وستقوم الدالة بتسجيل المطابقة، وموضع البدء الخاص بها، +وموضع النهاية (idx + len (answer_list) - 1). إذا تم العثور على أكثر من تطابق واحد، فستعيد الدالة فقط الأول. +إذا لم يتم العثور على أي تطابق، فستعيد الدالة (None، 0، و 0). + +```py +>>> def subfinder(words_list, answer_list): +... matches = [] +... start_indices = [] +... end_indices = [] +... for idx, i in enumerate(range(len(words_list))): +... if words_list[i] == answer_list[0] and words_list[i : i + len(answer_list)] == answer_list: +... matches.append(answer_list) +... start_indices.append(idx) +... end_indices.append(idx + len(answer_list) - 1) +... if matches: +... return matches[0], start_indices[0], end_indices[0] +... else: +... return None, 0, 0 +``` + +لتوضيح كيفية عثور هذه الدالة على موضع الإجابة، دعنا نستخدمها في مثال: +لتوضيح كيفية عثور هذه الدالة على موضع الإجابة، دعنا نستخدمها في مثال: + +```py +>>> example = dataset_with_ocr["train"][1] +>>> words = [word.lower() for word in example["words"]] +>>> match, word_idx_start, word_idx_end = subfinder(words, example["answer"].lower().split()) +>>> print("Question: ", example["question"]) +>>> print("Words:", words) +>>> print("Answer: ", example["answer"]) +>>> print("start_index", word_idx_start) +>>> print("end_index", word_idx_end) +Question: من هو في سي سي في هذه الرسالة؟ +Words: ['wie', 'baw', 'brown', '&', 'williamson', 'tobacco', 'corporation', 'research', '&', 'development', 'internal', 'correspondence', 'to:', 'r.', 'h.', 'honeycutt', 'ce:', 't.f.', 'riehl', 'from:', '.', 'c.j.', 'cook', 'date:', 'may', '8,', '1995', 'subject:', 'review', 'of', 'existing', 'brainstorming', 'ideas/483', 'the', 'major', 'function', 'of', 'the', 'product', 'innovation', 'graup', 'is', 'to', 'develop', 'marketable', 'nove!', 'products', 'that', 'would', 'be', 'profitable', 'to', 'manufacture', 'and', 'sell.', 'novel', 'is', 'defined', 'as:', 'of', 'a', 'new', 'kind,', 'or', 'different', 'from', 'anything', 'seen', 'or', 'known', 'before.', 'innovation', 'is', 'defined', 'as:', 'something', 'new', 'or', 'different', 'introduced;', 'act', 'of', 'innovating;', 'introduction', 'of', 'new', 'things', 'or', 'methods.', 'the', 'products', 'may', 'incorporate', 'the', 'latest', 'technologies,', 'materials', 'and', 'know-how', 'available', 'to', 'give', 'then', 'a', 'unique', 'taste', 'or', 'look.', 'the', 'first', 'task', 'of', 'the', 'product', 'innovation', 'group', 'was', 'to', 'assemble,', 'review', 'and', 'categorize', 'a', 'list', 'of', 'existing', 'brainstorming', 'ideas.', 'ideas', 'were', 'grouped', 'into', 'two', 'major', 'categories', 'labeled', 'appearance', 'and', 'taste/aroma.', 'these', 'categories', 'are', 'used', 'for', 'novel', 'products', 'that', 'may', 'differ', 'from', 'a', 'visual', 'and/or', 'taste/aroma', 'point', 'of', 'view', 'compared', 'to', 'canventional', 'cigarettes.', 'other', 'categories', 'include', 'a', 'combination', 'of', 'the', 'above,', 'filters,', 'packaging', 'and', 'brand', 'extensions.', 'appearance', 'this', 'category', 'is', 'used', 'for', 'novel', 'cigarette', 'constructions', 'that', 'yield', 'visually', 'different', 'products', 'with', 'minimal', 'changes', 'in', 'smoke', 'chemistry', 'two', 'cigarettes', 'in', 'cne.', 'emulti-plug', 'te', 'build', 'yaur', 'awn', 'cigarette.', 'eswitchable', 'menthol', 'or', 'non', 'menthol', 'cigarette.', '*cigarettes', 'with', 'interspaced', 'perforations', 'to', 'enable', 'smoker', 'to', 'separate', 'unburned', 'section', 'for', 'future', 'smoking.', '«short', 'cigarette,', 'tobacco', 'section', '30', 'mm.', '«extremely', 'fast', +هذا هو النص المترجم مع اتباع التعليمات التي قدمتها: + +دعونا نتحقق من شكل خصائص مجموعة البيانات المشفرة: + +```py +>>> encoded_train_dataset.features +{'image': Sequence(feature=Sequence(feature=Sequence(feature=Value(dtype='uint8', id=None), length=-1, id=None), length=-1, id=None), length=-1, id=None), + 'input_ids': Sequence(feature=Value(dtype='int32', id=None), length=-1, id=None), + 'token_type_ids': Sequence(feature=Value(dtype='int8', id=None), length=-1, id=None), + 'attention_mask': Sequence(feature=Value(dtype='int8', id=None), length=-1, id=None), + 'bbox': Sequence(feature=Sequence(feature=Value(dtype='int64', id=None), length=-1, id=None), length=-1, id=None), + 'start_positions': Value(dtype='int64', id=None), + 'end_positions': Value(dtype='int64', id=None)} +``` + +## التقييم + +يتطلب تقييم الإجابة على الأسئلة المتعلقة بالوثائق قدرًا كبيرًا من المعالجة اللاحقة. ولتجنب استغراق الكثير من وقتك، يتخطى هذا الدليل خطوة التقييم. لا يزال [`Trainer`] يحسب خسارة التقييم أثناء التدريب حتى تظل على دراية بأداء نموذجك. عادةً ما يتم تقييم الإجابة الاستخراجية على الأسئلة باستخدام F1/exact match. + +إذا كنت ترغب في تنفيذها بنفسك، فراجع فصل [Question Answering](https://huggingface.co/course/chapter7/7?fw=pt#postprocessing) في دورة Hugging Face للاستلهام. + +## التدريب + +تهانينا! لقد نجحت في تخطي أصعب جزء في هذا الدليل، والآن أنت مستعد لتدريب نموذجك الخاص. ينطوي التدريب على الخطوات التالية: + +* قم بتحميل النموذج باستخدام [`AutoModelForDocumentQuestionAnswering`] باستخدام نفس نقطة التفتيش كما في مرحلة ما قبل المعالجة. +* حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. +* حدد دالة لدمج الأمثلة معًا، حيث ستكون [`DefaultDataCollator`] مناسبة تمامًا +* قم بتمرير فرط معلمات التدريب إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات ودمج البيانات. +* استدعاء [`~Trainer.train`] لضبط نموذجك الدقيق. + +```py +>>> from transformers import AutoModelForDocumentQuestionAnswering + +>>> model = AutoModelForDocumentQuestionAnswering.from_pretrained(model_checkpoint) +``` + +في [`TrainingArguments`]، استخدم `output_dir` لتحديد مكان حفظ نموذجك، وقم بتكوين فرط المعلمات كما تراه مناسبًا. + +إذا كنت ترغب في مشاركة نموذجك مع المجتمع، قم بتعيين `push_to_hub` إلى `True` (يجب أن تكون قد سجلت الدخول إلى Hugging Face لتحميل نموذجك). في هذه الحالة، سيكون `output_dir` أيضًا اسم المستودع حيث سيتم دفع نقطة تفتيش النموذج الخاص بك. + +```py +>>> from transformers import TrainingArguments + +>>> # استبدل هذا بمعرف مستودعك +>>> repo_id = "MariaK/layoutlmv2-base-uncased_finetuned_docvqa" + +>>> training_args = TrainingArguments( +... output_dir=repo_id, +... per_device_train_batch_size=4, +... num_train_epochs=20, +... save_steps=200, +... logging_steps=50, +... eval_strategy="steps", +... learning_rate=5e-5, +... save_total_limit=2, +... remove_unused_columns=False, +... push_to_hub=True, +... ) +``` + +قم بتعريف دالة بسيطة لدمج البيانات لدمج الأمثلة معًا. + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator() +``` + +أخيرًا، قم بجمع كل شيء معًا، واستدعاء [`~Trainer.train`]: + +```py +>>> from transformers import Trainer + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... data_collator=data_collator, +... train_dataset=encoded_train_dataset, +... eval_dataset=encoded_test_dataset, +... tokenizer=processor, +... ) + +>>> trainer.train() +``` + +لإضافة النموذج النهائي إلى 🤗 Hub، قم بإنشاء بطاقة نموذج واستدعاء `push_to_hub`: + +```py +>>> trainer.create_model_card() +>>> trainer.push_to_hub() +``` + +## الاستنتاج + +الآن بعد أن قمت بضبط نموذج LayoutLMv2 وتحميله إلى 🤗 Hub، يمكنك استخدامه للاستنتاج. أسهل طريقة لتجربة نموذجك المضبوط للاستنتاج هي استخدامه في [`Pipeline`]. + +دعنا نأخذ مثالاً: + +```py +>>> example = dataset["test"][2] +>>> question = example["query"]["en"] +>>> image = example["image"] +>>> print(question) +>>> print(example["answers"]) +'Who is ‘presiding’ TRRF GENERAL SESSION (PART 1)?' +['TRRF Vice President', 'lee a. waller'] +``` + +بعد ذلك، قم بتنفيذ خط أنابيب للإجابة على الأسئلة المتعلقة بالوثائق باستخدام نموذجك، ومرر مزيج الصورة + السؤال إليه. + +```py +>>> from transformers import pipeline + +>>> qa_pipeline = pipeline("document-question-answering", model="MariaK/layoutlmv2-base-uncased_finetuned_docvqa") +>>> qa_pipeline(image, question) +[{'score': 0.9949808120727539, + 'answer': 'Lee A. Waller', + 'start': 55, + 'end': 57}] +``` + +يمكنك أيضًا محاكاة نتائج خط الأنابيب يدويًا إذا كنت ترغب في ذلك: + +1. خذ صورة وسؤال، وقم بإعدادهما للنموذج باستخدام المعالج من نموذجك. +2. قم بتمرير نتيجة المعالجة المسبقة عبر النموذج. +3. يعيد النموذج `start_logits` و`end_logits`، والتي تشير إلى الرمز الذي يكون في بداية الإجابة والرمز الذي يكون في نهاية الإجابة. كلاهما له شكل (batch_size، sequence_length). +4. قم بإجراء argmax على البعد الأخير لكل من `start_logits` و`end_logits` للحصول على `start_idx` المتوقع و`end_idx`. +5. فك تشفير الإجابة باستخدام المعالج. + +```py +>>> import torch +>>> from transformers import AutoProcessor +>>> from transformers import AutoModelForDocumentQuestionAnswering + +>>> processor = AutoProcessor.from_pretrained("MariaK/layoutlmv2-base-uncased_finetuned_docvqa") +>>> model = AutoModelForDocumentQuestionAnswering.from_pretrained("MariaK/layoutlmv2-base-uncased_finetuned_docvqa") + +>>> with torch.no_grad(): +... encoding = processor(image.convert("RGB"), question, return_tensors="pt") +... outputs = model(**encoding) +... start_logits = outputs.start_logits +... end_logits = outputs.end_logits +... predicted_start_idx = start_logits.argmax(-1).item() +... predicted_end_idx = end_logits.argmax(-1).item() + +>>> processor.tokenizer.decode(encoding.input_ids.squeeze()[predicted_start_idx : predicted_end_idx + 1]) +'lee a. waller' +``` \ No newline at end of file From 28457508222ae436caffeadb83259ed68b64ba62 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:17 +0300 Subject: [PATCH 079/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/asr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/asr.md | 355 ++++++++++++++++++++++++++++++++++++ 1 file changed, 355 insertions(+) create mode 100644 docs/source/ar/tasks/asr.md diff --git a/docs/source/ar/tasks/asr.md b/docs/source/ar/tasks/asr.md new file mode 100644 index 00000000000000..e9ad2a6a2f11c6 --- /dev/null +++ b/docs/source/ar/tasks/asr.md @@ -0,0 +1,355 @@ +# التعرف التلقائي على الكلام + +[[open-in-colab]] + + + +يحول التعرف التلقائي على الكلام (ASR) إشارة الكلام إلى نص، عن طريق رسم خريطة لسلسلة من المدخلات الصوتية إلى مخرجات نصية. تستخدم المساعدات الافتراضية مثل Siri وAlexa نماذج ASR لمساعدة المستخدمين يوميًا، وهناك العديد من التطبيقات المفيدة الأخرى التي تواجه المستخدمين مثل التعليق المباشر وتدوين الملاحظات أثناء الاجتماعات. + +سيوضح هذا الدليل لك كيفية: + +1. ضبط نموذج [Wav2Vec2](https://huggingface.co/facebook/wav2vec2-base) الدقيق على مجموعة بيانات [MInDS-14](https://huggingface.co/datasets/PolyAI/minds14) لنسخ الصوت إلى نص. +2. استخدام النموذج الدقيق للاستنتاج. + + + +لمشاهدة جميع التصميمات ونقاط التفتيش المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/automatic-speech-recognition) + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate jiwer +``` + +نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات MInDS-14 + +ابدأ بتحميل جزء فرعي أصغر من مجموعة بيانات [MInDS-14](https://huggingface.co/datasets/PolyAI/minds14) من مكتبة Datasets 🤗. سيعطيك هذا فرصة لتجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from datasets import load_dataset, Audio + +>>> minds = load_dataset("PolyAI/minds14", name="en-US", split="train[:100]") +``` + +قسِّم مجموعة البيانات إلى مجموعات فرعية للتدريب والاختبار باستخدام طريقة [`~Dataset.train_test_split`] : + +```py +>>> minds = minds.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مجموعة البيانات: + +```py +>>> minds +DatasetDict({ + train: Dataset({ + features: ['path', 'audio', 'transcription', 'english_transcription', 'intent_class', 'lang_id'], + num_rows: 16 + }) + test: Dataset({ + features: ['path', 'audio', 'transcription', 'english_transcription', 'intent_class', 'lang_id'], + num_rows: 4 + }) +}) +``` + +في حين أن مجموعة البيانات تحتوي على الكثير من المعلومات المفيدة، مثل `lang_id` و`english_transcription`، فسوف تركز على `audio` و`transcription` في هذا الدليل. أزل الأعمدة الأخرى باستخدام طريقة [`~datasets.Dataset.remove_columns`] : + +```py +>>> minds = minds.remove_columns(["english_transcription", "intent_class", "lang_id"]) +``` + +الق نظرة على المثال مرة أخرى: + +```py +>>> minds["train"][0] +{'audio': {'array': array([-0.00024414, 0. , 0. , ..., 0.00024414, + 0.00024414, 0.00024414], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602ba9e2963e11ccd901cd4f.wav', + 'sampling_rate': 8000}, + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948eMultiplier: 1.0 +>>> minds = minds.cast_column("audio", Audio(sampling_rate=16_000)) +>>> minds["train"][0] +{'audio': {'array': array([-2.38064706e-04, -1.58618059e-04, -5.43987835e-06, ..., + 2.78103951e-04, 2.38446111e-04, 1.18740834e-04], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602ba9e2963e11ccd901cd4f.wav', + 'sampling_rate': 16000}, + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602ba9e2963e11ccd901cd4f.wav', + 'transcription': "hi I'm trying to use the banking app on my phone and currently my checking and savings account balance is not refreshing"} +``` + +هناك حقلان: + +- `audio`: مصفوفة أحادية البعد لإشارة الكلام التي يجب استدعاؤها لتحميل وإعادة أخذ عينات ملف الصوت. +- `transcription`: النص المستهدف. + +## معالجة مسبقة + +الخطوة التالية هي تحميل معالج Wav2Vec2 لمعالجة إشارة الصوت: + +```py +>>> from transformers import AutoProcessor + +>>> processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base") +``` + +تحتوي مجموعة بيانات MInDS-14 على معدل أخذ عينات يبلغ 8000 كيلو هرتز (يمكنك العثور على هذه المعلومات في [بطاقة مجموعة البيانات](https://huggingface.co/datasets/PolyAI/minds14))، مما يعني أنه سيتعين عليك إعادة أخذ عينات من مجموعة البيانات إلى 16000 كيلو هرتز لاستخدام نموذج Wav2Vec2 المدرب مسبقًا: + +```py +>>> minds = minds.cast_column("audio", Audio(sampling_rate=16_000)) +>>> minds["train"][0] +{'audio': {'array': array([-2.38064706e-04, -1.58618059e-04, -5.43987835e-06, ..., + 2.78103951e-04, 2.38446111e-04, 1.18740834e-04], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602ba9e2963e11ccd901cd4f.wav', + 'sampling_rate': 16000}, + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602ba9e2963e11ccd901cd4f.wav', + 'transcription': "hi I'm trying to use the banking app on my phone and currently my checking and savings account balance is not refreshing"} +``` + +كما هو موضح في `transcription` أعلاه، يحتوي النص على مزيج من الأحرف الكبيرة والصغيرة. تم تدريب معجم Wav2Vec2 فقط على الأحرف الكبيرة، لذلك سيتعين عليك التأكد من أن النص يتطابق مع مفردات المعجم: + +```py +>>> def uppercase(example): +... return {"transcription": example["transcription"].upper()} + + +>>> minds = minds.map(uppercase) +``` + +الآن قم بإنشاء دالة معالجة مسبقة تقوم بما يلي: + +1. استدعاء عمود `audio` لتحميل وإعادة أخذ عينات ملف الصوت. +2. استخراج `input_values` من ملف الصوت ورمز `transcription` باستخدام المعالج. + +```py +>>> def prepare_dataset(batch): +... audio = batch["audio"] +... batch = processor(audio["array"], sampling_rate=audio["sampling_rate"], text=batch["transcription"]) +... batch["input_length"] = len(batch["input_values"][0]) +... return batch +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم وظيفة [`~datasets.Dataset.map`] من مكتبة Datasets 🤗. يمكنك تسريع `map` عن طريق زيادة عدد العمليات باستخدام معلمة `num_proc` . أزل الأعمدة التي لا تحتاجها باستخدام طريقة [`~datasets.Dataset.remove_columns`] : + +```py +>>> encoded_minds = minds.map(prepare_dataset, remove_columns=minds.column_names["train"], num_proc=4) +``` + +لا تحتوي مكتبة 🤗 Transformers على جامع بيانات للتعرف التلقائي على الكلام (ASR)، لذلك سيتعين عليك تكييف [`DataCollatorWithPadding`] لإنشاء دفعة من الأمثلة. كما أنه سيقوم تلقائيًا بتبطين نصك وتسمياتك إلى طول العنصر الأطول في دفعتها (بدلاً من مجموعة البيانات بأكملها) بحيث يكون لها طول موحد. في حين أنه من الممكن تبطين نصك في دالة `tokenizer` عن طريق تعيين `padding=True`، فإن التبطين الديناميكي أكثر كفاءة. + +على عكس جامعي البيانات الآخرين، يحتاج جامع البيانات هذا إلى تطبيق طريقة تبطين مختلفة على `input_values` و`labels` : + +```py +>>> import torch + +>>> from dataclasses import dataclass, field +>>> from typing import Any, Dict, List, Optional, Union + + +>>> @dataclass +... class DataCollatorCTCWithPadding: +... processor: AutoProcessor +... padding: Union[bool, str] = "longest" + +... def __call__(self, features: List[Dict[str, Union[List[int], torch.Tensor]]]) -> Dict[str, torch.Tensor]: +... # split inputs and labels since they have to be of different lengths and need +... # different padding methods +... input_features = [{"input_values": feature["input_values"][0]} for feature in features] +... label_features = [{"input_ids": feature["labels"]} for feature in features] + +... batch = self.processor.pad(input_features, padding=self.padding, return_tensors="pt") + +... labels_batch = self.processor.pad(labels=label_features, padding=self.padding, return_tensors="pt") + +... # replace padding with -100 to ignore loss correctly +... labels = labels_batch["input_ids"].masked_fill(labels_batch.attention_mask.ne(1), -100) + +... batch["labels"] = labels + +... return batch +``` + +## تقييم + +غالبًا ما يكون تضمين مقياس أثناء التدريب مفيدًا لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index) . بالنسبة لهذه المهمة، قم بتحميل مقياس [خطأ كلمة](https://huggingface.co/spaces/evaluate-metric/wer) (WER) (راجع جولة 🤗 Evaluate [السريعة](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> wer = evaluate.load("wer") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتسمياتك إلى [`~evaluate.EvaluationModule.compute`] لحساب WER: + +```py +>>> import numpy as np + + +>>> def compute_metrics(pred): +... pred_logits = pred.predictions +... pred_ids = np.argmax(pred_logits, axis=-1) + +... pred.label_ids[pred.label_ids == -100] = processor.tokenizer.pad_token_id + +... pred_str = processor.batch_decode(pred_ids) +... label_str = processor.batch_decode(pred.label_ids، group_tokens=False) + +... wer = wer.compute(predictions=pred_str، references=label_str) + +... return {"wer": wer} +``` + +دالتك `compute_metrics` جاهزة الآن، وستعود إليها عند إعداد تدريبك. + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`]، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل Wav2Vec2 باستخدام [`AutoModelForCTC`]. حدد التخفيض الذي سيتم تطبيقه باستخدام معلمة `ctc_loss_reduction` . غالبًا ما يكون من الأفضل استخدام المتوسط بدلاً من الجمع الافتراضي: + +```py +>>> from transformers import AutoModelForCTC، TrainingArguments، Trainer + +>>> model = AutoModelForCTC.from_pretrained( +... "facebook/wav2vec2-base", +... ctc_loss_reduction="mean", +... pad_token_id=processor.tokenizer.pad_token_id, +... ) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة الوحيدة المطلوبة هي `output_dir` التي تحدد مكان حفظ نموذجك. سوف تقوم بدفع هذا النموذج إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجل الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقوم [`Trainer`] بتقييم WER وحفظ نقطة التدريب. +2. قم بتمرير الحجج التدريب إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات والمعجم وجامع البيانات ووظيفة `compute_metrics` . +3. استدعاء [`~Trainer.train`] لضبط نموذجك بشكل دقيق. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_asr_mind_model", +... per_device_train_batch_size=8, +... gradient_accumulation_steps=2, +... learning_rate=1e-5, +... warmup_steps=500, +... max_steps=2000, +... gradient_checkpointing=True, +... fp16=True, +... group_by_length=True, +... eval_strategy="steps", +... per_device_eval_batch_size=8, +... save_steps=1000, +... eval_steps=1000, +... logging_steps=25, +... load_best_model_at_end=True, +... metric_for_best_model="wer", +... greater_is_better=False, +... push_to_hub=True, +... ) +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=encoded_minds["train"], +... eval_dataset=encoded_minds["test"], +... tokenizer=processor, +... data_collator=data_collator, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك في المركز باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + + +للحصول على مثال أكثر تعمقًا حول كيفية ضبط نموذج للتعرف التلقائي على الكلام، راجع منشور المدونة [هذا](https://huggingface.co/blog/fine-tune-wav2vec2-english) للتعرف التلقائي على الكلام باللغة الإنجليزية وهذا [المنشور](https://huggingface.co/blog/fine-tune-xlsr-wav2vec2) للتعرف التلقائي على الكلام متعدد اللغات. + + + +## الاستنتاج + +رائع، الآن بعد أن قمت بضبط دقيق لنموذج، يمكنك استخدامه للاستنتاج! + +قم بتحميل ملف صوتي تريد تشغيل الاستنتاج عليه. تذكر إعادة أخذ عينات معدل أخذ العينات لملف الصوت لمطابقة معدل أخذ العينات للنموذج إذا كنت بحاجة إلى ذلك! + +```py +>>> from datasets import load_dataset, Audio + +>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train") +>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000)) +>>> sampling_rate = dataset.features["audio"].sampling_rate +>>> audio_file = dataset[0]["audio"]["path"] +``` + +أبسط طريقة لتجربة نموذجك المضبوط الدقيق للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ مثيل `pipeline` للتعرف التلقائي على الكلام باستخدام نموذجك، ومرر ملف الصوت الخاص بك إليه: + +```py +>>> from transformers import pipeline + +>>> transcriber = pipeline("automatic-speech-recognition", model="stevhliu/my_awesome_asr_minds_model") +>>> transcriber(audio_file) +{'text': 'I WOUD LIKE O SET UP JOINT ACOUNT WTH Y PARTNER'} +``` + + + +النسخ النصي جيد، ولكنه يمكن أن يكون أفضل! جرب ضبط نموذجك على المزيد من الأمثلة للحصول على نتائج أفضل! + + + +يمكنك أيضًا محاكاة نتائج `pipeline` يدويًا إذا أردت: + + + +قم بتحميل معالج لمعالجة ملف الصوت والنسخ النصي وإرجاع `input` كرموز تعبيرية PyTorch: + +```py +>>> from transformers import AutoProcessor + +>>> processor = AutoProcessor.from_pretrained("stevhliu/my_awesome_asr_mind_model") +>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt") +``` + +مرر المدخلات إلى النموذج وأعد الخرجات: + +```py +>>> from transformers import AutoModelForCTC + +>>> model = AutoModelForCTC.from_pretrained("stevhliu/my_awesome_asr_mind_model") +>>> with torch.no_grad(): +... logits = model(**inputs).logits +``` + +احصل على `input_ids` المتوقع مع أعلى احتمال، واستخدم المعالج لترميز `input_ids` المتوقع مرة أخرى إلى نص: + +```py +>>> import torch + +>>> predicted_ids = torch.argmax(logits, dim=-1) +>>> transcription = processor.batch_decode(predicted_ids) +>>> transcription +['I WOUL LIKE O SET UP JOINT ACOUNT WTH Y PARTNER'] +``` + + \ No newline at end of file From a23b46ebf8068ef69c2dbfa1f1342d11df201062 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:19 +0300 Subject: [PATCH 080/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fcaptioning.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/image_captioning.md | 268 +++++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 docs/source/ar/tasks/image_captioning.md diff --git a/docs/source/ar/tasks/image_captioning.md b/docs/source/ar/tasks/image_captioning.md new file mode 100644 index 00000000000000..55191404088566 --- /dev/null +++ b/docs/source/ar/tasks/image_captioning.md @@ -0,0 +1,268 @@ +# توليد تعليقات توضيحية للصور + +[[open-in-colab]] + +تتمثل مهمة توليد تعليقات توضيحية للصور في التنبؤ بتعليق توضيحي لصورة معينة. وتشمل التطبيقات الواقعية الشائعة لهذه المهمة مساعدة الأشخاص ضعاف البصر على التنقل في مختلف المواقف. وبالتالي، تساعد تعليقات الصور التوضيحية على تحسين إمكانية وصول المحتوى للأشخاص من خلال وصف الصور لهم. + +سيوضح هذا الدليل كيفية: + +* ضبط نموذج توليد تعليقات توضيحية للصور بدقة. +* استخدام النموذج المضبوط بدقة للاستنتاج. + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate -q +pip install jiwer -q +``` + +نشجعك على تسجيل الدخول إلى حسابك في Hugging Face حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتوثيق: + + +```python +from huggingface_hub import notebook_login + +notebook_login() +``` + +## تحميل مجموعة بيانات Pokémon BLIP captions + +استخدم مكتبة Dataset من 🤗 لتحميل مجموعة بيانات تتكون من أزواج {الصورة-التعليق التوضيحي}. لإنشاء مجموعة بيانات خاصة بك لتوليد تعليقات توضيحية للصور في PyTorch، يمكنك اتباع [هذا الدفتر](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/GIT/Fine_tune_GIT_on_an_image_captioning_dataset.ipynb). + + +```python +from datasets import load_dataset + +ds = load_dataset("lambdalabs/pokemon-blip-captions") +ds +``` +```bash +DatasetDict({ + train: Dataset({ + features: ['image', 'text'], + num_rows: 833 + }) +}) +``` + +تحتوي مجموعة البيانات على ميزتين، `image` و`text`. + + + +تحتوي العديد من مجموعات بيانات تعليقات الصور التوضيحية على تعليقات متعددة لكل صورة. وفي هذه الحالات، تتمثل إحدى الاستراتيجيات الشائعة في أخذ عينة عشوائية من التعليقات من بين التعليقات المتاحة أثناء التدريب. + + + +قم بتقسيم مجموعة البيانات التدريبية إلى مجموعة تدريب واختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + + +```python +ds = ds["train"].train_test_split(test_size=0.1) +train_ds = ds["train"] +test_ds = ds["test"] +``` + +دعونا نعرض بعض العينات من مجموعة التدريب. + + +```python +from textwrap import wrap +import matplotlib.pyplot as plt +import numpy as np + + +def plot_images(images, captions): + plt.figure(figsize=(20, 20)) + for i in range(len(images)): + ax = plt.subplot(1, len(images), i + 1) + caption = captions[i] + caption = "\n".join(wrap(caption, 12)) + pltMultiplier = plt.title(caption) + plt.imshow(images[i]) + plt.axis("off") + + +sample_images_to_visualize = [np.array(train_ds[i]["image"]) for i in range(5)] +sample_captions = [train_ds[i]["text"] for i in range(5)] +plot_images(sample_images_to_visualize, sample_captions) +``` + +
+ Sample training images +
+ +## معالجة مجموعة البيانات مسبقًا + +نظرًا لأن مجموعة البيانات لها وسيلتان (الصورة والنص)، فإن خط أنابيب المعالجة المسبقة ستقوم بمعالجة الصور والتعليقات التوضيحية. + +للقيام بذلك، قم بتحميل فئة المعالج المرتبطة بالنموذج الذي ستقوم بضبطه بدقة. + +```python +from transformers import AutoProcessor + +checkpoint = "microsoft/git-base" +processor = AutoProcessor.from_pretrained(checkpoint) +``` +```python +from transformers import AutoProcessor + +checkpoint = "microsoft/git-base" +processor = AutoProcessor.from_pretrained(checkpoint) +``` + +سيقوم المعالج داخليًا بمعالجة الصورة (التي تشمل تغيير الحجم، وتدرج البكسل) ورموز التعليق التوضيحي. + +```python +def transforms(example_batch): + images = [x for x in example_batch["image"]] + captions = [x for x in example_batch["text"]] + inputs = processor(images=images, text=captions, padding="max_length") + inputs.update({"labels": inputs["input_ids"]}) + return inputs + + +train_ds.set_transform(transforms) +test_ds.set_transform(transforms) +``` + +مع تحضير مجموعة البيانات، يمكنك الآن إعداد النموذج للضبط الدقيق. + +## تحميل نموذج أساسي + +قم بتحميل ["microsoft/git-base"](https://huggingface.co/microsoft/git-base) في كائن [`AutoModelForCausalLM`](https://huggingface.co/docs/transformers/model_doc/auto#transformers.AutoModelForCausalLM). + + +```python +from transformers import AutoModelForCausalLM + +model = AutoModelForCausalLM.from_pretrained(checkpoint) +``` + +## التقييم + +تُقيَّم نماذج تعليقات الصور التوضيحية عادةً باستخدام [Rouge Score](https://huggingface.co/spaces/evaluate-metric/rouge) أو [Word Error Rate](https://huggingface.co/spaces/evaluate-metric/wer). وفي هذا الدليل، ستستخدم معدل خطأ الكلمات (WER). + +نستخدم مكتبة 🤗 Evaluate للقيام بذلك. وللاطلاع على القيود المحتملة والمشكلات الأخرى لمعدل WER، راجع [هذا الدليل](https://huggingface.co/spaces/evaluate-metric/wer). + + +```python +from evaluate import load +import torch + +wer = load("wer") + + +def compute_metrics(eval_pred): + logits, labels = eval_pred + predicted = logits.argmax(-1) + decoded_labels = processor.batch_decode(labels, skip_special_tokens=True) + decoded_predictions = processor.batch_decode(predicted, skip_special_tokens=True) + wer_score = wer.compute(predictions=decoded_predictions, references=decoded_labels) + return {"wer_score": wer_score} +``` + +## التدريب! + +الآن، أنت مستعد لبدء الضبط الدقيق للنموذج. ستستخدم 🤗 [`Trainer`] لهذا الغرض. + +أولاً، حدد وسائط التدريب باستخدام [`TrainingArguments`]. + + +```python +from transformers import TrainingArguments, Trainer + +model_name = checkpoint.split("/")[1] + +training_args = TrainingArguments( + output_dir=f"{model_name}-pokemon"، + learning_rate=5e-5، + num_train_epochs=50، + fp16=True، + per_device_train_batch_size=32، + per_device_eval_batch_size=32، + gradient_accumulation_steps=2، + save_total_limit=3، + eval_strategy="steps"، + eval_steps=50، + save_strategy="steps"، + save_steps=50، + logging_steps=50، + remove_unused_columns=False، + push_to_hub=True، + label_names=["labels"]، + load_best_model_at_end=True، +) +``` + +ثم مررها إلى جانب مجموعات البيانات والنموذج إلى 🤗 Trainer. + +```python +trainer = Trainer( + model=model, + args=training_args, + train_dataset=train_ds, + eval_dataset=test_ds, + compute_metrics=compute_metrics, +) +``` + +لبدء التدريب، ما عليك سوى استدعاء [`~Trainer.train`] على كائن [`Trainer`]. + +```python +trainer.train() +``` + +يجب أن تشاهد انخفاض خسارة التدريب بسلاسة مع تقدم التدريب. + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + + +```python +trainer.push_to_hub() +``` + +## الاستنتاج + +خذ عينة صورة من `test_ds` لاختبار النموذج. + + +```python +from PIL import Image +import requests + +url = "https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png" +image = Image.open(requests.get(url, stream=True).raw) +image +``` + +
+ Test image +
+ +قم بإعداد الصورة للنموذج. + +```python +device = "cuda" if torch.cuda.is_available() else "cpu" + +inputs = processor(images=image, return_tensors="pt").to(device) +pixel_values = inputs.pixel_values +``` +```python +device = "cuda" if torch.cuda.is_available() else "cpu" + +inputs = processor(images=image, return_tensors="pt").to(device) +pixel_values = inputs.pixel_values +``` + +استدعِ [`generate`] وفك تشفير التنبؤات. + +```python +generated_ids = model.generate(pixel_values=pixel_values, max_length=50) +generated_caption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] +print(generated_caption) +``` +```bash +a drawing of a pink and blue pokemon +``` + +يبدو أن النموذج المضبوط بدقة قد ولَّد تعليقًا توضيحيًا جيدًا! \ No newline at end of file From eba164637c4cd22e1f4759f4c12de3857c9d7ddf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:21 +0300 Subject: [PATCH 081/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/audio=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/audio_classification.md | 329 +++++++++++++++++++ 1 file changed, 329 insertions(+) create mode 100644 docs/source/ar/tasks/audio_classification.md diff --git a/docs/source/ar/tasks/audio_classification.md b/docs/source/ar/tasks/audio_classification.md new file mode 100644 index 00000000000000..3a46287b4c735e --- /dev/null +++ b/docs/source/ar/tasks/audio_classification.md @@ -0,0 +1,329 @@ +# تصنيف الصوت + +[[open-in-colab]] + + + +يصنف تصنيف الصوت - تمامًا مثل النص - تسمية فئة الإخراج من بيانات الإدخال. والفرق الوحيد هو بدلاً من إدخالات النص، لديك أشكال موجية صوتية خام. تشمل التطبيقات العملية لتصنيف الصوت التعرف على نية المتحدث، وتصنيف اللغة، وحتى الأنواع الحيوانية من أصواتها. + +سيوضح لك هذا الدليل كيفية: + +1. ضبط نموذج [Wav2Vec2](https://huggingface.co/facebook/wav2vec2-base) الدقيق على مجموعة بيانات [MInDS-14](https://huggingface.co/datasets/PolyAI/minds14) لتصنيف نية المتحدث. +2. استخدام نموذجك الدقيق للاستنتاج. + + + +لمشاهدة جميع البنيات ونقاط التحقق المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/audio-classification) + + + +قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate +``` + +نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات MInDS-14 + +ابدأ بتحميل مجموعة بيانات MInDS-14 من مكتبة Datasets 🤗: + +```py +>>> from datasets import load_dataset, Audio + +>>> minds = load_dataset("PolyAI/minds14", name="en-US", split="train") +``` + +قسِّم تقسيم "التدريب" في مجموعة البيانات إلى مجموعة تدريب واختبار أصغر باستخدام طريقة [`~datasets.Dataset.train_test_split`]. سيعطيك هذا فرصة لتجربة التأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في مجموعة البيانات الكاملة. + +```py +>>> minds = minds.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مجموعة البيانات: + +```py +>>> minds +DatasetDict({ + train: Dataset({ + features: ['path', 'audio', 'transcription', 'english_transcription', 'intent_class', 'lang_id'], + num_rows: 450 + }) + test: Dataset({ + features: ['path', 'audio', 'transcription', 'english_transcription', 'intent_class', 'lang_id'], + num_rows: 113 + }) +}) +``` + +في حين أن مجموعة البيانات تحتوي على الكثير من المعلومات المفيدة، مثل `lang_id` و`english_transcription`، فسوف تركز على `audio` و`intent_class` في هذا الدليل. أزل الأعمدة الأخرى باستخدام طريقة [`~datasets.Dataset.remove_columns`]: + +```py +>>> minds = minds.remove_columns(["path", "transcription", "english_transcription", "lang_id"]) +``` + +الق نظرة على مثال الآن: + +```py +>>> minds["train"][0] +{'audio': {'array': array([ 0. , 0. , 0. , ..., -0.00048828, + -0.00024414, -0.00024414], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602b9a5fbb1e6d0fbce91f52.wav', + 'sampling_rate': 8000}, + 'intent_class': 2} +``` + +هناك حقلان: + +- `audio`: مصفوفة أحادية البعد للإشارة الصوتية التي يجب استدعاؤها لتحميل وإعادة أخذ عينات ملف الصوت. +- `intent_class`: يمثل معرف فئة نية المتحدث. + +ولتسهيل الأمر على النموذج للحصول على اسم التسمية من معرف التسمية، قم بإنشاء قاموس يقوم بتعيين اسم التسمية إلى عدد صحيح والعكس صحيح: + +```py +>>> labels = minds["train"].features["intent_class"].names +>>> label2id, id2label = dict(), dict() +>>> for i, label in enumerate(labels): +... label2id[label] = str(i) +... id2label[str(i)] = label +``` + +الآن يمكنك تحويل معرف التسمية إلى اسم التسمية: + +```py +>>> id2label[str(2)] +'app_error' +``` + +## معالجة مسبقة + +الخطوة التالية هي تحميل مستخرج ميزات Wav2Vec2 لمعالجة الإشارة الصوتية: + +```py +>>> from transformers import AutoFeatureExtractor + +>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base") +``` + +تحتوي مجموعة بيانات MInDS-14 على معدل أخذ عينات يبلغ 8000 كيلو هرتز (يمكنك العثور على هذه المعلومات في [بطاقة مجموعة البيانات](https://huggingface.co/datasets/PolyAI/minds14))، مما يعني أنه سيتعين عليك إعادة أخذ عينات من مجموعة البيانات إلى 16000 كيلو هرتز لاستخدام نموذج Wav2Vec2 المدرب مسبقًا: + +```py +>>> minds = minds.cast_column("audio", Audio(sampling_rate=16_000)) +>>> minds["train"][0] +{'audio': {'array': array([ 2.2098757e-05, 4.6582241e-05, -2.2803260e-05, ..., + -2.8419291e-04, -2.3305941e-04, -1.1425107e-04], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602b9a5fbb1e6d0fbce91f52.wav', + 'sampling_rate': 1600Multiplier: 1000 +>>> minds = minds.cast_column("audio", Audio(sampling_rate=16_000)) +>>> minds["train"][0] +{'audio': {'array': array([ 2.2098757e-05, 4.6582241e-05, -2.2803260e-05, ..., + -2.8419291e-04, -2.3305941e-04, -1.1425107e-04], dtype=float32), + 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602b9a5fbb1e6d0fbce91f52.wav', + 'sampling_rate': 16000}, + 'intent_class': 2} +``` + +الآن قم بإنشاء دالة معالجة مسبقة تقوم بما يلي: + +1. استدعاء عمود "الصوت" لتحميل، وإذا لزم الأمر، إعادة أخذ عينات ملف الصوت. +2. التحقق مما إذا كان معدل أخذ العينات لملف الصوت يتطابق مع معدل أخذ العينات لبيانات الصوت التي تم تدريب النموذج عليها. يمكنك العثور على هذه المعلومات في [بطاقة نموذج](https://huggingface.co/facebook/wav2vec2-base) Wav2Vec2. +3. قم بتعيين طول إدخال أقصى لدفعات المدخلات الأطول دون اقتطاعها. + +```py +>>> def preprocess_function(examples): +... audio_arrays = [x["array"] for x in examples["audio"]] +... inputs = feature_extractor( +... audio_arrays, sampling_rate=feature_extractor.sampling_rate, max_length=16000, truncation=True +... ) +... return inputs +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم وظيفة [`~datasets.Dataset.map`] في Datasets 🤗. يمكنك تسريع `map` عن طريق تعيين `batched=True` لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد. أزل الأعمدة التي لا تحتاجها، وأعد تسمية `intent_class` إلى `label` لأن هذا هو الاسم الذي يتوقعه النموذج: + +```py +>>> encoded_minds = minds.map(preprocess_function, remove_columns="audio", batched=True) +>>> encoded_minds = encoded_minds.rename_column("intent_class", "label") +``` + +## تقييم + +غالبًا ما يكون تضمين مقياس أثناء التدريب مفيدًا لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index). بالنسبة لهذه المهمة، قم بتحميل مقياس [الدقة](https://huggingface.co/spaces/evaluate-metric/accuracy) (راجع جولة 🤗 Evaluate [السريعة](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> accuracy = evaluate.load("accuracy") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتسمياتك إلى [`~evaluate.EvaluationModule.compute`] لحساب الدقة: + +```py +>>> import numpy as np + + +>>> def compute_metrics(eval_pred): +... predictions = np.argmax(eval_pred.predictions, axis=1) +... return accuracy.compute(predictions=predictions, references=eval_pred.label_ids) +``` + +دالة `compute_metrics` الخاصة بك جاهزة الآن، وستعود إليها عند إعداد التدريب الخاص بك. + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`]]، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`]]، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل Wav2Vec2 باستخدام [`AutoModelForAudioClassification`] جنبًا إلى جنب مع عدد التسميات المتوقعة، وخرائط التسميات: + +```py +>>> from transformers import AutoModelForAudioClassification, TrainingArguments, Trainer + +>>> num_labels = len(id2label) +>>> model = AutoModelForAudioClassification.from_pretrained( +... "facebook/wav2vec2-base", num_labels=num_labels, label2id=label2id, id2label=id2label +... ) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة المطلوبة الوحيدة هي `output_dir` التي تحدد مكان حفظ نموذجك. ستقوم بالدفع بهذا النموذج إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجل الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقوم [`Trainer`] بتقييم الدقة وحفظ نقطة التحقق التدريبية. +2. قم بتمرير الحجج التدريبية إلى [`Trainer`] جنبًا إلى جنب مع النموذج، ومجموعة البيانات، ومعالج الرموز، وملف تجميع البيانات، ودالة `compute_metrics`. +3. استدعاء [`~Trainer.train`] لضبط نموذجك بشكل دقيق. + + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_mind_model", +... eval_strategy="epoch", +... save_strategy="epoch", +... learning_rate=3e-5, +... per_device_train_batch_size=32, +... gradient_accumulation_steps=4, +... per_device_eval_batch_Multiplier: 1000 +>>> training_args = TrainingArguments( +... output_dir="my_awesome_mind_model", +... eval_strategy="epoch", +... save_strategy="epoch", +... learning_rate=3e-5, +... per_device_train_batch_size=32, +... gradient_accumulation_steps=4, +... per_device_eval_batch_size=32, +... num_train_epochs=10, +... warmup_ratio=0.1, +... logging_steps=10, +... load_best_model_at_end=True, +... metric_for_best_model="accuracy", +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=encoded_minds["train"], +... eval_dataset=encoded_minds["test"], +... tokenizer=feature_extractor, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب شارك نموذجك في Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + + +للحصول على مثال أكثر شمولاً حول كيفية ضبط نموذج دقيق لتصنيف الصوت، راجع الدفتر [المقابل لـ PyTorch](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/audio_classification.ipynb). + + + +## الاستدلال + +رائع، الآن بعد أن ضبطت نموذجًا دقيقًا، يمكنك استخدامه للاستدلال! + +قم بتحميل ملف صوتي تريد تشغيل الاستدلال عليه. تذكر إعادة أخذ عينات معدل أخذ العينات لملف الصوت لمطابقة معدل أخذ العينات للنموذج إذا لزم الأمر! + +```py +>>> from datasets import load_dataset, Audio + +>>> dataset = load_dataset("PolyAI/minds14", name="en-US", split="train") +>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000)) +>>> sampling_rate = dataset.features["audio"].sampling_rate +>>> audio_file = dataset[0]["audio"]["path"] +``` + +أبسط طريقة لتجربة نموذجك الدقيق للاستدلال هي استخدامه في [`pipeline`]. قم بتنفيذ مثيل `pipeline` لتصنيف الصوت باستخدام نموذجك، ومرر ملف الصوت الخاص بك إليه: + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline("audio-classification", model="stevhliu/my_awesome_minds_model") +>>> classifier(audio_file) +[ + {'score': 0.09766869246959686, 'label': 'cash_deposit'}, + {'score': 0.07998877018690109, 'label': 'app_error'}, + {'score': 0.0781070664525032, 'label': 'joint_account'}, + {'score': 0.07667109370231628, 'label': 'pay_bill'}, + {'score': 0.0755252093076706, 'label': 'balance'} +] +``` + +يمكنك أيضًا إعادة إنتاج نتائج `pipeline` يدويًا إذا كنت تريد ذلك: + + + +قم بتحميل مستخرج ميزات لمعالجة ملف الصوت وإرجاع `input` كرموز تعبيرية PyTorch: + +```py +>>> from transformers import AutoFeatureExtractor + +>>> feature_extractor = AutoFeatureExtractor.from_pretrained("stevhliu/my_awesome_minds_model") +>>> inputs = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt") +``` + +Pass your inputs to the model and return the logits: + +```py +>>> from transformers import AutoModelForAudioClassification + +>>> model = AutoModelForAudioClassification.from_pretrained("stevhliu/my_awesome_minds_model") +>>> with torch.no_grad(): +... logits = model(**inputs).logits +``` + +Get the class with the highest probability, and use the model's `id2label` mapping to convert it to a label: + +```py +>>> import torch + +>>> predicted_class_ids = torch.argmax(logits).item() +>>> predicted_label = model.config.id2label[predicted_class_ids] +>>> predicted_label +'cash_deposit' +``` + + \ No newline at end of file From 3fa66f1c30b3f8bbd7873bdb7fd6600a79d5bc5d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:23 +0300 Subject: [PATCH 082/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/idefics.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/idefics.md | 388 ++++++++++++++++++++++++++++++++ 1 file changed, 388 insertions(+) create mode 100644 docs/source/ar/tasks/idefics.md diff --git a/docs/source/ar/tasks/idefics.md b/docs/source/ar/tasks/idefics.md new file mode 100644 index 00000000000000..ea326b47051d8a --- /dev/null +++ b/docs/source/ar/tasks/idefics.md @@ -0,0 +1,388 @@ +# المهام المتعلقة بالصور باستخدام IDEFICS + +[[open-in-colab]] + +في حين يمكن معالجة المهام الفردية عن طريق ضبط نماذج متخصصة، هناك نهج بديل ظهر مؤخرًا واكتسب شعبية وهو استخدام النماذج الكبيرة لمجموعة متنوعة من المهام دون ضبط دقيق. على سبيل المثال، يمكن لنماذج اللغة الكبيرة التعامل مع مهام NLP مثل الملخص والترجمة والتصنيف وأكثر من ذلك. لم يعد هذا النهج يقتصر على طريقة واحدة، مثل النص، وفي هذا الدليل، سنوضح كيف يمكنك حل مهام الصور والنصوص باستخدام نموذج متعدد الوسائط كبير يسمى IDEFICS. + +[IDEFICS](../model_doc/idefics) هو نموذج مفتوح الوصول للرؤية واللغة يعتمد على [Flamingo](https://huggingface.co/papers/2204.14198)، وهو نموذج لغة بصرية متطور طورته DeepMind في الأصل. يقبل النموذج تسلسلات عشوائية من إدخالات الصور والنصوص وينتج نصًا متماسكًا كإخراج. يمكنه الإجابة على الأسئلة حول الصور، ووصف المحتوى المرئي، وخلق قصص قائمة على صور متعددة، وهلم جرا. يأتي IDEFICS في متغيرين - [80 مليار معلمة](https://huggingface.co/HuggingFaceM4/idefics-80b) و [9 مليار معلمة](https://huggingface.co/HuggingFaceM4/idefics-9b)، وكلاهما متاح على Hub 🤗. وبالنسبة لكل متغير، يمكنك أيضًا العثور على إصدارات مُعلَّمة من النموذج المُعدَّل للاستخدامات المحادثية. + +هذا النموذج متعدد الاستخدامات بشكل استثنائي ويمكن استخدامه لمجموعة واسعة من المهام المتعلقة بالصور والوسائط المتعددة. ومع ذلك، فإن كونها نموذجًا كبيرًا يعني أنها تتطلب موارد حوسبة وهياكل أساسية كبيرة. الأمر متروك لك لتقرر ما إذا كان هذا النهج يناسب حالتك الاستخدامية بشكل أفضل من ضبط النماذج المتخصصة لكل مهمة فردية. + +في هذا الدليل، ستتعلم كيفية: +- [تحميل IDEFICS](#تحميل-النموذج) و [تحميل الإصدار الكمي من النموذج](#النموذج-الكمي) +- استخدام IDEFICS لما يلي: + - [وضع عنوان للصورة](#وضع-عنوان-للصورة) + - [وضع عنوان للصورة بناءً على موجهات](#وضع-عنوان-للصورة-بناءً-على-موجهات) + - [التوجيه القليل](#التوجيه-القليل) + - [الإجابة على الأسئلة البصرية](#الإجابة-على-الأسئلة-البصرية) + - [تصنيف الصور](#تصنيف-الصور) + - [توليد النص الموجه بالصورة](#توليد-النص-الموجه-بالصورة) +- [تشغيل الاستدلال في وضع الدفعة](#تشغيل-الاستدلال-في-وضع-الدفعة) +- [تشغيل IDEFICS instruct للاستخدامات المحادثية](#تشغيل-idefics-instruct-للاستخدامات-المحادثية) + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية. + +```bash +pip install -q bitsandbytes sentencepiece accelerate transformers +``` + + +لتشغيل الأمثلة التالية باستخدام إصدار غير كمي من نقطة تفتيش النموذج، ستحتاج إلى ذاكرة GPU لا تقل عن 20 جيجابايت. + + +## تحميل النموذج + +دعونا نبدأ بتحميل نقطة تفتيش معلمات النموذج البالغة 9 مليارات: + +```py +>>> checkpoint = "HuggingFaceM4/idefics-9b" +``` + +تمامًا مثل النماذج الأخرى لـ Transformers، يلزمك تحميل معالج والنموذج نفسه من نقطة التفتيش. يجمع معالج IDEFICS بين [`LlamaTokenizer`] ومعالج الصور IDEFICS في معالج واحد للاهتمام بإعداد إدخالات النص والصورة للنموذج. + +```py +>>> import torch + +>>> from transformers import IdeficsForVisionText2Text, AutoProcessor + +>>> processor = AutoProcessor.from_pretrained(checkpoint) +```py +>>> import torch + +>>> from transformers import IdeficsForVisionText2Text, AutoProcessor + +>>> processor = AutoProcessor.from_pretrained(checkpoint) + +>>> model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16, device_map="auto") +``` + +يؤدي تعيين `device_map` إلى `"auto"` إلى تحديد كيفية تحميل وتخزين أوزان النموذج بالطريقة الأكثر تحسينًا بالنظر إلى الأجهزة الموجودة. + +### النموذج الكمي + +إذا كانت ذاكرة GPU عالية السعة تمثل مشكلة، فيمكنك تحميل الإصدار الكمي من النموذج. لتحميل النموذج والمعالج بدقة 4 بت، قم بتمرير `BitsAndBytesConfig` إلى طريقة `from_pretrained` وسيتم ضغط النموذج أثناء التحميل. + +```py +>>> import torch +>>> from transformers import IdeficsForVisionText2Text, AutoProcessor, BitsAndBytesConfig + +>>> quantization_config = BitsAndBytesConfig( +... load_in_4bit=True, +... bnb_4bit_compute_dtype=torch.float16, +... ) + +>>> processor = AutoProcessor.from_pretrained(checkpoint) + +>>> model = IdeficsForVisionText2Text.from_pretrained( +... checkpoint, +... quantization_config=quantization_config, +... device_map="auto" +... ) +``` + +الآن بعد أن قمت بتحميل النموذج بإحدى الطرق المقترحة، دعنا ننتقل إلى استكشاف المهام التي يمكنك استخدام IDEFICS لها. + +## وضع عنوان للصورة +وضع عنوان للصورة هي مهمة التنبؤ بعنوان لصورة معينة. أحد التطبيقات الشائعة هو مساعدة الأشخاص ضعاف البصر على التنقل في مختلف المواقف، على سبيل المثال، استكشاف محتوى الصورة عبر الإنترنت. + +لتوضيح المهمة، احصل على صورة لوضع عنوان لها، على سبيل المثال: + +
+ صورة لجرو في سرير من الزهور +
+ +الصورة بواسطة [Hendo Wang](https://unsplash.com/@hendoo). + +يقبل IDEFICS موجهات النص والصورة. ومع ذلك، لوضع عنوان لصورة، لا يلزم تقديم موجه نصي إلى النموذج، فقط الصورة المدخلة المعالجة مسبقًا. بدون موجه نصي، سيبدأ النموذج في إنشاء نص من رمز BOS (بداية التسلسل) وبالتالي إنشاء عنوان. + +كإدخال صورة للنموذج، يمكنك استخدام كائن صورة (`PIL.Image`) أو عنوان URL يمكن استرداد الصورة منه. + +```py +>>> prompt = [ +... "https://images.unsplash.com/photo-1583160247711-2191776b4b91?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDBzjixsfHx8fA%3D%3D&auto=format&fit=crop&w=3542&q=80", +... ] + +>>> inputs = processor(prompt, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, max_new_tokens=10, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> print(generated_text[0]) +A puppy in a flower bed +``` + + + +من الجيد تضمين `bad_words_ids` في المكالمة إلى `generate` لتجنب الأخطاء الناشئة عند زيادة `max_new_tokens`: سيحاول النموذج إنشاء رمز `` أو `` جديد عندما لا تكون هناك صورة ينشئها النموذج. +يمكنك تعيينه أثناء التنقل كما هو موضح في هذا الدليل، أو تخزينه في `GenerationConfig` كما هو موضح في دليل [استراتيجيات إنشاء النص](../generation_strategies). + + +## وضع عنوان للصورة بناءً على موجهات + +يمكنك توسيع نطاق وضع عنوان الصورة عن طريق توفير موجه نصي، والذي سيواصل النموذج تنفيذه بناءً على الصورة. دعنا نأخذ صورة أخرى لتوضيح ذلك: + +
+ صورة لبرج إيفل ليلاً +
+ +الصورة بواسطة [Denys Nevozhai](https://unsplash.com/@dnevozhai). + +يمكن تمرير موجهات النص والصورة إلى معالج النموذج كقائمة واحدة لإنشاء الإدخالات المناسبة. +الصورة بواسطة [Denys Nevozhai](https://unsplash.com/@dnevozhai). + +يمكن تمرير موجهات النص والصورة إلى معالج النموذج كقائمة واحدة لإنشاء الإدخالات المناسبة. + +```py +>>> prompt = [ +... "https://images.unsplash.com/photo-1543349689-9a4d426bee8e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3501&q=80", +... "This is an image of ", +... ] + +>>> inputs = processor(prompt, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, max_new_tokens=10, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> print(generated_text[0]) +This is an image of the Eiffel Tower in Paris, France. +``` + +## التوجيه القليل + +في حين أن IDEFICS يظهر نتائج ممتازة بدون توجيه، فقد تتطلب مهمتك تنسيقًا معينًا للعنوان، أو قد تأتي بقيود أو متطلبات أخرى تزيد من تعقيد المهمة. يمكن استخدام التوجيه القليل لتمكين التعلم في السياق. من خلال توفير أمثلة في الموجه، يمكنك توجيه النموذج لتوليد نتائج تحاكي تنسيق الأمثلة المعطاة. + +دعونا نستخدم صورة برج إيفل السابقة كمثال للنموذج ونبني موجهًا يوضح للنموذج أنه بالإضافة إلى تعلم ما هو الكائن في الصورة، نود أيضًا الحصول على بعض المعلومات المثيرة للاهتمام عنه. ثم دعونا نرى، إذا كان بإمكاننا الحصول على نفس تنسيق الاستجابة لصورة تمثال الحرية: + +
+ صورة لتمثال الحرية +
+ +الصورة بواسطة [Juan Mayobre](https://unsplash.com/@jmayobres). + +```py +>>> prompt = ["User:", +... "https://images.unsplash.com/photo-1543349689-9a4d426bee8e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3501&q=80", +... "Describe this image.\nAssistant: An image of the Eiffel Tower at night. Fun fact: the Eiffel Tower is the same height as an 81-storey building.\n", +... "User:", +... "https://images.unsplash.com/photo-1524099163253-32b7f0256868?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3387&q=80", +... "Describe this image.\nAssistant:" +... ] + +>>> inputs = processor(prompt, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, max_new_tokens=30, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> print(generated_text[0]) +User: Describe this image. +Assistant: An image of the Eiffel Tower at night. Fun fact: the Eiffel Tower is the same height as an 81-storey building. +User: Describe this image. +Assistant: An image of the Statue of Liberty. Fun fact: the Statue of Liberty is 151 feet tall. +``` + +لاحظ أنه من مجرد مثال واحد (أي، 1-shot)، تعلم النموذج كيفية أداء المهمة. بالنسبة للمهام الأكثر تعقيدًا، لا تتردد في التجربة بعدد أكبر من الأمثلة (على سبيل المثال، 3-shot، 5-shot، إلخ). + +## الإجابة على الأسئلة البصرية + +الإجابة على الأسئلة المرئية (VQA) هي مهمة الإجابة على الأسئلة المفتوحة بناءً على صورة. على غرار وضع عنوان الصورة، يمكن استخدامه في تطبيقات إمكانية الوصول، ولكن أيضًا في التعليم (الاستدلال حول المواد المرئية)، وخدمة العملاء (الأسئلة حول المنتجات بناءً على الصور)، واسترجاع الصور. + +دعنا نحصل على صورة جديدة لهذه المهمة: +دعنا نحصل على صورة جديدة لهذه المهمة: + +
+ صورة لزوجين يتناولان نزهة +
+ +الصورة بواسطة [Jarritos Mexican Soda](https://unsplash.com/@jarritos). + +يمكنك توجيه النموذج من وضع عنوان الصورة إلى الإجابة على الأسئلة المرئية عن طريق توجيهه بتعليمات مناسبة: + +```py +>>> prompt = [ +... "Instruction: Provide an answer to the question. Use the image to answer.\n", +... "https://images.unsplash.com/photo-1623944889288-cd147dbb517c?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3540&q=80", +... "Question: Where are these people and what's the weather like? Answer:" +... ] + +>>> inputs = processor(prompt, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, max_new_tokens=20, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> print(generated_text[0]) +Instruction: Provide an answer to the question. Use the image to answer. + Question: Where are these people and what's the weather like? Answer: They're in a park in New York City, and it's a beautiful day. +``` + +## تصنيف الصور + +IDEFICS قادر على تصنيف الصور إلى فئات مختلفة دون تدريب صريح على البيانات التي تحتوي على أمثلة موسومة من تلك الفئات المحددة. بالنظر إلى قائمة الفئات واستخدام قدراته في فهم الصور والنصوص، يمكن للنموذج استنتاج الفئة التي تنتمي إليها الصورة على الأرجح. + +لنفترض أن لدينا هذه الصورة لطاولة الخضار: + +
+ صورة لطاولة الخضار +
+ +تصوير فوتوغرافي بواسطة [بيتر ويندت](https://unsplash.com/@peterwendt). + +يمكننا توجيه النموذج لتصنيف الصورة إلى إحدى الفئات التي لدينا: + +```py +>>> categories = ['animals','vegetables', 'city landscape', 'cars', 'office'] +>>> prompt = [f"Instruction: Classify the following image into a single category from the following list: {categories}.\n", +... "https://images.unsplash.com/photo-1471193945509-9ad0617afabf?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3540&q=80", +... "Category: " +... ] + +>>> inputs = processor(prompt, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, max_new_tokens=6, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> print(generated_text[0]) +Instruction: Classify the following image into a single category from the following list: ['animals', 'vegetables', 'city landscape', 'cars', 'office']. +Category: Vegetables +``` + +في المثال أعلاه، نوجه النموذج لتصنيف الصورة إلى فئة واحدة، ومع ذلك، يمكنك أيضًا توجيه النموذج للقيام بالتصنيف الترتيبي. + +## توليد النص الموجه بالصور + +لتطبيقات أكثر إبداعًا، يمكنك استخدام توليد النص الموجه بالصور لتوليد نص بناءً على صورة. يمكن أن يكون هذا +مفيدًا لإنشاء أوصاف للمنتجات والإعلانات ووصف المشهد، وما إلى ذلك. + +دعونا نوجه IDEFICS لكتابة قصة بناءً على صورة بسيطة لباب أحمر: + +
+ صورة لباب أحمر مع قرع على الدرجات +
+ +تصوير فوتوغرافي بواسطة [كريج تيدبول](https://unsplash.com/@devonshiremedia). + +```py +>>> prompt = ["Instruction: Use the image to write a story. \n", +... "https://images.unsplash.com/photo-1517086822157-2b0358e7684a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2203&q=80", +... "Story: \n"] + +>>> inputs = processor(prompt, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, num_beams=2, max_new_tokens=200, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> print(generated_text[0]) +Instruction: Use the image to write a story. + Story: +Once upon a time, there was a little girl who lived in a house with a red door. She loved her red door. It was the prettiest door in the whole world. + +One day, the little girl was playing in her yard when she noticed a man standing on her doorstep. He was wearing a long black coat and a top hat. + +The little girl ran inside and told her mother about the man. + +Her mother said, “Don’t worry, honey. He’s just a friendly ghost.” + +The little girl wasn’t sure if she believed her mother, but she went outside anyway. + +When she got to the door, the man was gone. + +The next day, the little girl was playing in her yard again when she noticed the man standing on her doorstep. + +He was wearing a long black coat and a top hat. + +The little girl ran +``` + +يبدو أن IDEFICS لاحظ القرع على عتبة الباب وذهب إلى قصة مخيفة في عيد الهالوين حول شبح. + + + +بالنسبة للنواتج الأطول مثل هذا، ستستفيد بشكل كبير من ضبط استراتيجية توليد النص. يمكن أن يساعدك هذا بشكل كبير +يمكنك تحسين جودة الإخراج المولد بشكل كبير. تحقق من [استراتيجيات توليد النص](../generation_strategies) +لمعرفة المزيد. + + +## تشغيل الاستنتاج في وضع الدفعة + +توضح جميع الأقسام السابقة IDEFICS لمثال واحد. بطريقة مشابهة جدًا، يمكنك تشغيل الاستنتاج +بالنسبة لدفعة من الأمثلة عن طريق تمرير قائمة من المطالبات: + +```py +>>> prompts = [ +... [ "https://images.unsplash.com/photo-1543349689-9a4d426bee8e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3501&q=80", +... "This is an image of ", +... ], +... [ "https://images.unsplash.com/photo-1623944889288-cd147dbb517c?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3540&q=80", +... "This is an image of ", +... ], +... [ "https://images.unsplash.com/photo-1471193945509-9ad0617afabf?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=3540&q=80", +... "This is an image of ", +... ], +... ] + +>>> inputs = processor(prompts, return_tensors="pt").to("cuda") +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, max_new_tokens=10, bad_words_ids=bad_words_ids) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> for i,t in enumerate(generated_text): +... print(f"{i}:\n{t}\n") +0: +This is an image of the Eiffel Tower in Paris, France. + +1: +This is an image of a couple on a picnic blanket. + +2: +This is an image of a vegetable stand. +``` + +## IDEFICS instruct للاستخدام المحادثي + +بالنسبة لحالات الاستخدام المحادثية، يمكنك العثور على إصدارات مضبوطة الدقة من النموذج على 🤗 Hub: +`HuggingFaceM4/idefics-80b-instruct` و `HuggingFaceM4/idefics-9b-instruct`. + +هذه نقاط تفتيش ناتجة عن ضبط دقيق لنماذج القاعدة الخاصة بها على مزيج من مجموعات البيانات الخاضعة للإشراف والتعليمات +ضبط دقيق، مما يعزز الأداء في اتجاه مجرى النهر أثناء جعل النماذج أكثر قابلية للاستخدام في إعدادات المحادثة. + +الاستخدام والتشغيل للاستخدام المحادثي مشابه جدًا لاستخدام نماذج القاعدة: + +```py +>>> import torch +>>> from transformers import IdeficsForVisionText2Text, AutoProcessor + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" + +>>> checkpoint = "HuggingFaceM4/idefics-9b-instruct" +>>> model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device) +>>> processor = AutoProcessor.from_pretrained(checkpoint) + +>>> prompts = [ +... [ +... "User: What is in this image?", +... "https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG", +... "", + +... "\nAssistant: This picture depicts Idefix, the dog of Obelix in Asterix and Obelix. Idefix is running on the ground.", + +... "\nUser:", +... "https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052", +... "And who is that?", + +... "\nAssistant:", +... ], +... ] + +>>> # --batched mode +>>> inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device) +>>> # --single sample mode +>>> # inputs = processor(prompts[0], return_tensors="pt").to(device) + +>>> # Generation args +>>> exit_condition = processor.tokenizer("", add_special_tokens=False).input_ids +>>> bad_words_ids = processor.tokenizer(["", ""], add_special_tokens=False).input_ids + +>>> generated_ids = model.generate(**inputs, eos_token_id=exit_condition, bad_words_ids=bad_words_ids, max_length=100) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> for i, t in enumerate(generated_text): +... print(f"{i}:\n{t}\n") +``` \ No newline at end of file From 3f5c231eed10e3f5943733ad248809e010a4a7ec Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:24 +0300 Subject: [PATCH 083/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Ftext=5Fto=5Ftext.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/image_text_to_text.md | 215 +++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 docs/source/ar/tasks/image_text_to_text.md diff --git a/docs/source/ar/tasks/image_text_to_text.md b/docs/source/ar/tasks/image_text_to_text.md new file mode 100644 index 00000000000000..2ed4f32f83c3c0 --- /dev/null +++ b/docs/source/ar/tasks/image_text_to_text.md @@ -0,0 +1,215 @@ +# نماذج الصور والنص والنص + +[[open-in-colab]] + +نماذج الصور والنص والنص، المعروفة أيضًا باسم نماذج اللغة المرئية (VLMs)، هي نماذج لغة تأخذ إدخال صورة. يمكن لهذه النماذج معالجة مهام مختلفة، بدءًا من الإجابة على الأسئلة المرئية إلى تجزئة الصور. تشترك هذه المهمة في العديد من أوجه التشابه مع الصورة إلى النص، ولكن مع بعض حالات الاستخدام المتداخلة مثل تعليق الصور. تقبل نماذج الصورة إلى النص إدخالات الصور فقط وغالبًا ما تنجز مهمة محددة، في حين أن نماذج اللغة المرئية تقبل إدخالات نصية وصورية مفتوحة وتكون نماذج أكثر عمومية. + +في هذا الدليل، نقدم نظرة عامة موجزة على نماذج اللغة المرئية ونظهر كيفية استخدامها مع Transformers للاستدلال. + +بدايةً، هناك عدة أنواع من نماذج اللغة المرئية: + +- النماذج الأساسية المستخدمة للضبط الدقيق +- النماذج المحسنة للمحادثة للمحادثة +- النماذج المحسنة للتعليمات + +يركز هذا الدليل على الاستدلال باستخدام نموذج مضبوط للتعليمات. + +دعونا نبدأ بتثبيت التبعيات. + +```bash +pip install -q transformers accelerate flash_attn +``` + +دعونا نقوم بتهيئة النموذج والمعالج. + +```python +from transformers import AutoProcessor, Idefics2ForConditionalGeneration +import torch + +device = torch.device("cuda") +model = Idefics2ForConditionalGeneration.from_pretrained( + "HuggingFaceM4/idefics2-8b", + torch_dtype=torch.bfloat16, + attn_implementation="flash_attention_2", +).to(device) + +processor = AutoProcessor.from_pretrained("HuggingFaceM4/idefics2-8b") +``` + +يحتوي هذا النموذج على [قالب دردشة](./chat_templating) يساعد المستخدم على تحليل إخراج الدردشة. علاوة على ذلك، يمكن للنموذج أيضًا قبول صور متعددة كإدخال في محادثة واحدة أو رسالة واحدة. سنقوم الآن بإعداد الإدخالات. + +تبدو إدخالات الصور كما يلي. + +
+ قطتان تجلسان على شبكة +
+ +
+ نحلة على زهرة وردية +
+ + +```python +from PIL import Image +import requests + +img_urls =["https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png", + "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"] +images = [Image.open(requests.get(img_urls[0], stream=True).raw), + Image.open(requests.get(img_urls[1], stream=True).raw)] +``` + +فيما يلي مثال على قالب الدردشة. يمكننا إدخال دورات المحادثة والرسالة الأخيرة كإدخال عن طريق إضافتها في نهاية القالب. + +```python +messages = [ + { + "role": "user", + "content": [ + {"type": "image"}, + {"type": "text", "text": "What do we see in this image?"}, + ] + }, + { + "role": "assistant", + "content": [ + {"type": "text", "text": "In this image we can see two cats on the nets."}, + ] + }, + { + "role": "user", + "content": [ + {"type": "image"}, + {"type": "text", "text": "And how about this image?"}, + ] + }, +] +``` + +سنقوم الآن باستدعاء طريقة [`~ProcessorMixin.apply_chat_template`] للمعالجات لمعالجة إخراجها جنبًا إلى جنب مع إدخالات الصور. + +```python +prompt = processor.apply_chat_template(messages, add_generation_prompt=True) +inputs = processor(text=prompt, images=[images[0], images[1]], return_tensors="pt").to(device) +``` + +الآن يمكننا تمرير الإدخالات المعالجة مسبقًا إلى النموذج. + +```python +with torch.no_grad(): + generated_ids = model.generate(**inputs, max_new_tokens=500) +generated_texts = processor.batch_decode(generated_ids, skip_special_tokens=True) + +print(generated_texts) +## ['User: What do we see in this image? \nAssistant: In this image we can see two cats on the nets. \nUser: And how about this image? \nAssistant: In this image we can see flowers, plants and insect.'] +``` + +## البث + +يمكننا استخدام [بث النص](./generation_strategies#streaming) للحصول على تجربة إنشاء أفضل. تدعم Transformers البث باستخدام فئات [`TextStreamer`] أو [`TextIteratorStreamer`]. سنستخدم [`TextIteratorStreamer`] مع IDEFICS-8B. + +لنفترض أن لدينا تطبيقًا يحتفظ بتاريخ الدردشة ويأخذ إدخال المستخدم الجديد. سنقوم بمعالجة الإدخالات كالمعتاد ونقوم بتهيئة [`TextIteratorStreamer`] للتعامل مع الإنشاء في خيط منفصل. يتيح لك ذلك بث رموز النص المولدة في الوقت الفعلي. يمكن تمرير أي حجج إنشاء إلى [`TextIteratorStreamer`]. + +```python +import time +from transformers import TextIteratorStreamer +from threading import Thread + +def model_inference( + user_prompt, + chat_history, + max_new_tokens, + images +): + user_prompt = { + "role": "user", + "content": [ + {"type": "image"}, + {"type": "text", "text": user_prompt}, + ] + } + chat_history.append(user_prompt) + streamer = TextIteratorStreamer( + processor.tokenizer, + skip_prompt=True, + timeout=5.0, + ) + + generation_args = { + "max_new_tokens": max_new_tokens, + "streamer": streamer, + "do_sample": False + } + + # add_generation_prompt=True makes model generate bot response + prompt = processor.apply_chat_template(chat_history, add_generation_prompt=True) + inputs = processor( + text=prompt, + images=images, + return_tensors="pt", + ).to(device) + generation_args.update(inputs) + + thread = Thread( + target=model.generate, + kwargs=generation_args, + ) + thread.start() + + acc_text = "" + for text_token in streamer: + time.sleep(0.04) + acc_text += text_token + if acc_text.endswith(""): + acc_text = acc_text[:-18] + yield acc_text + + thread.join() +``` + +الآن دعونا نستدعي وظيفة `model_inference` التي أنشأناها ونبث القيم. + +```python +generator = model_inference( + user_prompt="And what is in this image?", + chat_history=messages, + max_new_tokens=100, + images=images +) + +for value in generator: + print(value) + +# In +# In this +# In this image ... +``` + +## ملاءمة النماذج في الأجهزة الصغيرة + +غالبًا ما تكون نماذج اللغة المرئية كبيرة وتحتاج إلى تحسين لتناسب الأجهزة الصغيرة. تدعم Transformers العديد من مكتبات كمية النموذج، وهنا سنعرض فقط التكميم int8 باستخدام [Quanto](./quantization/quanto#quanto). توفر الكمية int8 تحسينات في الذاكرة تصل إلى 75 بالمائة (إذا كانت جميع الأوزان مكدسة). ومع ذلك، فهو ليس مجانيًا، نظرًا لأن 8 بتات ليست دقة أصلية لـ CUDA، يتم إعادة تحجيم الأوزان ذهابًا وإيابًا أثناء التنقل، مما يؤدي إلى زيادة الكمون. + +أولاً، قم بتثبيت التبعيات. + +```bash +pip install -U quanto bitsandbytes +``` + +لكميات نموذج أثناء التحميل، نحتاج أولاً إلى إنشاء [`QuantoConfig`]. ثم قم بتحميل النموذج كالمعتاد، ولكن قم بتمرير `quantization_config` أثناء تهيئة النموذج. + +```python +from transformers import Idefics2ForConditionalGeneration, AutoTokenizer, QuantoConfig + +model_id = "HuggingFaceM4/idefics2-8b" +quantization_config = QuantoConfig(weights="int8") +quantized_model = Idefics2ForConditionalGeneration.from_pretrained(model_id, device_map="cuda", quantization_config=quantization_config) +``` + +وهذا كل شيء، يمكننا استخدام النموذج بنفس الطريقة دون إجراء أي تغييرات. + +## قراءة إضافية + +فيما يلي بعض الموارد الإضافية لمهمة الصورة والنص والنص. + +- تغطي [صفحة مهمة الصورة والنص والنص](https://huggingface.co/tasks/image-text-to-text) أنواع النماذج وحالات الاستخدام ومجموعات البيانات والمزيد. +- [نماذج اللغة المرئية موضحة](https://huggingface.co/blog/vlms) هي مشاركة مدونة تغطي كل شيء عن نماذج اللغة المرئية والضبط الدقيق الخاضع للإشراف باستخدام [TRL](https://huggingface.co/docs/trl/en/index). \ No newline at end of file From aa5d7ac5e66281714290c3aa2ac384c17d9b768e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:26 +0300 Subject: [PATCH 084/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fto=5Fimage.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/image_to_image.md | 121 +++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/source/ar/tasks/image_to_image.md diff --git a/docs/source/ar/tasks/image_to_image.md b/docs/source/ar/tasks/image_to_image.md new file mode 100644 index 00000000000000..47efb553858301 --- /dev/null +++ b/docs/source/ar/tasks/image_to_image.md @@ -0,0 +1,121 @@ +هذا دليل لمهمة Image-to-Image، والتي يتم فيها إدخال صورة إلى تطبيق وإخراج صورة أخرى. لديها العديد من المهام الفرعية، بما في ذلك تحسين الصورة (القرار الفائق، وتحسين الإضاءة المنخفضة، وإزالة المطر، وغير ذلك)، وإكمال الصورة، والمزيد. + +سيوضح هذا الدليل كيفية: + +- استخدام خط أنابيب image-to-image لمهمة super resolution +- تشغيل نماذج image-to-image لنفس المهمة بدون خط أنابيب + +ملاحظة: اعتبارًا من وقت إصدار هذا الدليل، يدعم خط أنابيب "image-to-image" مهمة super resolution فقط. + +لنبدأ بتثبيت المكتبات اللازمة. + +```bash +pip install transformers +``` + +يمكننا الآن تهيئة خط الأنابيب باستخدام نموذج [Swin2SR](https://huggingface.co/caidas/swin2SR-lightweight-x2-64). بعد ذلك، يمكننا إجراء الاستدلال باستخدام خط الأنابيب عن طريق استدعائه مع صورة. في الوقت الحالي، تدعم خطوط الأنابيب هذه فقط نماذج [Swin2SR](https://huggingface.co/models?sort=trending&search=swin2sr). + +```python +from transformers import pipeline + +device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') +pipe = pipeline(task="image-to-image", model="caidas/swin2SR-lightweight-x2-64", device=device) +``` + +الآن، دعنا نقوم بتحميل صورة. + +```python +from PIL import Image +import requests + +url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/cat.jpg" +image = Image.open(requests.get(url, stream=True).raw) + +print(image.size) +``` +```bash +# (532, 432) +``` +
+ صورة لقطة +
+ +يمكننا الآن إجراء الاستدلال باستخدام خط الأنابيب. سنحصل على نسخة موسعة من صورة القطة. + +```python +upscaled = pipe(image) +print(upscaled.size) +``` +```bash +# (1072, 880) +``` + +إذا كنت ترغب في إجراء الاستدلال بنفسك بدون خط أنابيب، فيمكنك استخدام الفئات `Swin2SRForImageSuperResolution` و`Swin2SRImageProcessor` من مكتبة Transformers. سنستخدم نفس نقطة تفتيش النموذج لهذا الغرض. دعونا نقوم بتهيئة النموذج والمعالج. + +```python +from transformers import Swin2SRForImageSuperResolution, Swin2SRImageProcessor + +model = Swin2SRForImageSuperResolution.from_pretrained("caidas/swin2SR-lightweight-x2-64").to(device) +processor = Swin2SRImageProcessor("caidas/swin2SR-lightweight-x2-64") +``` + +يقوم `pipeline` بتبسيط خطوات ما قبل المعالجة وما بعد المعالجة التي يتعين علينا القيام بها بأنفسنا، لذلك دعنا نقوم بمعالجة الصورة مسبقًا. سنقوم بتمرير الصورة إلى المعالج، ثم نقل قيم البكسل إلى وحدة معالجة الرسومات (GPU). + +```python +pixel_values = processor(image, return_tensors="pt").pixel_values +print(pixel_values.shape) + +pixel_values = pixel_values.to(device) +``` + +الآن يمكننا استنتاج الصورة عن طريق تمرير قيم البكسل إلى النموذج. + +```python +import torch + +with torch.no_grad(): + outputs = model(pixel_values) +``` +الإخراج عبارة عن كائن من النوع `ImageSuperResolutionOutput` يبدو كما يلي 👇 + +```python +import torch + +with torch.no_grad(): + outputs = model(pixel_values) +``` +الإخراج عبارة عن كائن من النوع `ImageSuperResolutionOutput` يبدو كما يلي 👇 + +``` +(loss=None, reconstruction=tensor([[[[0.8270, 0.8269, 0.8275, ..., 0.7463, 0.7446, 0.7453], + [0.8287, 0.8278, 0.8283, ..., 0.7451, 0.7448, 0.7457], + [0.8280, 0.8273, 0.8269, ..., 0.7447, 0.7446, 0.7452], + ..., + [0.5923, 0.5933, 0.5924, ..., 0.0697, 0.0695, 0.0706], + [0.5926, 0.5932, 0.5926, ..., 0.0673, 0.0687, 0.0705], + [0.5927, 0.5914, 0.5922, ..., 0.0664, 0.0694, 0.0718]]]], + device='cuda:0'), hidden_states=None, attentions=None) +``` +نحتاج إلى الحصول على `reconstruction` ومعالجتها بعد المعالجة من أجل العرض المرئي. دعونا نرى كيف تبدو. + +```python +outputs.reconstruction.data.shape +# torch.Size([1, 3, 880, 1072]) +``` + +نحتاج إلى ضغط الإخراج والتخلص من المحور 0، وقص القيم، ثم تحويلها إلى float نومبي. بعد ذلك، سنقوم بترتيب المحاور بحيث يكون الشكل [1072، 880]، وأخيراً، إعادة إخراج القيم إلى النطاق [0، 255]. + +```python +import numpy as np + +# ضغط، ونقل إلى وحدة المعالجة المركزية، وقص القيم +output = outputs.reconstruction.data.squeeze().cpu().clamp_(0, 1).numpy() +# إعادة ترتيب المحاور +output = np.moveaxis(output, source=0, destination=-1) +# إعادة القيم إلى نطاق قيم البكسل +output = (output * 255.0).round().astype(np.uint8) +Image.fromarray(output) +``` +
+ صورة مكبرة لقطة +
\ No newline at end of file From fb50515e8cbd06733e7f0a0fbe705a6f22b72d86 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:28 +0300 Subject: [PATCH 085/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/knowledge=5Fdistillation=5Ffor=5Fimage=5Fclassif?= =?UTF-8?q?ication.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...e_distillation_for_image_classification.md | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 docs/source/ar/tasks/knowledge_distillation_for_image_classification.md diff --git a/docs/source/ar/tasks/knowledge_distillation_for_image_classification.md b/docs/source/ar/tasks/knowledge_distillation_for_image_classification.md new file mode 100644 index 00000000000000..ca0e51de41563f --- /dev/null +++ b/docs/source/ar/tasks/knowledge_distillation_for_image_classification.md @@ -0,0 +1,170 @@ +# استخلاص المعرفة للرؤية الحاسوبية + +[[open-in-colab]] + +استخلاص المعرفة هي تقنية تُستخدم لنقل المعرفة من نموذج أكبر وأكثر تعقيدًا (المعلم) إلى نموذج أصغر وأبسط (الطالب). ولاستخلاص المعرفة من نموذج إلى آخر، نستخدم نموذج المعلم مُدرب مسبقًا على مهمة معينة (تصنيف الصور في هذه الحالة) ونقوم بتطبيق نموذج الطالب الذي تم تهيئته بشكل عشوائي ليتم تدريبه على تصنيف الصور. بعد ذلك، نقوم بتدريب نموذج الطالب لتقليل الفرق بين مخرجاته ومخرجات المعلم، مما يجعله يقلد سلوكه. تم تقديم هذه التقنية لأول مرة في ورقة "استخلاص المعرفة من الشبكة العصبية" من قبل هينتون وآخرون. في هذا الدليل، سنقوم باستخلاص المعرفة الموجهة لمهمة محددة. وسنستخدم مجموعة بيانات beans للقيام بذلك. + +يُظهر هذا الدليل كيفية استخلاص نموذج ViT (نموذج المعلم) الذي تم ضبطه بشكل دقيق إلى MobileNet (نموذج الطالب) باستخدام واجهة برمجة تطبيقات Trainer من مكتبة 🤗 Transformers. + +دعونا نقوم بتثبيت المكتبات اللازمة لعملية الاستخلاص وتقييم العملية. + +```bash +pip install transformers datasets accelerate tensorboard evaluate --upgrade +``` + +في هذا المثال، نستخدم نموذج `merve/beans-vit-224` كنموذج معلم. إنه نموذج تصنيف صور، يعتمد على نموذج `google/vit-base-patch16-224-in21k` الذي تم ضبطه بدقة على مجموعة بيانات beans. سنقوم باستخلاص هذا النموذج إلى MobileNetV2 الذي تم تهيئته بشكل عشوائي. + +سنقوم الآن بتحميل مجموعة البيانات. + +```python +from datasets import load_dataset + +dataset = load_dataset("beans") +``` + +يمكننا استخدام معالج الصور من أي من النماذج، حيث أن كليهما يعطي نفس المخرجات بنفس الدقة. سنستخدم طريقة `map()` من مجموعة البيانات لتطبيق المعالجة المسبقة على كل جزء من مجموعة البيانات. + +```python +from transformers import AutoImageProcessor +teacher_processor = AutoImageProcessor.from_pretrained("merve/beans-vit-224") + +def process(examples): + processed_inputs = teacher_processor(examples["image"]) + return processed_inputs + +processed_datasets = dataset.map(process, batched=True) +``` + +بشكل أساسي، نريد من نموذج الطالب (MobileNet الذي تم تهيئته بشكل عشوائي) أن يقلد نموذج المعلم (نموذج محول الرؤية الذي تم ضبطه بدقة). ولتحقيق ذلك، نقوم أولاً بالحصول على مخرجات logits من المعلم والطالب. بعد ذلك، نقوم بقسمة كل منهما على المعامل `temperature` الذي يتحكم في أهمية كل هدف ناعم. وهناك معامل يسمى `lambda` يزن أهمية خسارة الاستخلاص. في هذا المثال، سنستخدم `temperature=5` و `lambda=0.5`. سنستخدم خسارة Kullback-Leibler Divergence لحساب الانحراف بين الطالب والمعلم. بالنظر إلى البيانات P و Q، يوضح KL Divergence مقدار المعلومات الإضافية التي نحتاجها لتمثيل P باستخدام Q. إذا كان الاثنان متطابقين، فإن انحرافهما KL يكون صفرًا، حيث لا توجد معلومات أخرى مطلوبة لشرح P من Q. وبالتالي، في سياق استخلاص المعرفة، يكون KL divergence مفيدًا. + +```python +from transformers import TrainingArguments, Trainer +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class ImageDistilTrainer(Trainer): + def __init__(self, teacher_model=None, student_model=None, temperature=None, lambda_param=None, *args, **kwargs): + super().__init__(model=student_model, *args, **kwargs) + self.teacher = teacher_model + self.student = student_model + self.loss_function = nn.KLDivLoss(reduction="batchmean") + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + self.teacher.to(device) + self.teacher.eval() + self.temperature = temperature + self.lambda_param = lambda_param + + def compute_loss(self, student, inputs, return_outputs=False): + student_output = self.student(**inputs) + + with torch.no_grad(): + teacher_output = self.teacher(**inputs) + + # Compute soft targets for teacher and student + soft_teacher = F.softmax(teacher_output.logits / self.temperature, dim=-1) + soft_student = F.log_softmax(student_output.logits / self.temperature, dim=-1) + + # Compute the loss + distillation_loss = self.loss_function(soft_student, soft_teacher) * (self.temperature ** 2) + + # Compute the true label loss + student_target_loss = student_output.loss + + # Calculate final loss + loss = (1. - self.lambda_param) * student_target_loss + self.lambda_param * distillation_loss + return (loss, student_output) if return_outputs else loss +``` + +سنقوم الآن بتسجيل الدخول إلى Hugging Face Hub حتى نتمكن من دفع نموذجنا إلى Hugging Face Hub من خلال `Trainer`. + +```python +from huggingface_hub import notebook_login + +notebook_login() +``` + +دعونا نقوم بضبط `TrainingArguments`، ونموذج المعلم ونموذج الطالب. + +```python +from transformers import AutoModelForImageClassification, MobileNetV2Config, MobileNetV2ForImageClassification + +training_args = TrainingArguments( + output_dir="my-awesome-model", + num_train_epochs=30, + fp16=True, + logging_dir=f"{repo_name}/logs", + logging_strategy="epoch", + eval_strategy="epoch", + save_strategy="epoch", + load_best_model_at_end=True, + metric_for_best_model="accuracy", + report_to="tensorboard", + push_to_hub=True, + hub_strategy="every_save", + hub_model_id=repo_name, + ) + +num_labels = len(processed_datasets["train"].features["labels"].names) + +# initialize models +teacher_model = AutoModelForImageClassification.from_pretrained( + "merve/beans-vit-224", + num_labels=num_labels, + ignore_mismatched_sizes=True +) + +# training MobileNetV2 from scratch +student_config = MobileNetV2Config() +student_config.num_labels = num_labels +student_model = MobileNetV2ForImageClassification(student_config) +``` + +يمكننا استخدام دالة `compute_metrics` لتقييم نموذجنا على مجموعة الاختبار. ستُستخدم هذه الدالة أثناء عملية التدريب لحساب الدقة (accuracy) و f1 لنموذجنا. + +```python +import evaluate +import numpy as np + +accuracy = evaluate.load("accuracy") + +def compute_metrics(eval_pred): + predictions, labels = eval_pred + acc = accuracy.compute(references=labels, predictions=np.argmax(predictions, axis=1)) + return {"accuracy": acc["accuracy"]} +``` + +دعونا نقوم بتهيئة `Trainer` باستخدام وسائط التدريب التي حددناها. سنقوم أيضًا بتهيئة مجمع البيانات الخاص بنا. + +```python +from transformers import DefaultDataCollator + +data_collator = DefaultDataCollator() +trainer = ImageDistilTrainer( + student_model=student_model, + teacher_model=teacher_model, + training_args=training_args, + train_dataset=processed_datasets["train"], + eval_dataset=processed_datasets["validation"], + data_collator=data_collator, + tokenizer=teacher_processor, + compute_metrics=compute_metrics, + temperature=5, + lambda_param=0.5 +) +``` + +الآن يمكننا تدريب نموذجنا. + +```python +trainer.train() +``` + +يمكننا تقييم النموذج على مجموعة الاختبار. + +```python +trainer.evaluate(processed_datasets["test"]) +``` + +يصل نموذجنا إلى دقة 72% على مجموعة الاختبار. ولإجراء فحص للتحقق من كفاءة عملية الاستخلاص، قمنا أيضًا بتدريب MobileNet على مجموعة بيانات beans من الصفر باستخدام نفس المعلمات ووجدنا أن الدقة على مجموعة الاختبار بلغت 63%. ندعو القراء إلى تجربة نماذج المعلم المختلفة، وهندسات الطالب، ومعلمات الاستخلاص، والإبلاغ عن النتائج التي توصلوا إليها. يمكن العثور على سجلات التدريب ونقاط التفتيش للنموذج المستخلص في [هذا المستودع](https://huggingface.co/merve/vit-mobilenet-beans-224)، ويمكن العثور على MobileNetV2 الذي تم تدريبه من الصفر في هذا [المستودع](https://huggingface.co/merve/resnet-mobilenet-beans-5). \ No newline at end of file From e07a485abc7055077e0f582b5720705cbdacea2a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:30 +0300 Subject: [PATCH 086/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/masked=5Flanguage=5Fmodeling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/masked_language_modeling.md | 325 ++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 docs/source/ar/tasks/masked_language_modeling.md diff --git a/docs/source/ar/tasks/masked_language_modeling.md b/docs/source/ar/tasks/masked_language_modeling.md new file mode 100644 index 00000000000000..608f2bd1944c17 --- /dev/null +++ b/docs/source/ar/tasks/masked_language_modeling.md @@ -0,0 +1,325 @@ +# Masked language modeling + +[[open-in-colab]] + + + +يتم في نمذجة اللغة المقنعة التنبؤ برمز مقنع في تسلسل، ويمكن للنموذج الاهتمام بالرموز ثنائية الاتجاه. وهذا يعني أن النموذج لديه إمكانية الوصول الكامل إلى الرموز الموجودة على اليسار واليمين. تعد نمذجة اللغة المقنعة رائعة للمهام التي تتطلب فهمًا سياقيًا جيدًا لتسلسل كامل. BERT هو مثال على نموذج اللغة المقنع. + +سيوضح هذا الدليل لك كيفية: + +1. ضبط نموذج [DistilRoBERTa](https://huggingface.co/distilbert/distilroberta-base) الدقيق على مجموعة فرعية [r/askscience](https://www.reddit.com/r/askscience/) من مجموعة بيانات [ELI5](https://huggingface.co/datasets/eli5). +2. استخدام نموذجك الدقيق للاستنتاج. + + + +لمشاهدة جميع التصميمات ونقاط التحقق المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/fill-mask) + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك لتسجيل الدخول: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات ELI5 + +ابدأ بتحميل أول 5000 مثال من مجموعة بيانات [ELI5-Category](https://huggingface.co/datasets/eli5_category) باستخدام مكتبة Datasets 🤗. سيتيح لك هذا فرصة التجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from datasets import load_dataset + +>>> eli5 = load_dataset("eli5_category", split="train[:5000]") +``` + +قسِّم مجموعة البيانات إلى مجموعات فرعية للتدريب والاختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + +```py +>>> eli5 = eli5.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: +```py +>>> eli5 = eli5.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: + +```py +>>> eli5["train"][0] +{'q_id': '7h191n', + 'title': 'What does the tax bill that was passed today mean? How will it affect Americans in each tax bracket?', + 'selftext': '', + 'category': 'Economics', + 'subreddit': 'explainlikeimfive', + 'answers': {'a_id': ['dqnds8l', 'dqnd1jl', 'dqng3i1', 'dqnku5x'], + 'text': ["The tax bill is 500 pages long and there were a lot of changes still going on right to the end. It's not just an adjustment to the income tax brackets, it's a whole bunch of changes. As such there is no good answer to your question. The big take aways are: - Big reduction in corporate income tax rate will make large companies very happy. - Pass through rate change will make certain styles of business (law firms, hedge funds) extremely happy - Income tax changes are moderate, and are set to expire (though it's the kind of thing that might just always get re-applied without being made permanent) - People in high tax states (California, New York) lose out, and many of them will end up with their taxes raised.", + 'None yet. It has to be reconciled with a vastly different house bill and then passed again.', + 'Also: does this apply to 2017 taxes? Or does it start with 2018 taxes?', + 'This article explains both the House and senate bills, including the proposed changes to your income taxes based on your income level. URL_0'], + 'score': [21, 19, 5, 3], + 'text_urls': [[], + [], + [], + ['https://www.investopedia.com/news/trumps-tax-reform-what-can-be-done/']]}, + 'title_urls': ['url'], + 'selftext_urls': ['url']} +``` + +على الرغم من أن هذا قد يبدو كثيرًا، إلا أنك مهتم حقًا بحقل "النص". ما هو رائع في مهام نمذجة اللغة هو أنك لا تحتاج إلى علامات تصنيف (تُعرف أيضًا باسم المهمة غير الخاضعة للإشراف) لأن الكلمة التالية هي التصنيف. + +## معالجة مسبقة + + + +بالنسبة لنمذجة اللغة المقنعة، تتمثل الخطوة التالية في تحميل برنامج تشفير DistilRoBERTa لمعالجة حقل "النص" الفرعي: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilroberta-base") +``` + +ستلاحظ من المثال أعلاه، أن حقل "النص" موجود بالفعل داخل "الإجابات". وهذا يعني أنك ستحتاج إلى استخراج حقل "النص" من هيكله المضمن باستخدام طريقة ["flatten"](https://huggingface.co/docs/datasets/process#flatten): +```py +>>> eli5 = eli5.flatten() +>>> eli5["train"][0] +{'q_id': '7h191n', + 'title': 'What does the tax bill that was passed today mean? How will it affect Americans in each tax bracket?', + 'selftext': '', + 'category': 'Economics', + 'subreddit': 'explainlikeimfive', + 'answers.a_id': ['dqnds8l', 'dqnd1jl', 'dqng3i1', 'dqnku5x'], + 'answers.text': ["The tax bill is 500 pages long and there were a lot of changes still going on right to the end. It's not just an adjustment to the income tax brackets, it's a whole bunch of changes. As such there is no good answer to your question. The big take aways are: - Big reduction in corporate income tax rate will make large companies very happy. - Pass through rate change will make certain styles of business (law firms, hedge funds) extremely happy - Income tax changes are moderate, and are set to expire (though it's the kind of thing that might just always get re-applied without being made permanent) - People in high tax states (California, New York) lose out, and many of them will end up with their taxes raised.", + 'None yet. It has to be reconciled with a vastly different house bill and then passed again.', + 'Also: does this apply to 2017 taxes? Or does it start with 2018 taxes?', + 'This article explains both the House and senate bills, including the proposed changes to your income taxes based on your income level. URL_0'], + 'answers.score': [21, 19, 5, 3], + 'answers.text_urls': [[], + [], + [], + ['https://www.investopedia.com/news/trumps-tax-reform-what-can-be-done/']], + 'title_urls': ['url'], + 'selftext_urls': ['url']} +``` + +كل حقل فرعي هو الآن عمود منفصل كما هو موضح بالبادئة "الإجابات"، وحقل "النص" هو قائمة الآن. بدلاً من تشفير كل جملة بشكل منفصل، قم بتحويل القائمة إلى سلسلة بحيث يمكنك تشفيرها بشكل مشترك. + +هذه هي دالة المعالجة المسبقة الأولى لدمج قائمة السلاسل لكل مثال وتشفير النتيجة: + +```py +>>> def preprocess_function(examples): +... return tokenizer([" ".join(x) for x in examples["answers.text"]]) +``` + +لتطبيق دالة المعالجة المسبقة هذه على مجموعة البيانات بأكملها، استخدم طريقة [`~datasets.Dataset.map`] في مكتبة Datasets 🤗. يمكنك تسريع وظيفة "map" عن طريق تعيين "batched=True" لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد، وزيادة عدد العمليات باستخدام "num_proc". احذف أي أعمدة لا تحتاج إليها: + +```py +>>> tokenized_eli5 = eli5.map( +... preprocess_function, +... batched=True, +... num_proc=4, +... remove_columns=eli5["train"].column_names, +... ) +``` + +تحتوي مجموعة البيانات هذه على تسلسلات الرموز، ولكن بعضها أطول من طول الإدخال الأقصى للنموذج. + +الآن يمكنك استخدام دالة المعالجة المسبقة الثانية ل: +- دمج جميع التسلسلات +- تقسيم التسلسلات المدمجة إلى قطع أقصر محددة بواسطة "block_size"، والتي يجب أن تكون أقصر من طول الإدخال الأقصى وقصيرة بدرجة كافية لذاكرة GPU. + +```py +>>> block_size = 128 + + +>>> def group_texts(examples): +... # Concatenate all texts. +... concatenated_examples = {k: sum(examples[k], []) for k in examples.keys()} +... total_length = len(concatenated_examples[list(examples.keys())[0]]) +... # We drop the small remainder, we could add padding if the model supported it instead of this drop, you can +... # customize this part to your needs. +... if total_length >= block_size: +... total_length = (total_length // block_size) * block_size +... # Split by chunks of block_size. +... result = { +... k: [t[i : i + block_size] for i in range(0, total_length, block_size)] +... for k, t in concatenated_examples.items() +... } +... return result +``` + +قم بتطبيق دالة "group_texts" على مجموعة البيانات بأكملها: + +```py +>>> lm_dataset = tokenized_eli5.map(group_texts, batched=True, num_proc=4) +``` +قم بتطبيق دالة "group_texts" على مجموعة البيانات بأكملها: + +```py +>>> lm_dataset = tokenized_eli5.map(group_texts, batched=True, num_proc=4) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DataCollatorForLanguageModeling`]. من الأكثر كفاءة *حشو* الجمل ديناميكيًا إلى أطول طول في دفعة أثناء التجميع، بدلاً من حشو مجموعة البيانات بأكملها إلى الطول الأقصى. + + + + +استخدم رمز نهاية التسلسل كرموز حشو وحدد "mlm_probability" لإخفاء الرموز عشوائيًا كلما قمت بالتنقل خلال البيانات: + +```py +>>> from transformers import DataCollatorForLanguageModeling + +>>> tokenizer.pad_token = tokenizer.eos_token +>>> data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm_probability=0.15) +``` + + + +استخدم رمز نهاية التسلسل كرموز حشو وحدد "mlm_probability" لإخفاء الرموز عشوائيًا كلما قمت بالتنقل خلال البيانات: + +```py +>>> from transformers import DataCollatorForLanguageModeling + +>>> data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm_probability=0.15, return_tensors="tf") +``` + + + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`، فراجع الدليل الأساسي هنا](../training#train-with-pytorch-trainer) + + + +أنت الآن مستعد لبدء تدريب نموذجك! قم بتحميل DistilRoBERTa باستخدام [`AutoModelForMaskedLM`]: + +```py +>>> from transformers import AutoModelForMaskedLM + +>>> model = AutoModelForMaskedLM.from_pretrained("distilbert/distilroberta-base") +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة المطلوبة الوحيدة هي "output_dir" والتي تحدد مكان حفظ نموذجك. يمكنك دفع هذا النموذج إلى Hub عن طريق تعيين "push_to_hub=True" (يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك). +2. مرر فرط معلمات التدريب إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعات البيانات ومجمع البيانات. +3. استدعاء [`~Trainer.train`] لضبط نموذجك. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_eli5_mlm_model", +... eval_strategy="epoch"، +... learning_rate=2e-5, +... num_train_epochs=3, +... weight_decay=0.01, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=lm_dataset["train"], +... eval_dataset=lm_dataset["test"], +... data_collator=data_collator, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، استخدم طريقة [`~transformers.Trainer.evaluate`] لتقييم نموذجك والحصول على احتمالية حدوثه: + +```py +>>> import math + +>>> eval_results = trainer.evaluate() +>>> print(f"Perplexity: {math.exp(eval_results['eval_loss']):.2f}") +Perplexity: 8.76 +``` + +ثم شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام Keras، فراجع الدليل الأساسي هنا [../training#train-a-tensorflow-model-with-keras]! + + +لضبط نموذج في TensorFlow، ابدأ بإعداد دالة محسن ومعدل تعلم وجدول زمني ومفرط معلمات التدريب: + +```py +>>> from transformers import create_optimizer, AdamWeightDecay + +>>> optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01) +``` + +ثم يمكنك تحميل DistilRoBERTa باستخدام [`TFAutoModelForMaskedLM`]: + +```py +>>> from transformers import TFAutoModelForMaskedLM + +>>> model = TFAutoModelForMaskedLM. from_pretrained("distilbert/distilroberta-base") +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق "tf.data.Dataset" باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... lm_dataset["train"], +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) +```py +>>> tf_train_set = model.prepare_tf_dataset( +... lm_dataset["train"], +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) + +>>> tf_test_set = model.prepare_tf_dataset( +... lm_dataset["test"], +... shuffle=False, +... batch_size=16, +... collate_fn=data_collator, +... ) +``` + +قم بتكوين النموذج للتدريب باستخدام ["compile"](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers تحتوي على دالة خسارة افتراضية ذات صلة بالمهمة، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) # لا توجد وسيطة دالة الخسارة! +``` + +يمكن القيام بذلك عن طريق تحديد المكان الذي ستدفع فيه نموذجك وبرنامج الترميز الخاص بك في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> callback = PushToHubCallback( +... output_dir="my_awesome_eli5_mlm_model"، +... tokenizer=tokenizer, +... ) +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! استدعاء ["fit"](https://keras.io/api/models/model_training_apis/#fit-method) مع مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور \ No newline at end of file From c708bd5f7434409f8976dd4cd4d1fec73bdf499d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:32 +0300 Subject: [PATCH 087/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/monocular=5Fdepth=5Festimation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/monocular_depth_estimation.md | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 docs/source/ar/tasks/monocular_depth_estimation.md diff --git a/docs/source/ar/tasks/monocular_depth_estimation.md b/docs/source/ar/tasks/monocular_depth_estimation.md new file mode 100644 index 00000000000000..d3281de3d087e5 --- /dev/null +++ b/docs/source/ar/tasks/monocular_depth_estimation.md @@ -0,0 +1,206 @@ +# تقدير العمق أحادي العين + +تقدير العمق أحادي العين هي مهمة رؤية حاسوبية تتضمن التنبؤ بمعلومات العمق لمشهد من صورة واحدة. وبعبارة أخرى، فهي عملية تقدير مسافة الأجسام في مشهد من وجهة نظر كاميرا واحدة. + +تقدير العمق أحادي العين له تطبيقات مختلفة، بما في ذلك إعادة الإعمار ثلاثي الأبعاد، والواقع المعزز، والقيادة الذاتية، والروبوتات. إنها مهمة صعبة لأنها تتطلب من النموذج فهم العلاقات المعقدة بين الأجسام في المشهد ومعلومات العمق المقابلة، والتي يمكن أن تتأثر بعوامل مثل ظروف الإضاءة، والاحتجاب، والقوام. + +هناك فئتان رئيسيتان لتقدير العمق: + +- **تقدير العمق المطلق**: تهدف هذه المهمة المتغيرة إلى توفير قياسات عمق دقيقة من الكاميرا. ويستخدم المصطلح بالتبادل مع تقدير العمق المتري، حيث يتم توفير العمق في قياسات دقيقة بالمتر أو القدم. تخرج نماذج تقدير العمق المطلق خرائط عمق بقيم رقمية تمثل المسافات في العالم الحقيقي. + +- **تقدير العمق النسبي**: يهدف تقدير العمق النسبي إلى التنبؤ بترتيب العمق للأجسام أو النقاط في مشهد دون توفير قياسات دقيقة. تخرج هذه النماذج خريطة عمق تشير إلى الأجزاء الأقرب أو الأبعد نسبيًا من المشهد دون المسافات الفعلية إلى A و B. + +في هذا الدليل، سنرى كيفية الاستنتاج باستخدام [Depth Anything V2](https://huggingface.co/depth-anything/Depth-Anything-V2-Large)، وهو نموذج تقدير عمق نسبي بدون تصوير فوتوغرافي، و [ZoeDepth](https://huggingface.co/docs/transformers/main/en/model_doc/zoedepth)، وهو نموذج تقدير عمق مطلق. + + + +تحقق من [صفحة مهمة تقدير العمق](https://huggingface.co/tasks/depth-estimation) لعرض جميع التصميمات ونقاط التفتيش المتوافقة. + + + +قبل أن نبدأ، نحتاج إلى تثبيت أحدث إصدار من المحولات: + +```bash +pip install -q -U transformers +``` + +## خط أنابيب تقدير العمق + +أبسط طريقة لتجربة الاستنتاج باستخدام نموذج يدعم تقدير العمق هي استخدام خط الأنابيب المقابل [`pipeline`]. +قم بتنفيذ خط أنابيب من نقطة تفتيش على [Hub Hugging Face](https://huggingface.co/models؟pipeline_tag=depth-estimation&sort=downloads): + +```py +>>> from transformers import pipeline +>>> import torch + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> checkpoint = "depth-anything/Depth-Anything-V2-base-hf" +>>> pipe = pipeline("depth-estimation", model=checkpoint, device=device) +``` + +بعد ذلك، اختر صورة للتحليل: + +```py +>>> from PIL import Image +>>> import requests + +>>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> image +``` + +
+ Photo of a bee +
+ +مرر الصورة إلى خط الأنابيب. + +```py +>>> predictions = pipe(image) +``` + +مرر الصورة إلى خط الأنابيب. + +```py +>>> predictions = pipe(image) +``` + +يعيد خط الأنابيب قاموسًا يحتوي على إدخالين. الأول، يسمى `predicted_depth`، هو tensor بقيم العمق المعبر عنها بالمتر لكل بكسل. +والثاني، "العمق"، هو صورة PIL التي تصور نتيجة تقدير العمق. + +دعونا نلقي نظرة على النتيجة المرئية: + +```py +>>> predictions["depth"] +``` + +
+ Depth estimation visualization +
+ +## استدلال تقدير العمق باليد + +الآن بعد أن رأيت كيفية استخدام خط أنابيب تقدير العمق، دعنا نرى كيف يمكننا تكرار نفس النتيجة باليد. + +ابدأ بتحميل النموذج والمعالج المرتبط من نقطة تفتيش على [Hub Hugging Face](https://huggingface.co/models؟pipeline_tag=depth-estimation&sort=downloads). +سنستخدم هنا نفس نقطة التفتيش كما هو الحال من قبل: + +```py +>>> from transformers import AutoImageProcessor, AutoModelForDepthEstimation + +>>> checkpoint = "Intel/zoedepth-nyu-kitti" + +>>> image_processor = AutoImageProcessor.from_pretrained(checkpoint) +>>> model = AutoModelForDepthEstimation.from_pretrained(checkpoint).to(device) +``` + +قم بإعداد إدخال الصورة للنموذج باستخدام `image_processor` الذي سيتولى رعاية تحويلات الصور +مثل تغيير الحجم والتوحيد القياسي: + +```py +>>> pixel_values = image_processor(image, return_tensors="pt").pixel_values.to(device) +``` + +مرر المدخلات المحضرة عبر النموذج: + +```py +>>> import torch + +>>> with torch.no_grad(): +... outputs = model(pixel_values) +``` + +دعونا نقوم بمعالجة النتائج وتصورها. + +نحن بحاجة إلى إضافة وسادة ثم تغيير حجم الإخراج بحيث يكون لخريطة العمق المتوقعة نفس البعد مثل الصورة الأصلية. بعد تغيير الحجم، سنقوم بإزالة المناطق المبطنة من العمق. + +```py +>>> import numpy as np +>>> import torch.nn.functional as F + +>>> predicted_depth = outputs.predicted_depth.unsqueeze(dim=1) +>>> height, width = pixel_values.shape[2:] + +>>> height_padding_factor = width_padding_factor = 3 +>>> pad_h = int(np.sqrt(height/2) * height_padding_factor) +>>> pad_w = int(np.sqrt(width/2) * width_padding_factor) + +>>> if predicted_depth.shape[-2:] != pixel_values.shape[-2:]: +>>> predicted_depth = F.interpolate(predicted_depth, size= (height, width), mode='bicubic', align_corners=False) + +>>> if pad_h > 0: + predicted_depth = predicted_depth[:, :, pad_h:-pad_h,:] +>>> if pad_w > 0: + predicted_depth = predicted_depth[:, :, :, pad_w:-pad_w] +``` + +الآن يمكننا تصور النتائج (تم أخذ الدالة أدناه من إطار عمل [GaussianObject](https://github.com/GaussianObject/GaussianObject/blob/ad6629efadb57902d5f8bc0fa562258029a4bdf1/pred_monodepth.py#L11)). + +```py +import matplotlib + +def colorize(value, vmin=None, vmax=None, cmap='gray_r', invalid_val=-99, invalid_mask=None, background_color=(128, 128, 128, 255), gamma_corrected=False, value_transform=None): + """Converts a depth map to a color image. +Args: + value (torch.Tensor, numpy.ndarry): Input depth map. Shape: (H, W) or (1, H, W) or (1, 1, H, W). All singular dimensions are squeezed + vmin (float, optional): vmin-valued entries are mapped to start color of cmap. If None, value.min() is used. Defaults to None. + vmax (float, optional): vmax-valued entries are mapped to end color of cmap. If None, value.max() is used. Defaults to None. + cmap (str, optional): matplotlib colormap to use. Defaults to 'magma_r'. + invalid_val (int, optional): Specifies value of invalid pixels that should be colored as 'background_color'. Defaults to -99. + invalid_mask (numpy.ndarray, optional): Boolean mask for invalid regions. Defaults to None. + background_partum = (128, 128, 128, 255): 4-tuple RGB color to give to invalid pixels. Defaults to (128, 128, 128, 255). + gamma_corrected (bool, optional): Apply gamma correction to colored image. Defaults to False. + value_transform (Callable, optional): Apply transform function to valid pixels before coloring. Defaults to None. + + Returns: + numpy.ndarray, dtype - uint8: Colored depth map. Shape: (H, W, 4) + """ + if isinstance(value, torch.Tensor): + value = value.detach().cpu().numpy() + + value = value.squeeze() + if invalid_mask is None: + invalid_mask = value == invalid_val + mask = np.logical_not(invalid_mask) + + # normalize + vmin = np.percentile(value[mask],2) if vmin is None else vmin + vmax = np.percentile(value[mask],85) if vmax is None else vmax + if vmin != vmax: + value = (value - vmin) / (vmax - vmin) # vmin..vmax + else: + # Avoid 0-division + value = value * 0. + + # squeeze last dim if it exists + # grey out the invalid values + + value[invalid_mask] = np.nan + cmapper = matplotlib.colormaps.get_cmap(cmap) + if value_transform: + value = value_transform(value) + # value = value / value.max() + value = cmapper(value, bytes=True) # (nxmx4) + + # img = value[:, :, :] + img = value[...] + img[invalid_mask] = background_color + + # return img.transpose((2, 0, 1)) + if gamma_corrected: + # gamma correction + img = img / 255 + img = np.power(img, 2.2) + img = img * 255 + img = img.astype(np.uint8) + return img + +>>> result = colorize(predicted_depth.cpu().squeeze().numpy()) +>>> Image.fromarray(result) +``` + + + +
+ Depth estimation visualization +
\ No newline at end of file From cf15917ca173227789a3dee905a0f5e4e3c796cc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:34 +0300 Subject: [PATCH 088/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/multiple=5Fchoice.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/multiple_choice.md | 363 ++++++++++++++++++++++++ 1 file changed, 363 insertions(+) create mode 100644 docs/source/ar/tasks/multiple_choice.md diff --git a/docs/source/ar/tasks/multiple_choice.md b/docs/source/ar/tasks/multiple_choice.md new file mode 100644 index 00000000000000..8a6e184d8b5d91 --- /dev/null +++ b/docs/source/ar/tasks/multiple_choice.md @@ -0,0 +1,363 @@ +# الاختيار من متعدد + +[[open-in-colab]] + +تتشابه مهمة الاختيار من متعدد مع الإجابة على الأسئلة، باستثناء أنه يتم توفير عدة إجابات مرشحة إلى جانب السياق، ويتم تدريب النموذج على اختيار الإجابة الصحيحة. + +سيوضح هذا الدليل كيفية: + +1. ضبط نموذج BERT الدقيق على التكوين "العادي" لمجموعة بيانات SWAG لاختيار أفضل إجابة من بين عدة خيارات وسياق معين. +2. استخدام نموذجك الدقيق للاستنتاج. + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يتم مطالبتك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات SWAG + +ابدأ بتحميل التكوين "العادي" لمجموعة بيانات SWAG من مكتبة Datasets 🤗: + +```py +>>> from datasets import load_dataset + +>>> swag = load_dataset("swag", "regular") +``` + +ثم الق نظرة على مثال: + +```py +>>> swag["train"][0] +{'ending0': 'passes by walking down the street playing their instruments.', + 'ending1': 'has heard approaching them.', + 'ending2': "arrives and they're outside dancing and asleep.", + 'ending3': 'turns the lead singer watches the performance.', + 'fold-ind': '3416', + 'gold-source': 'gold', + 'label': 0, + 'sent1': 'Members of the procession walk down the street holding small horn brass instruments.', + 'sent2': 'A drum line', + 'startphrase': 'Members of the procession walk down the street holding small horn brass instruments. A drum line', + 'video-id': 'anetv_jkn6uvmqwh4'} +``` + +على الرغم من أنه يبدو أن هناك العديد من الحقول هنا، إلا أنها في الواقع واضحة ومباشرة: + +- `sent1` و `sent2`: توضح هذه الحقول كيف تبدأ الجملة، وإذا قمت بوضع الاثنين معًا، فستحصل على حقل `startphrase`. +- `ending`: يقترح نهاية محتملة لكيفية انتهاء الجملة، ولكن واحدة فقط منها صحيحة. +- `label`: يحدد نهاية الجملة الصحيحة. + +## معالجة مسبقة + +الخطوة التالية هي تحميل محدد رموز BERT لمعالجة بدايات الجمل والنهايات الأربع المحتملة: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased") +``` + +تحتاج دالة المعالجة المسبقة التي تريد إنشاؤها إلى: + +1. عمل أربع نسخ من حقل `sent1` ودمج كل منها مع `sent2` لإعادة إنشاء كيفية بدء الجملة. +2. دمج `sent2` مع كل من النهايات الأربع المحتملة للجملة. +3. تسطيح هاتين القائمتين حتى تتمكن من توكيدهما، ثم إلغاء تسطيحهما لاحقًا بحيث يكون لكل مثال حقول `input_ids` و `attention_mask` و `labels` المقابلة. + +```py +>>> ending_names = ["ending0", "ending1", "ending2", "ending3"] + + +>>> def preprocess_function(examples): + first_sentences = [[context] * 4 for context in examples["sent1"]] + question_headers = examples["sent2"] + second_sentences = [ + [f"{header} {examples[end][i]}" for end in ending_names] for i, header in enumerate(question_headers) + ] + first_sentences = sum(first_sentences, []) + second_sentences = sum(second_sentences, []) + + tokenized_examples = tokenizer(first_sentences, second_sentences, truncation=True) + return {k: [v[i : i + 4] for i in range(0, len(v), 4)] for k, v in tokenized_examples.items()} +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم طريقة [`~datasets.Dataset.map`] في مكتبة 🤗 Datasets. يمكنك تسريع وظيفة `map` عن طريق تعيين `batched=True` لمعالجة عدة عناصر من مجموعة البيانات في وقت واحد: + +```py +tokenized_swag = swag.map(preprocess_function, batched=True) +``` + +لا تحتوي مكتبة 🤗 Transformers على جامع بيانات للاختيار من متعدد، لذلك ستحتاج إلى تكييف [`DataCollatorWithPadding`] لإنشاء دفعة من الأمثلة. من الأكثر كفاءة *حشو* الجمل ديناميكيًا إلى الطول الأطول في دفعة أثناء التجميع، بدلاً من حشو مجموعة البيانات بأكملها إلى الطول الأقصى. + +يقوم `DataCollatorForMultipleChoice` بتسطيح جميع مدخلات النموذج، وتطبيق الحشو، ثم إلغاء تسطيح النتائج: + + + +```py +>>> from dataclasses import dataclass +>>> from transformers.tokenization_utils_base import PreTrainedTokenizerBase, PaddingStrategy +>>> from typing import Optional, Union +>>> import torch + + +>>> @dataclass +... class DataCollatorForMultipleChoice: +... """ +... Data collator that will dynamically pad the inputs for multiple choice received. +... """ + +... tokenizer: PreTrainedTokenizerBase +... padding: Union[bool, str, PaddingStrategy] = True +... max_length: Optional[int] = None +... pad_to_multiple_of: Optional[int] = None + +... def __call__(self, features): +... label_name = "label" if "label" in features[0].keys() else "labels" +... labels = [feature.pop(label_name) for feature in features] +... batch_size = len(features) +... num_choices = len(features[0]["input_ids"]) +... flattened_features = [ +... [{k: v[i] for k, v in feature.items()} for i in range(num_choices)] for feature in features +... ] +... flattened_features = sum(flattened_features, []) + +... batch = self.tokenizer.pad( +... flattened_features, +... padding=self.padding, +... max_length=self.max_length, +... pad_to_multiple_of=self.pad_to_multiple_of, +... return_tensors="pt", +... ) + +... batch = {k: v.view(batch_size, num_choices, -1) for k, v in batch.items()} +... batch["labels"] = torch.tensor(labels, dtype=torch.int64) +... return batch +``` + + +```py +>>> from dataclasses import dataclass +>>> from transformers.tokenization_utils_base import PreTrainedTokenizerBase, PaddingStrategy +>>> from typing import Optional, Union +>>> import tensorflow as tf + + +>>> @dataclass +... class DataCollatorForMultipleChoice: +... """ +... Data collator that will dynamically pad the inputs for multiple choice received. +... """ + +... tokenizer: PreTrainedTokenizerBase +... padding: Union[bool, str, PaddingStrategy] = True +... max_length: Optional[int] = None +... pad_to_multiple_of: Optional[int] = None + +... def __call__(self, features): +... label_name = "label" if "label" in features[0].keys() else "labels" +... labels = [feature.pop(label_name) for feature in features] +... batch_size = len(features) +... num_choices = len(features[0]["input_ids"]) +... flattened_features = [ +... [{k: v[i] for k, v in feature.items()} for i in range(num_choices)] for feature in features +... ] +... flattened_features = sum(flattened_features, []) + +... batch = self.tokenizer.pad( +... flattened_features, +... padding=self.padding, +... max_length=self.max_length, +... pad_to_multiple_of=self.pad_to_multiple_of, +... return_tensors="tf", +... ) +... batch = {k: tf.reshape(v, (batch_size, num_choices, -1)) for k, v in batch.items()} +... batch["labels"] = tf.convert_to_tensor(labels, dtype=tf.int64) +... return batch +``` + + + +## تقييم + +غالبًا ما يكون من المفيد تضمين مقياس أثناء التدريب لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index). بالنسبة لهذه المهمة، قم بتحميل مقياس [الدقة](https://huggingface.co/spaces/evaluate-metric/accuracy) (راجع الدليل السريع لـ 🤗 تقييم [here](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> accuracy = evaluate.load("accuracy") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتسمياتك إلى [`~evaluate.EvaluationModule.compute`] لحساب الدقة: + +```py +>>> import numpy as np + + +>>> def compute_metrics(eval_pred): + predictions, labels = eval_pred + predictions = np.argmax(predictions, axis=1) + return accuracy.compute(predictions=predictions, references=labels) +``` + +دالتك `compute_metrics` جاهزة الآن، وستعود إليها عند إعداد تدريبك. + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`، فراجع البرنامج التعليمي الأساسي [here](../training#train-with-pytorch-trainer) + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل BERT باستخدام [`AutoModelForMultipleChoice`]: + +```py +>>> from transformers import AutoModelForMultipleChoice, TrainingArguments, Trainer + +>>> model = AutoModelForMultipleChoice.from_pretrained("google-bert/bert-base-uncased") +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. الحقل المطلوب الوحيد هو `output_dir` الذي يحدد مكان حفظ نموذجك. ستقوم بالدفع بهذا النموذج إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجل الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقوم [`Trainer`] بتقييم الدقة وحفظ نقطة المراقبة التدريبية. +2. قم بتمرير الحجج التدريبية إلى [`Trainer`] إلى جانب النموذج ومجموعة البيانات والمحلل الرمزي وجامع البيانات ووظيفة `compute_metrics`. +3. استدعاء [`~Trainer.train`] لضبط نموذجك بدقة. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_swag_model", +... eval_strategy="epoch"، +... save_strategy="epoch"، +... load_best_model_at_end=True, +... learning_rate=5e-5, +... per_device_train_batch_size=16, +... per_device_eval_batch_size=16, +... num_train_epochs=3, +... weight_decay=0.01, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=tokenized_swag["train"], +... eval_dataset=tokenized_swag["validation"], +... tokenizer=tokenizer, +... data_collator=DataCollatorForMultipleChoice(tokenizer=tokenizer), +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام Keras، فراجع البرنامج التعليمي الأساسي [here](../training#train-a-tensorflow-model-with-keras) + + +لضبط نموذج في TensorFlow، ابدأ بإعداد دالة محسن ومعدل تعلم وجدول زمني وبعض فرط معلمات التدريب: + +```py +>>> from transformers import create_optimizer + +>>> batch_size = 16 +>>> num_train_epochs = 2 +>>> total_train_steps = (len(tokenized_swag["train"]) // batch_size) * num_train_epochs +>>> optimizer, schedule = create_optimizer(init_lr=5e-5, num_warmup_steps=0, num_train_steps=total_train_steps) +``` + +ثم يمكنك تحميل BERT باستخدام [`TFAutoModelForMultipleChoice`]: + +```py +>>> from transformers import TFAutoModelForMultipleChoice +Then you can load BERT with [`TFAutoModelForMultipleChoice`]: + +```py +>>> from transformers import TFAutoModelForMultipleChoice + +>>> model = TFAutoModelForMultipleChoice.from_pretrained("google-bert/bert-base-uncased") +``` + +قم بتحويل مجموعات بياناتك إلى تنسيق `tf.data.Dataset` باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> data_collator = DataCollatorForMultipleChoice(tokenizer=tokenizer) +>>> tf_train_set = model.prepare_tf_dataset( +... tokenized_swag["train"], +... shuffle=True, +... batch_size=batch_size, +... collate_fn=data_collator, +... ) + +>>> tf_validation_set = model.prepare_tf_dataset( +... tokenized_swag["validation"], +... shuffle=False, +... batch_size=batch_size, +... collate_fn=data_collator, +... ) +``` + +قم بتكوين النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers تحتوي على دالة خسارة ذات صلة بالمهمة بشكل افتراضي، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> model.compile(optimizer=optimizer) # لا توجد وسيطة دالة الخسارة! +``` + +الأمران الأخيران اللذان يجب إعدادهما قبل بدء التدريب هما حساب الدقة وتوفير طريقة لدفع نموذجك إلى Hub. يتم تنفيذ كلاهما باستخدام [Keras callbacks](../main_classes/keras_callbacks). + +مرر دالتك `compute_metrics` إلى [`~transformers.KerasMetricCallback`]: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback + +>>> metric_callback = KerasMetricCallback(metric_fn=compute_metrics, eval_dataset=tf_validation_set) +``` + +حدد المكان الذي ستدفع فيه نموذجك ومحولك الرمزي في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="my_awesome_model", +... tokenizer=tokenizer, +... ) +``` + +ثم قم بتجميع مكالماتك مرة أخرى: + +```py +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! استدعاء [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) مع مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، ومكالماتك لضبط نموذجك بدقة: + +```py +>>> model.fit(x=tf_train_set, validation_data=tf_validation_set, epochs=2, callbacks=callbacks) +``` + +بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه! + + + + + + +للحصول على مثال أكثر شمولاً حول كيفية ضبط نموذج للاختيار من متعدد، راجع الدفتر الملاحظات [هنا](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice.ipynb) \ No newline at end of file From 58a22029be1f3be2f8a3cd63af1b4ef4a5d835e3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:35 +0300 Subject: [PATCH 089/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/mask=5Fgeneration.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/mask_generation.md | 207 ++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 docs/source/ar/tasks/mask_generation.md diff --git a/docs/source/ar/tasks/mask_generation.md b/docs/source/ar/tasks/mask_generation.md new file mode 100644 index 00000000000000..ac797481e08f2d --- /dev/null +++ b/docs/source/ar/tasks/mask_generation.md @@ -0,0 +1,207 @@ +# إنشاء الأقنعة + +تتمثل مهمة إنشاء القناع في إنشاء أقنعة ذات معنى دلالي لصورة ما. هذه المهمة مشابهة جدًا لقطاع [الصور](semantic_segmentation)، ولكن هناك العديد من الاختلافات. يتم تدريب نماذج تجزئة الصور على مجموعات بيانات موسومة ومقيدة بالطبقات التي شاهدتها أثناء التدريب؛ فهي تعيد مجموعة من الأقنعة والطبقات المقابلة، نظرًا للصورة. + +يتم تدريب نماذج إنشاء القناع على كميات كبيرة من البيانات وتعمل في وضعين. + +- وضع الإشارة: في هذا الوضع، يأخذ النموذج الصورة وإشارة، حيث يمكن أن تكون الإشارة موقع نقطة ثنائية الأبعاد (الإحداثيات XY) داخل كائن في الصورة أو مربع حدود يحيط بكائن. في وضع الإشارة، يعيد النموذج القناع فقط على الكائن الذي تشير إليه الإشارة. + +- وضع تجزئة كل شيء: في تجزئة كل شيء، نظرًا للصورة، يقوم النموذج بإنشاء كل قناع في الصورة. للقيام بذلك، يتم إنشاء شبكة من النقاط ووضعها فوق الصورة للاستدلال. + +تتم دعم مهمة إنشاء القناع بواسطة [نموذج تجزئة أي شيء (SAM)](model_doc/sam). إنه نموذج قوي يتكون من محول رؤية قائم على محول، ومشفر إشارة، وفك تشفير قناع محول ثنائي الاتجاه. يتم تشفير الصور والإشارات، ويأخذ فك التشفير هذه التضمينات وينشئ أقنعة صالحة. + +![هندسة SAM](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/sam.png) + +يعمل SAM كنموذج أساسي قوي للتجزئة نظرًا لتغطيته الكبيرة للبيانات. يتم تدريبه على [SA-1B](https://ai.meta.com/datasets/segment-anything/)، مجموعة بيانات تحتوي على مليون صورة و1.1 مليار قناع. + +في هذا الدليل، ستتعلم كيفية: + +- الاستنتاج في وضع تجزئة كل شيء مع التجميع، +- الاستنتاج في وضع إشارة النقطة، +- الاستنتاج في وضع إشارة المربع. + +أولاً، دعنا نقوم بتثبيت `المحولات`: + +```bash +pip install -q transformers +``` + +## خط أنابيب إنشاء القناع + +أسهل طريقة للاستدلال على نماذج إنشاء القناع هي استخدام خط أنابيب `إنشاء القناع`. + +```python +>>> from transformers import pipeline + +>>> checkpoint = "facebook/sam-vit-base" +>>> mask_generator = pipeline(model=checkpoint, task="mask-generation") +``` + +دعنا نرى الصورة. + +```python +from PIL import Image +import requests + +img_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg" +image = Image.open(requests.get(img_url, stream=True).raw).convert("RGB") +``` + +![صورة مثال](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg) + +دعنا نقسم كل شيء. `النقاط لكل دفعة` تمكن الاستدلال الموازي للنقاط في وضع تجزئة كل شيء. يمكّن هذا الاستدلال الأسرع، ولكنه يستهلك ذاكرة أكبر. علاوة على ذلك، لا تمكّن SAM التجميع عبر الصور فقط ولكن أيضًا عبر النقاط. `pred_iou_thresh` هو عتبة ثقة IoU حيث يتم إرجاع الأقنعة الموجودة فوق عتبة معينة فقط. + +```python +masks = mask_generator(image, points_per_batch=128, pred_iou_thresh=0.88) +``` + +تبدو `الأقنعة` على النحو التالي: + +```bash +{'masks': [array([[False, False, False, ..., True, True, True], + [False, False, False, ..., True, True, True], + [False, False, False, ..., True, True, True], + ..., + [False, False, False, ..., False, False, False], + [False, False, False, ..., False, False, False], + [False, False, False, ..., False, False, False]]), + array([[False, False, False, ..., False, False, False], + [False, False, False, ..., False, False, False], + [False, False, False, ..., False, False, False], + ..., +'scores': tensor([0.9972, 0.9917, + ..., +} +``` + +يمكننا تصورها على النحو التالي: + +```python +import matplotlib.pyplot as plt + +plt.imshow(image, cmap='gray') + +for i, mask in enumerate(masks["masks"]): + plt.imshow(mask, cmap='viridis', alpha=0.1, vmin=0, vmax=1) + +plt.axis('off') +plt.show() +``` + +فيما يلي الصورة الأصلية باللون الرمادي مع خرائط ملونة فوقها. رائع جدا. + +![مرئي](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee_segmented.png) + +## استنتاج النموذج + +### إشارة نقطة + +يمكنك أيضًا استخدام النموذج بدون خط الأنابيب. للقيام بذلك، قم بتهيئة النموذج والمعالج. + +```python +from transformers import SamModel, SamProcessor +import torch + +device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + +model = SamModel.from_pretrained("facebook/sam-vit-base").to(device) +processor = SamProcessor.from_pretrained("facebook/sam-vit-base") +``` + +للقيام بالإشارة النقطية، قم بتمرير نقطة الإدخال إلى المعالج، ثم خذ إخراج المعالج +وقم بتمريره إلى النموذج للاستدلال. لمعالجة إخراج النموذج، قم بتمرير الإخراج و +`الأحجام الأصلية` و`reshaped_input_sizes` نأخذ من الإخراج الأولي للمعالج. نحن بحاجة إلى تمرير هذه +نظرًا لأن المعالج يقوم بإعادة تحجيم الصورة، ويجب استقراء الإخراج. + +```python +input_points = [[[2592, 1728]]] # point location of the bee + +inputs = processor(image, input_points=input_points, return_tensors="pt").to(device) +with torch.no_grad(): + outputs = model(**inputs) +masks = processor.image_processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"].cpu(), inputs["reshaped_input_sizes"].cpu()) +``` + +يمكننا تصور الأقنعة الثلاثة في إخراج `الأقنعة`. + +```python +import matplotlib.pyplot as plt +import numpy as np + +fig, axes = plt.subplots(1, 4, figsize=(15, 5)) + +axes[0].imshow(image) +axes[0].set_title('Original Image') +mask_list = [masks[0][0][0].numpy(), masks[0][0][1].numpy(), masks[0][0][2].numpy()] + +for i, mask in enumerate(mask_list, start=1): + overlayed_image = np.array(image).copy() + + overlayed_image[:,:,0] = np.where(mask == 1, 255, overlayed_image[:,:,0]) + overlayed_image[:,:,1] = np.where(mask == 1, 0, overlayed_image[:,:,1]) + overlayed_image[:,:,2] = np.where(mask == 1, 0, overlayed_image[:,:,2]) + + axes[i].imshow(overlayed_image) + axes[i].set_title(f'Mask {i}') +for ax in axes: + ax.axis('off') + +plt.show() +``` + +![مرئي](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/masks.png) + +### إشارة المربع + +يمكنك أيضًا إجراء إشارة المربع بطريقة مماثلة للإشارة النقطية. يمكنك ببساطة تمرير مربع الإدخال بتنسيق قائمة +`[x_min، y_min، x_max، y_max]` تنسيق جنبًا إلى جنب مع الصورة إلى `المعالج`. خذ إخراج المعالج ومرره مباشرةً +إلى النموذج، ثم قم بمعالجة الإخراج مرة أخرى. + +```python +# bounding box around the bee +box = [2350, 1600, 2850, 2100] + +inputs = processor( + image, + input_boxes=[[[box]]], + return_tensors="pt" + ).to("cuda") + +with torch.no_grad(): + outputs = model(**inputs) + +mask = processor.image_processor.post_process_masks( + outputs.pred_masks.cpu(), + inputs["original_sizes"].cpu(), + inputs["reshaped_input_sizes"].cpu() +)[0][0][0].numpy() +``` + +يمكنك تصور مربع الحدود حول النحلة كما هو موضح أدناه. + +```python +import matplotlib.patches as patches + +fig, ax = plt.subplots() +ax.imshow(image) + +rectangle = patches.Rectangle((2350, 1600), 500, 500, linewidth=2, edgecolor='r', facecolor='none') +ax.add_patch(rectangle) +ax.axis("off") +plt.show() +``` + +![مرئي Bbox](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/bbox.png) + +يمكنك رؤية إخراج الاستدلال أدناه. + +```python +fig, ax = plt.subplots() +ax.imshow(image) +ax.imshow(mask, cmap='viridis', alpha=0.4) + +ax.axis("off") +plt.show() +``` + +![مرئي الاستدلال](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/box_inference.png) \ No newline at end of file From 3cd63f0dacff59963bca622e235521632d3a06e1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:37 +0300 Subject: [PATCH 090/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/language=5Fmodeling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/language_modeling.md | 404 ++++++++++++++++++++++ 1 file changed, 404 insertions(+) create mode 100644 docs/source/ar/tasks/language_modeling.md diff --git a/docs/source/ar/tasks/language_modeling.md b/docs/source/ar/tasks/language_modeling.md new file mode 100644 index 00000000000000..1653397223baaf --- /dev/null +++ b/docs/source/ar/tasks/language_modeling.md @@ -0,0 +1,404 @@ +# النمذجة اللغوية السببية + +هناك نوعان من النمذجة اللغوية، النمذجة السببية والنمذجة المقنعة. يوضح هذا الدليل النمذجة اللغوية السببية. + +تُستخدم نماذج اللغة السببية بشكل متكرر لتوليد النصوص. يمكنك استخدام هذه النماذج لتطبيقات إبداعية مثل اختيار مغامرتك النصية الخاصة أو مساعد ترميز ذكي مثل Copilot أو CodeParrot. + +تنبؤ النمذجة اللغوية السببية بالرمز التالي في تسلسل من الرموز، ولا يمكن للنموذج سوى الاهتمام بالرموز الموجودة على اليسار. وهذا يعني أن النموذج لا يمكنه رؤية الرموز المستقبلية. يعد GPT-2 مثالًا على نموذج اللغة السببي. + +سيوضح لك هذا الدليل كيفية: + +1. ضبط نموذج [DistilGPT2](https://huggingface.co/distilbert/distilgpt2) الدقيق على مجموعة فرعية [r/askscience](https://www.reddit.com/r/askscience/) من مجموعة بيانات [ELI5](https://huggingface.co/datasets/eli5). +2. استخدام نموذجك الدقيق للاستنتاج. + +قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك لتسجيل الدخول: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات ELI5 + +ابدأ بتحميل أول 5000 مثال من مجموعة بيانات [ELI5-Category](https://huggingface.co/datasets/eli5_category) باستخدام مكتبة Datasets 🤗. سيعطيك هذا فرصة لتجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from datasets import load_dataset + +>>> eli5 = load_dataset("eli5_category", split="train[:5000]") +``` + +قسّم مجموعة البيانات إلى مجموعات فرعية للتدريب والاختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + +```py +>>> eli5 = eli5.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: +```py +>>> eli5 = eli5.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: + +```py +>>> eli5["train"][0] +{'q_id': '7h191n', + 'title': 'What does the tax bill that was passed today mean? How will it affect Americans in each tax bracket?', + 'selftext': '', + 'category': 'Economics', + 'subreddit': 'explainlikeimfive', + 'answers': {'a_id': ['dqnds8l', 'dqnd1jl', 'dqng3i1', 'dqnku5x'], + 'text': ["The tax bill is 500 pages long and there were a lot of changes still going on right to the end. It's not just an adjustment to the income tax brackets, it's a whole bunch of changes. As such there is no good answer to your question. The big take aways are: - Big reduction in corporate income tax rate will make large companies very happy. - Pass through rate change will make certain styles of business (law firms, hedge funds) extremely happy - Income tax changes are moderate, and are set to expire (though it's the kind of thing that might just always get re-applied without being made permanent) - People in high tax states (California, New York) lose out, and many of them will end up with their taxes raised.", + 'None yet. It has to be reconciled with a vastly different house bill and then passed again.', + 'Also: does this apply to 2017 taxes? Or does it start with 2018 taxes?', + 'This article explains both the House and senate bills, including the proposed changes to your income taxes based on your income level. URL_0'], + 'score': [21, 19, 5, 3], + 'text_urls': [[], + [], + [], + ['https://www.investopedia.com/news/trumps-tax-reform-what-can-be-done/']]}, + 'title_urls': ['url'], + 'selftext_urls': ['url']} +``` + +على الرغم من أن هذا قد يبدو كثيرًا، إلا أنك مهتم حقًا فقط بحقل "النص". ما هو رائع حول مهام نمذجة اللغة هو أنك لا تحتاج إلى علامات (تُعرف أيضًا باسم المهمة غير الخاضعة للإشراف) لأن الكلمة التالية هي التسمية. + +## معالجة مسبقة + +الخطوة التالية هي تحميل برنامج تشفير DistilGPT2 لمعالجة حقل "النص": + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2") +``` + +ستلاحظ من المثال أعلاه، أن حقل "النص" موجود بالفعل داخل "الإجابات". وهذا يعني أنك ستحتاج إلى + +استخراج حقل "النص" من هيكله المضمن باستخدام طريقة [`flatten`](https://huggingface.co/docs/datasets/process#flatten): + +```py +>>> eli5 = eli5.flatten() +>>> eli5["train"][0] +{'q_id': '7h191n', + 'title': 'What does the tax bill that was passed today mean? How will it affect Americans in each tax bracket?', + 'selftext': '', + 'category': 'Economics', + 'subreddit': 'explainlikeimfive', + 'answers.a_id': ['dqnds8l', 'dqnd1jl', 'dqng3i1', 'dqnku5x'], + 'answers.text': ["The tax bill is 500 pages long and there were a lot of changes still going on right to the end. It's not just an adjustment to the income tax brackets, it's a whole bunch of changes. As such there is no good answer to your question. The big take aways are: - Big reduction in corporate income tax rate will make large companies very happy. - Pass through rate change will make certain styles of business (law firms, hedge funds) extremely happy - Income tax changes are moderate, and are set to expire (though it's the kind of thing that might just always get re-applied without being made permanent) - People in high tax states (California, New York) lose out, and many of them will end up with their taxes raised.", + 'None yet. It has to be reconciled with a vastly different house bill and then passed again.', + 'Also: does this apply to 2017 taxes? Or does it start with 2018 taxes?', + 'This article explains both the House and senate bills, including the proposed changes to your income taxes based on your income level. URL_0'], + 'answers.score': [21, 19, 5, 3], + 'answers.text_urls': [[], + [], + [], + ['https://www.investopedia.com/news/trumps-tax-reform-what-can-be-done/']], + 'title_urls': ['url'], + 'selftext_urls': ['url']} +``` + +كل حقل فرعي هو الآن عمود منفصل كما هو موضح بالبادئة "الإجابات"، وحقل "النص" هو قائمة الآن. بدلاً من تشفير كل جملة بشكل منفصل، قم بتحويل القائمة إلى سلسلة حتى تتمكن من تشفيرها بشكل مشترك. + +إليك دالة المعالجة المسبقة الأولى لدمج قائمة السلاسل لكل مثال وتشفير النتيجة: + +```py +>>> def preprocess_function(examples): +... return tokenizer([" ".join(x) for x in examples["answers.text"]]) +``` + +لتطبيق دالة المعالجة المسبقة هذه على مجموعة البيانات بأكملها، استخدم طريقة [`~datasets.Dataset.map`] في مكتبة Datasets 🤗. يمكنك تسريع وظيفة "المخطط" عن طريق تعيين "batched=True" لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد، وزيادة عدد العمليات باستخدام "num_proc". احذف أي أعمدة لا تحتاجها: + +```py +>>> tokenized_eli5 = eli5.map( +... preprocess_function, +... batched=True, +... num_proc=4, +... remove_columns=eli5["train"].column_names, +... ) +``` + +تحتوي مجموعة البيانات هذه على تسلسلات الرموز، ولكن بعضها أطول من طول الإدخال الأقصى للنموذج. + +الآن يمكنك استخدام دالة المعالجة المسبقة الثانية للقيام بما يلي: + +- دمج جميع التسلسلات +- تقسيم التسلسلات المدمجة إلى قطع أقصر محددة بواسطة "block_size"، والتي يجب أن تكون أقصر من طول الإدخال الأقصى وقصيرة بما يكفي لذاكرة GPU. + +```py +>>> block_size = 128 + + +>>> def group_texts(examples): +... # Concatenate all texts. +... concatenated_examples = {k: sum(examples[k], []) for k in examples.keys()} +... total_length = len(concatenated_examples[list(examples.keys())[0]]) +... # We drop the small remainder, we could add padding if the model supported it instead of this drop, you can +... # customize this part to your needs. +... if total_length >= block_size: +... total_length = (total_length // block_size) * block_size +... # Split by chunks of block_size. +... result = { +... k: [t[i : i + block_size] for i in range(0, total_length, block_size)] +... for k, t in concatenated_examples.items() +... } +... result["labels"] = result["input_ids"].copy() +... return result +``` + +طبق دالة "group_texts" على مجموعة البيانات بأكملها: + +```py +>>> lm_dataset = tokenized_eli5.map(group_texts, batched=True, num_proc=4) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DataCollatorForLanguageModeling`]. من الأكثر كفاءة *توسيد ديناميكي* + +الجمل إلى أطول طول في دفعة أثناء التجميع، بدلاً من توسيد مجموعة البيانات بأكملها إلى الطول الأقصى. + + + +استخدم رمز نهاية التسلسل كرموز للتوسيد وقم بتعيين "mlm=False". سيتم استخدام الإدخالات كعلامات منزاحة إلى اليمين برمز واحد: + +```py +>>> from transformers import DataCollatorForLanguageModeling + +>>> tokenizer.pad_token = tokenizer.eos_token +>>> data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False) +``` + + + +استخدم رمز نهاية التسلسل كرموز للتوسيد وقم بتعيين "mlm=False". سيتم استخدام الإدخالات كعلامات منزاحة إلى اليمين برمز واحد: + +```py +>>> from transformers import DataCollatorForLanguageModeling + +>>> data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False, return_tensors="tf") +``` + + + + + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`، فراجع الدليل التعليمي الأساسي](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل DistilGPT2 باستخدام [`AutoModelForCausalLM`]: + +```py +>>> from transformers import AutoModelForCausalLM, TrainingArguments, Trainer + +>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2") +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة المطلوبة الوحيدة هي "output_dir" والتي تحدد أين يتم حفظ نموذجك. يمكنك دفع هذا النموذج إلى Hub عن طريق تعيين "push_to_hub=True" (يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك). +2. قم بتمرير فرط معلمات التدريب إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعات البيانات ومجمع البيانات. +3. استدعاء [`~Trainer.train`] لضبط نموذجك. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_eli5_clm-model", +... eval_strategy="epoch"، +... learning_rate=2e-5, +... weight_decay=0.01, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=lm_dataset["train"]، +... eval_dataset=lm_dataset["test"]، +... data_collator=data_collator, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، استخدم طريقة [`~transformers.Trainer.evaluate`] لتقييم نموذجك والحصول على غموضه: + +```py +>>> import math + +>>> eval_results = trainer.evaluate() +>>> print(f"Perplexity: {math.exp(eval_results['eval_loss']):.2f}") +Perplexity: 49.61 +``` + +ثم شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام Keras، [فراجع الدليل التعليمي الأساسي](../training#train-a-tensorflow-model-with-keras)! + + +لضبط نموذج في TensorFlow، ابدأ بإعداد دالة محسن ومعدل تعلم وجدول تعلم وبعض فرط معلمات التدريب: + +```py +>>> from transformers import create_optimizer, AdamWeightDecay + +>>> optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01) +``` + +بعد ذلك، يمكنك تحميل DistilGPT2 باستخدام [`TFAutoModelForCausalLM`]: + +```py +>>> from transformers import TFAutoModelForCausalLM + +>>> model = TFAutoModelForCausalLM.from_pretrained("distilbert/distilgpt2") +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق "tf.data.Dataset" باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... lm_dataset["train"]، +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) + +>>> tf_test_set = model.prepare_tf_dataset( +... lm_dataset["test"]، +... shuffle=False, +... batch_size=16, +... collate_fn=data_collator, +... ) +``` + +قم بتكوين النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers تحتوي على دالة خسارة افتراضية ذات صلة بالمهمة، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) # لا توجد وسيطة خسارة! +``` + +يمكن القيام بذلك عن طريق تحديد المكان الذي ستدفع فيه نموذجك وبرنامج الترميز الخاص بك في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> callback = PushToHubCallback( +... output_dir="my_awesome_eli5_clm-model"، +... tokenizer=tokenizer, +... ) +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! استدعاء [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) مع مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، واستدعاء الإرجاع الخاص بك لضبط النموذج: + +```py +>>> model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=3, callbacks=[callback]) +``` + +بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه! + + + + + +للحصول على مثال أكثر تعمقًا حول كيفية ضبط نموذج للنمذجة اللغوية السببية، راجع دفتر ملاحظات PyTorch المقابل [هنا](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb) +أو دفتر ملاحظات TensorFlow [هنا](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). + + + +## الاستنتاج + +رائع، الآن بعد أن قمت بضبط نموذج بدقة، يمكنك استخدامه للاستنتاج! + +فكر في مطالبة تريد توليد نص منها: + +```py +>>> prompt = "Somatic hypermutation allows the immune system to" +``` + +أبسط طريقة لتجربة نموذجك المضبوط الدقيق للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ مثيل `pipeline` لتوليد النص باستخدام نموذجك، ومرر نصك إليه: + +```py +>>> from transformers import pipeline + +>>> generator = pipeline("text-generation", model="username/my_awesome_eli5_clm-model") +>>> generator(prompt) +[{'generated_text': "Somatic hypermutation allows the immune system to be able to effectively reverse the damage caused by an infection.\n\n\nThe damage caused by an infection is caused by the immune system's ability to perform its own self-correcting tasks."}] +``` + + + +قم بتوكنات النص وإرجاع `input_ids` كرموز تعبيرية PyTorch: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("username/my_awesome_eli5_clm-model") +>>> inputs = tokenizer(prompt, return_tensors="pt").input_ids +``` + +استخدم طريقة [`~generation.GenerationMixin.generate`] لتوليد النص. +للحصول على مزيد من التفاصيل حول استراتيجيات توليد النص المختلفة والمعلمات للتحكم في التوليد، راجع صفحة [استراتيجيات توليد النص](../generation_strategies). + +```py +>>> from transformers import AutoModelForCausalLM + +>>> model = AutoModelForCausalLM.from_pretrained("username/my_awesome_eli5_clm-model") +>>> outputs = model.generate(inputs, max_new_tokens=100, do_sample=True, top_k=50, top_p=0.95) +``` + +فك تشفير رموز الرموز المولدة مرة أخرى إلى نص: + +```py +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +["Somatic hypermutation allows the immune system to react to drugs with the ability to adapt to a different environmental situation. In other words, a system of 'hypermutation' can help the immune system to adapt to a different environmental situation or in some cases even a single life. In contrast, researchers at the University of Massachusetts-Boston have found that 'hypermutation' is much stronger in mice than in humans but can be found in humans, and that it's not completely unknown to the immune system. A study on how the immune system"] +``` + + +قم بتوكنات النص وإرجاع `input_ids` كرموز تعبيرية TensorFlow: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("username/my_awesome_eli5_clm-model") +>>> inputs = tokenizer(prompt, return_tensors="tf").input_ids +``` + +استخدم طريقة [`~transformers.generation_tf_utils.TFGenerationMixin.generate`] لإنشاء الملخص. للحصول على مزيد من التفاصيل حول استراتيجيات توليد النص المختلفة والمعلمات للتحكم في التوليد، راجع صفحة [استراتيجيات توليد النص](../generation_strategies). + +```py +>>> from transformers import TFAutoModelForCausalLM + +>>> model = TFAutoModelForCausalLM.from_pretrained("username/my_awesome_eli5_clm-model") +>>> outputs = model.generate(input_ids=inputs، max_new_tokens=100، do_sample=True، top_k=50، top_p=0.95) +``` + +فك تشفير رموز الرموز المولدة مرة أخرى إلى نص: + +```py +>>> tokenizer.batch_decode(outputs، skip_special_tokens=True) +['Somatic hypermutation allows the immune system to detect the presence of other viruses as they become more prevalent. Therefore, researchers have identified a high proportion of human viruses. The proportion of virus-associated viruses in our study increases with age. Therefore, we propose a simple algorithm to detect the presence of these new viruses in our samples as a sign of improved immunity. A first study based on this algorithm, which will be published in Science on Friday, aims to show that this finding could translate into the development of a better vaccine that is more effective for'] +``` + + \ No newline at end of file From 9f911cce149d169dc8742356f4cd031aa9efa170 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:39 +0300 Subject: [PATCH 091/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/text-to-speech.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/text-to-speech.md | 504 +++++++++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 docs/source/ar/tasks/text-to-speech.md diff --git a/docs/source/ar/tasks/text-to-speech.md b/docs/source/ar/tasks/text-to-speech.md new file mode 100644 index 00000000000000..8e096c596259de --- /dev/null +++ b/docs/source/ar/tasks/text-to-speech.md @@ -0,0 +1,504 @@ +# تحويل النص إلى كلام + +[[open-in-colab]] + +تحويل النص إلى كلام (TTS) هي مهمة إنشاء كلام طبيعي من نص مكتوب، حيث يمكن توليد الكلام بعدة لغات ولعدة متحدثين. هناك العديد من نماذج تحويل النص إلى كلام المتاحة حاليًا في 🤗 Transformers، مثل [Bark](../model_doc/bark)، [MMS](../model_doc/mms)، [VITS](../model_doc/vits) و [SpeechT5](../model_doc/speecht5). + +يمكنك بسهولة إنشاء صوت باستخدام خط أنابيب "text-to-audio" (أو الاسم المستعار الخاص به - "text-to-speech"). يمكن لبعض النماذج، مثل Bark، أيضًا أن تكون مشروطة لتوليد اتصالات غير لفظية مثل الضحك والتنهد والبكاء، أو حتى إضافة الموسيقى. +فيما يلي مثال على كيفية استخدام خط أنابيب "text-to-speech" مع Bark: + +```py +>>> from transformers import pipeline + +>>> pipe = pipeline("text-to-speech", model="suno/bark-small") +>>> text = "[clears throat] This is a test ... and I just took a long pause." +>>> output = pipe(text) +``` + +فيما يلي مقتطف من التعليمات البرمجية التي يمكنك استخدامها للاستماع إلى الصوت الناتج في دفتر الملاحظات: + +```python +>>> from IPython.display import Audio +>>> Audio(output["audio"], rate=output["sampling_rate"]) +``` + +للحصول على المزيد من الأمثلة على ما يمكن أن تفعله Bark ونماذج TTS الأخرى المُدربة مسبقًا، راجع [دورة الصوت](https://huggingface.co/learn/audio-course/chapter6/pre-trained_models) الخاصة بنا. + +إذا كنت ترغب في ضبط نموذج TTS، فإن النماذج الوحيدة لتحويل النص إلى كلام المتاحة حاليًا في 🤗 Transformers هي [SpeechT5](model_doc/speecht5) و [FastSpeech2Conformer](model_doc/fastspeech2_conformer)، على الرغم من أنه سيتم إضافة المزيد في المستقبل. تم تدريب SpeechT5 مسبقًا على مجموعة من بيانات تحويل الكلام إلى نص وتحويل النص إلى كلام، مما يسمح لها بتعلم مساحة موحدة من التمثيلات المخفية التي يشاركها كل من النص والكلام. وهذا يعني أنه يمكن ضبط نفس النموذج المُدرب مسبقًا لمهام مختلفة. علاوة على ذلك، يدعم SpeechT5 متحدثين متعددين من خلال تضمين المتحدث x. + +يوضح باقي هذا الدليل كيفية: + +1. ضبط نموذج [SpeechT5](../model_doc/speecht5) الذي تم تدريبه في الأصل على الكلام باللغة الإنجليزية على اللغة الهولندية (`nl`)، وهي مجموعة فرعية من مجموعة بيانات [VoxPopuli](https://huggingface.co/datasets/facebook/voxpopuli). +2. استخدام نموذجك المحسن للاستنتاج بطريقتين: باستخدام خط أنابيب أو مباشرة. + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install datasets soundfile speechbrain accelerate +``` + +قم بتثبيت 🤗Transformers من المصدر حيث لم يتم دمج جميع ميزات SpeechT5 في إصدار رسمي بعد: + +```bash +pip install git+https://github.com/huggingface/transformers.git +``` + + + +للحصول على هذا الدليل، ستحتاج إلى GPU. إذا كنت تعمل في دفتر ملاحظات، فقم بتشغيل السطر التالي للتحقق مما إذا كانت GPU متوفرة: + +```bash +!nvidia-smi +``` + +أو بديل لـ GPUs AMD: + +```bash +!rocm-smi +``` + + + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك لتحميل ومشاركة نموذجك مع المجتمع. عندما يتم مطالبتك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة البيانات +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة البيانات + +[VoxPopuli](https://huggingface.co/datasets/facebook/voxpopuli) هي مجموعة بيانات صوتية متعددة اللغات واسعة النطاق تتكون من +بيانات مستخرجة من تسجيلات أحداث البرلمان الأوروبي من 2009 إلى 2020. يحتوي على بيانات صوتية منقحة لخمس عشرة +لغة أوروبية. في هذا الدليل، نستخدم المجموعة الفرعية للغة الهولندية، لا تتردد في اختيار مجموعة فرعية أخرى. + +لاحظ أن VoxPopuli أو أي مجموعة بيانات أخرى للتعرف التلقائي على الكلام (ASR) قد لا تكون الخيار الأنسب +لتدريب نماذج TTS. الميزات التي تجعلها مفيدة لـ ASR، مثل الضوضاء الخلفية المفرطة، غير مرغوب فيها عادة في TTS. ومع ذلك، يمكن أن يكون العثور على مجموعات بيانات TTS عالية الجودة ومتعددة اللغات والمتعددة المتحدثين أمرًا صعبًا للغاية. + +دعنا نحمل البيانات: + +```py +>>> from datasets import load_dataset, Audio + +>>> dataset = load_dataset("facebook/voxpopuli", "nl", split="train") +>>> len(dataset) +20968 +``` + +20968 مثال يجب أن يكون كافيًا للضبط الدقيق. يتوقع SpeechT5 أن يكون لمجموعة البيانات معدل أخذ عينات يبلغ 16 كيلو هرتز، لذا +تأكد من أن الأمثلة في مجموعة البيانات تلبي هذا الشرط: + +```py +dataset = dataset.cast_column("audio", Audio(sampling_rate=16000)) +``` + +## معالجة البيانات مسبقًا + +دعنا نبدأ بتحديد نقطة تفتيش النموذج لتحميلها وتحميل المعالج المناسب: + +```py +>>> from transformers import SpeechT5Processor + +>>> checkpoint = "microsoft/speecht5_tts" +>>> processor = SpeechT5Processor.from_pretrained(checkpoint) +``` + +### تنظيف النص لتوكينيز SpeechT5 + +ابدأ بتنظيف بيانات النص. ستحتاج إلى الجزء المعالج من المعالج لمعالجة النص: + +```py +>>> tokenizer = processor.tokenizer +``` + +تحتوي أمثلة مجموعة البيانات على ميزات `raw_text` و `normalized_text`. عند اتخاذ قرار بشأن الميزة التي سيتم استخدامها كإدخال نصي، +ضع في اعتبارك أن معالج SpeechT5 لا يحتوي على أي رموز للأرقام. في `normalized_text` يتم كتابة الأرقام +كـنص. وبالتالي، فهو مناسب بشكل أفضل، ونوصي باستخدام `normalized_text` كنص إدخال. + +نظرًا لأن SpeechT5 تم تدريبه على اللغة الإنجليزية، فقد لا يتعرف على أحرف معينة في مجموعة البيانات الهولندية. إذا +تم تركها كما هي، فسيتم تحويل هذه الأحرف إلى رموز ``. ومع ذلك، في اللغة الهولندية، يتم استخدام أحرف معينة مثل `à` +للتأكيد على المقاطع. للحفاظ على معنى النص، يمكننا استبدال هذا الحرف بـ `a` عادي. + +لتحديد الرموز غير المدعومة، استخرج جميع الأحرف الفريدة في مجموعة البيانات باستخدام `SpeechT5Tokenizer` +التي تعمل مع الأحرف كرموز. للقيام بذلك، اكتب وظيفة `extract_all_chars` mapping التي تقوم بدمج +نصوص من جميع الأمثلة في سلسلة واحدة وتحويلها إلى مجموعة من الأحرف. +تأكد من تعيين `batched=True` و `batch_size=-1` في `dataset.map()` بحيث تكون جميع النصوص متاحة مرة واحدة لوظيفة الخريطة. + +```py +>>> def extract_all_chars(batch): +... all_text = " ".join(batch["normalized_text"]) +... vocab = list(set(all_text)) +... return {"vocab": [vocab], "all_text": [all_text]} + + +>>> vocabs = dataset.map( +... extract_all_chars, +... batched=True, +... batch_size=-1, +... keep_in_memory=True, +... remove_columns=dataset.column_names, +... ) + +>>> dataset_vocab = set(vocabs["vocab"][0]) +>>> tokenizer_vocab = {k for k, _ in tokenizer.get_vocab().items()} +``` + +الآن لديك مجموعتان من الأحرف: واحدة مع المفردات من مجموعة البيانات والأخرى مع المفردات من المعالج. +لتحديد أي أحرف غير مدعومة في مجموعة البيانات، يمكنك أخذ الفرق بين هاتين المجموعتين. ستتضمن النتيجة +تعيين الأحرف الموجودة في مجموعة البيانات ولكن ليس في المعالج. + +```py +>>> dataset_vocab - tokenizer_vocab +{' ', 'à', 'ç', 'è', 'ë', 'í', 'ï', 'ö', 'ü'} +``````py +>>> dataset_vocab - tokenizer_vocab +{' ', 'à', 'ç', 'è', 'ë', 'í', 'ï', 'ö', 'ü'} +``` + +لمعالجة الأحرف غير المدعومة التي تم تحديدها في الخطوة السابقة، حدد وظيفة تقوم بتعيين هذه الأحرف إلى +رموز صالحة. لاحظ أن المسافات يتم استبدالها بالفعل بـ `▁` في المعالج ولا تحتاج إلى معالجة منفصلة. + +```py +>>> replacements = [ +... ("à", "a"), +... ("ç", "c"), +... ("è", "e"), +... ("ë", "e"), +... ("í", "i"), +... ("ï", "i"), +... ("ö", "o"), +... ("ü", "u"), +... ] + + +>>> def cleanup_text(inputs): +... for src, dst in replacements: +... inputs["normalized_text"] = inputs["normalized_text"].replace(src, dst) +... return inputs + + +>>> dataset = dataset.map(cleanup_text) +``` + +الآن بعد أن تعاملت مع الأحرف الخاصة في النص، حان الوقت للتركيز على بيانات الصوت. + +### المتحدثون + +تتضمن مجموعة بيانات VoxPopuli كلامًا من متحدثين متعددين، ولكن كم عدد المتحدثين الممثلين في مجموعة البيانات؟ لتحديد ذلك، يمكننا +عد عدد المتحدثين الفريدين وعدد الأمثلة التي يساهم بها كل متحدث في مجموعة البيانات. +مع ما مجموعه 20968 مثال في مجموعة البيانات، ستمنحنا هذه المعلومات فهمًا أفضل لتوزيع المتحدثين والأمثلة في البيانات. + +```py +>>> from collections import defaultdict + +>>> speaker_counts = defaultdict(int) + +>>> for speaker_id in dataset["speaker_id"]: +... speaker_counts[speaker_id] += 1 +``` + +من خلال رسم مخطط توزيع التكراري، يمكنك الحصول على فكرة عن مقدار البيانات المتوفرة لكل متحدث. + +```py +>>> import matplotlib.pyplot as plt + +>>> plt.figure() +>>> plt0.hist(speaker_counts.values(), bins=20) +>>> plt.ylabel("Speakers") +>>> plt.xlabel("Examples") +>>> plt.show() +``` + +
+ Speakers histogram +
+ +يكشف مخطط التوزيع التكراري أن حوالي ثلث المتحدثين في مجموعة البيانات لديهم أقل من 100 مثال، في حين أن حوالي عشرة متحدثين لديهم أكثر من 500 مثال. لتحسين كفاءة التدريب وتوازن مجموعة البيانات، يمكننا تحديد +البيانات إلى متحدثين يتراوح عددهم بين 100 و400 مثال. + +```py +>>> def select_speaker(speaker_id): +... return 100 <= speaker_counts[speaker_id] <= 400 + + +>>> dataset = dataset.filter(select_speaker, input_columns=["speaker_id"]) +``` + +دعنا نتحقق من عدد المتحدثين المتبقين: + +```py +>>> len(set(dataset["speaker_id"])) +42 +``` + +دعنا نرى عدد الأمثلة المتبقية: + +```py +>>> len(dataset) +9973 +``` + +أنت الآن لديك أقل بقليل من 10000 مثال من حوالي 40 متحدثًا فريدًا، وهو ما يجب أن يكون كافيًا. + +لاحظ أن بعض المتحدثين ذوي الأمثلة القليلة قد يكون لديهم في الواقع المزيد من الصوت المتاح إذا كانت الأمثلة طويلة. ومع ذلك، +تحديد إجمالي مقدار الصوت لكل متحدث يتطلب فحص مجموعة البيانات بأكملها، وهي عملية تستغرق وقتًا طويلاً تنطوي على تحميل وفك تشفير كل ملف صوتي. لذلك، لقد اخترنا تخطي هذه الخطوة هنا. + +### تضمين المتحدث + +لتمكين نموذج TTS من التمييز بين متحدثين متعددين، ستحتاج إلى إنشاء تضمين متحدث لكل مثال. +تضمين المتحدث هو إدخال إضافي في النموذج الذي يلتقط خصائص صوت المتحدث. +لإنشاء هذه التضمينات المتحدث، استخدم النموذج المُدرب مسبقًا [spkrec-xvect-voxceleb](https://huggingface.co/speechbrain/spkrec-xvect-voxceleb) +من SpeechBrain. + +قم بإنشاء وظيفة `create_speaker_embedding()` التي تأخذ موجة صوت إدخال وتخرج متجه 512 عنصرًا +يحتوي على تضمين المتحدث المقابل. + +```py +>>> import os +>>> import torch +>>> from speechbrain.inference.classifiers import EncoderClassifier + +>>> spk_model_name = "speechbrain/spkrec-xvect-voxceleb" +```py +>>> import os +>>> import torch +>>> from speechbrain.inference.classifiers import EncoderClassifier + +>>> spk_model_name = "speechbrain/spkrec-xvect-voxceleb" + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> speaker_model = EncoderClassifier.from_hparams( +... source=spk_model_name, +... run_opts={"device": device}, +... savedir=os.path.join("/tmp", spk_model_name), +... ) + + +>>> def create_speaker_embedding(waveform): +... with torch.no_grad(): +... speaker_embeddings = speaker_model.encode_batch(torch.tensor(waveform)) +... speaker_embeddings = torch.nn.functional.normalize(speaker_embeddings, dim=2) +... speaker_embeddings = speaker_embeddings.squeeze().cpu().numpy() +... return speaker_embeddings +``` + +من المهم ملاحظة أن النموذج `speechbrain/spkrec-xvect-voxceleb` تم تدريبه على الكلام باللغة الإنجليزية من مجموعة بيانات VoxCeleb +في حين أن أمثلة التدريب في هذا الدليل باللغة الهولندية. في حين أننا نعتقد أن هذا النموذج سيظل يولد +تضمينات المتحدثين المعقولين لمجموعة البيانات الهولندية الخاصة بنا، فقد لا يكون هذا الافتراض صحيحًا في جميع الحالات. + +للحصول على نتائج مثالية، نوصي بتدريب نموذج X-vector على الكلام المستهدف أولاً. سيكفل ذلك قدرة النموذج على +الالتقاط بشكل أفضل لخصائص الصوت الفريدة الموجودة في اللغة الهولندية. + +### معالجة مجموعة البيانات + +أخيرًا، دعنا نقوم بمعالجة البيانات إلى التنسيق الذي يتوقعه النموذج. قم بإنشاء وظيفة `prepare_dataset` التي تأخذ مثالًا واحدًا وتستخدم كائن `SpeechT5Processor` لتوكينيز إدخال النص وتحميل الصوت المستهدف في مخطط Mel-spectrogram. +يجب أن تضيف أيضًا تضمينات المتحدثين كإدخال إضافي. + +```py +>>> def prepare_dataset(example): +... audio = example["audio"] + +... example = processor( +... text=example["normalized_text"], +... audio_target=audio["array"], +... sampling_rate=audio["sampling_rate"], +... return_attention_mask=False, +... ) + +... # strip off the batch dimension +... example["labels"] = example["labels"][0] + +... # use SpeechBrain to obtain x-vector +... example["speaker_embeddings"] = create_speaker_embedding(audio["array"]) + +... return example +``` + +تحقق من صحة المعالجة عن طريق النظر في مثال واحد: + +```py +>>> processed_example = prepare_dataset(dataset[0]) +>>> list(processed_example.keys()) +['input_ids', 'labels', 'stop_labels', 'speaker_embeddings'] +``` + +يجب أن تكون تضمينات المتحدثين عبارة عن متجه مكون من 512 عنصرًا: + +```py +>>> processed_example["speaker_embeddings"].shape +(512,) +``` + +يجب أن تكون التسم +لم يتم ترجمة الأجزاء المحددة من النص الأصلي بناءً على طلبك. + +```python +>>> from transformers import Seq2SeqTrainingArguments + +>>> training_args = Seq2SeqTrainingArguments( +... output_dir="speecht5_finetuned_voxpopuli_nl", # قم بتغييره إلى اسم مستودع من اختيارك +... per_device_train_batch_size=4, +... gradient_accumulation_steps=8, +... learning_rate=1e-5, +... warmup_steps=500, +... max_steps=4000, +... gradient_checkpointing=True, +... fp16=True, +... eval_strategy="steps", +... per_device_eval_batch_size=2, +... save_steps=1000, +... eval_steps=1000, +... logging_steps=25, +... report_to=["tensorboard"], +... load_best_model_at_end=True, +... greater_is_better=False, +... label_names=["labels"], +... push_to_hub=True, +... ) +``` + +قم بتهيئة كائن 'Trainer' ومرر إليه النموذج ومجموعة البيانات ووسيلة تجميع البيانات. + +```py +>>> from transformers import Seq2SeqTrainer + +>>> trainer = Seq2SeqTrainer( +... args=training_args, +... model=model, +... train_dataset=dataset["train"], +... eval_dataset=dataset["test"], +... data_collator=data_collator, +... tokenizer=processor, +... ) +``` + +والآن، أنت مستعد لبدء التدريب! سيستغرق التدريب عدة ساعات. واعتمادًا على وحدة معالجة الرسوميات (GPU) لديك، فقد تواجه خطأ "نفاد الذاكرة" في CUDA عند بدء التدريب. في هذه الحالة، يمكنك تقليل `per_device_train_batch_size` بشكل تدريجي بمضاعفات 2 وزيادة `gradient_accumulation_steps` بمقدار 2x للتعويض. + +```py +>>> trainer.train() +``` + +لاستخدام نقطة التفتيش الخاصة بك مع خط أنابيب، تأكد من حفظ المعالج مع نقطة التفتيش: + +```py +>>> processor.save_pretrained("YOUR_ACCOUNT_NAME/speecht5_finetuned_voxpopuli_nl") +``` + +أرسل النموذج النهائي إلى 🤗 Hub: + +```py +>>> trainer.push_to_hub() +``` + +## الاستنتاج + +### الاستنتاج باستخدام خط أنابيب + +الآن بعد أن قمت بضبط نموذج، يمكنك استخدامه للاستنتاج! +أولاً، دعنا نرى كيف يمكنك استخدامه مع خط أنابيب مطابق. دعنا ننشئ خط أنابيب `"text-to-speech"` مع نقطة التفتيش الخاصة بك: + +```py +>>> from transformers import pipeline + +>>> pipe = pipeline("text-to-speech", model="YOUR_ACCOUNT_NAME/speecht5_finetuned_voxpopuli_nl") +``` + +اختر قطعة من النص باللغة الهولندية التي تريد سردها، على سبيل المثال: + +```py +>>> text = "hallo allemaal, ik praat nederlands. groetjes aan iedereen!" +``` + +لاستخدام SpeechT5 مع خط الأنابيب، ستحتاج إلى embedding للمتكلم. دعنا نحصل عليه من مثال في مجموعة الاختبار: + +```py +>>> example = dataset["test"][304] +>>> speaker_embeddings = torch.tensor(example["speaker_embeddings"]).unsqueeze(0) +``` + +الآن يمكنك تمرير النص و embeddings للمتكلم إلى خط الأنابيب، وسيتولى بقية المهمة: + +```py +>>> forward_params = {"speaker_embeddings": speaker_embeddings} +>>> output = pipe(text, forward_params=forward_params) +>>> output +{'audio': array([-6.82714235e-05, -4.26525949e-04, 1.06134125e-04, ..., + -1.22392643e-03, -7.76011671e-04, 3.29112721e-04], dtype=float32), + 'sampling_rate': 16000} +``` + +يمكنك بعد ذلك الاستماع إلى النتيجة: + +```py +>>> from IPython.display import Audio +>>> Audio(output['audio'], rate=output['sampling_rate']) +``` + +### تشغيل الاستدلال يدويًا + +يمكنك تحقيق نفس نتائج الاستدلال دون استخدام خط الأنابيب، ولكن ستكون هناك حاجة إلى مزيد من الخطوات. + +قم بتحميل النموذج من 🤗 Hub: + +```py +>>> model = SpeechT5ForTextToSpeech.from_pretrained("YOUR_ACCOUNT/speecht5_finetuned_voxpopuli_nl") +``` + +اختر مثالاً من مجموعة الاختبار للحصول على embedding للمتكلم. + +```py +>>> example = dataset["test"][304] +>>> speaker_embeddings = torch.tensor(example["speaker_embeddings"]).unsqueeze(0) +``` + +قم بتعريف نص الإدخال وقم برمته: + +```py +>>> text = "hallo allemaal, ik praat nederlands. groetjes aan iedereen!" +>>> inputs = processor(text=text, return_tensors="pt") +``` + +قم بإنشاء مخطط طيفي مع نموذجك: + +```py +>>> spectrogram = model.generate_speech(inputs["input_ids"], speaker_embeddings) +``` + +قم بتصور المخطط الطيفي، إذا أردت: + +```py +>>> plt.figure() +>>> plt.imshow(spectrogram.T) +>>> plt.show() +``` + +
+ مخطط طيفي لوغاريتمي مولد +
+ +أخيرًا، استخدم المحول التناظري الرقمي لتحويل المخطط الطيفي إلى صوت. + +```py +>>> with torch.no_grad(): +... speech = vocoder(spectrogram) + +>>> from IPython.display import Audio + +>>> Audio(speech.numpy(), rate=16000) +``` + +من تجربتنا، قد يكون من الصعب الحصول على نتائج مرضية من هذا النموذج. تبدو جودة embeddings للمتكلم عاملاً مهمًا. نظرًا لأن SpeechT5 تم تدريبه مسبقًا باستخدام x-vectors باللغة الإنجليزية، فإنه يعمل بشكل أفضل عند استخدام embeddings للمتكلم باللغة الإنجليزية. إذا كان الكلام المُخلَّق يبدو رديئًا، فجرّب استخدام embedding مختلف للمتكلم. + +ومن المرجح أيضًا أن يؤدي زيادة مدة التدريب إلى تحسين جودة النتائج. ومع ذلك، من الواضح أن الكلام باللغة الهولندية بدلاً من اللغة الإنجليزية، ويتم بالفعل التقاط خصائص صوت المتحدث (مقارنة بالصوت الأصلي في المثال). + +شيء آخر يمكن تجربته هو تكوين النموذج. على سبيل المثال، جرب استخدام `config.reduction_factor = 1` لمعرفة ما إذا كان هذا يحسن النتائج. + +أخيرًا، من المهم مراعاة الاعتبارات الأخلاقية. على الرغم من أن تقنية TTS لديها العديد من التطبيقات المفيدة، إلا أنها قد تُستخدم أيضًا لأغراض خبيثة، مثل انتحال صوت شخص ما دون معرفته أو موافقته. يرجى استخدام TTS بحكمة وبمسؤولية. \ No newline at end of file From bd1f38f930ef1bf8384c5e4f7d117fbece6b5a3d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:41 +0300 Subject: [PATCH 092/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Ffeature=5Fextraction.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/image_feature_extraction.md | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 docs/source/ar/tasks/image_feature_extraction.md diff --git a/docs/source/ar/tasks/image_feature_extraction.md b/docs/source/ar/tasks/image_feature_extraction.md new file mode 100644 index 00000000000000..83f7ffcae747ff --- /dev/null +++ b/docs/source/ar/tasks/image_feature_extraction.md @@ -0,0 +1,133 @@ + + +# استخراج خصائص الصور + +[[open-in-colab]] + +استخراج خصائص الصور هي مهمة استخراج ميزات ذات معنى دلالي معين من صورة معينة. ولهذه المهمة العديد من التطبيقات، بما في ذلك تحديد التشابه بين الصور واسترجاع الصور. علاوة على ذلك، يمكن استخدام معظم نماذج الرؤية الحاسوبية لاستخراج خصائص الصور، حيث يمكن إزالة الرأس الخاص بالمهمة (تصنيف الصور، أو اكتشاف الأشياء، وما إلى ذلك) والحصول على الميزات. هذه الميزات مفيدة جدًا على مستوى أعلى: ككشف الحواف، أو زوايا الصور، وما إلى ذلك. وقد تحتوي أيضًا على معلومات حول العالم الحقيقي (على سبيل المثال، شكل القطط) اعتمادًا على عمق النموذج. وبالتالي، يمكن استخدام هذه المخرجات لتدريب مصنفات جديدة على مجموعة بيانات محددة. + +في هذا الدليل، سوف: + +- تعلم كيفية بناء نظام تشابه صور بسيط يعتمد على خط أنابيب `image-feature-extraction`. +- إنجاز المهمة نفسها باستخدام استدلال النموذج الخام. + +## تشابه الصور باستخدام خط أنابيب `image-feature-extraction` + +لدينا صورتان لقطط تجلس فوق شباك صيد، إحداهما مُولدة. + +```python +from PIL import Image +import requests + +img_urls = ["https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png", "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.jpeg"] +image_real = Image.open(requests.get(img_urls[0], stream=True).raw).convert("RGB") +image_gen = Image.open(requests.get(img_urls[1], stream=True).raw).convert("RGB") +``` + +دعونا نرى خط الأنابيب في العمل. أولاً، قم بتهيئة خط الأنابيب. إذا لم تقم بتمرير أي نموذج إليه، فسيتم تهيئة خط الأنابيب تلقائيًا باستخدام [google/vit-base-patch16-224](google/vit-base-patch16-224). إذا كنت ترغب في حساب التشابه، قم بتعيين `pool` على True. + +```python +import torch +from transformers import pipeline + +DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') +pipe = pipeline(task="image-feature-extraction", model_name="google/vit-base-patch16-384", device=DEVICE, pool=True) +``` + +لاستنتاج باستخدام `pipe` قم بتمرير كلتا الصورتين إليه. + +```python +outputs = pipe([image_real, image_gen]) +``` + +يحتوي الإخراج على تضمين مجمع لهذه الصورتين. + +```python +# الحصول على طول إخراج واحد +print(len(outputs[0][0])) +# عرض الإخراج +print(outputs) + +# 768 +# [[[-0.03909236937761307, 0.43381670117378235, -0.06913255900144577, +``` + +لحساب درجة التشابه، نحتاج إلى تمريرها إلى دالة تشابه. + +```python +from torch.nn.functional import cosine_similarity + +similarity_score = cosine_similarity(torch.Tensor(outputs[0]), + torch.Tensor(outputs[1]), dim=1) + +print(similarity_score) + +# tensor([0.6043]) +``` + +إذا كنت ترغب في الحصول على الحالات المخفية الأخيرة قبل التجميع، تجنب تمرير أي قيمة لمعلمة `pool`، حيث يتم تعيينها افتراضيًا على `False`. هذه الحالات المخفية مفيدة لتدريب مصنفات أو نماذج جديدة بناءً على الميزات من النموذج. + +```python +pipe = pipeline(task="image-feature-extraction", model_name="google/vit-base-patch16-224", device=DEVICE) +output = pipe(image_real) +``` + +نظرًا لأن المخرجات غير مجمعة، نحصل على الحالات المخفية الأخيرة حيث البعد الأول هو حجم الدفعة والأبعاد الأخيرة هي شكل التضمين. + +```python +import numpy as np +print(np.array(outputs).shape) +# (1, 197, 768) +``` + +## الحصول على الميزات والتشابهات باستخدام `AutoModel` + +يمكننا أيضًا استخدام فئة `AutoModel` في مكتبة `transformers` للحصول على الميزات. تقوم فئة `AutoModel` بتحميل أي نموذج من نماذج `transformers` بدون رأس خاص بمهمة معينة، ويمكننا استخدام هذا للحصول على الميزات. + +```python +from transformers import AutoImageProcessor, AutoModel + +processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224") +model = AutoModel.from_pretrained("google/vit-base-patch16-224").to(DEVICE) +``` + +دعونا نكتب دالة استدلال بسيطة. سنمرر المدخلات أولاً إلى المعالج `processor` ثم نمرر مخرجاته إلى النموذج `model`. + +```python +def infer(image): + inputs = processor(image, return_tensors="pt").to(DEVICE) + outputs = model(**inputs) + return outputs.pooler_output +``` + +يمكننا تمرير الصور مباشرة إلى هذه الدالة والحصول على التضمينات. + +```python +embed_real = infer(image_real) +embed_gen = infer(image_gen) +``` + +يمكننا الحصول على التشابه مرة أخرى عبر التضمينات. + +```python +from torch.nn.functional import cosine_similarity + +similarity_score = cosine_similarity(embed_real, embed_gen, dim=1) +print(similarity_score) + +# tensor([0.6061], device='cuda:0', grad_fn=) +``` \ No newline at end of file From 50207c90d5c1f1c6373b6f3cdd49ad9e8279af5f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:43 +0300 Subject: [PATCH 093/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/image_classification.md | 525 +++++++++++++++++++ 1 file changed, 525 insertions(+) create mode 100644 docs/source/ar/tasks/image_classification.md diff --git a/docs/source/ar/tasks/image_classification.md b/docs/source/ar/tasks/image_classification.md new file mode 100644 index 00000000000000..535601a2050a9d --- /dev/null +++ b/docs/source/ar/tasks/image_classification.md @@ -0,0 +1,525 @@ +# تصنيف الصور + +[[open-in-colab]] + + + +يقوم تصنيف الصور بتعيين تسمية أو فئة لصورة. على عكس تصنيف النص أو الصوت، تكون المدخلات هي قيم البكسل التي تتكون منها الصورة. هناك العديد من التطبيقات لتصنيف الصور، مثل الكشف عن الأضرار بعد كارثة طبيعية، أو مراقبة صحة المحاصيل، أو المساعدة في فحص الصور الطبية للبحث عن علامات المرض. + +يوضح هذا الدليل كيفية: + +1. ضبط نموذج [ViT](model_doc/vit) الدقيق على مجموعة بيانات [Food-101](https://huggingface.co/datasets/food101) لتصنيف عنصر غذائي في صورة. +2. استخدام نموذجك الدقيق للاستنتاج. + + + +لرؤية جميع البنى ونقاط التفتيش المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/image-classification) + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate accelerate pillow torchvision scikit-learn +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك لتحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات Food-101 + +ابدأ بتحميل جزء فرعي أصغر من مجموعة بيانات Food-101 من مكتبة Datasets 🤗. سيعطيك هذا فرصة لتجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from datasets import load_dataset + +>>> food = load_dataset("food101", split="train[:5000]") +``` + +قسِّم مجموعة البيانات إلى مجموعتين فرعيتين للتدريب والاختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + +```py +>>> food = food.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: + +```py +>>> food["train"][0] +{'image': , + 'label': 79} +``` + +يحتوي كل مثال في مجموعة البيانات على حقلين: + +- `image`: صورة PIL لصنف الطعام +- `label`: فئة التسمية لصنف الطعام + +ولتسهيل الأمر على النموذج للحصول على اسم التسمية من معرف التسمية، قم بإنشاء قاموس يقوم بتعيين اسم التسمية إلى رقم صحيح والعكس صحيح: + +```py +>>> labels = food["train"].features["label"].names +>>> label2id, id2label = dict(), dict() +>>> for i, label in enumerate(labels): +... label2id[label] = str(i) +... id2label[str(i)] = label +``` + +الآن يمكنك تحويل معرف التسمية إلى اسم التسمية: + +```py +>>> id2label[str(79)] +'prime_rib' +``` + +## معالجة مسبقة + +الخطوة التالية هي تحميل معالج صور ViT لمعالجة الصورة إلى Tensor: + +```py +>>> from transformers import AutoImageProcessor + +>>> checkpoint = "google/vit-base-patch16-224-in21k" +>>> image_processor = AutoImageProcessor.from_pretrained(checkpoint) +``` + + + +تطبيق بعض التحولات على الصور لجعل النموذج أكثر قوة ضد الإفراط في التكيّف. هنا ستستخدم وحدة [`transforms`](https://pytorch.org/vision/stable/transforms.html) من torchvision، ولكن يمكنك أيضًا استخدام أي مكتبة صور تفضلها. + +اقتص جزءًا عشوائيًا من الصورة، وقم بتغيير حجمها، وقم بتطبيعها باستخدام متوسط الصورة والانحراف المعياري: + +```py +>>> from torchvision.transforms import RandomResizedCrop, Compose, Normalize, ToTensor +Crop a random part of the image, resize it, and normalize it with the image mean and standard deviation: + +```py +>>> from torchvision.transforms import RandomResizedCrop, Compose, Normalize, ToTensor + +>>> normalize = Normalize(mean=image_processor.image_mean, std=image_processor.image_std) +>>> size = ( +... image_processor.size["shortest_edge"] +... if "shortest_edge" in image_processor.size +... else (image_processor.size["height"], image_processor.size["width"]) +... ) +>>> _transforms = Compose([RandomResizedCrop(size), ToTensor(), normalize]) +``` + +ثم قم بإنشاء دالة معالجة مسبقة لتطبيق التحولات وإرجاع `pixel_values` - المدخلات إلى النموذج - للصورة: + +```py +>>> def transforms(examples): +... examples["pixel_values"] = [_transforms(img.convert("RGB")) for img in examples["image"]] +... del examples["image"] +... return examples +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم طريقة [`~datasets.Dataset.with_transform`] من مكتبة 🤗 Datasets. يتم تطبيق التحولات أثناء التنقل عند تحميل عنصر من مجموعة البيانات: + +```py +>>> food = food.with_transform(transforms) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DefaultDataCollator`]. على عكس برامج الجمع الأخرى للبيانات في مكتبة 🤗 Transformers، لا يطبق `DefaultDataCollator` معالجة مسبقة إضافية مثل التوسيد. + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator() +``` + + + + + + + +لتجنب الإفراط في التكيّف وجعل النموذج أكثر قوة، أضف بعض التعزيزات للبيانات إلى الجزء التدريبي من مجموعة البيانات. +هنا نستخدم طبقات المعالجة المسبقة من Keras لتحديد التحولات لبيانات التدريب (بما في ذلك تعزيز البيانات)، +والتحولات لبيانات التحقق (الاقتصاص المركزي فقط، تغيير الحجم والتطبيع). يمكنك استخدام `tf.image` أو +أي مكتبة أخرى تفضلها. + +```py +>>> from tensorflow import keras +>>> from tensorflow.keras import layers + +>>> size = (image_processor.size["height"], image_processor.size["width"]) + +>>> train_data_augmentation = keras.Sequential( +... [ +... layers.RandomCrop(size[0], size[1]), +... layers.Rescaling(scale=1.0 / 127.5, offset=-1), +... layers +... ], +... name="train_data_augmentation", +... ) + +>>> val_data_augmentation = keras.Sequential( +... [ +... layers.CenterCrop(size[0], size[1]), +... layers.Rescaling(scale=1.0 / 127.5, offset=-1), +... ], +... name="val_data_augmentation", +... ) +``` + +بعد ذلك، قم بإنشاء وظائف لتطبيق التحولات المناسبة على دفعة من الصور، بدلاً من صورة واحدة في كل مرة. + +```py +>>> import numpy as np +>>> import tensorflow as tf +>>> from PIL import Image + + +>>> def convert_to_tf_tensor(image: Image): +... np_image = np.array(image) +... tf_image = tf.convert_to_tensor(np_image) +... # `expand_dims()` is used to add a batch dimension since +... # the TF augmentation layers operates on batched inputs. +... return tf.expand_dims(tf_image, 0) + + +>>> def preprocess_train(example_batch): +... """Apply train_transforms across a batch.""" +... images = [ +... train_data_augmentation(convert_to_tf_tensor(image.convert("RGB"))) for image in example_batch["image"] +... ] +... example_batch["pixel_values"] = [tf.transpose(tf.squeeze(image)) for image in images] +... return example_batch + + +... def preprocess_val(example_batch): +... """Apply val_transforms across a batch.""" +... images = [ +... val_data_augmentation(convert_to_tf_tensor(image.convert("RGB"))) for image in example_batch["image"] +... ] +... example_batch["pixel_values"] = [tf.transpose(tf.squeeze(image)) for image in images] +... return example_batch +``` + +استخدم طريقة [`~datasets.Dataset.set_transform`] من مكتبة 🤗 Datasets لتطبيق التحولات أثناء التنقل: +Use 🤗 Datasets [`~datasets.Dataset.set_transform`] to apply the transformations on the fly: + +```py +food["train"].set_transform(preprocess_train) +food["test"].set_transform(preprocess_val) +``` + +كخطوة معالجة مسبقة نهائية، قم بإنشاء دفعة من الأمثلة باستخدام `DefaultDataCollator`. على عكس برامج الجمع الأخرى للبيانات في مكتبة 🤗 Transformers، فإن +`DefaultDataCollator` لا يطبق معالجة مسبقة إضافية، مثل التوسيد. + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator(return_tensors="tf") +``` + + + +## تقييم + +غالبًا ما يكون تضمين مقياس أثناء التدريب مفيدًا لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index). بالنسبة لهذه المهمة، قم بتحميل +مقياس [الدقة](https://huggingface.co/spaces/evaluate-metric/accuracy) (راجع جولة 🤗 Evaluate [السريعة](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> accuracy = evaluate.load("accuracy") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتسمياتك إلى [`~evaluate.EvaluationModule.compute`] لحساب الدقة: + +```py +>>> import numpy as np + + +>>> def compute_metrics(eval_pred): +... predictions, labels = eval_pred +... predictions = np.argmax(predictions, axis=1) +... return accuracy.compute(predictions=predictions, references=labels) +``` + +وظيفتك `compute_metrics` جاهزة الآن، وستعود إليها عندما تقوم بإعداد تدريبك. + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل ViT باستخدام [`AutoModelForImageClassification`]. حدد عدد التسميات إلى جانب عدد التسميات المتوقعة، وخرائط التسميات: + +```py +>>> from transformers import AutoModelForImageClassification, TrainingArguments, Trainer + +>>> model = AutoModelForImageClassification.from_pretrained( +... checkpoint, +... num_labels=len(labels), +... id2label=id2label, +... label2id=label2id, +... ) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. من المهم ألا تقوم بإزالة الأعمدة غير المستخدمة لأن ذلك سيؤدي إلى إسقاط عمود "الصورة". بدون عمود "الصورة"، لا يمكنك إنشاء "pixel_values". قم بتعيين `remove_unused_columns=False` لمنع هذا السلوك! المعلمة المطلوبة الوحيدة هي `output_dir` التي تحدد أين يتم حفظ نموذجك. ستقوم بالدفع بهذا النموذج إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقوم [`Trainer`] بتقييم الدقة وحفظ نقطة تفتيش التدريب. +2. قم بتمرير فرط معلمات التدريب إلى [`Trainer`] إلى جانب النموذج ومجموعة البيانات ومعالج الرموز ومبرمج البيانات ووظيفة `compute_metrics`. +3. استدعاء [`~Trainer.train`] لضبط نموذجك بشكل دقيق. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_food_model", +... remove_unused_columns=False, +... eval_strategy="epoch"، +... save_strategy="epoch"، +... learning_rate=5e-5, +... per_device_train_batch_size=16, +... gradient_accumulation_steps=4, +... per_device_eval_batch_size=16, +... num_train_epochs=3, +... warmup_ratio=0.1, +... logging_steps=10, +... load_best_model_at_end=True, +... metric_for_best_model="accuracy"، +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... data_collator=data_collator, +... train_dataset=food["train"] +... eval_dataset=food["test"] +... tokenizer=image_processor, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`]: + +```py +>>> trainer.push_to_hub() +``` + + + + + + + + +إذا كنت غير معتاد على ضبط نموذج باستخدام Keras، فراجع [البرنامج التعليمي الأساسي](./training#train-a-tensorflow-model-with-keras) أولاً! + + + +لضبط نموذج في TensorFlow، اتبع الخطوات التالية: +1. حدد فرط معلمات التدريب، وقم بإعداد مثاليًا ومعدل تعلم جدول. +2. قم بتحميل نموذج مسبق التدريب. +3. قم بتحويل مجموعة بيانات 🤗 إلى تنسيق `tf.data.Dataset`. +4. قم بتجميع نموذجك. +5. أضف استدعاءات الإرجاع واستخدم طريقة `fit()` لتشغيل التدريب. +6. قم بتحميل نموذجك إلى 🤗 Hub لمشاركته مع المجتمع. + +ابدأ بتحديد فرط معلماتك، ومثاليًا ومعدل التعلم: + +```py +>>> from transformers import create_optimizer + +>>> batch_size = 16 +>>> num_epochs = 5 +>>> num_train_steps = len(food["train"]) * num_epochs +>>> learning_rate = 3e-5 +>>> weight_decay_rate = 0.01 + +>>> optimizer, lr_schedule = create_optimizer( +... init_lr=learning_rate, +... num_train_steps=num_train_steps, +... weight_decay_rate=weight_decay_rate, +... num_warmup_steps=0, +... ) +``` + +بعد ذلك، قم بتحميل ViT باستخدام [`TFAutoModelForImageClassification`] إلى جانب خرائط التسميات: + +```py +>>> from transformers import TFAutoModelForImageClassification + +>>> model = TFAutoModelForImageClassification.from_pretrained( +... checkpoint, +... id2label=id2label, +... label2id=label2id, +... ) +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق `tf.data.Dataset` باستخدام [`~datasets.Dataset.to_tf_dataset`] وبرنامج التجميع الخاص بك `data_collator`: + +```py +>>> # converting our train dataset to tf.data.Dataset +>>> tf_train_dataset = food["train"].to_tf_dataset( +... columns="pixel_values"، label_cols="label"، shuffle=True، batch_size=batch_size، collate_fn=data_collator +... ) + +>>> # converting our test dataset to tf.data.Dataset +>>> tf_eval_dataset = food["test"].to_tf_dataset( +... columns="pixel_values"، label_cols="label"، shuffle=True، batch_size=batch_size، collate_fn=data_collator +... ) +``` + +قم بتكوين النموذج للتدريب باستخدام `compile()` + + +```py +>>> from tensorflow.keras.losses import SparseCategoricalCrossentropy + +>>> loss = tf.keras.lossetrops.SparseCategoricalCrosseny(from_logits=True) +>>> model.compile(optimizer=optimizer, loss=loss) +``` + +لحساب الدقة من التوقعات ودفع نموذجك إلى 🤗 Hub، استخدم [Keras callbacks](../main_classes/keras_callbacks). +مرر دالتك `compute_metrics` إلى [KerasMetricCallback](../main_classes/keras_callbacks#transformers.KerasMetricCallback)، +واستخدم [PushToHubCallback](../main_classes/keras_callbacks#transformers.PushToHubCallback) لتحميل النموذج: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback, PushToHubCallback + +>>> metric_callback = KerasMetricCallback(metric_fn=compute_metrics, eval_dataset=tf_eval_dataset) +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="food_classifier", +... tokenizer=image_processor, +... save_strategy="no", +... ) +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لتدريب نموذجك! استدع `fit()` باستخدام مجموعات البيانات التدريبية والتحقق من الصحة الخاصة بك، وعدد العصور، +والاستدعاءات الخاصة بك لضبط نموذجك بدقة: + +```py +>>> model.fit(tf_train_dataset, validation_data=tf_eval_dataset, epochs=num_epochs, callbacks=callbacks) +Epoch 1/5 +250/250 [==============================] - 313s 1s/step - loss: 2.5623 - val_loss: 1.4161 - accuracy: 0.9290 +Epoch 2/5 +250/250 [==============================] - 265s 1s/step - loss: 0.9181 - val_loss: 0.6808 - accuracy: 0.9690 +Epoch 3/5 +250/250 [==============================] - 252s 1s/step - loss: 0.3910 - val_loss: 0.4303 - accuracy: 0.9820 +Epoch 4/5 +250/250 [==============================] - 251s 1s/step - loss: 0.2028 - val_loss: 0.3191 - accuracy: 0.9900 +Epoch 5/5 +250/250 [==============================] - 238s 949ms/step - loss: 0.1232 - val_loss: 0.3259 - accuracy: 0.9890 +``` + +تهانينا! لقد قمت بضبط نموذجك بدقة ومشاركته على 🤗 Hub. يمكنك الآن استخدامه للاستنتاج! + + + + + + +للحصول على مثال أكثر تعمقًا حول كيفية ضبط نموذج لتصنيف الصور، راجع دفتر ملاحظات PyTorch المقابل [هنا](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + + + +## الاستنتاج + +رائع، الآن بعد أن قمت بضبط نموذج بدقة، يمكنك استخدامه للاستنتاج! + +قم بتحميل صورة تريد تشغيل الاستنتاج عليها: + +```py +>>> ds = load_dataset("food101", split="validation[:10]") +>>> image = ds["image"][0] +``` + +
+ صورة beignets +
+ +أبسط طريقة لتجربة نموذجك المضبوط الدقيق للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ مثيل `pipeline` لتصنيف الصور باستخدام نموذجك، ومرر صورتك إليه: + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline("image-classification", model="my_awesome_food_model") +>>> classifier(image) +[{'score': 0.31856709718704224، 'label': 'beignets'}، + {'score': 0.015232225880026817، 'label': 'bruschetta'}، + {'score': 0.01519392803311348، 'label': 'chicken_wings'}، + {'score': 0.013022331520915031، 'label': 'pork_chop'}، + {'score': 0.012728818692266941، 'label': 'prime_rib'}] +``` + +يمكنك أيضًا محاكاة نتائج `pipeline` يدويًا إذا أردت: + + + +قم بتحميل معالج الصور لمعالجة الصورة وإرجاع `input` كرموز تعبيرية PyTorch: + +```py +>>> from transformers import AutoImageProcessor +>>> import torch + +>>> image_processor = AutoImageProcessor.from_pretrained("my_awesome_food_model") +>>> inputs = image_processor(image, return_tensors="pt") +``` + +مرر المدخلات إلى النموذج وأعد الخرجات: + +```py +>>> from transformers import AutoModelForImageClassification + +>>> model = AutoModelForImageClassification.from_pretrained("my_awesome_food_model") +>>> with torch.no_grad(): +... logits = model(**inputs).logits +``` + +احصل على التسمية المتوقعة مع أعلى احتمال، واستخدم تعيين `id2label` للنموذج لتحويله إلى تسمية: + +```py +>>> predicted_label = logits.argmax(-1).item() +>>> model.config.id2label[predicted_label] +'beignets' +``` + + + + + +قم بتحميل معالج الصور لمعالجة الصورة وإرجاع `input` كرموز تعبيرية TensorFlow: + +```py +>>> from transformers import AutoImageProcessor + +>>> image_processor = AutoImageProcessor.from_pretrained("MariaK/food_classifier") +>>> inputs = image_processor(image, return_tensors="tf") +``` + +مرر المدخلات إلى النموذج وأعد الخرجات: + +```py +>>> from transformers import TFAutoModelForImageClassification + +>>> model = TFAutoModelForImageClassification.from_pretrained("MariaK/food_classifier") +>>> logits = model(**inputs).logits +``` + +احصل على التسمية المتوقعة مع أعلى احتمال، واستخدم تعيين `id2label` للنموذج لتحويله إلى تسمية: + +```py +>>> predicted_class_id = int(tf.math.argmax(logits, axis=-1)[0]) +>>> model.config.id2label[predicted_class_id] +'beignets' +``` + + + \ No newline at end of file From 6e6d10315e46a767a4c6a7b314dc23e8cb68367a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:45 +0300 Subject: [PATCH 094/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/zero=5Fshot=5Fobject=5Fdetection.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/zero_shot_object_detection.md | 288 ++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 docs/source/ar/tasks/zero_shot_object_detection.md diff --git a/docs/source/ar/tasks/zero_shot_object_detection.md b/docs/source/ar/tasks/zero_shot_object_detection.md new file mode 100644 index 00000000000000..0987b5618c17c5 --- /dev/null +++ b/docs/source/ar/tasks/zero_shot_object_detection.md @@ -0,0 +1,288 @@ +# الكشف عن الأشياء باستخدام الصفرية + +[[open-in-colab]] + +تتطلب النماذج المستخدمة تقليديًا في [الكشف عن الأشياء](object_detection) مجموعات بيانات للصور الموسومة للتدريب، وهي مقيدة بالكشف عن مجموعة الفئات من بيانات التدريب. + +يتم دعم الكشف عن الأشياء باستخدام الصفرية بواسطة نموذج [OWL-ViT](../model_doc/owlvit) الذي يستخدم نهجًا مختلفًا. OWL-ViT +هو كاشف كائنات مفتوح المفردات. وهذا يعني أنه يمكنه اكتشاف الأشياء في الصور بناءً على استعلامات نصية حرة دون +الحاجة إلى ضبط نموذج على مجموعات بيانات موسومة. + +يستفيد OWL-ViT من التمثيلات متعددة الوسائط لأداء الكشف عن المفردات المفتوحة. فهو يجمع بين [CLIP](../model_doc/clip) مع +رؤوس تصنيف وتحديد موقع الكائنات خفيفة الوزن. يتم تحقيق الكشف عن المفردات المفتوحة عن طريق تضمين استعلامات نصية حرة مع مشفر النص CLIP واستخدامها كإدخال لرؤوس تصنيف الكائنات وتحديد الموقع. +تربط الصور ووصفاتها النصية المقابلة، وتعالج ViT رقع الصور كإدخالات. قام مؤلفو OWL-ViT بتدريب CLIP من البداية ثم ضبط نموذج OWL-ViT من النهاية إلى النهاية على مجموعات بيانات الكشف عن الكائنات القياسية باستخدام +خسارة المطابقة الثنائية. + +مع هذا النهج، يمكن للنموذج اكتشاف الأشياء بناءً على الأوصاف النصية دون تدريب مسبق على مجموعات بيانات موسومة. + +في هذا الدليل، ستتعلم كيفية استخدام OWL-ViT: +- للكشف عن الأشياء بناءً على موجهات النص +- للكشف عن الكائنات الدفعية +- للكشف عن الأشياء الموجهة بالصور + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install -q transformers +``` + +## خط أنابيب الكشف عن الأشياء باستخدام الصفرية + +أبسط طريقة لتجربة الاستدلال مع OWL-ViT هي استخدامه في [`pipeline`]. قم بتنفيذ خط أنابيب +للكشف عن الأشياء باستخدام الصفرية من [نقطة تفتيش على مركز Hub](https://huggingface.co/models?other=owlvit): + +```python +>>> from transformers import pipeline + +>>> checkpoint = "google/owlv2-base-patch16-ensemble" +>>> detector = pipeline(model=checkpoint, task="zero-shot-object-detection") +``` + +بعد ذلك، اختر صورة تريد اكتشاف الأشياء فيها. هنا سنستخدم صورة رائدة الفضاء إيلين كولينز التي تعد +جزءًا من مجموعة صور [NASA](https://www.nasa.gov/multimedia/imagegallery/index.html) الرائعة. + +```py +>>> import skimage +>>> import numpy as np +>>> from PIL import Image + +>>> image = skimage.data.astronaut() +>>> image = Image.fromarray(np.uint8(image)).convert("RGB") + +>>> image +``` + +
+ رائد الفضاء إيلين كولينز +
+ +مرر الصورة وعلامات تصنيف الكائنات المرشحة التي تريد البحث عنها إلى خط الأنابيب. +هنا نمرر الصورة مباشرة؛ تشمل الخيارات الأخرى مسارًا محليًا إلى صورة أو عنوان URL للصورة. كما نمرر الأوصاف النصية لجميع العناصر التي نريد الاستعلام عنها في الصورة. +```py +>>> predictions = detector( +... image, +... candidate_labels=["human face", "rocket", "nasa badge", "star-spangled banner"], +... ) +>>> predictions +[{'score': 0.3571370542049408, + 'label': 'human face', + 'box': {'xmin': 180, 'ymin': 71, 'xmax': 271, 'ymax': 178}}, + {'score': 0.28099656105041504, + 'label': 'nasa badge', + 'box': {'xmin': 129, 'ymin': 348, 'xmax': 206, 'ymax': 427}}, + {'score': 0.2110239565372467, + 'label': 'rocket', + 'box': {'xmin': 350, 'ymin': -1, 'xmax': 468, 'ymax': 288}}, + {'score': 0.13790413737297058, + 'label': 'star-spangled banner', + 'box': {'xmin': 1, 'ymin': 1, 'xmax': 105, 'ymax': 509}}, + {'score': 0.11950037628412247, + 'label': 'nasa badge', + 'box': {'xmin': 277, 'ymin': 338, 'xmax': 327, 'ymax': 380}}, + {'score': 0.10649408400058746, + 'label': 'rocket', + 'box': {'xmin': 358, 'ymin': 64, 'xmax': 424, 'ymax': 280}}] +``` + +دعونا نصور التوقعات: + +```py +>>> from PIL import ImageDraw + +>>> draw = ImageDraw.Draw(image) + +>>> for prediction in predictions: +... box = prediction["box"] +... label = prediction["label"] +... score = prediction["score"] + +... xmin, ymin, xmax, ymax = box.values() +... draw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1) +... draw.text((xmin, ymin), f"{label}: {round(score,2)}", fill="white") + +>>> image +``` + +
+ التوقعات الموضحة على صورة وكالة ناسا +
+ +## الكشف عن الأشياء باستخدام الصفرية الموجهة بالنص يدويًا + +الآن بعد أن رأيت كيفية استخدام خط أنابيب الكشف عن الأشياء باستخدام الصفرية، دعنا نكرر نفس +النتيجة يدويًا. + +ابدأ بتحميل النموذج والمعالج المرتبط من [نقطة تفتيش على مركز Hub](https://huggingface.co/models?other=owlvit). +هنا سنستخدم نفس نقطة التفتيش كما هو الحال من قبل: + +```py +>>> from transformers import AutoProcessor, AutoModelForZeroShotObjectDetection + +>>> model = AutoModelForZeroShotObjectDetection.from_pretrained(checkpoint) +>>> processor = AutoProcessor.from_pretrained(checkpoint) +``` + +دعونا نأخذ صورة مختلفة لتغيير الأشياء. + +```py +>>> import requests + +>>> url = "https://unsplash.com/photos/oj0zeY2Ltk4/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MTR8fHBpY25pY3xlbnwwfHx8fDE2Nzc0OTE1NDk&force=true&w=640" +>>> im = Image.open(requests.get(url, stream=True).raw) +>>> im +``` + +
+ صورة شاطئ +
+ +استخدم المعالج لإعداد الإدخالات للنموذج. يجمع المعالج بين معالج الصور الذي يعد +الصورة للنموذج عن طريق تغيير حجمها وتطبيعها، و [`CLIPTokenizer`] الذي يعتني بإدخالات النص. + +```py +>>> text_queries = ["hat", "book", "sunglasses", "camera"] +>>> inputs = processor(text=text_queries, images=im, return_tensors="pt") +``` + +مرر الإدخالات عبر النموذج، وقم بمعالجة النتائج، وعرض النتائج. نظرًا لأن معالج الصور قام بتغيير حجم الصور قبل +إطعامها للنموذج، فأنت بحاجة إلى استخدام طريقة [`~OwlViTImageProcessor.post_process_object_detection`] للتأكد من أن صناديق الإحداثيات المتوقعة +صحيحة بالنسبة إلى الصورة الأصلية: + +```py +>>> import torch + +>>> with torch.no_grad(): +... outputs = model(**inputs) +... target_sizes = torch.tensor([im.size[::-1]]) +... results = processor.post_process_object_detection(outputs, threshold=0.1, target_sizes=target_sizes)[0] + +>>> draw = ImageDraw.Draw(im) + +>>> scores = results["scores"].tolist() +>>> labels = results["labels"].tolist() +>>> boxes = results["boxes"].tolist() +>>> draw = ImageDraw.Draw(im) + +>>> scores = results["scores"].tolist() +>>> labels = results["labels"].tolist() +>>> boxes = results["boxes"].tolist() + +>>> for box, score, label in zip(boxes, scores, labels): +... xmin, ymin, xmax, ymax = box +... draw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1) +... draw.text((xmin, ymin), f"{text_queries[label]}: {round(score,2)}", fill="white") + +>>> im +``` + +
+ صورة الشاطئ مع الأشياء المكتشفة +
+ +## معالجة الدفعات + +يمكنك تمرير مجموعات متعددة من الصور والاستعلامات النصية للبحث عن كائنات مختلفة (أو متطابقة) في عدة صور. +دعونا نستخدم صورة رائد فضاء وصورة شاطئ معًا. +بالنسبة للمعالجة الدفعية، يجب تمرير استعلامات النص كقائمة متداخلة إلى المعالج والصور كقوائم من صور PIL، +تنسورات PyTorch، أو صفائف NumPy. + +```py +>>> images = [image, im] +>>> text_queries = [ +... ["human face", "rocket", "nasa badge", "star-spangled banner"], +... ["hat", "book", "sunglasses", "camera"], +... ] +>>> inputs = processor(text=text_queries, images=images, return_tensors="pt") +``` + +سبق أن مررت بحجم الصورة الفردية كموتر، ولكن يمكنك أيضًا تمرير زوج، أو في حالة +العديد من الصور، قائمة من الأزواج. دعونا ننشئ تنبؤات للمثالين، ونصور الثاني (`image_idx = 1`). + +```py +>>> with torch.no_grad(): +... outputs = model(**inputs) +... target_sizes = [x.size[::-1] for x in images] +... results = processor.post_process_object_detection(outputs, threshold=0.1, target_sizes=target_sizes) + +>>> image_idx = 1 +>>> draw = ImageDraw.Draw(images[image_idx]) + +>>> scores = results[image_idx]["scores"].tolist() +>>> labels = results[image_idx]["labels"].tolist() +>>> boxes = results[image_idx]["boxes"].tolist() + +>>> for box, score, label in zip(boxes, scores, labels): +... xmin, ymin, xmax, ymax = box +... draw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1) +... draw.text((xmin, ymin), f"{text_queries[image_idx][label]}: {round(score,2)}", fill="white") + +>>> images[image_idx] +``` + +
+ صورة الشاطئ مع الأشياء المكتشفة +
+ +## الكشف عن الأشياء الموجهة بالصور + +بالإضافة إلى الكشف عن الأشياء باستخدام الصفرية باستخدام الاستعلامات النصية، يوفر OWL-ViT الكشف عن الأشياء الموجهة بالصور. وهذا يعني +يمكنك استخدام استعلام الصورة للعثور على كائنات مماثلة في صورة الهدف. +على عكس الاستعلامات النصية، لا يُسمح إلا بصورة مثال واحدة. + +دعونا نأخذ صورة بها قطتان على الأريكة كصورة مستهدفة، وصورة لقطة واحدة +كاستعلام: + +```py +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image_target = Image.open(requests.get(url, stream=True).raw) + +>>> query_url = "http://images.cocodataset.org/val2017/000000524280.jpg" +>>> query_image = Image.open(requests.get(query_url, stream=True).raw) +``` + +دعونا نلقي نظرة سريعة على الصور: + +```py +>>> import matplotlib.pyplot as plt + +>>> fig, ax = plt.subplots(1, 2) +>>> ax[0].imshow(image_target) +>>> ax[1].imshow(query_image) +``` + +
+ قطط +
+ +في خطوة ما قبل المعالجة، بدلاً من الاستعلامات النصية، فأنت الآن بحاجة إلى استخدام `query_images`: + +```py +>>> inputs = processor(images=image_target, query_images=query_image, return_tensors="pt") +``` + +بالنسبة للتنبؤات، بدلاً من تمرير الإدخالات إلى النموذج، قم بتمريرها إلى [`~OwlViTForObjectDetection.image_guided_detection`]. ارسم التوقعات +كما هو الحال من قبل باستثناء أنه لا توجد الآن تسميات. +بالنسبة للتنبؤات، بدلاً من تمرير الإدخالات إلى النموذج، قم بتمريرها إلى [`~OwlViTForObjectDetection.image_guided_detection`]. ارسم التوقعات +كما هو الحال من قبل باستثناء أنه لا توجد الآن تسميات. + +```py +>>> with torch.no_grad(): +... outputs = model.image_guided_detection(**inputs) +... target_sizes = torch.tensor([image_target.size[::-1]]) +... results = processor.post_process_image_guided_detection(outputs=outputs, target_sizes=target_sizes)[0] + +>>> draw = ImageDraw.Draw(image_target) + +>>> scores = results["scores"].tolist() +>>> boxes = results["boxes"].tolist() + +>>> for box, score, label in zip(boxes, scores, labels): +... xmin, ymin, xmax, ymax = box +... draw.rectangle((xmin, ymin, xmax, ymax), outline="white", width=4) + +>>> image_target +``` + +
+ قطط مع صناديق الإحداثيات +
\ No newline at end of file From fc34064ec06d09ce0ea793c2ed1ea56c099d4530 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:47 +0300 Subject: [PATCH 095/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/object=5Fdetection.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/object_detection.md | 1517 ++++++++++++++++++++++ 1 file changed, 1517 insertions(+) create mode 100644 docs/source/ar/tasks/object_detection.md diff --git a/docs/source/ar/tasks/object_detection.md b/docs/source/ar/tasks/object_detection.md new file mode 100644 index 00000000000000..e875b353554430 --- /dev/null +++ b/docs/source/ar/tasks/object_detection.md @@ -0,0 +1,1517 @@ +# اكتشاف الأجسام + +[[open-in-colab]] + +اكتشاف الأجسام هي مهمة رؤية حاسوبية للكشف عن مثيلات (مثل البشر أو المباني أو السيارات) في صورة. تتلقى نماذج اكتشاف الأجسام صورة كمدخلات وتخرج إحداثيات صناديق الحدود والعلامات المقترنة للأجسام المكتشفة. يمكن أن تحتوي الصورة على أجسام متعددة، لكل منها صندوق حدوده وملصقه الخاص (على سبيل المثال، يمكن أن تحتوي على سيارة ومبنى)، ويمكن أن يوجد كل كائن في أجزاء مختلفة من الصورة (على سبيل المثال، يمكن أن تحتوي الصورة على عدة سيارات). + +تُستخدم هذه المهمة بشكل شائع في القيادة الذاتية للكشف عن أشياء مثل المشاة وإشارات الطرق وإشارات المرور. تشمل التطبيقات الأخرى حساب عدد الأجسام في الصور والبحث عن الصور والمزيد. + +في هذا الدليل، ستتعلم كيفية: + +1. ضبط نموذج [DETR](https://huggingface.co/docs/transformers/model_doc/detr)، وهو نموذج يجمع بين العمود الفقري المحول الترميزي الترميزي، على مجموعة بيانات [CPPE-5](https://huggingface.co/datasets/cppe-5). +2. استخدام نموذج ضبط دقيق الخاص بك للاستنتاج. + + + +لمشاهدة جميع التصميمات ونقاط المراقبة المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/object-detection) + + + +قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install -q datasets transformers accelerate timm +pip install -q -U albumentations>=1.4.5 torchmetrics pycocotools +``` + +ستستخدم 🤗 Datasets لتحميل مجموعة بيانات من Hub Hugging Face، 🤗 Transformers لتدريب نموذجك، +و `albumentations` لزيادة بياناتك. + +نحن نشجعك على مشاركة نموذجك مع المجتمع. قم بتسجيل الدخول إلى حساب Hugging Face الخاص بك لتحميله إلى Hub. +عند مطالبتك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +للبدء، سنقوم بتعريف الثوابت العالمية، أي اسم النموذج وحجم الصورة. بالنسبة لهذا البرنامج التعليمي، سنستخدم نموذج DETR الشرطي بسبب تقاربه الأسرع. لا تتردد في اختيار أي نموذج اكتشاف كائن متاح في مكتبة `transformers`. + +```py +>>> MODEL_NAME = "microsoft/conditional-detr-resnet-50" # أو "facebook/detr-resnet-50" +>>> IMAGE_SIZE = 480 +``` + +## تحميل مجموعة بيانات CPPE-5 + +تحتوي مجموعة بيانات [CPPE-5](https://huggingface.co/datasets/cppe-5) على صور مع +تعليقات توضيحية تحدد معدات الوقاية الشخصية الطبية (PPE) في سياق جائحة COVID-19. + +ابدأ بتحميل مجموعة البيانات وإنشاء تقسيم `validation` من `train`: + +```py +>>> from datasets import load_dataset + +>>> cppe5 = load_dataset("cppe-5") + +>>> if "validation" not in cppe5: +... split = cppe5["train"].train_test_split(0.15, seed=1337) +... cppe5["train"] = split["train"] +... cppe5["validation"] = split["test"] + +>>> cppe5 +DatasetDict({ + train: Dataset({ + features: ['image_id', 'image', 'width', 'height', 'objects'], + num_rows: 850 + }) + test: Dataset({ + features: ['image_id', 'image', 'width', 'height', 'objects'], + num_rows: 29 + }) + validation: Dataset({ + features: ['image_id', 'image', 'width', 'height', 'objects'], + num_rows: 150 + }) +}) +``` +سترى أن هذه المجموعة تحتوي على 1000 صورة لمجموعات التدريب والتحقق ومجموعة اختبار بها 29 صورة. + +للتعرف على البيانات، استكشف كيف تبدو الأمثلة. + +```py +>>> cppe5["train"][0] +{ + 'image_id': 366, + 'image': , + 'width': 500, + 'height': 500, + 'objects': { + 'id': [1932, 1933, 1934], + 'area': [27063, 34200, 32431], + 'bbox': [[29.0, 11.0, 97.0, 279.0], + [201.0, 1.0, 120.0, 285.0], + [382.0, 0.0, 113.0, 287.0]], + 'category': [0, 0, 0] + } +} +``` + +تحتوي الأمثلة في مجموعة البيانات على الحقول التالية: + +- `image_id`: معرف صورة المثال +- `image`: كائن `PIL.Image.Image` يحتوي على الصورة +- `width`: عرض الصورة +- `height`: ارتفاع الصورة +- `objects`: قاموس يحتوي على بيانات تعريف صندوق الحدود للأجسام الموجودة في الصورة: + - `id`: معرف التعليق التوضيحي + - `area`: مساحة صندوق الحدود + - `bbox`: صندوق حدود الكائن (بتنسيق [COCO](https://albumentations.ai/docs/getting_started/bounding_boxes_augmentation/#coco)) + - `category`: فئة الكائن، مع القيم المحتملة بما في ذلك `Coverall (0)`، `Face_Shield (1)`، `Gloves (2)`، `Goggles (3)` و` Mask (4) ` + +قد تلاحظ أن حقل `bbox` يتبع تنسيق COCO، وهو التنسيق الذي يتوقعه نموذج DETR. +ومع ذلك، يختلف تجميع الحقول داخل `objects` عن تنسيق التعليق التوضيحي الذي يتطلبه DETR. ستحتاج +لتطبيق بعض تحولات ما قبل المعالجة قبل استخدام هذه البيانات للتدريب. + +للحصول على فهم أفضل للبيانات، قم بتصور مثال في مجموعة البيانات. + +```py +>>> import numpy as np +>>> import os +>>> from PIL import Image, ImageDraw + +>>> image = cppe5["train"][2]["image"] +>>> annotations = cppe5["train"][2]["objects"] +>>> draw = ImageDraw.Draw(image) + +>>> categories = cppe5["train"].features["objects"].feature["category"].names + +>>> id2label = {index: x for index, x in enumerate(categories, start=0)} +>>> label2id = {v: k for k, v in id2label.items()} + +>>> for i in range(len(annotations["id"])): +... box = annotations["bbox"][i] +... class_idx = annotations["category"][i] +... x, y, w, h = tuple(box) +... # تحقق مما إذا كانت الإحداثيات مقيدة أم لا +... if max(box) > 1.0: +... # الإحداثيات غير مقيدة، لا داعي لإعادة تحجيمها +... x1, y1 = int(x), int(y) +... x2, y2 = int(x + w), int(y + h) +... else: +... # الإحداثيات مقيدة، إعادة تحجيمها +... x1 = int(x * width) +... y1 = int(y * height) +... x2 = int((x + w) * width) +... y2 = int((y + h) * height) +... draw.rectangle((x, y, x + w, y + h), outline="red", width=1) +... draw.text((x, y), id2label[class_idx], fill="white") + +>>> image +``` +
+ مثال على صورة CPPE-5 +
+ + +لعرض صناديق الحدود مع العلامات المقترنة، يمكنك الحصول على العلامات من البيانات الوصفية لمجموعة البيانات، وتحديداً +حقل "الفئة". + +ستحتاج أيضًا إلى إنشاء قاموسين يقومان بتعيين معرف العلامة إلى فئة العلامة (`id2label`) والعكس (`label2id`). +يمكنك استخدامها لاحقًا عند إعداد النموذج. بما في ذلك هذه الخرائط سيجعل نموذجك قابل لإعادة الاستخدام من قبل الآخرين إذا قمت بمشاركته +على Hub Hugging Face. يرجى ملاحظة أن الجزء من التعليمات البرمجية أعلاه الذي يرسم صناديق الحدود يفترض أنه في تنسيق `COCO` `(x_min، y_min، width، height)`. يجب تعديله للعمل بتنسيقات أخرى مثل `(x_min، y_min، x_max، y_max)`. + +كخطوة أخيرة للتعرف على البيانات، قم باستكشافها بحثًا عن مشكلات محتملة. تتمثل إحدى المشكلات الشائعة في مجموعات البيانات الخاصة +اكتشاف الأجسام هي صناديق الحدود التي "تمتد" إلى ما بعد حافة الصورة. يمكن أن تسبب صناديق الحدود "الهاربة" هذه +أخطاء أثناء التدريب ويجب معالجتها. هناك بضع أمثلة بها هذه المشكلة في هذه المجموعة. +للحفاظ على البساطة في هذا الدليل، سنقوم بتعيين `clip=True` لـ `BboxParams` في التحولات أدناه. + +## معالجة البيانات مسبقًا + +لضبط نموذج دقيق، يجب معالجة البيانات التي تخطط لاستخدامها لمطابقة النهج المستخدم بالضبط للنموذج المسبق التدريب. +يتولى [`AutoImageProcessor`] معالجة بيانات الصور لإنشاء `pixel_values` و`pixel_mask` و +`labels` التي يمكن لنموذج DETR التدريب عليها. لدى معالج الصور بعض الصفات التي لا يتعين عليك القلق بشأنها: + +- `image_mean = [0.485، 0.456، 0.406]` +- `image_std = [0.229، 0.224، 0.225]` + +هذه هي المتوسط والانحراف المعياري المستخدم لتطبيع الصور أثناء التدريب المسبق للنموذج. هذه القيم حاسمة +لاستنساخ عند إجراء الاستدلال أو ضبط نموذج الصورة المسبق التدريب. + +قم بتنفيذ معالج الصور من نفس نقطة المراقبة مثل النموذج الذي تريد ضبطه بدقة. + +```py +>>> from transformers import AutoImageProcessor + +>>> MAX_SIZE = IMAGE_SIZE + +>>> image_processor = AutoImageProcessor.from_pretrained( +... MODEL_NAME, +... do_resize=True, +... size={"max_height": MAX_SIZE, "max_width": MAX_SIZE}, +... do_pad=True, +... pad_size={"height": MAX_SIZE, "width": MAX_SIZE}, +... ) +``` + +قبل تمرير الصور إلى `image_processor`، قم بتطبيق تحولين للمعالجة المسبقة على مجموعة البيانات: + +- زيادة الصور +- إعادة تنسيق التعليقات التوضيحية لتلبية توقعات DETR + +أولاً، للتأكد من أن النموذج لا يفرط في تناسب بيانات التدريب، يمكنك تطبيق زيادة الصورة باستخدام أي مكتبة لزيادة البيانات. هنا نستخدم [Albumentations](https://albumentations.ai/docs/). +تضمن هذه المكتبة أن تؤثر التحولات على الصورة وتحديث صناديق الحدود وفقًا لذلك. +تحتوي وثائق مكتبة 🤗 Datasets على دليل تفصيلي حول [كيفية زيادة الصور لاكتشاف الأجسام](https://huggingface.co/docs/datasets/object_detection)، +ويستخدم نفس مجموعة البيانات كمثال. قم بتطبيق بعض التحولات الهندسية واللونية على الصورة. للحصول على خيارات زيادة إضافية، استكشف [مساحة عرض Albumentations](https://huggingface.co/spaces/qubvel-hf/albumentations-demo). + +```py +>>> import albumentations as A + +>>> train_augment_and_transform = A.Compose( +... [ +... A.Perspective(p=0.1), +... A.HorizontalFlip(p=0.5), +... A.RandomBrightnessContrast(p=0.5), +... A.HueSaturationValue(p=0.1), +... ], +... bbox_params=A.BboxParams(format="coco", label_fields=["category"], clip=True, min_area=25), +... ) + +>>> validation_transform = A.Compose( +... [A.NoOp()], +... bbox_params=A.BboxParams(format="coco", label_fields=["category"], clip=True), +... ) +``` + +يتوقع `image_processor` أن تكون التعليقات التوضيحية بالتنسيق التالي: `{'image_id': int، 'annotations': List [Dict]}`، +حيث يكون كل قاموس عبارة عن تعليق توضيحي لكائن COCO. دعنا نضيف دالة لإعادة تنسيق التعليقات التوضيحية لصورة واحدة: + +```py +>>> def format_image_annotations_as_coco(image_id, categories, areas, bboxes): +... """Format one set of image annotations to the COCO format + +... Args: +... image_id (str): image id. e.g. "0001" +... categories (List[int]): list of categories/class labels corresponding to provided bounding boxes +... areas (List[float]): list of corresponding areas to provided bounding boxes +... bboxes (List[Tuple[float]]): list of bounding boxes provided in COCO format +... ([center_x, center_y, width, height] in absolute coordinates) + +... Returns: +... dict: { +... "image_id": image id, +... "annotations": list of formatted annotations +... } +... """ +... annotations = [] +... for category, area, bbox in zip(categories, areas, bboxes): +... formatted_annotation = { +... "image_id": image_id, +... "category_id": category, +... "iscrowd": 0, +... "area": area, +... "bbox": list(bbox), +... } +... annotations.append(formatted_annotation) + +... return { +... "image_id": image_id, +... "annotations": annotations, +... } + +``` + +الآن يمكنك الجمع بين تحولات الصور والتعليقات التوضيحية لاستخدامها في دفعة من الأمثلة: + +```py +>>> def augment_and_transform_batch(examples, transform, image_processor, return_pixel_mask=False): +... """Apply augmentations and format annotations in COCO format for object detection task""" + +... images = [] +... annotations = [] +... for image_id, image, objects in zip(examples["image_id"], examples["image"], examples["objects"]): +... image = np.array(image.convert("RGB")) + +... # apply augmentations +... output = transform(image=image, bboxes=objects["bbox"], category=objects["category"]) +... images.append(output["image"]) + +... # format annotations in COCO format +... formatted_annotations = format_image_annotations_as_coco( +... image_id, output["category"], objects["area"], output["bboxes"] +... ) +... annotations.append(formatted_annotations) + +... # Apply the image processor transformations: resizing, rescaling, normalization +... result = image_processor(images=images, annotations=annotations, return_tensors="pt") + +... if not return_pixel_mask: +... result.pop("pixel_mask", None) + +... return result +``` + +قم بتطبيق دالة ما قبل المعالجة هذه على مجموعة البيانات بأكملها باستخدام طريقة [`~datasets.Dataset.with_transform`] في 🤗 Datasets. تطبق هذه الطريقة +التحويلات أثناء التنقل عند تحميل عنصر من مجموعة البيانات. + +في هذه المرحلة، يمكنك التحقق من مظهر مثال من مجموعة البيانات بعد التحويلات. يجب أن ترى تنسور +مع `pixel_values`، تنسور مع `pixel_mask`، و `labels`. + +```py +>>> from functools import partial + +>>> # إنشاء دالات تحويل للدفعة وتطبيقها على أقسام مجموعة البيانات +>>> train_transform_batch = partial( +... augment_and_transform_batch، transform=train_augment_and_transform، image_processor=image_processor +... ) +>>> validation_transform_batch = partial( +... augment_and_transform_batch، transform=validation_transform، image_processor=image_processor +... ) + +>>> cppe5["train"] = cppe5["train"].with_transform(train_transform_batch) +>>> cppe5["validation"] = cppe5["validation"].with_transform(validation_transform_batch) +>>> cppe5["test"] = cppe5["test"].with_transform(validation_transform_batch) + +>>> cppe5["train"][15] +{'pixel_values': tensor([[[ 1.9235، 1.9407، 1.9749، ...، -0.7822، -0.7479، -0.6965]، +[ 1.9578، 1.9749، 1.9920، ...، -0.7993، -0.7650، -0.7308]، +[ 2.0092، 2.0092، 2.0263، ...، -0.8507، -0.8164، -0.7822]، +...، +[ 0.0741، 0.0741، 0.0741، ...، 0.0741، 0.0741، 0.0741]، +[ 0.0741، 0.0741، 0.0741، ...، 0.0741، 0.0741، 0.0741]، +[ 0.0741، 0.0741، 0.0741، ...، 0.0741، 0.0741، 0.0741]]، + + [[ 1.6232، 1.6408، 1.6583، ...، 0.8704، 1.0105، 1.1331]، +[ 1.6408، 1.6583، 1.6758، ...، 0.8529، 0.9930، 1.0980]، +[ 1.6933، 1.6933، 1.7108، ...، 0.8179، 0.9580، 1.0630]، +...، +[ 0.2052، 0.2052، 0.2052، ...، 0.2052، 0.2052، 0.2052]، +[ 0.2052، 0.2052، 0.2052، ...، 0.2052، 0.2052، 0.2052]، +[ 0.2052، 0.2052، 0.2052، ...، 0.2052، 0.2052، 0.2052]]، + + [[ 1.8905، 1.9080، 1.9428، ...، -0.1487، -0.0964، -0.0615]، +[ 1.9254، 1.9428، 1.9603، ...، -0.1661، -0.1138، -0.0790]، +[ 1.9777، 1.9777، 1.9951، ...، -0.2010، -0.1138، -0.0790]، +...، +[ 0.4265، 0.4265، 0.4265، ...، 0.4265، 0.4265، 0.4265]، +[ 0.4265، 0.4265، 0.4265، ...، 0.4265، 0.4265، 0.4265]، +[ 0.4265، 0.4265، 0.4265، ...، 0.4265، 0.4265، 0.4265]]])، +'labels': {'image_id': tensor([688])، 'class_labels': tensor([3، 4، 2، 0، 0])، 'boxes': tensor([[0.4700، 0.1933، 0.1467، 0.0767]، +[0.4858، 0.2600، 0.1150، 0.1000]، +[0.4042، 0.4517، 0.1217، 0.1300]، +[0.4242، 0.3217، 0.3617، 0.5567]، +[0.6617، 0.4033، 0.5400، 0.4533]])، 'area': tensor([4048.، 4140.، 5694.، 72478.، 88128.])، 'iscrowd': tensor([0، 0، 0، 0، 0])، 'orig_size': tensor([480، 480])}} +``` + +لقد نجحت في زيادة حجم الصور الفردية وإعداد تسمياتها. ومع ذلك، لم تنته المعالجة المسبقة بعد. في الخطوة الأخيرة، قم بإنشاء `collate_fn` مخصص لدمج الصور معًا. +قم بتبطين الصور (التي هي الآن `pixel_values`) إلى أكبر صورة في دفعة، وقم بإنشاء `pixel_mask` +المقابل للإشارة إلى البكسلات الحقيقية (1) والبكسلات المبطنة (0). + +```py +>>> import torch + +>>> def collate_fn(batch): +... data = {} +... data["pixel_values"] = torch.stack([x["pixel_values"] for x in batch]) +... data["labels"] = [x["labels"] for x in batch] +... if "pixel_mask" in batch[0]: +... data["pixel_mask"] = torch.stack([x["pixel_mask"] for x in batch]) +... return data + +``` + +## إعداد دالة لحساب mAP + +تتم عادةً تقييم نماذج اكتشاف الكائنات باستخدام مجموعة من مقاييس على غرار COCO. سنستخدم `torchmetrics` لحساب `mAP` (متوسط الدقة المتوسطة) و `mAR` (متوسط الاستدعاء المتوسط) وسنقوم بتغليفها في دالة `compute_metrics` لاستخدامها في [`Trainer`] للتقييم. + +تنسيق وسيط للصناديق المستخدمة للتدريب هو `YOLO` (معياري) ولكننا سنحسب المقاييس للصناديق بتنسيق `Pascal VOC` (المطلق) من أجل التعامل بشكل صحيح مع مناطق الصندوق. دعنا نحدد دالة لتحويل حدود الصورة إلى تنسيق `Pascal VOC`: + +```py +>>> from transformers.image_transforms import center_to_corners_format + +>>> def convert_bbox_yolo_to_pascal(boxes, image_size): +... """ +... Convert bounding boxes from YOLO format (x_center, y_center, width, height) in range [0, 1] +... to Pascal VOC format (x_min, y_min, x_max, y_max) in absolute coordinates. + +... Args: +... boxes (torch.Tensor): Bounding boxes in YOLO format +... image_size (Tuple[int, int]): Image size in format (height, width) + +... Returns: +... torch.Tensor: Bounding boxes in Pascal VOC format (x_min, y_min, x_max, y_max) +... """ +... # convert center to corners format +... boxes = center_to_corners_format(boxes) + +... # convert to absolute coordinates +... height, width = image_size +... boxes = boxes * torch.tensor([[width, height, width, height]]) + +... return boxes +``` +في دالة compute_metrics نقوم بجمع الصناديق الحدودية predicted و target، الدرجات والعلامات من نتائج حلقة التقييم ونمررها إلى دالة التسجيل. + +```py +>>> import numpy as np +>>> from dataclasses import dataclass +>>> from torchmetrics.detection.mean_ap import MeanAveragePrecision + + +>>> @dataclass +>>> class ModelOutput: +... logits: torch.Tensor +... pred_boxes: torch.Tensor + + +>>> @torch.no_grad() +>>> def compute_metrics(evaluation_results, image_processor, threshold=0.0, id2label=None): +... """ +... Compute mean average mAP, mAR and their variants for the object detection task. + +... Args: +... evaluation_results (EvalPrediction): Predictions and targets from evaluation. +... threshold (float, optional): Threshold to filter predicted boxes by confidence. Defaults to 0.0. +... id2label (Optional[dict], optional): Mapping from class id to class name. Defaults to None. + +... Returns: +... Mapping[str, float]: Metrics in a form of dictionary {: } +... """ + +... predictions, targets = evaluation_results.predictions, evaluation_results.label_ids + +... # For metric computation we need to provide: +... # - targets in a form of list of dictionaries with keys "boxes", "labels" +... # - predictions in a form of list of dictionaries with keys "boxes", "scores", "labels" + +... image_sizes = [] +... post_processed_targets = [] +... post_processed_predictions = [] + +... # Collect targets in the required format for metric computation +... for batch in targets: +... # collect image sizes, we will need them for predictions post processing +... batch_image_sizes = torch.tensor(np.array([x["orig_size"] for x in batch])) +... image_sizes.append(batch_image_sizes) +... # collect targets in the required format for metric computation +... # boxes were converted to YOLO format needed for model training +... # here we will convert them to Pascal VOC format (x_min, y_min, x_max, y_max) +... for image_target in batch: +... boxes = torch.tensor(image_target["boxes"]) +... boxes = convert_bbox_yolo_to_pascal(boxes, image_target["orig_size"]) +... labels = torch.tensor(image_target["class_labels"]) +... post_processed_targets.append({"boxes": boxes, "labels": labels}) + +... # Collect predictions in the required format for metric computation, +... # model produce boxes in YOLO format, then image_processor convert them to Pascal VOC format +... for batch, target_sizes in zip(predictions, image_sizes): +... batch_logits, batch_boxes = batch[1], batch[2] +... output = ModelOutput(logits=torch.tensor(batch_logits), pred_boxes=torch.tensor(batch_boxes)) +... post_processed_output = image_processor.post_process_object_detection( +... output, threshold=threshold, target_sizes=target_sizes +... ) +... post_processed_predictions.extend(post_processed_output) + +... # Compute metrics +... metric = MeanAveragePrecision(box_format="xyxy", class_metrics=True) +... metric.update(post_processed_predictions, post_processed_targets) +... metrics = metric.compute() + +... # Replace list of per class metrics with separate metric for each class +... classes = metrics.pop("classes") +... map_per_class = metrics.pop("map_per_class") +... mar_100_per_class = metrics.pop("mar_100_per_class") +... for class_id, class_map, class_mar in zip(classes, map_per_class, mar_100_per_class): +... class_name = id2label[class_id.item()] if id2label is not None else class_id.item() +... metrics[f"map_{class_name}"] = class_map +... metrics[f"mar_100_{class_name}"] = class_mar + +... metrics = {k: round(v.item(), 4) for k, v in metrics.items()} + +... return metrics + + +>>> eval_compute_metrics_fn = partial( +... compute_metrics, image_processor=image_processor, id2label=id2label, threshold=0.0 +... ) +``` +## تدريب نموذج الكشف + +لقد قمت بمعظم العمل الشاق في الأقسام السابقة، لذا فأنت الآن مستعد لتدريب نموذجك! +لا تزال الصور في هذه المجموعة البيانات كبيرة الحجم، حتى بعد تغيير حجمها. وهذا يعني أن ضبط نموذج سيتطلب +على الأقل وحدة معالجة رسومات (GPU) واحدة. + +يتضمن التدريب الخطوات التالية: + +1. قم بتحميل النموذج باستخدام [`AutoModelForObjectDetection`] باستخدام نفس نقطة التثبيت checkpoint كما في المعالجة المسبقة. +2. حدد فرط معلماتك في [`TrainingArguments`]. +3. مرر فرط معلمات التدريب إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات ومعالج الصور ومجمع البيانات. +4. استدعاء [`~Trainer.train`] لضبط نموذجك. + +عند تحميل النموذج من نفس نقطة التثبيت التي استخدمتها للمعالجة المسبقة، تذكر تمرير الخرائط `label2id` +و `id2label` التي قمت بإنشائها سابقًا من بيانات وصف مجموعة البيانات. بالإضافة إلى ذلك، نقوم بتحديد `ignore_mismatched_sizes=True` لاستبدال رأس التصنيف الموجود بواحد جديد. + +```py +>>> from transformers import AutoModelForObjectDetection + +>>> model = AutoModelForObjectDetection.from_pretrained( +... MODEL_NAME, +... id2label=id2label, +... label2id=label2id, +... ignore_mismatched_sizes=True, +... ) +``` + +في [`TrainingArguments`] استخدم `output_dir` لتحديد المكان الذي سيتم فيه حفظ نموذجك، ثم قم بتهيئة فرط المعلمات كما تراه مناسبًا. بالنسبة لـ `num_train_epochs=30`، سيستغرق التدريب حوالي 35 دقيقة في Google Colab T4 GPU، قم بزيادة عدد العصور epochs لتحقيق نتائج أفضل. + +ملاحظات مهمة: + - لا تقم بإزالة الأعمدة غير المستخدمة لأن هذا سيؤدي إلى إسقاط عمود الصورة. بدون عمود الصورة، +لا يمكنك إنشاء `pixel_values`. لهذا السبب، قم بتعيين `remove_unused_columns` إلى `False`. + - قم بتعيين `eval_do_concat_batches=False` للحصول على نتائج تقييم صحيحة. تحتوي الصور على عدد مختلف من صناديق الهدف، إذا تم دمج الدفعات، فلن نتمكن من تحديد الصناديق التي تنتمي إلى صورة معينة. + +إذا كنت ترغب في مشاركة نموذجك عن طريق دفعه إلى Hub، فقم بتعيين `push_to_hub` إلى `True` (يجب أن تكون قد سجلت الدخول إلى Hugging +Face لتحميل نموذجك). + +```py +>>> from transformers import TrainingArguments + +>>> training_args = TrainingArguments( +... output_dir="detr_finetuned_cppe5", +... num_train_epochs=30, +... fp16=False, +... per_device_train_batch_size=8, +... dataloader_num_workers=4, +... learning_rate=5e-5, +... lr_scheduler_type="cosine", +... weight_decay=1e-4, +... max_grad_norm=0.01, +... metric_for_best_model="eval_map", +... greater_is_better=True, +... load_best_model_at_end=True, +... eval_strategy="epoch", +... save_strategy="epoch", +... save_total_limit=2, +... remove_unused_columns=False, +... eval_do_concat_batches=False, +... push_to_hub=True, +... ) +``` + +أخيرًا، قم بجمع كل شيء معًا، واستدعاء [`~transformers.Trainer.train`]: + +```py +>>> from transformers import Trainer + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=cppe5["train"], +... eval_dataset=cppe5["validation"], +... tokenizer=image_processor, +... data_collator=collate_fn, +... compute_metrics=eval_compute_metrics_fn, +... ) + +>>> trainer.train() +``` +
+ + + [3210/3210 26:07, Epoch 30/30] +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpochTraining LossValidation LossMapMap 50Map 75Map SmallMap MediumMap LargeMar 1Mar 10Mar 100Mar SmallMar MediumMar LargeMap CoverallMar 100 CoverallMap Face ShieldMar 100 Face ShieldMap GlovesMar 100 GlovesMap GogglesMar 100 GogglesMap MaskMar 100 Mask
1No log2.6299030.0089000.0232000.0065000.0013000.0028000.0205000.0215000.0704000.1014000.0076000.1062000.0961000.0367000.2320000.0003000.0190000.0039000.1254000.0001000.0031000.0035000.127600
2No log3.4798640.0148000.0346000.0108000.0086000.0117000.0125000.0411000.0987000.1300000.0560000.0622000.1119000.0535000.4473000.0106000.1000000.0002000.0228000.0001000.0154000.0097000.064400
3No log2.1076220.0417000.0940000.0343000.0241000.0264000.0474000.0915000.1828000.2258000.0872000.1994000.2106000.1509000.5712000.0173000.1013000.0073000.1804000.0021000.0262000.0310000.250200
4No log2.0312420.0559000.1206000.0469000.0138000.0381000.0903000.1059000.2256000.2661000.1302000.2281000.3300000.1910000.5721000.0106000.1570000.0146000.2353000.0017000.0523000.0618000.313800
53.8894001.8834330.0897000.2018000.0673000.0228000.0653000.1295000.1360000.2722000.3037000.1129000.3125000.4246000.3002000.5851000.0327000.2025000.0313000.2710000.0087000.1262000.0755000.333800
63.8894001.8075030.1185000.2709000.0902000.0349000.0767000.1525000.1461000.2978000.3254000.1717000.2837000.5459000.3969000.5545000.0430000.2620000.0545000.2719000.0203000.2308000.0776000.308000
73.8894001.7161690.1435000.3077000.1232000.0458000.0978000.2583000.1653000.3277000.3526000.1409000.3367000.5994000.4429000.6207000.0694000.3013000.0816000.2920000.0110000.2308000.1127000.318200
83.8894001.6790140.1530000.3558000.1279000.0387000.1156000.2916000.1760000.3225000.3497000.1356000.3261000.6437000.4317000.5829000.0698000.2658000.0886000.2746000.0283000.2800000.1467000.345300
93.8894001.6182390.1721000.3753000.1376000.0461000.1417000.3085000.1940000.3562000.3862000.1624000.3592000.6777000.4698000.6239000.1021000.3177000.0991000.2902000.0293000.3354000.1602000.364000
101.5997001.5725120.1795000.4004000.1472000.0565000.1417000.3167000.2131000.3576000.3813000.1979000.3443000.6385000.4669000.6239000.1013000.3114000.1047000.2795000.0516000.3385000.1730000.353300
111.5997001.5288890.1922000.4150000.1608000.0537000.1505000.3780000.2115000.3717000.3978000.2049000.3746000.6848000.4919000.6324000.1312000.3468000.1220000.3009000.0384000.3446000.1775000.364400
121.5997001.5175320.1983000.4298000.1598000.0664000.1629000.3833000.2207000.3821000.4054000.2148000.3832000.6729000.4690000.6104000.1678000.3797000.1197000.3071000.0381000.3354000.1968000.394200
131.5997001.4888490.2098000.4523000.1723000.0949000.1711000.4378000.2220000.3798000.4115000.2038000.3973000.7075000.4707000.6207000.1869000.4076000.1242000.3067000.0593000.3554000.2077000.367100
141.5997001.4822100.2289000.4826000.1878000.0836000.1918000.4441000.2259000.3769000.4074000.1825000.3848000.7006000.5121000.6401000.1750000.3633000.1443000.3000000.0831000.3631000.2299000.370700
151.3268001.4751980.2163000.4556000.1749000.0885000.1835000.4244000.2269000.3734000.4043000.1992000.3964000.6778000.4963000.6338000.1663000.3924000.1289000.3129000.0852000.3123000.2050000.370200
161.3268001.4596970.2332000.5042000.1922000.0960000.2020000.4308000.2391000.3824000.4126000.2195000.4031000.6704000.4852000.6252000.1965000.4101000.1357000.2996000.1231000.3569000.2253000.371100
171.3268001.4073400.2434000.5119000.2045000.1210000.2157000.4680000.2462000.3946000.4242000.2259000.4161000.7052000.4949000.6383000.2249000.4304000.1572000.3179000.1157000.3692000.2242000.365300
181.3268001.4195220.2451000.5215000.2100000.1161000.2115000.4899000.2554000.3916000.4197000.1988000.4212000.7014000.5018000.6342000.2267000.4101000.1544000.3214000.1059000.3523000.2367000.380400
191.1586001.3987640.2536000.5192000.2136000.1352000.2077000.4919000.2573000.3973000.4280000.2414000.4018000.7035000.5097000.6311000.2367000.4418000.1559000.3308000.1281000.3523000.2375000.384000
201.1586001.3905910.2488000.5202000.2166000.1275000.2114000.4719000.2583000.4070000.4291000.2403000.4076000.7085000.5058000.6234000.2355000.4316000.1500000.3250000.1257000.3754000.2272000.390200
211.1586001.3606080.2627000.5448000.2221000.1347000.2300000.4875000.2695000.4133000.4363000.2362000.4191000.7093000.5141000.6374000.2572000.4506000.1651000.3384000.1394000.3723000.2377000.382700
221.1586001.3682960.2628000.5424000.2364000.1374000.2281000.4985000.2665000.4090000.4330000.2399000.4185000.6975000.5205000.6410000.2575000.4557000.1626000.3348000.1402000.3538000.2332000.379600
231.1586001.3681760.2648000.5411000.2331000.1382000.2239000.4987000.2723000.4074000.4344000.2331000.4183000.7020000.5244000.6423000.2623000.4443000.1597000.3353000.1405000.3662000.2369000.384000
241.0497001.3552710.2697000.5492000.2391000.1347000.2299000.5192000.2748000.4127000.4376000.2454000.4172000.7112000.5232000.6441000.2721000.4405000.1667000.3415000.1377000.3738000.2490000.388000
251.0497001.3551800.2725000.5479000.2438000.1497000.2299000.5231000.2725000.4157000.4422000.2562000.4202000.7058000.5239000.6396000.2717000.4519000.1663000.3469000.1537000.3831000.2470000.389300
261.0497001.3493370.2756000.5563000.2464000.1467000.2348000.5163000.2742000.4183000.4409000.2487000.4189000.7058000.5232000.6365000.2747000.4405000.1724000.3491000.1556000.3846000.2523000.393800
271.0497001.3507820.2752000.5487000.2468000.1473000.2364000.5272000.2801000.4162000.4426000.2534000.4240000.7103000.5266000.6401000.2732000.4456000.1670000.3469000.1601000.3877000.2492000.392900
281.0497001.3465330.2770000.5528000.2529000.1474000.2400000.5276000.2809000.4209000.4441000.2555000.4245000.7112000.5302000.6468000.2774000.4418000.1709000.3469000.1566000.3892000.2496000.396000
290.9937001.3465750.2771000.5548000.2529000.1484000.2397000.5236000.2784000.4200000.4433000.2563000.4240000.7056000.5296000.6473000.2739000.4392000.1743000.3487000.1576000.3862000.2501000.395100
300.9937001.3464460.2774000.5547000.2527000.1479000.2408000.5236000.2788000.4204000.4433000.2561000.4242000.7055000.5301000.6468000.2756000.4405000.1745000.3487000.1573000.3862000.2492000.394200

+ +إذا قمت بتعيين `push_to_hub` إلى `True` في `training_args`، يتم دفع نقاط تثبيت التدريب إلى +Hub الخاص بـ Hugging Face. عند اكتمال التدريب، قم أيضًا بدفع النموذج النهائي إلى Hub عن طريق استدعاء طريقة [`~transformers.Trainer.push_to_hub`]. + +```py +>>> trainer.push_to_hub() +``` + +## تقييم + +```py +>>> from pprint import pprint + +>>> metrics = trainer.evaluate(eval_dataset=cppe5["test"], metric_key_prefix="test") +>>> pprint(metrics) +{'epoch': 30.0، + 'test_loss': 1.0877351760864258، + 'test_map': 0.4116، + 'test_map_50': 0.741، + 'test_map_75': 0.3663، + 'test_map_Coverall': 0.5937، + 'test_map_Face_Shield': 0.5863، + 'test_map_Gloves': 0.3416، + 'test_map_Goggles': 0.1468، + 'test_map_Mask': 0.3894، + 'test_map_large': 0.5637، + 'test_map_medium': 0.3257، + 'test_map_small': 0.3589، + 'test_mar_1': 0.323، + 'test_mar_10': 0.5237، + 'test_mar_100': 0.5587، + 'test_mar_100_Coverall': 0.6756، + 'test_mar_100_Face_Shield': 0.7294، + 'test_mar_100_Gloves': 0.4721، + 'test_mar_100_Goggles': 0.4125، + 'test_mar_100_Mask': 0.5038، + 'test_mar_large': 0.7283، + 'test_mar_medium': 0.4901، + 'test_mar_small': 0.4469، + 'test_runtime': 1.6526، + 'test_samples_per_second': 17.548، + 'test_steps_per_second': 2.42} +``` + +يمكن تحسين هذه النتائج عن طريق ضبط فرط المعلمات في [`TrainingArguments`]. جربه! + +## الاستنتاج + +الآن بعد أن قمت بضبط نموذج، وتقييمه، وتحميله إلى Hub الخاص بـ Hugging Face، يمكنك استخدامه للاستنتاج. + +```py +>>> import torch +>>> import requests + +>>> from PIL import Image, ImageDraw +>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection + +>>> url = "https://images.pexels.com/photos/8413299/pexels-photo-8413299.jpeg?auto=compress&cs=tinysrgb&w=630&h=375&dpr=2" +>>> image = Image.open(requests.get(url, stream=True).raw) +``` + +قم بتحميل النموذج ومعالج الصور من Hub الخاص بـ Hugging Face (تخطي لاستخدام ما تم تدريبه بالفعل في هذه الجلسة): +```py +>>> device = "cuda" +>>> model_repo = "qubvel-hf/detr_finetuned_cppe5" + +>>> image_processor = AutoImageProcessor.from_pretrained(model_repo) +>>> model = AutoModelForObjectDetection.from_pretrained(model_repo) +>>> model = model.to(device) +``` + +وكشف حدود الصناديق: + +```py + +>>> with torch.no_grad(): +... inputs = image_processor(images=[image], return_tensors="pt") +... outputs = model(**inputs.to(device)) +... target_sizes = torch.tensor([[image.size[1], image.size[0]]]) +... results = image_processor.post_process_object_detection(outputs, threshold=0.3, target_sizes=target_sizes)[0] + +>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]): +... box = [round(i, 2) for i in box.tolist()] +... print( +... f"Detected {model.config.id2label[label.item()]} with confidence " +... f"{round(score.item(), 3)} at location {box}" +... ) +تم الكشف عن القفازات بثقة 0.683 في الموقع [244.58، 124.33، 300.35، 185.13] +تم الكشف عن قناع بثقة 0.517 في الموقع [143.73، 64.58، 219.57، 125.89] +تم الكشف عن القفازات بثقة 0.425 في الموقع [179.15، 155.57، 262.4، 226.35] +تم الكشف عن رداء واقي بثقة 0.407 في الموقع [307.13، -1.18، 477.82، 318.06] +تم الكشف عن رداء واقي بثقة 0.391 في الموقع [68.61، 126.66، 309.03، 318.89] +``` + +دعونا نرسم النتيجة: + +```py +>>> draw = ImageDraw.Draw(image) + +>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]): +... box = [round(i, 2) for i in box.tolist()] +... x, y, x2, y2 = tuple(box) +... draw.rectangle((x, y, x2, y2), outline="red", width=1) +... draw.text((x, y), model.config.id2label[label.item()], fill="white") + +>>> image +``` + +

+ نتيجة الكشف عن الكائنات على صورة جديدة +
\ No newline at end of file From 912708f86342003cd45ca9a8604ff42156ec6a7d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:49 +0300 Subject: [PATCH 096/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/prompting.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/prompting.md | 396 ++++++++++++++++++++++++++++++ 1 file changed, 396 insertions(+) create mode 100644 docs/source/ar/tasks/prompting.md diff --git a/docs/source/ar/tasks/prompting.md b/docs/source/ar/tasks/prompting.md new file mode 100644 index 00000000000000..7cc2a07ae2d5f0 --- /dev/null +++ b/docs/source/ar/tasks/prompting.md @@ -0,0 +1,396 @@ +# دليل إرشادي لاستخدام نماذج اللغة الضخمة + +[[open-in-colab]] + +نماذج اللغة الضخمة مثل Falcon و LLaMA، إلخ، هي نماذج محول مُدربة مسبقًا تم تدريبها في البداية للتنبؤ بالرمز التالي بناءً على نص الإدخال. وعادة ما تحتوي على مليارات من المعلمات وتم تدريبها على تريليونات من الرموز لفترة طويلة من الوقت. ونتيجة لذلك، تصبح هذه النماذج قوية ومتعددة الاستخدامات، ويمكنك استخدامها لحل العديد من مهام معالجة اللغات الطبيعية خارج الصندوق من خلال توجيه النماذج باستخدام موجهات اللغة الطبيعية. + +غالبًا ما يُطلق على تصميم هذه الموجهات لضمان الإخراج الأمثل "هندسة الموجهات". وهندسة الموجهات هي عملية تكرارية تتطلب قدرًا كبيرًا من التجريب. اللغات الطبيعية أكثر مرونة وتعبيرية من لغات البرمجة، ومع ذلك، يمكن أن تُدخل أيضًا بعض الغموض. وفي الوقت نفسه، فإن الموجهات في اللغة الطبيعية حساسة للغاية للتغييرات. حتى التعديلات الطفيفة في الموجهات يمكن أن تؤدي إلى نتائج مختلفة تمامًا. + +في حين لا توجد وصفة دقيقة لإنشاء موجهات مطابقة لجميع الحالات، فقد توصل الباحثون إلى عدد من أفضل الممارسات التي تساعد على تحقيق نتائج مثالية بشكل أكثر اتساقًا. + +يغطي هذا الدليل أفضل ممارسات هندسة الموجهات لمساعدتك في صياغة موجهات أفضل لنموذج اللغة الضخمة وحل مختلف مهام معالجة اللغات الطبيعية. ستتعلم ما يلي: + +- [أساسيات الإرشاد](#أساسيات-الإرشاد) +- [أفضل ممارسات إرشاد نماذج اللغة الضخمة](#أفضل-ممارسات-إرشاد-نماذج-اللغة-الضخمة) +- [تقنيات الإرشاد المتقدمة: الإرشاد القائم على القلة وسلسلة الأفكار](#تقنيات-الإرشاد-المتقدمة) +- [متى يتم الضبط الدقيق بدلاً من الإرشاد](#الإرشاد-مقابل-الضبط-الدقيق) + + + +هندسة الموجهات هي مجرد جزء من عملية تحسين إخراج نموذج اللغة الضخمة. والمكون الأساسي الآخر هو اختيار إستراتيجية توليد النص المثلى. يمكنك تخصيص كيفية اختيار نموذج اللغة الضخمة الخاص بك لكل رمز من الرموز اللاحقة عند توليد النص دون تعديل أي من المعلمات القابلة للتدريب. من خلال ضبط معلمات توليد النص، يمكنك تقليل التكرار في النص المولد وجعله أكثر تماسكًا وأكثر تشابهًا مع اللغة البشرية. +تخرج إستراتيجيات ومعلمات توليد النص عن نطاق هذا الدليل، ولكن يمكنك معرفة المزيد حول هذه الموضوعات في الأدلة التالية: + +* [التوليد باستخدام نماذج اللغة الضخمة](../llm_tutorial) +* [إستراتيجيات توليد النص](../generation_strategies) + + + +## أساسيات الإرشاد + +### أنواع النماذج + +تعد معظم نماذج اللغة الضخمة الحديثة محولات فك تشفير فقط. وفيما يلي بعض الأمثلة: [LLaMA](../model_doc/llama)، [Llama2](../model_doc/llama2)، [Falcon](../model_doc/falcon)، [GPT2](../model_doc/gpt2). ومع ذلك، قد تصادف أيضًا نماذج محول الترميز والفك تشفير، على سبيل المثال، [Flan-T5](../model_doc/flan-t5) و [BART](../model_doc/bart). + +تُستخدم نماذج أسلوب الترميز والفك تشفير عادةً في المهام التوليدية حيث يعتمد الإخراج **بشكل كبير** على الإدخال، على سبيل المثال، في الترجمة والتلخيص. وتُستخدم نماذج فك التشفير فقط لجميع الأنواع الأخرى من المهام التوليدية. + +عند استخدام خط أنابيب لتوليد نص باستخدام نموذج لغة ضخمة، من المهم معرفة نوع نموذج اللغة الضخمة الذي تستخدمه، لأنها تستخدم خطوط أنابيب مختلفة. + +قم بتشغيل الاستدلال باستخدام نماذج فك التشفير فقط باستخدام خط أنابيب `text-generation`: + +```python +>>> from transformers import pipeline +>>> import torch + +>>> torch.manual_seed(0) # doctest: +IGNORE_RESULT + +>>> generator = pipeline('text-generation', model = 'openai-community/gpt2') +>>> prompt = "Hello, I'm a language model" + +>>> generator(prompt, max_length = 30) +[{'generated_text': "Hello, I'm a language model programmer so you can use some of my stuff. But you also need some sort of a C program to run."}] +``` + +لتشغيل الاستدلال باستخدام الترميز والفك تشفير، استخدم خط أنابيب `text2text-generation`: + +```python +>>> text2text_generator = pipeline("text2text-generation", model = 'google/flan-t5-base') +>>> prompt = "Translate from English to French: I'm very happy to see you" + +>>> text2text_generator(prompt) +[{'generated_text': 'Je suis très heureuse de vous rencontrer.'}] +``` + +### النماذج الأساسية مقابل نماذج التعليمات/الدردشة + +تأتي معظم نقاط التحقق الحديثة لنموذج اللغة الضخمة المتوفرة على 🤗 Hub في إصدارين: الأساسي والتعليمات (أو الدردشة). على سبيل المثال، +[`tiiuae/falcon-7b`](https://huggingface.co/tiiuae/falcon-7b) و [`tiiuae/falcon-7b-instruct`](https://huggingface.co/tiiuae/falcon-7b-instruct). + +النماذج الأساسية ممتازة في استكمال النص عند إعطائها موجهًا أوليًا، ومع ذلك، فهي ليست مثالية لمهام معالجة اللغات الطبيعية حيث يتعين عليها اتباع التعليمات، أو للاستخدام المحادثي. وهنا يأتي دور إصدارات التعليمات (الدردشة). تمثل هذه نقاط التحقق نتيجة الضبط الدقيق الإضافي للإصدارات الأساسية المُدربة مسبقًا على مجموعات بيانات التعليمات وبيانات المحادثة. يجعل هذا الضبط الدقيق الإضافي منها خيارًا أفضل للعديد من مهام معالجة اللغات الطبيعية. + +دعونا نوضح بعض الموجهات البسيطة التي يمكنك استخدامها مع [`tiiuae/falcon-7b-instruct`](https://huggingface.co/tiiuae/falcon-7b-instruct) +لحل بعض مهام معالجة اللغات الطبيعية الشائعة. + +### مهام معالجة اللغات الطبيعية + +أولاً، دعونا نقوم بإعداد البيئة: + +```bash +pip install -q transformers accelerate +``` + +بعد ذلك، قم بتحميل النموذج باستخدام خط الأنابيب المناسب (`"text-generation"`): + +```python +>>> from transformers import pipeline, AutoTokenizer +>>> import torch + +>>> torch.manual_seed(0) # doctest: +IGNORE_RESULT +>>> model = "tiiuae/falcon-7b-instruct" + +>>> tokenizer = AutoTokenizer.from_pretrained(model) +>>> pipe = pipeline( +... "text-generation", +... model=model, +... tokenizer=tokenizer, +... torch_dtype=torch.bfloat16, +... device_map="auto", +... ) +``` + + + +لاحظ أن نماذج Falcon تم تدريبها باستخدام نوع بيانات `bfloat16`، لذلك نوصي باستخدام نفس النوع. يتطلب هذا إصدارًا حديثًا من CUDA ويعمل بشكل أفضل على البطاقات الحديثة. + + + +الآن بعد أن قمنا بتحميل النموذج عبر خط الأنابيب، دعونا نستكشف كيف يمكنك استخدام الموجهات لحل مهام معالجة اللغات الطبيعية. + +#### تصنيف النص + +يعد تحليل المشاعر أحد أكثر أشكال تصنيف النص شيوعًا، والذي يقوم بتعيين علامة مثل "إيجابي" أو "سلبي" أو "محايد" إلى تسلسل نصي. دعونا نكتب موجهًا يوجه النموذج لتصنيف نص معين (مراجعة فيلم). سنبدأ بإعطاء التعليمات، ثم تحديد النص لتصنيفه. لاحظ أنه بدلاً من الاكتفاء بذلك، نقوم أيضًا بإضافة بداية الاستجابة - `"Sentiment: "`: + +```python +>>> torch.manual_seed(0) # doctest: +IGNORE_RESULT +>>> prompt = """Classify the text into neutral, negative or positive. +... Text: This movie is definitely one of my favorite movies of its kind. The interaction between respectable and morally strong characters is an ode to chivalry and the honor code amongst thieves and policemen. +... Sentiment: +... """ + +>>> sequences = pipe( +... prompt, +... max_new_tokens=10, +... ) + +>>> for seq in sequences: +... print(f"Result: {seq['generated_text']}") +Result: Classify the text into neutral, negative or positive. +Text: This movie is definitely one of my favorite movies of its kind. The interaction between respectable and morally strong characters is an ode to chivalry and the honor code amongst thieves and policemen. +Sentiment: +Positive +``` + +وكنتيجة لذلك، يحتوي الإخراج على تصنيف العلامات من القائمة التي قدمناها في التعليمات، وهو تصنيف صحيح! + + + +قد تلاحظ أنه بالإضافة إلى الموجه، نقوم بتمرير معلمة `max_new_tokens`. يتحكم هذا في عدد الرموز التي يجب على النموذج توليدها، وهو أحد العديد من معلمات توليد النص التي يمكنك معرفتها +في دليل [إستراتيجيات توليد النص](../generation_strategies). + + + +#### التعرف على الكيانات المسماة + +التعرف على الكيانات المسماة (NER) هي مهمة العثور على كيانات مسماة في قطعة من النص، مثل شخص أو موقع أو منظمة. +دعونا نقوم بتعديل التعليمات في الموجه لجعل نموذج اللغة الضخمة يؤدي هذه المهمة. هنا، دعونا نقوم أيضًا بتعيين `return_full_text = False` +بحيث لا يحتوي الإخراج على الموجه: + +```python +>>> torch.manual_seed(1) # doctest: +IGNORE_RESULT +>>> prompt = """Return a list of named entities in the text. +... Text: The Golden State Warriors are an American professional basketball team based in San Francisco. +... Named entities: +... """ + +>>> sequences = pipe( +... prompt, +... max_new_tokens=15, +... return_full_text = False, +... ) + +>>> for seq in sequences: +... print(f"{seq['generated_text']}") +- Golden State Warriors +- San Francisco +``` + +كما ترى، قام النموذج بتحديد كيانين مسميين بشكل صحيح من النص المعطى. + +#### الترجمة + +يمكن أن تؤدي نماذج اللغة الضخمة مهمة الترجمة أيضًا. يمكنك اختيار استخدام نماذج الترميز والفك تشفير لهذه المهمة، ومع ذلك، هنا، +من أجل بساطة الأمثلة، سنواصل استخدام Falcon-7b-instruct، الذي يؤدي مهمة جيدة. مرة أخرى، إليك كيفية +يمكنك كتابة موجه أساسي لتوجيه النموذج لترجمة قطعة من النص من الإنجليزية إلى الإيطالية: + +```python +>>> torch.manual_seed(2) # doctest: +IGNORE_RESULT +>>> prompt = """Translate the English text to Italian. +... Text: Sometimes, I've believed as many as six impossible things before breakfast. +... Translation: +... """ + +>>> sequences = pipe( +... prompt, +... max_new_tokens=20, +... do_sample=True, +... top_k=10, +... return_full_text = False, +... ) + +>>> for seq in sequences: +... print(f"{seq['generated_text']}") +A volte, ho creduto a sei impossibili cose prima di colazione. +``` + +هنا أضفنا `do_sample=True` و `top_k=10` للسماح للنموذج بالمزيد من المرونة عند توليد الإخراج. + +#### تلخيص النص + +على غرار الترجمة، يعد تلخيص النص مهمة توليدية أخرى يعتمد فيها الإخراج **بشكل كبير** على الإدخال، +وقد تكون نماذج الترميز والفك تشفير خيارًا أفضل. ومع ذلك، يمكن استخدام نماذج أسلوب فك التشفير لهذه المهمة أيضًا. +في السابق، وضعنا التعليمات في بداية الموجه. ومع ذلك، قد يكون نهاية الموجه +مكانًا مناسبًا أيضًا للتعليمات. عادة، من الأفضل وضع التعليمات في أحد الطرفين. + +```python +>>> torch.manual_seed(3) # doctest: +IGNORE_RESULT +>>> prompt = """Permaculture is a design process mimicking the diversity, functionality and resilience of natural ecosystems. The principles and practices are drawn from traditional ecological knowledge of indigenous cultures combined with modern scientific understanding and technological innovations. Permaculture design provides a framework helping individuals and communities develop innovative, creative and effective strategies for meeting basic needs while preparing for and mitigating the projected impacts of climate change. +... Write a summary of the above text. +... Summary: +... """ + +>>> sequences = pipe( +... prompt, +... max_new_tokens=30, +... do_sample=True, +... top_k=10, +... return_full_text = False, +... ) + +>>> for seq in sequences: +... print(f"{seq['generated_text']}") +Permaculture is an ecological design mimicking natural ecosystems to meet basic needs and prepare for climate change. It is based on traditional knowledge and scientific understanding. +``` + +#### الإجابة على الأسئلة + +بالنسبة لمهمة الإجابة على الأسئلة، يمكننا هيكلة الموجه إلى المكونات المنطقية التالية: التعليمات، والسياق، والسؤال، +وكلمة أو عبارة رائدة ("الإجابة:") لتوجيه النموذج لبدء توليد الإجابة: + +```python +>>> torch.manual_seed(4) # doctest: +IGNORE_RESULT +>>> prompt = """Answer the question using the context below. +... Context: Gazpacho is a cold soup and drink made of raw, blended vegetables. Most gazpacho includes stale bread, tomato, cucumbers, onion, bell peppers, garlic, olive oil, wine vinegar, water, and salt. Northern recipes often include cumin and/or pimentón (smoked sweet paprika). Traditionally, gazpacho was made by pounding the vegetables in a mortar with a pestle; this more laborious method is still sometimes used as it helps keep the gazpacho cool and avoids the foam and silky consistency of smoothie versions made in blenders or food processors. +... Question: What modern tool is used to make gazpacho? +... Answer: +... """ + +>>> sequences = pipe( +... prompt, +... max_new_tokens=10, +... do_sample=True, +... top_k=10, +... return_full_text = False, +... ) + +>>> for seq in sequences: +... print(f"Result: {seq['generated_text']}") +Result: Modern tools often used to make gazpacho include +``` + +#### الاستدلال Reasoning + +الاستدلال هي إحدى أصعب المهام بالنسبة لنماذج اللغة الضخمة، وغالبًا ما يتطلب تحقيق نتائج جيدة تطبيق تقنيات الإرشاد المتقدمة، مثل +[سلسلة الأفكار](#سلسلة-الأفكار). + +دعونا نجرب ما إذا كان بإمكاننا جعل النموذج يستدل على مهمة حسابية بسيطة باستخدام موجه أساسي: + +```python +>>> torch.manual_seed(5) # doctest: +IGNORE_RESULT +>>> prompt = """There are 5 groups of students in the class. Each group has 4 students. How many students are there in the class?""" + +>>> sequences = pipe( +... prompt, +... max_new_tokens=30, +... do_sample=True, +... top_k=10, +... return_full_text = False, +... ) + +>>> for seq in sequences: +... print(f"Result: {seq['generated_text']}") +Result: There are a total of 5 groups, so there are 5 x 4=20 students in the class. + +``` + +صحيح! دعونا نزيد من التعقيد قليلاً ونرى ما إذا كان بإمكاننا الاستمرار في استخدام موجه أساسي: + +```python +>>> torch.manual_seed(6) # doctest: +IGNORE_RESULT +>>> prompt = """I baked 15 muffins. I ate 2 muffins and gave 5 muffins to a neighbor. My partner then bought 6 more muffins and ate 2. How many muffins do we now have?""" + +>>> sequences = pipe( +... prompt, +... max_new_tokens=10, +... do_sample=True, +... top_k=10, +... return_full_text = False, +... ) + +>>> for seq in sequences: +... print(f"Result: {seq['generated_text']}") +Result: +The total number of muffins now is 21 +``` +هذا خطأ، الإجابة الصحيحة هي 12. في هذه الحالة، قد يكون ذلك بسبب بساطة النص التوجيهي المُعطى، أو بسبب اختيار النموذج، ففي النهاية اخترنا الإصدار الأصغر من Falcon. إن الاستدلال صعب على النماذج من جميع الأحجام، ولكن من المرجح أن تؤدي النماذج الأكبر حجمًا أداءً أفضل. + +## أفضل الممارسات في توجيه LLM + +في هذا القسم من الدليل، قمنا بتجميع قائمة بأفضل الممارسات التي تميل إلى تحسين نتائج النص التوجيهي: + +* عند اختيار النموذج للعمل معه، من المرجح أن تؤدي أحدث النماذج والأكثر قدرة أداءً أفضل. +* ابدأ بنص توجيهي بسيط وقصير، وقم بالتكرار من هناك. +* ضع التعليمات في بداية النص التوجيهي، أو في النهاية تمامًا. عند العمل مع سياق كبير، تطبق النماذج تحسينات مختلفة لمنع تعقيد الانتباه من التصاعد التربيعي. قد يجعل هذا النموذج أكثر انتباهاً لبداية أو نهاية نص توجيهي أكثر من الوسط. +* قم بوضوح بفصل التعليمات عن النص الذي تنطبق عليه - المزيد حول هذا في القسم التالي. +* كن محددًا وواضحًا بشأن المهمة والنتيجة المرجوة - تنسيقها وطولها وأسلوبها ولغتها، وما إلى ذلك. +* تجنب الأوصاف والتعليمات الغامضة. +* يفضل استخدام التعليمات التي تقول "ماذا تفعل" بدلاً من تلك التي تقول "ماذا لا تفعل". +* "قم بتوجيه" الإخراج في الاتجاه الصحيح عن طريق كتابة الكلمة الأولى (أو حتى البدء في الجملة الأولى للنموذج). +* استخدم التقنيات المتقدمة مثل [التوجيه باستخدام القليل من الأمثلة](#few-shot-prompting) و [سلسلة الأفكار](#chain-of-thought) +* اختبر نصوصك التوجيهية مع نماذج مختلفة لتقييم متانتها. +* قم بإصدار نصوصك التوجيهية وتعقب أدائها. + +## تقنيات النصوص التوجيهية المتقدمة + +### التوجيه باستخدام القليل من الأمثلة + +إن النصوص التوجيهية الأساسية في الأقسام أعلاه هي أمثلة على النصوص التوجيهية "ذات الصفر مثال"، مما يعني أنه تم إعطاء النموذج تعليمات وسياق، ولكن بدون أمثلة مع حلول. تعمل نماذج اللغة الكبيرة عادةً بشكل جيد على مهام "ذات الصفر مثال" هذه لأنها تم ضبطها دقيقًا على مجموعات بيانات التع��يمات. ومع ذلك، فقد تجد أن مهمتك تحتوي على المزيد من التعقيدات أو الدقائق، وربما لديك بعض المتطلبات للإخراج الذي لا يلتقطه النموذج فقط من التعليمات. في هذه الحالة، يمكنك +تجربة تقنية تسمى التوجيه باستخدام القليل من الأمثلة. + +في التوجيه باستخدام القليل من الأمثلة، نقدم أمثلة في النص التوجيهي لإعطاء النموذج سياقًا إضافيًا لتحسين الأداء. +توجه الأمثلة النموذج لتوليد الإخراج باتباع الأنماط في الأمثلة. + +فيما يلي مثال: + +```python +>>> torch.manual_seed(0) # doctest: +IGNORE_RESULT +>>> prompt = """Text: The first human went into space and orbited the Earth on April 12, 1961. +... Date: 04/12/1961 +... Text: The first-ever televised presidential debate in the United States took place on September 28, 1960, between presidential candidates John F. Kennedy and Richard Nixon. +... Date:""" + +>>> sequences = pipe( +... prompt, +... max_new_tokens=8, +... do_sample=True, +... top_k=10, +... ) + +>>> for seq in sequences: +... print(f"Result: {seq['generated_text']}") +Result: Text: The first human went into space and orbited the Earth on April 12, 1961. +Date: 04/12/1961 +Text: The first-ever televised presidential debate in the United States took place on September 28, 1960, between presidential candidates John F. Kennedy and Richard Nixon. +Date: 09/28/1960 +``` + +في مقتطف الكود أعلاه، استخدمنا مثالًا واحدًا لتوضيح الإخراج المرغوب إلى النموذج، لذا يمكن تسميته +"التوجيه باستخدام مثال واحد". ومع ذلك، اعتمادًا على تعقيد المهمة، قد تحتاج إلى استخدام أكثر من مثال واحد. + +قيود تقنية التوجيه باستخدام القليل من الأمثلة: +- في حين أن نماذج اللغة الكبيرة يمكن أن تلتقط الأنماط في الأمثلة، إلا أن هذه التقنية لا تعمل بشكل جيد على مهام الاستدلال المعقدة +- يتطلب التوجيه باستخدام القليل من الأمثلة إنشاء نصوص توجيهية طويلة. قد تزيد النصوص التوجيهية التي تحتوي على عدد كبير من الرموز من الحساب والزمن. هناك أيضًا حد لطول النصوص التوجيهية. +- في بعض الأحيان، عندما يتم إعطاء النموذج عددًا من الأمثلة، يمكنه أن يتعلم أنماطًا لم تكن تقصد منه تعلمها، على سبيل المثال، أن مراجعة الفيلم الثالثة سلبية دائمًا. + +### سلسلة الأفكار + +سلسلة الأفكار (CoT) هي تقنية تدفع النموذج إلى إنتاج خطوات استدلال وسيطة وبالتالي تحسين +النتائج على مهام الاستدلال المعقدة. + +هناك طريقتان لتوجيه النموذج لإنتاج خطوات الاستدلال: +- التوجيه باستخدام القليل من الأمثلة عن طريق توضيح الأمثلة مع إجابات مفصلة للأسئلة، وإظهار النموذج كيفية حل مشكلة ما. +- عن طريق توجيه النموذج للاستدلال عن طريق إضافة عبارات مثل "دعنا نفكر خطوة بخطوة" أو "خذ نفسًا عميقًا وحل المشكلة خطوة بخطوة". + +إذا طبقنا تقنية CoT على مثال الكعك المُخبوز من قسم [الاستدلال](#reasoning) واستخدمنا نموذجًا أكبر، مثل (`tiiuae/falcon-180B-chat`) الذي يمكنك تجربته في [HuggingChat](https://huggingface.co/chat/)، +سنحصل على تحسن كبير في نتيجة الاستدلال: + +```text +Let's go through this step-by-step: +1. You start with 15 muffins. +2. You eat 2 muffins, leaving you with 13 muffins. +3. You give 5 muffins to your neighbor, leaving you with 8 muffins. +4. Your partner buys 6 more muffins, bringing the total number of muffins to 14. +5. Your partner eats 2 muffins, leaving you with 12 muffins. +Therefore, you now have 12 muffins. + + +دعونا نمر خلال هذا خطوة بخطوة: + +1. لديك 15 كعكة مُخبوزة. +2. أنت تأكل 2 كعكة، مما يترك لك 13 كعكة. +3. تعطي 5 كعكات لجارك، مما يترك لك 8 كعكات. +4. يشتري شريكك 6 كعكات أخرى، مما يجعل العدد الإجمالي للكعكات 14. +5. يأكل شريكك 2 كعكة، مما يترك لك 12 كعكة. +لذلك، لديك الآن 12 كعكة. +``` + +## المقارنة بين التحسين الدقيق والضبط الدقيق + +يمكنك تحقيق نتائج رائعة من خلال تحسين موجهاتك، ولكن قد تتساءل عما إذا كان ضبط نموذج ما بدقة سيعطي نتائج أفضل في حالتك. فيما يلي بعض السيناريوهات التي قد يكون فيها ضبط نموذج أصغر بدقة خيارًا مفضلًا: + +- مجالك مختلف تمامًا عما تم تدريب النماذج اللغوية الكبيرة عليه، ولم يعطِ التحسين المكثف للموجهات نتائج كافية. +- تحتاج إلى أن يعمل نموذجك بشكل جيد في لغة منخفضة الموارد. +- تحتاج إلى تدريب النموذج على بيانات حساسة تخضع لتنظيم صارم. +- يتعين عليك استخدام نموذج صغير بسبب التكلفة أو الخصوصية أو البنية التحتية أو قيود أخرى. + +في جميع الأمثلة أعلاه، ستحتاج إلى التأكد من أن لديك بالفعل أو يمكنك الحصول بسهولة على مجموعة بيانات خاصة بمجال معين كبيرة بما يكفي وبتكلفة معقولة لضبط نموذج ما بدقة. ستحتاج أيضًا إلى الوقت والموارد الكافية لضبط نموذج ما بدقة. + +إذا لم تكن الأمثلة أعلاه تنطبق على حالتك، فقد يثبت تحسين الموجهات أنه أكثر فائدة. \ No newline at end of file From 86f660d257657dbcb79dc69ba8a427eb1767dd53 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:51 +0300 Subject: [PATCH 097/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/question=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/question_answering.md | 421 +++++++++++++++++++++ 1 file changed, 421 insertions(+) create mode 100644 docs/source/ar/tasks/question_answering.md diff --git a/docs/source/ar/tasks/question_answering.md b/docs/source/ar/tasks/question_answering.md new file mode 100644 index 00000000000000..8e3d89a4c54105 --- /dev/null +++ b/docs/source/ar/tasks/question_answering.md @@ -0,0 +1,421 @@ +# الإجابة على الأسئلة + +[[open-in-colab]] + + + +تعيد مهام الإجابة على الأسئلة إجابةً على سؤال معين. إذا سبق لك أن سألت مساعدًا افتراضيًا مثل Alexa أو Siri أو Google عن حالة الطقس، فقد استخدمت بالفعل نموذج إجابة على الأسئلة. هناك نوعان شائعان من مهام الإجابة على الأسئلة: + +- الاستخراجية: استخراج الإجابة من السياق المحدد. +- التلخيصية: إنشاء إجابة من السياق الذي يجيب على السؤال بشكل صحيح. + +سيوضح هذا الدليل كيفية: + +1. ضبط نموذج [DistilBERT](https://huggingface.co/distilbert/distilbert-base-uncased) الدقيق على مجموعة بيانات [SQuAD](https://huggingface.co/datasets/squad) للإجابة على الأسئلة الاستخراجية. +2. استخدام نموذجك المضبوط دقيقًا للاستنتاج. + + + +لمشاهدة جميع البنيات ونقاط التفتيش المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/question-answering) + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات SQuAD + +ابدأ بتحميل جزء فرعي أصغر من مجموعة بيانات SQuAD من مكتبة Datasets 🤗. سيتيح لك هذا فرصة التجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from datasets import load_dataset + +>>> squad = load_dataset("squad", split="train[:5000]") +``` + +قسِّم مجموعة البيانات إلى مجموعتين فرعيتين للتدريب والاختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + +```py +>>> squad = squad.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: + +```py +>>> squad["train"][0] +{'answers': {'answer_start': [515], 'text': ['Saint Bernadette Soubirous']}, + 'context': 'Architecturally, the school has a Catholic character. Atop the Main Building\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.', + 'id': '5733be284776f41900661182', + 'question': 'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?', + 'title': 'University_of_Notre_Dame' +} +``` + +هناك العديد من الحقول المهمة هنا: + +- `answers`: موقع بداية الإجابة ورقمها. +- `context`: معلومات أساسية يجب على النموذج استخراج الإجابة منها. +- `question`: السؤال الذي يجب أن يجيب عليه النموذج. + +## معالجة مسبقة + + + +الخطوة التالية هي تحميل معالج نموذج DistilBERT لمعالجة حقلي `question` و`context`: +## معالجة مسبقة + + + +الخطوة التالية هي تحميل معالج نموذج DistilBERT لمعالجة حقلي `question` و`context`: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") +``` + +هناك العديد من خطوات المعالجة المسبقة الخاصة بمهام الإجابة على الأسئلة والتي يجب أن تكون على دراية بها: + +1. قد تحتوي بعض الأمثلة في مجموعة البيانات على سياق `context` طويل جدًا يتجاوز الطول الأقصى للمدخلات للنموذج. للتعامل مع التسلسلات الأطول، قم بتقطيع السياق `context` فقط عن طريق تعيين `truncation="only_second"`. +2. بعد ذلك، قم بتعيين مواقع البداية والنهاية للإجابة على السياق الأصلي عن طريق تعيين + `return_offset_mapping=True`. +3. باستخدام الخريطة، يمكنك الآن العثور على رموز البداية والنهاية للإجابة. استخدم طريقة [`~tokenizers.Encoding.sequence_ids`] لمعرفة أي جزء من الإزاحة يقابل `question` وأي جزء يقابل `context`. + +فيما يلي كيفية إنشاء دالة لتقطيع السياق `context` ورسم خريطة لمواقع البداية والنهاية للإجابة على السياق: + +```py +>>> def preprocess_function(examples): + questions = [q.strip() for q in examples["question"]] + inputs = tokenizer( + questions, + examples["context"], + max_length=384, + truncation="only_second", + return_offsets_mapping=True, + padding="max_length", + ) + + offset_mapping = inputs.pop("offset_mapping") + answers = examples["answers"] + start_positions = [] + end_positions = [] + + for i, offset in enumerate(offset_mapping): + answer = answers[i] + start_char = answer["answer_start"][0] + end_char = answer["answer_start"][0] + len(answer["text"][0]) + sequence_ids = inputs.sequence_ids(i) + + # Find the start and end of the context + idx = 0 + while sequence_ids[idx] != 1: + idx += 1 + context_start = idx + while sequence_ids[idx] == 1: + idx += 1 + context_end = idx - 1 + + # If the answer is not fully inside the context, label it (0, 0) + if offset[context_start][0] > end_char or offset[context_end][1] < start_char: + start_positions.append(0) + end_positions.append(0) + else: + # Otherwise it's the start and end token positions + idx = context_start + while idx <= context_end and offset[idx][0] <= start_char: + idx += 1 + start_positions.append(idx - 1) + + idx = context_end + while idx >= context_start and offset[idx][1] >= end_char: + idx -= 1 + end_positions.append(idx + 1) + + inputs["start_positions"] = start_positions + inputs["end_positions"] = end_positions + return inputs +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم وظيفة [`~datasets.Dataset.map`] في مكتبة 🤗 Datasets. يمكنك تسريع وظيفة `map` عن طريق تعيين `batched=True` لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد. احذف أي أعمدة لا تحتاجها: + +```py +>>> tokenized_squad = squad.map(preprocess_function, batched=True, remove_columns=squad["train"].column_names) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DefaultDataCollator`]. على عكس برامج الجمع الأخرى في مكتبة 🤗 Transformers، فإن [`DefaultDataCollator`] لا تطبق أي معالجة مسبقة إضافية مثل التقسيم. + + + + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator() +``` + + + + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator(return_tensors="tf") +``` + + + + + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج دقيق باستخدام [`Trainer`، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + +أنت الآن على استعداد لبدء تدريب نموذجك! قم بتحميل نموذج DistilBERT باستخدام [`AutoModelForQuestionAnswering`]: + +```py +>>> from transformers import AutoModelForQuestionAnswering, TrainingArguments, Trainer + +>>> model = AutoModelForQuestionAnswering.from_pretrained("distilbert/distilbert-base-uncased") +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط متبقية: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة المطلوبة الوحيدة هي `output_dir` التي تحدد مكان حفظ نموذجك. يمكنك دفع هذا النموذج إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجل الدخول إلى Hugging Face لتحميل نموذجك). +2. مرر فرط معلمات التدريب إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات والمعالج وبرنامج الجمع. +3. استدعاء [`~Trainer.train`] لضبط نموذجك دقيقًا. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_qa_model", +... eval_strategy="epoch", +... learning_rate=2e-5, +... per_device_train_batch_size=16, +... per_device_eval_batch_ +size=16, +... num_train_epochs=3, +... weight_decay=0.01, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=tokenized_squad["train"], +... eval_dataset=tokenized_squad["test"], +... tokenizer=tokenizer, +... data_collator=data_collator, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن معتادًا على ضبط نموذج باستخدام Keras، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-a-tensorflow-model-with-keras)! + + +لضبط نموذج في TensorFlow، ابدأ بإعداد دالة محسن، وجدول معدل التعلم، وبعض فرط معلمات التدريب: + +```py +>>> from transformers import create_optimizer + +>>> batch_size = 16 +>>> num_epochs = 2 +>>> total_train_steps = (len(tokenized_squad["train"]) // batch_size) * num_epochs +>>> optimizer, schedule = create_optimizer( +... init_lr=2e-5, +... num_warmup_steps=0, +... num_train_steps=total_train_steps, +... ) +``` + +بعد ذلك، يمكنك تحميل DistilBERT باستخدام [`TFAutoModelForQuestionAnswering`]: + +```py +>>> from transformers import TFAutoModelForQuestionAnswering + +>>> model = TFAutoModelForQuestionAnswering.from_pretrained("distilbert/distilbert-base-uncased") +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق `tf.data.Dataset` باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... tokenized_squad["train"], +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) + +>>> tf_validation_set = model.prepare_tf_dataset( +... tokenized_squad["test"], +... shuffle=False, +... batch_size=16, +... collate_fn=data_collator, +... ) +``` + +قم بتهيئة النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method): + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) +``` + +الشيء الأخير الذي يجب إعداده قبل بدء التدريب هو توفير طريقة لدفع نموذجك إلى Hub. يمكن القيام بذلك عن طريق تحديد المكان الذي ستدفع فيه نموذجك ومصنف الرموز في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> callback = PushToHubCallback( +... output_dir="my_awesome_qa_model", +... tokenizer=tokenizer, +... ) +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! استدعاء [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) مع مجموعات البيانات الخاصة بالتدريب والتحقق من الصحة، وعدد العصور، واستدعاء الإرجاع الخاص بك لضبط النموذج: + +```py +>>> model.fit(x=tf_train_set, validation_data=tf_validation_set, epochs=3, callbacks=[callback]) +``` +بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه! + + + + + +لمثال أكثر عمقًا حول كيفية ضبط نموذج للإجابة على الأسئلة، راجع الدفتر الملاحظات المقابل +[دفتر ملاحظات PyTorch](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb) +أو [دفتر ملاحظات TensorFlow](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering-tf.ipynb). + + + +## تقييم + +يتطلب التقييم للإجابة على الأسئلة قدرًا كبيرًا من ما بعد المعالجة. لتجنب استغراق الكثير من وقتك، يتخطى هذا الدليل خطوة التقييم. لا يزال [`Trainer`] يحسب خسارة التقييم أثناء التدريب حتى لا تكون في الظلام تمامًا بشأن أداء نموذجك. + +إذا كان لديك المزيد من الوقت وأنت مهتم بكيفية تقييم نموذجك للإجابة على الأسئلة، فراجع الفصل [الإجابة على الأسئلة](https://huggingface.co/course/chapter7/7?fw=pt#post-processing) من دورة 🤗 Hugging Face! + +## الاستنتاج + +رائع، الآن بعد أن قمت بضبط نموذج، يمكنك استخدامه للاستنتاج! + +فكر في سؤال وبعض السياقات التي تود أن يتنبأ بها النموذج: + +```py +>>> question = "How many programming languages does BLOOM support?" +>>> context = "BLOOM has 176 billion parameters and can generate text in 46 languages natural languages and 13 programming languages." +``` + +أبسط طريقة لتجربة نموذجك المضبوط للاستنتاج هي استخدامه في [`pipeline`]: قم بتنفيذ `pipeline` للإجابة على الأسئلة باستخدام نموذجك، ومرر نصك إليه: + +```py +>>> from transformers import pipeline + +>>> question_answerer = pipeline("question-answering", model="my_awesome_qa_model") +>>> question_answerer(question=question, context=context) +{'score': 0.2058267742395401، + 'start': 10، + 'end': 95، + 'answer': '176 billion parameters and can generate text in 46 languages natural languages and 13'} +``` + +يمكنك أيضًا محاكاة نتائج `pipeline` يدويًا إذا كنت ترغب في ذلك: + + + +قم بتوكينز النص وإرجاع tensers PyTorch: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("my_awesome_qa_model") +>>> inputs = tokenizer(question, context, return_tensors="pt") +``` + +مرر المدخلات الخاصة بك إلى النموذج وإرجاع "logits": + +```py +>>> import torch +>>> from transformers import AutoModelForQuestionAnswering + +>>> model = AutoModelForQuestionAnswering.from_pretrained("my_awesome_qa_model") +>>> with torch.no_grad(): +... outputs = model(**inputs) +``` + +احصل على أعلى احتمال من إخراج النموذج لمواضع البداية والنهاية: + +```py +>>> answer_start_index = outputs.start_logits.argmax() +>>> answer_end_index = outputs.end_logits.argmax() +``` + +فك تشفير الرموز المتنبأ بها للحصول على الإجابة: + +```py +>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1] +>>> tokenizer.decode(predict_answer_tokens) +'176 billion parameters and can generate text in 46 languages natural languages and 13' +``` + + +قم بتوكينز النص وإرجاع tensers TensorFlow: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("my_awesome_qa_model") +>>> inputs = tokenizer(question, text, return_tensors="tf") +``` + +مرر المدخلات الخاصة بك إلى النموذج وإرجاع "logits": + +```py +>>> from transformers import TFAutoModelForQuestionAnswering + +>>> model = TFAutoModelForQuestionAnswering.from_pretrained("my_awesome_qa_model") +>>> outputs = model(**inputs) +``` + +احصل على أعلى احتمال من إخراج النموذج لمواضع البداية والنهاية: + +```py +>>> answer_start_index = int(tf.math.argmax(outputs.start_logits, axis=-1)[0]) +>>> answer_end_index = int(tf.math.argmax(outputs.end_logits, axis=-1)[0]) +``` + +فك تشفير الرموز المتنبأ بها للحصول على الإجابة: + +```py +>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1] +>>> tokenizer.decode(predict_answer_tokens) +'176 billion parameters and can generate text in 46 languages natural languages and 13' +``` + + \ No newline at end of file From d198a273b7592955dae72d99a99e4d50d4a409dd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:53 +0300 Subject: [PATCH 098/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/semantic=5Fsegmentation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/semantic_segmentation.md | 727 ++++++++++++++++++ 1 file changed, 727 insertions(+) create mode 100644 docs/source/ar/tasks/semantic_segmentation.md diff --git a/docs/source/ar/tasks/semantic_segmentation.md b/docs/source/ar/tasks/semantic_segmentation.md new file mode 100644 index 00000000000000..501c44e1bb4f8d --- /dev/null +++ b/docs/source/ar/tasks/semantic_segmentation.md @@ -0,0 +1,727 @@ +# تجزئة الصور + +[[open-in-colab]] + + + +تفصل نماذج تجزئة الصور المناطق التي تتوافق مع مناطق مختلفة ذات أهمية في صورة. تعمل هذه النماذج عن طريق تعيين تسمية لكل بكسل. هناك عدة أنواع من التجزئة: التجزئة الدلالية، وتجزئة المثيل، وتجزئة المشهد الكلي. + +في هذا الدليل، سوف: + +1. [إلقاء نظرة على الأنواع المختلفة من التجزئة](#أنواع-التجزئة). +2. [لديك مثال شامل لضبط دقيق لنموذج التجزئة الدلالية](#ضبط-نموذج-بشكل-دقيق-للتجزئة). + +قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية: + +```py +# قم بإلغاء التعليق لتثبيت المكتبات الضرورية +!pip install -q datasets transformers evaluate accelerate +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## أنواع التجزئة + +تعين التجزئة الدلالية تسمية أو فئة لكل بكسل في الصورة. دعونا نلقي نظرة على إخراج نموذج التجزئة الدلالية. سوف يعين نفس الفئة لكل مثيل من كائن يصادفه في صورة، على سبيل المثال، سيتم تصنيف جميع القطط على أنها "قطة" بدلاً من "cat-1"، "cat-2". +يمكننا استخدام خط أنابيب تجزئة الصور في المحولات للتنبؤ بسرعة بنموذج التجزئة الدلالية. دعونا نلقي نظرة على صورة المثال. + +```python +from transformers import pipeline +from PIL import Image +import requests + +url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/segmentation_input.jpg" +image = Image.open(requests.get(url, stream=True).raw) +image +``` + +
+ Segmentation Input +
+ +سنستخدم [nvidia/segformer-b1-finetuned-cityscapes-1024-1024](https://huggingface.co/nvidia/segformer-b1-finetuned-cityscapes-1024-1024). + +```python +semantic_segmentation = pipeline("image-segmentation", "nvidia/segformer-b1-finetuned-cityscapes-1024-1024") +results = semantic_segmentation(image) +results +``` +```python +semantic_segmentation = pipeline("image-segmentation", "nvidia/segformer-b1-finetuned-cityscapes-1024-1024") +results = semantic_segmentation(image) +results +``` + +يشمل إخراج خط أنابيب التجزئة قناعًا لكل فئة متوقعة. +```bash +[{'score': None, + 'label': 'road', + 'mask': }, + {'score': None, + 'label': 'sidewalk', + 'mask': }, + {'score': None, + 'label': 'building', + 'mask': }, + {'score': None, + 'label': 'wall', + 'mask': }, + {'score': None, + 'label': 'pole', + 'mask': }, + {'score': None, + 'label': 'traffic sign', + 'mask': }, + {'score': None, + 'label': 'vegetation', + 'mask': }, + {'score': None, + 'label': 'terrain', + 'mask': }, + {'score': None, + 'label': 'sky', + 'mask': }, + {'score': None, + 'label': 'car', + 'mask': } +] +``` + +عند النظر إلى القناع لفئة السيارات، يمكننا أن نرى أن كل سيارة مصنفة بنفس القناع. + +```python +results[-1]["mask"] +``` +
+ Semantic Segmentation Output +
+ +في تجزئة المثيل، الهدف ليس تصنيف كل بكسل، ولكن التنبؤ بقناع لكل **مثيل كائن** في صورة معينة. إنه يعمل بشكل مشابه جدًا للكشف عن الأشياء، حيث يوجد مربع محدد لكل مثيل، وهناك قناع تجزئة بدلاً من ذلك. سنستخدم [facebook/mask2former-swin-large-cityscapes-instance](https://huggingface.co/facebook/mask2former-swin-large-cityscapes-instance) لهذا. + +```python +instance_segmentation = pipeline("image-segmentation", "facebook/mask2former-swin-large-cityscapes-instance") +results = instance_segmentation(image) +results +``` + +كما ترون أدناه، هناك العديد من السيارات المصنفة، ولا توجد تصنيفات للبكسلات بخلاف البكسلات التي تنتمي إلى سيارات وأشخاص. + +```bash +[{'score': 0.999944, + 'label': 'car', + 'mask': }, + {'score': 0.999945, + 'label': 'car', + 'mask': }, + {'score': 0.999652, + 'label': 'car', + 'mask': }, + {'score': 0.903529, + 'label': 'person', + 'mask': } +] +``` +التحقق من إحدى أقنعة السيارات أدناه. + +```python +results[2]["mask"] +``` +
+ Semantic Segmentation Output +
+ +تدمج التجزئة المشهدية التجزئة الدلالية وتجزئة المثيل، حيث يتم تصنيف كل بكسل إلى فئة ومثيل من تلك الفئة، وهناك أقنعة متعددة لكل مثيل من فئة. يمكننا استخدام [facebook/mask2former-swin-large-cityscapes-panoptic](https://huggingface.co/facebook/mask2former-swin-large-cityscapes-panoptic) لهذا. + +```python +panoptic_segmentation = pipeline("image-segmentation", "facebook/mask2former-swin-large-cityscapes-panoptic") +results = panoptic_segmentation(image) +results +``` +كما ترون أدناه، لدينا المزيد من الفئات. سنقوم لاحقًا بتوضيح أن كل بكسل مصنف إلى واحدة من الفئات. +```bash +[{'score': 0.999981, + 'label': 'car', + 'mask': }, + {'score': 0.999958, + 'label': 'car', + 'mask': }, + {'score': 0.99997, + 'label': 'vegetation', + 'mask': }, + {'score': 0.999575, + 'label': 'pole', + +... +``` + +دعونا نقارن جنبا إلى جنب لجميع أنواع التجزئة. + +
+ Segmentation Maps Compared +
+ +بعد رؤية جميع أنواع التجزئة، دعونا نتعمق في ضبط نموذج التجزئة الدلالية. + +تشمل التطبيقات الواقعية الشائعة للتجزئة الدلالية تدريب السيارات ذاتية القيادة على التعرف على المشاة ومعلومات المرور المهمة، وتحديد الخلايا والتشوهات في الصور الطبية، ومراقبة التغيرات البيئية من صور الأقمار الصناعية. + +## ضبط نموذج بشكل دقيق لتجزئة + +سنقوم الآن بما يلي: + +1. ضبط دقيق [SegFormer](https://huggingface.co/docs/transformers/main/en/model_doc/segformer#segformer) على مجموعة البيانات [SceneParse150](https://huggingface.co/datasets/scene_parse_150). +2. استخدام نموذجك المضبوط بدقة للاستنتاج. + + + +لمعرفة جميع التصميمات ونقاط التفتيش المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/image-segmentation) + + + + +### تحميل مجموعة بيانات SceneParse150 + +ابدأ بتحميل جزء فرعي أصغر من مجموعة بيانات SceneParse150 من مكتبة Datasets. سيعطيك هذا فرصة لتجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from datasets import load_dataset + +>>> ds = load_dataset("scene_parse_150", split="train[:50]") +``` + +قم بتقسيم مجموعة البيانات "train" إلى مجموعة تدريب واختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + +```py +>>> ds = ds.train_test_split(test_size=0.2) +>>> train_ds = ds["train"] +>>> test_ds = ds["test"] +``` + +ثم الق نظرة على مثال: + +```py +>>> train_ds[0] +{'image': , + 'annotation': , + 'scene_category': 368} + +# عرض الصورة +>>> train_ds[0]["image"] +``` + +- `image`: صورة PIL للمشهد. +- `annotation`: صورة PIL لخريطة التجزئة، والتي تعد أيضًا هدف النموذج. +- `scene_category`: معرف فئة يصف فئة المشهد مثل "المطبخ" أو "المكتب". في هذا الدليل، ستحتاج فقط إلى `image` و`annotation`، وكلاهما عبارة عن صور PIL. + +ستحتاج أيضًا إلى إنشاء قاموس يقوم بتعيين معرف التسمية إلى فئة التسمية والتي ستكون مفيدة عند إعداد النموذج لاحقًا. قم بتنزيل التعيينات من Hub وإنشاء القواميس `id2label` و`label2id`: + +```py +>>> import json +>>> from pathlib import Path +>>> from huggingface_hub import hf_hub_download + +>>> repo_id = "huggingface/label-files" +>>> filename = "ade20k-id2label.json" +>>> id2label = json.loads(Path(hf_hub_download(repo_id, filename, repo_type="dataset")).read_text()) +>>> id2label = {int(k): v for k, v in id2label.items()} +>>> label2id = {v: k for k, v in id2label.items()} +>>> num_labels = len(id2label) +``` + +#### مجموعة بيانات مخصصة +#### مجموعة بيانات مخصصة + +يمكنك أيضًا إنشاء واستخدام مجموعة البيانات الخاصة بك إذا كنت تفضل التدريب باستخدام النص البرمجي [run_semantic_segmentation.py](https://github.com/huggingface/transformers/blob/main/examples/pytorch/semantic-segmentation/run_semantic_segmentation.py) بدلاً من مثيل دفتر الملاحظات. يتطلب النص البرمجي ما يلي: + +1. [`~datasets.DatasetDict`] مع عمودين [`~datasets.Image`]، "image" و"label" + + ```py + from datasets import Dataset, DatasetDict, Image + + image_paths_train = ["path/to/image_1.jpg/jpg", "path/to/image_2.jpg/jpg", ..., "path/to/image_n.jpg/jpg"] + label_paths_train = ["path/to/annotation_1.png", "path/to/annotation_2.png", ..., "path/to/annotation_n.png"] + + image_paths_validation = [...] + label_paths_validation = [...] + + def create_dataset(image_paths, label_paths): + dataset = Dataset.from_dict({"image": sorted(image_paths), + "label": sorted(label_paths)}) + dataset = dataset.cast_column("image", Image()) + dataset = dataset.cast_column("label", Image()) + return dataset + + # الخطوة 1: إنشاء كائنات Dataset + train_dataset = create_dataset(image_paths_train, label_paths_train) + validation_dataset = create_dataset(image_paths_validation, label_paths_validation) + + # الخطوة 2: إنشاء DatasetDict + dataset = DatasetDict({ + "train": train_dataset, + "validation": validation_dataset, + } + ) + + # الخطوة 3: الدفع إلى Hub (يفترض أنك قمت بتشغيل الأمر huggingface-cli login في terminal/notebook) + dataset.push_to_hub("your-name/dataset-repo") + + # بشكل اختياري، يمكنك الدفع إلى مستودع خاص على Hub + # dataset.push_to_hub("name of repo on the hub", private=True) + ``` + +2. قاموس id2label الذي يقوم بتعيين أعداد صحيحة للفئة إلى أسماء فئاتها + + ```py + import json + # مثال بسيط + id2label = {0: 'cat', 1: 'dog'} + with open('id2label.json', 'w') as fp: + json.dump(id2label, fp) + ``` + +كمثال، الق نظرة على [مجموعة البيانات هذه](https://huggingface.co/datasets/nielsr/ade20k-demo) التي تم إنشاؤها بالخطوات الموضحة أعلاه. + +### معالجة مسبقة + +الخطوة التالية هي تحميل معالج صور SegFormer لإعداد الصور والتعليقات التوضيحية للنموذج. تستخدم بعض مجموعات البيانات، مثل هذه، الفهرس الصفري كفئة خلفية. ومع ذلك، فإن فئة الخلفية ليست مدرجة بالفعل في 150 فئة، لذلك ستحتاج إلى تعيين `do_reduce_labels=True` لطرح واحد من جميع التسميات. يتم استبدال الفهرس الصفري بـ `255` حتى يتم تجاهله بواسطة دالة الخسارة SegFormer: + +```py +>>> from transformers import AutoImageProcessor + +>>> checkpoint = "nvidia/mit-b0" +>>> image_processor = AutoImageProcessor.from_pretrained(checkpoint, do_reduce_labels=True) +``` + + + + +من الشائع تطبيق بعض عمليات زيادة البيانات على مجموعة بيانات الصور لجعل النموذج أكثر قوة ضد الإفراط في التخصيص. في هذا الدليل، ستستخدم دالة [`ColorJitter`](https://pytorch.org/vision/stable/generated/torchvision.transforms.ColorJitter.html) من [torchvision](https://pytorch.org/vision/stable/index.html) لتغيير الخصائص اللونية للصورة بشكل عشوائي، ولكن يمكنك أيضًا استخدام أي مكتبة صور تفضلها. + +```py +>>> from torchvision.transforms import ColorJitter + +>>> jitter = ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.1) +``` + +الآن قم بإنشاء دالتين لمعالجة مسبقة +بالتأكيد، سأقوم بترجمة النص مع اتباع التعليمات التي قدمتها. + +```py +>>> training_args = TrainingArguments( +... output_dir="segformer-b0-scene-parse-150", +... learning_rate=6e-5, +... num_train_epochs=50, +... per_device_train_batch_size=2, +... per_device_eval_batch_size=2, +... save_total_limit=3, +... eval_strategy="steps", +... save_strategy="steps", +... save_steps=20, +... eval_steps=20, +... logging_steps=1, +... eval_accumulation_steps=5, +... remove_unused_columns=False, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=train_ds, +... eval_dataset=test_ds, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + +بعد الانتهاء من التدريب، شارك نموذجك على Hub باستخدام طريقة [~transformers.Trainer.push_to_hub] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + + + + +إذا لم تكن معتادًا على ضبط نموذج باستخدام Keras، فراجع [البرنامج التعليمي الأساسي](./training#train-a-tensorflow-model-with-keras) أولاً! + + + +لضبط نموذج في TensorFlow، اتبع الخطوات التالية: + +1. حدد فرط المعلمات التدريبية، وقم بإعداد محسن وجدول معدل التعلم. +2. قم بتنفيذ مثيل لنموذج مسبق التدريب. +3. قم بتحويل مجموعة بيانات 🤗 إلى `tf.data.Dataset`. +4. قم بتجميع نموذجك. +5. أضف استدعاءات رجوع لحساب المقاييس وتحميل نموذجك إلى 🤗 Hub +6. استخدم طريقة `fit()` لتشغيل التدريب. + +ابدأ بتحديد فرط المعلمات والمحسن وجدول معدل التعلم: + +```py +>>> from transformers import create_optimizer + +>>> batch_size = 2 +>>> num_epochs = 50 +>>> num_train_steps = len(train_ds) * num_epochs +>>> learning_rate = 6e-5 +>>> weight_decay_rate = 0.01 + +>>> optimizer, lr_schedule = create_optimizer( +... init_lr=learning_rate, +... num_train_steps=num_train_steps, +... weight_decay_rate=weight_decay_rate, +... num_warmup_steps=0, +... ) +``` + +بعد ذلك، قم بتحميل SegFormer مع [TFAutoModelForSemanticSegmentation] جنبًا إلى جنب مع تعيينات التسميات، وقم بتجميعها مع المحسن. لاحظ أن جميع نماذج Transformers تحتوي على دالة خسارة ذات صلة بالمهمة بشكل افتراضي، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> from transformers import TFAutoModelForSemanticSegmentation + +>>> model = TFAutoModelForSemanticSegmentation.from_pretrained( +... checkpoint, +... id2label=id2label, +... label2id=label2id, +... ) +>>> model.compile(optimizer=optimizer) # لا توجد حجة الخسارة! +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق `tf.data.Dataset` باستخدام [~datasets.Dataset.to_tf_dataset] و [DefaultDataCollator]: + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator(return_tensors="tf") + +>>> tf_train_dataset = train_ds.to_tf_dataset( +... columns=["pixel_values", "label"], +... shuffle=True, +... batch_size=batch_size, +... collate_fn=data_collator, +... ) + +>>> tf_eval_dataset = test_ds.to_tf_dataset( +... columns=["pixel_values", "label"], +... shuffle=True, +... batch_size=batch_size, +... collate_fn=data_collator, +... ) +``` + +لحساب الدقة من التوقعات وتحميل نموذجك إلى 🤗 Hub، استخدم [Keras callbacks](../main_classes/keras_callbacks). +مرر دالة `compute_metrics` إلى [KerasMetricCallback]، +واستخدم [PushToHubCallback] لتحميل النموذج: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback, PushToHubCallback + +>>> metric_callback = KerasMetricCallback( +... metric_fn=compute_metrics, eval_dataset=tf_eval_dataset, batch_size=batch_size, label_cols=["labels"] +... ) + +>>> push_to_hub_callback = PushToHubCallback(output_dir="scene_segmentation", tokenizer=image_processor) + +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لتدريب نموذجك! اتصل بـ `fit()` باستخدام مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، +واستدعاءات الرجوع الخاصة بك لضبط النموذج: +أخيرًا، أنت مستعد لتدريب نموذجك! اتصل بـ `fit()` باستخدام مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، +واستدعاءات الرجوع الخاصة بك لضبط النموذج: + +```py +>>> model.fit( +... tf_train_dataset, +... validation_data=tf_eval_dataset, +... callbacks=callbacks, +... epochs=num_epochs, +... ) +``` + +تهانينا! لقد ضبطت نموذجك وشاركته على 🤗 Hub. يمكنك الآن استخدامه للاستنتاج! + + + +### الاستنتاج + +رائع، الآن بعد أن ضبطت نموذجًا، يمكنك استخدامه للاستنتاج! + +أعد تحميل مجموعة البيانات وتحميل صورة للاستدلال. + +```py +>>> from datasets import load_dataset + +>>> ds = load_dataset("scene_parse_150", split="train[:50]") +>>> ds = ds.train_test_split(test_size=0.2) +>>> test_ds = ds["test"] +>>> image = ds["test"][0]["image"] +>>> image +``` + +
+ صورة لغرفة نوم +
+ + + + +سنرى الآن كيفية الاستدلال بدون خط أنابيب. قم بمعالجة الصورة بمعالج الصور وقم بوضع `pixel_values` على GPU: + +```py +>>> device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # استخدم GPU إذا كان متاحًا، وإلا استخدم CPU +>>> encoding = image_processor(image, return_tensors="pt") +>>> pixel_values = encoding.pixel_values.to(device) +``` + +مرر المدخلات إلى النموذج وأعد الخرج `logits`: + +```py +>>> outputs = model(pixel_values=pixel_values) +>>> logits = outputs.logits.cpu() +``` + +بعد ذلك، قم بإعادة تحجيم logits إلى حجم الصورة الأصلي: + +```py +>>> upsampled_logits = nn.functional.interpolate( +... logits, +... size=image.size[::-1], +... mode="bilinear", +... align_corners=False, +... ) + +>>> pred_seg = upsampled_logits.argmax(dim=1)[0] +``` + + + + + + +قم بتحميل معالج الصور لمعالجة الصورة وإعادة الإدخال كتناسق TensorFlow: + +```py +>>> from transformers import AutoImageProcessor + +>>> image_processor = AutoImageProcessor.from_pretrained("MariaK/scene_segmentation") +>>> inputs = image_processor(image, return_tensors="tf") +``` + +مرر المدخلات إلى النموذج وأعد الخرج `logits`: + +```py +>>> from transformers import TFAutoModelForSemanticSegmentation + +>>> model = TFAutoModelForSemanticSegmentation.from_pretrained("MariaK/scene_segmentation") +>>> logits = model(**inputs).logits +``` + +بعد ذلك، قم بإعادة تحجيم logits إلى حجم الصورة الأصلي وقم بتطبيق argmax على البعد class: +```py +>>> logits = tf.transpose(logits, [0, 2, 3, 1]) + +>>> upsampled_logits = tf.image.resize( +... logits, +... # نعكس شكل `image` لأن `image.size` يعيد العرض والارتفاع. +... image.size[::-1], +... ) + +>>> pred_seg = tf.math.argmax(upsampled_logits, axis=-1)[0] +``` + + + + +لعرض النتائج، قم بتحميل لوحة الألوان الخاصة بمجموعة البيانات [dataset color palette](https://github.com/tensorflow/models/blob/3f1ca33afe3c1631b733ea7e40c294273b9e406d/research/deeplab/utils/get_dataset_colormap.py#L51) كـ `ade_palette()` التي تقوم بتعيين كل فئة إلى قيم RGB الخاصة بها. + +```py +def ade_palette(): + return np.asarray([ + [0, 0, 0], + [120, 120, 120], + [180, 120, 120], + [6, 230, 230], + [80, 50, 50], + [4, 200, 3], + [120, 120, 80], + [140, 140, 140], + [204, 5, 255], + [230, 230, 230], + [4, 250, 7], + [224, 5, 255], + [235, 255, 7], + [150, 5, 61], + [120, 120, 70], + [8, 255, 51], + [255, 6, 82], + [143, 255, 140], + [204, 255, 4], + [255, 51, 7], + [204, 70, 3], + [0, 102, 200], + [61, 230, 250], + [255, 6, 51], + [11, 102, 255], + [255, 7, 71], + [255, 9, 224], + [9, 7, 230], + [220, 220, 220], + [255, 9, 92], + [112, 9, 255], + [8, 255, 214], + [7, 255, 224], + [255, 184, 6], + [10, 255, 71], + [255, 41, 10], + [7, 255, 255], + [224, 255, 8], + [102, 8, 255], + [255, 61, 6], + [255, 194, 7], + [255, 122, 8], + [0, 255, 20], + [255, 8, 41], + [255, 5, 153], + [6, 51, 255], + [235, 12, 255], + [160, 150, 20], + [0, 163, 255], + [140, 140, 140], + [250, 10, 15], + [20, 255, 0], + [31, 255, 0], + [255, 31, 0], + [255, 224, 0], + [153, 255, 0], + [0, 0, 255], + [255, 71, 0], + [0, 235, 255], + [0, 173, 255], + [31, 0, 255], + [11, 200, 200], + [255, 82, 0], + [0, 255, 245], + [0, 61, 255], + [0, 255, 112], + [0, 255, 133], + [255, 0, 0], + [255, 163, 0], + [255, 102, 0], + [194, 255, 0], + [0, 143, 255], + [51, 255, 0], + [0, 82, 255], + [0, 255, 41], + [0, 255, 173], + [10, 0, 255], + [173, 255, 0], + [0, 255, 153], + [255, 92, 0], + [255, 0, 255], + [255, 0, 245], + [255, 0, 102], + [255, 173, 0], + [255, 0, 20], + [255, 184, 184], + [0, 31, 255], + [0, 255, 61], + [0, 71, 255], + [255, 0, 204], + [0, 255, 194], + [0, 255, 82], + [0, 10, 255], + [0, 112, 255], + [51, 0, 255], + [0, 194, 255], + [0, 122, 255], + [0, 255, 163], + [255, 153, 0], + [0, 255, 10], + [255, 112, 0], + [143, 255, 0], + [82, 0, 255], + [163, 255, 0], + [255, 235, 0], + [8, 184, 170], + [133, 0, 255], + [0, 255, 92], + [184, 0, 255], + [255, 0, 31], + [0, 184, 255], + [0, 214, 255], + [255, 0, 112], + [92, 255, 0], + [0, 224, 255], + [112, 224, 255], + [70, 184, 160], + [163, 0, 255], + [153, 0, 255], + [71, 255, 0], + [255, 0, 163], + [255, 204, 0], + [255, 0, 143], + [0, 255, 235], + [133, 255, 0], + [255, 0, 235], + [245, 0, 255], + [255, 0, 122], + [255, 245, 0], + [10, 190, 212], + [214, 255, 0], + [0, 204, 255], + [20, 0, 255], + [255, 255, 0], + [0, 153, 255], + [0, 41, 255], + [0, 255, 204], + [41, 0, 255], + [41, 255, 0], + [173, 0, 255], + [0, 245, 255], + [71, 0, 255], + [122, 0, 255], + [0, 255, 184], + [0, 92, 255], + [184, 255, 0], + [0, 133, 255], + [255, 214, 0], + [25, 194, 194], + [102, 255, 0], + [92, 0, 255], + ]) +``` + +Then you can combine and plot your image and the predicted segmentation map: + +```py +>>> import matplotlib.pyplot as plt +>>> import numpy as np + +>>> color_seg = np.zeros((pred_seg.shape[0], pred_seg.shape[1], 3), dtype=np.uint8) +>>> palette = np.array(ade_palette()) +>>> for label, color in enumerate(palette): +... color_seg[pred_seg == label, :] = color +>>> color_seg = color_seg[..., ::-1] # convert to BGR + +>>> img = np.array(image) * 0.5 + color_seg * 0.5 # plot the image with the segmentation map +>>> img = img.astype(np.uint8) + +>>> plt.figure(figsize=(15, 10)) +>>> plt.imshow(img) +>>> plt.show() +``` + +
+ Image of bedroom overlaid with segmentation map +
\ No newline at end of file From 8bea53d7596b4c684f7297d2c1d1a7a394991d0a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:55 +0300 Subject: [PATCH 099/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/sequence=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/sequence_classification.md | 374 ++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 docs/source/ar/tasks/sequence_classification.md diff --git a/docs/source/ar/tasks/sequence_classification.md b/docs/source/ar/tasks/sequence_classification.md new file mode 100644 index 00000000000000..25f66d5a8a1b81 --- /dev/null +++ b/docs/source/ar/tasks/sequence_classification.md @@ -0,0 +1,374 @@ +# تصنيف النص + +[[open-in-colab]] + + + +تصنيف النص هي مهمة شائعة في معالجة اللغات الطبيعية (NLP) تقوم بتعيين تسمية أو فئة للنص. وتستخدم بعض أكبر الشركات تصنيف النص في الإنتاج لمجموعة واسعة من التطبيقات العملية. أحد أكثر أشكال تصنيف النص شيوعًا هو تحليل المشاعر، والذي يعين تسمية مثل 🙂 إيجابية، 🙁 سلبية، أو 😐 محايدة لتسلسل نصي. + +سيوضح هذا الدليل لك كيفية: + +1. ضبط دقة نموذج [DistilBERT](https://huggingface.co/distilbert/distilbert-base-uncased) باستخدام مجموعة بيانات [IMDb](https://huggingface.co/datasets/imdb) لتحديد ما إذا كان تقييم الفيلم إيجابيًا أم سلبيًا. +2. استخدام نموذجك المضبوط دقة للتنبؤ. + + + +لمعرفة جميع البنى ونقاط المراقبة المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/text-classification). + + + +قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate accelerate +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات IMDb + +ابدأ بتحميل مجموعة بيانات IMDb من مكتبة 🤗 Datasets: + +```py +>>> from datasets import load_dataset + +>>> imdb = load_dataset("imdb") +``` + +ثم الق نظرة على مثال: + +```py +>>> imdb["test"][0] +{ + "label": 0, + "text": "I love sci-fi and am willing to put up with a lot. Sci-fi movies/TV are usually underfunded, under-appreciated and misunderstood. I tried to like this, I really did, but it is to good TV sci-fi as Babylon 5 is to Star Trek (the original). Silly prosthetics, cheap cardboard sets, stilted dialogues, CG that doesn't match the background, and painfully one-dimensional characters cannot be overcome with a 'sci-fi' setting. (I'm sure there are those of you out there who think Babylon 5 is good sci-fi TV. It's not. It's clichéd and uninspiring.) While US viewers might like emotion and character development, sci-fi is a genre that does not take itself seriously (cf. Star Trek). It may treat important issues, yet not as a serious philosophy. It's really difficult to care about the characters here as they are not simply foolish, just missing a spark of life. Their actions and reactions are wooden and predictable, often painful to watch. The makers of Earth KNOW it's rubbish as they have to always say \"Gene Roddenberry's Earth...\" otherwise people would not continue watching. Roddenberry's ashes must be turning in their orbit as this dull, cheap, poorly edited (watching it without advert breaks really brings this home) trudging Trabant of a show lumbers into space. Spoiler. So, kill off a main character. And then bring him back as another actor. Jeeez! Dallas all over again.", +} +``` + +هناك حقلاًن في هذه المجموعة من البيانات: + +- `text`: نص مراجعة الفيلم. +- `label`: قيمة إما `0` لمراجعة سلبية أو `1` لمراجعة إيجابية. + +## معالجة مسبقة + +الخطوة التالية هي تحميل معالج نصوص DistilBERT لمعالجة حقل `النص`: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") +``` + +قم بإنشاء دالة معالجة مسبقة لترميز `النص` وتقليص التسلسلات بحيث لا تكون أطول من طول الإدخال الأقصى لـ DistilBERT: + +```py +>>> def preprocess_function(examples): +... return tokenizer(examples["text"], truncation=True) +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم وظيفة [`~datasets.Dataset.map`] من مكتبة 🤗 Datasets. يمكنك تسريع `map` عن طريق تعيين `batched=True` لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد: + +```py +tokenized_imdb = imdb.map(preprocess_function, batched=True) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DataCollatorWithPadding`]. من الأكثر كفاءة *توسيد* الديناميكي للجمل إلى أطول طول في دفعة أثناء التجميع، بدلاً من توسيد مجموعة البيانات بأكملها إلى الطول الأقصى. + + + +```py +>>> from transformers import DataCollatorWithPadding + +>>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer) +``` + + +```py +>>> from transformers import DataCollatorWithPadding + +>>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors="tf") +``` + + + +## تقييم + +من المفيد غالبًا تضمين مقياس أثناء التدريب لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index). بالنسبة لهذه المهمة، قم بتحميل مقياس [الدقة](https://huggingface.co/spaces/evaluate-metric/accuracy) (راجع جولة 🤗 Evaluate [السريعة](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> accuracy = evaluate.load("accuracy") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتسمياتك إلى [`~evaluate.EvaluationModule.compute`] لحساب الدقة: + +```py +>>> import numpy as np + + +>>> def compute_metrics(eval_pred): +... predictions, labels = eval_pred +... predictions = np.argmax(predictions, axis=1) +... return accuracy.compute(predictions=predictions, references=labels) +``` + +دالتك `compute_metrics` جاهزة الآن، وستعود إليها عندما تقوم بإعداد تدريبك. + +## تدريب + +قبل البدء في تدريب نموذجك، قم بإنشاء خريطة من معرفات التسميات المتوقعة إلى تسمياتها باستخدام `id2label` و`label2id`: + +```py +>>> id2label = {0: "NEGATIVE", 1: "POSITIVE"} +>>> label2id = {"NEGATIVE": 0, "POSITIVE": 1} +``` + + + + + +إذا لم تكن على دراية بضبط دقة نموذج باستخدام [`Trainer`], فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل DistilBERT باستخدام [`AutoModelForSequenceClassification`] إلى جانب عدد التسميات المتوقعة، وخرائط التسميات: + +```py +>>> from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer + +>>> model = AutoModelForSequenceClassification.from_pretrained( +... "distilbert/distilbert-base-uncased", num_labels=2, id2label=id2label, label2id=label2id +... ) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط متبقية: + +1. حدد فرط معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة المطلوبة الوحيدة هي `output_dir` التي تحدد مكان حفظ نموذجك. ستقوم بالدفع إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقيم [`Trainer`] الدقة ويحفظ نقطة المراقبة التدريبية. +2. مرر فرط معلمات التدريب إلى [`Trainer`] إلى جانب النموذج ومجموعة البيانات والمعالج النصي ومجمع البيانات و`compute_metrics` الدالة. +3. استدعاء [`~Trainer.train`] لضبط دقة نموذجك. +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_model", +... learning_rate=2e-5, +... per_device_train_batch_size=16, +... per_device_eval_batch_Multiplier=16, +... num_train_epochs=2, +... weight_decay=0.01, +... eval_strategy="epoch", +... save_strategy="epoch", +... load_best_model_at_end=True, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=tokenized_imdb["train"], +... eval_dataset=tokenized_imdb["test"], +... tokenizer=tokenizer, +... data_collator=data_collator, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + + + +يطبق [`Trainer`] التوسيد الديناميكي بشكل افتراضي عند تمرير `tokenizer` إليه. في هذه الحالة، لا تحتاج إلى تحديد مجمع بيانات بشكل صريح. + + + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن معتادًا على ضبط نموذج باستخدام Keras، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-a-tensorflow-model-with-keras)! + + +لضبط نموذج في TensorFlow، ابدأ بإعداد دالة محسن، وجدول معدل التعلم، وبعض فرط معلمات التدريب: + +```py +>>> from transformers import create_optimizer +>>> import tensorflow as tf + +>>> batch_size = 16 +>>> num_epochs = 5 +>>> batches_per_epoch = len(tokenized_imdb["train"]) // batch_size +>>> total_train_steps = int(batches_per_epoch * num_epochs) +>>> optimizer, schedule = create_optimizer(init_lr=2e-5, num_warmup_steps=0, num_train_steps=total_train_steps) +``` + +بعد ذلك، يمكنك تحميل DistilBERT باستخدام [`TFAutoModelForSequenceClassification`] جنبًا إلى جنب مع عدد التصنيفات المتوقعة، وخرائط التسميات: + +```py +>>> from transformers import TFAutoModelForSequenceClassification + +>>> model = TFAutoModelForSequenceClassification.from_pretrained( +... "distilbert/distilbert-base-uncased"، num_labels=2، id2label=id2label، label2id=label2id +... ) +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق `tf.data.Dataset` باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... tokenized_imdb["train"], +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) + +>>> tf_validation_set = model.prepare_tf_dataset( +... tokenized_imdb["test"], +... shuffle=False, +... batch_size=16, +... collate_fn=data_collator, +... ) +``` + +قم بتهيئة النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers لديها دالة خسارة ذات صلة بالمهمة الافتراضية، لذلك لا تحتاج إلى تحديدها ما لم تكن تريد ذلك: + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) # لا توجد وسيطة خسارة! +``` + +آخر شيئين يجب إعدادهما قبل بدء التدريب هما حساب الدقة من التوقعات، وتوفير طريقة لدفع نموذجك إلى Hub. يتم ذلك باستخدام [استدعاءات Keras](../main_classes/keras_callbacks). + +مرر دالة `compute_metrics` الخاصة بك إلى [`~transformers.KerasMetricCallback`]: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback + +>>> metric_callback = KerasMetricCallback(metric_fn=compute_metrics, eval_dataset=tf_validation_set) +``` + +حدد المكان الذي ستدفع فيه نموذجك ومصنف الرموز في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="my_awesome_model"، +... tokenizer=tokenizer، +... ) +``` + +بعد ذلك، قم بتجميع استدعاءات الإرجاع الخاصة بك معًا: + +```py +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! استدعاء [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) مع مجموعات البيانات الخاصة بالتدريب والتحقق من الصحة، وعدد العصور، واستدعاءات الإرجاع الخاصة بك لضبط النموذج: + +```py +>>> model.fit(x=tf_train_set, validation_data=tf_validation_set, epochs=3, callbacks=callbacks) +``` + +بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه! + + + + + +لمثال أكثر عمقًا حول كيفية ضبط نموذج لتصنيف النصوص، راجع الدفتر الملاحظات المقابل +[دفتر ملاحظات PyTorch](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification.ipynb) +أو [دفتر ملاحظات TensorFlow](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification-tf.ipynb). + + + +## الاستنتاج + +رائع، الآن بعد أن قمت بضبط نموذج، يمكنك استخدامه للاستنتاج! + +احصل على بعض النصوص التي تود تشغيل الاستدلال عليها: + +```py +>>> text = "This was a masterpiece. Not completely faithful to the books, but enthralling from beginning to end. Might be my favorite of the three." +``` + +أبسط طريقة لتجربة نموذجك المضبوط للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ `pipeline` لتحليل المشاعر باستخدام نموذجك، ومرر نصك إليه: + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline("sentiment-analysis", model="stevhliu/my_awesome_model") +>>> classifier(text) +[{'label': 'POSITIVE', 'score': 0.9994940757751465}] +``` + +يمكنك أيضًا محاكاة نتائج `pipeline` يدويًا إذا كنت ترغب في ذلك: + + + +قم بتوكينز النص وإرجاع tensers PyTorch: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("stevhliu/my_awesome_model") +>>> inputs = tokenizer(text, return_tensors="pt") +``` + +مرر المدخلات الخاصة بك إلى النموذج وإرجاع "logits": + +```py +>>> from transformers import AutoModelForSequenceClassification + +>>> model = AutoModelForSequenceClassification.from_pretrained("stevhliu/my_awesome_model") +>>> with torch.no_grad(): +... logits = model(**inputs).logits +``` + +احصل على الفئة ذات أعلى احتمال، واستخدم خريطة `id2label` للنموذج لتحويلها إلى تسمية نصية: + +```py +>>> predicted_class_id = logits.argmax().item() +>>> model.config.id2label[predicted_class_id] +'POSITIVE' +``` + + +قم بتوكينز النص وإرجاع tensers TensorFlow: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("stevhliu/my_awesome_model") +>>> inputs = tokenizer(text, return_tensors="tf") +``` + +مرر المدخلات الخاصة بك إلى النموذج وإرجاع "logits": + +```py +>>> from transformers import TFAutoModelForSequenceClassification + +>>> model = TFAutoModelForSequenceClassification.from_pretrained("stevhliu/my_awesome_model") +>>> logits = model(**inputs).logits +``` + +احصل على الفئة ذات أعلى احتمال، واستخدم خريطة `id2label` للنموذج لتحويلها إلى تسمية نصية: + +```py +>>> predicted_class_id = int(tf.math.argmax(logits, axis=-1)[0]) +>>> model.config.id2label[predicted_class_id] +'POSITIVE' +``` + + \ No newline at end of file From 45c20bead1baa9faf8567afa782df4be054b6002 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:57 +0300 Subject: [PATCH 100/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/summarization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/summarization.md | 387 ++++++++++++++++++++++++++ 1 file changed, 387 insertions(+) create mode 100644 docs/source/ar/tasks/summarization.md diff --git a/docs/source/ar/tasks/summarization.md b/docs/source/ar/tasks/summarization.md new file mode 100644 index 00000000000000..73b2a821c1f6e6 --- /dev/null +++ b/docs/source/ar/tasks/summarization.md @@ -0,0 +1,387 @@ +# تلخيص + +[[open-in-colab]] + + + +يخلق التلخيص نسخة أقصر من المستند أو المقال الذي يلتقط جميع المعلومات المهمة. إلى جانب الترجمة، يعد التلخيص مثال آخر على المهمة التي يمكن صياغتها كمهمة تسلسل إلى تسلسل. يمكن أن يكون التلخيص: + +- استخراجي: استخراج أهم المعلومات من المستند. +- مجردة: قم بتوليد نص جديد يلخص أهم المعلومات. + +سيوضح هذا الدليل كيفية: + +1. ضبط دقيق [T5](https://huggingface.co/google-t5/t5-small) على مجموعة فرعية من فاتورة ولاية كاليفورنيا من [BillSum](https://huggingface.co/datasets/billsum) مجموعة البيانات للتلخيص المجرد. +2. استخدام نموذج ضبط دقيق الخاص بك للاستدلال. + + + +لمعرفة جميع التصميمات ونقاط التحقق المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/summarization) + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate rouge_score +``` + +نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات BillSum + +ابدأ بتحميل مجموعة البيانات الفرعية الأصغر من فاتورة ولاية كاليفورنيا من مجموعة بيانات BillSum من مكتبة Datasets 🤗: + +```py +>>> from datasets import load_dataset + +>>> billsum = load_dataset("billsum", split="ca_test") +``` + +قسّم مجموعة البيانات إلى مجموعات تدريب واختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`] : + +```py +>>> billsum = billsum.train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: +```py +>>> billsum["train"][0] +{'summary': 'Existing law authorizes state agencies to enter into contracts for the acquisition of goods or services upon approval by the Department of General Services. Existing law sets forth various requirements and prohibitions for those contracts, including, but not limited to, a prohibition on entering into contracts for the acquisition of goods or services of $100,000 or more with a contractor that discriminates between spouses and domestic partners or same-sex and different-sex couples in the provision of benefits. Existing law provides that a contract entered into in violation of those requirements and prohibitions is void and authorizes the state or any person acting on behalf of the state to bring a civil action seeking a determination that a contract is in violation and therefore void. Under existing law, a willful violation of those requirements and prohibitions is a misdemeanor.\nThis bill would also prohibit a state agency from entering into contracts for the acquisition of goods or services of $100,000 or more with a contractor that discriminates between employees on the basis of gender identity in the provision of benefits, as specified. By expanding the scope of a crime, this bill would impose a state-mandated local program.\nThe California Constitution requires the state to reimburse local agencies and school districts for certain costs mandated by the state. Statutory provisions establish procedures for making that reimbursement.\nThis bill would provide that no reimbursement is required by this act for a specified reason.', + 'text': 'The people of the State of California do enact as follows:\n\n\nSECTION 1.\nSection 10295.35 is added to the Public Contract Code, to read:\n10295.35.\n(a) (1) Notwithstanding any other law, a state agency shall not enter into any contract for the acquisition of goods or services in the amount of one hundred thousand dollars ($100,000) or more with a contractor that, in the provision of benefits, discriminates between employees on the basis of an employee’s or dependent’s actual or perceived gender identity, including, but not limited to, the employee’s or dependent’s identification as transgender.\n(2) For purposes of this section, “contract” includes contracts with a cumulative amount of one hundred thousand dollars ($100,000) or more per contractor in each fiscal year.\n(3) For purposes of this section, an employee health plan is discriminatory if the plan is not consistent with Section 1365.5 of the Health and Safety Code and Section 10140 of the Insurance Code.\n(4) The requirements of this section shall apply only to those portions of a contractor’s operations that occur under any of the following conditions:\n(A) Within the state.\n(B) On real property outside the state if the property is owned by the state or if the state has a right to occupy the property, and if the contractor’s presence at that location is connected to a contract with the state.\n(C) Elsewhere in the United States where work related to a state contract is being performed.\n(b) Contractors shall treat as confidential, to the maximum extent allowed by law or by the requirement of the contractor’s insurance provider, any request by an employee or applicant for employment benefits or any documentation of eligibility for benefits submitted by an employee or applicant for employment.\n(c) After taking all reasonable measures to find a contractor that complies with this section, as determined by the state agency, the requirements of this section may be waived under any of the following circumstances:\n(1) There is only one prospective contractor willing to enter into a specific contract with the state agency.\n(2) The contract is necessary to respond to an emergency, as determined by the state agency, that endangers the public health, welfare, or safety, or the contract is necessary for the provision of essential services, and no entity that complies with the requirements of this section capable of responding to the emergency is immediately available.\n(3) The requirements of this section violate, or are inconsistent with, the terms or conditions of a grant, subvention, or agreement, if the agency has made a good faith attempt to change the terms or conditions of any grant, subvention, or agreement to authorize application of this section.\n(4) The contractor is providing wholesale or bulk water, power, or natural gas, the conveyance or transmission of the same, or ancillary services, as required for ensuring reliable services in accordance with good utility practice, if the purchase of the same cannot practically be accomplished through the standard competitive bidding procedures and the contractor is not providing direct retail services to end users.\n(d) (1) A contractor shall not be deemed to discriminate in the provision of benefits if the contractor, in providing the benefits, pays the actual costs incurred in obtaining the benefit.\n(2) If a contractor is unable to provide a certain benefit, despite taking reasonable measures to do so, the contractor shall not be deemed to discriminate in the provision of benefits.\n(e) (1) Every contract subject to this chapter shall contain a statement by which the contractor certifies that the contractor is in compliance with this section.\n(2) The department or other contracting agency shall enforce this section pursuant to its existing enforcement powers.\n(3) (A) If a contractor falsely certifies that it is in compliance with this section, the contract with that contractor shall be subject to Article 9 (commencing with Section 10420), unless, within a time period specified by the department or other contracting agency, the contractor provides to the department or agency proof that it has complied, or is in the process of complying, with this section.\n(B) The application of the remedies or penalties contained in Article 9 (commencing with Section 10420) to a contract subject to this chapter shall not preclude the application of any existing remedies otherwise available to the department or other contracting agency under its existing enforcement powers.\n(f) Nothing in this section is intended to regulate the contracting practices of any local jurisdiction.\n(g) This section shall be construed so as not to conflict with applicable federal laws, rules, or regulations. In the event that a court or agency of competent jurisdiction holds that federal law, rule, or regulation invalidates any clause, sentence, paragraph, or section of this code or the application thereof to any person or circumstances, it is the intent of the state that the court or agency sever that clause, sentence, paragraph, or section so that the remainder of this section shall remain in effect.\nSEC. 2.\nSection 10295.35 of the Public Contract Code shall not be construed to create any new enforcement authority or responsibility in the Department of General Services or any other contracting agency.\nSEC. 3.\nNo reimbursement is required by this act pursuant to Section 6 of Article XIII\u2009B of the California Constitution because the only costs that may be incurred by a local agency or school district will be incurred because this act creates a new crime or infraction, eliminates a crime or infraction, or changes the penalty for a crime or infraction, within the meaning of Section 17556 of the Government Code, or changes the definition of a crime within the meaning of Section 6 of Article XIII\u2009B of the California Constitution.', + 'title': 'An act to add Section 10295.35 to the Public Contract Code, relating to public contracts.'} +``` +هناك حقلان تريد استخدامهما: + +- `النص`: نص الفاتورة الذي سيكون المدخل للنموذج. +- `ملخص`: نسخة مختصرة من `النص` الذي سيكون هدف النموذج. + +## معالجة مسبقة + +الخطوة التالية هي تحميل برنامج Tokenizer T5 لمعالجة `النص` و `الملخص`: + +```py +>>> from transformers import AutoTokenizer + +>>> checkpoint = "google-t5/t5-small" +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +``` + +تحتاج دالة المعالجة المسبقة التي تريد إنشاؤها إلى: + +1. إضافة بادئة إلى الإدخال باستخدام موجه حتى يعرف T5 أن هذه مهمة تلخيص. تتطلب بعض النماذج القادرة على مهام NLP متعددة المطالبة بمهام محددة. +2. استخدام حجة `text_target` الكلمة عند توكين التصنيفات. +3. اقطع التسلسلات بحيث لا يكون طولها أطول من الطول الأقصى المحدد بواسطة معلمة `max_length` . + +```py +>>> prefix = "summarize: " + + +>>> def preprocess_function(examples): +... inputs = [prefix + doc for doc in examples["text"]] +... model_inputs = tokenizer(inputs, max_length=1024, truncation=True) + +... labels = tokenizer(text_target=examples["summary"], max_length=128, truncation=True) + +... model_inputs["labels"] = labels["input_ids"] +... return model_inputs +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم طريقة [`~datasets.Dataset.map`] في Datasets 🤗 . يمكنك تسريع وظيفة `map` عن طريق تعيين `batched=True` لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد: + +```py +>>> tokenized_billsum = billsum.map(preprocess_function, batched=True) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DataCollatorForSeq2Seq`]. من الأكثر كفاءة *الحشو الديناميكي* الجمل إلى أطول طول في دفعة أثناء التجليد، بدلاً من حشو مجموعة البيانات بأكملها إلى الطول الأقصى. + + + + +```py +>>> from transformers import DataCollatorForSeq2Seq + +>>> data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint) +``` + + + +```py +>>> from transformers import DataCollatorForSeq2Seq + +>>> data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint, return_tensors="tf") +``` + + + +## تقييم + +غالبًا ما يكون تضمين مقياس أثناء التدريب مفيدًا لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index) . بالنسبة لهذه المهمة، قم بتحميل مقياس [ROUGE](https://huggingface.co/spaces/evaluate-metric/rouge) (راجع دليل المستخدم لـ 🤗 Evaluate [quick tour](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> rouge = evaluate.load("rouge") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتصنيفاتك إلى [`~evaluate.EvaluationModule.compute`] لحساب مقياس ROUGE: + +```py +>>> import numpy as np + + +>>> def compute_metrics(eval_pred): +... predictions، labels = eval_pred +... decoded_preds = tokenizer.batch_decode(predictions، skip_special_tokens=True) +... labels = np.where (labels! = -100، labels، tokenizer.pad_token_id) +... decoded_labels = tokenizer.batch_decode(labels، skip_special_tokens=True) + +... النتيجة = rouge.compute(predictions=decoded_preds، references=decoded_labels، use_stemmer=True) + +... prediction_lens = [np.count_nonzero (pred! = tokenizer.pad_token_id) for pred in predictions] +... result ["gen_len"] = np.mean (prediction_lens) + +... return {k: round (v، 4) for k، v in result.items()} +``` + +وظيفة `compute_metrics` الخاصة بك جاهزة الآن، وستعود إليها عند إعداد التدريب الخاص بك. + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer` ]، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer) ! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل T5 باستخدام [`AutoModelForSeq2SeqLM`]: + +```py +>>> from transformers import AutoModelForSeq2SeqLM، Seq2SeqTrainingArguments، Seq2SeqTrainer +
+ +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل T5 باستخدام [`AutoModelForSeq2SeqLM`]: + +```py +>>> from transformers import AutoModelForSeq2SeqLM، Seq2SeqTrainingArguments، Seq2SeqTrainer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`Seq2SeqTrainingArguments`]. المعلمة الوحيدة المطلوبة هي `output_dir` التي تحدد مكان حفظ نموذجك. ستقوم بالدفع إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقوم [`Trainer`] بتقييم مقياس ROUGE وحفظ نقطة التدريب. +2. قم بتمرير الحجج التدريبية إلى [`Seq2SeqTrainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات والمحلل اللغوي ومجلد البيانات ووظيفة `compute_metrics` . +3. استدعاء [`~Trainer.train`] لضبط نموذجك بدقة. + +```py +>>> training_args = Seq2SeqTrainingArguments( +... output_dir="my_awesome_billsum_model", +... eval_strategy="epoch", +... learning_rate=2e-5, +... per_device_train_batch_size=16, +... per_device_eval_batch_size=16, +... weight_decay=0.01, +... save_total_limit=3, +... num_train_epochs=4, +... predict_with_generate=True, +... fp16=True, +... push_to_hub=True, +... ) + +>>> trainer = Seq2SeqTrainer( +... model=model, +... args=training_args, +... train_dataset=tokenized_billsum["train"], +... eval_dataset=tokenized_billsum["test"], +... tokenizer=tokenizer, +... data_collator=data_collator, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` +بمجرد الانتهاء من التدريب، شارك نموذجك على المنصة باستخدام طريقة [~transformers.Trainer.push_to_hub`] بحيث يمكن للجميع استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` +
+ + + +إذا لم تكن معتادًا على ضبط نموذج باستخدام Keras، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-a-tensorflow-model-with-keras)! + + +لضبط نموذج في TensorFlow، ابدأ بإعداد دالة المحسن ومعدل التعلم وجدول التدريب وبعض فرط المعلمات: + +```py +>>> from transformers import create_optimizer, AdamWeightDecay + +>>> optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01) +``` + +بعد ذلك، يمكنك تحميل T5 باستخدام [`TFAutoModelForSeq2SeqLM`]: + +```py +>>> from transformers import TFAutoModelForSeq2SeqLM + +>>> model = TFAutoModelForSeq2SeqLM.from_pretrained(checkpoint) +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق `tf.data.Dataset` باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... tokenized_billsum["train"], +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) + +>>> tf_test_set = model.prepare_tf_dataset( +... tokenized_billsum["test"], +... shuffle=False, +... batch_size=16, +... collate_fn=data_collator, +... ) +``` + +قم بتهيئة النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers لديها دالة خسارة افتراضية ذات صلة بالمهمة، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) # لا توجد حجة الخسارة! +``` + +الشيئان الأخيران اللذان يجب إعدادهما قبل بدء التدريب هما حساب درجة ROUGE من التوقعات، وتوفير طريقة لدفع نموذجك إلى المنصة. يتم تنفيذ كلاهما باستخدام [Keras callbacks](../main_classes/keras_callbacks). + +مرر دالة `compute_metrics` الخاصة بك إلى [`~transformers.KerasMetricCallback`]: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback + +>>> metric_callback = KerasMetricCallback(metric_fn=compute_metrics, eval_dataset=tf_validation_set) +``` + +حدد أين تريد دفع نموذجك ومحولك في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="my_awesome_billsum_model", +... tokenizer=tokenizer, +... ) +``` + +ثم قم بتجميع مكالمات الإرجاع الخاصة بك معًا: + +```py +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! اتصل بـ [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) باستخدام مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، ومكالمات الإرجاع الخاصة بك لضبط النموذج: + +```py +>>> model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=3, callbacks=callbacks) +``` + +بمجرد الانتهاء من التدريب، يتم تحميل نموذجك تلقائيًا إلى المنصة حتى يتمكن الجميع من استخدامه! + +
+ + + +لمثال أكثر تفصيلاً حول كيفية ضبط نموذج للتلخيص، راجع الدفتر المقابل +[دفتر ملاحظات PyTorch](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/summarization.ipynb) +أو [دفتر ملاحظات TensorFlow](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/summarization-tf.ipynb). + + + +## الاستنتاج + +رائع، الآن بعد أن ضبطت نموذجًا، يمكنك استخدامه للاستنتاج! + +فكر في بعض النصوص التي تريد تلخيصها. بالنسبة إلى T5، تحتاج إلى إضافة بادئة إلى إدخالك اعتمادًا على المهمة التي تعمل عليها. للتلخيص، يجب إضافة بادئة إلى إدخالك كما هو موضح أدناه: + +```py +>>> text = "summarize: The Inflation Reduction Act lowers prescription drug costs, health care costs, and energy costs. It's the most aggressive action on tackling the climate crisis in American history, which will lift up American workers and create good-paying, union jobs across the country. It'll lower the deficit and ask the ultra-wealthy and corporations to pay their fair share. And no one making under $400,000 per year will pay a penny more in taxes." +``` + +أبسط طريقة لتجربة نموذجك المضبوط للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ `pipeline` للتلخيص باستخدام نموذجك، ومرر نصك إليه: + +```py +>>> from transformers import pipeline + +>>> summarizer = pipeline("summarization", model="stevhliu/my_awesome_billsum_model") +>>> summarizer(text) +[{"summary_text": "The Inflation Reduction Act lowers prescription drug costs, health care costs, and energy costs. It's the most aggressive action on tackling the climate crisis in American history, which will lift up American workers and create good-paying, union jobs across the country."}] +``` + +يمكنك أيضًا إعادة إنتاج نتائج `pipeline` يدويًا إذا كنت تريد ذلك: + + + + +قم برمز النص وإرجاع `input_ids` كرموز PyTorch: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("stevhliu/my_awesome_billsum_model") +>>> inputs = tokenizer(text, return_tensors="pt").input_ids +``` + +استخدم طريقة [`~generation.GenerationMixin.generate`] لإنشاء الملخص. لمزيد من التفاصيل حول استراتيجيات إنشاء النصوص المختلفة ومعلمات التحكم في الإنشاء، راجع واجهة برمجة التطبيقات [Text Generation](../main_classes/text_generation). + +```py +>>> from transformers import AutoModelForSeq2SeqLM + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("stevhliu/my_awesome_billsum_model") +>>> outputs = model.generate(inputs, max_new_tokens=100, do_sample=False) +``` + +فك تشفير رموز المعرفات المولدة مرة أخرى إلى نص: + +```py +>>> tokenizer.decode(outputs[0], skip_special_tokens=True) +'the inflation reduction act lowers prescription drug costs, health care costs, and energy costs. it's the most aggressive action on tackling the climate crisis in american history. it will ask the ultra-wealthy and corporations to pay their fair share.' +``` + + +قم برمز النص وإرجاع `input_ids` كرموز TensorFlow: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("stevhliu/my_awesome_billsum_model") +>>> inputs = tokenizer(text, return_tensors="tf").input_ids +``` + +استخدم طريقة [`~transformers.generation_tf_utils.TFGenerationMixin.generate`] لإنشاء الملخص. لمزيد من التفاصيل حول استراتيجيات إنشاء النصوص المختلفة ومعلمات التحكم في الإنشاء، راجع واجهة برمجة التطبيقات [Text Generation](../main_classes/text_generation). + +```py +>>> from transformers import TFAutoModelForSeq2SeqLM + +>>> model = TFAutoModelForSeq2SeqLM.from_pretrained("stevhliu/my_awesome_billsum_model") +>>> outputs = model.generate(inputs, max_new_tokens=100, do_sample=False) +``` + +فك تشفير رموز المعرفات المولدة مرة أخرى إلى نص: + +```py +>>> tokenizer.decode(outputs[0], skip_special_tokens=True) +'the inflation reduction act lowers prescription drug costs, health care costs, and energy costs. it's the most aggressive action on tackling the climate crisis in american history. it will ask the ultra-wealthy and corporations to pay their fair share.' +``` + + \ No newline at end of file From 850f160d1114a27cac2e35796dac8164b34af13c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:43:59 +0300 Subject: [PATCH 101/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/token=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/token_classification.md | 544 +++++++++++++++++++ 1 file changed, 544 insertions(+) create mode 100644 docs/source/ar/tasks/token_classification.md diff --git a/docs/source/ar/tasks/token_classification.md b/docs/source/ar/tasks/token_classification.md new file mode 100644 index 00000000000000..9d95037bcb9041 --- /dev/null +++ b/docs/source/ar/tasks/token_classification.md @@ -0,0 +1,544 @@ +# تصنيف الرموز + +[[open-in-colab]] + + + +يُخصص تصنيف الرموز تسمية لعلامات فردية في جملة. إحدى مهام تصنيف الرموز الشائعة هي التعرف على الكيانات المسماة (NER). تحاول NER إيجاد تسمية لكل كيان في جملة، مثل شخص أو موقع أو منظمة. + +سيوضح هذا الدليل كيفية: + +1. ضبط دقة [DistilBERT](https://huggingface.co/distilbert/distilbert-base-uncased) على مجموعة بيانات [WNUT 17](https://huggingface.co/datasets/wnut_17) للكشف عن كيانات جديدة. +2. استخدام نموذجك المضبوط الدقة للاستنتاج. + + + +لمشاهدة جميع البنى ونقاط التفتيش المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/token-classification). + + + +قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate seqeval +``` + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات WNUT 17 + +ابدأ بتحميل مجموعة بيانات WNUT 17 من مكتبة Datasets 🤗: + +```py +>>> from datasets import load_dataset + +>>> wnut = load_dataset("wnut_17") +``` + +ثم الق نظرة على مثال: + +```py +>>> wnut["train"][0] +{'id': '0', + 'ner_tags': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0], + 'tokens': ['@paulwalk', 'It', "'s", 'the', 'view', 'from', 'where', 'I', "'m", 'living', 'for', 'two', 'weeks', '.', 'Empire', 'State', 'Building', '=', 'ESB', '.', 'Pretty', 'bad', 'storm', 'here', 'last', 'evening', '.'] +} +``` + +يمثل كل رقم في `ner_tags` كيانًا. قم بتحويل الأرقام إلى أسماء تسمياتها لمعرفة ما هي الكيانات: + +```py +>>> label_list = wnut["train"].features[f"ner_tags"].feature.names +>>> label_list +[ + "O", + "B-corporation", + "I-corporation", + "B-creative-work", + "I-creative-work", + "B-group", + "I-group", + "B-location", + "I-location", + "B-person", + "I-person", + "B-product", + "I-product", +] +``` + +يشير الحرف الذي يسبق كل `ner_tag` إلى موضع الرمز المميز للكيان: + +- `B-` يشير إلى بداية الكيان. +- `I-` يشير إلى أن الرمز المميز موجود داخل نفس الكيان (على سبيل المثال، رمز مميز `State` هو جزء من كيان مثل `Empire State Building`). +- `0` يشير إلى أن الرمز المميز لا يقابل أي كيان. + +## معالجة مسبقة + + + +الخطوة التالية هي تحميل معالج رموز DistilBERT لمعالجة حقل `tokens`: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") +``` + +كما رأيت في حقل `tokens` المثال أعلاه، يبدو أن المدخلات قد تم تمييزها بالفعل. لكن المدخلات لم يتم تمييزها بعد، وستحتاج إلى تعيين `is_split_into_words=True` لتمييز الكلمات إلى كلمات فرعية. على سبيل المثال: +```py +>>> example = wnut["train"][0] +>>> tokenized_input = tokenizer(example["tokens"], is_split_into_words=True) +>>> tokens = tokenizer.convert_ids_to_tokens(tokenized_input["input_ids"]) +>>> tokens +['[CLS]', '@', 'paul', '##walk', 'it', "'", 's', 'the', 'view', 'from', 'where', 'i', "'", 'm', 'living', 'for', 'two', 'weeks', '.', 'empire', 'state', 'building', '=', 'es', '##b', '.', 'pretty', 'bad', 'storm', 'here', 'last', 'evening', '.', '[SEP]'] +``` + +ومع ذلك، يضيف هذا بعض الرموز المميزة الخاصة `[CLS]` و`[SEP]`، وتؤدي عملية تمييز الكلمات الفرعية إلى عدم تطابق بين المدخلات والتسميات. قد يتم الآن تقسيم كلمة واحدة تقابل تسمية واحدة إلى كلمتين فرعيتين. ستحتاج إلى إعادة محاذاة الرموز المميزة والتسميات عن طريق: + +1. قم بتعيين جميع الرموز المميزة إلى كلماتها المقابلة باستخدام طريقة [`word_ids`](https://huggingface.co/docs/transformers/main_classes/tokenizer#transformers.BatchEncoding.word_ids). +2. قم بتعيين التسمية `-100` إلى الرموز المميزة الخاصة `[CLS]` و`[SEP]` حتى يتم تجاهلها بواسطة دالة الخسارة PyTorch (راجع [CrossEntropyLoss](https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html)). +3. قم بتسمية الرمز المميز الأول للكلمة فقط. قم بتعيين `-100` إلى الرموز الفرعية الأخرى من نفس الكلمة. + +هنا كيف يمكنك إنشاء وظيفة لإعادة محاذاة الرموز المميزة والتسميات، وقص التسلسلات بحيث لا تكون أطول من طول المدخلات الأقصى لـ DistilBERT: + +```py +>>> def tokenize_and_align_labels(examples): +... tokenized_inputs = tokenizer(examples["tokens"], truncation=True, is_split_into_words=True) + +... labels = [] +... for i, label in enumerate(examples[f"ner_tags"]): +... word_ids = tokenized_inputs.word_ids(batch_index=i) # قم بتعيين الرموز المميزة إلى كلماتها المقابلة. +... previous_word_idx = None +... label_ids = [] +... for word_idx in word_ids: # قم بتعيين الرموز المميزة الخاصة إلى -100. +... if word_idx is None: +... label_ids.append(-100) +... elif word_idx != previous_word_idx: # قم بتسمية الرمز المميز الأول للكلمة فقط. +... label_ids.append(label[word_idx]) +... else: +... label_ids.append(-100) +... previous_word_idx = word_idx +... labels.append(label_ids) + +... tokenized_inputs["labels"] = labels +... return tokenized_inputs +``` + +لتطبيق وظيفة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم وظيفة [`~datasets.Dataset.map`] في مكتبة Datasets 🤗. يمكنك تسريع وظيفة `map` عن طريق تعيين `batched=True` لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد: + +```py +>>> tokenized_wnut = wnut.map(tokenize_and_align_labels, batched=True) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DataCollatorWithPadding`]. من الأكثر كفاءة *توسيد* الديناميكي للجمل إلى أطول طول في دفعة أثناء التجميع، بدلاً من توسيد مجموعة البيانات بأكملها إلى الطول الأقصى. + + + +```py +>>> from transformers import DataCollatorForTokenClassification + +>>> data_collator = DataCollatorForTokenClassification(tokenizer=tokenizer) +``` + + +```py +>>> from transformers import DataCollatorForTokenClassification + +>>> data_collator = DataCollatorForTokenClassification(tokenizer=tokenizer, return_tensors="tf") +``` + + + +## تقييم + +غالبًا ما يكون تضمين مقياس أثناء التدريب مفيدًا لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index). بالنسبة لهذه المهمة، قم بتحميل إطار [seqeval](https://huggingface.co/spaces/evaluate-metric/seqeval) (راجع جولة 🤗 Evaluate [السريعة](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس). في الواقع، ينتج Seqeval عدة درجات: الدقة والاستدعاء وF1 والدقة. + +```py +>>> import evaluate + +>>> seqeval = evaluate.load("seqeval") +``` +```py +>>> import evaluate + +>>> seqeval = evaluate.load("seqeval") +``` + +احصل على تسميات NER أولاً، ثم قم بإنشاء وظيفة تمرر تنبؤاتك الصحيحة وتسمياتك الصحيحة إلى [`~evaluate.EvaluationModule.compute`] لحساب الدرجات: + +```py +>>> import numpy as np + +>>> labels = [label_list[i] for i in example[f"ner_tags"]] + + +>>> def compute_metrics(p): +... predictions, labels = p +... predictions = np.argmax(predictions, axis=2) + +... true_predictions = [ +... [label_list[p] for (p, l) in zip(prediction, label) if l != -100] +... for prediction, label in zip(predictions, labels) +... ] +... true_labels = [ +... [label_list[l] for (p, l) in zip(prediction, label) if l != -100] +... for prediction, label in zip(predictions, labels) +... ] + +... results = seqeval.compute(predictions=true_predictions, references=true_labels) +... return { +... "precision": results["overall_precision"], +... "recall": results["overall_recall"], +... "f1": results["overall_f1"], +... "accuracy": results["overall_accuracy"], +... } +``` + +وظيفتك `compute_metrics` جاهزة الآن، وستعود إليها عند إعداد تدريبك. + +## تدريب + +قبل البدء في تدريب نموذجك، قم بإنشاء خريطة من معرفات التسميات المتوقعة إلى تسمياتها باستخدام `id2label` و`label2id`: + +```py +>>> id2label = { +... 0: "O", +... 1: "B-corporation", +... 2: "I-corporation", +... 3: "B-creative-work", +... 4: "I-creative-work", +... 5: "B-group", +... 6: "I-group", +... 7: "B-location", +... 8: "I-location", +... 9: "B-person", +... 10: "I-person", +... 11: "B-product", +... 12: "I-product", +... } +>>> label2id = { +... "O": 0, +... "B-corporation": 1, +... "I-corporation": 2, +... "B-creative-work": 3, +... "I-creative-work": 4, +... "B-group": 5, +... "I-group": 6, +... "B-location": 7, +... "I-location": 8, +... "B-person": 9, +... "I-person": 10, +... "B-product": 11, +... "I-product": 12, +... } +``` + + + + + +إذا لم تكن على دراية بضبط دقة نموذج باستخدام [`Trainer`], فراجع البرنامج التعليمي الأساسي [هنا](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل DistilBERT باستخدام [`AutoModelForTokenClassification`] جنبًا إلى جنب مع عدد التسميات المتوقعة، وخرائط التسميات: + +```py +>>> from transformers import AutoModelForTokenClassification, TrainingArguments, Trainer + +>>> model = AutoModelForTokenClassification.from_pretrained( +... "distilbert/distilbert-base-uncased", num_labels=13, id2label=id2label, label2id=label2id +... ) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد معلمات التدريب الخاصة بك في [`TrainingArguments`]. المعلمة المطلوبة الوحيدة هي `output_dir` التي تحدد أين يتم حفظ نموذجك. ستقوم بالدفع بهذا النموذج إلى Hub عن طريق تعيين `push_to_hub=True` (يجب أن تكون مسجلاً الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقيم [`Trainer`] درجات seqeval ويحفظ نقطة تفتيش التدريب. +2. قم بتمرير الحجج التدريبية إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات والمعالج الرمزي ومجمع البيانات ووظيفة `compute_metrics`. +3. استدعاء [`~Trainer.train`] لضبط دقة نموذجك. + +```py +>>> training_args = TrainingArguments( +... output_dir="my_awesome_wnut_model", +... learning_rate=2e-5, +... per_device_train_batch_size=16, +... per_device_eval_batch_Multiplier: 16, +... num_train_epochs=2, +... weight_decay=0.01, +... eval_strategy="epoch", +... save_strategy="epoch", +... load_best_model_at_end=True, +... push_to_hub=True, +... ) + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... train_dataset=tokenized_wnut["train"], +... eval_dataset=tokenized_wnut["test"], +... tokenizer=tokenizer, +... data_collator=data_collator, +... compute_metrics=compute_metrics, +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن على دراية بضبط دقة نموذج باستخدام Keras، فراجع البرنامج التعليمي الأساسي [هنا](../training#train-a-tensorflow-model-with-keras)! + + +لضبط دقة نموذج في TensorFlow، ابدأ بإعداد دالة تحسين ومعدل تعلم وجدول، وبعض معلمات التدريب: + +```py +>>> from transformers import create_optimizer + +>>> batch_size = 16 +>>> num_train_epochs = 3 +>>> num_train_steps = (len(tokenized_wnut["train"]) // batch_size) * num_train_epochs +>>> optimizer, lr_schedule = create_optimizer( +... init_lr=2e-5, +... num_train_steps=num_train_steps, +... weight_decay_rate=0.01, +... num_warmup_steps=0, +... ) +``` + +ثم يمكنك تحميل DistilBERT باستخدام [`TFAutoModelForTokenClassification`] جنبًا إلى جنب مع عدد التسميات المتوقعة، وخرائط التسميات: + +```py +>>> from transformers import TFAutoModelForTokenClassification + +>>> model = TFAutoModelForTokenClassification.from_pretrained( +... "distilbert/distilbert-base-uncased", num_labels=13, id2label=id2label, label2id=label2id +... ) +``` + +قم بتحويل مجموعات بياناتك إلى تنسيق `tf.data.Dataset` باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... tokenized_wnut["train"], +... shuffle=True, +... batch_size=16, +... collate_fn=data_collator, +... ) + +>>> tf_validation_set = model.prepare_tf_dataset( +... tokenized_wnut["validation"], +... shuffle=False, +... batch_size=16, +... collate_fn=data_collator, +... ) +``` + +تهيئة النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers لديها دالة خسارة افتراضية ذات صلة بالمهمة، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) # لا توجد حجة الخسارة! +``` + +الشيئان الأخيران اللذان يجب إعدادهما قبل بدء التدريب هما حساب درجات seqeval من التوقعات، وتوفير طريقة لدفع نموذجك إلى المنصة. يتم تنفيذ كلاهما باستخدام [Keras callbacks](../main_classes/keras_callbacks). + +مرر دالة `compute_metrics` الخاصة بك إلى [`~transformers.KerasMetricCallback`]: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback + +>>> metric_callback = KerasMetricCallback(metric_fn=compute_metrics, eval_dataset=tf_validation_set) +``` + +حدد أين تريد دفع نموذجك ومحولك في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="my_awesome_wnut_model"، +... tokenizer=tokenizer, +... ) +``` + +ثم قم بتجميع مكالمات الإرجاع الخاصة بك معًا: + +```py +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! اتصل بـ [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) باستخدام مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، ومكالمات الإرجاع الخاصة بك لضبط النموذج: + +```py +>>> model.fit(x=tf_train_set، validation_data=tf_validation_set، epochs=3، callbacks=callbacks) +``` + +بمجرد الانتهاء من التدريب، يتم تحميل نموذجك تلقائيًا إلى المنصة حتى يتمكن الجميع من استخدامه! + + + + + +لمثال أكثر تفصيلاً حول كيفية ضبط نموذج لتصنيف الرموز المميزة، راجع الدفتر المقابل +[دفتر ملاحظات PyTorch](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification.ipynb) +أو [دفتر ملاحظات TensorFlow](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification-tf.ipynb). + + + +## الاستنتاج + +رائع، الآن بعد أن ضبطت نموذجًا، يمكنك استخدامه للاستنتاج! + +احصل على بعض النصوص التي تريد تشغيل الاستدلال عليها: + +```py +>>> text = "The Golden State Warriors are an American professional basketball team based in San Francisco." +``` + +أبسط طريقة لتجربة نموذجك المضبوط للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ `pipeline` لـ NER باستخدام نموذجك، ومرر نصك إليه: + +```py +>>> from transformers import pipeline + +>>> classifier = pipeline("ner"، model="stevhliu/my_awesome_wnut_model") +>>> classifier(text) +[{'entity': 'B-location', + 'score': 0.42658573, + 'index': 2, + 'word': 'golden', + 'start': 4, + 'end': 10}, + {'entity': 'I-location', + 'score': 0.35856336, + 'index': 3, + 'word': 'state', + 'start': 11, + 'end': 16}, + {'entity': 'B-group', + 'score': 0.3064001, + 'index': 4, + 'word': 'warriors', + 'start': 17, + 'end': 25}, + {'entity': 'B-location', + 'score': 0.65523505, + 'index': 13, + 'word': 'san', + 'start': 80, + 'end': 83}, + {'entity': 'B-location', + 'score': 0.4668663, + 'index': 14, + 'word': 'francisco', + 'start': 84, + 'end': 93}] +``` + +يمكنك أيضًا إعادة إنتاج نتائج `pipeline` يدويًا إذا كنت تريد ذلك: + + + +قم برمز النص وإرجاع الرموز المتوترة PyTorch: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("stevhliu/my_awesome_wnut_model") +>>> inputs = tokenizer(text، return_tensors="pt") +``` + +مرر المدخلات الخاصة بك إلى النموذج وإرجاع `logits`: + +```py +>>> from transformers import AutoModelForTokenClassification + +>>> model = AutoModelForTokenClassification.from_pretrained("stevhliu/my_awesome_wnut_model") +>>> with torch.no_grad(): +... logits = model(**inputs).logits +``` + +احصل على الفئة ذات الاحتمالية الأعلى، واستخدم خريطة "id2label" للنموذج لتحويلها إلى تسمية نصية: + +```py +>>> predictions = torch.argmax(logits، dim=2) +>>> predicted_token_class = [model.config.id2label[t.item()] for t in predictions[0]] +>>> predicted_token_class +['O'، + 'O'، + 'B-location'، + 'I-location'، + 'B-group'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'B-location'، + 'B-location'، + 'O'، + 'O'] +``` + + +قم برمز النص وإرجاع رموز TensorFlow المتوترة: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("stevhliu/my_awesome_wnut_model") +>>> inputs = tokenizer(text، return_tensors="tf") +``` + +مرر المدخلات الخاصة بك إلى النموذج وإرجاع `logits`: + +```py +>>> from transformers import TFAutoModelForTokenClassification + +>>> model = TFAutoModelForTokenClassification.from_pretrained("stevhliu/my_awesome_wnut_model") +>>> logits = model(**inputs).logits +``` + +احصل على الفئة ذات الاحتمالية الأعلى، واستخدم خريطة "id2label" للنموذج لتحويلها إلى تسمية نصية: + +```py +>>> predicted_token_class_ids = tf.math.argmax(logits، axis=-1) +>>> predicted_token_class = [model.config.id2label[t] for t in predicted_token_class_ids[0].numpy().tolist()] +>>> predicted_token_class +['O'، + 'O'، + 'B-location'، + 'I-location'، + 'B-group'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'O'، + 'B-location'، + 'B-location'، + 'O'، + 'O'] +``` + + \ No newline at end of file From c4cee83acd0676a52941189cbb6ebdfccb2a21fb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:44:01 +0300 Subject: [PATCH 102/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/translation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/translation.md | 402 ++++++++++++++++++++++++++++ 1 file changed, 402 insertions(+) create mode 100644 docs/source/ar/tasks/translation.md diff --git a/docs/source/ar/tasks/translation.md b/docs/source/ar/tasks/translation.md new file mode 100644 index 00000000000000..aa348c9917440c --- /dev/null +++ b/docs/source/ar/tasks/translation.md @@ -0,0 +1,402 @@ +# الترجمة + +[[open-in-colab]] + + + +تعد الترجمة إحدى المهام التي يمكنك صياغتها كمشكلة تسلسل إلى تسلسل، وهو إطار عمل قوي لإرجاع بعض المخرجات من الإدخال، مثل الترجمة أو الملخص. وتُستخدم أنظمة الترجمة عادة لترجمة النصوص بين اللغات المختلفة، ولكن يمكن أيضًا استخدامها للكلام أو بعض المزج بينهما مثل تحويل النص إلى كلام أو الكلام إلى نص. + +سيوضح هذا الدليل كيفية: + +1. ضبط نموذج T5 الدقيق على الجزء الفرعي الإنجليزي الفرنسي من مجموعة بيانات OPUS Books لترجمة النص الإنجليزي إلى الفرنسية. +2. استخدام نموذجك الدقيق للاستنتاج. + + + +لعرض جميع البنيات ونقاط المراقبة المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/translation). + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install transformers datasets evaluate sacrebleu +``` + +نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات OPUS Books + +ابدأ بتحميل الجزء الفرعي الإنجليزي الفرنسي من مجموعة بيانات [OPUS Books](https://huggingface.co/datasets/opus_books) من مكتبة Datasets 🤗: + +```py +>>> from datasets import load_dataset + +>>> books = load_dataset("opus_books", "en-fr") +``` + +قسِّم مجموعة البيانات إلى مجموعات تدريب واختبار باستخدام طريقة [`~datasets.Dataset.train_test_split`]: + +```py +>>> books = books["train"].train_test_split(test_size=0.2) +``` + +ثم الق نظرة على مثال: + +```py +>>> books["train"][0] +{'id': '90560', + 'translation': {'en': 'But this lofty plateau measured only a few fathoms, and soon we reentered Our Element.', + 'fr': 'Mais ce plateau élevé ne mesurait que quelques toises, et bientôt nous fûmes rentrés dans notre élément.'}} +``` + +`translation`: ترجمة إنجليزية وفرنسية للنص. + +## معالجة مسبقة + + + +الخطوة التالية هي تحميل برنامج تشفير T5 لمعالجة أزواج اللغات الإنجليزية والفرنسية: + +```py +>>> from transformers import AutoTokenizer + +>>> checkpoint = "google-t5/t5-small" +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) +``` + +يجب أن تقوم دالة المعالجة المسبقة التي تريد إنشائها بما يلي: + +1. إضافة بادئة إلى الإدخال باستخدام موجه حتى يعرف T5 أن هذه مهمة ترجمة. تتطلب بعض النماذج القادرة على مهام NLP متعددة المطالبة بمهام محددة. +2. قم بتشفير الإدخال (الإنجليزية) والهدف (الفرنسية) بشكل منفصل لأنه لا يمكنك تشفير النص الفرنسي باستخدام برنامج تشفير تم تدريبه مسبقًا على مفردات اللغة الإنجليزية. +3. اقطع التسلسلات بحيث لا تكون أطول من الطول الأقصى المحدد بواسطة معلمة "max_length". + +```py +>>> source_lang = "en" +>>> target_lang = "fr" +>>> prefix = "translate English to French: " +```py +>>> source_lang = "en" +>>> target_lang = "fr" +>>> prefix = "translate English to French: " + + +>>> def preprocess_function(examples): +... inputs = [prefix + example[source_lang] for example in examples["translation"]] +... targets = [example[target_lang] for example in examples["translation"]] +... model_inputs = tokenizer(inputs, text_target=targets, max_length=128, truncation=True) +... return model_inputs +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم طريقة [`~datasets.Dataset.map`] في مكتبة Datasets 🤗. يمكنك تسريع وظيفة "map" عن طريق تعيين "batched=True" لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد: + +```py +>>> tokenized_books = books.map(preprocess_function, batched=True) +``` + +الآن قم بإنشاء دفعة من الأمثلة باستخدام [`DataCollatorForSeq2Seq`]. من الأكثر كفاءة *تعبئة* الجمل ديناميكيًا إلى الطول الأطول في دفعة أثناء التجميع، بدلاً من تعبئة مجموعة البيانات بأكملها إلى الطول الأقصى. + + + + +```py +>>> from transformers import DataCollatorForSeq2Seq + +>>> data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint) +``` + + + +```py +>>> from transformers import DataCollatorForSeq2Seq + +>>> data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint, return_tensors="tf") +``` + + + +## تقييم + +غالبًا ما يكون تضمين مقياس أثناء التدريب مفيدًا لتقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة باستخدام مكتبة 🤗 [Evaluate](https://huggingface.co/docs/evaluate/index). بالنسبة لهذه المهمة، قم بتحميل مقياس [SacreBLEU](https://huggingface.co/spaces/evaluate-metric/sacrebleu) (راجع دليل المستخدم الخاص بـ 🤗 Evaluate [quick tour](https://huggingface.co/docs/evaluate/a_quick_tour) لمعرفة المزيد حول كيفية تحميل وحساب مقياس): + +```py +>>> import evaluate + +>>> metric = evaluate.load("sacrebleu") +``` + +ثم قم بإنشاء دالة تمرر تنبؤاتك وتصنيفاتك إلى [`~evaluate.EvaluationModule.compute`] لحساب درجة SacreBLEU: + +```py +>>> import numpy as np + + +>>> def postprocess_text(preds، labels): +... preds = [pred.strip() for pred in preds] +... labels = [[label.strip()] for label in labels] + +... return preds, labels + + +>>> def compute_metrics(eval_preds): +... preds, labels = eval_preds +... if isinstance(preds, tuple): +... preds = preds[0] +... decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True) + +... labels = np.where(labels != -100, labels, tokenizer.pad_token_id) +... decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True) + +... decoded_preds, decoded_labels = postprocess_text(decoded_preds, decoded_labels) + +... result = metric.compute(predictions=decoded_preds, references=decoded_labels) +... result = {"bleu": result["score"]} + +... prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in preds] +... result["gen_len"] = np.mean(prediction_lens) +... result = {k: round(v, 4) for k, v in result.items()} +... return result +``` + +دالتك `compute_metrics` جاهزة الآن، وستعود إليها عند إعداد التدريب. + +## تدريب + + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام [`Trainer`، فراجع البرنامج التعليمي الأساسي [here](../training#train-with-pytorch-trainer)! + + + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل T5 باستخدام [`AutoModelForSeq2SeqLM`]: + +```py +>>> from transformers import AutoModelForSeq2SeqLM, Seq2SeqTrainingArguments, Seq2SeqTrainer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد فرط معلمات التدريب الخاصة بك في [`Seq2SeqTrainingArguments`]. المعلمة المطلوبة الوحيدة هي `output_dir` التي تحدد مكان حفظ نموذجك. ستقوم بالدفع إلى Hub عن طريق تعيين `push_to_hub=True` (يجب تسجيل الدخول إلى Hugging Face لتحميل نموذجك). في نهاية كل حقبة، سيقوم [`Trainer`] بتقييم مقياس SacreBLEU وحفظ نقطة المراقبة التدريبية. +2. مرر حجة التدريب إلى [`Seq2SeqTrainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات وبرنامج الترميز ومجمِّع البيانات ووظيفة `compute_metrics`. +3. استدعاء [`~Trainer.train`] لضبط نموذجك بشكل دقيق. + +```py +>>> training_args = Seq2SeqTrainingArguments( +... output_dir="my_awesome_opus_books_model"، +... eval_strategy="epoch"، +... learning_rate=2e-5، +... per_device_train_batch_size=16، +... per_device_eval_batch_size=16، +... weight_decay=0.01، +... save_total_limit=3، +... num_train_epochs=2، +... predict_with_generate=True، +... fp16=True، +... push_to_hub=True، +... ) + +>>> trainer = Seq2SeqTrainer( +... model=model، +... args=training_args، +... train_dataset=tokenized_books["train"]، +... eval_dataset=tokenized_books["test"]، +... tokenizer=tokenizer، +... data_collator=data_collator، +... compute_metrics=compute_metrics، +... ) + +>>> trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + + + + +إذا لم تكن على دراية بضبط نموذج باستخدام Keras، فراجع البرنامج التعليمي الأساسي [here](../training#train-a-tensorflow-model-with-keras)! + + +لضبط نموذج دقيق في TensorFlow، ابدأ بإعداد دالة محسن ومعدل تعلم وبعض فرط معلمات التدريب: + +```py +>>> from transformers import AdamWeightDecay + +>>> optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01) +``` + +بعد ذلك، يمكنك تحميل T5 باستخدام [`TFAutoModelForSeq2SeqLM`]: + +```py +>>> from transformers import TFAutoModelForSeq2SeqLM + +>>> model = TFAutoModelForSeq2SeqLM.from_pretrained(checkpoint) +``` + +قم بتحويل مجموعات البيانات الخاصة بك إلى تنسيق `tf.data.Dataset` باستخدام [`~transformers.TFPreTrainedModel.prepare_tf_dataset`]: + +```py +>>> tf_train_set = model.prepare_tf_dataset( +... tokenized_books["train"]، +... shuffle=True، +... batch_size=16، +... collate_fn=data_collator، +... ) + +>>> tf_test_set = model.prepare_tf_dataset( +... tokenized_books["test"]، +... shuffle=False، +... batch_size=16، +... collate_fn=data_collator، +... ) +``` + +قم بتكوين النموذج للتدريب باستخدام [`compile`](https://keras.io/api/models/model_training_apis/#compile-method). لاحظ أن جميع نماذج Transformers بها دالة خسارة افتراضية ذات صلة بالمهمة، لذلك لا تحتاج إلى تحديد واحدة ما لم ترغب في ذلك: + +```py +>>> import tensorflow as tf + +>>> model.compile(optimizer=optimizer) # لا توجد حجة الخسارة! +``` + +الأمران الأخيران اللذان يجب إعدادهما قبل بدء التدريب هما حساب مقياس SacreBLEU من التنبؤات، وتوفير طريقة لدفع نموذجك إلى Hub. يتم ذلك باستخدام [Keras callbacks](../main_classes/keras_callbacks). + +مرر دالتك `compute_metrics` إلى [`~transformers.KerasMetricCallback`]: + +```py +>>> from transformers.keras_callbacks import KerasMetricCallback + +>>> metric_callback = KerasMetricCallback(metric_fn=compute_metrics, eval_dataset=tf_validation_set) +``` + +حدد المكان الذي ستدفع فيه نموذجك وبرنامج الترميز الخاص بك في [`~transformers.PushToHubCallback`]: + +```py +>>> from transformers.keras_callbacks import PushToHubCallback + +>>> push_to_hub_callback = PushToHubCallback( +... output_dir="my_awesome_opus_books_model"، +... tokenizer=tokenizer، +... ) +``` + +بعد ذلك، قم بتجميع مكالماتك مرة أخرى: + +```py +>>> callbacks = [metric_callback, push_to_hub_callback] +``` +ثم قم بتجميع مكالماتك مرة أخرى: + +```py +>>> callbacks = [metric_callback, push_to_hub_callback] +``` + +أخيرًا، أنت مستعد لبدء تدريب نموذجك! استدعاء [`fit`](https://keras.io/api/models/model_training_apis/#fit-method) مع مجموعات البيانات التدريبية والتحقق من صحتها، وعدد العصور، ومكالماتك لضبط نموذجك: + +```py +>>> model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=3, callbacks=callbacks) +``` + +بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه! + + + + + +للحصول على مثال أكثر شمولاً حول كيفية ضبط نموذج للترجمة، راجع الدفتر المناسب +[دفتر ملاحظات PyTorch](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/translation.ipynb) +أو [دفتر ملاحظات TensorFlow](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/translation-tf.ipynb). + + + +## الاستنتاج + +رائع، الآن بعد أن ضبطت نموذجًا، يمكنك استخدامه للاستنتاج! + +فكر في بعض النصوص التي ترغب في ترجمتها إلى لغة أخرى. بالنسبة لـ T5، يجب إضافة بادئة إلى إدخالك وفقًا للمهمة التي تعمل عليها. للترجمة من الإنجليزية إلى الفرنسية، يجب إضافة بادئة إلى إدخالك كما هو موضح أدناه: + +```py +>>> text = "translate English to French: Legumes share resources with nitrogen-fixing bacteria." +``` + +أبسط طريقة لتجربة نموذجك الدقيق للاستنتاج هي استخدامه في [`pipeline`]. قم بتنفيذ مثيل لـ `pipeline` للترجمة باستخدام نموذجك، ومرر نصك إليه: + +```py +>>> from transformers import pipeline + +# تغيير `xx` إلى لغة الإدخال و`yy` إلى لغة الإخراج المطلوبة. +# أمثلة: "en" للإنجليزية، "fr" للفرنسية، "de" للألمانية، "es" للإسبانية، "zh" للصينية، إلخ؛ translation_en_to_fr يترجم من الإنجليزية إلى الفرنسية +# يمكنك عرض جميع قوائم اللغات هنا - https://huggingface.co/languages +>>> translator = pipeline("translation_xx_to_yy"، model="my_awesome_opus_books_model") +>>> translator(text) +[{'translation_text': 'Legumes partagent des ressources avec des bactéries azotantes.'}] +``` + +يمكنك أيضًا إعادة إنتاج نتائج `pipeline` يدويًا: + + + +قم بترميز النص وإرجاع `input_ids` كرموز PyTorch: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("my_awesome_opus_books_model") +>>> inputs = tokenizer(text, return_tensors="pt").input_ids +``` + +استخدم طريقة [`~generation.GenerationMixin.generate`] لإنشاء الترجمة. لمزيد من التفاصيل حول استراتيجيات توليد النص المختلفة والمعلمات للتحكم في التوليد، راجع واجهة برمجة التطبيقات [Text Generation](../main_classes/text_generation). + +```py +>>> from transformers import AutoModelForSeq2SeqLM + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("my_awesome_opus_books_model") +>>> outputs = model.generate(inputs, max_new_tokens=40, do_sample=True, top_k=30, top_p=0.95) +``` +قم بفك تشفير رموز المعرفات المولدة مرة أخرى إلى نص: + +```py +>>> tokenizer.decode(outputs[0]، skip_special_tokens=True) +"Les lignées partagent des ressources avec des bactéries enfixant l'azote." +``` + + +قم برمز النص وإرجاع `input_ids` كرموز TensorFlow: + +```py +>>> from transformers import AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("my_awesome_opus_books_model") +>>> inputs = tokenizer(text، return_tensors="tf").input_ids +``` + +استخدم طريقة [`~transformers.generation_tf_utils.TFGenerationMixin.generate`] لإنشاء الترجمة. لمزيد من التفاصيل حول استراتيجيات إنشاء النصوص المختلفة ومعلمات التحكم في الإنشاء، راجع واجهة برمجة التطبيقات [Text Generation](../main_classes/text_generation). + +```py +>>> from transformers import TFAutoModelForSeq2SeqLM + +>>> model = TFAutoModelForSeq2SeqLM.from_pretrained("my_awesome_opus_books_model") +>>> outputs = model.generate(inputs، max_new_tokens=40، do_sample=True، top_k=30، top_p=0.95) +``` + +قم بفك تشفير رموز المعرفات المولدة مرة أخرى إلى نص: + +```py +>>> tokenizer.decode(outputs[0]، skip_special_tokens=True) +"Les lugumes partagent les ressources avec des bactéries fixatrices d'azote." +``` + + \ No newline at end of file From a813185a1f76a3eb16d5539d150f691a1ccb7638 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:44:03 +0300 Subject: [PATCH 103/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/video=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/tasks/video_classification.md | 500 +++++++++++++++++++ 1 file changed, 500 insertions(+) create mode 100644 docs/source/ar/tasks/video_classification.md diff --git a/docs/source/ar/tasks/video_classification.md b/docs/source/ar/tasks/video_classification.md new file mode 100644 index 00000000000000..21281a6001275e --- /dev/null +++ b/docs/source/ar/tasks/video_classification.md @@ -0,0 +1,500 @@ +# تصنيف الفيديو + +[[open-in-colab]] + +تصنيف الفيديو هو مهمة تعيين تسمية أو فئة لفيديو كامل. من المتوقع أن يكون لكل فيديو فئة واحدة فقط. تتلقى نماذج تصنيف الفيديو فيديو كمدخلات وتعيد تنبؤًا بالفئة التي ينتمي إليها الفيديو. يمكن استخدام هذه النماذج لتصنيف محتوى الفيديو. أحد التطبيقات الواقعية لتصنيف الفيديو هو التعرف على الإجراءات/الأنشطة، وهو مفيد لتطبيقات اللياقة البدنية. كما أنه يساعد الأشخاص ضعاف البصر، خاصة عند التنقل. + +سيوضح هذا الدليل كيفية: + +1. ضبط نموذج [VideoMAE](https://huggingface.co/docs/transformers/main/en/model_doc/videomae) على مجموعة فرعية من مجموعة بيانات [UCF101](https://www.crcv.ucf.edu/data/UCF101.php). +2. استخدام نموذجك المضبوط للتنبؤ. + + + +لمعرفة جميع البنى ونقاط المراقبة المتوافقة مع هذه المهمة، نوصي بالتحقق من [صفحة المهمة](https://huggingface.co/tasks/video-classification). + + + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install -q pytorchvideo transformers evaluate +``` + +ستستخدم [PyTorchVideo](https://pytorchvideo.org/) (المسماة `pytorchvideo`) لمعالجة الفيديوهات وإعدادها. + +نحن نشجعك على تسجيل الدخول إلى حساب Hugging Face الخاص بك حتى تتمكن من تحميل نموذجك ومشاركته مع المجتمع. عندما يُطلب منك ذلك، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +## تحميل مجموعة بيانات UCF101 + +ابدأ بتحميل مجموعة فرعية من [مجموعة بيانات UCF-101](https://www.crcv.ucf.edu/data/UCF101.php). سيعطيك هذا فرصة للتجربة والتأكد من أن كل شيء يعمل قبل قضاء المزيد من الوقت في التدريب على مجموعة البيانات الكاملة. + +```py +>>> from huggingface_hub import hf_hub_download + +>>> hf_dataset_identifier = "sayakpaul/ucf101-subset" +>>> filename = "UCF101_subset.tar.gz" +>>> file_path = hf_hub_download(repo_id=hf_dataset_identifier, filename=filename, repo_type="dataset") +``` + +بعد تنزيل المجموعة الفرعية، تحتاج إلى استخراج الأرشيف المضغوط: + +```py +>>> import tarfile + +>>> with tarfile.open(file_path) as t: +... t.extractall(".") +``` + +بشكل عام، يتم تنظيم مجموعة البيانات على النحو التالي: + +```bash +UCF101_subset/ + train/ + BandMarching/ + video_1.mp4 + video_2.mp4 + ... + Archery + video_1.mp4 + video_2.mp4 + ... + ... + val/ + BandMarching/ + video_1.mp4 + video_2.mp4 + ... + Archery + video_1.mp4 + video_2.mp4 + ... + ... + test/ + BandMarching/ + video_1.mp4 + video_2.mp4 + ... + Archery + video_1.mp4 + video_2.mp4 + ... + ... +``` + +بعد ذلك، يمكنك حساب عدد مقاطع الفيديو الإجمالية. + +```py +>>> import pathlib +>>> dataset_root_path = "UCF101_subset" +>>> dataset_root_path = pathlib.Path(dataset_root_path) +``` + +```py +>>> video_count_train = len(list(dataset_root_path.glob("train/*/*.avi"))) +>>> video_count_val = len(list(dataset_root_ +path.glob("val/*/*.avi"))) +>>> video_count_test = len(list(dataset_root_path.glob("test/*/*.avi"))) +>>> video_total = video_count_train + video_count_val + video_count_test +>>> print(f"Total videos: {video_total}") +``` + +```py +>>> all_video_file_paths = ( +... list(dataset_root_path.glob("train/*/*.avi")) +... + list(dataset_root_path.glob("val/*/*.avi")) +... + list(dataset_root_path.glob("test/*/*.avi")) +... ) +>>> all_video_file_paths[:5] +``` + +تظهر مسارات الفيديو (المُرتبة) على النحو التالي: + +```bash +... +'UCF101_subset/train/ApplyEyeMakeup/v_ApplyEyeMakeup_g07_c04.avi', +'UCF101_subset/train/ApplyEyeMakeup/v_ApplyEyeMakeup_g07_c06.avi', +'UCF101_subset/train/ApplyEyeMakeup/v_ApplyEyeMakeup_g08_c01.avi', +'UCF101_subset/train/ApplyEyeMakeup/v_ApplyEyeMakeup_g09_c02.avi', +'UCF101_subset/train/ApplyEyeMakeup/v_ApplyEyeMakeup_g09_c06.avi' +... +``` + +ستلاحظ أن هناك مقاطع فيديو تنتمي إلى نفس المجموعة/المشهد حيث تُشير المجموعة إلى "g" في مسارات ملفات الفيديو. على سبيل المثال، `v_ApplyEyeMakeup_g07_c04.avi` و `v_ApplyEyeMakeup_g07_c06.avi` . + +بالنسبة لعمليات التقسيم والتحقق من الصحة، لا تريد أن تكون لديك مقاطع فيديو من نفس المجموعة/المشهد لمنع [تسرب البيانات](https://www.kaggle.com/code/alexisbcook/data-leakage). تأخذ المجموعة الفرعية التي تستخدمها في هذا البرنامج التعليمي هذه المعلومات في الاعتبار. + +بعد ذلك، ستقوم باستنتاج مجموعة العلامات الموجودة في مجموعة البيانات. كما ستقوم بإنشاء قاموسين سيكونان مفيدين عند تهيئة النموذج: + +* `label2id`: يقوم بتعيين أسماء الفئات إلى أعداد صحيحة. +* `id2label`: يقوم بتعيين الأعداد الصحيحة إلى أسماء الفئات. + +```py +>>> class_labels = sorted({str(path).split("/")[2] for path in all_video_file_paths}) +>>> label2id = {label: i for i, label in enumerate(class_labels)} +>>> id2label = {i: label for label, i in label2id.items()} + +>>> print(f"Unique classes: {list(label2id.keys())}.") + +# Unique classesة: ['ApplyEyeMakeup'، 'ApplyLipstick'، 'Archery'، 'BabyCrawling'، 'BalanceBeam'، 'BandMarching'، 'BaseballPitch'، 'Basketball'، 'BasketballDunk'، 'BenchPress']. +``` + +هناك 10 فئات فريدة. لكل فئة، هناك 30 مقطع فيديو في مجموعة التدريب. + +## تحميل نموذج لضبط دقيق + +قم بتهيئة نموذج تصنيف فيديو من نقطة تفتيش مُدربة مسبقًا ومعالج الصور المرتبط بها. يحتوي مشفر النموذج على معلمات مُدربة مسبقًا، ورأس التصنيف مُهيأ بشكل عشوائي. سيكون معالج الصور مفيدًا عند كتابة خط أنابيب المعالجة المسبقة لمجموعة البيانات الخاصة بنا. + +```py +>>> from transformers import VideoMAEImageProcessor, VideoMAEForVideoClassification + +>>> model_ckpt = "MCG-NJU/videomae-base" +>>> image_processor = VideoMAEImageProcessor.from_pretrained(model_ckpt) +>>> model = VideoMAEForVideoClassification.from_pretrained( +... model_ckpt, +... label2id=label2id, +... id2label=id2label, +... ignore_mismatched_sizes=True, # قم بتوفير هذا في حالة كنت تخطط لضبط دقيق لنقطة تفتيش مُدربة بالفعل +... ) +``` + +بينما يتم تحميل النموذج، قد تلاحظ التحذير التالي: + +```bash +Some weights of the model checkpoint at MCG-NJU/videomae-base were not used when initializing VideoMAEForVideoClassification: [..., 'decoder.decoder_layers.1.attention.output.dense.bias', 'decoder.decoder_layers.2.attention.attention.key.weight'] +- This IS expected if you are initializing VideoMAEForVideoClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model). +- This IS NOT expected if you are initializing VideoMAEForVideoClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model). +Some weights of VideoMAEForVideoClassification were not initialized from the model checkpoint at MCG-NJU/videomae-base and are newly initialized: ['classifier.bias', 'classifier.weight'] +You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference. +``` + +يُخبرنا التحذير أننا نقوم بحذف بعض الأوزان (مثل أوزان وانحياز طبقة "المصنف") وتهيئة بعض الأوزان الأخرى بشكل عشوائي (أوزان وانحياز طبقة "مصنف" جديدة). هذا متوقع في هذه الحالة، لأننا نقوم بإضافة رأس جديد لا تتوفر له أوزان مُدربة مسبقًا، لذا يحذرنا البرنامج من أنه يجب علينا ضبط النموذج دقيقًا قبل استخدامه للتنبؤ، وهو ما سنقوم به بالضبط. + +**ملاحظة**: أن [هذه النقطة](https://huggingface.co/MCG-NJU/videomae-base-finetuned-kinetics) تؤدي إلى أداء أفضل في هذه المهمة لأن نقطة التفتيش تم الحصول عليها عن طريق الضبط الدقيق على مهمة أسفل مجرى مماثلة ذات تداخل كبير في النطاق. يمكنك التحقق من [هذه النقطة](https://huggingface.co/sayakpaul/videomae-base-finetuned-kinetics-finetuned-ucf101-subset) والتي تم الحصول عليها عن طريق الضبط الدقيق لـ `MCG-NJU/videomae-base-finetuned-kinetics`. + +## إعداد مجموعات البيانات للتدريب + +لمعالجة مقاطع الفيديو مسبقًا، ستستخدم مكتبة [PyTorchVideo](https://pytorchvideo.org/). ابدأ باستيراد التبعيات التي نحتاجها. + +```py +>>> import pytorchvideo.data + +>>> from pytorchvideo.transforms import ( +... ApplyTransformToKey, +... Normalize, +... RandomShortSideScale, +... RemoveKey, +... ShortSideScale, +... UniformTemporalSubsample, +... ) + +>>> from torchvision.transforms import ( +... Compose, +... Lambda, +... RandomCrop, +... RandomHorizontalFlip, +... Resize, +... ) +``` + +بالنسبة لتحويلات مجموعة بيانات التدريب، استخدم مزيجًا من الاستعيان الزمني الموحد، وتطبيع البكسل، والتقطيع العشوائي، والانعكاس الأفقي العشوائي. بالنسبة لتحويلات مجموعة بيانات التحقق من الصحة والتقييم، احتفظ بنفس تسلسل التحولات باستثناء التقطيع العشوائي والانعكاس الأفقي. لمزيد من المعلومات حول تفاصيل هذه التحولات، راجع [الوثائق الرسمية لـ PyTorchVideo](https://pytorchvideo.org). + +استخدم `image_processor` المرتبط بالنموذج المُدرب مسبقًا للحصول على المعلومات التالية: + +* متوسط الانحراف المعياري للصورة التي سيتم تطبيعها معها بكسل إطار الفيديو. +* الدقة المكانية التي سيتم تغيير حجم إطارات الفيديو إليها. + +ابدأ بتحديد بعض الثوابت. + +```py +>>> mean = image_processor.image_mean +>>> std = image_processor.image_std +>>> if "shortest_edge" in image_processor.size: +... height = width = image_processor.size["shortest_edge"] +>>> else: +... height = image_processor.size["height"] +... width = image_processor.size["width"] +>>> resize_to = (height, width) + +>>> num_frames_to_sample = model.config.num_frames +>>> sample_rate = 4 +>>> fps = 30 +>>> clip_duration = num_frames_to_sample * sample_rate / fps +``` + +الآن، قم بتعريف تحويلات مجموعة البيانات المحددة ومجموعات البيانات على التوالي. بدءًا من مجموعة التدريب: + +```py +>>> train_transform = Compose( +... [ +... ApplyTransformToKey( +... key="video", +... transform=Compose( +... [ +... UniformTemporalSubsample(num_frames_to_sample), +... Lambda(lambda x: x / 255.0), +... Normalize(mean, std), +... RandomShortSideScale(min_size=256, max_size=320), +... RandomCrop(resize_to), +... RandomHorizontalFlip(p=0.5), +... ] +... ), +... ), +... ] +... ) + +>>> train_dataset = pytorchvideo.data.Ucf101( +... data_path=os.path.join(dataset_root_path, "train"), +... clip_sampler=pytorchvideo.data.make_clip_sampler("random", clip_duration), +... decode_audio=False, +... transform=train_transform, +... ) +``` + +يمكن تطبيق نفس تسلسل سير العمل على مجموعات التحقق من الصحة والتقييم: + +```py +>>> val_transform = Compose( +... [ +... ApplyTransformToKey( +... key="video", +... transform=Compose( +... [ +... UniformTemporalSubsample(num_frames_to_sample), +... Lambda(lambda x: x / 255.0), +... Normalize(mean, std), +... Resize(resize_to), +... ] +... ), +... ), +... ] +... ) + +>>> val_dataset = pytorchvideo.data.Ucf101( +... data_path=os.path.min(dataset_root_path, "val"), +... clip_sampler=pytorchvideo.data.make_clip_sampler("uniform", clip_duration), +... decode_audio=False, +... transform=val_transform, +... ) + +>>> test_dataset = pytorchvideo.data.Ucf101( +... data_path=os.path.join(dataset_root_path, "test"), +... clip_sampler=pytorchvideo.data.make_clip_sampler("uniform", clip_duration), +... decode_audio=False, +... transform=val_transform, +... ) +``` + +**ملاحظة**: تم أخذ خطوط أنابيب مجموعة البيانات أعلاه من [مثال PyTorchVideo الرسمي](https://pytorchvideo.org/docs/tutorial_classification#dataset). نحن نستخدم الدالة [`pytorchvideo.data.Ucf101()`](https://pytorchvideo.readthedocs.io/en/latest/api/data/data.html#pytorchvideo.data.Ucf101) لأنها مصممة خصيصًا لمجموعة بيانات UCF-101. في الأساس، فإنه يعيد كائن [`pytorchvideo.data.labeled_video_dataset.LabeledVideoDataset`](https://pytorchvideo.readthedocs.io/en/latest/api/data/data.html#pytorchvideo.data.LabeledVideoDataset). تعد فئة `LabeledVideoDataset` الفئة الأساسية لجميع مقاطع الفيديو في مجموعة بيانات PyTorchVideo. لذلك، إذا كنت تريد استخدام مجموعة بيانات مخصصة غير مدعومة افتراضيًا بواسطة PyTorchVideo، فيمكنك توسيع فئة `LabeledVideoDataset` وفقًا لذلك. راجع وثائق [API للبيانات](https://pytorchvideo.readthedocs.io/en/latest/api/data/data.html) لمعرفة المزيد. أيضًا، إذا كانت مجموعة البيانات الخاصة بك تتبع بنية مماثلة (كما هو موضح أعلاه)، فإن استخدام `pytorchvideo.data.Ucf101()` يجب أن يعمل بشكل جيد. + +يمكنك الوصول إلى وسيط `num_videos` لمعرفة عدد مقاطع الفيديو في مجموعة البيانات. + +```py +>>> print(train_dataset.num_videos, val_dataset.num_videos, test_dataset.num_videos) +# (300، 30، 75) +``` + +## تصور الفيديو المعالج مسبقًا للتصحيح الأفضل + +```py +>>> import imageio +>>> import numpy as np +>>> from IPython.display import Image + +>>> def unnormalize_img(img): +... """Un-normalizes the image pixels.""" +... img = (img * std) + mean +... img = (img * 255).astype("uint8") +... return img.clip(0, 255) + +>>> def create_gif(video_tensor, filename="sample.gif"): +... """Prepares a GIF from a video tensor. +... +... The video tensor is expected to have the following shape: +... (num_frames, num_channels, height, width). +... """ +... frames = [] +... for video_frame in video_tensor: +... frame_unnormalized = unnormalize_img(video_frame.permute(1, 2, 0).numpy()) +... frames.append(frame_unnormalized) +... kargs = {"duration": 0.25} +... imageio.mimsave(filename, frames, "GIF", **kargs) +... return filename + +>>> def display_gif(video_tensor, gif_name="sample.gif"): +... """Prepares and displays a GIF from a video tensor.""" +... video_tensor = video_tensor.permute(1, 0, 2, 3) +... gif_filename = create_gif(video_tensor, gif_name) +... return Image(filename=gif_filename) + +>>> sample_video = next(iter(train_dataset)) +>>> video_tensor = sample_video["video"] +>>> display_gif(video_tensor) +``` + +
+ Person playing basketball +
+ +## تدريب النموذج + +استفد من [`Trainer`](https://huggingface.co/docs/transformers/main_classes/trainer) من 🤗 Transformers لتدريب النموذج. لتهيئة مثيل لـ `Trainer`، تحتاج إلى تحديد تكوين التدريب ومقاييس التقييم. والأهم من ذلك هو [`TrainingArguments`](https://huggingface.co/transformers/main_classes/trainer.html#transformers.TrainingArguments)، وهي فئة تحتوي على جميع السمات لتكوين التدريب. يتطلب اسم مجلد الإخراج، والذي سيتم استخدامه لحفظ نقاط التفتيش للنموذج. كما يساعد في مزامنة جميع المعلومات في مستودع النموذج على 🤗 Hub. + +معظم الحجج التدريبية واضحة، ولكن هناك واحدة مهمة جدًا هنا هي `remove_unused_columns=False`. سيؤدي هذا إلى إسقاط أي ميزات لا يستخدمها الدالة call الخاصة بالنموذج. بشكل افتراضي، يكون True لأنه من المثالي عادةً إسقاط أعمدة الميزات غير المستخدمة، مما يجعل من السهل تفكيك الإدخالات في دالة الاستدعاء الخاصة بالنموذج. ولكن، في هذه الحالة، فأنت بحاجة إلى الميزات غير المستخدمة ('video' على وجه الخصوص) من أجل إنشاء 'pixel_values' (وهو مفتاح إلزامي يتوقعه نموذجنا في إدخالاته). + + +```py +>>> from transformers import TrainingArguments، Trainer + +>>> model_name = model_ckpt.split("/")[-1] +>>> new_model_name = f"{model_name}-finetuned-ucf101-subset" +>>> num_epochs = 4 + +>>> args = TrainingArguments( +... new_model_name، +... remove_unused_columns=False، +... eval_strategy="epoch"، +... save_strategy="epoch"، +... learning_rate=5e-5، +... per_device_train_batch_size=batch_size، +... per_device_eval_batch_size=batch_size، +... warmup_ratio=0.1، +... logging_steps=10، +... load_best_model_at_end=True، +... metric_for_best_model="accuracy"، +... push_to_hub=True، +... max_steps=(train_dataset.num_videos // batch_size) * num_epochs، +... ) +``` + +مجموعة البيانات التي تم إرجاعها بواسطة `pytorchvideo.data.Ucf101()` لا تنفذ طريقة `__len__`. لذلك، يجب علينا تحديد `max_steps` عند إنشاء مثيل لـ `TrainingArguments`. + +بعد ذلك، تحتاج إلى تحديد دالة لحساب المقاييس من التوقعات، والتي ستستخدم `metric` التي ستقوم بتحميلها الآن. المعالجة المسبقة الوحيدة التي يجب عليك القيام بها هي أخذ argmax من logits المتوقعة: + +```py +import evaluate + +metric = evaluate.load("accuracy") + + +def compute_metrics(eval_pred): + predictions = np.argmax(eval_pred.predictions, axis=1) + return metric.compute(predictions=predictions, references=eval_pred.label_ids) +``` + +**ملاحظة حول التقييم**: + +في [ورقة VideoMAE](https://arxiv.org/abs/2203.12602)، يستخدم المؤلفون استراتيجية التقييم التالية. حيث يقومون بتقييم النموذج على عدة مقاطع من مقاطع الفيديو الاختبارية وتطبيق تقطيعات مختلفة على تلك المقاطع والإبلاغ عن النتيجة الإجمالية. ومع ذلك، حرصًا على البساطة والإيجاز، لا نأخذ ذلك في الاعتبار في هذا البرنامج التعليمي. + +قم أيضًا بتعريف `collate_fn`، والتي ستُستخدم لدمج الأمثلة في مجموعات. تتكون كل مجموعة من مفتاحين، وهما `pixel_values` و`labels`. + +```py +>>> def collate_fn(examples): + # permute to (num_frames, num_channels, height, width) + pixel_values = torch.stack( + [example["video"].permute(1, 0, 2, 3) for example in examples] + ) + labels = torch.tensor([example["label"] for example in examples]) + return {"pixel_values": pixel_values, "labels": labels} +``` + +بعد ذلك، قم ببساطة بتمرير كل هذا بالإضافة إلى مجموعات البيانات إلى `Trainer`: + +```py +>>> trainer = Trainer( + model, + args, + train_dataset=train_dataset, + eval_dataset=val_dataset, + tokenizer=image_processor, + compute_metrics=compute_metrics, + data_collator=collate_fn, +) +``` + +قد تتساءل عن سبب تمرير `image_processor` كـ tokenizer على الرغم من أنك قمت بمعالجة البيانات بالفعل. هذا فقط للتأكد من أن ملف تكوين معالج الصور (المخزن بتنسيق JSON) سيتم تحميله أيضًا إلى المستودع على Hub. + +الآن، نقوم بضبط نموذجنا عن طريق استدعاء طريقة `train`: + +```py +>>> train_results = trainer.train() +``` + +بمجرد اكتمال التدريب، شارك نموذجك على Hub باستخدام طريقة [`~transformers.Trainer.push_to_hub`] حتى يتمكن الجميع من استخدام نموذجك: + +```py +>>> trainer.push_to_hub() +``` + +## الاستنتاج + +رائع، الآن بعد أن ضبطت نموذجًا، يمكنك استخدامه للاستنتاج! + +قم بتحميل مقطع فيديو للاستنتاج: + +```py +>>> sample_test_video = next(iter(test_dataset)) +``` + +
+ فرق تلعب كرة السلة +
+ +أبسط طريقة لتجربة نموذجك المضبوط للاستنتاج هي استخدامه في [`pipeline`](https://huggingface.co/docs/transformers/main/en/main_classes/pipelines#transformers.VideoClassificationPipeline). قم بتنفيذ عملية أنابيب لتصنيف الفيديو باستخدام نموذجك، ومرر الفيديو إليه: + +```py +>>> from transformers import pipeline + +>>> video_cls = pipeline(model="my_awesome_video_cls_model") +>>> video_cls("https://huggingface.co/datasets/sayakpaul/ucf101-subset/resolve/main/v_BasketballDunk_g14_c06.avi") +[{'score': 0.9272987842559814, 'label': 'BasketballDunk'}, + {'score': 0.017777055501937866, 'label': 'BabyCrawling'}, + {'score': 0.01663011871278286, 'label': 'BalanceBeam'}, + {'score': 0.009560945443809032, 'label': 'BandMarching'}, + {'score': 0.0068979403004050255, 'label': 'BaseballPitch'}] +``` + +يمكنك أيضًا محاكاة نتائج الأنابيب يدويًا إذا أردت. + +```py +>>> def run_inference(model, video): + # (num_frames, num_channels, height, width) + perumuted_sample_test_video = video.permute(1, 0, 2, 3) + inputs = { + "pixel_values": perumuted_sample_test_video.unsqueeze(0), + "labels": torch.tensor( + [sample_test_video["label"]] + ), # يمكن تخطي هذا إذا لم تكن لديك تسميات متاحة. + } + + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + inputs = {k: v.to(device) for k, v in inputs.items()} + model = model.to(device) + + # forward pass + with torch.no_grad(): + outputs = model(**inputs) + logits = outputs.logits + + return logits +``` + +الآن، قم بتمرير إدخالك إلى النموذج وإرجاع `logits`: + +```py +>>> logits = run_inference(trained_model, sample_test_video["video"]) +``` + +بعد فك تشفير `logits`، نحصل على: + +```py +>>> predicted_class_idx = logits.argmax(-1).item() +>>> print("Predicted class:", model.config.id2label[predicted_class_idx]) +# Predicted class: BasketballDunk +``` \ No newline at end of file From f7c5b42485b7128f65707831faaa8c811a796039 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:44:05 +0300 Subject: [PATCH 104/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/visual=5Fquestion=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/tasks/visual_question_answering.md | 380 ++++++++++++++++++ 1 file changed, 380 insertions(+) create mode 100644 docs/source/ar/tasks/visual_question_answering.md diff --git a/docs/source/ar/tasks/visual_question_answering.md b/docs/source/ar/tasks/visual_question_answering.md new file mode 100644 index 00000000000000..7ffafd5ae677a2 --- /dev/null +++ b/docs/source/ar/tasks/visual_question_answering.md @@ -0,0 +1,380 @@ +# الإجابة على الأسئلة البصرية + +[[open-in-colab]] + +الإجابة على الأسئلة البصرية (VQA) هي مهمة الإجابة على الأسئلة المفتوحة بناءً على صورة. عادةً ما يكون الإدخال إلى النماذج التي تدعم هذه المهمة عبارة عن مزيج من الصورة والسؤال، والمخرج هو إجابة معبر عنها باللغة الطبيعية. + +فيما يلي بعض أمثلة حالات الاستخدام الجديرة بالملاحظة لـ VQA: + +- تطبيقات الوصول لمساعدة الأفراد ذوي الإعاقة البصرية. +- التعليم: طرح أسئلة حول المواد المرئية المقدمة في المحاضرات أو الكتب المدرسية. يمكن أيضًا استخدام VQA في المعارض التفاعلية في المتاحف أو المواقع التاريخية. +- خدمة العملاء والتجارة الإلكترونية: يمكن لـ VQA تعزيز تجربة المستخدم من خلال السماح للمستخدمين بطرح أسئلة حول المنتجات. +- استرجاع الصور: يمكن استخدام نماذج VQA لاسترداد الصور ذات الخصائص المحددة. على سبيل المثال، يمكن للمستخدم أن يسأل "هل هناك كلب؟" للعثور على جميع الصور التي تحتوي على كلاب من مجموعة من الصور. + +في هذا الدليل، ستتعلم كيفية: + +- ضبط نموذج تصنيف VQA، وتحديدًا [ViLT]، على مجموعة بيانات [`Graphcore/vqa`] +- استخدام ViLT المضبوط مسبقًا للاستنتاج. +- تشغيل الاستدلال VQA بدون بيانات باستخدام نموذج توليدي، مثل BLIP-2. + +## ضبط ViLT + +يضم نموذج ViLT تضمين النص في محول الرؤية (ViT)، مما يسمح له بتصميم الحد الأدنى للتعلم المسبق للرؤية واللغة (VLP). يمكن استخدام هذا النموذج لعدة مهام أسفل النهر. لمهمة VQA، يتم وضع رأس مصنف أعلى (طبقة خطية أعلى الحالة المخفية النهائية للرمز `[CLS]`) ويتم تهيئتها بشكل عشوائي. وبالتالي، يتم التعامل مع الإجابة على الأسئلة البصرية كمشكلة **تصنيف**. + +تتعامل النماذج الأحدث، مثل BLIP وBLIP-2 وInstructBLIP، مع VQA كمهمة توليدية. في وقت لاحق من هذا الدليل، نوضح كيفية استخدامها للاستدلال VQA بدون بيانات. + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية. + +```bash +pip install -q transformers datasets +``` + +نحن نشجعك على مشاركة نموذجك مع المجتمع. قم بتسجيل الدخول إلى حساب Hugging Face الخاص بك لتحميله إلى 🤗 Hub. +عند المطالبة، أدخل رمزك للتسجيل: + +```py +>>> from huggingface_hub import notebook_login + +>>> notebook_login() +``` + +دعنا نحدد نقطة تفتيش النموذج كمتغير عالمي. + +```py +>>> model_checkpoint = "dandelin/vilt-b32-mlm" +``` + +## تحميل البيانات + +لأغراض التوضيح، في هذا الدليل، نستخدم عينة صغيرة جدًا من مجموعة بيانات الإجابة على الأسئلة البصرية المُعلَّمة `Graphcore/vqa`. +يمكنك العثور على مجموعة البيانات الكاملة على [🤗 Hub]. + +كبديل لمجموعة بيانات [`Graphcore/vqa`]]، يمكنك تنزيل نفس البيانات يدويًا من صفحة مجموعة بيانات VQA الرسمية. إذا كنت تفضل اتباع البرنامج التعليمي باستخدام بياناتك المخصصة، فراجع كيفية [إنشاء مجموعة بيانات الصور] في وثائق 🤗 Datasets. + +دعنا نحمل أول 200 مثال من الانقسام التحقق من الصحة واستكشاف ميزات مجموعة البيانات: + +```python +>>> from datasets import load_dataset + +>>> dataset = load_dataset("Graphcore/vqa", split="validation[:200]") +>>> dataset +Dataset({ + features: ['question', 'question_type', 'question_id', 'image_id', 'answer_type', 'label'], + num_rows: 200 +}) +``` + +دعنا نلقي نظرة على مثال لفهم ميزات مجموعة البيانات: + +```py +>>> dataset[0] +{'question': 'Where is he looking?', + 'question_type': 'none of the above', + 'question_id': 262148000, + 'image_id': '/root/.cache/huggingface/datasets/downloads/extracted/ca733e0e000fb2d7a09fbcc94dbfe7b5a30750681d0e965f8e0a23b1c2f98c75/val2014/COCO_val2014_000000262148.jpg', + 'answer_type': 'other', + 'label': {'ids': ['at table', 'down', 'skateboard', 'table'], + 'weights': [0.30000001192092896, + 1.0, + 0.30000001192092896, + 0.30000001192092896]}} +``` + +الميزات ذات الصلة بالمهمة تشمل: + +- `question`: السؤال الذي يجب الإجابة عليه من الصورة +- `image_id`: مسار الصورة التي يشير إليها السؤال +- `label`: التسميات التوضيحية + +يمكننا إزالة بقية الميزات حيث لن تكون ضرورية: + +```py +>>> dataset = dataset.remove_columns(['question_type', 'question_id', 'answer_type']) +``` + +كما ترون، تحتوي ميزة `label` على عدة إجابات لنفس السؤال (تسمى `ids` هنا) التي جمعها معلّمون بشريون مختلفون. +هذا لأن إجابة السؤال يمكن أن تكون ذاتية. في هذه الحالة، السؤال هو "أين ينظر؟". قام بعض الأشخاص +وضع علامة على هذا بـ "down"، والبعض الآخر بـ "at table"، وآخر بـ "skateboard"، إلخ. + +الق نظرة على الصورة واعتبر الإجابة التي ستقدمها: + +```python +>>> from PIL import Image + +>>> image = Image.open(dataset[0]['image_id']) +>>> image +``` + +
+ VQA Image Example +
+ +بسبب غموض الأسئلة والإجابات، تتم معاملة مجموعات البيانات مثل هذه كمشكلة تصنيف متعددة التصنيفات (حيث +قد تكون إجابات متعددة صالحة). علاوة على ذلك، بدلاً من إنشاء ترميز ثنائي، يتم إنشاء ترميز ناعم، بناءً على عدد المرات +تمت الإشارة إلى إجابة معينة في التسميات التوضيحية. + +على سبيل المثال، في المثال أعلاه، لأن الإجابة "down" تم تحديدها بشكل أكبر بكثير من الإجابات الأخرى، فهي تحتوي على +درجة (تسمى `weight` في مجموعة البيانات) من 1.0، وبقية الإجابات لها درجات <1.0. + +للاحقاً إنشاء رأس تصنيف مناسب للنموذج، دعنا ننشئ قاموسين: واحد يقوم بتعيين +اسم التسمية إلى رقم صحيح والعكس صحيح: + +```py +>>> import itertools + +>>> labels = [item['ids'] for item in dataset['label']] +>>> flattened_labels = list(itertools.chain(*labels)) +>>> unique_labels = list(set(flattened_labels)) + +>>> label2id = {label: idx for idx, label in enumerate(unique_labels)} +>>> id2label = {idx: label for label, idx in label2id.items()} +``` + +الآن بعد أن حصلنا على الخرائط، يمكننا استبدال الإجابات النصية بمعرفاتها، وتسطيح مجموعة البيانات لمزيد من المعالجة المسبقة. + +```python +>>> def replace_ids(inputs): +... inputs["label"]["ids"] = [label2id[x] for x in inputs["label"]["ids"]] +... return inputs + + +>>> dataset = dataset.map(replace_ids) +>>> flat_dataset = dataset.flatten() +>>> flat_dataset.features +{'question': Value(dtype='string', id=None), + 'image_id': Value(dtype='string', id=None), + 'label.ids': Sequence(feature=Value(dtype='int64', id=None), length=-1, id=None), + 'label.weights': Sequence(feature=Value(dtype='float64', id=None), length=-1, id=None)} +``` + +## معالجة البيانات مسبقًا + +الخطوة التالية هي تحميل معالج ViLT لتحضير بيانات الصورة والنص للنموذج. +[`ViltProcessor`] يجمع بين معالج BERT للرموز ومعالج صور ViLT في معالج واحد مناسب: + +```py +>>> from transformers import ViltProcessor + +>>> processor = ViltProcessor.from_pretrained(model_checkpoint) +``` + +لمعالجة البيانات، نحتاج إلى تشفير الصور والأسئلة باستخدام [`ViltProcessor`]. سيستخدم المعالج +[`BertTokenizerFast`] لتوكينيز النص وإنشاء `input_ids` و`attention_mask` و`token_type_ids` لبيانات النص. +أما بالنسبة للصور، فسيستفيد المعالج من [`ViltImageProcessor`] لتصغير حجم الصورة وتطبيعها، وإنشاء `pixel_values` و`pixel_mask`. + +يتم تنفيذ جميع خطوات المعالجة المسبقة هذه تلقائيًا، ولا نحتاج إلا إلى استدعاء `processor`. ومع ذلك، ما زلنا بحاجة إلى +إعداد التسميات التوضيحية المستهدفة. في هذا التمثيل، يتوافق كل عنصر مع إجابة محتملة (تسمية). للإجابات الصحيحة، يحتوي العنصر على +درجاتهم (أوزانهم)، بينما يتم تعيين العناصر المتبقية إلى الصفر. + +تقوم الدالة التالية بتطبيق `processor` على الصور والأسئلة وتنسيق التسميات التوضيحية كما هو موضح أعلاه: + +```py +>>> import torch + +>>> def preprocess_data(examples): +... image_paths = examples['image_id'] +... images = [Image.open(image_path) for image_path in image_paths] +... texts = examples['question'] + +... encoding = processor(images, texts, padding="max_length", truncation=True, return_tensors="pt") + +... for k, v in encoding.items(): +... encoding[k] = v.squeeze() + +... targets = [] + +... for labels, scores in zip(examples['label.ids'], examples['label.weights']): +... target = torch.zeros(len(id2label)) + +... for label, score in zip(labels, scores): +... target[label] = score + +... targets.append(target) + +... encoding["labels"] = targets + +... return encoding +``` + +لتطبيق دالة المعالجة المسبقة على مجموعة البيانات بأكملها، استخدم وظيفة [`~datasets.map`] من 🤗 Datasets. يمكنك تسريع `map` عن طريق +تعيين `batched=True` لمعالجة عدة عناصر من مجموعة البيانات في وقت واحد. في هذه المرحلة، لا تتردد في إزالة الأعمدة التي لا تحتاجها. + +```py +>>> processed_dataset = flat_dataset.map(preprocess_data, batched=True, remove_columns=['question','question_type', 'question_id', 'image_id', 'answer_type', 'label.ids', 'label.weights']) +>>> processed_dataset +Dataset({ + features: ['input_ids', 'token_type_ids', 'attention_mask', 'pixel_values', 'pixel_mask', 'labels'], + num_rows: 200 +}) +``` + +كخطوة أخيرة، قم بإنشاء دفعة من الأمثلة باستخدام [`DefaultDataCollator`]: + +```py +>>> from transformers import DefaultDataCollator + +>>> data_collator = DefaultDataCollator() +``` + +## تدريب النموذج + +أنت مستعد الآن لبدء تدريب نموذجك! قم بتحميل ViLT باستخدام [`ViltForQuestionAnswering`]. حدد عدد التصنيفات +جنبا إلى جنب مع الخرائط التصنيف: + +```py +>>> from transformers import ViltForQuestionAnswering + +>>> model = ViltForQuestionAnswering.from_pretrained(model_checkpoint, num_labels=len(id2label), id2label=id2label, label2id=label2id) +``` + +في هذه المرحلة، هناك ثلاث خطوات فقط: + +1. حدد معلمات التدريب الخاصة بك في [`TrainingArguments`]: + +```py +>>> from transformers import TrainingArguments + +>>> repo_id = "MariaK/vilt_finetuned_200" + +>>> training_args = TrainingArguments( +... output_dir=repo_id, +... per_device_train_batch_Multiplier = 4, +... num_train_epochs=20, +... save_steps=200, +... logging_steps=50, +... learning_rate=5e-5, +... save_total_limit=2, +... remove_unused_columns=False, +... push_to_hub=True, +... ) +``` + +2. قم بتمرير الحجج التدريبية إلى [`Trainer`] جنبًا إلى جنب مع النموذج ومجموعة البيانات والمعالج ومعادل البيانات. + +```py +>>> from transformers import Trainer + +>>> trainer = Trainer( +... model=model, +... args=training_args, +... data_collator=data_collator, +... train_dataset=processed_dataset, +... tokenizer=processor, +... ) +``` + +3. استدعاء [`~Trainer.train`] لضبط نموذجك بشكل دقيق. + +```py +>>> trainer.train() +``` + +3. استدعاء [`~Trainer.train`] لضبط نموذجك بشكل دقيق. + +```py +>>> trainer.train() +``` + +بمجرد الانتهاء من التدريب، شارك نموذجك على Hub باستخدام طريقة [`~Trainer.push_to_hub`] لمشاركة نموذجك النهائي على 🤗 Hub: + +```py +>>> trainer.push_to_hub() +``` + +## الاستدلال + +الآن بعد أن قمت بضبط نموذج ViLT وتحميله إلى 🤗 Hub، يمكنك استخدامه للاستدلال. أسهل +طريقة لتجربة نموذجك المضبوط مسبقًا للاستدلال هي استخدامه في [`Pipeline`]. + +```py +>>> from transformers import pipeline + +>>> pipe = pipeline("visual-question-answering", model="MariaK/vilt_finetuned_200") +``` + +تم تدريب النموذج في هذا الدليل على 200 مثال فقط، لذا لا تتوقع الكثير منه. دعنا نرى إذا كان على الأقل +تعلم شيئًا من البيانات وخذ المثال الأول من مجموعة البيانات لتوضيح الاستدلال: + +```py +>>> example = dataset[0] +>>> image = Image.open(example['image_id']) +>>> question = example['question'] +>>> print(question) +>>> pipe(image, question, top_k=1) +"Where is he looking?" +[{'score': 0.5498199462890625, 'answer': 'down'}] +``` + +على الرغم من عدم ثقته، إلا أن النموذج قد تعلم بالفعل شيئًا ما. مع المزيد من الأمثلة وفترة التدريب الأطول، ستحصل على نتائج أفضل بكثير! + +يمكنك أيضًا إعادة إنتاج نتائج الأنبوب يدويًا إذا أردت: + +1. خذ صورة وسؤال، وقم بإعدادهما للنموذج باستخدام المعالج من نموذجك. +2. قم بتنفيذ الإخراج أو المعالجة المسبقة من خلال النموذج. +3. من logits، احصل على معرف الإجابة الأكثر احتمالًا، واعثر على الإجابة الفعلية في `id2label`. + +```py +>>> processor = ViltProcessor.from_pretrained("MariaK/vilt_finetuned_200") + +>>> image = Image.open(example['image_id']) +>>> question = example['question'] + +>>> # prepare inputs +>>> inputs = processor(image, question, return_tensors="pt") + +>>> model = ViltForQuestionAnswering.from_pretrained("MariaK/vilt_finetuned_200") + +>>> # forward pass +>>> with torch.no_grad(): +... outputs = model(**inputs) + +>>> logits = outputs.logits +>>> idx = logits.argmax(-1).item() +>>> print("Predicted answer:", model.config.id2label[idx]) +Predicted answer: down +``` + +## VQA بدون تدريب + +عامل النموذج السابق VQA كمهمة تصنيف. بعض النماذج الحديثة، مثل BLIP، وBLIP-2، وInstructBLIP تعالج VQA كمهمة توليدية. دعونا نأخذ [BLIP-2](../model_doc/blip-2) كمثال. لقد قدم نموذجًا جديدًا لنمذجة اللغة المرئية حيث يمكن استخدام أي مزيج من مشفر الرؤية LLM ومشفر اللغة المسبق التدريب (تعرف على المزيد في [منشور المدونة BLIP-2](https://huggingface.co/blog/blip-2)). + +هذا يمكّن من تحقيق نتائج رائدة على مستوى المهام المرئية اللغوية المتعددة بما في ذلك الإجابة على الأسئلة البصرية. + +دعونا نوضح كيف يمكنك استخدام هذا النموذج لـ VQA. أولاً، دعونا نحمل النموذج. هنا سنرسل النموذج بشكل صريح إلى وحدة معالجة الرسومات، إذا كانت متوفرة، والتي لم نكن بحاجة إلى القيام بها سابقًا أثناء التدريب، حيث يتعامل [`Trainer`] مع هذا تلقائيًا: + +```py +>>> from transformers import AutoProcessor، Blip2ForConditionalGeneration +>>> import torch + +>>> processor = AutoProcessor.from_pretrained("Salesforce/blip2-opt-2.7b") +>>> model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b"، torch_dtype=torch.float16) +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> model.to(device) +``` + +يأخذ النموذج الصورة والنص كإدخال، لذا دعنا نستخدم نفس الصورة/زوج السؤال بالضبط من المثال الأول في مجموعة بيانات VQA: + +```py +>>> example = dataset[0] +>>> image = Image.open(example['image_id']) +>>> question = example['question'] +``` + +لاستخدام BLIP-2 لمهمة الإجابة على الأسئلة المرئية، يجب أن يتبع النص الفوري تنسيقًا محددًا: `Question: {} Answer:`. + +```py +>>> prompt = f"Question: {question} Answer:" +``` + +الآن نحتاج إلى معالجة الصورة/الفورية باستخدام معالج النموذج، وتمرير الإدخال المعالج عبر النموذج، وفك تشفير الإخراج: + +```py +>>> inputs = processor(image، text=prompt، return_tensors="pt").to(device، torch.float16) + +>>> generated_ids = model.generate(**inputs، max_new_tokens=10) +>>> generated_text = processor.batch_decode(generated_ids، skip_special_tokens=True)[0].strip() +>>> print(generated_text) +"إنه ينظر إلى الحشد" +``` + +كما ترون، تعرف النموذج على الحشد، واتجاه الوجه (ينظر إلى الأسفل)، ومع ذلك، يبدو أنه يغفل عن حقيقة أن الحشد خلف المتزلج. ومع ذلك، في الحالات التي يكون من غير العملي فيها الحصول على مجموعات بيانات بشرية موسومة، يمكن أن ينتج هذا النهج نتائج مفيدة بسرعة. \ No newline at end of file From 2abc6428eedc7b246a18c663187b5596abe6f8cf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:44:06 +0300 Subject: [PATCH 105/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/tasks/zero=5Fshot=5Fimage=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasks/zero_shot_image_classification.md | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 docs/source/ar/tasks/zero_shot_image_classification.md diff --git a/docs/source/ar/tasks/zero_shot_image_classification.md b/docs/source/ar/tasks/zero_shot_image_classification.md new file mode 100644 index 00000000000000..206ba3ad35ac9a --- /dev/null +++ b/docs/source/ar/tasks/zero_shot_image_classification.md @@ -0,0 +1,125 @@ +# التصنيف البصري بدون الإشراف + +[[open-in-colab]] + +التصنيف البصري بدون الإشراف هو مهمة تتضمن تصنيف الصور إلى فئات مختلفة باستخدام نموذج لم يتم تدريبه بشكل صريح على بيانات تحتوي على أمثلة موسومة من تلك الفئات المحددة. + +تتطلب تصنيف الصور بشكل تقليدي تدريب نموذج على مجموعة محددة من الصور الموسومة، ويتعلم هذا النموذج "رسم خريطة" لميزات صورة معينة إلى العلامات. عندما تكون هناك حاجة إلى استخدام هذا النموذج لمهمة تصنيف تقدم مجموعة جديدة من العلامات، يكون الضبط الدقيق مطلوبًا "لإعادة معايرة" النموذج. + +على النقيض من ذلك، فإن نماذج التصنيف البصري بدون الإشراف أو ذات المفردات المفتوحة هي عادةً نماذج متعددة الوسائط تم تدريبها على مجموعة كبيرة من الصور ووصفها المرتبط بها. تتعلم هذه النماذج تمثيلات الرؤية واللغة المتوافقة التي يمكن استخدامها للعديد من المهام اللاحقة بما في ذلك التصنيف البصري بدون الإشراف. + +هذا نهج أكثر مرونة لتصنيف الصور يسمح للنماذج بالتعميم على فئات جديدة وغير مرئية دون الحاجة إلى بيانات تدريب إضافية، ويمكّن المستخدمين من استعلام الصور بوصف نصي حر للأشياء المستهدفة. + +في هذا الدليل، ستتعلم كيفية: + +* إنشاء خط أنابيب للتصنيف البصري بدون الإشراف +* تشغيل استنتاج التصنيف البصري بدون الإشراف يدويًا + +قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية: + +```bash +pip install -q "transformers[torch]" pillow +``` + +## خط أنابيب التصنيف البصري بدون الإشراف + +أبسط طريقة لتجربة الاستنتاج باستخدام نموذج يدعم التصنيف البصري بدون الإشراف هي استخدام خط الأنابيب المقابل [`pipeline`]. +قم بتنفيذ خط أنابيب من نقطة تفتيش على [مركز Hugging Face](https://huggingface.co/models؟pipeline_tag=zero-shot-image-classification&sort=downloads): + +```python +>>> from transformers import pipeline + +>>> checkpoint = "openai/clip-vit-large-patch14" +>>> detector = pipeline(model=checkpoint, task="zero-shot-image-classification") +``` + +بعد ذلك، اختر صورة تريد تصنيفها. + +```py +>>> from PIL import Image +>>> import requests + +>>> url = "https://unsplash.com/photos/g8oS8-82DxI/download؟ixid=MnwxMjA3fDB8MXx0b3BpY3x8SnBnNktpZGwtSGt8fHx8fDJ8fDE2NzgxMDYwODc&force=true&w=640" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> image +``` + +
+ صورة لطائر البوم +
+ +مرر الصورة وعلامات الكائنات المرشحة إلى خط الأنابيب. هنا نقوم بمرور الصورة مباشرةً؛ تشمل الخيارات المناسبة الأخرى مسارًا محليًا إلى صورة أو عنوان URL للصورة. +يمكن أن تكون العلامات المرشحة كلمات بسيطة كما في هذا المثال، أو أكثر وصفًا. + +```py +>>> predictions = detector(image, candidate_labels=["fox", "bear", "seagull", "owl"]) +>>> predictions +[{'score': 0.9996670484542847, 'label': 'owl'}, + {'score': 0.000199399160919711, 'label': 'seagull'}, + {'score': 7.392891711788252e-05, 'label': 'fox'}, + {'score': 5.96074532950297e-05, 'label': 'bear'}] +``` + +## التصنيف البصري بدون الإشراف يدويًا + +الآن بعد أن رأيت كيفية استخدام خط أنابيب التصنيف البصري بدون الإشراف، دعنا نلقي نظرة على كيفية تشغيل التصنيف البصري بدون الإشراف يدويًا. + +ابدأ بتحميل النموذج والمعالج المرتبط من نقطة تفتيش على [مركز Hugging Face](https://huggingface.co/models؟pipeline_tag=zero-shot-image-classification&sort=downloads). +سنستخدم هنا نفس نقطة التفتيش كما هو الحال من قبل: + +```py +>>> from transformers import AutoProcessor, AutoModelForZeroShotImageClassification + +>>> model = AutoModelForZeroShotImageClassification.from_pretrained(checkpoint) +>>> processor = AutoProcessor.from_pretrained(checkpoint) +``` + +دعنا نأخذ صورة مختلفة لتغيير الأشياء. + +```py +>>> from PIL import Image +>>> import requests + +>>> url = "https://unsplash.com/photos/xBRQfR2bqNI/download؟ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjc4Mzg4ODEx&force=true&w=640" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> image +``` + +
+ صورة لسيارة +
+ +استخدم المعالج لإعداد المدخلات للنموذج. يجمع المعالج بين معالج الصور الذي يقوم بإعداد الصورة للنموذج عن طريق تغيير حجمها وتطبيعها، ومعالج التحليل اللغوي الذي يعتني بالمدخلات النصية. + +```py +>>> candidate_labels = ["tree", "car", "bike", "cat"] +# يتبع قالب موجه خط الأنابيب للحصول على نفس النتائج +>>> candidate_labels = [f'This is a photo of {label}.' for label in candidate_labels] +>>> inputs = processor(images=image, text=candidate_labels, return_tensors="pt", padding=True) +``` + +مرر المدخلات عبر النموذج، وقم بمعالجة النتائج: + +```py +>>> import torch + +>>> with torch.no_grad(): +... outputs = model(**inputs) + +>>> logits = outputs.logits_per_image[0] +>>> probs = logits.softmax(dim=-1).numpy() +>>> scores = probs.tolist() + +>>> result = [ +... {"score": score, "label": candidate_label} +... for score, candidate_label in sorted(zip(probs, candidate_labels), key=lambda x: -x[0]) +... ] + +>>> result +[{'score': 0.998572, 'label': 'car'}, + {'score': 0.0010570387, 'label': 'bike'}, + {'score': 0.0003393686, 'label': 'tree'}, + {'score': 3.1572064e-05, 'label': 'cat'}] +``` \ No newline at end of file From 2bc75481494e1f0e1d6d99b59e04b8467bdb71da Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:40 +0300 Subject: [PATCH 106/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20README?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2a2830fb10010d..6eca5273169558 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From 088f495c481aff16addfa4870b66ddad6a8a7734 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:41 +0300 Subject: [PATCH 107/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/accelerate.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6278bd3447b1eae75b9495eacb3cd895c4da0a53 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:43 +0300 Subject: [PATCH 108/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/add=5Fnew=5Fpipeline.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9c471e4eb496d7ce1b4cd92e2724f1b9263831f5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:45 +0300 Subject: [PATCH 109/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/attention.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ecbd80ffba08235413c30ff2d4772f639cdc7f77 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:47 +0300 Subject: [PATCH 110/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/bertology.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d50cbc4dbff6bb64251edf9420958f16f8b2dc72 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:48 +0300 Subject: [PATCH 111/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/community.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ff01760713d4d4ced8e59540066d4f2ad5432c44 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:50 +0300 Subject: [PATCH 112/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/fsdp.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c3ec6eeffa556f294026f139077d204050740b95 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:51 +0300 Subject: [PATCH 113/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/glossary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f46a055dfee661893e6f312c72bf5567828e0681 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:53 +0300 Subject: [PATCH 114/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/hpo=5Ftrain.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 580f88c09f3beb1269f425e003e002ed71f46fcb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:55 +0300 Subject: [PATCH 115/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/conversations.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 104a3b0c15d28e1c2c81e4e0da5ddc0a93c9adc3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:56 +0300 Subject: [PATCH 116/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/index.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 4ef80b8dd77d109da0c047ea5419ee23fecadbdc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:02:58 +0300 Subject: [PATCH 117/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/installation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 54ce69c4738059c93fbf1b42ffe40a7506630085 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:00 +0300 Subject: [PATCH 118/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/custom=5Fmodels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c5737978a222526d2758b93c0068c94b1c285216 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:02 +0300 Subject: [PATCH 119/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/llm=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e1f76a379c82e1af848237c56290d9e85659e956 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:04 +0300 Subject: [PATCH 120/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/model=5Fsharing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ec6a5bc96ddc1848f8101e5e1bbe06c0dda23e7f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:05 +0300 Subject: [PATCH 121/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/fast=5Ftokenizers.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2b9f1fad89df408868d82f98a5e52b6f7f844967 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:07 +0300 Subject: [PATCH 122/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/multilingual.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 83ac5787825563abece18a42f3cd334ccfe1ae3b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:09 +0300 Subject: [PATCH 123/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/notebooks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cf2b5ad19698492b18049b31f04eebb41cf31676 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:10 +0300 Subject: [PATCH 124/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pad=5Ftruncation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 99b228815a46cd79d8762c2d07e8b11db2020243 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:12 +0300 Subject: [PATCH 125/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/peft.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a453ee4f8fefb267e6ad0f0032fb19d2f7acde8a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:14 +0300 Subject: [PATCH 126/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Fhardware.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From eddbf3f9ae88bf37a2e2887e3e1755d584d6cd68 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:15 +0300 Subject: [PATCH 127/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/generation=5Fstrategies.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 47f087b3df89e719163c2c4b04f32dacdaca9f96 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:17 +0300 Subject: [PATCH 128/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/gguf.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 064efd06c10c7faea611ec21626a6d69852a38a6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:19 +0300 Subject: [PATCH 129/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/llm=5Foptims.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2c1a6c924bd676f916dd426dc8255eab95744b1d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:21 +0300 Subject: [PATCH 130/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fcpu=5Fmany.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 38bdb4b3e22f0e9451260adf1d6d60d792f04be9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:22 +0300 Subject: [PATCH 131/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/model=5Fmemory=5Fanatomy.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7243c213e5ca3685f23edd5b0d6d7006f9633dc3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:24 +0300 Subject: [PATCH 132/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fgpu=5Fmany.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a846239dc7377674ca3b674d070ec0f5baafd31a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:26 +0300 Subject: [PATCH 133/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/model=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 24155cadd8d50c69a150faa9a275e5e003d3e601 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:27 +0300 Subject: [PATCH 134/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Finfer=5Fcpu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d34f52186744124d338d6b47e7c7151f847887a9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:29 +0300 Subject: [PATCH 135/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fspecial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3ebd7d44682b6debfc5d45b6f1715154176a1843 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:31 +0300 Subject: [PATCH 136/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perplexity.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1b8b39552fb898859400fc617dc60a759935d002 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:32 +0300 Subject: [PATCH 137/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/philosophy.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 64d0e81cd38f47d5b4900631a5cf32b438177dc0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:34 +0300 Subject: [PATCH 138/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pipeline=5Fwebserver.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From b2019e6c3b82a644e1b411d0b0fd057d178a02a5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:35 +0300 Subject: [PATCH 139/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Finfer=5Fgpu=5Fone.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f0f2fc20f5ad39017c29d483d496c022a6fe3c79 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:37 +0300 Subject: [PATCH 140/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/sagemaker.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 05225fb1c63f6277c4100cdb23781492fc076f5f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:39 +0300 Subject: [PATCH 141/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/serialization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7ba46fc1d66d36ad5d081a630f7755681b50a705 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:41 +0300 Subject: [PATCH 142/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fgpu=5Fone.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 52bae093c5bfe2b692d5035686befb2d280a87ba Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:42 +0300 Subject: [PATCH 143/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/add=5Fnew=5Fmodel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 413e401e7f470d56a05372c4c88a9e569534050a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:44 +0300 Subject: [PATCH 144/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/agents.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 84cee6c174d97b94b6dcb46a282bca7c983f2fae Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:46 +0300 Subject: [PATCH 145/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/autoclass=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1977a88b767629ef7242512147a81609acdbde3e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:47 +0300 Subject: [PATCH 146/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/benchmarks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 5825f8bc21280e5cfd1ee4cd0049b3800181a8bb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:49 +0300 Subject: [PATCH 147/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/big=5Fmodels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ed4581c04eeda5013590947cd377ab8aef3a26d8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:51 +0300 Subject: [PATCH 148/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/chat=5Ftemplating.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 18ce8a818c45c5433d5f9d47cc9507f65073d6a1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:52 +0300 Subject: [PATCH 149/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/contributing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From fad95cd4dc08a389587868f44a8b365069b2db19 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:54 +0300 Subject: [PATCH 150/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/create=5Fa=5Fmodel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d38cb7cdade4ed238a8ebefa09e3f42795e95086 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:56 +0300 Subject: [PATCH 151/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/debugging.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 5581f7eb87c0876e885670adc42a2625292da3aa Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:03:58 +0300 Subject: [PATCH 152/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/deepspeed.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9614d1d91eaac30f252f0f58c811c1099b59e9ec Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:00 +0300 Subject: [PATCH 153/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/llm=5Ftutorial=5Foptimization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cdab976060cbb7e821973bdcb06412dabb7b72b4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:01 +0300 Subject: [PATCH 154/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftorch=5Fcompile.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 4edce9b2e1dab49435a53f382a1c3b4eefa41cfb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:03 +0300 Subject: [PATCH 155/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fcpu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9c104216d4360e26f8a7d8c8ed5ca8d2fe10b02a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:04 +0300 Subject: [PATCH 156/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Ftpu=5Ftf.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7de745705f95f9ef7d6ceb510b0497c5a0ad16c1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:06 +0300 Subject: [PATCH 157/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/performance.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 37e8d22bda643ef913ee16a5856111bf2404ef8d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:08 +0300 Subject: [PATCH 158/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pipeline=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 093c01c2d6ed827d12f66b2d5b7af3772434c049 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:10 +0300 Subject: [PATCH 159/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pr=5Fchecks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 106857503baf702fd6c3f90bb414dd714daf779c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:11 +0300 Subject: [PATCH 160/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/preprocessing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2b5b29cc3185dbf18e09dd6b1032435d4dd17946 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:13 +0300 Subject: [PATCH 161/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quicktour.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 21620c7615cc2c86b258bcdd59cd99a4ad3416db Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:15 +0300 Subject: [PATCH 162/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/run=5Fscripts.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9007adc67b284f813111fde5c198d846f1fe8f86 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:16 +0300 Subject: [PATCH 163/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/task=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From eae5aca8487e953ebecc891f7b8b1c7fd2fce007 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:18 +0300 Subject: [PATCH 164/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks=5Fexplained.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6cfd570b7a4e02e39b2c7aebf0921880bf8cac60 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:20 +0300 Subject: [PATCH 165/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tokenizer=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0a495937b152d33e2ecffa84ed03f050347388eb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:21 +0300 Subject: [PATCH 166/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/trainer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0f20a60d5d03463a1c7e4b140a51511d5a644776 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:23 +0300 Subject: [PATCH 167/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tflite.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 60fbecc9fec127cecf373b773202a6aee268531c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:25 +0300 Subject: [PATCH 168/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tf=5Fxla.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 832a70d5c2065da01b47b0a07bc89aa8018edf2c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:27 +0300 Subject: [PATCH 169/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/torchscript.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7b94c515195a89a7e35dce0ed5104fed46f43ccf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:28 +0300 Subject: [PATCH 170/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/training.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 21d9b4a4e19d736770e4691ea13e729f022f2e56 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:30 +0300 Subject: [PATCH 171/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/testing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1f6dadf495a71e962de4fb97aa0f7be7aec2d27f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:32 +0300 Subject: [PATCH 172/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/troubleshooting.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 8ddd08e133688ee66e082fbbf7448e11da85d38c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:33 +0300 Subject: [PATCH 173/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/=5Ftoctree.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/_toctree.yml | 891 ++++++++++++++++++++++++++++++++++++ 1 file changed, 891 insertions(+) create mode 100644 docs/source/ar/_toctree.yml diff --git a/docs/source/ar/_toctree.yml b/docs/source/ar/_toctree.yml new file mode 100644 index 00000000000000..5310b8758eb502 --- /dev/null +++ b/docs/source/ar/_toctree.yml @@ -0,0 +1,891 @@ +- sections: + - local: index + title: 🤗 المحولات + - local: quicktour + title: جولة سريعة + - local: installation + title: التثبيت + title: البدء +- sections: + - local: pipeline_tutorial + title: تشغيل الاستنتاج باستخدام خطوط الأنابيب + - local: autoclass_tutorial + title: كتابة التعليمات البرمجية المحمولة باستخدام AutoClass + - local: preprocessing + title: معالجة البيانات مسبقًا + - local: training + title: ضبط نموذج مسبق التدريب + - local: run_scripts + title: التدريب باستخدام برنامج نصي + - local: accelerate + title: إعداد التدريب الموزع باستخدام 🤗 Accelerate + - local: peft + title: تحميل النماذج المخصصة وتدريبها باستخدام 🤗 PEFT + - local: model_sharing + title: مشاركة نموذجك + - local: agents + title: الوكلاء + - local: llm_tutorial + title: التوليد باستخدام LLMs + - local: conversations + title: الدردشة مع المحولات + title: البرامج التعليمية +- sections: + - isExpanded: false + sections: + - local: tasks/sequence_classification + title: تصنيف النصوص + - local: tasks/token_classification + title: تصنيف الرموز + - local: tasks/question_answering + title: الإجابة على الأسئلة + - local: tasks/language_modeling + title: نمذجة اللغة السببية + - local: tasks/masked_language_modeling + title: نمذجة اللغة المقنعة + - local: tasks/translation + title: الترجمة + - local: tasks/summarization + title: تلخيص + - local: tasks/multiple_choice + title: الاختيار المتعدد + title: معالجة اللغات الطبيعية + - isExpanded: false + sections: + - local: tasks/audio_classification + title: تصنيف الصوت + - local: tasks/asr + title: التعرف التلقائي على الكلام + title: صوتي + - isExpanded: false + sections: + - local: tasks/image_classification + title: تصنيف الصور + - local: tasks/semantic_segmentation + title: تجزئة الصور + - local: tasks/video_classification + title: تصنيف الفيديو + - local: tasks/object_detection + title: اكتشاف الأشياء + - local: tasks/zero_shot_object_detection + title: اكتشاف الأشياء بدون تدريب + - local: tasks/zero_shot_image_classification + title: تصنيف الصور بدون تدريب + - local: tasks/monocular_depth_estimation + title: تقدير العمق + - local: tasks/image_to_image + title: صورة إلى صورة + - local: tasks/image_feature_extraction + title: استخراج ميزات الصورة + - local: tasks/mask_generation + title: توليد القناع + - local: tasks/knowledge_distillation_for_image_classification + title: تقطير المعرفة للرؤية الحاسوبية + title: رؤية حاسوبية + - isExpanded: false + sections: + - local: tasks/image_captioning + title: تعليق الصور + - local: tasks/document_question_answering + title: الإجابة على الأسئلة الوثائقية + - local: tasks/visual_question_answering + title: الإجابة على الأسئلة المرئية + - local: tasks/text-to-speech + title: تحويل النص إلى كلام + title: متعدد الوسائط + - isExpanded: false + sections: + - local: generation_strategies + title: تخصيص استراتيجية التوليد + title: التوليد + - isExpanded: false + sections: + - local: tasks/idefics + title: مهام الصور مع IDEFICS + - local: tasks/prompting + title: دليل إرشادي للنماذج اللغوية الكبيرة + title: الإرشاد +title: أدلة المهام +- sections: + - local: fast_tokenizers + title: استخدم برامج التجزئة السريعة من 🤗 Tokenizers + - local: multilingual + title: تشغيل الاستنتاج باستخدام نماذج متعددة اللغات + - local: create_a_model + title: استخدام واجهات برمجة التطبيقات الخاصة بالنموذج + - local: custom_models + title: مشاركة نموذج مخصص + - local: chat_templating + title: قوالب للنماذج الدردشة + - local: trainer + title: المدرب + - local: sagemaker + title: تشغيل التدريب على Amazon SageMaker + - local: serialization + title: التصدير إلى ONNX + - local: tflite + title: التصدير إلى TFLite + - local: torchscript + title: التصدير إلى TorchScript + - local: benchmarks + title: المعايير + - local: notebooks + title: دفاتر الملاحظات مع الأمثلة + - local: community + title: موارد المجتمع + - local: troubleshooting + title: استكشاف الأخطاء وإصلاحها + - local: gguf + title: قابلية التشغيل البيني مع ملفات GGUF + title: أدلة المطورين +- sections: + - local: quantization/overview + title: البدء + - local: quantization/bitsandbytes + title: bitsandbytes + - local: quantization/gptq + title: GPTQ + - local: quantization/awq + title: AWQ + - local: quantization/aqlm + title: AQLM + - local: quantization/quanto + title: Quanto + - local: quantization/eetq + title: EETQ + - local: quantization/hqq + title: HQQ + - local: quantization/optimum + title: الأمثل + - local: quantization/contribute + title: المساهمة بطريقة جديدة لضغط الكميات + title: أساليب الضغط الكمي +- sections: + - local: performance + title: نظرة عامة + - local: llm_optims + title: تحسين الاستدلال LLM + - sections: + - local: perf_train_gpu_one + title: الأساليب والأدوات للتدريب الفعال على وحدة معالجة الرسومات (GPU) واحدة + - local: perf_train_gpu_many + title: وحدات معالجة الرسومات (GPU) متعددة والتوازي + - local: fsdp + title: Fully Sharded Data Parallel + - local: deepspeed + title: DeepSpeed + - local: perf_train_cpu + title: التدريب الفعال على وحدة المعالجة المركزية (CPU) + - local: perf_train_cpu_many + title: التدريب الموزع لوحدة المعالجة المركزية (CPU) + - local: perf_train_tpu_tf + title: التدريب على وحدة معالجة الدقة (TPU) باستخدام TensorFlow + - local: perf_train_special + title: تدريب PyTorch على Apple silicon + - local: perf_hardware + title: الأجهزة المخصصة للتدريب + - local: hpo_train + title: البحث عن أفضل المعلمات باستخدام واجهة برمجة تطبيقات المدرب + title: تقنيات التدريب الفعال + - sections: + - local: perf_infer_cpu + title: استدلال وحدة المعالجة المركزية (CPU) + - local: perf_infer_gpu_one + title: استدلال وحدة معالجة الرسومات (GPU) + title: تحسين الاستدلال +- local: big_models + title: إنشاء نموذج كبير +- local: debugging + title: التصحيح +- local: tf_xla + title: تكامل XLA لنماذج TensorFlow +- local: perf_torch_compile + title: تحسين الاستدلال باستخدام `torch.compile()` + title: الأداء وقابلية التوسع +- sections: + - local: contributing + title: كيفية المساهمة في 🤗 المحولات؟ + - local: add_new_model + title: كيفية إضافة نموذج إلى 🤗 المحولات؟ + - local: add_new_pipeline + title: كيفية إضافة خط أنابيب إلى 🤗 المحولات؟ + - local: testing + title: الاختبار + - local: pr_checks + title: التحقق من طلب السحب + title: المساهمة +- sections: + - local: philosophy + title: الفلسفة + - local: glossary + title: مسرد المصطلحات + - local: task_summary + title: ما الذي يمكن أن تفعله 🤗 المحولات + - local: tasks_explained + title: كيف تحل المحولات المهام + - local: model_summary + title: عائلة نماذج المحول + - local: tokenizer_summary + title: ملخص برامج التجزئة + - local: attention + title: آليات الاهتمام + - local: pad_truncation + title: الحشو والتقليم + - local: bertology + title: BERTology + - local: perplexity + title: غموض النماذج ذات الطول الثابت + - local: pipeline_webserver + title: خطوط الأنابيب لاستدلال الخادم + - local: model_memory_anatomy + title: تشريح تدريب النموذج + - local: llm_tutorial_optimization + title:الاستفادة القصوى من LLMs + title: أدلة مفاهيمية +- sections: + - sections: + - local: main_classes/agent + title: الوكلاء والأدوات + - local: model_doc/auto + title: الفئات التلقائية + - local: main_classes/backbones + title: العمود الفقري + - local: main_classes/callback + title: الاستدعاءات + - local: main_classes/configuration + title: التكوين + - local: main_classes/data_collator + title: مجمع البيانات + - local: main_classes/keras_callbacks + title: استدعاءات Keras + - local: main_classes/logging + title: التسجيل + - local: main_classes/model + title: النماذج + - local: main_classes/text_generation + title: توليد النصوص + - local: main_classes/onnx + title: ONNX + - local: main_classes/optimizer_schedules + title: التحسين + - local: main_classes/output + title: مخرجات النموذج + - local: main_classes/pipelines + title: خطوط الأنابيب + - local: main_classes/processors + title: المعالجات + - local: main_classes/quantization + title: الضغط الكمي + - local: main_classes/tokenizer + title: برنامج التجزئة + - local: main_classes/trainer + title: المدرب + - local: main_classes/deepspeed + title: DeepSpeed + - local: main_classes/feature_extractor + title: مستخرج الميزات + - local: main_classes/image_processor + title: معالج الصور + title: الفئات الرئيسية + - sections: + - isExpanded: false + sections: + - local: model_doc/albert + title: ALBERT + - local: model_doc/bart + title: BART + - local: model_doc/barthez + title: BARThez + - local: model_doc/bartpho + title: BARTpho + - local: model_doc/bert + title: BERT + - local: model_doc/bert-generation + title: BertGeneration + - local: model_doc/bert-japanese + title: BertJapanese + - local: model_doc/bertweet + title: Bertweet + - local: model_doc/big_bird + title: BigBird + - local: model_doc/bigbird_pegasus + title: BigBirdPegasus + - local: model_doc/biogpt + title: BioGpt + - local: model_doc/blenderbot + title: Blenderbot + - local: model_doc/blenderbot-small + title: Blenderbot Small + - local: model_doc/bloom + title: BLOOM + - local: model_doc/bort + title: BORT + - local: model_doc/byt5 + title: ByT5 + - local: model_doc/camembert + title: CamemBERT + - local: model_doc/canine + title: CANINE + - local: model_doc/codegen + title: CodeGen + - local: model_doc/code_llama + title: CodeLlama + - local: model_doc/cohere + title: Cohere + - local: model_doc/convbert + title: ConvBERT + - local: model_doc/cpm + title: CPM + - local: model_doc/cpmant + title: CPMANT + - local: model_doc/ctrl + title: CTRL + - local: model_doc/dbrx + title: DBRX + - local: model_doc/deberta + title: DeBERTa + - local: model_doc/deberta-v2 + title: DeBERTa-v2 + - local: model_doc/dialogpt + title: DialoGPT + - local: model_doc/distilbert + title: DistilBERT + - local: model_doc/dpr + title: DPR + - local: model_doc/electra + title: ELECTRA + - local: model_doc/encoder-decoder + title: Encoder Decoder Models + - local: model_doc/ernie + title: ERNIE + - local: model_doc/ernie_m + title: ErnieM + - local: model_doc/esm + title: ESM + - local: model_doc/falcon + title: Falcon + - local: model_doc/fastspeech2_conformer + title: FastSpeech2Conformer + - local: model_doc/flan-t5 + title: FLAN-T5 + - local: model_doc/flan-ul2 + title: FLAN-UL2 + - local: model_doc/flaubert + title: FlauBERT + - local: model_doc/fnet + title: FNet + - local: model_doc/fsmt + title: FSMT + - local: model_doc/funnel + title: Funnel Transformer + - local: model_doc/fuyu + title: Fuyu + - local: model_doc/gemma + title: Gemma + - local: model_doc/openai-gpt + title: GPT + - local: model_doc/gpt_neo + title: GPT Neo + - local: model_doc/gpt_neox + title: GPT NeoX + - local: model_doc/gpt_neox_japanese + title: GPT NeoX Japanese + - local: model_doc/gptj + title: GPT-J + - local: model_doc/gpt2 + title: GPT2 + - local: model_doc/gpt_bigcode + title: GPTBigCode + - local: model_doc/gptsan-japanese + title: GPTSAN Japanese + - local: model_doc/gpt-sw3 + title: GPTSw3 + - local: model_doc/herbert + title: HerBERT + - local: model_doc/ibert + title: I-BERT + - local: model_doc/jamba + title: Jamba + - local: model_doc/jetmoe + title: JetMoe + - local: model_doc/jukebox + title: Jukebox + - local: model_doc/led + title: LED + - local: model_doc/llama + title: LLaMA + - local: model_doc/llama2 + title: Llama2 + - local: model_doc/llama3 + title: Llama3 + - local: model_doc/longformer + title: Longformer + - local: model_doc/longt5 + title: LongT5 + - local: model_doc/luke + title: LUKE + - local: model_doc/m2m_100 + title: M2M100 + - local: model_doc/madlad-400 + title: MADLAD-400 + - local: model_doc/mamba + title: Mamba + - local: model_doc/marian + title: MarianMT + - local: model_doc/markuplm + title: MarkupLM + - local: model_doc/mbart + title: MBart and MBart-50 + - local: model_doc/mega + title: MEGA + - local: model_doc/megatron-bert + title: MegatronBERT + - local: model_doc/megatron_gpt2 + title: MegatronGPT2 + - local: model_doc/mistral + title: Mistral + - local: model_doc/mixtral + title: Mixtral + - local: model_doc/mluke + title: mLUKE + - local: model_doc/mobilebert + title: MobileBERT + - local: model_doc/mpnet + title: MPNet + - local: model_doc/mpt + title: MPT + - local: model_doc/mra + title: MRA + - local: model_doc/mt5 + title: MT5 + - local: model_doc/mvp + title: MVP + - local: model_doc/nezha + title: NEZHA + - local: model_doc/nllb + title: NLLB + - local: model_doc/nllb-moe + title: NLLB-MoE + - local: model_doc/nystromformer + title: Nyströmformer + - local: model_doc/olmo + title: OLMo + - local: model_doc/open-llama + title: Open-Llama + - local: model_doc/opt + title: OPT + - local: model_doc/pegasus + title: Pegasus + - local: model_doc/pegasus_x + title: PEGASUS-X + - local: model_doc/persimmon + title: Persimmon + - local: model_doc/phi + title: Phi + - local: model_doc/phi3 + title: Phi-3 + - local: model_doc/phobert + title: PhoBERT + - local: model_doc/plbart + title: PLBart + - local: model_doc/prophetnet + title: ProphetNet + - local: model_doc/qdqbert + title: QDQBert + - local: model_doc/qwen2 + title: Qwen2 + - local: model_doc/qwen2_moe + title: Qwen2MoE + - local: model_doc/rag + title: RAG + - local: model_doc/realm + title: REALM + - local: model_doc/recurrent_gemma + title: RecurrentGemma + - local: model_doc/reformer + title: Reformer + - local: model_doc/rembert + title: RemBERT + - local: model_doc/retribert + title: RetriBERT + - local: model_doc/roberta + title: RoBERTa + - local: model_doc/roberta-prelayernorm + title: RoBERTa-PreLayerNorm + - local: model_doc/roc_bert + title: RoCBert + - local: model_doc/roformer + title: RoFormer + - local: model_doc/rwkv + title: RWKV + - local: model_doc/splinter + title: Splinter + - local: model_doc/squeezebert + title: SqueezeBERT + - local: model_doc/stablelm + title: StableLm + - local: model_doc/starcoder2 + title: Starcoder2 + - local: model_doc/switch_transformers + title: SwitchTransformers + - local: model_doc/t5 + title: T5 + - local: model_doc/t5v1.1 + title: T5v1.1 + - local: model_doc/tapex + title: TAPEX + - local: model_doc/transfo-xl + title: Transformer XL + - local: model_doc/ul2 + title: UL2 + - local: model_doc/umt5 + title: UMT5 + - local: model_doc/xmod + title: X-MOD + - local: model_doc/xglm + title: XGLM + - local: model_doc/xlm + title: XLM + - local: model_doc/xlm-prophetnet + title: XLM-ProphetNet + - local: model_doc/xlm-roberta + title: XLM-RoBERTa + - local: model_doc/xlm-roberta-xl + title: XLM-RoBERTa-XL + - local: model_doc/xlm-v + title: XLM-V + - local: model_doc/xlnet + title: XLNet + - local: model_doc/yoso + title: YOSO + title: Text models + - isExpanded: false + sections: + - local: model_doc/beit + title: BEiT + - local: model_doc/bit + title: BiT + - local: model_doc/conditional_detr + title: Conditional DETR + - local: model_doc/convnext + title: ConvNeXT + - local: model_doc/convnextv2 + title: ConvNeXTV2 + - local: model_doc/cvt + title: CvT + - local: model_doc/deformable_detr + title: Deformable DETR + - local: model_doc/deit + title: DeiT + - local: model_doc/depth_anything + title: Depth Anything + - local: model_doc/deta + title: DETA + - local: model_doc/detr + title: DETR + - local: model_doc/dinat + title: DiNAT + - local: model_doc/dinov2 + title: DINOV2 + - local: model_doc/dit + title: DiT + - local: model_doc/dpt + title: DPT + - local: model_doc/efficientformer + title: EfficientFormer + - local: model_doc/efficientnet + title: EfficientNet + - local: model_doc/focalnet + title: FocalNet + - local: model_doc/glpn + title: GLPN + - local: model_doc/imagegpt + title: ImageGPT + - local: model_doc/levit + title: LeViT + - local: model_doc/mask2former + title: Mask2Former + - local: model_doc/maskformer + title: MaskFormer + - local: model_doc/mobilenet_v1 + title: MobileNetV1 + - local: model_doc/mobilenet_v2 + title: MobileNetV2 + - local: model_doc/mobilevit + title: MobileViT + - local: model_doc/mobilevitv2 + title: MobileViTV2 + - local: model_doc/nat + title: NAT + - local: model_doc/poolformer + title: PoolFormer + - local: model_doc/pvt + title: Pyramid Vision Transformer (PVT) + - local: model_doc/pvt_v2 + title: Pyramid Vision Transformer v2 (PVTv2) + - local: model_doc/regnet + title: RegNet + - local: model_doc/resnet + title: ResNet + - local: model_doc/segformer + title: SegFormer + - local: model_doc/seggpt + title: SegGpt + - local: model_doc/superpoint + title: SuperPoint + - local: model_doc/swiftformer + title: SwiftFormer + - local: model_doc/swin + title: Swin Transformer + - local: model_doc/swinv2 + title: Swin Transformer V2 + - local: model_doc/swin2sr + title: Swin2SR + - local: model_doc/table-transformer + title: Table Transformer + - local: model_doc/upernet + title: UperNet + - local: model_doc/van + title: VAN + - local: model_doc/vit + title: Vision Transformer (ViT) + - local: model_doc/vit_hybrid + title: ViT Hybrid + - local: model_doc/vitdet + title: ViTDet + - local: model_doc/vit_mae + title: ViTMAE + - local: model_doc/vitmatte + title: ViTMatte + - local: model_doc/vit_msn + title: ViTMSN + - local: model_doc/yolos + title: YOLOS + title: Vision models + - isExpanded: false + sections: + - local: model_doc/audio-spectrogram-transformer + title: Audio Spectrogram Transformer + - local: model_doc/bark + title: Bark + - local: model_doc/clap + title: CLAP + - local: model_doc/encodec + title: EnCodec + - local: model_doc/hubert + title: Hubert + - local: model_doc/mctct + title: MCTCT + - local: model_doc/mms + title: MMS + - local: model_doc/musicgen + title: MusicGen + - local: model_doc/musicgen_melody + title: MusicGen Melody + - local: model_doc/pop2piano + title: Pop2Piano + - local: model_doc/seamless_m4t + title: Seamless-M4T + - local: model_doc/seamless_m4t_v2 + title: SeamlessM4T-v2 + - local: model_doc/sew + title: SEW + - local: model_doc/sew-d + title: SEW-D + - local: model_doc/speech_to_text + title: Speech2Text + - local: model_doc/speech_to_text_2 + title: Speech2Text2 + - local: model_doc/speecht5 + title: SpeechT5 + - local: model_doc/unispeech + title: UniSpeech + - local: model_doc/unispeech-sat + title: UniSpeech-SAT + - local: model_doc/univnet + title: UnivNet + - local: model_doc/vits + title: VITS + - local: model_doc/wav2vec2 + title: Wav2Vec2 + - local: model_doc/wav2vec2-bert + title: Wav2Vec2-BERT + - local: model_doc/wav2vec2-conformer + title: Wav2Vec2-Conformer + - local: model_doc/wav2vec2_phoneme + title: Wav2Vec2Phoneme + - local: model_doc/wavlm + title: WavLM + - local: model_doc/whisper + title: Whisper + - local: model_doc/xls_r + title: XLS-R + - local: model_doc/xlsr_wav2vec2 + title: XLSR-Wav2Vec2 + title: Audio models + - isExpanded: false + sections: + - local: model_doc/timesformer + title: TimeSformer + - local: model_doc/videomae + title: VideoMAE + - local: model_doc/vivit + title: ViViT + title: Video models + - isExpanded: false + sections: + - local: model_doc/align + title: ALIGN + - local: model_doc/altclip + title: AltCLIP + - local: model_doc/blip + title: BLIP + - local: model_doc/blip-2 + title: BLIP-2 + - local: model_doc/bridgetower + title: BridgeTower + - local: model_doc/bros + title: BROS + - local: model_doc/chinese_clip + title: Chinese-CLIP + - local: model_doc/clip + title: CLIP + - local: model_doc/clipseg + title: CLIPSeg + - local: model_doc/clvp + title: CLVP + - local: model_doc/data2vec + title: Data2Vec + - local: model_doc/deplot + title: DePlot + - local: model_doc/donut + title: Donut + - local: model_doc/flava + title: FLAVA + - local: model_doc/git + title: GIT + - local: model_doc/grounding-dino + title: Grounding DINO + - local: model_doc/groupvit + title: GroupViT + - local: model_doc/idefics + title: IDEFICS + - local: model_doc/idefics2 + title: Idefics2 + - local: model_doc/instructblip + title: InstructBLIP + - local: model_doc/kosmos-2 + title: KOSMOS-2 + - local: model_doc/layoutlm + title: LayoutLM + - local: model_doc/layoutlmv2 + title: LayoutLMV2 + - local: model_doc/layoutlmv3 + title: LayoutLMV3 + - local: model_doc/layoutxlm + title: LayoutXLM + - local: model_doc/lilt + title: LiLT + - local: model_doc/llava + title: Llava + - local: model_doc/llava_next + title: LLaVA-NeXT + - local: model_doc/lxmert + title: LXMERT + - local: model_doc/matcha + title: MatCha + - local: model_doc/mgp-str + title: MGP-STR + - local: model_doc/nougat + title: Nougat + - local: model_doc/oneformer + title: OneFormer + - local: model_doc/owlvit + title: OWL-ViT + - local: model_doc/owlv2 + title: OWLv2 + - local: model_doc/paligemma + title: PaliGemma + - local: model_doc/perceiver + title: Perceiver + - local: model_doc/pix2struct + title: Pix2Struct + - local: model_doc/sam + title: Segment Anything + - local: model_doc/siglip + title: SigLIP + - local: model_doc/speech-encoder-decoder + title: Speech Encoder Decoder Models + - local: model_doc/tapas + title: TAPAS + - local: model_doc/trocr + title: TrOCR + - local: model_doc/tvlt + title: TVLT + - local: model_doc/tvp + title: TVP + - local: model_doc/udop + title: UDOP + - local: model_doc/video_llava + title: VideoLlava + - local: model_doc/vilt + title: ViLT + - local: model_doc/vipllava + title: VipLlava + - local: model_doc/vision-encoder-decoder + title: Vision Encoder Decoder Models + - local: model_doc/vision-text-dual-encoder + title: Vision Text Dual Encoder + - local: model_doc/visual_bert + title: VisualBERT + - local: model_doc/xclip + title: X-CLIP + title: Multimodal models + - isExpanded: false +sections: + - sections: + - local: model_doc/decision_transformer + title: محول القرار + - local: model_doc/trajectory_transformer + title: محول المسار + title: نماذج التعلم التعزيزي + - isExpanded: false + sections: + - local: model_doc/autoformer + title: Autoformer + - local: model_doc/informer + title: المبلغ + - local: model_doc/patchtsmixer + title: PatchTSMixer + - local: model_doc/patchtst + title: PatchTST + - local: model_doc/time_series_transformer + title: محول السلسلة الزمنية + title: نماذج السلسلة الزمنية + - isExpanded: false + sections: + - local: model_doc/graphormer + title: Graphormer + title: نماذج الرسم البياني + title: النماذج +- sections: + - local: internal/modeling_utils + title: الطبقات المخصصة والمرافق + - local: internal/pipelines_utils + title: المرافق لخطوط الأنابيب + - local: internal/tokenization_utils + title: المرافق لبرامج التجزئة + - local: internal/trainer_utils + title: المرافق للمدرب + - local: internal/generation_utils + title: المرافق للتوليد + - local: internal/image_processing_utils + title: المرافق لمعالجات الصور + - local: internal/audio_utils + title: المرافق لمعالجة الصوت + - local: internal/file_utils + title: المرافق العامة + - local: internal/time_series_utils + title: المرافق لسلسلة الوقت + title: مساعدون داخليون + title: API From a164d58791ed6fa77b9d80d1f0e80a72e8638a43 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:35 +0300 Subject: [PATCH 174/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/aqlm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3609637051d28dd4d2344919ac76dc4b90571cfe Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:37 +0300 Subject: [PATCH 175/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/awq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3bbd2b1ba2d83ed68a5a358fd71dab841f46affd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:38 +0300 Subject: [PATCH 176/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/contribute.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 4dcf732b2c8509454e23a0c00fa9c5778dbb8f7c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:40 +0300 Subject: [PATCH 177/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/eetq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 929537955830ebcafa53cf180eba7e18249eb73a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:42 +0300 Subject: [PATCH 178/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/optimum.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0dcb1969994eb1e3719f5f65ab1d725d7d324b90 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:43 +0300 Subject: [PATCH 179/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/overview.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6e0878bfa0389f155411d5652b36118b5a1e5a0b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:45 +0300 Subject: [PATCH 180/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/quanto.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7a4fda33e2c0a8f94b4889275a04d6949caf145e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:47 +0300 Subject: [PATCH 181/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/gptq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 26622fd8c3c5aad7943d76364c3ba16685c023f2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:49 +0300 Subject: [PATCH 182/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/hqq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cefa7070ad02b483dca76c5647c4cb4e6a2bfa80 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:50 +0300 Subject: [PATCH 183/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/bitsandbytes.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0a02ebb6aae7d0c298ded0d633d63a0cef98d2fd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:52 +0300 Subject: [PATCH 184/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/fbgemm=5Ffp8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d57e272e327fb024c95f575bf5367864e4a04035 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:54 +0300 Subject: [PATCH 185/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/document=5Fquestion=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f26ee02b823873935217a715354e5ff27ade6257 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:56 +0300 Subject: [PATCH 186/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/asr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From de1347ef9bd50ea10b2fe2721edaae727f9db39f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:58 +0300 Subject: [PATCH 187/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fcaptioning.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9aa446c5ec9a831fd85042dcec0e87a0a6fad08a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:04:59 +0300 Subject: [PATCH 188/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/audio=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c7b580373e0308e0f87e92aa32c0e7d4d322ace5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:01 +0300 Subject: [PATCH 189/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/idefics.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7bdaeec85e7c4ddb31a80286ddefaae9f339df28 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:03 +0300 Subject: [PATCH 190/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Ftext=5Fto=5Ftext.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e5d9f1fd702b1e9cd2179ec21407e4de431260d7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:04 +0300 Subject: [PATCH 191/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fto=5Fimage.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2c4cfb6bff113394394139d5a33c2a6449e34f77 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:06 +0300 Subject: [PATCH 192/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/knowledge=5Fdistillation=5Ffor=5Fimage=5Fclassif?= =?UTF-8?q?ication.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6cb4a2f88029bbbdf2a7e2e3f8232d1daac801b8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:08 +0300 Subject: [PATCH 193/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/masked=5Flanguage=5Fmodeling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9ee566bc637ac5944fa2b6c9c096fc22b5061ef9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:09 +0300 Subject: [PATCH 194/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/monocular=5Fdepth=5Festimation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From fffdce875000eb5eb93c23b7d4cdb251e7008171 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:11 +0300 Subject: [PATCH 195/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/multiple=5Fchoice.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6d5d1f391b4f072190b3fe8dabed23211bdc50a6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:13 +0300 Subject: [PATCH 196/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/mask=5Fgeneration.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ebdd45927b438ec48172946f703f9770c3b8c137 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:15 +0300 Subject: [PATCH 197/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/language=5Fmodeling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9141a8e8dc1e900fc8ca56483f5ec61935854b1d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:16 +0300 Subject: [PATCH 198/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/text-to-speech.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 08cdff1a5937dd7ad72253aa306e19846ac9debc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:18 +0300 Subject: [PATCH 199/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Ffeature=5Fextraction.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c33e8e446d776d4de7aa369eed7bfe5092f9f9ef Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:20 +0300 Subject: [PATCH 200/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 197a7f7af7e01f09cecf2a65adcfce3f147f13ba Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:22 +0300 Subject: [PATCH 201/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/zero=5Fshot=5Fobject=5Fdetection.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6f039dc595806aa92cbdfd0acbd849764dc77e34 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:23 +0300 Subject: [PATCH 202/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/object=5Fdetection.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e83613c7cb405b958a814983acd1343eb42614e7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:25 +0300 Subject: [PATCH 203/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/prompting.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 32fabcc9147a33e2f92da11f4e50d6a7398a8dc2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:27 +0300 Subject: [PATCH 204/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/question=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e2ca1fa389a90b4af3a99fc952393a88eadb454c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:29 +0300 Subject: [PATCH 205/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/semantic=5Fsegmentation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 869f62e07d1ceb4c660c55deafbb47258029026a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:30 +0300 Subject: [PATCH 206/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/sequence=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 5b0f01d06d4a08bbceb07654d7a5816d4ba19818 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:32 +0300 Subject: [PATCH 207/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/summarization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 378f6cdfed19042faa37ec5cd5e56512ad45ddaf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:34 +0300 Subject: [PATCH 208/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/token=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7e0c001f8d89513a6b3765c36bb74655e8237340 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:35 +0300 Subject: [PATCH 209/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/translation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From bc1c4361d1fb7482d5572f901913c00aef7bf2c7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:37 +0300 Subject: [PATCH 210/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/video=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From b999c31726f5b4e951afd6c2c321630ecf43a6f2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:39 +0300 Subject: [PATCH 211/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/visual=5Fquestion=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e0e5919a51c477cb29d53737f00afd724b9719c6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:41 +0300 Subject: [PATCH 212/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/zero=5Fshot=5Fimage=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 5fcb00aa9c52be9c2f7dcc46cd03afc7a0070b23 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:42 +0300 Subject: [PATCH 213/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fes.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_es.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_es.md b/i18n/README_es.md index c437e2ab6f78d4..ff9e5eb560d458 100644 --- a/i18n/README_es.md +++ b/i18n/README_es.md @@ -43,6 +43,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From 6647821fb1e0b343b251f7a9da36e430b0ad5924 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:44 +0300 Subject: [PATCH 214/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fhd.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_hd.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_hd.md b/i18n/README_hd.md index b3f5daf6a28d1a..744e899f3ca795 100644 --- a/i18n/README_hd.md +++ b/i18n/README_hd.md @@ -68,6 +68,7 @@ checkpoint: जाँच बिंदु Français | Deutsch | Tiếng Việt | + العربية |

From e7a53bd778cf4075cc9b5ee45630b585bc732ead Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:46 +0300 Subject: [PATCH 215/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fja.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_ja.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_ja.md b/i18n/README_ja.md index f91b109138b600..52b48cd1286b0c 100644 --- a/i18n/README_ja.md +++ b/i18n/README_ja.md @@ -78,6 +78,7 @@ user: ユーザ Français | Deutsch | Tiếng Việt | + العربية |

From 63b1395fadc27cbfcef1b77e673506d1cbd12699 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:48 +0300 Subject: [PATCH 216/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fko.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_ko.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_ko.md b/i18n/README_ko.md index 9b966168781275..47bbb9d97b0d28 100644 --- a/i18n/README_ko.md +++ b/i18n/README_ko.md @@ -43,6 +43,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From a51fcea9397c853defce6af25752b9b2ac70e0d1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:49 +0300 Subject: [PATCH 217/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fde.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_de.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_de.md b/i18n/README_de.md index f837501f3ca64a..aec00d8cb9aa3d 100644 --- a/i18n/README_de.md +++ b/i18n/README_de.md @@ -48,6 +48,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From 5943bfbda14a276058bdf31221e80718cfbd8221 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:51 +0300 Subject: [PATCH 218/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fpt-br.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_pt-br.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_pt-br.md b/i18n/README_pt-br.md index e5143e686d3190..61d9efa21f9fb9 100644 --- a/i18n/README_pt-br.md +++ b/i18n/README_pt-br.md @@ -48,6 +48,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From fd5b0c363debe5b181902e4f000d0dceb0b72f95 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:53 +0300 Subject: [PATCH 219/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Ffr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_fr.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_fr.md b/i18n/README_fr.md index b3be5e44112c83..03e6c4f0394abf 100644 --- a/i18n/README_fr.md +++ b/i18n/README_fr.md @@ -48,6 +48,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From def80c1290371818b8b76b14c51b0b32d860f4e6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:54 +0300 Subject: [PATCH 220/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fru.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_ru.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_ru.md b/i18n/README_ru.md index 6261bd0aeada6b..de572d93bd6d6a 100644 --- a/i18n/README_ru.md +++ b/i18n/README_ru.md @@ -48,6 +48,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From d08fbfe2bfcab9b2afbcb70ef08d9de8b08c15cc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:56 +0300 Subject: [PATCH 221/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fte.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_te.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_te.md b/i18n/README_te.md index 13fd0ade17cd48..6bd4bb48bacbc9 100644 --- a/i18n/README_te.md +++ b/i18n/README_te.md @@ -50,6 +50,7 @@ limitations under the License. Français | Deutsch | Tiếng Việt | + العربية |

From f110ce8af046faaf07010d883740ab00483d7b48 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:58 +0300 Subject: [PATCH 222/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fvi.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_vi.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_vi.md b/i18n/README_vi.md index 4a48edf7eb0be1..9efd63968e17e3 100644 --- a/i18n/README_vi.md +++ b/i18n/README_vi.md @@ -47,6 +47,7 @@ limitations under the License. తెలుగు | Français | Deutsch | + العربية | Tiếng việt |

From 98dac09baeb934a51d2325c701b8858551526ed9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:05:59 +0300 Subject: [PATCH 223/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fzh-hans.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_zh-hans.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_zh-hans.md b/i18n/README_zh-hans.md index ef059dd0b0f0ea..f55058c9e70923 100644 --- a/i18n/README_zh-hans.md +++ b/i18n/README_zh-hans.md @@ -68,6 +68,7 @@ checkpoint: 检查点 Français | Deutsch | Tiếng Việt | + العربية |

From 8e1af6278cd5a48c4187e5819ae14d3a4fb20179 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:06:01 +0300 Subject: [PATCH 224/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20i18n/R?= =?UTF-8?q?EADME=5Fzh-hant.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/README_zh-hant.md | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/README_zh-hant.md b/i18n/README_zh-hant.md index 1dceb5cb9027ce..ec58206ee7a7d7 100644 --- a/i18n/README_zh-hant.md +++ b/i18n/README_zh-hant.md @@ -80,6 +80,7 @@ user: 使用者 Français | Deutsch | Tiếng Việt | + العربية |

From da7ca5aad9abf44af93dcf5c119167cdff5ce5ae Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:06:03 +0300 Subject: [PATCH 225/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20i18n/?= =?UTF-8?q?=E2=80=8F=E2=80=8FREADME=5Far.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "i18n/\342\200\217\342\200\217README_ar.md" | 317 ++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 "i18n/\342\200\217\342\200\217README_ar.md" diff --git "a/i18n/\342\200\217\342\200\217README_ar.md" "b/i18n/\342\200\217\342\200\217README_ar.md" new file mode 100644 index 00000000000000..8e602b23eb3b93 --- /dev/null +++ "b/i18n/\342\200\217\342\200\217README_ar.md" @@ -0,0 +1,317 @@ + + +

+ + + + Hugging Face Transformers Library + +
+
+

+ +

+ Build + GitHub + Documentation + GitHub release + Contributor Covenant + DOI +

+ +

+

+ English | + 简体中文 | + 繁體中文 | + 한국어 | + Español | + 日本語 | + हिन्दी | + Русский | + Рortuguês | + తెలుగు | + Français | + Deutsch | + Tiếng Việt | + العربية | +

+

+ +

+

أحدث تقنيات التعلم الآلي لـ JAX وPyTorch وTensorFlow

+

+ +

+ +

+ +يوفر 🤗 Transformers آلاف النماذج المُدربة مسبقًا لأداء المهام على طرائق مختلفة مثل النص والصورة والصوت. + +يمكن تطبيق هذه النماذج على: + +* 📝 النص، لمهام مثل تصنيف النص واستخراج المعلومات والرد على الأسئلة والتلخيص والترجمة وتوليد النص، في أكثر من 100 لغة. +* 🖼️ الصور، لمهام مثل تصنيف الصور وكشف الأشياء والتجزئة. +* 🗣️ الصوت، لمهام مثل التعرف على الكلام وتصنيف الصوت. + +يمكن لنماذج المحول أيضًا أداء مهام على **طرائق متعددة مجتمعة**، مثل الرد على الأسئلة الجدولية والتعرف البصري على الحروف واستخراج المعلومات من المستندات الممسوحة ضوئيًا وتصنيف الفيديو والرد على الأسئلة المرئية. + +يوفر 🤗 Transformers واجهات برمجة التطبيقات (APIs) لتحميل تلك النماذج المُدربة مسبقًا واستخدامها على نص معين، وضبطها بدقة على مجموعات البيانات الخاصة بك، ثم مشاركتها مع المجتمع على [مركز النماذج](https://huggingface.co/models) الخاص بنا. وفي الوقت نفسه، فإن كل وحدة نمطية Python التي تحدد بنية هي وحدة مستقلة تمامًا ويمكن تعديلها لتمكين تجارب البحث السريعة. + +يتم دعم 🤗 Transformers بواسطة مكتبات التعلم العميق الثلاث الأكثر شيوعًا - [Jax](https://jax.readthedocs.io/en/latest/) و [PyTorch](https://pytorch.org/) و [TensorFlow](https://www.tensorflow.org/) - مع تكامل سلس بينها. من السهل تدريب نماذجك باستخدام واحدة قبل تحميلها للاستنتاج باستخدام الأخرى. + +## العروض التوضيحية عبر الإنترنت + +يمكنك اختبار معظم نماذجنا مباشرة على صفحاتها من [مركز النماذج](https://huggingface.co/models). كما نقدم [استضافة النماذج الخاصة وإصداراتها وواجهة برمجة تطبيقات الاستدلال](https://huggingface.co/pricing) للنماذج العامة والخاصة. + +فيما يلي بعض الأمثلة: + +في معالجة اللغات الطبيعية: +- [استكمال الكلمات المقنعة باستخدام BERT](https://huggingface.co/google-bert/bert-base-uncased?text=Paris+is+the+%5BMASK%5D+of+France) +- [التعرف على الكيانات المسماة باستخدام إليكترا](https://huggingface.co/dbmdz/electra-large-discriminator-finetuned-conll03-english?text=My+name+is+Sarah+and+I+live+in+London+city) +- [توليد النص باستخدام ميسترال](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2) +- [الاستدلال اللغوي الطبيعي باستخدام RoBERTa](https://huggingface.co/FacebookAI/roberta-large-mnli?text=The+dog+was+lost.+Nobody+lost+any+animal) +- [التلخيص باستخدام BART](https://huggingface.co/facebook/bart-large-cnn?text=The+tower+is+324+metres+%281%2C063+ft%29+tall%2C+about+the+same+height+as+an+81-storey+building%2C+and+the+tallest+structure+in+Paris.+Its+base+is+square%2C+measuring+125+metres+%28410+ft%29+on+each+side.+During+its+construction%2C+the+Eiffel+Tower+surpassed+the+Washington+Monument+to+become+the+tallest+man-made+structure+in+the+world%2C+a+title+it+held+for+41+years+until+the+Chrysler+Building+in+New+York+City+was+finished+in+1930.+It+was+the+first+structure+to+reach+a+height+of+300+metres.+Due+to+the+addition+of+a+broadcasting+aerial+at+the+top+of+the+tower+in+1957%2C+it+is+now+taller+than+the+Chrysler+Building+by+5.2+metres+%2817+ft%29.+Excluding+transmitters%2C+the+Eiffel+Tower+is+the+second+tallest+free-standing+structure+in+France+after+the+Millau+Viaduct) +- [الرد على الأسئلة باستخدام DistilBERT](https://huggingface.co/distilbert/distilbert-base-uncased-distilled-squad?text=Which+name+is+also+used+to+describe+the+Amazon+rainforest+in+English%3F&context=The+Amazon+rainforest+%28Portuguese%3A+Floresta+Amaz%C3%B4nica+or+Amaz%C3%B4nia%3B+Spanish%3A+Selva+Amaz%C3%B3nica%2C+Amazon%C3%ADa+or+usually+Amazonia%3B+French%3A+For%C3%AAt+amazonienne%3B+Dutch%3A+Amazoneregenwoud%29%2C+also+known+in+English+as+Amazonia+or+the+Amazon+Jungle%2C+is+a+moist+broadleaf+forest+that+covers+most+of+the+Amazon+basin+of+South+America.+This+basin+encompasses+7%2C000%2C000+square+kilometres+%282%2C700%2C000+sq+mi%29%2C+of+which+5%2C500%2C000+square+kilometres+%282%2C100%2C000+sq+mi%29+are+covered+by+the+rainforest.+This+region+includes+territory+belonging+to+nine+nations.+The+majority+of+the+forest+is+contained+within+Brazil%2C+with+60%25+of+the+rainforest%2C+followed+by+Peru+with+13%25%2C+Colombia+with+10%25%2C+and+with+minor+amounts+in+Venezuela%2C+Ecuador%2C+Bolivia%2C+Guyana%2C+Suriname+and+French+Guiana.+States+or+departments+in+four+nations+contain+%22Amazonas%22+in+their+names.+The+Amazon+represents+over+half+of+the+planet%27s+remaining+rainforests%2C+and+comprises+the+largest+and+most+biodiverse+tract+of+tropical+rainforest+in+the+world%2C+with+an+estimated+390+billion+individual+trees+divided+into+16%2C000+species) +- [الترجمة باستخدام T5](https://huggingface.co/google-t5/t5-base?text=My+name+is+Wolfgang+and+I+live+in+Berlin) + +في رؤية الكمبيوتر: +- [تصنيف الصور باستخدام ViT](https://huggingface.co/google/vit-base-patch16-224) +- [كشف الأشياء باستخدام DETR](https://huggingface.co/facebook/detr-resnet-50) +- [التجزئة الدلالية باستخدام SegFormer](https://huggingface.co/nvidia/segformer-b0-finetuned-ade-512-512) +- [التجزئة الشاملة باستخدام Mask2Former](https://huggingface.co/facebook/mask2former-swin-large-coco-panoptic) +- [تقدير العمق باستخدام Depth Anything](https://huggingface.co/docs/transformers/main/model_doc/depth_anything) +- [تصنيف الفيديو باستخدام VideoMAE](https://huggingface.co/docs/transformers/model_doc/videomae) +- [التجزئة الشاملة باستخدام OneFormer](https://huggingface.co/shi-labs/oneformer_ade20k_dinat_large) + +في الصوت: +- [الاعتراف التلقائي بالكلام مع Whisper](https://huggingface.co/openai/whisper-large-v3) +- [اكتشاف الكلمات الرئيسية باستخدام Wav2Vec2](https://huggingface.co/superb/wav2vec2-base-superb-ks) +- [تصنيف الصوت باستخدام محول طيف الصوت](https://huggingface.co/MIT/ast-finetuned-audioset-10-10-0.4593) + +في المهام متعددة الطرائق: +- [الرد على الأسئلة الجدولية باستخدام TAPAS](https://huggingface.co/google/tapas-base-finetuned-wtq) +- [الرد على الأسئلة المرئية باستخدام ViLT](https://huggingface.co/dandelin/vilt-b32-finetuned-vqa) +- [وصف الصورة باستخدام LLaVa](https://huggingface.co/llava-hf/llava-1.5-7b-hf) +- [تصنيف الصور بدون تدريب باستخدام SigLIP](https://huggingface.co/google/siglip-so400m-patch14-384) +- [الرد على أسئلة المستندات باستخدام LayoutLM](https://huggingface.co/impira/layoutlm-document-qa) +- [تصنيف الفيديو بدون تدريب باستخدام X-CLIP](https://huggingface.co/docs/transformers/model_doc/xclip) +- [كشف الأشياء بدون تدريب باستخدام OWLv2](https://huggingface.co/docs/transformers/en/model_doc/owlv2) +- [تجزئة الصور بدون تدريب باستخدام CLIPSeg](https://huggingface.co/docs/transformers/model_doc/clipseg) +- [توليد الأقنعة التلقائي باستخدام SAM](https://huggingface.co/docs/transformers/model_doc/sam) + + +## 100 مشروع يستخدم المحولات + +🤗 Transformers هو أكثر من مجرد مجموعة أدوات لاستخدام النماذج المُدربة مسبقًا: إنه مجتمع من المشاريع المبنية حوله ومركز Hugging Face. نريد أن يمكّن 🤗 Transformers المطورين والباحثين والطلاب والأساتذة والمهندسين وأي شخص آخر من بناء مشاريعهم التي يحلمون بها. + +للاحتفال بالـ 100,000 نجمة من النماذج المحولة، قررنا تسليط الضوء على المجتمع، وقد أنشأنا صفحة [awesome-transformers](./awesome-transformers.md) التي تُدرج 100 مشروعًا رائعًا تم بناؤها بالقرب من النماذج المحولة. + +إذا كنت تمتلك أو تستخدم مشروعًا تعتقد أنه يجب أن يكون جزءًا من القائمة، فالرجاء فتح PR لإضافته! + +## إذا كنت تبحث عن دعم مخصص من فريق Hugging Face + + + HuggingFace Expert Acceleration Program +
+ +## جولة سريعة + +لاستخدام نموذج على الفور على إدخال معين (نص أو صورة أو صوت، ...)، نوفر واجهة برمجة التطبيقات (API) الخاصة بـ `pipeline`. تجمع خطوط الأنابيب بين نموذج مُدرب مسبقًا ومعالجة ما قبل التدريب التي تم استخدامها أثناء تدريب هذا النموذج. فيما يلي كيفية استخدام خط أنابيب بسرعة لتصنيف النصوص الإيجابية مقابل السلبية: + +```python +>>> from transformers import pipeline + +# خصص خط أنابيب للتحليل الشعوري +>>> classifier = pipeline('sentiment-analysis') +>>> classifier('We are very happy to introduce pipeline to the transformers repository.') +[{'label': 'POSITIVE', 'score': 0.9996980428695679}] +``` + +يسمح السطر الثاني من التعليمات البرمجية بتحميل النموذج المُدرب مسبقًا الذي يستخدمه خط الأنابيب وتخزينه مؤقتًا، بينما يقوم السطر الثالث بتقييمه على النص المحدد. هنا، تكون الإجابة "إيجابية" بثقة تبلغ 99.97%. + +تتوفر العديد من المهام على خط أنابيب مُدرب مسبقًا جاهز للاستخدام، في NLP ولكن أيضًا في رؤية الكمبيوتر والخطاب. على سبيل المثال، يمكننا بسهولة استخراج الأشياء المكتشفة في صورة: + +``` python +>>> import requests +>>> from PIL import Image +>>> from transformers import pipeline + +# قم بتنزيل صورة بها قطط لطيفة +>>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/coco_sample.png" +>>> image_data = requests.get(url, stream=True).raw +>>> image = Image.open(image_data) + +# خصص خط أنابيب لكشف الأشياء +>>> object_detector = pipeline('object-detection') +>>> object_detector(image) +[{'score': 0.9982201457023621، + 'label': 'remote'، + 'box': {'xmin': 40, 'ymin': 70, 'xmax': 175, 'ymax': 117}}، + {'score': 0.9960021376609802، + 'label': 'remote'، + 'box': {'xmin': 333, 'ymin': 72, 'xmax': 368, 'ymax': 187}}، + {'score': 0.9954745173454285، + 'label': 'couch'، + 'box': {'xmin': 0, 'ymin': 1, 'xmax': 639, 'ymax': 473}}، + {'score': 0.9988006353378296، + 'label': 'cat'، + 'box': {'xmin': 13, 'ymin': 52, 'xmax': 314, 'ymax': 470}}، + {'score': 0.9986783862113953، + 'label': 'cat'، + 'box': {'xmin': 345, 'ymin': 23, 'xmax': 640, 'ymax': 368}}] +``` + +هنا، نحصل على قائمة بالأشياء المكتشفة في الصورة، مع مربع يحيط بالشيء وتقييم الثقة. فيما يلي الصورة الأصلية على اليسار، مع عرض التوقعات على اليمين: + +

+ + +

+ +يمكنك معرفة المزيد حول المهام التي تدعمها واجهة برمجة التطبيقات (API) الخاصة بـ `pipeline` في [هذا البرنامج التعليمي](https://huggingface.co/docs/transformers/task_summary). + +بالإضافة إلى `pipeline`، لاستخدام أي من النماذج المُدربة مسبقًا على مهمتك، كل ما عليك هو ثلاثة أسطر من التعليمات البرمجية. فيما يلي إصدار PyTorch: +```python +>>> from transformers import AutoTokenizer، AutoModel + +>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased") +>>> model = AutoModel.from_pretrained("google-bert/bert-base-uncased") + +>>> inputs = tokenizer("Hello world!"، return_tensors="pt") +>>> outputs = model(**inputs) +``` + +وهنا رمز مماثل لـ TensorFlow: +```python +>>> from transformers import AutoTokenizer، TFAutoModel + +>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased") +>>> model = TFAutoModel.from_pretrained("google-bert/bert-base-uncased") + +>>> inputs = tokenizer("Hello world!"، return_tensors="tf") +>>> outputs = model(**inputs) +``` + +المُعلم مسؤول عن جميع المعالجة المسبقة التي يتوقعها النموذج المُدرب مسبقًا ويمكن استدعاؤه مباشرة على سلسلة واحدة (كما هو موضح في الأمثلة أعلاه) أو قائمة. سيقوم بإخراج قاموس يمكنك استخدامه في التعليمات البرمجية لأسفل أو تمريره مباشرة إلى نموذجك باستخدام عامل فك التعبئة **. + +النموذج نفسه هو وحدة نمطية عادية [Pytorch `nn.Module`](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) أو [TensorFlow `tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model) (حسب backend) والتي يمكنك استخدامها كالمعتاد. [يوضح هذا البرنامج التعليمي](https://huggingface.co/docs/transformers/training) كيفية دمج مثل هذا النموذج في حلقة تدريب PyTorch أو TensorFlow التقليدية، أو كيفية استخدام واجهة برمجة تطبيقات `Trainer` لدينا لضبطها بدقة بسرعة على مجموعة بيانات جديدة. + +## لماذا يجب أن أستخدم المحولات؟ + +1. نماذج سهلة الاستخدام وحديثة: + - أداء عالي في فهم اللغة الطبيعية وتوليدها ورؤية الكمبيوتر والمهام الصوتية. + - حاجز دخول منخفض للمربين والممارسين. + - عدد قليل من التجريدات التي يواجهها المستخدم مع ثلاث فئات فقط للتعلم. + - واجهة برمجة تطبيقات (API) موحدة لاستخدام جميع نماذجنا المُدربة مسبقًا. + +1. تكاليف الكمبيوتر أقل، وبصمة كربونية أصغر: + - يمكن للباحثين مشاركة النماذج المدربة بدلاً من إعادة التدريب دائمًا. + - يمكن للممارسين تقليل وقت الكمبيوتر وتكاليف الإنتاج. + - عشرات البنيات مع أكثر من 400,000 نموذج مُدرب مسبقًا عبر جميع الطرائق. + +1. اختر الإطار المناسب لكل جزء من عمر النموذج: + - تدريب النماذج الحديثة في 3 أسطر من التعليمات البرمجية. + - قم بنقل نموذج واحد بين إطارات TF2.0/PyTorch/JAX حسب الرغبة. + - اختر الإطار المناسب بسلاسة للتدريب والتقييم والإنتاج. + +1. قم بسهولة بتخصيص نموذج أو مثال وفقًا لاحتياجاتك: + - نوفر أمثلة لكل بنية لإعادة إنتاج النتائج التي نشرها مؤلفوها الأصليون. + - يتم عرض داخليات النموذج بشكل متسق قدر الإمكان. + - يمكن استخدام ملفات النموذج بشكل مستقل عن المكتبة للتجارب السريعة. + +## لماذا لا يجب أن أستخدم المحولات؟ + +- ليست هذه المكتبة عبارة عن مجموعة أدوات من الصناديق المكونة للشبكات العصبية. لم يتم إعادة صياغة التعليمات البرمجية في ملفات النموذج باستخدام تجريدات إضافية عن قصد، بحيث يمكن للباحثين إجراء حلقات تكرار سريعة على كل من النماذج دون الغوص في تجريدات/ملفات إضافية. +- لا يُقصد بواجهة برمجة التطبيقات (API) للتدريب العمل على أي نموذج ولكنه مُستَهدف للعمل مع النماذج التي توفرها المكتبة. للحلقات العامة للتعلم الآلي، يجب استخدام مكتبة أخرى (ربما، [تسريع](https://huggingface.co/docs/accelerate)). +- في حين أننا نسعى جاهدين لتقديم أكبر عدد ممكن من حالات الاستخدام، فإن البرامج النصية الموجودة في مجلد [الأمثلة](https://github.com/huggingface/transformers/tree/main/examples) الخاص بنا هي مجرد أمثلة. من المتوقع ألا تعمل هذه البرامج النصية خارج الصندوق على مشكلتك المحددة وأنه سيُطلب منك تغيير بضع أسطر من التعليمات البرمجية لتكييفها مع احتياجاتك. + +## التثبيت + +### باستخدام pip + +تم اختبار هذا المستودع على Python 3.8+، Flax 0.4.1+، PyTorch 1.11+، و TensorFlow 2.6+. + +يجب تثبيت 🤗 Transformers في [بيئة افتراضية](https://docs.python.org/3/library/venv.html). إذا كنت غير معتاد على البيئات الافتراضية Python، فراجع [دليل المستخدم](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). + +أولاً، قم بإنشاء بيئة افتراضية بالإصدار Python الذي تنوي استخدامه وقم بتنشيطه. + +بعد ذلك، ستحتاج إلى تثبيت واحدة على الأقل من Flax أو PyTorch أو TensorFlow. +يرجى الرجوع إلى [صفحة تثبيت TensorFlow](https://www.tensorflow.org/install/)، و [صفحة تثبيت PyTorch](https://pytorch.org/get-started/locally/#start-locally) و/أو [صفحة تثبيت Flax](https://github.com/google/flax#quick-install) و [صفحة تثبيت Jax](https://github.com/google/jax#installation) بشأن أمر التثبيت المحدد لمنصتك. + +عندما يتم تثبيت إحدى هذه المكتبات الخلفية، يمكن تثبيت 🤗 Transformers باستخدام pip كما يلي: + +```bash +pip install transformers +``` + +إذا كنت ترغب في اللعب مع الأمثلة أو تحتاج إلى أحدث إصدار من التعليمات البرمجية ولا يمكنك الانتظار حتى يتم إصدار إصدار جديد، فيجب [تثبيت المكتبة من المصدر](https://huggingface.co/docs/transformers/installation#installing-from-source). + +### باستخدام conda + +يمكن تثبيت 🤗 Transformers باستخدام conda كما يلي: + +```shell script +conda install conda-forge::transformers +``` + +> **_ملاحظة:_** تم إيقاف تثبيت `transformers` من قناة `huggingface`. + +اتبع صفحات التثبيت الخاصة بـ Flax أو PyTorch أو TensorFlow لمعرفة كيفية تثبيتها باستخدام conda. + +> **_ملاحظة:_** على Windows، قد تتم مطالبتك بتنشيط وضع المطور للاستفادة من التخزين المؤقت. إذا لم يكن هذا خيارًا بالنسبة لك، فيرجى إعلامنا بذلك في [هذه المشكلة](https://github.com/huggingface/huggingface_hub/issues/1062). + +## بنيات النماذج + +**[جميع نقاط تفتيش النموذج](https://huggingface.co/models)** التي يوفرها 🤗 Transformers مدمجة بسلاسة من مركز [huggingface.co](https://huggingface.co/models) [model hub](https://huggingface.co/models)، حيث يتم تحميلها مباشرة من قبل [المستخدمين](https://huggingface.co/users) و [المنظمات](https://huggingface.co/organizations). + +عدد نقاط التفتيش الحالية: ![](https://img.shields.io/endpoint?url=https://huggingface.co/api/shields/models&color=brightgreen) + +يوفر 🤗 Transformers حاليًا البنيات التالية: راجع [هنا](https://huggingface.co/docs/transformers/model_summary) للحصول على ملخص لكل منها. + +للتحقق مما إذا كان لكل نموذج تنفيذ في Flax أو PyTorch أو TensorFlow، أو كان لديه مُعلم مرفق مدعوم من مكتبة 🤗 Tokenizers، يرجى الرجوع إلى [هذا الجدول](https://huggingface.co/docs/transformers/index#supported-frameworks). + +تم اختبار هذه التطبيقات على العديد من مجموعات البيانات (راجع البرامج النصية المثالية) ويجب أن تتطابق مع أداء التنفيذ الأصلي. يمكنك العثور على مزيد من التفاصيل حول الأداء في قسم الأمثلة من [الوثائق](https://github.com/huggingface/transformers/tree/main/examples). + + +## تعلم المزيد + +| القسم | الوصف | +|-|-| +| [وثائق](https://huggingface.co/docs/transformers/) | وثائق واجهة برمجة التطبيقات (API) الكاملة والبرامج التعليمية | +| [ملخص المهام](https://huggingface.co/docs/transformers/task_summary) | المهام التي يدعمها 🤗 Transformers | +| [برنامج تعليمي لمعالجة مسبقة](https://huggingface.co/docs/transformers/preprocessing) | استخدام فئة `Tokenizer` لإعداد البيانات للنماذج | +| [التدريب والضبط الدقيق](https://huggingface.co/docs/transformers/training) | استخدام النماذج التي يوفرها 🤗 Transformers في حلقة تدريب PyTorch/TensorFlow وواجهة برمجة تطبيقات `Trainer` | +| [جولة سريعة: البرامج النصية للضبط الدقيق/الاستخدام](https://github.com/huggingface/transformers/tree/main/examples) | البرامج النصية المثالية للضبط الدقيق للنماذج على مجموعة واسعة من المهام | +| [مشاركة النماذج وتحميلها](https://huggingface.co/docs/transformers/model_sharing) | تحميل ومشاركة نماذجك المضبوطة بدقة مع المجتمع | + +## الاستشهاد + +لدينا الآن [ورقة](https://www.aclweb.org/anthology/2020.emnlp-demos.6/) يمكنك الاستشهاد بها لمكتبة 🤗 Transformers: +```bibtex +@inproceedings{wolf-etal-2020-transformers، + title = "Transformers: State-of-the-Art Natural Language Processing"، + author = "Thomas Wolf and Lysandre Debut and Victor Sanh and Julien Chaumond and Clement Delangue and Anthony Moi and Pierric Cistac and Tim Rault and R{\'e}mi Louf and Morgan Funtowicz and Joe Davison and Sam Shleifer and Patrick von Platen and Clara Ma and Yacine Jernite and Julien Plu and Canwen Xu and Teven Le Scao and Sylvain Gugger and Mariama Drame and Quentin Lhoest and Alexander M. Rush"، + booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations"، + month = oct، + year = "2020"، + address = "Online"، + publisher = "Association for Computational Linguistics"، + url = "https://www.aclweb.org/anthology/2020.emnlp-demos.6"، + pages = "38--45" +} +``` \ No newline at end of file From 5ec1e0f504b921f3609f9b1209b4a98c66bf56d8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:05 +0300 Subject: [PATCH 226/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20README?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cb1e2129cea510cdc4e08b4567542f3dc60743b7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:06 +0300 Subject: [PATCH 227/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/accelerate.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 17ae34ec9418d0ff680a5c926e5e5b7c6c46d0ed Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:08 +0300 Subject: [PATCH 228/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/add=5Fnew=5Fpipeline.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f7a912745aa528cede595a971a00fcf651508a39 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:10 +0300 Subject: [PATCH 229/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/attention.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1d3da0f3bf30aa0272c6d2a77782b5bf800cede9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:11 +0300 Subject: [PATCH 230/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/bertology.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a69d515e6c677cbb24420a927ff3f26021884f4c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:13 +0300 Subject: [PATCH 231/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/community.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c2ed309a31b554d8ce85d4662011de18ca6e523f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:15 +0300 Subject: [PATCH 232/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/fsdp.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 40e8dff36d963550a2c5a45fd05dedc38fc74549 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:17 +0300 Subject: [PATCH 233/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/glossary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9d04f12dc925221b616c3cfb114530f9b14e45d0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:19 +0300 Subject: [PATCH 234/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/hpo=5Ftrain.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 070f7a2231546ddb004fb5382fde9ea54092e9d2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:20 +0300 Subject: [PATCH 235/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/conversations.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 58ed69ba2b816229b4b480e2c2d9fe1ef57a2b9e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:22 +0300 Subject: [PATCH 236/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/index.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 687ee73187f0fda0e60510610473128420b9d5c3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:24 +0300 Subject: [PATCH 237/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/installation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1241fa6499e026189acb07ba1953498fe7ce73b4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:25 +0300 Subject: [PATCH 238/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/custom=5Fmodels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c92071f52c78400a3829c8c1282a63f3bcffc7d5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:27 +0300 Subject: [PATCH 239/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/llm=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 023b237abfaa5ed62b3c1facb32140369b065f80 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:29 +0300 Subject: [PATCH 240/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/model=5Fsharing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c95b5a2434bb295a334bec4b03f9e9a6aae8d630 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:31 +0300 Subject: [PATCH 241/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/fast=5Ftokenizers.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From b02a6171d5ab40a5167ec3dff8f217dc8754c1a4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:32 +0300 Subject: [PATCH 242/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/multilingual.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 238faf2c613f626c99e165d3f515077e6de0cdb9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:34 +0300 Subject: [PATCH 243/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/notebooks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a7104e0d3f21a161776fd575148328f46522d638 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:36 +0300 Subject: [PATCH 244/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pad=5Ftruncation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ae9a533f6ea898387127b48e7cfbe95bbcbff04d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:37 +0300 Subject: [PATCH 245/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/peft.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c4617c6771125830bf876283ff23d39a689b8ca4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:39 +0300 Subject: [PATCH 246/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Fhardware.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cd3d95607068eadbdeba6dd54a07f05172ae0528 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:41 +0300 Subject: [PATCH 247/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/generation=5Fstrategies.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6dac1e3c5d011a275835b6bdabe4b750d6303e91 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:42 +0300 Subject: [PATCH 248/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/gguf.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2eaebad478c54791d342631f40f0f9bdb0519d5e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:44 +0300 Subject: [PATCH 249/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/llm=5Foptims.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 33a15fac8d69e7407d20451bd054b6ab05591dd2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:46 +0300 Subject: [PATCH 250/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fcpu=5Fmany.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9f07be148e6cb133992b9f2cf0e27fd14f31e0b1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:48 +0300 Subject: [PATCH 251/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/model=5Fmemory=5Fanatomy.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9e380ea619e9eb768f9a0c53ca5ded2ce2bebd4a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:50 +0300 Subject: [PATCH 252/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fgpu=5Fmany.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 354b2e85d3bd4c65536bc4c7872756559cf42519 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:51 +0300 Subject: [PATCH 253/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/model=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From ac7b21454283db7d84505ac62d45748d5e22ffd6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:53 +0300 Subject: [PATCH 254/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Finfer=5Fcpu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7c02f90fe966366ea775106eb7b3768416401189 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:55 +0300 Subject: [PATCH 255/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fspecial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 132cf28568f77e5798309c86f12c6d3b9f7593af Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:56 +0300 Subject: [PATCH 256/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perplexity.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From bdc8f0bbd0b5fbca400507c0338c0e152034f4b4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:19:58 +0300 Subject: [PATCH 257/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/philosophy.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d0b272003b8a7c97dca9808fbb3f6db054d220f0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:00 +0300 Subject: [PATCH 258/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pipeline=5Fwebserver.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From b704a136bbeaf4bdff9b90ee6c6250e7b362299b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:01 +0300 Subject: [PATCH 259/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Finfer=5Fgpu=5Fone.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cd4ba27826ab2782ddcf2412652766da322ba495 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:03 +0300 Subject: [PATCH 260/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/sagemaker.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7b175a02ef9599226147e288872599046546eb60 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:05 +0300 Subject: [PATCH 261/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/serialization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 486cad00f1ec4d22f072adbd2f130e4ef7c1f318 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:06 +0300 Subject: [PATCH 262/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fgpu=5Fone.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1f22fa69aec754b1a7bb16d5a63a5a0c2b4a8888 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:08 +0300 Subject: [PATCH 263/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/add=5Fnew=5Fmodel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0afc9d65153012b4e9a0fb67dd6f754dd420da93 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:10 +0300 Subject: [PATCH 264/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/agents.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9cd91a174404b824851c8ed04cddbe59a29edde0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:12 +0300 Subject: [PATCH 265/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/autoclass=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f454f227293825e855b6847b84bf7fe5ed428196 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:14 +0300 Subject: [PATCH 266/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/benchmarks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7337e0bf0f546191e37c8e0aaf03d81df7841a48 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:15 +0300 Subject: [PATCH 267/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/big=5Fmodels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7fbe4a8ae9c41e3af7ce2a8fa61268b5859fe858 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:17 +0300 Subject: [PATCH 268/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/chat=5Ftemplating.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2e9e71f7e1e3eb41d57f3486b6c1d467c24d77e6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:19 +0300 Subject: [PATCH 269/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/contributing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 39ee1622550970497652ea226fa85c320d76c3ab Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:20 +0300 Subject: [PATCH 270/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/create=5Fa=5Fmodel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 31c8f5179e735d7a0d455dde987c17e52f54c162 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:22 +0300 Subject: [PATCH 271/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/debugging.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e9a6e5b1f119a8e80f3d77d2dec9b473b4d6136b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:24 +0300 Subject: [PATCH 272/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/deepspeed.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 4f4275b46d6fd4d213a080e9c6cece4c0cc9a9c2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:26 +0300 Subject: [PATCH 273/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/llm=5Ftutorial=5Foptimization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2ece3a578b9dc3abb073ffea1e39b330a682a4b1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:28 +0300 Subject: [PATCH 274/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftorch=5Fcompile.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 2488422fe5dec5ea50d5efb00ded8f7eb35cb89b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:30 +0300 Subject: [PATCH 275/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Fcpu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 08f94c0fd08428a2ecdd08fd66e3f79fb725fe0b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:31 +0300 Subject: [PATCH 276/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/perf=5Ftrain=5Ftpu=5Ftf.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 91448eb84965887f8b4335d1b8666f9b914d629e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:34 +0300 Subject: [PATCH 277/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/performance.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 01590963eef184d4ced31117c16bef43309933b1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:35 +0300 Subject: [PATCH 278/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pipeline=5Ftutorial.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3f94fc005b2bcfa17259be41c34c88db006f5e98 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:37 +0300 Subject: [PATCH 279/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/pr=5Fchecks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From cfb4e57176c2fa603443bb4acc5bf44a119534f6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:39 +0300 Subject: [PATCH 280/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/preprocessing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 85fc153e2ac7fe922ecb1731b0e9a8f3dff2cb2a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:40 +0300 Subject: [PATCH 281/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quicktour.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 989587bab4f939986d03dfe1cb3b7def2acdb0e7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:42 +0300 Subject: [PATCH 282/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/run=5Fscripts.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From bb4197301d6cf05679e64aaa893632d1ca84c379 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:43 +0300 Subject: [PATCH 283/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/task=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 04783dedf0386a743b3434177c3d2a4f0f768889 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:45 +0300 Subject: [PATCH 284/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks=5Fexplained.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 9a90ab12381c53b2e4d1b78d25ffbf2982c9d515 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:47 +0300 Subject: [PATCH 285/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tokenizer=5Fsummary.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c9204a8f8837fb643ccb7bd1ce5d8b346b19a949 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:48 +0300 Subject: [PATCH 286/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/trainer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7a7135c9450bf09640fe19b59c251a7353642591 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:50 +0300 Subject: [PATCH 287/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tflite.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 18c9f9d2912cd7aee468edc0b550312a607bc6ee Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:52 +0300 Subject: [PATCH 288/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tf=5Fxla.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3140880ba3d4b8da2b03883ade069cef102e5928 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:53 +0300 Subject: [PATCH 289/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/torchscript.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d8cf386c5b9bc95ab0e84baa6a2c595df510216e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:55 +0300 Subject: [PATCH 290/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/training.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 7c980c6fe00142b27a8dbcac8ede10979998e89e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:57 +0300 Subject: [PATCH 291/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/testing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From eec85d9d0c9bfd22250947c7c24ea4c5016858cf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:20:59 +0300 Subject: [PATCH 292/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/troubleshooting.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 93feb3c95f1ecc6dd86a462a5cdf1a752c0b4ba8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:00 +0300 Subject: [PATCH 293/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/=5Ftoctree.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6ed9fafd4eeb5b31b86c5cbcf40f5f3f737e7de6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:02 +0300 Subject: [PATCH 294/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/aqlm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From d67f7da50df0eeb84d474f8931532db77d497a48 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:04 +0300 Subject: [PATCH 295/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/awq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6f1ff64de8e879a284760148a9a8f612efa63f7d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:05 +0300 Subject: [PATCH 296/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/contribute.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From dcda7ca6dda697b8704fd62f3fffb0dfe53cab68 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:07 +0300 Subject: [PATCH 297/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/eetq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6f91dc5fc333eb5e8e6d506519ba339514ab1c96 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:09 +0300 Subject: [PATCH 298/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/optimum.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a05054247e9dd7a9bb12cfb0628b3a08a693cd37 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:10 +0300 Subject: [PATCH 299/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/overview.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 305262ec29a5f3231fe31ad275fe379686ed0aaa Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:12 +0300 Subject: [PATCH 300/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/quanto.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 274d932bdf29873199ced34fd27acea111fdcf13 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:14 +0300 Subject: [PATCH 301/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/gptq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 991e1ae94c7a0b78ecbbbac08e88002c19df3f3d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:15 +0300 Subject: [PATCH 302/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/hqq.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 237af1265448827aa4b5494027c819d88916e729 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:17 +0300 Subject: [PATCH 303/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/bitsandbytes.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e54a33e4b37d25d7da4869f6d8c511203e586907 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:19 +0300 Subject: [PATCH 304/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/quantization/fbgemm=5Ffp8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From eed9f61a97ed9e19c6d4c53c6fca286c1cb01b27 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:21 +0300 Subject: [PATCH 305/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/document=5Fquestion=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f16409403dd35804bb365beb1cfd4e44afafc126 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:22 +0300 Subject: [PATCH 306/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/asr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 43554022a5e3528b7d69ec8d0b5ba09465c9b6f1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:24 +0300 Subject: [PATCH 307/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fcaptioning.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3ff860132d07a0fb623e04ef890c71f5ade9fbca Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:26 +0300 Subject: [PATCH 308/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/audio=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a9c143fd379855b2e373cafeb6fd85235d78ac16 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:28 +0300 Subject: [PATCH 309/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/idefics.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1fcef9ee21836f29c406b7d8ecdac95332ecc3b4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:30 +0300 Subject: [PATCH 310/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Ftext=5Fto=5Ftext.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0d0cbea82d1861be36a79f38145df08d40286553 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:31 +0300 Subject: [PATCH 311/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fto=5Fimage.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 903221e999b77e1c44a0fe474ddcfac461d4487c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:33 +0300 Subject: [PATCH 312/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/knowledge=5Fdistillation=5Ffor=5Fimage=5Fclassif?= =?UTF-8?q?ication.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 86b0e91554b6171b9203bfb656d4e2799b07ab11 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:35 +0300 Subject: [PATCH 313/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/masked=5Flanguage=5Fmodeling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 1af69c3494f356d61ba17877bafb6a00e0e2b90a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:36 +0300 Subject: [PATCH 314/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/monocular=5Fdepth=5Festimation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6398f34fb1f01f502a5189667e97302576026b01 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:38 +0300 Subject: [PATCH 315/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/multiple=5Fchoice.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From e7b2b2f213e0714c2cdc1a39d0010b404184d21b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:40 +0300 Subject: [PATCH 316/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/mask=5Fgeneration.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From da9d19cf7f3535b4848e4e55fb4276c73a6f6389 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:41 +0300 Subject: [PATCH 317/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/language=5Fmodeling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 646e1bb21881f1c4235a8200646f35a59828f598 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:43 +0300 Subject: [PATCH 318/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/text-to-speech.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 845f20527ed2dc5aa7ac29380ec8704d2ef4a5e2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:45 +0300 Subject: [PATCH 319/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Ffeature=5Fextraction.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 832497239b97eb22e04e8c109024f248d2cd00d4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:46 +0300 Subject: [PATCH 320/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/image=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6c042bb97e8650c4c91ab8b90e0a3fdac2491f57 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:48 +0300 Subject: [PATCH 321/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/zero=5Fshot=5Fobject=5Fdetection.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 72bfa7c7ced00b9b95781bb4ac43f1f0f9dca2f9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:50 +0300 Subject: [PATCH 322/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/object=5Fdetection.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 48fdb523d465569648ccc8f83ff36caead3c05a4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:52 +0300 Subject: [PATCH 323/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/prompting.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a1fadae525f368e385172871776f809ed4c841c4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:53 +0300 Subject: [PATCH 324/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/question=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 6ee391566ad695df2bab6a1db6d047a9934c7ab6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:55 +0300 Subject: [PATCH 325/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/semantic=5Fsegmentation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 263ea0787e9fe7151e54c82116df372b7f876eec Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:57 +0300 Subject: [PATCH 326/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/sequence=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 63e8d8f3bca628e443de8a15d67c7f4ddc75b0df Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:21:58 +0300 Subject: [PATCH 327/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/summarization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 023e75b47fb8995ebd016b064cf588984fbab367 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:00 +0300 Subject: [PATCH 328/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/token=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From f75dae05cf5223a752c47d3a9bd8ef2bb46b27a4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:02 +0300 Subject: [PATCH 329/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/translation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From af10133dfea5531018f90c66faec59595f65a592 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:04 +0300 Subject: [PATCH 330/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/video=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 13067711271289f4800fe5567abb45f6f98432e9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:05 +0300 Subject: [PATCH 331/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/visual=5Fquestion=5Fanswering.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3fbd3e0a23a91cf21d4333ecc4b224c3a414ad61 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:07 +0300 Subject: [PATCH 332/653] =?UTF-8?q?=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20docs/s?= =?UTF-8?q?ource/ar/tasks/zero=5Fshot=5Fimage=5Fclassification.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 53ef0c7e411b4c6ce9468385401984853a9c40f4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:09 +0300 Subject: [PATCH 333/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/time=5Fseries=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/time_series_utils.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/source/ar/internal/time_series_utils.md diff --git a/docs/source/ar/internal/time_series_utils.md b/docs/source/ar/internal/time_series_utils.md new file mode 100644 index 00000000000000..ce42b1315a7a80 --- /dev/null +++ b/docs/source/ar/internal/time_series_utils.md @@ -0,0 +1,11 @@ +# المرافق الزمنية + +تصف هذه الصفحة جميع وظائف وفئات المرافق التي يمكن استخدامها للنماذج المستندة إلى السلاسل الزمنية. معظم هذه الوظائف مفيدة فقط إذا كنت تدرس شفرة نماذج السلاسل الزمنية أو ترغب في إضافة إلى مجموعة فئات الإخراج التوزيعي. + +## الإخراج التوزيعي + +[[autodoc]] time_series_utils.NormalOutput + +[[autodoc]] time_series_utils.StudentTOutput + +[[autodoc]] time_series_utils.NegativeBinomialOutput \ No newline at end of file From 7e2da97f2510dbb3a48a3057bc8910a729f41438 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:11 +0300 Subject: [PATCH 334/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/audio=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/audio_utils.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/source/ar/internal/audio_utils.md diff --git a/docs/source/ar/internal/audio_utils.md b/docs/source/ar/internal/audio_utils.md new file mode 100644 index 00000000000000..8195c142b5932e --- /dev/null +++ b/docs/source/ar/internal/audio_utils.md @@ -0,0 +1,23 @@ +# المرافق لبرنامج 'FeatureExtractors' + +هذه الصفحة تسرد جميع وظائف المرافق التي يمكن أن يستخدمها برنامج FeatureExtractor الصوتي لحساب ميزات خاصة من الصوت الخام باستخدام خوارزميات شائعة مثل تحويل فورييه قصير الوقت أو مخطط Mel اللوغاريتمي. + +معظم هذه الوظائف مفيدة فقط إذا كنت تدرس شفرة معالجات الصوت في المكتبة. + +## التحولات الصوتية + +[[autodoc]] audio_utils.hertz_to_mel + +[[autodoc]] audio_utils.mel_to_hertz + +[[autodoc]] audio_utils.mel_filter_bank + +[[autodoc]] audio_utils.optimal_fft_length + +[[autodoc]] audio_utils.window_function + +[[autodoc]] audio_utils.spectrogram + +[[autodoc]] audio_utils.power_to_db + +[[autodoc]] audio_utils.amplitude_to_db \ No newline at end of file From 2f3e8480025d55a2cf914e01603531edd55acc01 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:13 +0300 Subject: [PATCH 335/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/file=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/file_utils.md | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/source/ar/internal/file_utils.md diff --git a/docs/source/ar/internal/file_utils.md b/docs/source/ar/internal/file_utils.md new file mode 100644 index 00000000000000..cd0e7b14b7a21c --- /dev/null +++ b/docs/source/ar/internal/file_utils.md @@ -0,0 +1,31 @@ +# المرافق العامة + +تصف هذه الصفحة جميع وظائف المرافق العامة في مكتبة Transformers والتي يمكن العثور عليها في ملف `utils.py`. معظم هذه الوظائف مفيدة فقط إذا كنت تدرس كود المكتبة العام. + +## الأنواع المسماة والمجموعات المسماة (Enums and namedtuples) + +[[autodoc]] utils.ExplicitEnum + +[[autodoc]] utils.PaddingStrategy + +[[autodoc]] utils.TensorType + +## الزخارف الخاصة (Special Decorators) + +[[autodoc]] utils.add_start_docstrings + +[[autodoc]] utils.add_start_docstrings_to_model_forward + +[[autodoc]] utils.add_end_docstrings + +[[autodoc]] utils.add_code_sample_docstrings + +[[autodoc]] utils.replace_return_docstrings + +## الخصائص الخاصة (Special Properties) + +[[autodoc]] utils.cached_property + +## مرافق أخرى (Other Utilities) + +[[autodoc]] utils._LazyModule \ No newline at end of file From 9a80a829b8e6ed3d4b46f8304f08e09427467929 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:15 +0300 Subject: [PATCH 336/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/generation=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/generation_utils.md | 279 ++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 docs/source/ar/internal/generation_utils.md diff --git a/docs/source/ar/internal/generation_utils.md b/docs/source/ar/internal/generation_utils.md new file mode 100644 index 00000000000000..8851ef25248c9d --- /dev/null +++ b/docs/source/ar/internal/generation_utils.md @@ -0,0 +1,279 @@ +# أدوات مساعدة للجيل + +تسرد هذه الصفحة جميع دالات الأدوات المساعدة التي يستخدمها [~generation.GenerationMixin.generate]. + +## مخرجات التوليد + +مخرج [~generation.GenerationMixin.generate] هو مثيل لصنف فرعي من [~utils.ModelOutput]. وهذا المخرج هو بنية بيانات تحتوي على جميع المعلومات التي يعيدها [~generation.GenerationMixin.generate]، ولكن يمكن استخدامها أيضًا كمجموعة أو قاموس. + +فيما يلي مثال: + +```python +from transformers import GPT2Tokenizer, GPT2LMHeadModel + +tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2") +model = GPT2LMHeadModel.from_pretrained("openai-community/gpt2") + +inputs = tokenizer("Hello, my dog is cute and ", return_tensors="pt") +generation_output = model.generate(**inputs, return_dict_in_generate=True, output_scores=True) +``` + +`generation_output` هو كائن [~generation.GenerateDecoderOnlyOutput]، كما يمكننا أن نرى في وثائق تلك الفئة أدناه، وهذا يعني أنه يحتوي على السمات التالية: + +- `sequences`: تتابعات الرموز المولدة +- `scores` (اختياري): درجات التنبؤ لرأس النمذجة اللغوية، لكل خطوة من خطوات التوليد +- `hidden_states` (اختياري): الحالات المخفية للنموذج، لكل خطوة من خطوات التوليد +- `attentions` (اختياري): أوزان الانتباه للنموذج، لكل خطوة من خطوات التوليد + +هنا لدينا `scores` لأننا مررنا `output_scores=True`، ولكن ليس لدينا `hidden_states` و`attentions` لأننا لم نمرر `output_hidden_states=True` أو `output_attentions=True`. + +يمكنك الوصول إلى كل سمة كما تفعل عادةً، وإذا لم تكن السمة قد أعيدت من النموذج، فستحصل على `None`. على سبيل المثال، هنا `generation_output.scores` هي جميع درجات التنبؤ المولدة لرأس النمذجة اللغوية، و`generation_output.attentions` هي `None`. + +عند استخدام كائن `generation_output` كمجموعة، فإنه يحتفظ فقط بالسمات التي لا تحتوي على قيم `None`. هنا، على سبيل المثال، يحتوي على عنصرين، `loss` ثم `logits`، لذا + +```python +generation_output[:2] +``` + +ستعيد المجموعة `(generation_output.sequences, generation_output.scores)` على سبيل المثال. + +عند استخدام كائن `generation_output` كقاموس، فإنه يحتفظ فقط بالسمات التي لا تحتوي على قيم `None`. هنا، على سبيل المثال، يحتوي على مفتاحين هما `sequences` و`scores`. + +نوثق هنا جميع أنواع المخرجات. + +### باي تورتش + +[[autodoc]] generation.GenerateDecoderOnlyOutput +[[autodoc]] generation.GenerateEncoderDecoderOutput +[[autodoc]] generation.GenerateBeamDecoderOnlyOutput +[[autodoc]] generation.GenerateBeamEncoderDecoderOutput + +### تنسورفلو + +[[autodoc]] generation.TFGreedySearchEncoderDecoderOutput +[[autodoc]] generation.TFGreedySearchDecoderOnlyOutput +[[autodoc]] generation.TFSampleEncoderDecoderOutput +[[autodoc]] generation.TFSampleDecoderOnlyOutput +[[autodoc]] generation.TFBeamSearchEncoderDecoderOutput +[[autodoc]] generation.TFBeamSearchDecoderOnlyOutput +[[autodoc]] generation.TFBeamSampleEncoderDecoderOutput +[[autodoc]] generation.TFBeamSampleDecoderOnlyOutput +[[autodoc]] generation.TFContrastiveSearchEncoderDecoderOutput +[[autodoc]] generation.TFContrastiveSearchDecoderOnlyOutput + +### فلاكس + +[[autodoc]] generation.FlaxSampleOutput +[[autodoc]] generation.FlaxGreedySearchOutput +[[autodoc]] generation.FlaxBeamSearchOutput + +## معالج الرموز + +يمكن استخدام [`LogitsProcessor`] لتعديل درجات التنبؤ لرأس نموذج اللغة من أجل التوليد. + +### باي تورتش + +[[autodoc]] AlternatingCodebooksLogitsProcessor +- __call__ +[[autodoc]] ClassifierFreeGuidanceLogitsProcessor +- __call__ +[[autodoc]] EncoderNoRepeatNGramLogitsProcessor +- __call__ +[[autodoc]] EncoderRepetitionPenaltyLogitsProcessor +- __call__ +[[autodoc]] EpsilonLogitsWarper +- __call__ +[[autodoc]] EtaLogitsWarper +- __call__ +[[autodoc]] ExponentialDecayLengthPenalty +- __call__ +[[autodoc]] ForcedBOSTokenLogitsProcessor +- __call__ +[[autodoc]] ForcedEOSTokenLogitsProcessor +- __call__ +[[autodoc]] ForceTokensLogitsProcessor +- __call__ +[[autodoc]] HammingDiversityLogitsProcessor +- __call__ +[[autodoc]] InfNanRemoveLogitsProcessor +- __call__ +[[autodoc]] LogitNormalization +- __call__ +[[autodoc]] LogitsProcessor +- __call__ +[[autodoc]] LogitsProcessorList +- __call__ +[[autodoc]] LogitsWarper +- __call__ +[[autodoc]] MinLengthLogitsProcessor +- __call__ +[[autodoc]] MinNewTokensLengthLogitsProcessor +- __call__ +[[autodoc]] MinPLogitsWarper +- __call__ +[[autodoc]] NoBadWordsLogitsProcessor +- __call__ +[[autodoc]] NoRepeatNGramLogitsProcessor +- __call__ +[[autodoc]] PrefixConstrainedLogitsProcessor +- __call__ +[[autodoc]] RepetitionPenaltyLogitsProcessor +- __call__ +[[autodoc]] SequenceBiasLogitsProcessor +- __call__ +[[autodoc]] SuppressTokensAtBeginLogitsProcessor +- __call__ +[[autodoc]] SuppressTokensLogitsProcessor +- __call__ +[[autodoc]] TemperatureLogitsWarper +- __call__ +[[autodoc]] TopKLogitsWarper +- __call__ +[[autodoc]] TopPLogitsWarper +- __call__ +[[autodoc]] TypicalLogitsWarper +- __call__ +[[autodoc]] UnbatchedClassifierFreeGuidanceLogitsProcessor +- __call__ +[[autodoc]] WhisperTimeStampLogitsProcessor +- __call__ +[[autodoc]] WatermarkLogitsProcessor +- __call__ + +### تنسورفلو + +[[autodoc]] TFForcedBOSTokenLogitsProcessor +- __call__ +[[autodoc]] TFForcedEOSTokenLogitsProcessor +- __call__ +[[autodoc]] TFForceTokensLogitsProcessor +- __call__ +[[autodoc]] TFLogitsProcessor +- __call__ +[[autodoc]] TFLogitsProcessorList +- __call__ +[[autodoc]] TFLogitsWarper +- __call__ +[[autodoc]] TFMinLengthLogitsProcessor +- __call__ +[[autodoc]] TFNoBadWordsLogitsProcessor +- __call__ +[[autodoc]] TFNoRepeatNGramLogitsProcessor +- __call__ +[[autodoc]] TFRepetitionPenaltyLogitsProcessor +- __call__ +[[autodoc]] TFSuppressTokensAtBeginLogitsProcessor +- __call__ +[[autodoc]] TFSuppressTokensLogitsProcessor +- __call__ +[[autodoc]] TFTemperatureLogitsWarper +- __call__ +[[autodoc]] TFTopKLogitsWarper +- __call__ +[[autodoc]] TFTopPLogitsWarper +- __call__ + +### فلاكس + +[[autodoc]] FlaxForcedBOSTokenLogitsProcessor +- __call__ +[[autodoc]] FlaxForcedEOSTokenLogitsProcessor +- __call__ +[[autodoc]] FlaxForceTokensLogitsProcessor +- __call__ +[[autodoc]] FlaxLogitsProcessor +- __call__ +[[autodoc]] FlaxLogitsProcessorList +- __call__ +[[autodoc]] FlaxLogitsWarper +- __call__ +[[autodoc]] FlaxMinLengthLogitsProcessor +- __call__ +[[autodoc]] FlaxSuppressTokensAtBeginLogitsProcessor +- __call__ +[[autodoc]] FlaxSuppressTokensLogitsProcessor +- __call__ +[[autodoc]] FlaxTemperatureLogitsWarper +- __call__ +[[autodoc]] FlaxTopKLogitsWarper +- __call__ +[[autodoc]] FlaxTopPLogitsWarper +- __call__ +[[autodoc]] FlaxWhisperTimeStampLogitsProcessor +- __call__ + +## معايير التوقف + +يمكن استخدام [`StoppingCriteria`] لتغيير وقت إيقاف التوليد (بخلاف رمز EOS). يرجى ملاحظة أن هذا متاح حصريًا لتنفيذات باي تورتش. + +[[autodoc]] StoppingCriteria +- __call__ +[[autodoc]] StoppingCriteriaList +- __call__ +[[autodoc]] MaxLengthCriteria +- __call__ +[[autodoc]] MaxTimeCriteria +- __call__ +[[autodoc]] StopStringCriteria +- __call__ +[[autodoc]] EosTokenCriteria +- __call__ + +## القيود + +يمكن استخدام [`Constraint`] لإجبار التوليد على تضمين رموز أو تسلسلات محددة في المخرج. يرجى ملاحظة أن هذا متاح حصريًا لتنفيذات باي تورتش. + +[[autodoc]] Constraint +[[autodoc]] PhrasalConstraint +[[autodoc]] DisjunctiveConstraint +[[autodoc]] ConstraintListState + +## بحث الشعاع + +[[autodoc]] BeamScorer +- process +- finalize +[[autodoc]] BeamSearchScorer +- process +- finalize +[[autodoc]] ConstrainedBeamSearchScorer +- process +- finalize + +## البث المباشر + +[[autodoc]] TextStreamer +[[autodoc]] TextIteratorStreamer + +## ذاكرة التخزين المؤقت + +[[autodoc]] Cache +- update +[[autodoc]] CacheConfig +- update +[[autodoc]] QuantizedCacheConfig +- validate +[[autodoc]] DynamicCache +- update +- get_seq_length +- reorder_cache +- to_legacy_cache +- from_legacy_cache +[[autodoc]] QuantizedCache +- update +- get_seq_length +[[autodoc]] QuantoQuantizedCache +[[autodoc]] HQQQuantizedCache +[[autodoc]] SinkCache +- update +- get_seq_length +- reorder_cache +[[autodoc]] StaticCache +- update +- get_seq_length +- reset + +## فائدة علامة مائية + +[[autodoc]] WatermarkDetector +- __call__ \ No newline at end of file From fc8b3a2464f93d0a637d6de71b6b8ee8925eae8a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:16 +0300 Subject: [PATCH 337/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/image=5Fprocessing=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/internal/image_processing_utils.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/source/ar/internal/image_processing_utils.md diff --git a/docs/source/ar/internal/image_processing_utils.md b/docs/source/ar/internal/image_processing_utils.md new file mode 100644 index 00000000000000..65d68c43a052af --- /dev/null +++ b/docs/source/ar/internal/image_processing_utils.md @@ -0,0 +1,31 @@ +# وظائف مساعدة لمعالجات الصور + +تصف هذه الصفحة جميع وظائف المساعدة التي تستخدمها معالجات الصور، خاصة التحولات الوظيفية المستخدمة لمعالجة الصور. + +معظم هذه الوظائف مفيدة فقط إذا كنت تدرس كود معالجات الصور في المكتبة. + +## تحولات الصور + +[[autodoc]] image_transforms.center_crop + +[[autodoc]] image_transforms.center_to_corners_format + +[[autodoc]] image_transforms.corners_to_center_format + +[[autodoc]] image_transforms.id_to_rgb + +[[autodoc]] image_transforms.normalize + +[[autodoc]] image_transforms.pad + +[[autodoc]] image_transforms.rgb_to_id + +[[autodoc]] image_transforms.rescale + +[[autodoc]] image_transforms.resize + +[[autodoc]] image_transforms.to_pil_image + +## ImageProcessingMixin + +[[autodoc]] image_processing_utils.ImageProcessingMixin \ No newline at end of file From 1003f86a378c0f14c55718649f8e37c20d38fa81 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:18 +0300 Subject: [PATCH 338/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/modeling=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/modeling_utils.md | 69 +++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/source/ar/internal/modeling_utils.md diff --git a/docs/source/ar/internal/modeling_utils.md b/docs/source/ar/internal/modeling_utils.md new file mode 100644 index 00000000000000..7b7272833131ad --- /dev/null +++ b/docs/source/ar/internal/modeling_utils.md @@ -0,0 +1,69 @@ +# الطبقات المخصصة ووظائف المساعدة + +تصف هذه الصفحة جميع الطبقات المخصصة التي تستخدمها المكتبة، بالإضافة إلى وظائف المساعدة التي توفرها لنمذجة. معظم هذه الوظائف مفيدة فقط إذا كنت تدرس شفرة نماذج المكتبة. + +## وحدات PyTorch المخصصة + +- pytorch_utils.Conv1D + +- modeling_utils.PoolerStartLogits + + - forward + +- modeling_utils.PoolerEndLogits + + - forward + +- modeling_utils.PoolerAnswerClass + + - forward + +- modeling_utils.SquadHeadOutput + +- modeling_utils.SQuADHead + + - forward + +- modeling_utils.SequenceSummary + + - forward + +## وظائف مساعدة PyTorch + +- pytorch_utils.apply_chunking_to_forward + +- pytorch_utils.find_pruneable_heads_and_indices + +- pytorch_utils.prune_layer + +- pytorch_utils.prune_conv1d_layer + +- pytorch_utils.prune_linear_layer + +## طبقات TensorFlow المخصصة + +- modeling_tf_utils.TFConv1D + +- modeling_tf_utils.TFSequenceSummary + +## دالات خسارة TensorFlow + +- modeling_tf_utils.TFCausalLanguageModelingLoss + +- modeling_tf_utils.TFMaskedLanguageModelingLoss + +- modeling_tf_utils.TFMultipleChoiceLoss + +- modeling_tf_utils.TFQuestionAnsweringLoss + +- modeling_tf_utils.TFSequenceClassificationLoss + +- modeling_tf_utils.TFTokenClassificationLoss + +## وظائف مساعدة TensorFlow + +- modeling_tf_utils.get_initializer + +- modeling_tf_utils.keras_serializable + +- modeling_tf_utils.shape_list \ No newline at end of file From 4897505593fff59ed8f81ce9cc35a638865fe179 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:20 +0300 Subject: [PATCH 339/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/pipelines=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/pipelines_utils.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/source/ar/internal/pipelines_utils.md diff --git a/docs/source/ar/internal/pipelines_utils.md b/docs/source/ar/internal/pipelines_utils.md new file mode 100644 index 00000000000000..f5fe37254d9895 --- /dev/null +++ b/docs/source/ar/internal/pipelines_utils.md @@ -0,0 +1,17 @@ +# المرافق لخطوط الأنابيب + +تصف هذه الصفحة جميع دالات المرافق التي توفرها المكتبة لخطوط الأنابيب. معظم هذه الدالات مفيدة فقط إذا كنت تدرس شيفرة نماذج المكتبة. + +## معالجة الحجج +[[autodoc]] pipelines.ArgumentHandler +[[autodoc]] pipelines.ZeroShotClassificationArgumentHandler +[[autodoc]] pipelines.QuestionAnsweringArgumentHandler + +## تنسيق البيانات +[[autodoc]] pipelines.PipelineDataFormat +[[autodoc]] pipelines.CsvPipelineDataFormat +[[autodoc]] pipelines.JsonPipelineDataFormat +[[autodoc]] pipelines.PipedPipelineDataFormat + +## المرافق +[[autodoc]] pipelines.PipelineException \ No newline at end of file From 15a4617076316ed1666fc31bf9aeec0c6b69ec32 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:22 +0300 Subject: [PATCH 340/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/tokenization=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/tokenization_utils.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/source/ar/internal/tokenization_utils.md diff --git a/docs/source/ar/internal/tokenization_utils.md b/docs/source/ar/internal/tokenization_utils.md new file mode 100644 index 00000000000000..65f48a12b631ef --- /dev/null +++ b/docs/source/ar/internal/tokenization_utils.md @@ -0,0 +1,23 @@ +# أدوات مساعدة لتقسيم النص إلى رموز + +تدرج هذه الصفحة جميع دالات الأدوات المساعدة التي يستخدمها برامج التقسيم، وبشكل أساسي الفئة [~tokenization_utils_base.PreTrainedTokenizerBase] التي تنفذ الدالات المشتركة بين [PreTrainedTokenizer] و [PreTrainedTokenizerFast] و [~tokenization_utils_base.SpecialTokensMixin]. + +معظم هذه الدالات مفيدة فقط إذا كنت تدرس شيفرة برامج التقسيم في المكتبة. + +## PreTrainedTokenizerBase + +[[autodoc]] tokenization_utils_base.PreTrainedTokenizerBase +- __call__ +- all + +## SpecialTokensMixin + +[[autodoc]] tokenization_utils_base.SpecialTokensMixin + +## Enums و namedtuples + +[[autodoc]] tokenization_utils_base.TruncationStrategy + +[[autodoc]] tokenization_utils_base.CharSpan + +[[autodoc]] tokenization_utils_base.TokenSpan \ No newline at end of file From 7fc0cd55900d9f051daf7810a6d754be27251830 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:24 +0300 Subject: [PATCH 341/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/internal/trainer=5Futils.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/internal/trainer_utils.md | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 docs/source/ar/internal/trainer_utils.md diff --git a/docs/source/ar/internal/trainer_utils.md b/docs/source/ar/internal/trainer_utils.md new file mode 100644 index 00000000000000..f6d8c7bd2614ef --- /dev/null +++ b/docs/source/ar/internal/trainer_utils.md @@ -0,0 +1,32 @@ +# المرافق لتدريب النماذج + +هذه الصفحة تسرد جميع دالات المساعدة التي يستخدمها [مدرب]. +معظم هذه الدالات مفيدة فقط إذا كنت تدرس كود المدرب في المكتبة. + +## المرافق + +[[autodoc]] EvalPrediction + +[[autodoc]] IntervalStrategy + +[[autodoc]] enable_full_determinism + +[[autodoc]] set_seed + +[[autodoc]] torch_distributed_zero_first + +## تفاصيل الرد الاتصالي + +[[autodoc]] trainer_callback.CallbackHandler + +## التقييم الموزع + +[[autodoc]] trainer_pt_utils.DistributedTensorGatherer + +## محلل حجج المدرب + +[[autodoc]] HfArgumentParser + +## أدوات التصحيح + +[[autodoc]] debug_utils.DebugUnderflowOverflow \ No newline at end of file From 3af2c85322f50e241ba3112c196b254d8f32007b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:25 +0300 Subject: [PATCH 342/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/configuration.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/configuration.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 docs/source/ar/main_classes/configuration.md diff --git a/docs/source/ar/main_classes/configuration.md b/docs/source/ar/main_classes/configuration.md new file mode 100644 index 00000000000000..ee85239fad47bf --- /dev/null +++ b/docs/source/ar/main_classes/configuration.md @@ -0,0 +1,13 @@ +# التهيئة + +تنفذ الفئة الأساسية [PretrainedConfig] الأساليب الشائعة لتحميل/حفظ تهيئة إما من ملف أو دليل محلي، أو من تهيئة نموذج مُدرب مسبقًا يوفرها المكتبة (تم تنزيلها من مستودع HuggingFace AWS S3). + +تنفذ كل فئة تهيئة مشتقة سمات خاصة بالنموذج. السمات الشائعة الموجودة في جميع فئات التهيئة هي: hidden_size، وnum_attention_heads، وnum_hidden_layers. وتنفذ النماذج النصية كذلك: vocab_size. + +## PretrainedConfig + +[[autodoc]] PretrainedConfig + +- push_to_hub + +- all \ No newline at end of file From 787079eb87b71e8e52ccdeafd9b248db5e85b444 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:27 +0300 Subject: [PATCH 343/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/keras=5Fcallbacks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/keras_callbacks.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/source/ar/main_classes/keras_callbacks.md diff --git a/docs/source/ar/main_classes/keras_callbacks.md b/docs/source/ar/main_classes/keras_callbacks.md new file mode 100644 index 00000000000000..884c46b272cc43 --- /dev/null +++ b/docs/source/ar/main_classes/keras_callbacks.md @@ -0,0 +1,11 @@ +# استدعاءات Keras + +عند تدريب نموذج Transformers باستخدام Keras، تتوفر بعض استدعاءات المكتبة المحددة لتشغيل المهام الشائعة تلقائيًا: + +## KerasMetricCallback + +[[autodoc]] KerasMetricCallback + +## PushToHubCallback + +[[autodoc]] PushToHubCallback \ No newline at end of file From e42733bdb1b1dd4ab1b0ea9ac07d09f774466a76 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:29 +0300 Subject: [PATCH 344/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/agent.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/agent.md | 113 +++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 docs/source/ar/main_classes/agent.md diff --git a/docs/source/ar/main_classes/agent.md b/docs/source/ar/main_classes/agent.md new file mode 100644 index 00000000000000..ef8374c9e8c808 --- /dev/null +++ b/docs/source/ar/main_classes/agent.md @@ -0,0 +1,113 @@ +# الوكلاء والأدوات + +لمعرفة المزيد عن الوكلاء والأدوات، تأكد من قراءة [الدليل التمهيدي](../transformers_agents). تحتوي هذه الصفحة على وثائق API للفئات الأساسية. + +## الوكلاء + +نقدم نوعين من الوكلاء، بناءً على الفئة الأساسية [`Agent`]: + +- يعمل [`CodeAgent`] في خطوة واحدة، من خلال توليد الكود لحل المهمة، ثم تنفيذه على الفور. + +- يعمل [`ReactAgent`] خطوة بخطوة، وتتكون كل خطوة من فكرة واحدة، ثم استدعاء أداة واحدة وتنفيذها. ولديه فئتان: + +- [`ReactJsonAgent`] تكتب استدعاءات أدواتها بتنسيق JSON. + +- [`ReactCodeAgent`] تكتب استدعاءات أدواتها بلغة Python البرمجية. + +### الوكيل + +[[autodoc]] Agent + +### CodeAgent + +[[autodoc]] CodeAgent + +### وكلاء التفاعل + +[[autodoc]] ReactAgent + +[[autodoc]] ReactJsonAgent + +[[autodoc]] ReactCodeAgent + +## الأدوات + +### load_tool + +[[autodoc]] load_tool + +### أداة + +[[autodoc]] Tool + +### صندوق الأدوات + +[[autodoc]] Toolbox + +### PipelineTool + +[[autodoc]] PipelineTool + +### launch_gradio_demo + +[[autodoc]] launch_gradio_demo + +### ToolCollection + +[[autodoc]] ToolCollection + +## المحركات + +يمكنك إنشاء واستخدام محركاتك الخاصة لتكون قابلة للاستخدام بواسطة إطار عمل الوكلاء. + +تتبع هذه المحركات المواصفات التالية: + +1. اتبع [تنسيق الرسائل](../chat_templating.md) لإدخالها (`List [Dict [str، str]]`) وأعد سلسلة. + +2. توقف عن إنشاء الإخراج *قبل* التسلسلات التي تم تمريرها في وسيط `stop_sequences` + +### HfEngine + +للراحة، أضفنا `HfEngine` الذي ينفذ النقاط المذكورة أعلاه ويستخدم نقطة نهاية الاستدلال لتنفيذ LLM. + +```python +>>> from transformers import HfEngine + +>>> messages = [ +... {"role": "user", "content": "Hello, how are you?"}, +... {"role": "assistant", "content": "I'm doing great. How can I help you today?"}, +... {"role": "user", "content": "No need to help, take it easy."}, +... ] + +>>> HfEngine()(messages, stop_sequences=["conversation"]) + +"That's very kind of you to say! It's always nice to have a relaxed " +``` + +[[autodoc]] HfEngine + +## أنواع الوكلاء + +يمكن للوكلاء التعامل مع أي نوع من الكائنات بين الأدوات؛ يمكن للأدوات، التي تكون متعددة الوسائط تمامًا، قبول وإرجاع النص والصورة والصوت والفيديو، من بين أنواع أخرى. لزيادة التوافق بين الأدوات، وكذلك لعرض هذه الإرجاعات بشكل صحيح في ipython (jupyter، colab، دفاتر ipython، ...)، نقوم بتنفيذ فئات wrapper حول هذه الأنواع. + +يجب أن تستمر الكائنات الملفوفة في التصرف كما كانت في البداية؛ يجب أن يظل كائن النص يتصرف كسلسلة، ويجب أن يظل كائن الصورة يتصرف كـ `PIL.Image`. + +لهذه الأنواع ثلاثة أغراض محددة: + +- استدعاء `to_raw` على النوع يجب أن يعيد الكائن الأساسي + +- استدعاء `to_string` على النوع يجب أن يعيد الكائن كسلسلة: يمكن أن تكون السلسلة في حالة `AgentText` ولكن ستكون مسار الإصدار المسلسل للكائن في حالات أخرى + +- عرضه في نواة ipython يجب أن يعرض الكائن بشكل صحيح + +### AgentText + +[[autodoc]] transformers.agents.agent_types.AgentText + +### AgentImage + +[[autodoc]] transformers.agents.agent_types.AgentImage + +### AgentAudio + +[[autodoc]] transformers.agents.agent_types.AgentAudio \ No newline at end of file From e5a93b74d44396509748e51e78fefef0314950dd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:31 +0300 Subject: [PATCH 345/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/backbones.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/backbones.md | 44 ++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 docs/source/ar/main_classes/backbones.md diff --git a/docs/source/ar/main_classes/backbones.md b/docs/source/ar/main_classes/backbones.md new file mode 100644 index 00000000000000..c6df1b457b8a5d --- /dev/null +++ b/docs/source/ar/main_classes/backbones.md @@ -0,0 +1,44 @@ +# Backbone + +عمود فقري هو نموذج يستخدم لاستخراج الميزات لمهام رؤية الكمبيوتر ذات المستوى الأعلى مثل اكتشاف الأشياء وتصنيف الصور. يوفر Transformers فئة [`AutoBackbone`] لتهيئة عمود فقري من أوزان النموذج المُدرب مسبقًا، وفئتين مساعدتين: + +* [`~utils.BackboneMixin`] تمكن من تهيئة عمود فقري من Transformers أو [timm](https://hf.co/docs/timm/index) وتشمل وظائف لإرجاع ميزات ومؤشرات الإخراج. +* [`~utils.BackboneConfigMixin`] يحدد ميزات ومؤشرات إخراج تكوين العمود الفقري. + +يتم تحميل نماذج [timm](https://hf.co/docs/timm/index) باستخدام فئات [`TimmBackbone`] و [`TimmBackboneConfig`]. + +يتم دعم العمود الفقري للنماذج التالية: + +* [BEiT](..model_doc/beit) +* [BiT](../model_doc/bit) +* [ConvNet](../model_doc/convnext) +* [ConvNextV2](../model_doc/convnextv2) +* [DiNAT](..model_doc/dinat) +* [DINOV2](../model_doc/dinov2) +* [FocalNet](../model_doc/focalnet) +* [MaskFormer](../model_doc/maskformer) +* [NAT](../model_doc/nat) +* [ResNet](../model_doc/resnet) +* [Swin Transformer](../model_doc/swin) +* [Swin Transformer v2](../model_doc/swinv2) +* [ViTDet](../model_doc/vitdet) + +## AutoBackbone + +[[autodoc]] AutoBackbone + +## BackboneMixin + +[[autodoc]] utils.BackboneMixin + +## BackboneConfigMixin + +[[autodoc]] utils.BackboneConfigMixin + +## TimmBackbone + +[[autodoc]] models.timm_backbone.TimmBackbone + +## TimmBackboneConfig + +[[autodoc]] models.timm_backbone.TimmBackboneConfig \ No newline at end of file From d68be68e78dc0e1d0a0895f3c63197d19f430a57 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:33 +0300 Subject: [PATCH 346/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/callback.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/callback.md | 102 ++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/source/ar/main_classes/callback.md diff --git a/docs/source/ar/main_classes/callback.md b/docs/source/ar/main_classes/callback.md new file mode 100644 index 00000000000000..fdfbf052b86cc3 --- /dev/null +++ b/docs/source/ar/main_classes/callback.md @@ -0,0 +1,102 @@ +# استدعاءات الرجوع + +استدعاءات الرجوع هي كائنات يمكنها تخصيص سلوك حلقة التدريب في PyTorch [`Trainer`] (لم يتم تنفيذ هذه الميزة بعد في TensorFlow) التي يمكنها فحص حالة حلقة التدريب (لإعداد التقارير حول التقدم، وتسجيل الدخول إلى TensorBoard أو منصات ML الأخرى...) واتخاذ القرارات (مثل التوقف المبكر). + +استدعاءات الرجوع هي قطع من التعليمات البرمجية "للقراءة فقط"، وبصرف النظر عن كائن [`TrainerControl`] الذي تقوم بإرجاعه، لا يمكنها تغيير أي شيء في حلقة التدريب. بالنسبة للتخصيصات التي تتطلب إجراء تغييرات في حلقة التدريب، يجب عليك إنشاء فئة فرعية من [`Trainer`] والكتابة فوق الطرق التي تحتاجها (راجع [trainer](trainer) للحصول على أمثلة). + +بشكل افتراضي، يتم تعيين `TrainingArguments.report_to` إلى `"all"`، لذا سيستخدم [`Trainer`] الاستدعاءات التالية. + +- [`DefaultFlowCallback`] الذي يتعامل مع السلوك الافتراضي للتسجيل وحفظ وتقييم. +- [`PrinterCallback`] أو [`ProgressCallback`] لعرض التقدم وطباعة السجلات (يتم استخدام الأول إذا قمت بتنشيط tqdm من خلال [`TrainingArguments`]، وإلا فهو الثاني). +- [`~integrations.TensorBoardCallback`] إذا كان TensorBoard متاحًا (إما من خلال PyTorch >= 1.4 أو tensorboardX). +- [`~integrations.WandbCallback`] إذا تم تثبيت [wandb](https://www.wandb.com/). +- [`~integrations.CometCallback`] إذا تم تثبيت [comet_ml](https://www.comet.ml/site/). +- [`~integrations.MLflowCallback`] إذا تم تثبيت [mlflow](https://www.mlflow.org/). +- [`~integrations.NeptuneCallback`] إذا تم تثبيت [neptune](https://neptune.ai/). +- [`~integrations.AzureMLCallback`] إذا تم تثبيت [azureml-sdk](https://pypi.org/project/azureml-sdk/). +- [`~integrations.CodeCarbonCallback`] إذا تم تثبيت [codecarbon](https://pypi.org/project/codecarbon/). +- [`~integrations.ClearMLCallback`] إذا تم تثبيت [clearml](https://github.com/allegroai/clearml). +- [`~integrations.DagsHubCallback`] إذا تم تثبيت [dagshub](https://dagshub.com/). +- [`~integrations.FlyteCallback`] إذا تم تثبيت [flyte](https://flyte.org/). +- [`~integrations.DVCLiveCallback`] إذا تم تثبيت [dvclive](https://dvc.org/doc/dvclive). + +إذا تم تثبيت حزمة ولكنك لا تريد استخدام التكامل المصاحب، فيمكنك تغيير `TrainingArguments.report_to` إلى قائمة بالتكاملات التي تريد استخدامها فقط (على سبيل المثال `["azure_ml"، "wandb"]`). + +الفئة الرئيسية التي تنفذ استدعاءات الرجوع هي [`TrainerCallback`]. فهو يحصل على [`TrainingArguments`] المستخدم لإنشاء مثيل لـ [`Trainer`]، ويمكنه الوصول إلى حالة المدرب الداخلية عبر [`TrainerState`]، ويمكنه اتخاذ بعض الإجراءات على حلقة التدريب عبر [`TrainerControl`]. + +## استدعاءات الرجوع المتاحة + +فيما يلي قائمة باستدعاءات الرجوع [`TrainerCallback`] المتوفرة في المكتبة: + +[[autodoc]] integrations.CometCallback +- setup + +[[autodoc]] DefaultFlowCallback + +[[autodoc]] PrinterCallback + +[[autodoc]] ProgressCallback + +[[autodoc]] EarlyStoppingCallback + +[[autodoc]] integrations.TensorBoardCallback + +[[autodoc]] integrations.WandbCallback +- setup + +[[autodoc]] integrations.MLflowCallback +- setup + +[[autodoc]] integrations.AzureMLCallback + +[[autodoc]] integrations.CodeCarbonCallback + +[[autodoc]] integrations.NeptuneCallback + +[[autodoc]] integrations.ClearMLCallback + +[[autodoc]] integrations.DagsHubCallback + +[[autodoc]] integrations.FlyteCallback + +[[autodoc]] integrations.DVCLiveCallback +- setup + +## TrainerCallback + +[[autodoc]] TrainerCallback + +فيما يلي مثال على كيفية تسجيل استدعاء رجوع مخصص مع PyTorch [`Trainer`]: + +```python +class MyCallback(TrainerCallback): + "استدعاء رجوع يقوم بطباعة رسالة في بداية التدريب" + + def on_train_begin(self, args، state، control، **kwargs): + print("بدء التدريب") + +trainer = Trainer( + model، + args، + train_dataset=train_dataset، + eval_dataset=eval_dataset، + callbacks=[MyCallback]، # يمكننا إما تمرير فئة استدعاء الرجوع بهذه الطريقة أو مثيل منها (MyCallback()) + ) +``` + +هناك طريقة أخرى لتسجيل استدعاء الرجوع وهي استدعاء `trainer.add_callback()` كما يلي: + +```python +trainer = Trainer(...) +trainer.add_callback(MyCallback) +# أو، يمكننا تمرير مثيل من فئة استدعاء الرجوع +trainer.add_callback(MyCallback()) +``` + +## TrainerState + +[[autodoc]] TrainerState + +## TrainerControl + +[[autodoc]] TrainerControl \ No newline at end of file From 8942e681bb19893314397927481fc4632d6075d2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:35 +0300 Subject: [PATCH 347/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/data=5Fcollator.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/data_collator.md | 51 ++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/source/ar/main_classes/data_collator.md diff --git a/docs/source/ar/main_classes/data_collator.md b/docs/source/ar/main_classes/data_collator.md new file mode 100644 index 00000000000000..3f9405d5f796e8 --- /dev/null +++ b/docs/source/ar/main_classes/data_collator.md @@ -0,0 +1,51 @@ +# مجمع البيانات + +مجمعو البيانات هم أشياء ستشكل دفعة باستخدام قائمة من عناصر مجموعة البيانات كإدخال. هذه العناصر من نفس نوع عناصر "train_dataset" أو "eval_dataset". + +ليكون قادرًا على بناء دفعات، قد يطبق مجمعو البيانات بعض المعالجة (مثل الحشو). بعضها (مثل [DataCollatorForLanguageModeling]) يطبق أيضًا بعض التعزيزات العشوائية للبيانات (مثل التعتيم العشوائي) على الدفعة المشكلة. + +يمكن العثور على أمثلة للاستخدام في [سكريبتات المثال](../examples) أو [دفاتر الملاحظات](../notebooks). + +## مجمع البيانات الافتراضي + +[[autodoc]] data.data_collator.default_data_collator + +## DefaultDataCollator + +[[autodoc]] data.data_collator.DefaultDataCollator + +## DataCollatorWithPadding + +[[autodoc]] data.data_collator.DataCollatorWithPadding + +## DataCollatorForTokenClassification + +[[autodoc]] data.data_collator.DataCollatorForTokenClassification + +## DataCollatorForSeq2Seq + +[[autodoc]] data.data_collator.DataCollatorForSeq2Seq + +## DataCollatorForLanguageModeling + +[[autodoc]] data.data_collator.DataCollatorForLanguageModeling + +- numpy_mask_tokens +- tf_mask_tokens +- torch_mask_tokens + +## DataCollatorForWholeWordMask + +[[autodoc]] data.data_collator.DataCollatorForWholeWordMask + +- numpy_mask_tokens +- tf_mask_tokens +- torch_mask_tokens + +## DataCollatorForPermutationLanguageModeling + +[[autodoc]] data.data_collator.DataCollatorForPermutationLanguageModeling + +- numpy_mask_tokens +- tf_mask_tokens +- torch_mask_tokens \ No newline at end of file From 87f59e49f68e4384bf3138ad38614fbd960ddc32 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:36 +0300 Subject: [PATCH 348/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/deepspeed.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/deepspeed.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/source/ar/main_classes/deepspeed.md diff --git a/docs/source/ar/main_classes/deepspeed.md b/docs/source/ar/main_classes/deepspeed.md new file mode 100644 index 00000000000000..df4cdab16ad896 --- /dev/null +++ b/docs/source/ar/main_classes/deepspeed.md @@ -0,0 +1,9 @@ +# DeepSpeed + +تعد DeepSpeed، المدعومة من Zero Redundancy Optimizer (ZeRO)، مكتبة تحسين لتدريب وتناسب النماذج الكبيرة جدًا على وحدة معالجة الرسومات (GPU). وهي متوفرة في عدة مراحل Zero، حيث تقوم كل مرحلة بتوفير ذاكرة GPU بشكل تدريجي من خلال تقسيم حالة المحسن والتدرجات والمؤشرات، وتمكين النقل إلى وحدة المعالجة المركزية (CPU) أو NVMe. تم دمج DeepSpeed مع فئة 'Trainer'، ويتم التعامل مع معظم الإعدادات تلقائيًا. + +ومع ذلك، إذا كنت تريد استخدام DeepSpeed دون 'Trainer'، يوفر Transformers فئة 'HfDeepSpeedConfig'. + +## HfDeepSpeedConfig + +- [integrations.HfDeepSpeedConfig] \ No newline at end of file From f9aaaceb0ad2246c979329cc704734df48d23662 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:38 +0300 Subject: [PATCH 349/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/feature=5Fextractor.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/main_classes/feature_extractor.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/source/ar/main_classes/feature_extractor.md diff --git a/docs/source/ar/main_classes/feature_extractor.md b/docs/source/ar/main_classes/feature_extractor.md new file mode 100644 index 00000000000000..b20393806381aa --- /dev/null +++ b/docs/source/ar/main_classes/feature_extractor.md @@ -0,0 +1,25 @@ +# مستخرج الخصائص + +مستخرج الخصائص هو المسؤول عن إعداد ميزات الإدخال لنماذج الصوت أو الرؤية. ويشمل ذلك استخراج الميزات من التسلسلات، مثل معالجة ملفات الصوت لتوليد ميزات مخطط Mel اللوغاريتمي، واستخراج الميزات من الصور، مثل قص ملفات الصور، وكذلك الحشو والتوحيد، والتحويل إلى نumpy و PyTorch و TensorFlow. + +## FeatureExtractionMixin + +[[autodoc]] feature_extraction_utils.FeatureExtractionMixin + +- from_pretrained + +- save_pretrained + +## SequenceFeatureExtractor + +[[autodoc]] SequenceFeatureExtractor + +- pad + +## BatchFeature + +[[autodoc]] BatchFeature + +## ImageFeatureExtractionMixin + +[[autodoc]] image_utils.ImageFeatureExtractionMixin \ No newline at end of file From 132fac56b30df739d2a44ad4b6affd164a588aa6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:40 +0300 Subject: [PATCH 350/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/image=5Fprocessor.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/ar/main_classes/image_processor.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/source/ar/main_classes/image_processor.md diff --git a/docs/source/ar/main_classes/image_processor.md b/docs/source/ar/main_classes/image_processor.md new file mode 100644 index 00000000000000..495e55c9eee468 --- /dev/null +++ b/docs/source/ar/main_classes/image_processor.md @@ -0,0 +1,23 @@ +# معالج الصور + +يتولى معالج الصور مهمة إعداد ميزات الإدخال لنماذج الرؤية ومعالجة مخرجاتها. ويشمل ذلك تحويلات مثل تغيير الحجم والتحجيم والتحويل إلى تنسورات PyTorch و TensorFlow و Flax و Numpy. وقد يشمل أيضًا معالجة لاحقة خاصة بالنموذج مثل تحويل logits إلى أقنعة تجزئة. + +## ImageProcessingMixin + +[[autodoc]] image_processing_utils.ImageProcessingMixin + +- from_pretrained + +- save_pretrained + +## BatchFeature + +[[autodoc]] BatchFeature + +## BaseImageProcessor + +[[autodoc]] image_processing_utils.BaseImageProcessor + +## BaseImageProcessorFast + +[[autodoc]] image_processing_utils_fast.BaseImageProcessorFast \ No newline at end of file From b7a2865fa903f0519d3309ca1dc83b0fa2768550 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:42 +0300 Subject: [PATCH 351/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/logging.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/logging.md | 100 +++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/source/ar/main_classes/logging.md diff --git a/docs/source/ar/main_classes/logging.md b/docs/source/ar/main_classes/logging.md new file mode 100644 index 00000000000000..6aacb741b7b10c --- /dev/null +++ b/docs/source/ar/main_classes/logging.md @@ -0,0 +1,100 @@ +# التسجيل + +يحتوي 🤗 Transformers على نظام تسجيل مركزي، بحيث يمكنك بسهولة ضبط مستوى تفاصيل المكتبة. + +حاليًا، يكون مستوى التفاصيل الافتراضي للمكتبة هو `WARNING`. + +لتغيير مستوى التفاصيل، استخدم ببساطة إحدى دوال الضبط المباشرة. على سبيل المثال، إليك كيفية تغيير مستوى التفاصيل إلى مستوى `INFO`. + +```python +import transformers + +transformers.logging.set_verbosity_info() +``` + +يمكنك أيضًا استخدام متغير البيئة `TRANSFORMERS_VERBOSITY` لتجاوز مستوى التفاصيل الافتراضي. يمكنك تعيينه إلى إحدى القيم التالية: `debug`، `info`، `warning`، `error`، `critical`. على سبيل المثال: + +```bash +TRANSFORMERS_VERBOSITY=error ./myprogram.py +``` + +بالإضافة إلى ذلك، يمكن تعطيل بعض `التحذيرات` عن طريق تعيين متغير البيئة `TRANSFORMERS_NO_ADVISORY_WARNINGS` إلى قيمة صحيحة، مثل *1*. سيؤدي هذا إلى تعطيل أي تحذير يتم تسجيله باستخدام [`logger.warning_advice`]. على سبيل المثال: + +```bash +TRANSFORMERS_NO_ADVISORY_WARNINGS=1 ./myprogram.py +``` + +فيما يلي مثال على كيفية استخدام نفس مسجل البيانات مثل المكتبة في الوحدة النمطية أو البرنامج النصي الخاص بك: + +```python +from transformers.utils import logging + +logging.set_verbosity_info() +logger = logging.get_logger("transformers") +logger.info("INFO") +logger.warning("WARN") +``` + +جميع طرق وحدة التسجيل هذه موثقة أدناه، والأساليب الرئيسية هي + +[`logging.get_verbosity`] للحصول على مستوى التفاصيل الحالي في المسجل و + +[`logging.set_verbosity`] لضبط مستوى التفاصيل إلى المستوى الذي تختاره. وبترتيب (من الأقل إلى الأكثر تفصيلاً)، هذه المستويات (مع قيمها الصحيحة المقابلة بين قوسين) هي: + +- `transformers.logging.CRITICAL` أو `transformers.logging.FATAL` (القيمة الصحيحة، 50): قم بالإبلاغ عن الأخطاء الأكثر حرجًا فقط. + +- `transformers.logging.ERROR` (القيمة الصحيحة، 40): قم بالإبلاغ عن الأخطاء فقط. + +- `transformers.logging.WARNING` أو `transformers.logging.WARN` (القيمة الصحيحة، 30): قم بالإبلاغ عن الأخطاء والتحذيرات فقط. هذا هو مستوى التفاصيل الافتراضي الذي تستخدمه المكتبة. + +- `transformers.logging.INFO` (القيمة الصحيحة، 20): الإبلاغ عن الأخطاء والتحذيرات والمعلومات الأساسية. + +- `transformers.logging.DEBUG` (القيمة الصحيحة، 10): الإبلاغ عن جميع المعلومات. + +بشكل افتراضي، سيتم عرض مؤشرات تقدم `tqdm` أثناء تنزيل النموذج. يمكن استخدام [`logging.disable_progress_bar`] و [`logging.enable_progress_bar`] لقمع أو إلغاء قمع هذا السلوك. + +## `logging` مقابل `warnings` + +لدى Python نظامي تسجيل يتم استخدامهما غالبًا بالاقتران: `logging`، والذي تم شرحه أعلاه، و`warnings`، والذي يسمح بتصنيف إضافي للتحذيرات في دلوات محددة، على سبيل المثال، `FutureWarning` لميزة أو مسار تم إهماله بالفعل و`DeprecationWarning` للإشارة إلى الإهمال القادم. + +نحن نستخدم كلا النظامين في مكتبة `transformers`. نحن نستفيد من طريقة `captureWarning` في `logging` ونقوم بتكييفها للسماح بإدارة رسائل التحذير هذه بواسطة دوال ضبط مستوى التفاصيل أعلاه. + +ماذا يعني ذلك لمطوري المكتبة؟ يجب أن نلتزم بالمعيار التالي: + +- يجب تفضيل `التحذيرات` لمطوري المكتبة والمكتبات التي تعتمد على `transformers` + +- يجب استخدام `logging` لمستخدمي المكتبة النهائيين الذين يستخدمونها في المشاريع اليومية + +راجع مرجع طريقة `captureWarnings` أدناه. + +[[autodoc]] logging.captureWarnings + +## دوال الضبط الأساسية + +[[autodoc]] logging.set_verbosity_error + +[[autodoc]] logging.set_verbosity_warning + +[[autodoc]] logging.set_verbosity_info + +[[autodoc]] logging.set_verbosity_debug + +## الوظائف الأخرى + +[[autodoc]] logging.get_verbosity + +[[autodoc]] logging.set_verbosity + +[[autodoc]] logging.get_logger + +[[autodoc]] logging.enable_default_handler + +[[autodoc]] logging.disable_default_handler + +[[autodoc]] logging.enable_explicit_format + +[[autodoc]] logging.reset_format + +[[autodoc]] logging.enable_progress_bar + +[[autodoc]] logging.disable_progress_bar \ No newline at end of file From a425ffd79d87b8d16abe7ec77f1b3dd22808ae2c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:44 +0300 Subject: [PATCH 352/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/model.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/model.md | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/source/ar/main_classes/model.md diff --git a/docs/source/ar/main_classes/model.md b/docs/source/ar/main_classes/model.md new file mode 100644 index 00000000000000..78b43043644f0f --- /dev/null +++ b/docs/source/ar/main_classes/model.md @@ -0,0 +1,47 @@ +# النماذج + +تنفذ الفئات الأساسية [PreTrainedModel] و [TFPreTrainedModel] و [FlaxPreTrainedModel] الأساليب الشائعة لتحميل/حفظ نموذج إما من ملف أو دليل محلي، أو من تكوين نموذج مُدرب مسبقًا يوفره المكتبة (تم تنزيله من مستودع HuggingFace AWS S3). + +كما تنفذ [PreTrainedModel] و [TFPreTrainedModel] أيضًا بعض الأساليب الشائعة بين جميع النماذج للقيام بما يلي: + +- تغيير حجم تضمين الرموز المميزة للإدخال عند إضافة رموز جديدة إلى المفردات +- تقليم رؤوس الاهتمام للنموذج. + +يتم تحديد الأساليب الأخرى الشائعة لكل نموذج في [~ modeling_utils.ModuleUtilsMixin] (لنماذج PyTorch) و [~ modeling_tf_utils.TFModuleUtilsMixin] (لنماذج TensorFlow) أو للجيل النصي، [~ generation.GenerationMixin] (لنماذج PyTorch)، [~ generation.TFGenerationMixin] (لنماذج TensorFlow) و [~ generation.FlaxGenerationMixin] (لنماذج Flax/JAX). + +## PreTrainedModel + +[[autodoc]] PreTrainedModel + +- push_to_hub +- الكل + +## ModuleUtilsMixin + +[[autodoc]] modeling_utils.ModuleUtilsMixin + +## TFPreTrainedModel + +[[autodoc]] TFPreTrainedModel + +- push_to_hub +- الكل + +## TFModelUtilsMixin + +[[autodoc]] modeling_tf_utils.TFModelUtilsMixin + +## FlaxPreTrainedModel + +[[autodoc]] FlaxPreTrainedModel + +- push_to_hub +- الكل + +## النشر على المنصة + +[[autodoc]] utils.PushToHubMixin + +## نقاط التفتيش المجزأة + +[[autodoc]] modeling_utils.load_sharded_checkpoint \ No newline at end of file From 3bf0b15a97f0171d3a99c2e1f2fbed2285550779 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:45 +0300 Subject: [PATCH 353/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/onnx.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/onnx.md | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/source/ar/main_classes/onnx.md diff --git a/docs/source/ar/main_classes/onnx.md b/docs/source/ar/main_classes/onnx.md new file mode 100644 index 00000000000000..b9dd51f312929b --- /dev/null +++ b/docs/source/ar/main_classes/onnx.md @@ -0,0 +1,31 @@ +# تصدير نماذج 🤗 Transformers إلى ONNX + +يوفر 🤗 Transformers حزمة transformers.onnx التي تتيح لك تحويل نقاط تفتيش النموذج إلى رسم ONNX باستخدام كائنات التكوين. راجع الدليل حول تصدير نماذج 🤗 Transformers لمزيد من التفاصيل. + +## تكوينات ONNX + +نقدم ثلاث فئات مجردة يجب أن ترث منها، اعتمادًا على نوع بنية النموذج الذي تريد تصديره: + +* ترث النماذج المستندة إلى الترميز من [`~onnx.config.OnnxConfig`] +* ترث النماذج المستندة إلى فك الترميز من [`~onnx.config.OnnxConfigWithPast`] +* ترث نماذج الترميز-فك الترميز من [`~onnx.config.OnnxSeq2SeqConfigWithPast`] + +### OnnxConfig + +[[autodoc]] onnx.config.OnnxConfig + +### OnnxConfigWithPast + +[[autodoc]] onnx.config.OnnxConfigWithPast + +### OnnxSeq2SeqConfigWithPast + +[[autodoc]] onnx.config.OnnxSeq2SeqConfigWithPast + +## ميزات ONNX + +يرتبط كل تكوين ONNX بمجموعة من الميزات التي تتيح لك تصدير النماذج لأنواع مختلفة من التوبولوجيات أو المهام. + +### FeaturesManager + +[[autodoc]] onnx.features.FeaturesManager \ No newline at end of file From 8dfea49e832c95f06821bb9d9c1a94af7ac18923 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:47 +0300 Subject: [PATCH 354/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/optimizer=5Fschedules.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/main_classes/optimizer_schedules.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/source/ar/main_classes/optimizer_schedules.md diff --git a/docs/source/ar/main_classes/optimizer_schedules.md b/docs/source/ar/main_classes/optimizer_schedules.md new file mode 100644 index 00000000000000..8b00ac86a1c353 --- /dev/null +++ b/docs/source/ar/main_classes/optimizer_schedules.md @@ -0,0 +1,63 @@ +# التحسين + +يوفر نموذج `.optimization` ما يلي: + +- محسن مع وزن ثابت للاضمحلال يمكن استخدامه لضبط دقيق للنماذج، و +- العديد من الجداول الزمنية على شكل كائنات جدول زمني ترث من `_LRSchedule`: +- فئة تراكم التدرجات لتراكم تدرجات الدفعات المتعددة + +## AdamW (PyTorch) + +[[autodoc]] AdamW + +## AdaFactor (PyTorch) + +[[autodoc]] Adafactor + +## AdamWeightDecay (TensorFlow) + +[[autodoc]] AdamWeightDecay + +[[autodoc]] create_optimizer + +## الجداول الزمنية + +### جداول معدلات التعلم (Pytorch) + +[[autodoc]] SchedulerType + +[[autodoc]] get_scheduler + +[[autodoc]] get_constant_schedule + +[[autodoc]] get_constant_schedule_with_warmup + + + +[[autodoc]] get_cosine_schedule_with_warmup + + + +[[autodoc]] get_cosine_with_hard_restarts_schedule_with_warmup + + + +[[autodoc]] get_linear_schedule_with_warmup + + + +[[autodoc]] get_polynomial_decay_schedule_with_warmup + +[[autodoc]] get_inverse_sqrt_schedule + +[[autodoc]] get_wsd_schedule + +### Warmup (TensorFlow) + +[[autodoc]] WarmUp + +## استراتيجيات التدرج + +### GradientAccumulator (TensorFlow) + +[[autodoc]] GradientAccumulator \ No newline at end of file From 9505cfbca87daed32962caf754fb4bdc71ce1fe7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:49 +0300 Subject: [PATCH 355/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/output.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/output.md | 294 ++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 docs/source/ar/main_classes/output.md diff --git a/docs/source/ar/main_classes/output.md b/docs/source/ar/main_classes/output.md new file mode 100644 index 00000000000000..cc6f8599e35422 --- /dev/null +++ b/docs/source/ar/main_classes/output.md @@ -0,0 +1,294 @@ +# مخرجات النموذج + +تمتلك جميع النماذج مخرجات هي عبارة عن حالات من الفئات الفرعية لـ [`~utils.ModelOutput`]. وهذه عبارة عن هياكل بيانات تحتوي على جميع المعلومات التي يرجعها النموذج، ولكن يمكن استخدامها أيضًا كمجموعات أو قواميس. + +دعونا نرى كيف يبدو هذا في مثال: + +```python +from transformers import BertTokenizer, BertForSequenceClassification +import torch + +tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased") +model = BertForSequenceClassification.from_pretrained("google-bert/bert-base-uncased") + +inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") +labels = torch.tensor([1]).unsqueeze(0) # حجم الدفعة 1 +outputs = model(**inputs, labels=labels) +``` + +إن كائن `outputs` هو [`~ modeling_outputs.SequenceClassifierOutput`]، كما يمكننا أن نرى في توثيق تلك الفئة أدناه، وهذا يعني أنه يحتوي على خاصية `loss` اختيارية، و`logits`، و`hidden_states` اختيارية، و`attentions` اختيارية. هنا لدينا `loss` لأننا مررنا `labels`، لكننا لا نملك `hidden_states` و`attentions` لأننا لم نمرر `output_hidden_states=True` أو `output_attentions=True`. + + + +عند تمرير `output_hidden_states=True`، قد تتوقع أن تتطابق `outputs.hidden_states[-1]` مع `outputs.last_hidden_states` بالضبط. ومع ذلك، هذا ليس هو الحال دائمًا. تطبق بعض النماذج التطبيع أو المعالجة اللاحقة على الحالة المخفية الأخيرة عند إرجاعها. + + + +يمكنك الوصول إلى كل خاصية كما تفعل عادةً، وإذا لم ترجع تلك الخاصية من قبل النموذج، فستحصل على `None`. هنا على سبيل المثال، `outputs.loss` هي الخسارة التي يحسبها النموذج، و`outputs.attentions` هي `None`. + +عند اعتبار كائن `outputs` الخاص بنا على أنه مجموعة، فإنه لا يأخذ في الاعتبار سوى الخصائص التي لا تحتوي على قيم `None`. هنا على سبيل المثال، لديه عنصرين، `loss` ثم `logits`، لذا + +```python +outputs[:2] +``` + +سترجع المجموعة `(outputs.loss, outputs.logits)` على سبيل المثال. + +عند اعتبار كائن `outputs` الخاص بنا كقاموس، فإنه لا يأخذ في الاعتبار سوى الخصائص التي لا تحتوي على قيم `None`. هنا على سبيل المثال، لديه مفتاحين هما `loss` و`logits`. + +نوثق هنا مخرجات النموذج العامة التي يستخدمها أكثر من نوع نموذج واحد. يتم توثيق أنواع الإخراج المحددة على صفحة النموذج المقابلة. + +## ModelOutput + +[[autodoc]] utils.ModelOutput + +- to_tuple + +## BaseModelOutput + +[[autodoc]] modeling_outputs.BaseModelOutput + +## BaseModelOutputWithPooling + +[[autodoc]] modeling_outputs.BaseModelOutputWithPooling + +## BaseModelOutputWithCrossAttentions + +[[autodoc]] modeling_outputs.BaseModelOutputWithCrossAttentions + +## BaseModelOutputWithPoolingAndCrossAttentions + +[[autodoc]] modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions + +## BaseModelOutputWithPast + +[[autodoc]] modeling_outputs.BaseModelOutputWithPast + +## BaseModelOutputWithPastAndCrossAttentions + +[[autodoc]] modeling_outputs.BaseModelOutputWithPastAndCrossAttentions + +## Seq2SeqModelOutput + +[[autodoc]] modeling_outputs.Seq2SeqModelOutput + +## CausalLMOutput + +[[autodoc]] modeling_outputs.CausalLMOutput + +## CausalLMOutputWithCrossAttentions + +[[autodoc]] modeling_outputs.CausalLMOutputWithCrossAttentions + +## CausalLMOutputWithPast + +[[autodoc]] modeling_outputs.CausalLMOutputWithPast + +## MaskedLMOutput + +[[autodoc]] modeling_outputs.MaskedLMOutput + +## Seq2SeqLMOutput + +[[autodoc]] modeling_outputs.Seq2SeqLMOutput + +## NextSentencePredictorOutput + +[[autodoc]] modeling_outputs.NextSentencePredictorOutput + +## SequenceClassifierOutput + +[[autodoc]] modeling_outputs.SequenceClassifierOutput + +## Seq2SeqSequenceClassifierOutput + +[[autodoc]] modeling_outputs.Seq2SeqSequenceClassifierOutput + +## MultipleChoiceModelOutput + +[[autodoc]] modeling_outputs.MultipleChoiceModelOutput + +## TokenClassifierOutput + +[[autodoc]] modeling_outputs.TokenClassifierOutput + +## QuestionAnsweringModelOutput + +[[autodoc]] modeling_outputs.QuestionAnsweringModelOutput + +## Seq2SeqQuestionAnsweringModelOutput + +[[autodoc]] modeling_outputs.Seq2SeqQuestionAnsweringModelOutput + +## Seq2SeqSpectrogramOutput + +[[autodoc]] modeling_outputs.Seq2SeqSpectrogramOutput + +## SemanticSegmenterOutput + +[[autodoc]] modeling_outputs.SemanticSegmenterOutput + +## ImageClassifierOutput + +[[autodoc]] modeling_outputs.ImageClassifierOutput + +## ImageClassifierOutputWithNoAttention + + +[[autodoc]] modeling_outputs.ImageClassifierOutputWithNoAttention + +## DepthEstimatorOutput + +[[autodoc]] modeling_outputs.DepthEstimatorOutput + +## Wav2Vec2BaseModelOutput + +[[autodoc]] modeling_outputs.Wav2Vec2BaseModelOutput + +## XVectorOutput + +[[autodoc]] modeling_outputs.XVectorOutput + +## Seq2SeqTSModelOutput + +[[autodoc]] modeling_outputs.Seq2SeqTSModelOutput + +## Seq2SeqTSPredictionOutput + +[[autodoc]] modeling_outputs.Seq2SeqTSPredictionOutput + +## SampleTSPredictionOutput + +[[autodoc]] modeling_outputs.SampleTSPredictionOutput + +## TFBaseModelOutput + +[[autodoc]] modeling_tf_outputs.TFBaseModelOutput + +## TFBaseModelOutputWithPooling + +[[autodoc]] modeling_tf_outputs.TFBaseModelOutputWithPooling + +## TFBaseModelOutputWithPoolingAndCrossAttentions + +[[autodoc]] modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions + +## TFBaseModelOutputWithPast + +[[autodoc]] modeling_tf_outputs.TFBaseModelOutputWithPast + +## TFBaseModelOutputWithPastAndCrossAttentions + +[[autodoc]] modeling_tf_outputs.TFBaseModelOutputWithPastAndCrossAttentions + +## TFSeq2SeqModelOutput + +[[autodoc]] modeling_tf_outputs.TFSeq2SeqModelOutput + +## TFCausalLMOutput + +[[autodoc]] modeling_tf_outputs.TFCausalLMOutput + +## TFCausalLMOutputWithCrossAttentions + +[[autodoc]] modeling_tf_outputs.TFCausalLMOutputWithCrossAttentions + +## TFCausalLMOutputWithPast + +[[autodoc]] modeling_tf_outputs.TFCausalLMOutputWithPast + +## TFMaskedLMOutput + +[[autodoc]] modeling_tf_outputs.TFMaskedLMOutput + +## TFSeq2SeqLMOutput + +[[autodoc]] modeling_tf_outputs.TFSeq2SeqLMOutput + +## TFNextSentencePredictorOutput + +[[autodoc]] modeling_tf_outputs.TFNextSentencePredictorOutput + +## TFSequenceClassifierOutput + +[[autodoc]] modeling_tf_outputs.TFSequenceClassifierOutput + +## TFSeq2SeqSequenceClassifierOutput + +[[autodoc]] modeling_tf_outputs.TFSeq2SeqSequenceClassifierOutput + +## TFMultipleChoiceModelOutput + +[[autodoc]] modeling_tf_outputs.TFMultipleChoiceModelOutput + +## TFTokenClassifierOutput + +[[autodoc]] modeling_tf_outputs.TFTokenClassifierOutput + +## TFQuestionAnsweringModelOutput + +[[autodoc]] modeling_tf_outputs.TFQuestionAnsweringModelOutput + +## TFSeq2SeqQuestionAnsweringModelOutput + +[[autodoc]] modeling_tf_outputs.TFSeq2SeqQuestionAnsweringModelOutput + +## FlaxBaseModelOutput + +[[autodoc]] modeling_flax_outputs.FlaxBaseModelOutput + +## FlaxBaseModelOutputWithPast + +[[autodoc]] modeling_flax_outputs.FlaxBaseModelOutputWithPast + +## FlaxBaseModelOutputWithPooling + +[[autodoc]] modeling_flax_outputs.FlaxBaseModelOutputWithPooling + +## FlaxBaseModelOutputWithPastAndCrossAttentions + +[[autodoc]] modeling_flax_outputs.FlaxBaseModelOutputWithPastAndCrossAttentions + +## FlaxSeq2SeqModelOutput + +[[autodoc]] modeling_flax_outputs.FlaxSeq2SeqModelOutput + +## FlaxCausalLMOutputWithCrossAttentions + +[[autodoc]] modeling_flax_outputs.FlaxCausalLMOutputWithCrossAttentions + +## FlaxMaskedLMOutput + +[[autodoc]] modeling_flax_outputs.FlaxMaskedLMOutput + +## FlaxSeq2SeqLMOutput + +[[autodoc]] modeling_flax_outputs.FlaxSeq2SeqLMOutput + +## FlaxNextSentencePredictorOutput + +[[autodoc]] modeling_flax_outputs.FlaxNextSentencePredictorOutput + +## FlaxSequenceClassifierOutput + +[[autodoc]] modeling_flax_outputs.FlaxSequenceClassifierOutput + +## FlaxSeq2SeqSequenceClassifierOutput + +[[autodoc]] modeling_flax_outputs.FlaxSeq2SeqSequenceClassifierOutput + +## FlaxMultipleChoiceModelOutput + +[[autodoc]] modeling_flax_outputs.FlaxMultipleChoiceModelOutput + +## FlaxTokenClassifierOutput + +[[autodoc]] modeling_flax_outputs.FlaxTokenClassifierOutput + +## FlaxQuestionAnsweringModelOutput + +[[autodoc]] modeling_flax_outputs.FlaxQuestionAnsweringModelOutput + +## FlaxSeq2SeqQuestionAnsweringModelOutput + +[[autodoc]] modeling_flax_outputs.FlaxSeq2SeqQuestionAnsweringModelOutput \ No newline at end of file From 9c931373f8a57bccb438930b521e4cdac7455e60 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:51 +0300 Subject: [PATCH 356/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/pipelines.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/pipelines.md | 493 +++++++++++++++++++++++ 1 file changed, 493 insertions(+) create mode 100644 docs/source/ar/main_classes/pipelines.md diff --git a/docs/source/ar/main_classes/pipelines.md b/docs/source/ar/main_classes/pipelines.md new file mode 100644 index 00000000000000..697a67ef347d1b --- /dev/null +++ b/docs/source/ar/main_classes/pipelines.md @@ -0,0 +1,493 @@ +# خطوط الأنابيب + +تعد خطوط الأنابيب طريقة رائعة وسهلة لاستخدام النماذج من أجل الاستنتاج. هذه خطوط أنابيب هي كائنات تُلخص معظم الرموز المعقدة من المكتبة، وتوفر واجهة برمجة تطبيقات بسيطة مخصصة لعدة مهام، بما في ذلك التعرف على الكيانات المسماة، ونمذجة اللغة المقنعة، وتحليل المشاعر، واستخراج الميزات، والإجابة على الأسئلة. راجع [ملخص المهام](../task_summary) للحصول على أمثلة على الاستخدام. + +هناك فئتان من التجريدات الخاصة بخطوط الأنابيب يجب أن تكون على دراية بهما: + +- [`pipeline`] وهو أقوى كائن يغلف جميع خطوط الأنابيب الأخرى. +- تتوفر خطوط أنابيب خاصة بمهام معينة للمهام [الصوتية](#audio)، و[الرؤية الحاسوبية](#computer-vision)، و[معالجة اللغات الطبيعية](#natural-language-processing)، و[المتعددة الوسائط](#multimodal). + +## تجريد خط الأنابيب + +تجريد *خط الأنابيب* هو غلاف حول جميع خطوط الأنابيب الأخرى المتوفرة. يتم إنشاء مثيل له مثل أي خط أنابيب آخر ولكنه يمكن أن يوفر جودة حياة إضافية. + +مكالمة بسيطة على عنصر واحد: + +```python +>>> pipe = pipeline("text-classification") +>>> pipe("هذا المطعم رائع") +[{'label': 'إيجابي', 'score': 0.9998743534088135}] +``` + +إذا كنت تريد استخدام نموذج محدد من [المحور](https://huggingface.co)، فيمكنك تجاهل المهمة إذا كان النموذج على المحور يحدد المهمة بالفعل: + +```python +>>> pipe = pipeline(model="FacebookAI/roberta-large-mnli") +>>> pipe("هذا المطعم رائع") +[{'label': 'محايد', 'score': 0.7313136458396912}] +``` + +لاستدعاء خط أنابيب على العديد من العناصر، يمكنك استدعاؤه باستخدام *قائمة*. + +```python +>>> pipe = pipeline("text-classification") +>>> pipe(["هذا المطعم رائع", "هذا المطعم فظيع"]) +[{'label': 'POSITIVE', 'score': 0.9998743534088135}, +{'label': 'NEGATIVE', 'score': 0.9996669292449951}] +``` + +للحصول على بيانات كاملة، يوصى باستخدام `dataset` مباشرة. وهذا يعني أنك لست بحاجة إلى تخصيص المجموعة الكاملة مرة واحدة، ولا تحتاج إلى إجراء التجميع بنفسك. يجب أن يعمل هذا بنفس سرعة الحلقات المخصصة على GPU. إذا لم يكن الأمر كذلك، فلا تتردد في إنشاء مشكلة. + +```python +import datasets +from transformers import pipeline +from transformers.pipelines.pt_utils import KeyDataset +from tqdm.auto import tqdm + +pipe = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-base-960h", device=0) +dataset = datasets.load_dataset("superb", name="asr", split="test") + +# KeyDataset (only *pt*) will simply return the item in the dict returned by the dataset item +# as we're not interested in the *target* part of the dataset. For sentence pair use KeyPairDataset +for out in tqdm(pipe(KeyDataset(dataset, "file"))): +print(out) +# {"text": "الرقم عشرة نيلي الطازجة تنتظر عليك تصبح على خير زوجي"} +# {"text": ....} +# .... +``` + +ولتسهيل الاستخدام، يمكن أيضًا استخدام مولد: + +```python +from transformers import pipeline + +pipe = pipeline("text-classification") + + +def data(): +while True: +# This could come from a dataset, a database, a queue or HTTP request +# in a server +# Caveat: because this is iterative, you cannot use `num_workers > 1` variable +# to use multiple threads to preprocess data. You can still have 1 thread that +# does the preprocessing while the main runs the big inference +yield "هذا اختبار" + + +for out in pipe(data()): +print(out) +# {"text": "الرقم عشرة نيلي الطازجة تنتظر عليك تصبح على خير زوجي"} +# {"text": ....} +# .... +``` + +[[autodoc]] pipeline + +## تجميع دفعات خط الأنابيب + +يمكن لجميع خطوط الأنابيب استخدام الدفعات. سيعمل هذا عندما يستخدم خط الأنابيب قدرته على البث (لذا عند تمرير القوائم أو `Dataset` أو `generator`). + +```python +from transformers import pipeline +from transformers.pipelines.pt_utils import KeyDataset +import datasets + +dataset = datasets.load_dataset("imdb", name="plain_text", split="unsupervised") +pipe = pipeline("text-classification", device=0) +for out in pipe(KeyDataset(dataset, "text"), batch_size=8, truncation="only_first"): +print(out) +# [{'label': 'POSITIVE', 'score': 0.9998743534088135}] +# نفس الإخراج تمامًا كما كان من قبل، ولكن يتم تمرير المحتويات +# كدفعات إلى النموذج +``` + + +ومع ذلك، فإن هذا ليس فوزًا تلقائيًا للأداء. يمكن أن يكون إما زيادة في السرعة بمقدار 10 مرات أو تباطؤ بمقدار 5 مرات اعتمادًا +على الأجهزة والبيانات والنموذج الفعلي المستخدم. + +المثال الذي يكون فيه في الغالب زيادة في السرعة: + + + +```python +from transformers import pipeline +from torch.utils.data import Dataset +from tqdm.auto import tqdm + +pipe = pipeline("text-classification", device=0) + + +class MyDataset(Dataset): +def __len__(self): +return 5000 + +def __getitem__(self, i): +return "هذا اختبار" + + +dataset = MyDataset() + +for batch_size in [1, 8, 64, 256]: +print("-" * 30) +print(f"Streaming batch_size={batch_size}") +for out in tqdm(pipe(dataset, batch_size=batch_size), total=len(dataset)): +pass +``` + +``` +# على GTX 970 +------------------------------ +Streaming no batching +100%|██████████████████████████████████████████████████████████████████████| 5000/5000 [00:26<00:00, 187.52it/s] +------------------------------ +Streaming batch_size=8 +100%|█████████████████████████████████████████████████████████████████████| 5000/5000 [00:04<00:00, 1205.95it/s] +------------------------------ +Streaming batch_size=64 +100%|█████████████████████████████████████████████████████████████████████| 5000/5000 [00:02<00:00, 2478.24it/s] +------------------------------ +Streaming batch_size=256 +100%|█████████████████████████████████████████████████████████████████████| 5000/5000 [00:01<00:00, 2554.43it/s] +(عائدات متناقصة، مشبعة GPU) +``` + +المثال الذي يكون فيه في الغالب تباطؤ: + +```python +class MyDataset(Dataset): +def __len__(self): +return 5000 + +def __getitem__(self, i): +if i % 64 == 0: +n = 100 +else: +n = 1 +return "هذا اختبار" * n +``` + +هذه جملة طويلة جدًا بشكل عرضي مقارنة بالجمل الأخرى. في هذه الحالة، ستحتاج الدفعة بأكملها إلى أن تكون 400 +رمزًا طويلاً، لذا ستكون الدفعة بأكملها [64، 400] بدلاً من [64، 4]، مما يؤدي إلى التباطؤ الشديد. والأسوأ من ذلك، أنه في +الدفعات الأكبر، يتعطل البرنامج ببساطة. + +``` +------------------------------ +Streaming no batching +100%|█████████████████████████████████████████████████████████████████████| 1000/1000 [00:05<00:00, 183.69it/s] +------------------------------ +Streaming batch_size=8 +100%|█████████████████████████████████████████████████████████████████████| 1000/1000 [00:03<00:00, 265.74it/s] +------------------------------ +Streaming batch_size=64 +100%|██████████████████████████████████████████████████████████████████████| 1000/1000 [00:26<00:00, 37.80it/s] +------------------------------ +Streaming batch_size=256 +0%| | 0/1000 [00:00 +for out in tqdm(pipe(dataset, batch_size=256), total=len(dataset)): +.... +q = q / math.sqrt(dim_per_head) # (bs, n_heads, q_length, dim_per_head) +RuntimeError: نفاد ذاكرة CUDA. حاول تخصيص 376.00 ميغابايت (GPU 0؛ سعة إجمالية تبلغ 3.95 غيغابايت؛ 1.72 غيغابايت مخصصة بالفعل؛ 354.88 ميغابايت مجانية؛ 2.46 غيغابايت محجوزة في المجموع بواسطة PyTorch) +``` + +لا توجد حلول جيدة (عامة) لهذه المشكلة، وقد تختلف الأميال الخاصة بك حسب حالات الاستخدام الخاصة بك. القاعدة العامة هي: + +بالنسبة للمستخدمين، القاعدة العامة هي: + +- **قس الأداء على حملك، بأجهزتك. قس، وقس، واستمر في القياس. الأرقام الحقيقية هي الطريقة الوحيدة للذهاب.** +- إذا كنت مقيدًا بالزمن (منتج مباشر يقوم بالاستدلال)، فلا تقم بالدفعات. +- إذا كنت تستخدم وحدة المعالجة المركزية، فلا تقم بالدفعات. +- إذا كنت تستخدم الإنتاجية (تريد تشغيل نموذجك على مجموعة من البيانات الثابتة)، على GPU، ثم: +- إذا لم يكن لديك أي فكرة عن حجم "sequence_length" (البيانات "الطبيعية")، فلا تقم بالدفعات بشكل افتراضي، وقس و +حاول إضافة دفعات بشكل تجريبي، وأضف فحوصات OOM للتعافي عندما يفشل (وسيفشل في مرحلة ما إذا لم تقم بالتحكم +في "sequence_length".) +- إذا كان "sequence_length" الخاص بك منتظمًا جدًا، فمن المرجح أن تكون الدفعات مثيرة للاهتمام جدًا، فقسها وادفعها حتى تحصل على OOMs. +- كلما كان GPU أكبر، زاد احتمال أن تكون الدفعات أكثر إثارة للاهتمام +- بمجرد تمكين الدفعات، تأكد من أنه يمكنك التعامل مع OOMs بشكل لطيف. + +## تجميع دفعات خط أنابيب الجزء + +`zero-shot-classification` و`question-answering` هما أمران محددان بعض الشيء، بمعنى أن إدخالًا واحدًا قد يؤدي إلى عدة تمريرات للأمام للنموذج. في ظل الظروف العادية، قد يؤدي ذلك إلى حدوث مشكلات مع وسيط `batch_size`. + +للتغلب على هذه المشكلة، فإن كلاً من خطوط الأنابيب هذه محددة بعض الشيء، فهي `ChunkPipeline` بدلاً من +خط أنابيب عادي. باختصار: + +```python +preprocessed = pipe.preprocess(inputs) +model_outputs = pipe.forward(preprocessed) +outputs = pipe.postprocess(model_outputs) +``` + +الآن يصبح: + +```python +all_model_outputs = [] +for preprocessed in pipe.preprocess(inputs): +model_outputs = pipe.forward(preprocessed) +all_model_outputs.append(model_outputs) +outputs = pipe.postprocess(all_model_outputs) +``` + +يجب أن يكون هذا شفافًا جدًا لرمزك لأن خطوط الأنابيب تستخدم بنفس الطريقة. + +هذه نظرة مبسطة، نظرًا لأن خط الأنابيب يمكنه التعامل تلقائيًا مع الدفعة إلى! وهذا يعني أنك لست مضطرًا للاهتمام +بعدد تمريرات النموذج التي ستتطلبها الإدخالات بالفعل، ويمكنك تحسين `batch_size` +بصرف النظر عن الإدخالات. لا تزال التحذيرات من القسم السابق سارية. +## خط الأنابيب التعليمات البرمجية المخصصة + +إذا كنت ترغب في تجاوز خط أنابيب محدد. + +لا تتردد في إنشاء مشكلة لمهمتك الحالية، حيث أن هدف خط الأنابيب هو أن يكون سهل الاستخدام ويدعم معظم الحالات، لذلك قد يدعم "المحولات" حالتك الاستخدامية. + +إذا كنت ترغب في التجربة ببساطة، يمكنك: + +- إنشاء فئة فرعية لخط الأنابيب الذي تختاره + +## تنفيذ خط أنابيب + +[تنفيذ خط أنابيب جديد](../add_new_pipeline) + +## الصوت + +تشمل خطوط الأنابيب المتاحة لمهمة الصوت ما يلي. + +### AudioClassificationPipeline + +[[autodoc]] AudioClassificationPipeline + +- __call__ + +- الكل + +### AutomaticSpeechRecognitionPipeline + +[[autodoc]] AutomaticSpeechRecognitionPipeline + +- __call__ + +- الكل + +### TextToAudioPipeline + +[[autodoc]] TextToAudioPipeline + +- __call__ + +- الكل + +### ZeroShotAudioClassificationPipeline + +[[autodoc]] ZeroShotAudioClassificationPipeline + +- __call__ + +- الكل + +## رؤية الكمبيوتر + +تشمل خطوط الأنابيب المتاحة لمهمة رؤية الكمبيوتر ما يلي. + +### DepthEstimationPipeline + +[[autodoc]] DepthEstimationPipeline + +- __call__ + +- الكل + +### ImageClassificationPipeline + +[[autodoc]] ImageClassificationPipeline + +- __call__ + +- الكل + +### ImageSegmentationPipeline + +[[autodoc]] ImageSegmentationPipeline + +- __call__ + +- الكل + +### ImageToImagePipeline + +[[autodoc]] ImageToImagePipeline + +- __call__ + +- الكل + +### ObjectDetectionPipeline + +[[autodoc]] ObjectDetectionPipeline + +- __call__ + +- الكل + +### VideoClassificationPipeline + +[[autodoc]] VideoClassificationPipeline + +- __call__ + +- الكل + +### ZeroShotImageClassificationPipeline + +[[autodoc]] ZeroShotImageClassificationPipeline + +- __call__ + +- الكل + +### ZeroShotObjectDetectionPipeline + +[[autodoc]] ZeroShotObjectDetectionPipeline + +- __call__ + +- الكل + +## معالجة اللغات الطبيعية + +تشمل خطوط الأنابيب المتاحة لمهمة معالجة اللغات الطبيعية ما يلي. + +### FillMaskPipeline + +[[autodoc]] FillMaskPipeline + +- __call__ + +- الكل + +### QuestionAnsweringPipeline + +[[autodoc]] QuestionAnsweringPipeline + +- __call__ + +- الكل + +### SummarizationPipeline + +[[autodoc]] SummarizationPipeline + +- __call__ + +- الكل + +### TableQuestionAnsweringPipeline + +[[autodoc]] TableQuestionAnsweringPipeline + +- __call__ + +### TextClassificationPipeline + +[[autodoc]] TextClassificationPipeline + +- __call__ + +- الكل + +### TextGenerationPipeline + +[[autodoc]] TextGenerationPipeline + +- __call__ + +- الكل + +### Text2TextGenerationPipeline + +[[autodoc]] Text2TextGenerationPipeline + +- __call__ + +- الكل + +### TokenClassificationPipeline + +[[autodoc]] TokenClassificationPipeline + +- __call__ + +- الكل + +### TranslationPipeline + + +[[autodoc]] TranslationPipeline + +- __call__ + +- الكل + +### ZeroShotClassificationPipeline + +[[autodoc]] ZeroShotClassificationPipeline + +- __call__ + +- الكل + +## متعدد الوسائط + +تشمل خطوط الأنابيب المتاحة للمهام متعددة الوسائط ما يلي. + +### DocumentQuestionAnsweringPipeline + +[[autodoc]] DocumentQuestionAnsweringPipeline + + +- __call__ + +- الكل + +### FeatureExtractionPipeline + +[[autodoc]] FeatureExtractionPipeline + +- __call__ + +- الكل + +### ImageFeatureExtractionPipeline + +[[autodoc]] ImageFeatureExtractionPipeline + +- __call__ + +- الكل + +### ImageToTextPipeline + +[[autodoc]] ImageToTextPipeline + +- __call__ + +- الكل + +### MaskGenerationPipeline + +[[autodoc]] MaskGenerationPipeline + +- __call__ + +- الكل + +### VisualQuestionAnsweringPipeline + +[[autodoc]] VisualQuestionAnsweringPipeline + +- __call__ + +- الكل + +## الفئة الأصلية: `Pipeline` + +[[autodoc]] Pipeline \ No newline at end of file From 538ccab7de074c73533368ceb13c7ae28c22f189 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:53 +0300 Subject: [PATCH 357/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/processors.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/processors.md | 149 ++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 docs/source/ar/main_classes/processors.md diff --git a/docs/source/ar/main_classes/processors.md b/docs/source/ar/main_classes/processors.md new file mode 100644 index 00000000000000..0948d91e5cbdd3 --- /dev/null +++ b/docs/source/ar/main_classes/processors.md @@ -0,0 +1,149 @@ +# معالجات + +يمكن أن تعني المعالجات أمرين مختلفين في مكتبة المحولات: + +- الكائنات التي تقوم بمعالجة المدخلات مسبقًا للنماذج متعددة الوسائط مثل [Wav2Vec2](../model_doc/wav2vec2) (الكلام والنص) أو [CLIP](../model_doc/clip) (النص والرؤية) + +- الكائنات المهملة التي كانت تستخدم في الإصدارات القديمة من المكتبة لمعالجة البيانات مسبقًا لـ GLUE أو SQUAD. + +## المعالجات متعددة الوسائط + +سيحتاج أي نموذج متعدد الوسائط إلى كائن لتشفير أو فك تشفير البيانات التي تجمع بين عدة طرائق (من بين النص، والرؤية، والصوت). تتم معالجة ذلك بواسطة كائنات تسمى المعالجات، والتي تجمع بين كائنين أو أكثر من كائنات المعالجة مثل المعالجات (للنمط النصي)، ومعالجات الصور (للرؤية)، ومستخلصات الميزات (للصوت). + +ترث هذه المعالجات من فئة الأساس التالية التي تنفذ وظائف الحفظ والتحميل: + +[[autodoc]] ProcessorMixin + +## المعالجات المهملة + +تتبع جميع المعالجات نفس البنية التي تتمثل في: + +[`~data.processors.utils.DataProcessor`]. يعيد المعالج قائمة من + +[`~data.processors.utils.InputExample`]. يمكن تحويل هذه + +[`~data.processors.utils.InputExample`] إلى + +[`~data.processors.utils.InputFeatures`] لتغذية النموذج. + +[[autodoc]] data.processors.utils.DataProcessor + +[[autodoc]] data.processors.utils.InputExample + +[[autodoc]] data.processors.utils.InputFeatures + +## GLUE + +[تقييم الفهم اللغوي العام (GLUE)](https://gluebenchmark.com/) هو معيار مرجعي يقيم أداء النماذج عبر مجموعة متنوعة من مهام فهم اللغة الطبيعية. تم إصداره جنبًا إلى جنب مع الورقة [GLUE: معيار مرجعي للمهام المتعددة ومنصة تحليل لفهم اللغة الطبيعية](https://openreview.net/pdf?id=rJ4km2R5t7) + +تستضيف هذه المكتبة ما مجموعه 10 معالجات للمهام التالية: MRPC، MNLI، MNLI (غير متطابقة)، CoLA، SST2، STSB، QQP، QNLI، RTE، وWNLI. + +هذه المعالجات هي: + +- [`~data.processors.utils.MrpcProcessor`] + +- [`~data.processors.utils.MnliProcessor`] + +- [`~data.processors.utils.MnliMismatchedProcessor`] + +- [`~data.processors.utils.Sst2Processor`] + +- [`~data.processors.utils.StsbProcessor`] + +- [`~data.processors.utils.QqpProcessor`] + +- [`~data.processors.utils.QnliProcessor`] + +- [`~data.processors.utils.RteProcessor`] + +- [`~data.processors.utils.WnliProcessor`] + +بالإضافة إلى ذلك، يمكن استخدام الطريقة التالية لتحميل القيم من ملف بيانات وتحويلها إلى قائمة من + +[`~data.processors.utils.InputExample`]. + +[[autodoc]] data.processors.glue.glue_convert_examples_to_features + +## XNLI + +[مجموعة بيانات NLI متعددة اللغات (XNLI)](https://www.nyu.edu/projects/bowman/xnli/) هي معيار مرجعي يقيم جودة التمثيلات اللغوية متعددة اللغات. XNLI هي مجموعة بيانات مستمدة من مصادر جماهيرية بناءً على [*MultiNLI*](http://www.nyu.edu/projects/bowman/multinli/): يتم وضع علامات على أزواج النصوص بوسم الاستتباع النصي للغة الطبيعية لـ 15 لغة مختلفة (بما في ذلك اللغات عالية الموارد مثل اللغة الإنجليزية واللغات منخفضة الموارد مثل السواحيلية). + +تم إصداره جنبًا إلى جنب مع الورقة [XNLI: تقييم التمثيلات اللغوية متعددة اللغات](https://arxiv.org/abs/1809.05053) + +تستضيف هذه المكتبة المعالج لتحميل بيانات XNLI: + +- [`~data.processors.utils.XnliProcessor`] + +يرجى ملاحظة أنه نظرًا لتوفر العلامات الذهبية على مجموعة الاختبار، يتم إجراء التقييم على مجموعة الاختبار. + +يوجد مثال على استخدام هذه المعالجات في البرنامج النصي [run_xnli.py](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification/run_xnli.py). + +## SQuAD + +[مجموعة بيانات Stanford Question Answering Dataset (SQuAD)](https://rajpurkar.github.io/SQuAD-explorer//) هي معيار مرجعي يقيم أداء النماذج على الإجابة على الأسئلة. هناك إصداران متاحان، v1.1 وv2.0. تم إصدار الإصدار الأول (v1.1) جنبًا إلى جنب مع الورقة [SQuAD: 100,000+ أسئلة لفهم قراءة النص](https://arxiv.org/abs/1606.05250). تم إصدار الإصدار الثاني (v2.0) إلى جانب الورقة [اعرف ما لا تعرفه: أسئلة غير قابلة للإجابة لـ SQuAD](https://arxiv.org/abs/1806.03822). + +تستضيف هذه المكتبة معالجًا لكل من الإصدارين: + +### المعالجات + +هذه المعالجات هي: + +- [`~data.processors.utils.SquadV1Processor`] + +- [`~data.processors.utils.SquadV2Processor`] + +يرث كلاهما من الفئة المجردة [`~data.processors.utils.SquadProcessor`] + +[[autodoc]] data.processors.squad.SquadProcessor + +- الكل + +بالإضافة إلى ذلك، يمكن استخدام الطريقة التالية لتحويل أمثلة SQuAD إلى + +[`~data.processors.utils.SquadFeatures`] التي يمكن استخدامها كمدخلات للنموذج. + +[[autodoc]] data.processors.squad.squad_convert_examples_to_features + +يمكن استخدام هذه المعالجات وكذلك الطريقة المذكورة أعلاه مع الملفات التي تحتوي على البيانات وكذلك مع حزمة *tensorflow_datasets*. تُقدم الأمثلة أدناه. + +### مثال الاستخدام + +فيما يلي مثال على استخدام المعالجات وكذلك طريقة التحويل باستخدام ملفات البيانات: + +```python +# تحميل معالج الإصدار الثاني +processor = SquadV2Processor() +examples = processor.get_dev_examples(squad_v2_data_dir) + +# تحميل معالج الإصدار الأول +processor = SquadV1Processor() +examples = processor.get_dev_examples(squad_v1_data_dir) + +features = squad_convert_examples_to_features( +examples=examples, +tokenizer=tokenizer, +max_seq_length=max_seq_length, +doc_stride=args.doc_stride, +max_query_length=max_query_length, +is_training=not evaluate, +) +``` + +يُعد استخدام *tensorflow_datasets* سهلاً مثل استخدام ملف البيانات: + +```python +# tensorflow_datasets فقط لمعالجة الإصدار الأول من Squad. +tfds_examples = tfds.load("squad") +examples = SquadV1Processor().get_examples_from_dataset(tfds_examples, evaluate=evaluate) + +features = squad_convert_examples_to_features( +examples=examples, +tokenizer=tokenizer, +max_seq_length=max_seq_length, +doc_stride=args.doc_stride, +max_query_length=max_query_length, +is_training=not evaluate, +) +``` + +يوجد مثال آخر على استخدام هذه المعالجات في البرنامج النصي [run_squad.py](https://github.com/huggingface/transformers/tree/main/examples/legacy/question-answering/run_squad.py). \ No newline at end of file From 88759590575b771e11795b274244c4f1d808be80 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:55 +0300 Subject: [PATCH 358/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/quantization.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/quantization.md | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/source/ar/main_classes/quantization.md diff --git a/docs/source/ar/main_classes/quantization.md b/docs/source/ar/main_classes/quantization.md new file mode 100644 index 00000000000000..e8b3daa69a7b90 --- /dev/null +++ b/docs/source/ar/main_classes/quantization.md @@ -0,0 +1,31 @@ +# الضبط الكمي + +تقنيات الضبط الكمي تقلل من تكاليف الذاكرة والحوسبة من خلال تمثيل الأوزان والتنشيطات باستخدام أنواع بيانات أقل دقة مثل الأعداد الصحيحة 8-بت (int8). يسمح ذلك بتحميل نماذج أكبر عادةً لا يمكنك تحميلها في الذاكرة، وتسريع الاستدلال. تدعم مكتبة Transformers خوارزميات الضبط الكمي AWQ وGPTQ، كما تدعم الضبط الكمي 8-بت و4-بت مع bitsandbytes. + +يمكن إضافة تقنيات الضبط الكمي التي لا تدعمها مكتبة Transformers باستخدام فئة [`HfQuantizer`]. + +تعلم كيفية ضبط نماذج في الدليل [الضبط الكمي](../الضبط-الكمي). + +## QuantoConfig +[[autodoc]] QuantoConfig + +## AqlmConfig +[[autodoc]] AqlmConfig + +## AwqConfig +[[autodoc]] AwqConfig + +## EetqConfig +[[autodoc]] EetqConfig + +## GPTQConfig +[[autodoc]] GPTQConfig + +## BitsAndBytesConfig +[[autodoc]] BitsAndBytesConfig + +## HfQuantizer +[[autodoc]] quantizers.base.HfQuantizer + +## HqqConfig +[[autodoc]] HqqConfig \ No newline at end of file From 93b7404211403d3981f53c5d5d771dfefa1bf401 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:57 +0300 Subject: [PATCH 359/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/text=5Fgeneration.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/ar/main_classes/text_generation.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 docs/source/ar/main_classes/text_generation.md diff --git a/docs/source/ar/main_classes/text_generation.md b/docs/source/ar/main_classes/text_generation.md new file mode 100644 index 00000000000000..5be137f47228da --- /dev/null +++ b/docs/source/ar/main_classes/text_generation.md @@ -0,0 +1,48 @@ +# التوليد + +يحتوي كل إطار عمل على طريقة توليد للنص مُنفذة في فئة `GenerationMixin` الخاصة بها: + +- PyTorch [`~generation.GenerationMixin.generate`] مُنفذة في [`~generation.GenerationMixin`]. +- TensorFlow [`~generation.TFGenerationMixin.generate`] مُنفذة في [`~generation.TFGenerationMixin`]. +- Flax/JAX [`~generation.FlaxGenerationMixin.generate`] مُنفذة في [`~generation.FlaxGenerationMixin`]. + +بغض النظر عن إطار العمل الذي تختاره، يمكنك تحديد طريقة التوليد باستخدام فئة [`~generation.GenerationConfig`] +راجع هذه الفئة للحصول على القائمة الكاملة لمعلمات التوليد، والتي تتحكم في سلوك طريقة التوليد. + +لمعرفة كيفية فحص تكوين التوليد الخاص بالنموذج، وما هي القيم الافتراضية، وكيفية تغيير المعلمات حسب الحاجة، +وكيفية إنشاء وحفظ تكوين توليد مخصص، راجع دليل +[استراتيجيات توليد النص](../generation_strategies). كما يشرح الدليل كيفية استخدام الميزات ذات الصلة، +مثل بث الرموز. + +## GenerationConfig + +[[autodoc]] generation.GenerationConfig + +- from_pretrained +- from_model_config +- save_pretrained +- update +- validate +- get_generation_mode + +[[autodoc]] generation.WatermarkingConfig + +## GenerationMixin + +[[autodoc]] generation.GenerationMixin + +- generate +- compute_transition_scores + +## TFGenerationMixin + +[[autodoc]] generation.TFGenerationMixin + +- generate +- compute_transition_scores + +## FlaxGenerationMixin + +[[autodoc]] generation.FlaxGenerationMixin + +- generate \ No newline at end of file From 4a07e16683f73c8a9b540df7ef0c785c9e69f927 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:22:59 +0300 Subject: [PATCH 360/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/tokenizer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/tokenizer.md | 50 ++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/source/ar/main_classes/tokenizer.md diff --git a/docs/source/ar/main_classes/tokenizer.md b/docs/source/ar/main_classes/tokenizer.md new file mode 100644 index 00000000000000..379fee9a7e2349 --- /dev/null +++ b/docs/source/ar/main_classes/tokenizer.md @@ -0,0 +1,50 @@ +# معالج الرموز + +معالج الرموز هو المسؤول عن إعداد المدخلات للنموذج. تحتوي المكتبة على معالجات رموز لجميع النماذج. معظم معالجات الرموز متوفرة بنكهتين: تنفيذ Python كامل وتنفيذ "سريع" يعتمد على مكتبة Rust [🤗 Tokenizers](https://github.com/huggingface/tokenizers). تسمح عمليات التنفيذ "السريعة" بما يلي: + +1. تسريع كبير، خاصة عند إجراء التمييز بين الدفعات +2. أساليب إضافية للربط بين السلسلة الأصلية (الحروف والكلمات) ومساحة الرمز (على سبيل المثال، الحصول على فهرس الرمز الذي يتضمن حرفًا معينًا أو تسلسل الأحرف المقابل لرمز معين). + +تنفذ الفئات الأساسية [PreTrainedTokenizer] و [PreTrainedTokenizerFast] الأساليب الشائعة لتشفير إدخالات السلسلة في إدخالات النموذج (انظر أدناه) وإنشاء/حفظ معالجات الرموز Python و "Fast" إما من ملف أو دليل محلي أو من معالج رموز مسبق التدريب يوفره المكتبة (تم تنزيله من مستودع AWS S3 الخاص بـ HuggingFace). يعتمد كلاهما على [~ tokenization_utils_base.PreTrainedTokenizerBase] الذي يحتوي على الأساليب الشائعة، و [~ tokenization_utils_base.SpecialTokensMixin]. + +وبالتالي، فإن [PreTrainedTokenizer] و [PreTrainedTokenizerFast] تنفذ الأساليب الرئيسية لاستخدام جميع معالجات الرموز: + +- معالجة الرموز (تقسيم السلاسل إلى سلاسل رموز فرعية)، وتحويل سلاسل الرموز إلى معرفات والعكس، والترميز/فك الترميز (أي معالجة الرموز وتحويلها إلى أعداد صحيحة). +- إضافة رموز جديدة إلى المفردات بطريقة مستقلة عن البنية الأساسية (BPE، SentencePiece...). +- إدارة الرموز الخاصة (مثل القناع، وبداية الجملة، وما إلى ذلك): إضافتها، وتعيينها إلى سمات في معالج الرموز للوصول السهل، والتأكد من عدم تقسيمها أثناء معالجة الرموز. + +يحتوي [BatchEncoding] على إخراج أساليب الترميز لـ [~ tokenization_utils_base.PreTrainedTokenizerBase] (`__call__`، `encode_plus` و `batch_encode_plus`) ومشتق من قاموس Python. عندما يكون معالج الرموز عبارة عن معالج رموز Python نقي، يتصرف هذا الصنف مثل قاموس Python القياسي ويحتوي على إدخالات النموذج المختلفة التي تحسبها هذه الأساليب (`input_ids`، `attention_mask`...). عندما يكون معالج الرموز عبارة عن "معالج رموز سريع" (أي مدعوم من مكتبة HuggingFace [tokenizers](https://github.com/huggingface/tokenizers))، توفر هذه الفئة بالإضافة إلى ذلك عدة أساليب محاذاة متقدمة يمكن استخدامها للربط بين السلسلة الأصلية (الحروف والكلمات) ومساحة الرمز (على سبيل المثال، الحصول على فهرس الرمز الذي يتضمن حرفًا معينًا أو تسلسل الأحرف المقابل لرمز معين). + +## PreTrainedTokenizer + +[[autodoc]] PreTrainedTokenizer + +- __call__ +- add_tokens +- add_special_tokens +- apply_chat_template +- batch_decode +- decode +- encode +- push_to_hub +- all + +## PreTrainedTokenizerFast + +يعتمد [PreTrainedTokenizerFast] على مكتبة [tokenizers](https://huggingface.co/docs/tokenizers). يمكن تحميل معالجات الرموز التي تم الحصول عليها من مكتبة 🤗 tokenizers إلى 🤗 transformers ببساطة شديدة. راجع صفحة [Using tokenizers from 🤗 tokenizers](../fast_tokenizers) لمعرفة كيفية القيام بذلك. + +[[autodoc]] PreTrainedTokenizerFast + +- __call__ +- add_tokens +- add_special_tokens +- apply_chat_template +- batch_decode +- decode +- encode +- push_to_hub +- all + +## BatchEncoding + +[[autodoc]] BatchEncoding \ No newline at end of file From f711772c427a67277d3d30114d67c1cbc494b08e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:00 +0300 Subject: [PATCH 361/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/main=5Fclasses/trainer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/main_classes/trainer.md | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/source/ar/main_classes/trainer.md diff --git a/docs/source/ar/main_classes/trainer.md b/docs/source/ar/main_classes/trainer.md new file mode 100644 index 00000000000000..86f140e30a0788 --- /dev/null +++ b/docs/source/ar/main_classes/trainer.md @@ -0,0 +1,38 @@ +# Trainer + +توفر فئة [`Trainer`] واجهة برمجة تطبيقات (API) للتدريب الكامل الميزات في PyTorch، وهي تدعم التدريب الموزع على وحدات معالجة الرسوميات (GPUs) / وحدات معالجة الدقة الفائقة (TPUs) متعددة، والدقة المختلطة لوحدات معالجة الرسوميات (GPUs) من NVIDIA وAMD، و[`torch.amp`] لـ PyTorch. وتعمل فئة [`Trainer`] جنبًا إلى جنب مع فئة [`TrainingArguments`]، والتي توفر مجموعة واسعة من الخيارات لتخصيص كيفية تدريب النموذج. معًا، توفر هاتان الفئتان واجهة برمجة تطبيقات (API) تدريبًا كاملاً. + +[`Seq2SeqTrainer`] و [`Seq2SeqTrainingArguments`] يرثان من فئات [`Trainer`] و [`TrainingArgument`]، وقد تم تكييفهما لتدريب النماذج الخاصة بمهام التسلسل إلى تسلسل مثل الملخص أو الترجمة. + + +تمت تهيئة فئة [`Trainer`] لتحقيق الأداء الأمثل مع نماذج 🤗 Transformers ويمكن أن يكون لها سلوكيات مفاجئة عند استخدامها مع نماذج أخرى. عند استخدامها مع نموذجك الخاص، تأكد من: + +- أن النموذج الخاص بك يعيد دائمًا الرباعيات أو الفئات الفرعية لـ [`~utils.ModelOutput`] +- يمكن للنموذج الخاص بك حساب الخسارة إذا تم توفير وسيط `labels` وأن الخسارة يتم إرجاعها كأول عنصر في الرباعية (إذا كان النموذج الخاص بك يعيد الرباعيات) +- يمكن للنموذج الخاص بك قبول وسيطات تسمية متعددة (استخدم `label_names` في [`TrainingArguments`] للإشارة إلى اسمها إلى [`Trainer`]) ولكن لا ينبغي تسمية أي منها باسم "التسمية" + + +## Trainer [[api-reference]] + +[[autodoc]] Trainer + +- الكل + +## Seq2SeqTrainer + +[[autodoc]] Seq2SeqTrainer + +- تقييم +- التنبؤ + +## TrainingArguments + +[[autodoc]] TrainingArguments + +- الكل + +## Seq2SeqTrainingArguments + +[[autodoc]] Seq2SeqTrainingArguments + +- الكل \ No newline at end of file From d5512b12bc792bc4c55327b9a5386d38c43777c9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:02 +0300 Subject: [PATCH 362/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/albert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/albert.md | 209 +++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 docs/source/ar/model_doc/albert.md diff --git a/docs/source/ar/model_doc/albert.md b/docs/source/ar/model_doc/albert.md new file mode 100644 index 00000000000000..d3095e189989af --- /dev/null +++ b/docs/source/ar/model_doc/albert.md @@ -0,0 +1,209 @@ +# Albert + +## نظرة عامة + +اقترح نموذج Albert في "ALBERT: A Lite BERT for Self-supervised Learning of Language Representations" من قبل Zhenzhong Lan وآخرون. ويقدم تقنيتين لتخفيض المعلمات لخفض استهلاك الذاكرة وزيادة سرعة التدريب لـ BERT: + +- تقسيم مصفوفة التضمين إلى مصفوفتين أصغر. +- استخدام طبقات متكررة مقسمة بين المجموعات. + +الملخص من الورقة هو كما يلي: + +*إن زيادة حجم النموذج عند التدريب المسبق لتمثيلات اللغة الطبيعية يؤدي غالبًا إلى تحسين الأداء في مهام التدفق السفلي. ومع ذلك، في مرحلة ما، تصبح الزيادات الإضافية في النموذج أكثر صعوبة بسبب قيود ذاكرة GPU/TPU، وأوقات التدريب الأطول، وتدهور النموذج غير المتوقع. ولمعالجة هذه المشكلات، نقدم تقنيتين لتخفيض المعلمات لخفض استهلاك الذاكرة وزيادة سرعة التدريب لـ BERT. تقدم الأدلة التجريبية الشاملة أن الطرق التي نقترحها تؤدي إلى نماذج تتناسب بشكل أفضل مقارنة بـ BERT الأصلي. كما نستخدم أيضًا خسارة ذاتية الإشراف تركز على نمذجة الترابط بين الجمل، ونظهر أنها تساعد باستمرار مهام التدفق السفلي مع إدخالات متعددة الجمل. ونتيجة لذلك، يحقق نموذجنا الأفضل نتائج جديدة في معايير GLUE وRACE وSQuAD بينما لديه معلمات أقل مقارنة بـ BERT-large.* + +تمت المساهمة بهذا النموذج من قبل [lysandre](https://huggingface.co/lysandre). تمت المساهمة بهذه النسخة من النموذج بواسطة [kamalkraj](https://huggingface.co/kamalkraj). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/ALBERT). + +## نصائح الاستخدام + +- Albert هو نموذج مع تضمينات الموضع المطلق لذلك يُنصح عادةً بإضافة مسافات إلى الإدخالات من اليمين بدلاً من اليسار. + +- يستخدم Albert طبقات متكررة مما يؤدي إلى بصمة ذاكرة صغيرة، ومع ذلك، تظل التكلفة الحسابية مماثلة لبنية BERT-like بنفس عدد الطبقات المخفية لأنه يجب عليه المرور عبر نفس عدد الطبقات (المتكررة). + +- حجم التضمين E مختلف عن حجم المخفي H مبرر لأن التضمينات مستقلة عن السياق (تمثل مصفوفة التضمين مصفوفة واحدة لكل رمز)، في حين أن الحالات المخفية تعتمد على السياق (تمثل حالة مخفية واحدة تسلسلًا من الرموز) لذا فمن المنطقي أن يكون H >> E. أيضًا، مصفوفة التضمين كبيرة حيث أنها V x E (V هو حجم المفردات). إذا كان E < H، فستكون المعلمات أقل. + +- تنقسم الطبقات إلى مجموعات تشترك في المعلمات (لتوفير الذاكرة). + +يتم استبدال التنبؤ بالجملة التالية بالتنبؤ بترتيب الجملة: في الإدخالات، لدينا جملتان A وB (متتاليتان) ونقوم إما بإدخال A متبوعة بـ B أو B متبوعة بـ A. يجب على النموذج التنبؤ بما إذا تم تبديلهما أم لا. + +تمت المساهمة بهذا النموذج من قبل [lysandre](https://huggingface.co/lysandre). تمت المساهمة بنسخة النموذج هذه من قبل [kamalkraj](https://huggingface.co/kamalkraj). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/ALBERT). + +## الموارد + +تتكون الموارد المقدمة في الأقسام التالية من قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام AlBERT. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يثبت المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- [`AlbertForSequenceClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification) هذا. + +- [`TFAlbertForSequenceClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/text-classification) هذا. + +- [`FlaxAlbertForSequenceClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/flax/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification_flax.ipynb) هذا. + +- تحقق من [دليل تصنيف النص](../tasks/sequence_classification) حول كيفية استخدام النموذج. + +- [`AlbertForTokenClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/token-classification) هذا. + +- [`TFAlbertForTokenClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/token-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification-tf.ipynb) هذا. + +- [`FlaxAlbertForTokenClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/flax/token-classification) هذا. + +- الفصل [تصنيف الرمز](https://huggingface.co/course/chapter7/2؟fw=pt) من دورة 🤗 Hugging Face. + +- تحقق من [دليل تصنيف الرموز](../tasks/token_classification) حول كيفية استخدام النموذج. + +- [`AlbertForMaskedLM`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#robertabertdistilbert-and-masked-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb) هذا. + +- [`TFAlbertForMaskedLM`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_mlmpy) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb) هذا. + +- [`FlaxAlbertForMaskedLM`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#masked-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/masked_language_modeling_flax.ipynb) هذا. + +- الفصل [نمذجة اللغة المقنعة](https://huggingface.co/course/chapter7/3؟fw=pt) من دورة 🤗 Hugging Face. + +- تحقق من [دليل نمذجة اللغة المقنعة](../tasks/masked_language_modeling) حول كيفية استخدام النموذج. + +- [`AlbertForQuestionAnswering`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb) هذا. + +- [`TFAlbertForQuestionAnswering`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering-tf.ipynb) هذا. + +- [`FlaxAlbertForQuestionAnswering`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/flax/question-answering) هذا. + +- الفصل [الأسئلة والأجوبة](https://huggingface.co/course/chapter7/7؟fw=pt) من دورة 🤗 Hugging Face. + +- تحقق من [دليل الأسئلة والأجوبة](../tasks/question_answering) حول كيفية استخدام النموذج. + +**الاختيار من متعدد** + +- [`AlbertForMultipleChoice`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/multiple-choice) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice.ipynb) هذا. + +- [`TFAlbertForMultipleChoice`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/multiple-choice) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice-tf.ipynb) هذا. + +- تحقق من [دليل الاختيار من متعدد](../tasks/multiple_choice) حول كيفية استخدام النموذج. + +## AlbertConfig + +[[autodoc]] AlbertConfig + +## AlbertTokenizer + +[[autodoc]] AlbertTokenizer + +- build_inputs_with_special_tokens + +- get_special_tokens_mask + +- create_token_type_ids_from_sequences + +- save_vocabulary + +## AlbertTokenizerFast + +[[autodoc]] AlbertTokenizerFast + +## مخرجات Albert المحددة + +[[autodoc]] models.albert.modeling_albert.AlbertForPreTrainingOutput + +[[autodoc]] models.albert.modeling_tf_albert.TFAlbertForPreTrainingOutput + + + + +## AlbertModel + +[[autodoc]] AlbertModel + +- forward + +## AlbertForPreTraining + +[[autodoc]] AlbertForPreTraining + +- forward + +## AlbertForMaskedLM + +[[autodoc]] AlbertForMaskedLM + +- forward + +## AlbertForSequenceClassification + +[[autodoc]] AlbertForSequenceClassification + +- forward + +## AlbertForMultipleChoice + +[[autodoc]] AlbertForMultipleChoice + +## AlbertForTokenClassification + +[[autodoc]] AlbertForTokenClassification + +- forward + +## AlbertForQuestionAnswering + + +[[autodoc]] AlbertForQuestionAnswering + +- forward + + + + + +## TFAlbertModel + +[[autodoc]] TFAlbertModel + +- call +## TFAlbertForPreTraining + +نموذج ألبرت للمرحلة السابقة للتدريب، مصمم لمهام ما قبل التدريب مثل التنبؤ بالجملة التالية. + +## TFAlbertForMaskedLM + +نموذج ألبرت للغة الماسكة، مصمم لمهام اللغة الماسكة مثل استكمال الجمل. + +## TFAlbertForSequenceClassification + +نموذج ألبرت لتصنيف التسلسل، مصمم لمهام تصنيف التسلسل مثل تصنيف النوايا في نصوص الدردشة. + +## TFAlbertForMultipleChoice + +نموذج ألبرت للاختيار المتعدد، مصمم لمهام الاختيار المتعدد مثل الإجابة على الأسئلة ذات الخيارات المتعددة. + +## TFAlbertForTokenClassification + +نموذج ألبرت لتصنيف الرموز، مصمم لمهام تصنيف الرموز مثل تسمية الكيانات في النص. + +## TFAlbertForQuestionAnswering + +نموذج ألبرت للإجابة على الأسئلة، مصمم لمهام الإجابة على الأسئلة مثل استرجاع الإجابات من نص معين. + +## FlaxAlbertModel + +نموذج ألبرت الأساسي المبنى باستخدام Flax، يمكن استخدامه كنقطة بداية لمهام NLP المختلفة. + +## FlaxAlbertForPreTraining + +نموذج ألبرت للمرحلة السابقة للتدريب، مصمم لمهام ما قبل التدريب مثل التنبؤ بالجملة التالية. + +## FlaxAlbertForMaskedLM + +نموذج ألبرت للغة الماسكة، مصمم لمهام اللغة الماسكة مثل استكمال الجمل. + +## FlaxAlbertForSequenceClassification + +نموذج ألبرت لتصنيف التسلسل، مصمم لمهام تصنيف التسلسل مثل تصنيف النوايا في نصوص الدردشة. + +## FlaxAlbertForMultipleChoice + +نموذج ألبرت للاختيار المتعدد، مصمم لمهام الاختيار المتعدد مثل الإجابة على الأسئلة ذات الخيارات المتعددة. + +## FlaxAlbertForTokenClassification + +نموذج ألبرت لتصنيف الرموز، مصمم لمهام تصنيف الرموز مثل تسمية الكيانات في النص. + +## FlaxAlbertForQuestionAnswering + +نموذج ألبرت للإجابة على الأسئلة، مصمم لمهام الإجابة على الأسئلة مثل استرجاع الإجابات من نص معين. \ No newline at end of file From 0c2ffc7eb699d47c92784781b0bf17098fa21a9c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:04 +0300 Subject: [PATCH 363/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bartpho.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bartpho.md | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/bartpho.md diff --git a/docs/source/ar/model_doc/bartpho.md b/docs/source/ar/model_doc/bartpho.md new file mode 100644 index 00000000000000..6d288834e0ba14 --- /dev/null +++ b/docs/source/ar/model_doc/bartpho.md @@ -0,0 +1,59 @@ +# BARTpho + +## نظرة عامة + +اقترح نجوين لونغ تران، ودوونغ مينه لي، ودات كوك نجوين نموذج BARTpho في ورقة بحثية بعنوان: "BARTpho: نماذج تسلسل إلى تسلسل مسبقة التدريب للغة الفيتنامية". + +ويوضح الملخص المستخرج من الورقة ما يلي: + +"نقدم BARTpho بإصدارين - BARTpho_word وBARTpho_syllable - أول نموذج تسلسل إلى تسلسل أحادي اللغة واسع النطاق مُدرب مسبقًا للغة الفيتنامية. يستخدم نموذجنا BARTpho البنية والطريقة المُدربة مسبقًا "large" لنموذج BART للتسلسل إلى تسلسل لإزالة التشويش، مما يجعله مناسبًا بشكل خاص لمهام NLP التوليدية. وتظهر التجارب على مهمة فرعية لتلخيص النص الفيتنامي أن BARTpho الخاص بنا يتفوق على خط الأساس القوي mBART ويحسن الحالة الراهنة في كل من التقييمات الآلية والبشرية. ونقدم BARTpho لتسهيل الأبحاث والتطبيقات المستقبلية لمهام NLP التوليدية باللغة الفيتنامية." + +ساهم في هذا النموذج [dqnguyen](https://huggingface.co/dqnguyen). ويمكن العثور على الكود الأصلي [هنا](https://github.com/VinAIResearch/BARTpho). + +## مثال على الاستخدام + +```python +>>> import torch +>>> from transformers import AutoModel, AutoTokenizer + +>>> bartpho = AutoModel.from_pretrained("vinai/bartpho-syllable") + +>>> tokenizer = AutoTokenizer.from_pretrained("vinai/bartpho-syllable") + +>>> line = "Chúng tôi là những nghiên cứu viên." + +>>> input_ids = tokenizer(line, return_tensors="pt") + +>>> with torch.no_grad(): +... features = bartpho(**input_ids) # مخرجات النماذج هي الآن عبارة عن مجموعات + +>>> # مع TensorFlow 2.0+: +>>> from transformers import TFAutoModel + +>>> bartpho = TFAutoModel.from_pretrained("vinai/bartpho-syllable") +>>> input_ids = tokenizer(line, return_tensors="tf") +>>> features = bartpho(**input_ids) +``` + +## نصائح الاستخدام + +- على غرار mBART، يستخدم BARTpho البنية "large" من BART مع طبقة إضافية للتحويل الطبيعي على رأس كل من المشفر وفك المشفر. لذلك، يجب ضبط أمثلة الاستخدام في [توثيق BART](bart)، عند التكيف مع الاستخدام مع BARTpho، عن طريق استبدال الفئات المتخصصة في BART بالفئات المناظرة المتخصصة في mBART. على سبيل المثال: + +```python +>>> from transformers import MBartForConditionalGeneration + +>>> bartpho = MBartForConditionalGeneration.from_pretrained("vinai/bartpho-syllable") +>>> TXT = "Chúng tôi là nghiên cứu viên." +>>> input_ids = tokenizer([TXT], return_tensors="pt")["input_ids"] +>>> logits = bartpho(input_ids).logits +>>> masked_index = (input_ids[0] == tokenizer.mask_token_id).nonzero().item() +>>> probs = logits[0, masked_index].softmax(dim=0) +>>> values, predictions = probs.topk(5) +>>> print(tokenizer.decode(predictions).split()) +``` + +- هذا التنفيذ مخصص للتشفير فقط: "monolingual_vocab_file" يتكون من الأنواع المتخصصة باللغة الفيتنامية المستخرجة من نموذج SentencePiece المُدرب مسبقًا "vocab_file" والمتاح من XLM-RoBERTa متعدد اللغات. ويمكن للغات الأخرى، إذا استخدمت ملف "vocab_file" هذا لتقسيم الكلمات إلى أجزاء أصغر متعددة اللغات، أن تعيد استخدام BartphoTokenizer مع ملف "monolingual_vocab_file" الخاص بها والمتخصص بلغتها. + +## BartphoTokenizer + +[[autodoc]] BartphoTokenizer \ No newline at end of file From e97a33a08c25e6ec1d833a40c0b5ec74aca4b972 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:06 +0300 Subject: [PATCH 364/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/beit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/beit.md | 121 +++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/source/ar/model_doc/beit.md diff --git a/docs/source/ar/model_doc/beit.md b/docs/source/ar/model_doc/beit.md new file mode 100644 index 00000000000000..20f4a3c94ae900 --- /dev/null +++ b/docs/source/ar/model_doc/beit.md @@ -0,0 +1,121 @@ +# BEiT + +## نظرة عامة +اقترح Hangbo Bao و Li Dong و Furu Wei نموذج BEiT في ورقتهم البحثية بعنوان "BEiT: BERT Pre-Training of Image Transformers". مستوحى من BERT، تعد BEiT أول ورقة بحثية تجعل التعلم الذاتي المسبق لـ Vision Transformers (ViTs) يتفوق على التعلم المُراقب المسبق. بدلاً من تدريب النموذج مسبقًا للتنبؤ بفئة الصورة (كما هو الحال في ورقة ViT الأصلية)، يتم تدريب نماذج BEiT مسبقًا للتنبؤ بالرموز المرئية من كتاب الرموز الخاص بنموذج DALL-E من OpenAI بالنظر إلى الرقع المقنعة. + +ملخص الورقة البحثية هو كما يلي: + +"نقدم نموذج تمثيل الرؤية ذاتي الإشراف BEiT، والذي يعني Bidirectional Encoder representation from Image Transformers. واقتداءً بنموذج BERT الذي تم تطويره في مجال معالجة اللغات الطبيعية، نقترح مهمة نمذجة الصور المقنعة لتدريب نماذج Vision Transformers مسبقًا. على وجه التحديد، لكل صورة في مرحلة ما قبل التدريب لدينا وجهتا نظر، أي رقع الصور (مثل 16x16 بكسل)، والرموز المرئية (أي الرموز المتقطعة). أولاً، نقوم "بتقسيم" الصورة الأصلية إلى رموز مرئية. ثم نقوم بتعمية بعض رقع الصور بشكل عشوائي وإدخالها في محول الترميز. يتمثل الهدف من مرحلة ما قبل التدريب في استعادة الرموز المرئية الأصلية بناءً على رقع الصور المعيبة. بعد مرحلة ما قبل التدريب لـ BEiT، نقوم بتعديل دقيق لمعلمات النموذج مباشرة على مهام التدفق السفلي عن طريق إضافة طبقات المهام فوق المشفر المُدرب مسبقًا. تُظهر النتائج التجريبية على تصنيف الصور والتجزئة الدلالية أن نموذجنا يحقق نتائج تنافسية مع طرق التدريب المسبق السابقة. على سبيل المثال، يحقق BEiT بحجم قاعدة دقة 83.2٪ على ImageNet-1K، متغلبًا بشكل كبير على تدريب DeiT من الصفر (81.8٪) بنفس الإعداد. علاوة على ذلك، يحصل BEiT بحجم كبير على 86.3٪ باستخدام ImageNet-1K فقط، متفوقًا حتى على ViT-L مع التدريب الخاضع للإشراف على ImageNet-22K (85.2٪)". + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). تمت المساهمة بإصدار JAX/FLAX من هذا النموذج بواسطة [kamalkraj](https://huggingface.co/kamalkraj). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/unilm/tree/master/beit). + +## نصائح الاستخدام + +- تعد نماذج BEiT محولات رؤية عادية، ولكنها مدربة ذاتيًا بدلاً من التدريب الخاضع للإشراف. إنها تتفوق على كل من النموذج الأصلي (ViT) وكذلك محولات الصور الفعالة للبيانات (DeiT) عند ضبطها الدقيق على ImageNet-1K و CIFAR-100. يمكنك الاطلاع على دفاتر الملاحظات التجريبية المتعلقة بالاستدلال وكذلك الضبط الدقيق على البيانات المخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/VisionTransformer) (يمكنك ببساطة استبدال [`ViTFeatureExtractor`] بـ [`BeitImageProcessor`] و [`ViTForImageClassification`] بـ [`BeitForImageClassification`]). + +- هناك أيضًا دفتر ملاحظات توضيحي متاح يوضح كيفية دمج محول رموز الصور الخاص بنموذج DALL-E مع BEiT لأداء نمذجة الصور المقنعة. يمكنك العثور عليه [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/BEiT). + +- نظرًا لأن نماذج BEiT تتوقع أن يكون لكل صورة نفس الحجم (الدقة)، فيمكن استخدام [`BeitImageProcessor`] لتصغير حجم الصور (أو تغيير مقياسها) وتطبيعها للنموذج. + +- يتم عكس كل من دقة الرقع ودقة الصورة المستخدمة أثناء التدريب المسبق أو الضبط الدقيق في اسم كل نقطة تفتيش. على سبيل المثال، يشير `microsoft/beit-base-patch16-224` إلى بنية بحجم قاعدة بدقة رقعة 16x16 ودقة ضبط دقيق 224x224. يمكن العثور على جميع نقاط التفتيش على [المركز](https://huggingface.co/models?search=microsoft/beit). + +- نقاط التفتيش المتاحة هي إما (1) مدربة مسبقًا على ImageNet-22k (مجموعة من 14 مليون صورة و 22 ألف فئة)، أو (2) أيضًا ضبط دقيق على ImageNet-22k أو (3) أيضًا ضبط دقيق على ImageNet-1k (المعروف أيضًا باسم ILSVRC 2012، وهو عبارة عن مجموعة من 1.3 مليون صورة و 1000 فئة). + +- يستخدم BEiT تضمينات الموضع النسبي، مستوحاة من نموذج T5. خلال مرحلة ما قبل التدريب، قام المؤلفون بمشاركة الانحياز الموضعي النسبي بين طبقات الاهتمام الذاتي المتعددة. خلال الضبط الدقيق، يتم تهيئة انحياز الموضع النسبي لكل طبقة باستخدام انحياز الموضع النسبي المشترك الذي تم الحصول عليه بعد مرحلة ما قبل التدريب. لاحظ أنه إذا أراد المرء تدريب نموذج من الصفر، فيجب عليه إما تعيين `use_relative_position_bias` أو `use_relative_position_bias` من [`BeitConfig`] إلى `True` لإضافة تضمينات الموضع. + +drawing + + مرحلة ما قبل التدريب BEiT. مأخوذة من الورقة البحثية الأصلية. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام BEiT. + + + +- [`BeitForImageClassification`] مدعوم بواسطة [نص برمجي توضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر ملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +**التجزئة الدلالية** + +- [دليل مهام التجزئة الدلالية](../tasks/semantic_segmentation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب Pull Request وسنقوم بمراجعته! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## المخرجات المحددة لـ BEiT + +[[autodoc]] models.beit.modeling_beit.BeitModelOutputWithPooling + +[[autodoc]] models.beit.modeling_flax_beit.FlaxBeitModelOutputWithPooling + +## BeitConfig + +[[autodoc]] BeitConfig + +## BeitFeatureExtractor + +[[autodoc]] BeitFeatureExtractor + +- __call__ + +- post_process_semantic_segmentation + +## BeitImageProcessor + +[[autodoc]] BeitImageProcessor + +- preprocess + +- post_process_semantic_segmentation + + + + +## BeitModel + +[[autodoc]] BeitModel + +- forward + +## BeitForMaskedImageModeling + +[[autodoc]] BeitForMaskedImageModeling + +- forward + +## BeitForImageClassification + +[[autodoc]] BeitForImageClassification + +- forward + +## BeitForSemanticSegmentation + +[[autodoc]] BeitForSemanticSegmentation + +- forward + + + + +## FlaxBeitModel + +[[autodoc]] FlaxBeitModel + +- __call__ + +## FlaxBeitForMaskedImageModeling + +[[autodoc]] FlaxBeitForMaskedImageModeling + +- __call__ + +## FlaxBeitForImageClassification + +[[autodoc]] FlaxBeitForImageClassification + +- __call__ + + + \ No newline at end of file From 49f21c33a09c548fa39e009662d83367837f3aa0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:08 +0300 Subject: [PATCH 365/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bert-generation.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bert-generation.md | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/source/ar/model_doc/bert-generation.md diff --git a/docs/source/ar/model_doc/bert-generation.md b/docs/source/ar/model_doc/bert-generation.md new file mode 100644 index 00000000000000..8cba1044ebed47 --- /dev/null +++ b/docs/source/ar/model_doc/bert-generation.md @@ -0,0 +1,31 @@ +# BertGeneration + +## نظرة عامة +يعد نموذج BertGeneration نموذجًا لـ BERT يمكن الاستفادة منه في مهام التسلسل إلى تسلسل باستخدام EncoderDecoderModel كما هو مقترح في "الاستفادة من نقاط التحقق المسبقة للتدريب لمهام توليد التسلسل" بواسطة Sascha Rothe وShashi Narayan وAliaksei Severyn. + +مقتطف من الورقة البحثية هو كما يلي: + +"غيرت الطرق غير الخاضعة للإشراف لتمهيد النماذج العصبية الكبيرة مؤخرًا طريقة معالجة اللغات الطبيعية. من خلال البدء من نقاط التحقق التي تم إصدارها للجمهور، قام ممارسو معالجة اللغات الطبيعية بتحسين الحالة الراهنة في العديد من المعايير مع توفير كميات كبيرة من وقت الحوسبة. حتى الآن، كان التركيز بشكل أساسي على مهام فهم اللغة الطبيعية. في هذه الورقة، نثبت فعالية نقاط التحقق المسبقة لتوليد التسلسل. لقد قمنا بتطوير نموذج تسلسل إلى تسلسل يعتمد على المحول متوافق مع نقاط التحقق المسبقة المتاحة للجمهور BERT وGPT-2 وRoBERTa، وأجرينا دراسة تجريبية شاملة حول فائدة تهيئة نموذجنا، كل من المشفر وفك التشفير، مع هذه نقاط التحقق. تحقق نماذجنا نتائج جديدة في حالة الفن في الترجمة الآلية، وملخص النص، وتقسيم الجمل، واندماج الجمل." + +تمت المساهمة بهذا النموذج من قبل [باتريك فون بلاتين]. يمكن العثور على الكود الأصلي [هنا]. + +## أمثلة الاستخدام والنصائح + +يمكن استخدام النموذج بالاشتراك مع EncoderDecoderModel للاستفادة من نقطتي تفتيش BERT مسبقة التدريب للضبط الدقيق اللاحق: + +يمكن أيضًا العثور على EncoderDecoderModel مسبقة التدريب مباشرة في مركز النماذج، على سبيل المثال: + +النصائح: + +- يجب استخدام [BertGenerationEncoder] و [BertGenerationDecoder] بالاشتراك مع [EncoderDecoder]. +- بالنسبة للتلخيص وتقسيم الجمل ودمج الجمل والترجمة، لا يلزم وجود رموز خاصة للإدخال. لذلك، لا يجب إضافة رمز EOS إلى نهاية الإدخال. + +## BertGenerationConfig + +## BertGenerationTokenizer + +- save_vocabulary + +## BertGenerationEncoder + +## BertGenerationDecoder \ No newline at end of file From d4995aab7a0a5e691c7cedb35d118e8ea207ccad Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:10 +0300 Subject: [PATCH 366/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bert-japanese.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bert-japanese.md | 62 +++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/source/ar/model_doc/bert-japanese.md diff --git a/docs/source/ar/model_doc/bert-japanese.md b/docs/source/ar/model_doc/bert-japanese.md new file mode 100644 index 00000000000000..9dabf6b740b1b3 --- /dev/null +++ b/docs/source/ar/model_doc/bert-japanese.md @@ -0,0 +1,62 @@ +# BertJapanese +## نظرة عامة +نموذج BERT الذي تم تدريبه على النص الياباني. + +هناك نموذجان بأسلوبي توكينيزيشن مختلفين: + +- توكينيزيشن باستخدام MeCab وWordPiece. يتطلب هذا بعض الاعتماديات الإضافية، [fugashi](https://github.com/polm/fugashi) وهو عبارة عن ملف تعريف ارتباط حول [MeCab](https://taku910.github.io/mecab/). + +- توكينيزيشن إلى أحرف. + +لاستخدام *MecabTokenizer*، يجب عليك تثبيت `pip install transformers ["ja"]` (أو `pip install -e . ["ja"]` إذا كنت تقوم بالتثبيت من المصدر) لتثبيت الاعتماديات. + +راجع [التفاصيل على مستودع cl-tohoku](https://github.com/cl-tohoku/bert-japanese). + +مثال على استخدام نموذج مع توكينيزيشن MeCab وWordPiece: + +```python +>>> import torch +>>> from transformers import AutoModel, AutoTokenizer + +>>> bertjapanese = AutoModel.from_pretrained("cl-tohoku/bert-base-japanese") +>>> tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese") + +>>> ## إدخال النص الياباني +>>> line = "吾輩は猫である。" + +>>> inputs = tokenizer(line, return_tensors="pt") + +>>> print(tokenizer.decode(inputs["input_ids"][0])) +[CLS] 吾輩 は 猫 で ある 。 [SEP] + +>>> outputs = bertjapanese(**inputs) +``` + +مثال على استخدام نموذج مع توكينيزيشن الأحرف: + +```python +>>> bertjapanese = AutoModel.from_pretrained("cl-tohoku/bert-base-japanese-char") +>>> tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese-char") + +>>> ## إدخال النص الياباني +>>> line = "吾輩は猫である。" + +>>> inputs = tokenizer(line, return_tensors="pt") + +>>> print(tokenizer.decode(inputs["input_ids"][0])) +[CLS] 吾 輩 は 猫 で あ る 。 [SEP] + +>>> outputs = bertjapanese(**inputs) +``` + +تمت المساهمة بهذا النموذج من قبل [cl-tohoku](https://huggingface.co/cl-tohoku). + + + +هذا التنفيذ هو نفسه BERT، باستثناء طريقة التوكنيزيشن. راجع [توثيق BERT](bert) للحصول على معلومات مرجعية حول واجهة برمجة التطبيقات. + + + +## BertJapaneseTokenizer + +[[autodoc]] BertJapaneseTokenizer \ No newline at end of file From b90ac4fa1b55667514c85c65d61abcb71b3e3ba2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:12 +0300 Subject: [PATCH 367/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bert.md | 315 +++++++++++++++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100644 docs/source/ar/model_doc/bert.md diff --git a/docs/source/ar/model_doc/bert.md b/docs/source/ar/model_doc/bert.md new file mode 100644 index 00000000000000..73991cebf97f03 --- /dev/null +++ b/docs/source/ar/model_doc/bert.md @@ -0,0 +1,315 @@ +# BERT + +## نظرة عامة + +اقترح نموذج BERT في ورقة "BERT: معالجة تمهيدية لمحولات ثنائية الاتجاه عميقة لفهم اللغة" بواسطة Jacob Devlin و Ming-Wei Chang و Kenton Lee و Kristina Toutanova. وهو عبارة عن محول ثنائي الاتجاه معالج مسبقًا باستخدام مزيج من أهداف نمذجة اللغة المقنعة والتنبؤ بالجملة التالية على مجموعة بيانات كبيرة تتكون من مجموعة بيانات Toronto Book Corpus وويكيبيديا. + +ملخص الورقة هو ما يلي: + +> "نقدم نموذج تمثيل لغة جديد يسمى BERT، وهو اختصار لـ Bidirectional Encoder Representations from Transformers. وعلى عكس نماذج تمثيل اللغة الحديثة، صمم BERT لمعالجة التمثيلات ثنائية الاتجاه مسبقًا من النص غير الموسوم عن طريق الشرط المشترك على السياق الأيسر والأيمن في جميع الطبقات. ونتيجة لذلك، يمكن ضبط نموذج BERT مسبقًا باستخدام طبقة إخراج إضافية واحدة فقط لإنشاء نماذج رائدة في الصناعة لمجموعة واسعة من المهام، مثل الإجابة على الأسئلة والاستدلال اللغوي، دون تعديلات معمارية محددة للمهمة." + +> "إن BERT بسيط من الناحية المفاهيمية وقوي من الناحية التجريبية. فهو يحقق نتائج جديدة رائدة في الصناعة في إحدى عشرة مهمة لمعالجة اللغات الطبيعية، بما في ذلك رفع نتيجة اختبار GLUE إلى 80.5% (تحسن مطلق بنسبة 7.7%)، ودقة MultiNLI إلى 86.7% (تحسن مطلق بنسبة 4.6%)، ونتيجة F1 لاختبار SQuAD v1.1 للإجابة على الأسئلة إلى 93.2 (تحسن مطلق بنسبة 1.5 نقطة) ونتيجة F1 لاختبار SQuAD v2.0 إلى 83.1 (تحسن مطلق بنسبة 5.1 نقطة). " + +## نصائح الاستخدام + +- BERT هو نموذج مع تضمين موضع مطلق، لذلك يُنصح عادةً بإضافة مسافات إلى الإدخالات من اليمين بدلاً من اليسار. + +- تم تدريب BERT باستخدام أهداف نمذجة اللغة المقنعة (MLM) والتنبؤ بالجملة التالية (NSP). إنه فعال في التنبؤ بالرموز المقنعة وفي فهم اللغة الطبيعية بشكل عام، ولكنه ليس الأمثل لتوليد النصوص. + +- يقوم بتشويه الإدخالات باستخدام التعتيم العشوائي، وبشكل أكثر تحديدًا، أثناء المعالجة المسبقة، يتم تعتيم نسبة مئوية معينة من الرموز (عادة 15%) بالطرق التالية: + + - رمز قناع خاص باحتمالية 0.8 + - رمز عشوائي مختلف عن الرمز المعتم باحتمالية 0.1 + - نفس الرمز باحتمالية 0.1 + +- يجب على النموذج التنبؤ بالجملة الأصلية، ولكن لديه هدف ثانٍ: الإدخالات عبارة عن جملتين A و B (مع وجود رمز فصل بينهما). باحتمال 50%، تكون الجمل متتالية في المجموعة، وفي الـ 50% المتبقية لا تكون ذات صلة. يجب على النموذج التنبؤ بما إذا كانت الجمل متتالية أم لا. + +### استخدام الانتباه لمنتج النقاط المحدد (SDPA) + +يتضمن PyTorch مشغل اهتمام منتج النقاط المحدد الأصلي (SDPA) كجزء من `torch.nn.functional`. تشمل هذه الوظيفة عدة تنفيذات يمكن تطبيقها اعتمادًا على الإدخالات والأجهزة المستخدمة. راجع [الوثائق الرسمية](https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) أو صفحة [GPU Inference](https://huggingface.co/docs/transformers/main/en/perf_infer_gpu_one#pytorch-scaled-dot-product-attention) لمزيد من المعلومات. + +يتم استخدام SDPA بشكل افتراضي لـ `torch>=2.1.1` عندما يكون التنفيذ متاحًا، ولكن يمكنك أيضًا تعيين `attn_implementation="sdpa"` في `from_pretrained()` لطلب استخدام SDPA بشكل صريح. + +``` +from transformers import BertModel + +model = BertModel.from_pretrained("bert-base-uncased", torch_dtype=torch.float16, attn_implementation="sdpa") +... +``` + +للحصول على أفضل التحسينات، نوصي بتحميل النموذج بنصف الدقة (على سبيل المثال، `torch.float16` أو `torch.bfloat16`). + +على معيار محلي (A100-80GB، CPUx12، RAM 96.6GB، PyTorch 2.2.0، نظام التشغيل Ubuntu 22.04) مع `float16`، رأينا التحسينات التالية أثناء التدريب والاستدلال. + +#### التدريب + +| batch_size | seq_len | Time per batch (eager - s) | Time per batch (sdpa - s) | Speedup (%) | Eager peak mem (MB) | sdpa peak mem (MB) | Mem saving (%) | +| ---------- | ------ | ------------------------- | ------------------------ | ----------- | ------------------- | ------------------ | -------------- | +| 4 | 256 | 0.023 | 0.017 | 35.472 | 939.213 | 764.834 | 22.800 | +| 4 | 512 | 0.023 | 0.018 | 23.687 | 1970.447 | 1227.162 | 60.569 | +| 8 | 256 | 0.023 | 0.018 | 23.491 | 1594.295 | 1226.114 | 30.028 | +| 8 | 512 | 0.035 | 0.025 | 43.058 | 3629.401 | 2134.262 | 70.054 | +| 16 | 256 | 0.030 | 0.024 | 25.583 | 2874.426 | 2134.262 | 34.680 | +| 16 | 512 | 0.064 | 0.044 | 46.223 | 6964.659 | 3961.013 | 75.830 | + +#### الاستدلال + +| batch_size | seq_len | Per token latency eager (ms) | Per token latency SDPA (ms) | Speedup (%) | Mem eager (MB) | Mem BT (MB) | Mem saved (%) | +| ---------- | ------ | ---------------------------- | --------------------------- | ----------- | -------------- | ----------- | ------------- | +| 1 | 128 | 5.736 | 4.987 | 15.022 | 282.661 | 282.924 | -0.093 | +| 1 | 256 | 5.689 | 4.945 | 15.055 | 298.686 | 298.948 | -0.088 | +| 2 | 128 | 6.154 | 4.982 | 23.521 | 314.523 | 314.785 | -0.083 | +| 2 | 256 | 6.201 | 4.949 | 25.303 | 347.546 | 347.033 | 0.148 | +| 4 | 128 | 6.049 | 4.987 | 21.305 | 378.895 | 379.301 | -0.107 | +| 4 | 256 | 6.285 | 5.364 | 17.166 | 443.209 | 444.382 | -0.264 | +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (يشار إليها بالرمز 🌎) لمساعدتك على البدء مع BERT. إذا كنت مهتمًا بتقديم مورد لإضافته هنا، فيرجى فتح طلب سحب Pull Request وسنقوم بمراجعته! ويفضل أن يظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- منشور مدونة حول [تصنيف النصوص باستخدام BERT بلغة مختلفة](https://www.philschmid.de/bert-text-classification-in-a-different-language). +- دفتر ملاحظات حول [ضبط دقة BERT (وأصدقائه) لتصنيف النصوص متعدد التصنيفات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/BERT/Fine_tuning_BERT_(and_friends)_for_multi_label_text_classification.ipynb). +- دفتر ملاحظات حول كيفية [ضبط دقة BERT لتصنيف متعدد التصنيفات باستخدام PyTorch](https://colab.research.google.com/github/abhimishra91/transformers-tutorials/blob/master/transformers_multi_label_classification.ipynb). 🌎 +- دفتر ملاحظات حول كيفية [بدء تشغيل نموذج EncoderDecoder باستخدام BERT للتلخيص](https://colab.research.google.com/github/patrickvonplaten/notebooks/blob/master/BERT2BERT_for_CNN_Dailymail.ipynb). +- [`BertForSequenceClassification`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification.ipynb). +- [`TFBertForSequenceClassification`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/text-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification-tf.ipynb). +- [`FlaxBertForSequenceClassification`] مدعوم بواسطة [سكريبت مثال](https://github.com0/huggingface/transformers/tree/main/examples/flax/text-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification_flax.ipynb). +- دليل مهام تصنيف النصوص [Text classification task guide](../tasks/sequence_classification) + +- منشور مدونة حول كيفية [استخدام Hugging Face Transformers مع Keras: ضبط دقة BERT غير الإنجليزي للتعرف على الكيانات المسماة](https://www.philschmid.de/huggingface-transformers-keras-tf). +- دفتر ملاحظات حول [ضبط دقة BERT للتعرف على الكيانات المسماة](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/BERT/Custom_Named_Entity_Recognition_with_BERT_only_first_wordpiece.ipynb) باستخدام قطعة الكلمة الأولى فقط من كل كلمة في تسمية الكلمة أثناء عملية التجزئة. ولنشر تسمية الكلمة إلى جميع القطع، راجع [هذا الإصدار](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/BERT/Custom_Named_Entity_Recognition_with_BERT.ipynb) من دفتر الملاحظات بدلاً من ذلك. +- [`BertForTokenClassification`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/token-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification.ipynb). +- [`TFBertForTokenClassification`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/token-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification-tf.ipynb). +- [`FlaxBertForTokenClassification`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/flax/token-classification). +- فصل [تصنيف الرموز](https://huggingface.co/course/chapter7/2?fw=pt) في دورة 🤗 Hugging Face. +- دليل مهام تصنيف الرموز [Token classification task guide](../tasks/token_classification) + +- [`BertForMaskedLM`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#robertabertdistilbert-and-masked-language-modeling) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). +- [`TFBertForMaskedLM`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_mlmpy) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). +- [`FlaxBertForMaskedLM`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#masked-language-modeling) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/masked_language_modeling_flax.ipynb). +- فصل [نمذجة اللغة المقنعة](https://huggingface.co/course/chapter7/3?fw=pt) في دورة 🤗 Hugging Face. +- دليل مهام نمذجة اللغة المقنعة [Masked language modeling task guide](../tasks/masked_language_modeling) + +- [`BertForQuestionAnswering`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb). +- [`TFBertForQuestionAnswering`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/question-answering) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering-tf.ipynb). +- [`FlaxBertForQuestionAnswering`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/flax/question-answering). +- فصل [الإجابة على الأسئلة](https://huggingface.co/course/chapter7/7?fw=pt) في دورة 🤗 Hugging Face. +- دليل مهام الإجابة على الأسئلة [Question answering task guide](../tasks/question_answering) + +**الاختيار من متعدد** + +- [`BertForMultipleChoice`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/multiple-choice) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice.ipynb). +- [`TFBertForMultipleChoice`] مدعوم بواسطة [سكريبت مثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/multiple-choice) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice-tf.ipynb). +- دليل مهام الاختيار من متعدد [Multiple choice task guide](../tasks/multiple_choice) + +⚡️ **الاستنتاج** + +- منشور مدونة حول كيفية [تسريع استنتاج BERT باستخدام Hugging Face Transformers وAWS Inferentia](https://huggingface.co/blog/bert-inferentia-sagemaker). +- منشور مدونة حول كيفية [تسريع استنتاج BERT باستخدام DeepSpeed-Inference على وحدات معالجة الرسوميات GPU](https://www.philschmid.de/bert-deepspeed-inference). + +⚙️ **التدريب المسبق** + +- منشور مدونة حول [التدريب المسبق لـ BERT باستخدام Hugging Face Transformers وHabana Gaudi](https://www.philschmid.de/pre-training-bert-habana). + +🚀 **النشر** + +- منشور مدونة حول كيفية [تحويل Transformers إلى ONNX باستخدام Hugging Face Optimum](https://www.philschmid.de/convert-transformers-to-onnx). +- منشور مدونة حول كيفية [إعداد بيئة التعلم العميق لـ Hugging Face Transformers مع Habana Gaudi على AWS](https://www.philschmid.de/getting-started-habana-gaudi#conclusion). +- منشور مدونة حول [التوسيع التلقائي لـ BERT باستخدام Hugging Face Transformers وAmazon SageMaker ونماذج Terraform](https://www.philschmid.de/terraform-huggingface-amazon-sagemaker-advanced). +- منشور مدونة حول [تطبيق BERT بدون خادم باستخدام HuggingFace وAWS Lambda وDocker](https://www.philschmid.de/serverless-bert-with-huggingface-aws-lambda-docker). +- منشور مدونة حول [ضبط دقة BERT باستخدام Hugging Face Transformers وAmazon SageMaker وTraining Compiler](https://www.philschmid.de/huggingface-amazon-sagemaker-training-compiler). +- منشور مدونة حول [التقطير المعرفي المحدد للمهمة لـ BERT باستخدام Transformers وAmazon SageMaker](https://www.philschmid.de/knowledge-distillation-bert-transformers). + +## BertConfig + +[[autodoc]] BertConfig + +- all + +## BertTokenizer + +[[autodoc]] BertTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + + + + + +## BertTokenizerFast + +[[autodoc]] BertTokenizerFast + + + + + +## TFBertTokenizer + +[[autodoc]] TFBertTokenizer + + + + + +## المخرجات الخاصة بـ Bert + +[[autodoc]] models.bert.modeling_bert.BertForPreTrainingOutput + +[[autodoc]] models.bert.modeling_tf_bert.TFBertForPreTrainingOutput + +[[autodoc]] models.bert.modeling_flax_bert.FlaxBertForPreTrainingOutput + + + + + +## BertModel + +[[autodoc]] BertModel + +- forward + +## BertForPreTraining + +[[autodoc]] BertForPreTraining + +- forward + +## BertLMHeadModel + +[[autodoc]] BertLMHeadModel + +- forward + +## BertForMaskedLM + +[[autodoc]] BertForMaskedLM + +- forward + +## BertForNextSentencePrediction + +[[autodoc]] BertForNextSentencePrediction + +- forward + +## BertForSequenceClassification + +[[autodoc]] BertForSequenceClassification + +- forward + +## BertForMultipleChoice + +[[autodoc]] BertForMultipleChoice + +- forward + +## BertForTokenClassification + +[[autodoc]] BertForTokenClassification + +- forward + +## BertForQuestionAnswering + +[[autodoc]] BertForQuestionAnswering + +- forward + + + + + +## TFBertModel + +[[autodoc]] TFBertModel + +- call + +## TFBertForPreTraining + +[[autodoc]] TFBertForPreTraining + +- call + +## TFBertModelLMHeadModel + +[[autodoc]] TFBertLMHeadModel + +- call + +## TFBertForMaskedLM + +[[autodoc]] TFBertForMaskedLM + +- call + +## TFBertForNextSentencePrediction + +[[autodoc]] TFBertForNextSentencePrediction + +- call + +## TFBertForSequenceClassification + +[[autodoc]] TFBertForSequenceClassification + +- call + +## TFBertForMultipleChoice + +[[autodoc]] TFBertForMultipleChoice + +- call + +## TFBertForTokenClassification + +[[autodoc]] TFBertForTokenClassification + +- call + +## TFBertForQuestionAnswering + +[[autodoc]] TFBertForQuestionAnswering + +- call + + + + + +## FlaxBertModel + +[[autodoc]] FlaxBertModel + +- __call__ + +## FlaxBertForPreTraining + +[[autodoc]] FlaxBertForPreTraining + +- __call__ +## FlaxBertForCausalLM +نموذج FlaxBertForCausalLM هو نموذج لغة قائم على تحويل فلامنغوBERT الذي تم تدريبه على التنبؤ بالكلمة التالية في جملة ما. يمكن استخدامه لتوليد النصوص أو لإكمال الجمل بشكل تلقائي. يتم تدريب النموذج على مجموعة كبيرة من النصوص غير الموسومة، مما يمكنه من فهم سياق اللغة والتنبؤ بالكلمات التالية في الجملة. + +## FlaxBertForMaskedLM +يعد FlaxBertForMaskedLM نموذجًا للغة يستخدم بنية BERT الشهيرة. تم تدريبه على مهمة لغة Masked LM، والتي تتضمن التنبؤ بالكلمات الناقصة أو "المقنعة" في الجملة. يمكن استخدام هذا النموذج في مجموعة متنوعة من مهام معالجة اللغة الطبيعية، مثل فهم اللغة الطبيعية، والتصنيف النصي، واسترجاع المعلومات. + +## FlaxBertForNextSentencePrediction +FlaxBertForNextSentencePrediction هو نموذج تعلم عميق مصمم للتنبؤ بما إذا كانت جملتين متتاليتين تشكلان جملة متماسكة منطقيًا. إنه يعتمد على بنية BERT الشهيرة، والتي تم تدريبها على كميات هائلة من البيانات النصية. يمكن استخدام هذا النموذج في تطبيقات مثل فهم اللغة الطبيعية، وتحليل المشاعر، وتصنيف النصوص. + +## FlaxBertForSequenceClassification +FlaxBertForSequenceClassification هو نموذج تعلم آلي مصمم لتصنيف التسلسلات أو الجمل النصية إلى فئات أو تسميات محددة. يعتمد على بنية BERT الشهيرة، والتي تم تدريبها على كميات كبيرة من النصوص غير الموسومة. يمكن استخدام هذا النموذج في مجموعة متنوعة من مهام معالجة اللغة الطبيعية، مثل تصنيف المشاعر، وتصنيف الموضوعات، وتحديد القصد. + +## FlaxBertForMultipleChoice +FlaxBertForMultipleChoice هو نموذج تعلم آلي مصمم للإجابة على أسئلة الاختيار من متعدد. إنه يعتمد على بنية BERT الشهيرة، والتي تم تدريبها على فهم اللغة الطبيعية ومعالجة النصوص المعقدة. يمكن للنموذج تحليل السياق والمحتوى في السؤال والخيارات، وجعل التنبؤات الدقيقة. + +## FlaxBertForTokenClassification +FlaxBertForTokenClassification هو نموذج تعلم آلي قوي مصمم لتصنيف الرموز أو الكلمات في النص إلى فئات أو تسميات محددة. يمكن أن يكون هذا التصنيف على مستوى الكلمة، مثل تسمية الأجزاء النحوية أو تسمية الكيانات المسماة، أو على مستوى الرمز، مثل تصنيف الرموز حسب نوعها أو وظيفتها. + +## FlaxBertForQuestionAnswering +FlaxBertForQuestionAnswering هو نموذج تعلم آلي مصمم للإجابة على الأسئلة باستخدام سياق أو مستند نصي معين. يعتمد على بنية BERT الشهيرة، والتي تم تدريبها على فهم اللغة الطبيعية ومعالجة السياق المعقد. يمكن للنموذج استخراج الإجابات من النص، والتعامل مع الأسئلة المعقدة، وتوفير إجابات دقيقة ومتماسكة. \ No newline at end of file From c75862871c86dfbe356834b0612d4e4ec03d0e7d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:13 +0300 Subject: [PATCH 368/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bertweet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bertweet.md | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 docs/source/ar/model_doc/bertweet.md diff --git a/docs/source/ar/model_doc/bertweet.md b/docs/source/ar/model_doc/bertweet.md new file mode 100644 index 00000000000000..21aef28d1707ff --- /dev/null +++ b/docs/source/ar/model_doc/bertweet.md @@ -0,0 +1,48 @@ +# BERTweet + +## نظرة عامة + +اقترح نموذج BERTweet في ورقة بحثية بعنوان "BERTweet: A pre-trained language model for English Tweets" من قبل Dat Quoc Nguyen وThanh Vu وAnh Tuan Nguyen. + +ملخص الورقة البحثية هو كما يلي: + +*نحن نقدم BERTweet، وهو أول نموذج لغة كبير مُدرب مسبقًا ومُتاح للجمهور للتغريدات باللغة الإنجليزية. يتم تدريب نموذج BERTweet الخاص بنا، والذي يحتوي على نفس البنية المعمارية مثل BERT-base (Devlin et al.، 2019)، باستخدام إجراء التدريب المسبق RoBERTa (Liu et al.، 2019). تُظهر التجارب أن BERTweet يتفوق على خطي الأساس القويين RoBERTa-base وXLM-R-base (Conneau et al.، 2020)، مما يحقق نتائج أداء أفضل من النماذج السابقة المتقدمة في ثلاث مهام لمعالجة اللغات الطبيعية في التغريدات: تحليل القواعد، وتعريف الكيانات المسماة، وتصنيف النصوص.* + +تمت المساهمة بهذا النموذج من قبل [dqnguyen](https://huggingface.co/dqnguyen). يمكن العثور على الكود الأصلي [هنا](https://github.com/VinAIResearch/BERTweet). + +## مثال على الاستخدام + +```python +>>> import torch +>>> from transformers import AutoModel, AutoTokenizer + +>>> bertweet = AutoModel.from_pretrained("vinai/bertweet-base") + +>>> # For transformers v4.x+: +>>> tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base", use_fast=False) + +>>> # For transformers v3.x: +>>> # tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base") + +>>> # تغريدة الإدخال تم تطبيعها بالفعل! +>>> line = "SC has first two presumptive cases of coronavirus , DHEC confirms HTTPURL via @USER :cry:" + +>>> input_ids = torch.tensor([tokenizer.encode(line)]) + +>>> with torch.no_grad(): +... features = bertweet(input_ids) # مخرجات النماذج الآن عبارة عن توبلات + +>>> # باستخدام TensorFlow 2.0+: +>>> # from transformers import TFAutoModel +>>> # bertweet = TFAutoModel.from_pretrained("vinai/bertweet-base") +``` + + + +هذا التنفيذ مطابق لـ BERT، باستثناء طريقة التعامل مع الرموز. راجع [توثيق BERT](bert) للحصول على معلومات مرجعية حول واجهة برمجة التطبيقات. + + + +## BertweetTokenizer + +[[autodoc]] BertweetTokenizer \ No newline at end of file From f94666544c187502f8a89149ef17bce112b2df3e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:15 +0300 Subject: [PATCH 369/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bigbird=5Fpegasus.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bigbird_pegasus.md | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/bigbird_pegasus.md diff --git a/docs/source/ar/model_doc/bigbird_pegasus.md b/docs/source/ar/model_doc/bigbird_pegasus.md new file mode 100644 index 00000000000000..4c67d5c566635a --- /dev/null +++ b/docs/source/ar/model_doc/bigbird_pegasus.md @@ -0,0 +1,59 @@ +# BigBirdPegasus + +## نظرة عامة +تم اقتراح نموذج BigBird في ورقة "Big Bird: Transformers for Longer Sequences" بواسطة Zaheer وآخرون. BigBird هو محول قائم على الانتباه النادر الذي يوسع النماذج القائمة على المحول، مثل BERT، إلى تسلسلات أطول بكثير. بالإضافة إلى الانتباه النادر، يطبق BigBird أيضًا الانتباه العالمي والانتباه العشوائي على التسلسل المدخل. وقد ثبت نظريًا أن تطبيق الانتباه النادر والعالمي والعشوائي يقارب الانتباه الكامل، مع كونه أكثر كفاءة من الناحية الحسابية للتسلسلات الأطول. ونتيجة للقدرة على التعامل مع السياق الأطول، أظهر BigBird أداءً محسنًا في العديد من مهام معالجة اللغات الطبيعية للوثائق الطويلة، مثل الإجابة على الأسئلة والتلخيص، مقارنة بـ BERT أو RoBERTa. + +ملخص الورقة هو كما يلي: + +* تعد النماذج القائمة على المحولات، مثل BERT، أحد أكثر نماذج التعلم العميق نجاحًا في معالجة اللغات الطبيعية. للأسف، أحد قيودها الأساسية هو الاعتماد التربيعي (من حيث الذاكرة بشكل أساسي) على طول التسلسل بسبب آلية الانتباه الكامل الخاصة بها. ولعلاج ذلك، نقترح BigBird، وهي آلية انتباه نادرة تقلل هذا الاعتماد التربيعي إلى خطي. نُظهر أن BigBird هو محاكٍ تقريبي شامل لوظائف التسلسل وهو مكتمل من حيث تورينج، وبالتالي يحافظ على هذه الخصائص للنموذج الكامل للانتباه التربيعي. وفي أثناء ذلك، يكشف تحليلنا النظري عن بعض فوائد وجود رموز O(1) العالمية (مثل CLS)، والتي تحضر التسلسل بالكامل كجزء من آلية الانتباه النادرة. يمكن لانتباه النادر المقترح التعامل مع تسلسلات يصل طولها إلى 8x مما كان ممكنًا سابقًا باستخدام أجهزة مماثلة. ونتيجة للقدرة على التعامل مع السياق الأطول، يحسن BigBird الأداء بشكل كبير في العديد من مهام معالجة اللغات الطبيعية مثل الإجابة على الأسئلة والتلخيص. كما نقترح تطبيقات جديدة لبيانات الجينوم.* + +يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/bigbird). + +## نصائح الاستخدام + +- للحصول على شرح تفصيلي لكيفية عمل انتباه BigBird، راجع [منشور المدونة هذا](https://huggingface.co/blog/big-bird). +- يأتي BigBird بتنفيذين: **original_full** و **block_sparse**. بالنسبة لطول التسلسل < 1024، يُنصح باستخدام **original_full** حيث لا توجد فائدة من استخدام انتباه **block_sparse**. +- يستخدم الكود حاليًا حجم نافذة يبلغ 3 كتل وكتلتين عالميتين. +- يجب أن يكون طول التسلسل قابلاً للقسمة على حجم الكتلة. +- يدعم التنفيذ الحالي **ITC** فقط. +- لا يدعم التنفيذ الحالي **num_random_blocks = 0**. +- يستخدم BigBirdPegasus [PegasusTokenizer](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pegasus/tokenization_pegasus.py). +- BigBird هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بتعبئة المدخلات من اليمين بدلاً من اليسار. + +## الموارد + +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة التلخيص](../tasks/summarization) + +## BigBirdPegasusConfig + +[[autodoc]] BigBirdPegasusConfig +- all + +## BigBirdPegasusModel + +[[autodoc]] BigBirdPegasusModel +- forword + +## BigBirdPegasusForConditionalGeneration + +[[autodoc]] BigBirdPegasusForConditionalGeneration +- forword + +## BigBirdPegasusForSequenceClassification + +[[autodoc]] BigBirdPegasusForSequenceClassification +- forword + +## BigBirdPegasusForQuestionAnswering + +[[autodoc]] BigBirdPegasusForQuestionAnswering +- forword + +## BigBirdPegasusForCausalLM + +[[autodoc]] BigBirdPegasusForCausalLM +- forword \ No newline at end of file From 9ddb1e241c5a9fc14b9ed68fe6320a01c4dffd6b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:17 +0300 Subject: [PATCH 370/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/big=5Fbird.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/big_bird.md | 158 +++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 docs/source/ar/model_doc/big_bird.md diff --git a/docs/source/ar/model_doc/big_bird.md b/docs/source/ar/model_doc/big_bird.md new file mode 100644 index 00000000000000..8047dcb5e7f15b --- /dev/null +++ b/docs/source/ar/model_doc/big_bird.md @@ -0,0 +1,158 @@ +# BigBird + +## نظرة عامة +تم اقتراح نموذج BigBird في ورقة "Big Bird: Transformers for Longer Sequences" بواسطة Zaheer وآخرون. BigBird هو محول يعتمد على الانتباه النادر الذي يوسع النماذج القائمة على المحول، مثل BERT، إلى تسلسلات أطول بكثير. بالإضافة إلى الانتباه النادر، يطبق BigBird أيضًا الانتباه العالمي والانتباه العشوائي على التسلسل المدخل. وقد ثبت نظريًا أن تطبيق الانتباه النادر والعالمي والعشوائي يقارب الانتباه الكامل، مع كونه أكثر كفاءة من الناحية الحسابية للتسلسلات الأطول. وكنتيجة لقدرة BigBird على التعامل مع السياق الأطول، فقد أظهر أداءً محسنًا في العديد من مهام معالجة اللغات الطبيعية للوثائق الطويلة، مثل الإجابة على الأسئلة والتلخيص، مقارنةً بـ BERT أو RoBERTa. + +ملخص الورقة هو كما يلي: + +* "تعد النماذج القائمة على المحولات، مثل BERT، أحد أكثر نماذج التعلم العميق نجاحًا في معالجة اللغات الطبيعية. ولكن أحد قيودها الأساسية هو الاعتماد التربيعي (بشكل رئيسي من حيث الذاكرة) على طول التسلسل بسبب آلية الانتباه الكامل الخاصة بها. ولعلاج ذلك، نقترح BigBird، وهي آلية انتباه نادرة تقلل هذا الاعتماد التربيعي إلى الاعتماد الخطي. ونظهر أن BigBird هو محاكٍ تقريبي عالمي لوظائف التسلسل وهو مكتمل من الناحية النظرية، وبالتالي يحافظ على هذه الخصائص للنموذج الكامل ذو الاعتماد التربيعي. وفي أثناء ذلك، يكشف تحليلنا النظري بعض فوائد وجود رموز عالمية O(1) (مثل CLS)، والتي تحضر التسلسل بالكامل كجزء من آلية الانتباه النادرة. ويمكن لآلية الانتباه النادرة التعامل مع تسلسلات يصل طولها إلى 8 مرات مما كان ممكنًا سابقًا باستخدام أجهزة مماثلة. وكنتيجة لقدرة BigBird على التعامل مع السياق الأطول، فإنه يحسن الأداء بشكل كبير في العديد من مهام معالجة اللغات الطبيعية مثل الإجابة على الأسئلة والتلخيص. كما نقترح تطبيقات جديدة على بيانات الجينوم". + +تمت المساهمة بهذا النموذج بواسطة [vasudevgupta]. يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/bigbird). + +## نصائح الاستخدام + +- للحصول على شرح تفصيلي لكيفية عمل انتباه BigBird، راجع [منشور المدونة هذا](https://huggingface.co/blog/big-bird). +- يأتي BigBird بتنفيذين: **original_full** و **block_sparse**. بالنسبة لطول التسلسل < 1024، يُنصح باستخدام **original_full** حيث لا توجد فائدة من استخدام انتباه **block_sparse**. +- يستخدم الكود حاليًا حجم نافذة مكون من 3 كتل و2 كتل عالمية. +- يجب أن يكون طول التسلسل قابلاً للقسمة على حجم الكتلة. +- يدعم التنفيذ الحالي فقط **ITC**. +- لا يدعم التنفيذ الحالي **num_random_blocks = 0** +- BigBird هو نموذج مع تضمين موضع مطلق، لذلك يُنصح عادةً بإضافة حشو إلى المدخلات من اليمين بدلاً من اليسار. + +## الموارد + +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المعقدة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## BigBirdConfig + +[[autodoc]] BigBirdConfig + +## BigBirdTokenizer + +[[autodoc]] BigBirdTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## BigBirdTokenizerFast + +[[autodoc]] BigBirdTokenizerFast + +## المخرجات الخاصة بـ BigBird + +[[autodoc]] models.big_bird.modeling_big_bird.BigBirdForPreTrainingOutput + + + + + +## BigBirdModel + +[[autodoc]] BigBirdModel + +- forward + +## BigBirdForPreTraining + +[[autodoc]] BigBirdForPreTraining + +- forward + +## BigBirdForCausalLM + +[[autodoc]] BigBirdForCausalLM + +- forward + +## BigBirdForMaskedLM + +[[autodoc]] BigBirdForMaskedLM + +- forward + +## BigBirdForSequenceClassification + +[[autodoc]] BigBirdForSequenceClassification + +- forward + +## BigBirdForMultipleChoice + +[[autodoc]] BigBirdForMultipleChoice + +- forward + +## BigBirdForTokenClassification + +[[autodoc]] BigBirdForTokenClassification + +- forward + +## BigBirdForQuestionAnswering + +[[autodoc]] BigBirdForQuestionAnswering + +- forward + + + + + +## FlaxBigBirdModel + +[[autodoc]] FlaxBigBirdModel + +- __call__ + +## FlaxBigBirdForPreTraining + +[[autodoc]] FlaxBigBirdForPreTraining + +- __call__ + +## FlaxBigBirdForCausalLM + +[[autodoc]] FlaxBigBirdForCausalLM + +- __call__ + +## FlaxBigBirdForMaskedLM + +[[autodoc]] FlaxBigBirdForMaskedLM + +- __call__ + +## FlaxBigBirdForSequenceClassification + +[[autodoc]] FlaxBigBirdForSequenceClassification + +- __call__ + +## FlaxBigBirdForMultipleChoice + +[[autodoc]] FlaxBigBirdForMultipleChoice + +- __call__ + +## FlaxBigBirdForTokenClassification + +[[autodoc]] FlaxBigBirdForTokenClassification + +- __call__ + +## FlaxBigBirdForQuestionAnswering + +[[autodoc]] FlaxBigBirdForQuestionAnswering + +- __call__ + + + + \ No newline at end of file From 90683a0f156b6a0442c6f056ff8f1f3d9b63caf8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:19 +0300 Subject: [PATCH 371/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/align.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/align.md | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/source/ar/model_doc/align.md diff --git a/docs/source/ar/model_doc/align.md b/docs/source/ar/model_doc/align.md new file mode 100644 index 00000000000000..351a01b09df8b4 --- /dev/null +++ b/docs/source/ar/model_doc/align.md @@ -0,0 +1,42 @@ +# ALIGN + +## نظرة عامة +تم اقتراح نموذج ALIGN في ورقة "Scaling Up Visual and Vision-Language Representation Learning With Noisy Text Supervision" من قبل Chao Jia و Yinfei Yang و Ye Xia و Yi-Ting Chen و Zarana Parekh و Hieu Pham و Quoc V. Le و Yunhsuan Sung و Zhen Li و Tom Duerig. ALIGN هو نموذج متعدد الوسائط للرؤية واللغة. يمكن استخدامه لمقارنة الصور والنصوص وللتصنيف الصوري بدون الإشراف. يتميز ALIGN ببنية مزدوجة الترميز مع EfficientNet كمحلل رؤية و BERT كمحلل نصوص، ويتعلم محاذاة التمثيلات البصرية والنصية باستخدام التعلم التمييزي. على عكس الأعمال السابقة، يستفيد ALIGN من مجموعة بيانات ضخمة ومليئة بالضوضاء، ويبين أن حجم المجموعة يمكن أن يستخدم لتحقيق تمثيلات SOTA مع وصفة بسيطة. + +المقتطف من الورقة هو ما يلي: + +*أصبحت التمثيلات المُدربة مسبقًا مهمة للغاية للعديد من مهام معالجة اللغة الطبيعية والإدراك. بينما انتقل تعلم التمثيل في NLP إلى التدريب على النص الخام دون علامات بشرية، لا تزال التمثيلات البصرية واللغوية تعتمد اعتمادًا كبيرًا على مجموعات بيانات التدريب التي تم إنشاؤها بعناية والتي تكون مكلفة أو تتطلب معرفة متخصصة. بالنسبة لتطبيقات الرؤية، يتم تعلم التمثيلات في الغالب باستخدام مجموعات بيانات ذات تسميات فئات صريحة مثل ImageNet أو OpenImages. بالنسبة للرؤية اللغوية، تتضمن مجموعات البيانات الشائعة مثل Conceptual Captions أو MSCOCO أو CLIP عملية جمع بيانات (وتنظيف) غير بسيطة. تحد عملية الإنشاء المكلفة هذه من حجم مجموعات البيانات وبالتالي تعوق توسيع نطاق النماذج المدربة. في هذه الورقة، نستفيد من مجموعة بيانات ضخمة وغير نظيفة تحتوي على أكثر من مليار زوج من نص بديل الصورة، تم الحصول عليها دون خطوات تصفية أو معالجة لاحقة مكلفة في مجموعة بيانات Conceptual Captions. تتعلم بنية مزدوجة بسيطة محاذاة التمثيلات البصرية واللغوية لأزواج الصور والنصوص باستخدام خسارة تمييزية. نُظهر أن حجم مجموعة البيانات الخاصة بنا يمكن أن يعوض عن الضوضاء التي بها ويؤدي إلى تمثيلات رائدة على مستوى الصناعة حتى مع مثل هذا المخطط التعليمي البسيط. يحقق تمثيلنا المرئي أداءً قويًا عند نقله إلى مهام التصنيف مثل ImageNet و VTAB. تمكن التمثيلات البصرية واللغوية المحاذاة التصنيف الصوري بدون إشراف، كما تحدد نتائج جديدة رائدة على مستوى الصناعة في معايير استرجاع الصور النصية Flickr30K و MSCOCO، حتى عند مقارنتها بنماذج أكثر تعقيدًا تعتمد على الانتباه المتقاطع. كما تمكن التمثيلات البحث متعدد الوسائط باستخدام استعلامات نصية واستعلامات نصية + صورة معقدة.* + +تمت المساهمة بهذا النموذج من قبل Alara Dirik. لم يتم إصدار الكود الأصلي، ويستند هذا التنفيذ إلى تنفيذ Kakao Brain استنادًا إلى الورقة الأصلية. + +## مثال على الاستخدام +يستخدم ALIGN EfficientNet للحصول على الميزات المرئية و BERT للحصول على ميزات النص. يتم بعد ذلك إسقاط كل من ميزات النص والميزات المرئية إلى مساحة كامنة ذات أبعاد متطابقة. يتم بعد ذلك استخدام حاصل الضرب النقطي بين الميزات الصورية والنصية المسقطة كدرجة تشابه. + +يغلف [`AlignProcessor`] [`EfficientNetImageProcessor`] و [`BertTokenizer`] في مثيل واحد لتشفير النص ومعالجة الصور مسبقًا. يوضح المثال التالي كيفية الحصول على درجات تشابه الصور والنصوص باستخدام [`AlignProcessor`] و [`AlignModel`]. + +## الموارد +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام ALIGN. + +- منشور مدونة حول [ALIGN ومجموعة بيانات COYO-700M](https://huggingface.co/blog/vit-align). +- عرض توضيحي للتصنيف الصوري بدون إشراف [demo](https://huggingface.co/spaces/adirik/ALIGN-zero-shot-image-classification). +- [بطاقة نموذج](https://huggingface.co/kakaobrain/align-base) لنموذج `kakaobrain/align-base`. + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه. يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## AlignConfig + +## AlignTextConfig + +## AlignVisionConfig + +## AlignProcessor + +## AlignModel + +- forward +- get_text_features +- get_image_features + +## AlignTextModel + +## AlignVisionModel \ No newline at end of file From e26da43b828ec44e473d5f6305d85e5389d1b182 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:20 +0300 Subject: [PATCH 372/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/altclip.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/altclip.md | 87 +++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 docs/source/ar/model_doc/altclip.md diff --git a/docs/source/ar/model_doc/altclip.md b/docs/source/ar/model_doc/altclip.md new file mode 100644 index 00000000000000..af166ea25ac782 --- /dev/null +++ b/docs/source/ar/model_doc/altclip.md @@ -0,0 +1,87 @@ +# AltCLIP + +## نظرة عامة +اقترح نموذج AltCLIP في "AltCLIP: تعديل مشفر اللغة في CLIP لقدرات لغوية موسعة" من قبل تشين زونغزهي، وليو جوان، وزانج بو-وين، واي فولونج، ويانج تشينجهونج، وو ليديل. AltCLIP (تعديل مشفر اللغة في CLIP) هو شبكة عصبية تم تدريبها على مجموعة متنوعة من أزواج الصور والنصوص والنصوص النصية. من خلال استبدال مشفر النص CLIP بمشفر نص متعدد اللغات XLM-R، يمكننا الحصول على أداء قريب جدًا من CLIP في جميع المهام تقريبًا، وتوسيع قدرات CLIP الأصلية مثل الفهم متعدد اللغات. + +المقتطف من الورقة هو ما يلي: + +في هذا العمل، نقدم طريقة بسيطة وفعالة من الناحية المفاهيمية لتدريب نموذج تمثيل متعدد الوسائط ثنائي اللغة قوي. بدءًا من نموذج التمثيل متعدد الوسائط المسبق التدريب CLIP الذي أصدرته OpenAI، قمنا بالتبديل بين مشفر النص الخاص به ومشفر نص متعدد اللغات مسبق التدريب XLM-R، ومواءمة تمثيلات اللغات والصور باستخدام مخطط تدريب مكون من مرحلتين يتكون من التعلم بواسطة المعلم والتعلم التمييزي. نحن نقيم طريقتنا من خلال تقييمات لمجموعة واسعة من المهام. نحدد أحدث أداء على مجموعة من المهام بما في ذلك ImageNet-CN، وFlicker30k- CN، وCOCO-CN. علاوة على ذلك، نحصل على أداء قريب جدًا من CLIP في جميع المهام تقريبًا، مما يشير إلى أنه يمكن للمرء ببساطة تغيير مشفر النص في CLIP لقدرات موسعة مثل الفهم متعدد اللغات. + +تمت المساهمة بهذا النموذج من قبل [jongjyh](https://huggingface.co/jongjyh). + +## نصائح الاستخدام ومثال + +استخدام AltCLIP مشابه جدًا لـ CLIP. الفرق بين CLIP هو مشفر النص. لاحظ أننا نستخدم اهتمامًا ثنائي الاتجاه بدلاً من الاهتمام العرضي ونأخذ الرمز [CLS] في XLM-R لتمثيل تضمين النص. + +AltCLIP هو نموذج متعدد الوسائط للرؤية واللغة. يمكن استخدامه لتشابه الصور والنص ولتصنيف الصور بدون إشراف. يستخدم AltCLIP محولًا مثل ViT لاستخراج الميزات المرئية ونموذج لغة ثنائي الاتجاه لاستخراج ميزات النص. ثم يتم إسقاط كل من ميزات النص والمرئيات إلى مساحة كامنة ذات أبعاد متطابقة. يتم بعد ذلك استخدام المنتج النقطي بين الصورة وميزات النص المسقطة كدرجة تشابه. + +لتغذية الصور إلى محول المشفر، يتم تقسيم كل صورة إلى تسلسل من التصحيح الثابت الحجم غير المتداخل، والذي يتم تضمينه خطيًا بعد ذلك. تتم إضافة رمز [CLS] ليكون بمثابة تمثيل لصورة كاملة. يضيف المؤلفون أيضًا تضمينات موضعية مطلقة، ويقومون بإطعام تسلسل المتجهات الناتج إلى محول مشفر قياسي. + +يمكن استخدام [`CLIPImageProcessor`] لإعادة تحجيم (أو إعادة تحجيم) الصور وتطبيعها للنموذج. + +يغلف [`AltCLIPProcessor`] [`CLIPImageProcessor`] و [`XLMRobertaTokenizer`] في مثيل واحد لترميز النص وإعداد الصور. يوضح المثال التالي كيفية الحصول على درجات تشابه الصور والنص باستخدام [`AltCLIPProcessor`] و [`AltCLIPModel`]. + +```python +>>> from PIL import Image +>>> import requests + +>>> from transformers import AltCLIPModel, AltCLIPProcessor + +>>> model = AltCLIPModel.from_pretrained("BAAI/AltCLIP") +>>> processor = AltCLIPProcessor.from_pretrained("BAA0/AltCLIP") + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True) + +>>> outputs = model(**inputs) +>>> logits_per_image = outputs.logits_per_image # هذه هي درجة تشابه الصورة والنص +>>> probs = logits_per_image.softmax(dim=1) # يمكننا أخذ softmax للحصول على احتمالات التسمية +``` + + + +يستند هذا النموذج إلى `CLIPModel`، استخدمه كما تستخدم CLIP [الأصلي](clip). + + + +## AltCLIPConfig + +[[autodoc]] AltCLIPConfig + +- from_text_vision_configs + +## AltCLIPTextConfig + +[[autodoc]] AltCLIPTextConfig + +## AltCLIPVisionConfig + +[[autodoc]] AltCLIPVisionConfig + +## AltCLIPProcessor + +[[autodoc]] AltCLIPProcessor + +## AltCLIPModel + +[[autodoc]] AltCLIPModel + +- forward + +- get_text_features + +- get_image_features + +## AltCLIPTextModel + +[[autodoc]] AltCLIPTextModel + +- forward + +## AltCLIPVisionModel + +[[autodoc]] AltCLIPVisionModel + +- forward \ No newline at end of file From ee62f3ed6c4854b463500842584cc05f84cf6687 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:22 +0300 Subject: [PATCH 373/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/audio-spectrogram-transformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../audio-spectrogram-transformer.md | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 docs/source/ar/model_doc/audio-spectrogram-transformer.md diff --git a/docs/source/ar/model_doc/audio-spectrogram-transformer.md b/docs/source/ar/model_doc/audio-spectrogram-transformer.md new file mode 100644 index 00000000000000..b678516818f011 --- /dev/null +++ b/docs/source/ar/model_doc/audio-spectrogram-transformer.md @@ -0,0 +1,82 @@ +# محول المخطط الطيفي الصوتي Audio Spectrogram Transformer + +## نظرة عامة + +اقترح نموذج محول المخطط الطيفي الصوتي في [AST: Audio Spectrogram Transformer](https://arxiv.org/abs/2104.01778) من قبل يوان غونغ، ويو-آن تشونغ، وجيمس جلاس. + +يطبق محول المخطط الطيفي الصوتي [محول الرؤية](vit) على الصوت، عن طريق تحويل الصوت إلى صورة (مخطط طيفي). ويحصل النموذج على نتائج متقدمة في تصنيف الصوت. + +الملخص من الورقة هو كما يلي: + +*في العقد الماضي، تم اعتماد الشبكات العصبية التلافيفية (CNNs) على نطاق واسع ككتلة بناء رئيسية لنماذج تصنيف الصوت من البداية إلى النهاية، والتي تهدف إلى تعلم خريطة مباشرة من المخططات الطيفية الصوتية إلى العلامات المقابلة. وللتقاط السياق العالمي طويل المدى بشكل أفضل، هناك اتجاه حديث يتمثل في إضافة آلية اهتمام ذاتي على رأس الشبكة العصبية التلافيفية، مما يشكل نموذج تهجين بين الشبكة العصبية التلافيفية والاهتمام. ومع ذلك، فمن غير الواضح ما إذا كان الاعتماد على الشبكة العصبية التلافيفية ضروريًا، وإذا كانت الشبكات العصبية التي تعتمد فقط على الاهتمام كافية للحصول على أداء جيد في تصنيف الصوت. في هذه الورقة، نجيب على هذا السؤال من خلال تقديم محول المخطط الطيفي الصوتي (AST)، وهو أول نموذج خالٍ من التلافيف وقائم على الاهتمام فقط لتصنيف الصوت. نقوم بتقييم AST على معايير تصنيف الصوت المختلفة، حيث يحقق نتائج جديدة متقدمة تبلغ 0.485 mAP على AudioSet، و95.6% دقة على ESC-50، و98.1% دقة على Speech Commands V2.* + +drawing + + بنية محول المخطط الطيفي الصوتي. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/YuanGongND/ast). + +## نصائح الاستخدام + +- عند ضبط نموذج محول المخطط الطيفي الصوتي (AST) على مجموعة البيانات الخاصة بك، يوصى بالاهتمام بتطبيع الإدخال (للتأكد من أن الإدخال له متوسط 0 وانحراف معياري 0.5). ويتولى [`ASTFeatureExtractor`] العناية بهذا. لاحظ أنه يستخدم متوسط ​​ومجموعة AudioSet بشكل افتراضي. يمكنك التحقق من [`ast/src/get_norm_stats.py`](https://github.com/YuanGongND/ast/blob/master/src/get_norm_stats.py) لمعرفة كيفية حساب المؤلفين للإحصاءات لمجموعة بيانات أسفل البث. + +- لاحظ أن AST يحتاج إلى معدل تعلم منخفض (يستخدم المؤلفون معدل تعلم أقل بعشر مرات مقارنة بنموذج الشبكة العصبية التلافيفية الذي اقترحوه في ورقة [PSLA](https://arxiv.org/abs/2102.01243)) ويصل إلى التقارب بسرعة، لذا يرجى البحث عن معدل تعلم مناسب ومخطط جدولة معدل التعلم لمهمتك. + +### استخدام الانتباه المنتج المرجح بالبقعة (SDPA) + +تتضمن PyTorch مشغل اهتمام منتج مرجح بالبقعة (SDPA) أصلي كجزء من `torch.nn.functional`. تشمل هذه الوظيفة عدة تطبيقات يمكن تطبيقها اعتمادًا على الإدخالات والأجهزة المستخدمة. راجع [الوثائق الرسمية](https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) أو صفحة [GPU Inference](https://huggingface.co/docs/transformers/main/en/perf_infer_gpu_one#pytorch-scaled-dot-product-attention) لمزيد من المعلومات. + +يتم استخدام SDPA بشكل افتراضي لـ `torch>=2.1.1` عندما يكون التنفيذ متاحًا، ولكن يمكنك أيضًا تعيين `attn_implementation="sdpa"` في `from_pretrained()` لطلب استخدام SDPA بشكل صريح. + +``` +from transformers import ASTForAudioClassification +model = ASTForAudioClassification.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593", attn_implementation="sdpa", torch_dtype=torch.float16) +... +``` + +للحصول على أفضل التحسينات، نوصي بتحميل النموذج بنصف الدقة (على سبيل المثال `torch.float16` أو `torch.bfloat16`). + +في معيار محلي (A100-40GB، PyTorch 2.3.0، OS Ubuntu 22.04) مع `float32` ونموذج `MIT/ast-finetuned-audioset-10-10-0.4593`، رأينا التحسينات التالية أثناء الاستدلال. + +| حجم الدفعة | متوسط ​​وقت الاستدلال (ميلي ثانية)، وضع التقييم | متوسط ​​وقت الاستدلال (ميلي ثانية)، نموذج SDPA | تسريع، SDPA / Eager (x) | +|--------------|-------------------------------------------|-------------------------------------------|------------------------------| +| 1 | 27 | 6 | 4.5 | +| 2 | 12 | 6 | 2 | +| 4 | 21 | 8 | 2.62 | +| 8 | 40 | 14 | 2.86 | + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام محول المخطط الطيفي الصوتي. + + + +- يمكن العثور على دفتر ملاحظات يوضح الاستدلال باستخدام AST لتصنيف الصوت [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/AST). +- يتم دعم [`ASTForAudioClassification`] بواسطة [نص برمجي توضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/audio-classification) و [دفتر ملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/audio_classification.ipynb). +- راجع أيضًا: [تصنيف الصوت](../tasks/audio_classification). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## ASTConfig + +[[autodoc]] ASTConfig + +## ASTFeatureExtractor + +[[autodoc]] ASTFeatureExtractor + +- __call__ + +## ASTModel + +[[autodoc]] ASTModel + +- forward + +## ASTForAudioClassification + +[[autodoc]] ASTForAudioClassification + +- forward \ No newline at end of file From 4884c27a1d0af8be05f7886c1db9d67dd82801f0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:24 +0300 Subject: [PATCH 374/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/auto.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/auto.md | 359 +++++++++++++++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 docs/source/ar/model_doc/auto.md diff --git a/docs/source/ar/model_doc/auto.md b/docs/source/ar/model_doc/auto.md new file mode 100644 index 00000000000000..810169a13856f7 --- /dev/null +++ b/docs/source/ar/model_doc/auto.md @@ -0,0 +1,359 @@ +# الفئات التلقائية + +في العديد من الحالات، يمكن تخمين البنية التي تريد استخدامها من اسم أو مسار النموذج المُدرب مسبقًا الذي تقوم بتمريره إلى طريقة `from_pretrained()`. والفئات التلقائية موجودة للقيام بهذه المهمة نيابة عنك، بحيث يمكنك استرجاع النموذج ذي الصلة تلقائيًا بناءً على اسم/مسار الأوزان المُدربة مسبقًا/الإعدادات/المفردات. + +إن إنشاء مثيل واحد من [`AutoConfig`]`[`، و [`AutoModel`]`[`، و [`AutoTokenizer`]`[` سيقوم مباشرة بإنشاء فئة البنية ذات الصلة. على سبيل المثال: + +```python +model = AutoModel.from_pretrained("google-bert/bert-base-cased") +``` + +سيقوم بإنشاء نموذج يكون مثالاً لفئة [`BertModel`]`[`. + +هناك فئة واحدة من `AutoModel` لكل مهمة، ولكل منصة خلفية (PyTorch أو TensorFlow أو Flax). + +## توسيع الفئات التلقائية + +تمتلك كل فئة تلقائية طريقة لتوسيع نطاقها باستخدام الفئات المخصصة الخاصة بك. على سبيل المثال، إذا قمت بتعريف فئة مخصصة للنموذج باسم `NewModel`، فتأكد من وجود `NewModelConfig`، ثم يمكنك إضافة تلك الفئات إلى الفئات التلقائية على النحو التالي: + +```python +from transformers import AutoConfig, AutoModel + +AutoConfig.register("new-model", NewModelConfig) +AutoModel.register(NewModelConfig, NewModel) +``` + +بعد ذلك، ستتمكن من استخدام الفئات التلقائية كما تفعل عادة! + + + +إذا كانت فئة `NewModelConfig` هي فئة فرعية من [`~transformers.PretrainedConfig`]`[`، فتأكد من تعيين سمة `model_type` الخاصة بها إلى نفس المفتاح الذي تستخدمه عند تسجيل الإعدادات (هنا `"new-model"`). + +وبالمثل، إذا كانت فئة `NewModel` هي فئة فرعية من [`PreTrainedModel`]`[`، فتأكد من تعيين سمة `config_class` الخاصة بها إلى نفس الفئة التي تستخدمها عند تسجيل النموذج (هنا `NewModelConfig`). + + + +## AutoConfig + +[[autodoc]] AutoConfig + +## AutoTokenizer + +[[autodoc]] AutoTokenizer + +## AutoFeatureExtractor + +[[autodoc]] AutoFeatureExtractor + +## AutoImageProcessor + +[[autodoc]] AutoImageProcessor + +## AutoProcessor + +[[autodoc]] AutoProcessor + +## فئات النماذج العامة + +تتوفر الفئات التلقائية التالية لإنشاء فئة نموذج أساسي بدون رأس محدد. + +### AutoModel + +[[autodoc]] AutoModel + +### TFAutoModel + +[[autodoc]] TFAutoModel + +### FlaxAutoModel + +[[autodoc]] FlaxAutoModel + +## فئات التدريب التلقائي العامة + +تتوفر الفئات التلقائية التالية لإنشاء نموذج برأس تدريب تلقائي. + +### AutoModelForPreTraining + +[[autodoc]] AutoModelForPreTraining + +### TFAutoModelForPreTraining + +[[autodoc]] TFAutoModelForPreTraining + +### FlaxAutoModelForPreTraining + +[[autodoc]] FlaxAutoModelForPreTraining + +## معالجة اللغات الطبيعية + +تتوفر الفئات التلقائية التالية لمهام معالجة اللغات الطبيعية التالية. + +### AutoModelForCausalLM + +[[autodoc]] AutoModelForCausalLM + +### TFAutoModelForCausalLM + +[[autodoc]] TFAutoModelForCausalLM + +### FlaxAutoModelForCausalLM + +[[autodoc]] FlaxAutoModelForCausalLM + +### AutoModelForMaskedLM + +[[autodoc]] AutoModelForMaskedLM + +### TFAutoModelForMaskedLM + +[[autodoc]] TFAutoModelForMaskedLM + +### FlaxAutoModelForMaskedLM + +[[autodoc]] FlaxAutoModelForMaskedLM + +### AutoModelForMaskGeneration + +[[autodoc]] AutoModelForMaskGeneration + +### TFAutoModelForMaskGeneration + +[[autodoc]] TFAutoModelForMaskGeneration + +### AutoModelForSeq2SeqLM + +[[autodoc]] AutoModelForSeq2SeqLM + +### TFAutoModelForSeq2SeqLM + +[[autodoc]] TFAutoModelForSeq2SeqLM + +### FlaxAutoModelForSeq2SeqLM + +[[autodoc]] FlaxAutoModelForSeq2SeqLM + +### AutoModelForSequenceClassification + +[[autodoc]] AutoModelForSequenceClassification + +### TFAutoModelForSequenceClassification + +[[autodoc]] TFAutoModelForSequenceClassification + +### FlaxAutoModelForSequenceClassification + +[[autodoc]] FlaxAutoModelForSequenceClassification + +### AutoModelForMultipleChoice + +[[autodoc]] AutoModelForMultipleChoice + +### TFAutoModelForMultipleChoice + +[[autodoc]] TFAutoModelForMultipleChoice + +### FlaxAutoModelForMultipleChoice + +[[autodoc]] FlaxAutoModelForMultipleChoice + +### AutoModelForNextSentencePrediction + + +[[autodoc]] AutoModelForNextSentencePrediction + +### TFAutoModelForNextSentencePrediction + +[[autodoc]] TFAutoModelForNextSentencePrediction + +### FlaxAutoModelForNextSentencePrediction + +[[autodoc]] FlaxAutoModelForNextSentencePrediction + +### AutoModelForTokenClassification + +[[autodoc]] AutoModelForTokenClassification + +### TFAutoModelForTokenClassification + +[[autodoc]] TFAutoModelForTokenClassification + +### FlaxAutoModelForTokenClassification + +[[autodoc]] FlaxAutoModelForTokenClassification + +### AutoModelForQuestionAnswering + +[[autodoc]] AutoModelForQuestionAnswering + +### TFAutoModelForQuestionAnswering + +[[autodoc]] TFAutoModelForQuestionAnswering + +### FlaxAutoModelForQuestionAnswering + +[[autodoc]] FlaxAutoModelForQuestionAnswering + +### AutoModelForTextEncoding + +[[autodoc]] AutoModelForTextEncoding + +### TFAutoModelForTextEncoding + +[[autodoc]] TFAutoModelForTextEncoding + +## رؤية الكمبيوتر + +تتوفر الفئات التلقائية التالية لمهام رؤية الكمبيوتر التالية. + +### AutoModelForDepthEstimation + +[[autodoc]] AutoModelForDepthEstimation + +### AutoModelForImageClassification + +[[autodoc]] AutoModelForImageClassification + +### TFAutoModelForImageClassification + +[[autodoc]] TFAutoModelForImageClassification + +### FlaxAutoModelForImageClassification + +[[autodoc]] FlaxAutoModelForImageClassification + +### AutoModelForVideoClassification + +[[autodoc]] AutoModelForVideoClassification + +### AutoModelForKeypointDetection + +[[autodoc]] AutoModelForKeypointDetection + +### AutoModelForMaskedImageModeling + +[[autodoc]] AutoModelForMaskedImageModeling + +### TFAutoModelForMaskedImageModeling + +[[autodoc]] TFAutoModelForMaskedImageModeling + +### AutoModelForObjectDetection + +[[autodoc]] AutoModelForObjectDetection + +### AutoModelForImageSegmentation + +[[autodoc]] AutoModelForImageSegmentation + +### AutoModelForImageToImage + +[[autodoc]] AutoModelForImageToImage + +### AutoModelForSemanticSegmentation + +[[autodoc]] AutoModelForSemanticSegmentation + +### TFAutoModelForSemanticSegmentation + +[[autodoc]] TFAutoModelForSemanticSegmentation + +### AutoModelForInstanceSegmentation + +[[autodoc]] AutoModelForInstanceSegmentation + +### AutoModelForUniversalSegmentation + +[[autodoc]] AutoModelForUniversalSegmentation + +### AutoModelForZeroShotImageClassification + +[[autodoc]] AutoModelForZeroShotImageClassification + +### TFAutoModelForZeroShotImageClassification + +[[autodoc]] TFAutoModelForZeroShotImageClassification + +### AutoModelForZeroShotObjectDetection + +[[autodoc]] AutoModelForZeroShotObjectDetection + +## الصوت + +تتوفر الفئات التلقائية التالية لمهام الصوت التالية. + +### AutoModelForAudioClassification + +[[autodoc]] AutoModelForAudioClassification + +### AutoModelForAudioFrameClassification + +[[autodoc]] TFAutoModelForAudioClassification + +### TFAutoModelForAudioFrameClassification + +[[autodoc]] AutoModelForAudioFrameClassification + +### AutoModelForCTC + +[[autodoc]] AutoModelForCTC + +### AutoModelForSpeechSeq2Seq + +[[autodoc]] AutoModelForSpeechSeq2Seq + +### TFAutoModelForSpeechSeq2Seq + +[[autodoc]] TFAutoModelForSpeechSeq2Seq + +### FlaxAutoModelForSpeechSeq2Seq + +[[autodoc]] FlaxAutoModelForSpeechSeq2Seq + +### AutoModelForAudioXVector + +[[autodoc]] AutoModelForAudioXVector + +### AutoModelForTextToSpectrogram + +[[autodoc]] AutoModelForTextToSpectrogram + +### AutoModelForTextToWaveform + +[[autodoc]] AutoModelForTextToWaveform + +## متعدد الوسائط + +تتوفر الفئات التلقائية التالية لمهام متعددة الوسائط التالية. + +### AutoModelForTableQuestionAnswering + +[[autodoc]] AutoModelForTableQuestionAnswering + +### TFAutoModelForTableQuestionAnswering + +[[autodoc]] TFAutoModelForTableQuestionAnswering + +### AutoModelForDocumentQuestionAnswering + +[[autodoc]] AutoModelForDocumentQuestionAnswering + +### TFAutoModelForDocumentQuestionAnswering + +[[autodoc]] TFAutoModelForDocumentQuestionAnswering + +### AutoModelForVisualQuestionAnswering + +[[autodoc]] AutoModelForVisualQuestionAnswering + +### AutoModelForVision2Seq + +[[autodoc]] AutoModelForVision2Seq + +### TFAutoModelForVision2Seq + +[[autodoc]] TFAutoModelForVision2Seq + +### FlaxAutoModelForVision2Seq + +[[autodoc]] FlaxAutoModelForVision2Seq \ No newline at end of file From 42d9253c0b6380805949cb1ca052899a5a48ba4f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:26 +0300 Subject: [PATCH 375/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/autoformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/autoformer.md | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/source/ar/model_doc/autoformer.md diff --git a/docs/source/ar/model_doc/autoformer.md b/docs/source/ar/model_doc/autoformer.md new file mode 100644 index 00000000000000..aa9675fd81eec1 --- /dev/null +++ b/docs/source/ar/model_doc/autoformer.md @@ -0,0 +1,34 @@ +# Autoformer + +## نظرة عامة +تم اقتراح نموذج Autoformer في ورقة بحثية بعنوان "Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting" من قبل Haixu Wu وJiehui Xu وJianmin Wang وMingsheng Long. + +يعمل هذا النموذج على تعزيز محول Transformer كبنية تفكيك عميقة، يمكنها تفكيك مكونات الاتجاه والموسمية بشكل تدريجي أثناء عملية التنبؤ. + +فيما يلي الملخص المستخرج من الورقة البحثية: + +*يمثل تمديد وقت التنبؤ مطلبًا حاسمًا للتطبيقات الواقعية، مثل الإنذار المبكر بالطقس القاسي والتخطيط طويل الأجل لاستهلاك الطاقة. تتناول هذه الورقة مشكلة التنبؤ طويل الأجل للسلاسل الزمنية. تعتمد النماذج المستندة إلى محول Transformer المختلفة على آليات الاهتمام الذاتي المتنوعة لاكتشاف التبعيات طويلة المدى. ومع ذلك، فإن الأنماط الزمنية المعقدة للمستقبل البعيد تمنع النموذج من إيجاد تبعيات موثوقة. أيضًا، يتعين على المحولات اعتماد الإصدارات المتناثرة من الاهتمامات الذاتية النقطية من أجل كفاءة السلسلة الطويلة، مما يؤدي إلى اختناق استخدام المعلومات. وتجاوزًا للمحولات، قمنا بتصميم Autoformer كبنية تفكيك جديدة مع آلية Auto-Correlation. نحن نتحدى اتفاقية ما قبل المعالجة لتفكيك السلسلة ونقوم بتجديدها ككتلة داخلية أساسية للنماذج العميقة. يمكّن هذا التصميم Autoformer من قدرات التفكيك التدريجي للسلاسل الزمنية المعقدة. علاوة على ذلك، استلهامًا من نظرية العمليات العشوائية، قمنا بتصميم آلية Auto-Correlation بناءً على دورية السلسلة، والتي تجري اكتشاف التبعيات وتجميع التمثيلات على مستوى السلسلة الفرعية. يتفوق التلقائي-الارتباط على الاهتمام الذاتي في كل من الكفاءة والدقة. في التنبؤ طويل الأجل، يحقق Autoformer دقة رائدة في المجال، مع تحسن نسبي قدره 38% في ستة معايير مرجعية، تغطي خمس تطبيقات عملية: الطاقة والمرور والاقتصاد والطقس والأمراض.* + +تمت المساهمة بهذا النموذج من قبل elisim وkashif. يمكن العثور على الكود الأصلي هنا. + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها برمز 🌎) لمساعدتك على البدء. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنقوم بمراجعته! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- اطلع على منشور المدونة حول Autoformer على مدونة Hugging Face: نعم، المحولات فعالة للتنبؤ بالسلاسل الزمنية (+ Autoformer) + +## AutoformerConfig + +[[autodoc]] AutoformerConfig + +## AutoformerModel + +[[autodoc]] AutoformerModel + +- forward + +## AutoformerForPrediction + +[[autodoc]] AutoformerForPrediction + +- forward \ No newline at end of file From cf9f0fb0f515f2d530fc2d96e671ce4fc13bc750 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:28 +0300 Subject: [PATCH 376/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bark.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bark.md | 214 +++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 docs/source/ar/model_doc/bark.md diff --git a/docs/source/ar/model_doc/bark.md b/docs/source/ar/model_doc/bark.md new file mode 100644 index 00000000000000..2e31348a75e241 --- /dev/null +++ b/docs/source/ar/model_doc/bark.md @@ -0,0 +1,214 @@ +# Bark + +## نظرة عامة + +Bark عبارة عن نموذج تحويل نص إلى كلام يعتمد على النص الذي اقترحته Suno AI في [suno-ai/bark](https://github.com/suno-ai/bark). +يتكون Bark من 4 نماذج رئيسية: + +- [`BarkSemanticModel`] (يُشار إليه أيضًا باسم نموذج "النص"): نموذج محول ذاتي الانحدار السببي الذي يأخذ كمدخلات نصًا مميزًا، ويتوقع رموز نصية دلالية تلتقط معنى النص. +- [`BarkCoarseModel`] (يُشار إليه أيضًا باسم نموذج "الصوتيات الخشنة"): محول ذاتي الانحدار السببي، يأخذ كمدخلات نتائج نموذج [`BarkSemanticModel`]. ويهدف إلى التنبؤ بأول كتابين صوتيين ضروريين لـ EnCodec. +- [`BarkFineModel`] (نموذج "الصوتيات الدقيقة")، هذه المرة محول تشفير ذاتي غير سببي، والذي يتنبأ بشكل تكراري بكتب التعليمات البرمجية الأخيرة بناءً على مجموع تضمينات كتب التعليمات البرمجية السابقة. +- بعد التنبؤ بجميع قنوات كتاب التعليمات البرمجية من [`EncodecModel`]، يستخدم Bark لترميز صفيف الإخراج الصوتي. + +تجدر الإشارة إلى أن كل وحدة من الوحدات النمطية الثلاث الأولى يمكن أن تدعم تضمينات المتحدث الشرطية لشرط إخراج الصوت وفقًا لصوت محدد مسبقًا. + +تمت المساهمة بهذا النموذج من قبل [Yoach Lacombe (ylacombe)](https://huggingface.co/ylacombe) و [Sanchit Gandhi (sanchit-gandhi)](https://github.com/sanchit-gandhi). +يمكن العثور على الكود الأصلي [هنا](https://github.com/suno-ai/bark). + +### تحسين Bark + +يمكن تحسين Bark ببضع أسطر إضافية من التعليمات البرمجية، والتي **تخفض بشكل كبير من بصمة ذاكرته** و**تسرع الاستدلال**. + +#### استخدام نصف الدقة + +يمكنك تسريع الاستدلال وتقليل استخدام الذاكرة بنسبة 50% ببساطة عن طريق تحميل النموذج بنصف الدقة. + +```python +from transformers import BarkModel +import torch + +device = "cuda" if torch.cuda.is_available() else "cpu" +model = BarkModel.from_pretrained("suno/bark-small", torch_dtype=torch.float16).to(device) +``` + +#### استخدام تفريغ وحدة المعالجة المركزية + +كما ذكرنا سابقًا، يتكون Bark من 4 نماذج فرعية، يتم استدعاؤها بالتتابع أثناء إنشاء الصوت. وبعبارة أخرى، أثناء استخدام نموذج فرعي واحد، تكون النماذج الفرعية الأخرى خاملة. + +إذا كنت تستخدم جهاز CUDA، فإن الحل البسيط للاستفادة من انخفاض بنسبة 80% في بصمة الذاكرة هو تفريغ النماذج الفرعية من وحدة معالجة الرسومات (GPU) إلى وحدة المعالجة المركزية (CPU) عندما تكون خاملة. يُطلق على هذه العملية اسم *تفريغ وحدة المعالجة المركزية*. يمكنك استخدامه بأسطر برمجية واحدة على النحو التالي: + +```python +model.enable_cpu_offload() +``` + +لاحظ أنه يجب تثبيت 🤗 Accelerate قبل استخدام هذه الميزة. [هنا كيفية تثبيته.](Https://huggingface.co/docs/accelerate/basic_tutorials/install) + +#### استخدام محول أفضل + +محول أفضل هو ميزة 🤗 Optimum التي تقوم بدمج النواة تحت الغطاء. يمكنك تحقيق مكاسب تتراوح بين 20% و 30% في السرعة دون أي تدهور في الأداء. فهو يتطلب سطر برمجية واحد فقط لتصدير النموذج إلى محول أفضل: + +```python +model = model.to_bettertransformer() +``` + +لاحظ أنه يجب تثبيت 🤗 Optimum قبل استخدام هذه الميزة. [هنا كيفية تثبيته.](Https://huggingface.co/docs/optimum/installation) + +#### استخدام Flash Attention 2 + +Flash Attention 2 هو إصدار محسّن أسرع من التحسين السابق. + +##### التثبيت + +أولاً، تحقق مما إذا كان الأجهزة الخاصة بك متوافقة مع Flash Attention 2. يمكن العثور على أحدث قائمة من الأجهزة المتوافقة في [الوثائق الرسمية](https://github.com/Dao-AILab/flash-attention#installation-and-features). إذا لم يكن الأجهزة الخاص بك متوافقًا مع Flash Attention 2، فيمكنك الاستفادة من تحسين نواة الاهتمام من خلال دعم محول أفضل المشمول [أعلاه](https://huggingface.co/docs/transformers/main/en/model_doc/bark#using-better-transformer). + +بعد ذلك، قم بتثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +##### الاستخدام + +لتحميل نموذج باستخدام Flash Attention 2، يمكننا تمرير `attn_implementation="flash_attention_2"` العلم إلى [`.from_pretrained`](Https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained). سنقوم أيضًا بتحميل النموذج بنصف الدقة (على سبيل المثال `torch.float16`)، حيث يؤدي ذلك إلى تدهور جودة الصوت بشكل ضئيل جدًا ولكنه يقلل بشكل كبير من استخدام الذاكرة ويُسرع الاستدلال: + +```python +model = BarkModel.from_pretrained("suno/bark-small"، torch_dtype=torch.float16، attn_implementation="flash_attention_2").to(device) +``` + +##### مقارنة الأداء + +يوضح الرسم البياني التالي الكمون لتنفيذ الاهتمام الأصلي (بدون تحسين) مقابل محول أفضل وFlash Attention 2. في جميع الحالات، نقوم بتوليد 400 رمزًا دلاليًا على GPU A100 بسعة 40 جيجابايت باستخدام PyTorch 2.1. Flash Attention 2 أسرع أيضًا من محول أفضل، ويتحسن أداؤه بشكل أكبر مع زيادة أحجام الدُفعات: + +
+ +
+ +لوضع ذلك في المنظور، على NVIDIA A100 وعند إنشاء 400 رمزًا دلاليًا بحجم دفعة يبلغ 16، يمكنك الحصول على 17 ضعف [السرعة](https://huggingface.co/blog/optimizing-bark#throughput) وما زلت أسرع من إنشاء الجمل واحدة تلو الأخرى باستخدام تنفيذ النموذج الأصلي. وبعبارة أخرى، سيتم إنشاء جميع العينات أسرع 17 مرة. + +بحجم دفعة يبلغ 8، على NVIDIA A100، Flash Attention 2 أسرع بنسبة 10% من محول أفضل، وبحجم دفعة يبلغ 16، أسرع بنسبة 25%. + +#### الجمع بين تقنيات التحسين + +يمكنك الجمع بين تقنيات التحسين، واستخدام تفريغ وحدة المعالجة المركزية ونصف الدقة وFlash Attention 2 (أو 🤗 محول أفضل) في وقت واحد. + +```python +from transformers import BarkModel +import torch + +device = "cuda" if torch.cuda.is_available() else "cpu" + +# تحميل في fp16 واستخدام Flash Attention 2 +model = BarkModel.from_pretrained("suno/bark-small", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to(device) + +# تمكين تفريغ وحدة المعالجة المركزية +model.enable_cpu_offload() +``` + +اعرف المزيد حول تقنيات تحسين الاستدلال [هنا](https://huggingface.co/docs/transformers/perf_infer_gpu_one). + +### نصائح الاستخدام + +تقدم Suno مكتبة من إعدادات الصوت بعدد من اللغات [هنا](https://suno-ai.notion.site/8b8e8749ed514b0cbf3f699013548683?v=bc67cff786b04b50b3ceb756fd05f68c). +تم أيضًا تحميل هذه الإعدادات المسبقة في المركز [هنا](https://huggingface.co/suno/bark-small/tree/main/speaker_embeddings) أو [هنا](https://huggingface.co/suno/bark/tree/main/speaker_embeddings). + +```python +>>> from transformers import AutoProcessor, BarkModel + +>>> processor = AutoProcessor.from_pretrained("suno/bark") +>>> model = BarkModel.from_pretrained("suno/bark") + +>>> voice_preset = "v2/en_speaker_6" + +>>> inputs = processor("Hello, my dog is cute", voice_preset=voice_preset) + +>>> audio_array = model.generate(**inputs) +>>> audio_array = audio_array.cpu().numpy().squeeze() +``` + +يمكن لـ Bark إنشاء كلام **متعدد اللغات** واقعي للغاية بالإضافة إلى أصوات أخرى - بما في ذلك الموسيقى وضجيج الخلفية والمؤثرات الصوتية البسيطة. + +```py +>>> # Multilingual speech - simplified Chinese +>>> inputs = processor("惊人的!我会说中文") + +>>> # Multilingual speech - French - let's use a voice_preset as well +>>> inputs = processor("Incroyable! Je peux générer du son.", voice_preset="fr_speaker_5") + +>>> # Bark can also generate music. You can help it out by adding music notes around your lyrics. +>>> inputs = processor("♪ Hello, my dog is cute ♪") + +>>> audio_array = model.generate(**inputs) +>>> audio_array = audio_array.cpu().numpy().squeeze() +``` + +يمكن للنموذج أيضًا إنتاج اتصالات **غير لفظية** مثل الضحك والتنهد والبكاء. + +```python +>>> # Adding non-speech cues to the input text +>>> inputs = processor("Hello uh ... [clears throat], my dog is cute [laughter]") + +>>> audio_array = model.generate(**inputs) +>>> audio_array = audio_array.cpu().numpy().squeeze() +``` + +لحفظ الصوت، ما عليك سوى أخذ معدل العينة من تكوين النموذج وبعض برامج مساعدة SciPy: + +```python +>>> from scipy.io.wavfile import write as write_wav + +>>> # حفظ الصوت على القرص، ولكن أولاً خذ معدل العينة من تكوين النموذج +>>> sample_rate = model.generation_config.sample_rate +>>> write_wav("bark_generation.wav", sample_rate, audio_array) +``` + +## BarkConfig + +[[autodoc]] BarkConfig +- all + +## BarkProcessor + +[[autodoc]] BarkProcessor +- all +- __call__ + +## BarkModel + +[[autodoc]] BarkModel +- generate +- enable_cpu_offload + +## BarkSemanticModel + +[[autodoc]] BarkSemanticModel +- forward + +## BarkCoarseModel + +[[autodoc]] BarkCoarseModel +- forward + +## BarkFineModel + +[[autodoc]] BarkFineModel +- forward + +## BarkCausalModel + +[[autodoc]] BarkCausalModel +- forward + +## BarkCoarseConfig + +[[autodoc]] BarkCoarseConfig +- all + +## BarkFineConfig + +[[autodoc]] BarkFineConfig +- all + +## BarkSemanticConfig + +[[autodoc]] BarkSemanticConfig +- all \ No newline at end of file From 37fb9872d5abc6c34edae8b3ff05fc1f3c125ab5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:30 +0300 Subject: [PATCH 377/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bart.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bart.md | 167 +++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 docs/source/ar/model_doc/bart.md diff --git a/docs/source/ar/model_doc/bart.md b/docs/source/ar/model_doc/bart.md new file mode 100644 index 00000000000000..d089ed1628572c --- /dev/null +++ b/docs/source/ar/model_doc/bart.md @@ -0,0 +1,167 @@ +# BART + +## نظرة عامة + +اقترح نموذج Bart في ورقة "BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension" بواسطة Mike Lewis وآخرون في 29 أكتوبر 2019. + +وفقًا للملخص، فإن Bart: + +- يستخدم بنية قياسية للترميز فك الترميز تسلسليًا/ترجمة الآلة مع ترميز ثنائي الاتجاه (مثل BERT) وفك ترميز من اليسار إلى اليمين (مثل GPT). +- تتضمن مهمة ما قبل التدريب خلط ترتيب الجمل الأصلية بشكل عشوائي ومخطط تعبئة جديد، حيث يتم استبدال مقاطع النص برمز قناع واحد. +- فعال بشكل خاص عند ضبطه الدقيق لتوليد النص، ولكنه يعمل أيضًا بشكل جيد لمهمات الفهم. إنه يطابق أداء RoBERTa بموارد تدريب مماثلة على GLUE وSQuAD، ويحقق نتائج جديدة رائدة في مجموعة من مهام الحوار والأسئلة والأجوبة والتلخيص، مع مكاسب تصل إلى 6 ROUGE. + +تمت المساهمة بهذا النموذج من قبل [sshleifer]. يمكن العثور على كود المؤلفين [هنا]. + +## نصائح الاستخدام: + +- Bart هو نموذج مع تضمين موضع مطلق، لذلك يُنصح عادةً بتعبئة المدخلات على اليمين بدلاً من اليسار. +- نموذج تسلسلي إلى تسلسلي مع ترميز وفك ترميز. يتم تغذية الترميز بإصدار تالف من الرموز، ويتم تغذية فك الترميز بالرموز الأصلية (ولكن لديه قناع لإخفاء الكلمات المستقبلية مثل فك تشفير المحولات العادي). يتم تطبيق تركيبة من التحولات التالية على مهام ما قبل التدريب للترميز: + - قناع الرموز العشوائية (مثل BERT) + - حذف الرموز العشوائية + - قناع مقطع من الرموز k برمز قناع واحد (يكون مقطع من 0 رمزًا عبارة عن إدراج رمز قناع) + - جمل مختلطة + - تدوير المستند لجعله يبدأ برمز محدد + +## ملاحظات التنفيذ + +- لا يستخدم Bart `token_type_ids` للتصنيف التسلسلي. استخدم [`BartTokenizer`] أو [`~BartTokenizer.encode`] للحصول على التقسيم الصحيح. +- ستؤدي عملية التمرير الأمامي لـ [`BartModel`] إلى إنشاء `decoder_input_ids` إذا لم يتم تمريرها. يختلف هذا عن بعض واجهات برمجة التطبيقات النموذجية الأخرى. إحدى حالات الاستخدام النموذجية لهذه الميزة هي ملء القناع. +- من المفترض أن تكون تنبؤات النموذج متطابقة مع التنفيذ الأصلي عند `forced_bos_token_id=0`. ومع ذلك، فإن هذا يعمل فقط إذا كان السلسلة التي ترسلها إلى [`fairseq.encode`] تبدأ بمسافة. +- يجب استخدام [`~generation.GenerationMixin.generate`] لمهام التوليد الشرطي مثل التلخيص، راجع المثال في تلك التوثيقات. +- لن يكون لدى النماذج التي تحمل أوزان *facebook/bart-large-cnn* `mask_token_id`، أو تكون قادرة على أداء مهام ملء القناع. + +## ملء القناع + +يمكن استخدام نقاط تفتيش `facebook/bart-base` و`facebook/bart-large` لملء أقنعة متعددة الرموز. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام BART. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- منشور مدونة حول [التدريب الموزع: تدريب BART/T5 للتلخيص باستخدام 🤗 Transformers وAmazon SageMaker]. +- دفتر ملاحظات حول كيفية [ضبط نموذج BART الدقيق للتلخيص باستخدام fastai باستخدام blurr]. 🌎 +- دفتر ملاحظات حول كيفية [ضبط نموذج BART الدقيق للتلخيص بلغتين باستخدام Trainer class]. 🌎 +- [`BartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- [`TFBartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- [`FlaxBartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال]. +- مثال على كيفية تدريب [`BartForConditionalGeneration`] باستخدام كائن Hugging Face `datasets` يمكن العثور عليه في [مناقشة المنتدى هذه]. +- فصل [التلخيص] من دورة 🤗 Hugging Face. +- [دليل مهام التلخيص]. + +- [`BartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- [`TFBartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- [`FlaxBartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- فصل [نمذجة اللغة المقنعة] من دورة 🤗 Hugging Face. +- [دليل مهام نمذجة اللغة المقنعة]. + +- دفتر ملاحظات حول كيفية [ضبط النموذج الدقيق لـ mBART باستخدام Seq2SeqTrainer للترجمة من الهندية إلى الإنجليزية]. 🌎 +- [`BartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- [`TFBartForConditionalGeneration`] مدعوم بواسطة [نص برمجي مثال] و [دفتر ملاحظات]. +- [دليل مهام الترجمة]. + +انظر أيضًا: + +- [دليل مهام التصنيف النصي]. +- [دليل مهام الأسئلة والأجوبة]. +- [دليل مهام نمذجة اللغة السببية]. +- يتم وصف نقاط التفتيش المقطرة [هنا]. + +## BartConfig + +[[autodoc]] BartConfig +- all + +## BartTokenizer + +[[autodoc]] BartTokenizer +- all + +## BartTokenizerFast + +[[autodoc]] BartTokenizerFast +- all + +## BartModel + +[[autodoc]] BartModel +- forward + +## BartForConditionalGeneration + +[[autodoc]] BartForConditionalGeneration +- forward + +## BartForSequenceClassification + +[[autodoc]] BartForSequenceClassification +- forward + +## BartForQuestionAnswering + +[[autodoc]] BartForQuestionAnswering +- forward + +## BartForCausalLM + +[[autodoc]] BartForCausalLM +- forward + +## TFBartModel + +[[autodoc]] TFBartModel +- call + +## TFBartForConditionalGeneration + +[[autodoc]] TFBartForConditionalGeneration +- call + +## TFBartForSequenceClassification + +[[autodoc]] TFBartForSequenceClassification +- call + +## FlaxBartModel + +[[autodoc]] FlaxBartModel +- __call__ +- encode +- decode + +## FlaxBartForConditionalGeneration + +[[autodoc]] FlaxBartForConditionalGeneration +- __call__ +- encode +- decode +## FlaxBartForSequenceClassification + +نموذج FlaxBartForSequenceClassification هو نموذج لغة طبيعية محول تم تدريبه على مجموعة واسعة من البيانات غير الموسومة، ويتم تكييفه خصيصًا لتصنيف التسلسلات. إنه يعتمد على بنية BART، والتي هي عبارة عن نموذج ترميز-فك ترميز محول. تم تدريب النموذج باستخدام مكتبة Flax على مجموعة متنوعة من مهام تصنيف التسلسلات، بما في ذلك تصنيف النوايا، وتصنيف المشاعر، وتصنيف الموضوعات. + +### الخصائص الرئيسية: + +- **__call__** : ينفذ التصنيف على المدخلات النصية. يأخذ النص كمدخلات ويعيد التمثيل المشفر، بالإضافة إلى التصنيفات المتوقعة. + +- **encode** : تشفير المدخلات النصية إلى تمثيلات متجهات. يعيد التمثيلات المشفرة التي يمكن استخدامها لمزيد من التحليل أو المعالجة. + +- **decode** : (غير متوفر حاليًا) وظيفة فك التشفير ليست ذات صلة بهذا النموذج المحدد، ولكنها مدرجة للحفاظ على واجهة API متسقة. + +## FlaxBartForQuestionAnswering + +FlaxBartForQuestionAnswering هو نموذج لغة طبيعية محول مصمم خصيصًا للإجابة على الأسئلة. إنه يعتمد على بنية BART، والتي أثبتت فعاليتها في مجموعة متنوعة من مهام معالجة اللغة الطبيعية. تم تدريب النموذج باستخدام مكتبة Flax على مجموعات بيانات كبيرة من أسئلة وأجوبة، مما يمكنه من فهم السياق والاستدلال على الإجابات الصحيحة. + +### الخصائص الرئيسية: + +- **__call__** : ينفذ مهمة الإجابة على الأسئلة. يأخذ زوجًا من الأسئلة والنصوص كمدخلات ويعيد الإجابة المتوقعة. + +- **encode** : تشفير زوج السؤال والنص إلى تمثيلات متجهات. هذه الخطوة ضرورية لفهم السياق والعلاقات بين الكيانات في النص. + +- **decode** : (غير متوفر حاليًا) وظيفة فك التشفير ليست ذات صلة بهذا النموذج المحدد، ولكنها مدرجة للحفاظ على واجهة API متسقة. + +## FlaxBartForCausalLM + +FlaxBartForCausalLM هو نموذج لغة محول قوي تم تدريبه على فهم السببية والعلاقات السببية في النص. إنه يعتمد على بنية BART، والتي تم تصميمها لمعالجة النص بشكل تسلسلي وتوليد استجابات متماسكة. تم تدريب النموذج باستخدام مكتبة Flax على مجموعات بيانات كبيرة من النصوص السببية، مما يمكنه من استنتاج النتائج والتنبؤ بالعواقب المحتملة. + +### الخصائص الرئيسية: + +- **__call__** : ينفذ توليد اللغة النصية بناءً على سياق معين. يمكن استخدامه لتوليد استجابات متماسكة ومعقولة سياقيًا لأسئلة أو أوامر أو محادثات. \ No newline at end of file From 62ba05a0540d139b6a7a3474fdd1e5601c78d290 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:32 +0300 Subject: [PATCH 378/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/barthez.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/barthez.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docs/source/ar/model_doc/barthez.md diff --git a/docs/source/ar/model_doc/barthez.md b/docs/source/ar/model_doc/barthez.md new file mode 100644 index 00000000000000..0ed46087bb2f58 --- /dev/null +++ b/docs/source/ar/model_doc/barthez.md @@ -0,0 +1,18 @@ +# BARThez +## نظرة عامة +اقترح نموذج BARThez في ورقة بحثية بعنوان "BARThez: a Skilled Pretrained French Sequence-to-Sequence Model" بواسطة Moussa Kamal Eddine و Antoine J.-P. Tixier و Michalis Vazirgiannis في 23 أكتوبر 2020. + +ملخص الورقة البحثية: + +*أحدث التعلم التحويلي الاستقرائي، الذي مكنه التعلم الذاتي الإشراف، ثورة في مجال معالجة اللغات الطبيعية بالكامل، مع نماذج مثل BERT و BART التي حطمت الأرقام القياسية في العديد من مهام فهم اللغة الطبيعية. وعلى الرغم من وجود بعض الاستثناءات الملحوظة، فإن معظم النماذج والبحوث المتاحة أجريت باللغة الإنجليزية. وفي هذا العمل، نقدم BARThez، أول نموذج BART للغة الفرنسية (على حد علمنا). تم تدريب نموذج BARThez مسبقًا على مجموعة بيانات ضخمة أحادية اللغة باللغة الفرنسية من الأبحاث السابقة التي قمنا بتكييفها لتناسب مخططات الإزعاج الخاصة بنموذج BART. وعلى عكس نماذج اللغة الفرنسية القائمة على BERT مثل CamemBERT و FlauBERT، فإن نموذج BARThez مناسب بشكل خاص للمهام التوليدية، حيث تم تدريب كلا من المشفر وفك المشفر مسبقًا. بالإضافة إلى المهام التمييزية من معيار FLUE، نقيم نموذج BARThez على مجموعة بيانات تلخيص جديدة، OrangeSum، والتي نقوم بإصدارها مع هذه الورقة. كما نواصل أيضًا التدريب المسبق لنموذج BART متعدد اللغات الذي تم تدريبه مسبقًا بالفعل على مجموعة بيانات BARThez، ونظهر أن النموذج الناتج، والذي نسميه mBARTHez، يوفر تحسنًا كبيرًا عن نموذج BARThez الأساسي، وهو على قدم المساواة مع نماذج CamemBERT و FlauBERT أو يتفوق عليها.* + +تمت المساهمة بهذا النموذج بواسطة [moussakam](https://huggingface.co/moussakam). يمكن العثور على كود المؤلفين [هنا](https://github.com/moussaKam/BARThez). + +## الموارد +- يمكن ضبط نموذج BARThez الدقيق على مهام التسلسل إلى تسلسل بطريقة مماثلة لنموذج BART، راجع: [examples/pytorch/summarization/](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization/README.md). + +## BarthezTokenizer +[[autodoc]] BarthezTokenizer + +## BarthezTokenizerFast +[[autodoc]] BarthezTokenizerFast \ No newline at end of file From be1f6dc2ad95edb3ab583b88aa92e92cbc226d48 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:33 +0300 Subject: [PATCH 379/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/biogpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/biogpt.md | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 docs/source/ar/model_doc/biogpt.md diff --git a/docs/source/ar/model_doc/biogpt.md b/docs/source/ar/model_doc/biogpt.md new file mode 100644 index 00000000000000..40bb2721d94183 --- /dev/null +++ b/docs/source/ar/model_doc/biogpt.md @@ -0,0 +1,57 @@ +# BioGPT + +## نظرة عامة + +اقترح نموذج BioGPT في [BioGPT: generative pre-trained transformer for biomedical text generation and mining](https://academic.oup.com/bib/advance-article/doi/10.1093/bib/bbac409/6713511?guestAccessKey=a66d9b5d-4f83-4017-bb52-405815c907b9) بواسطة Renqian Luo, Liai Sun, Yingce Xia, Tao Qin, Sheng Zhang, Hoifung Poon and Tie-Yan Liu. BioGPT هو نموذج لغة محول مُدرب مسبقًا مخصص لمجال معين لتوليد النصوص واستخراجها في المجال الطبي الحيوي. يتبع BioGPT العمود الفقري لنموذج لغة المحول، وهو مُدرب مسبقًا من البداية على 15 مليون ملخص PubMed. + +الملخص من الورقة هو ما يلي: + +*لقد جذبت نماذج اللغة المدربة مسبقًا اهتمامًا متزايدًا في المجال الطبي الحيوي، مستوحاة من نجاحها الكبير في مجال اللغة الطبيعية العامة. من بين الفرعين الرئيسيين لنماذج اللغة المُدربة مسبقًا في مجال اللغة العامة، أي BERT (وأشكاله المختلفة) و GPT (وأشكاله المختلفة)، تمت دراسة الأول على نطاق واسع في المجال الطبي الحيوي، مثل BioBERT و PubMedBERT. على الرغم من أنهم حققوا نجاحًا كبيرًا في مجموعة متنوعة من المهام الطبية الحيوية التمييزية، فإن الافتقار إلى القدرة على التوليد يقيد نطاق تطبيقها. في هذه الورقة، نقترح BioGPT، وهو نموذج لغة محول مخصص لمجال معين ومدرب مسبقًا على الأدب الطبي الحيوي واسع النطاق. نقوم بتقييم BioGPT على ست مهام معالجة اللغة الطبيعية الطبية الحيوية ونثبت أن نموذجنا يتفوق على النماذج السابقة في معظم المهام. خاصة، نحصل على 44.98٪، 38.42٪ و 40.76٪ F1 score على BC5CDR، KD-DTI و DDI end-to-end relation extraction tasks، على التوالي، و 78.2٪ دقة على PubMedQA، مما يخلق رقما قياسيا جديدا. توضح دراستنا الإضافية حول توليد النصوص ميزة BioGPT على الأدب الطبي الحيوي لتوليد أوصاف سلسة للمصطلحات الطبية الحيوية.* + +تمت المساهمة بهذا النموذج من قبل [kamalkraj](https://huggingface.co/kamalkraj). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/BioGPT). + +## نصائح الاستخدام + +- BioGPT هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بتعبئة المدخلات من اليمين بدلاً من اليسار. + +- تم تدريب BioGPT بهدف نمذجة اللغة السببية (CLM) وبالتالي فهو قوي في التنبؤ بالرمز التالي في تسلسل. الاستفادة من هذه الميزة تسمح لـ BioGPT بتوليد نص متماسك من الناحية التركيبية كما يمكن ملاحظته في مثال run_generation.py script. + +- يمكن للنموذج أن يأخذ `past_key_values` (للبيثون) كإدخال، وهو أزواج الاهتمام الرئيسية / القيم المحسوبة مسبقًا. باستخدام هذه القيمة (past_key_values أو past) يمنع النموذج من إعادة حساب القيم المحسوبة مسبقًا في سياق توليد النص. بالنسبة إلى PyTorch، راجع حجة past_key_values لطريقة BioGptForCausalLM.forward() للحصول على مزيد من المعلومات حول استخدامها. + +## الموارد + +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +## BioGptConfig + +[[autodoc]] BioGptConfig + +## BioGptTokenizer + +[[autodoc]] BioGptTokenizer + +- save_vocabulary + +## BioGptModel + +[[autodoc]] BioGptModel + +- forward + +## BioGptForCausalLM + +[[autodoc]] BioGptForCausalLM + +- forward + +## BioGptForTokenClassification + +[[autodoc]] BioGptForTokenClassification + +- forward + +## BioGptForSequenceClassification + +[[autodoc]] BioGptForSequenceClassification + +- forward \ No newline at end of file From 666dea3b51765baf300d670839fe9e4fc822f4d5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:35 +0300 Subject: [PATCH 380/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/blenderbot.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/blenderbot.md | 124 +++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/source/ar/model_doc/blenderbot.md diff --git a/docs/source/ar/model_doc/blenderbot.md b/docs/source/ar/model_doc/blenderbot.md new file mode 100644 index 00000000000000..276f3513714bfc --- /dev/null +++ b/docs/source/ar/model_doc/blenderbot.md @@ -0,0 +1,124 @@ +# Blenderbot + +## نظرة عامة + +تم اقتراح نموذج دردشة Blenderbot في ورقة "وصفات لبناء دردشة مفتوحة المجال" من قبل ستيفن رولر، إيميلي دينان، نامان جويال، دا جو، ماري ويليامسون، يينهان ليو، جينغ شو، مايل أوت، كورت شاستر، إريك م. سميث، ي-لان بوريو، جيسون ويستون في 30 أبريل 2020. + +ملخص الورقة هو كما يلي: + +*بناء دردشات مفتوحة المجال هو مجال صعب لبحوث تعلم الآلة. في حين أن العمل السابق قد أظهر أن توسيع نطاق النماذج العصبية من حيث عدد المعلمات وحجم البيانات التي يتم تدريبها عليها يعطي نتائج محسنة، فإننا نوضح أن المكونات الأخرى مهمة لأداء الدردشة عالية الأداء. تتطلب المحادثة الجيدة عددًا من المهارات التي يمزجها المحاور الخبير بطريقة سلسة: تقديم نقاط حديث جذابة والاستماع إلى الشركاء، وعرض المعرفة والتعاطف والشخصية بشكل مناسب، مع الحفاظ على شخصية متسقة. نحن نوضح أن النماذج واسعة النطاق يمكن أن تتعلم هذه المهارات عند إعطائها بيانات التدريب المناسبة واختيار استراتيجية التوليد. نقوم ببناء متغيرات من هذه الوصفات باستخدام نماذج 90 مليون و2.7 مليار و9.4 مليار معلمة، ونقوم بإتاحة نماذجنا ورمزنا للجمهور. تُظهر التقييمات البشرية أن أفضل نماذجنا متفوقة على الأساليب الحالية في الحوار متعدد الأدوار من حيث قياسات الجاذبية والصفات البشرية. ثم نناقش قيود هذا العمل من خلال تحليل حالات الفشل في نماذجنا.* + +تمت المساهمة بهذا النموذج من قبل [sshleifer](https://huggingface.co/sshleifer). يمكن العثور على كود المؤلفين [هنا](https://github.com/facebookresearch/ParlAI). + +## نصائح الاستخدام ومثال + +Blenderbot هو نموذج مع تضمين موضع مطلق، لذلك يُنصح عادةً بإضافة مسافات إلى المدخلات من اليمين بدلاً من اليسار. + +مثال: + +```python +>>> from transformers import BlenderbotTokenizer, BlenderbotForConditionalGeneration + +>>> mname = "facebook/blenderbot-400M-distill" +>>> model = BlenderbotForConditionalGeneration.from_pretrained(mname) +>>> tokenizer = BlenderbotTokenizer.from_pretrained(mname) +>>> UTTERANCE = "My friends are cool but they eat too many carbs." +>>> inputs = tokenizer([UTTERANCE], return_tensors="pt") +>>> reply_ids = model.generate(**inputs) +>>> print(tokenizer.batch_decode(reply_ids)) +[" That's unfortunate. Are they trying to lose weight or are they just trying to be healthier?"] +``` + +## ملاحظات التنفيذ + +- يستخدم Blenderbot بنية قياسية [نموذج seq2seq transformer](https://arxiv.org/pdf/1706.03762.pdf). +- يمكن العثور على نقاط التفتيش المتاحة في [مركز النماذج](https://huggingface.co/models?search=blenderbot). +- هذا هو فئة Blenderbot *الافتراضية*. ومع ذلك، فإن بعض نقاط التفتيش الأصغر، مثل `facebook/blenderbot_small_90M`، لها بنية مختلفة وبالتالي يجب استخدامها مع [BlenderbotSmall](blenderbot-small). + +## الموارد + +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## BlenderbotConfig + +[[autodoc]] BlenderbotConfig + +## BlenderbotTokenizer + +[[autodoc]] BlenderbotTokenizer + +- build_inputs_with_special_tokens + +## BlenderbotTokenizerFast + +[[autodoc]] BlenderbotTokenizerFast + +- build_inputs_with_special_tokens + + + + + +## BlenderbotModel + +راجع [`~transformers.BartModel`] للحصول على الحجج إلى *forward* و*generate* + +[[autodoc]] BlenderbotModel + +- forward + +## BlenderbotForConditionalGeneration + +راجع [`~transformers.BartForConditionalGeneration`] للحصول على الحجج إلى *forward* و*generate* + +[[autodoc]] BlenderbotForConditionalGeneration + +- forward + +## BlenderbotForCausalLM + +[[autodoc]] BlenderbotForCausalLM + +- forward + + + + + +## TFBlenderbotModel + +[[autodoc]] TFBlenderbotModel + +- call + +## TFBlenderbotForConditionalGeneration + +[[autodoc]] TFBlenderbotForConditionalGeneration + +- call + + + + + +## FlaxBlenderbotModel + +[[autodoc]] FlaxBlenderbotModel + +- __call__ +- encode +- decode + +## FlaxBlenderbotForConditionalGeneration + +[[autodoc]] FlaxBlenderbotForConditionalGeneration + +- __call__ +- encode +- decode + + + + \ No newline at end of file From c26fe561fd6562b69abc74445247083f6cd1b37f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:37 +0300 Subject: [PATCH 381/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bit.md | 53 +++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 docs/source/ar/model_doc/bit.md diff --git a/docs/source/ar/model_doc/bit.md b/docs/source/ar/model_doc/bit.md new file mode 100644 index 00000000000000..979166948b0d0f --- /dev/null +++ b/docs/source/ar/model_doc/bit.md @@ -0,0 +1,53 @@ +# Big Transfer (BiT) + +## نظرة عامة + +اقتُرح نموذج BiT في ورقة "Big Transfer (BiT): General Visual Representation Learning" من قبل Alexander Kolesnikov و Lucas Beyer و Xiaohua Zhai و Joan Puigcerver و Jessica Yung و Sylvain Gelly و Neil Houlsby. + +BiT هي وصفة بسيطة لزيادة حجم التدريب المسبق لتصميمات [ResNet](resnet)-like (تحديدًا، ResNetv2). وتؤدي هذه الطريقة إلى تحسينات كبيرة في التعلم بالنقل. + +ملخص الورقة هو كما يلي: + +*يُحسِّن نقل التمثيلات المُدربة مسبقًا من كفاءة العينات ويبسط ضبط فرط المعلمات عند تدريب الشبكات العصبية العميقة للرؤية. نعيد النظر في نموذج التدريب المسبق على مجموعات البيانات المُشرفة الكبيرة وضبط دقة النموذج على مهمة مستهدفة. نقوم بزيادة حجم التدريب المسبق، ونقترح وصفة بسيطة نسميها Big Transfer (BiT). من خلال الجمع بين بعض المكونات المختارة بعناية، ونقل باستخدام قاعدة بسيطة، نحقق أداءً قويًا في أكثر من 20 مجموعة بيانات. يعمل BiT بشكل جيد عبر مجموعة واسعة بشكل مدهش من أنظمة البيانات - من مثال واحد لكل فئة إلى 1 مليون مثال إجمالي. يحقق BiT دقة أعلى-1 بنسبة 87.5٪ على ILSVRC-2012، و 99.4٪ على CIFAR-10، و 76.3٪ على مقياس Visual Task Adaptation Benchmark (VTAB) المكون من 19 مهمة. وفيما يتعلق بمجموعات البيانات الصغيرة، يحصل BiT على 76.8٪ على ILSVRC-2012 مع 10 أمثلة لكل فئة، و 97.0٪ على CIFAR-10 مع 10 أمثلة لكل فئة. نقوم بتحليل مفصل للمكونات الرئيسية التي تؤدي إلى أداء نقل عالي.* + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/big_transfer). + +## نصائح الاستخدام + +- تُعد نماذج BiT مكافئة لتصميم ResNetv2 من حيث البنية، باستثناء ما يلي: 1) يتم استبدال جميع طبقات التوحيد المعياري للدفعات بـ [التوحيد المعياري للمجموعات](https://arxiv.org/abs/1803.08494)، 2) يتم استخدام [توحيد أوزان](https://arxiv.org/abs/1903.10520) الطبقات التلافيفية. يُظهر المؤلفون أن الجمع بين الاثنين مفيد للتدريب باستخدام أحجام دفعات كبيرة، وله تأثير كبير على التعلم بالنقل. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام BiT. + + + +- [`BitForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهمة تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## BitConfig + +[[autodoc]] BitConfig + +## BitImageProcessor + +[[autodoc]] BitImageProcessor + +- preprocess + +## BitModel + +[[autodoc]] BitModel + +- forward + +## BitForImageClassification + +[[autodoc]] BitForImageClassification + +- forward \ No newline at end of file From 1aebcc288036e78d17bf546a197836126dc13006 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:39 +0300 Subject: [PATCH 382/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/blenderbot-small.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/blenderbot-small.md | 102 +++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/source/ar/model_doc/blenderbot-small.md diff --git a/docs/source/ar/model_doc/blenderbot-small.md b/docs/source/ar/model_doc/blenderbot-small.md new file mode 100644 index 00000000000000..a4b4d4432eca5c --- /dev/null +++ b/docs/source/ar/model_doc/blenderbot-small.md @@ -0,0 +1,102 @@ +# Blenderbot Small + +Note that [`BlenderbotSmallModel`] and [`BlenderbotSmallForConditionalGeneration`] are only used in combination with the checkpoint [facebook/blenderbot-90M](https://huggingface.co/facebook/blenderbot-90M). Larger Blenderbot checkpoints should instead be used with [`BlenderbotModel`] and [`BlenderbotForConditionalGeneration`]. + +## نظرة عامة + +اقتُرح نموذج محادثة Blender في ورقة "وصفات لبناء محادث آلي مفتوح المجال" من تأليف ستيفن رولر، وإميلي دينان، ونامان جويال، ودا جو، وماري ويليامسون، ويينهان ليو، وجينغ شو، ومايل أوت، وكورت شاستر، وإريك م. سميث، وY-لان بوريو، وجيسون ويستون في 30 أبريل 2020. + +وفيما يلي ملخص الورقة: + +*إن بناء محادثات آلية مفتوحة المجال هو مجال صعب لأبحاث تعلم الآلة. في حين أظهرت الأعمال السابقة أن توسيع نطاق النماذج العصبية من حيث عدد المعلمات وحجم البيانات التي يتم تدريبها عليها يعطي نتائج محسنة، فإننا نُظهر أن هناك مكونات أخرى مهمة لأداء المحادث الآلي عالي الجودة. تتطلب المحادثة الجيدة عددًا من المهارات التي يمزجها المحاور الخبير بطريقة سلسة: تقديم نقاط محادثة جذابة والاستماع إلى الشركاء، وعرض المعرفة والتعاطف والشخصية بشكل مناسب، مع الحفاظ على شخصية متسقة. نُظهر أن النماذج واسعة النطاق يمكنها تعلم هذه المهارات عند تزويدها ببيانات التدريب المناسبة وخيار استراتيجية التوليد. نقوم ببناء متغيرات من هذه الوصفات باستخدام نماذج 90 مليون و2.7 مليار و9.4 مليار معلمة، ونقوم بإتاحة نماذجنا وشفرة البرنامج الخاصة بنا للعموم. تُظهر التقييمات البشرية أن أفضل نماذجنا متفوقة على النُهج الحالية في الحوار متعدد الأدوار من حيث قياسات الجاذبية والتشابه البشري. ثم نناقش حدود هذا العمل من خلال تحليل حالات الفشل في نماذجنا.* + +ساهم بهذا النموذج [باتريك فون بلاتين](https://huggingface.co/patrickvonplaten). يمكن العثور على شفرة البرنامج الخاصة بالمؤلفين [هنا](https://github.com/facebookresearch/ParlAI). + +## نصائح الاستخدام + +Blenderbot Small هو نموذج يستخدم تضمين الموضع المطلق، لذلك يُنصح عادةً بإضافة مسافة بادئة إلى المدخلات من اليمين بدلاً من اليسار. + +## الموارد + +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## BlenderbotSmallConfig + +[[autodoc]] BlenderbotSmallConfig + +## BlenderbotSmallTokenizer + +[[autodoc]] BlenderbotSmallTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## BlenderbotSmallTokenizerFast + +[[autodoc]] BlenderbotSmallTokenizerFast + + + + + +## BlenderbotSmallModel + +[[autodoc]] BlenderbotSmallModel + +- forward + +## BlenderbotSmallForConditionalGeneration + +[[autodoc]] BlenderbotSmallForConditionalGeneration + +- forward + +## BlenderbotSmallForCausalLM + +[[autodoc]] BlenderbotSmallForCausalLM + +- forward + + + + + +## TFBlenderbotSmallModel + +[[autodoc]] TFBlenderbotSmallModel + +- call + +## TFBlenderbotSmallForConditionalGeneration + +[[autodoc]] TFBlenderbotSmallForConditionalGeneration + +- call + + + + + +## FlaxBlenderbotSmallModel + +[[autodoc]] FlaxBlenderbotSmallModel + +- __call__ +- encode +- decode + +## FlaxBlenderbotForConditionalGeneration + +[[autodoc]] FlaxBlenderbotSmallForConditionalGeneration + +- __call__ +- encode +- decode + + + + \ No newline at end of file From 1906914392251d37b50a2b6c74d7df4d821b6576 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:41 +0300 Subject: [PATCH 383/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/blip-2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/blip-2.md | 78 ++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/source/ar/model_doc/blip-2.md diff --git a/docs/source/ar/model_doc/blip-2.md b/docs/source/ar/model_doc/blip-2.md new file mode 100644 index 00000000000000..aeea25de788680 --- /dev/null +++ b/docs/source/ar/model_doc/blip-2.md @@ -0,0 +1,78 @@ +# BLIP-2 + +## نظرة عامة + +اقترح نموذج BLIP-2 في [BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models](https://arxiv.org/abs/2301.12597) by +Junnan Li, Dongxu Li, Silvio Savarese, Steven Hoi. يستفيد BLIP-2 من encoders الصور المسبقة التدريب والنماذج اللغوية الكبيرة (LLMs) عن طريق تدريب محول خفيف الوزن مكون من 12 طبقة +مشفِّر بينهما، مما يحقق أداءً متميزًا في مختلف مهام الرؤية واللغة. والأهم من ذلك أن BLIP-2 يحسن [Flamingo](https://arxiv.org/abs/2204.14198)، وهو نموذج مكون من 80 مليار معلمة، بنسبة 8.7% +على VQAv2 بدون تدريب باستخدام 54 ضعف عدد المعلمات القابلة للتدريب. + +المستخلص من الورقة هو ما يلي: + +* أصبحت تكلفة التدريب على الرؤية واللغة باهظة بشكل متزايد بسبب التدريب من البداية إلى النهاية لنماذج واسعة النطاق. تقترح هذه الورقة BLIP-2، وهي استراتيجية تدريب مسبق عامة وفعالة تقوم بتهيئة التدريب المسبق للرؤية واللغة من encoders الصور المسبقة التدريب الجاهزة والنماذج اللغوية الكبيرة المجمدة. يتجاوز BLIP-2 الفجوة بين الوسائط باستخدام محول استعلام خفيف الوزن، يتم تدريبه المسبق على مرحلتين. المرحلة الأولى تقوم بتهيئة تعلم تمثيل الرؤية واللغة من مشفر صورة مجمد. المرحلة الثانية تقوم بتهيئة التعلم التوليدي للرؤية إلى اللغة من نموذج لغة مجمد. يحقق BLIP-2 أداءً متميزًا في مختلف مهام الرؤية واللغة، على الرغم من وجود عدد أقل بكثير من المعلمات القابلة للتدريب مقارنة بالطرق الحالية. على سبيل المثال، يتفوق نموذجنا على Flamingo80B بنسبة 8.7% في VQAv2 بدون تدريب باستخدام 54 ضعف عدد المعلمات القابلة للتدريب. كما نوضح قدرات النموذج الناشئة على التوليد من الصورة إلى النص بدون تدريب والتي يمكنها اتباع تعليمات اللغة الطبيعية. * + + + + هندسة BLIP-2. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/salesforce/LAVIS/tree/5ee63d688ba4cebff63acee04adaef2dee9af207). + +## نصائح الاستخدام + +- يمكن استخدام BLIP-2 للتوليد النصي الشرطي بناءً على صورة وطلب نص اختياري. في وقت الاستدلال، يوصى باستخدام طريقة [`generate`] . +- يمكن للمرء استخدام [`Blip2Processor`] لتحضير الصور للنموذج، وفك رموز معرّفات الرموز المتوقعة مرة أخرى إلى نص. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام BLIP-2. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ BLIP-2 لتعليق الصور، والإجابة على الأسئلة المرئية (VQA) والمحادثات الشبيهة بالدردشة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/BLIP-2). +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## Blip2Config + +[[autodoc]] Blip2Config + +- from_vision_qformer_text_configs + +## Blip2VisionConfig + +[[autodoc]] Blip2VisionConfig + +## Blip2QFormerConfig + +[[autodoc]] Blip2QFormerConfig + +## Blip2Processor + +[[autodoc]] Blip2Processor + +## Blip2VisionModel + +[[autodoc]] Blip2VisionModel + +- forward + +## Blip2QFormerModel + +[[autodoc]] Blip2QFormerModel + +- forward + +## Blip2Model + +[[autodoc]] Blip2Model + +- forward +- get_text_features +- get_image_features +- get_qformer_features + +## Blip2ForConditionalGeneration + +[[autodoc]] Blip2ForConditionalGeneration + +- forward +- generate \ No newline at end of file From 4227829a4fe00a7e1f49d6ef28c8c85d9ced08a8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:42 +0300 Subject: [PATCH 384/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/blip.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/blip.md | 137 +++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 docs/source/ar/model_doc/blip.md diff --git a/docs/source/ar/model_doc/blip.md b/docs/source/ar/model_doc/blip.md new file mode 100644 index 00000000000000..10e904786c9f8e --- /dev/null +++ b/docs/source/ar/model_doc/blip.md @@ -0,0 +1,137 @@ +# BLIP + +## نظرة عامة +تم اقتراح نموذج BLIP في [BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation](https://arxiv.org/abs/2201.12086) بواسطة Junnan Li, Dongxu Li, Caiming Xiong, Steven Hoi. + +BLIP هو نموذج قادر على أداء مهام متعددة الوسائط المختلفة بما في ذلك: + +- الإجابة على الأسئلة البصرية +- استرجاع الصور والنصوص (مطابقة الصور والنصوص) +- وضع تعليقات توضيحية على الصور + +ملخص الورقة البحثية هو كما يلي: + +*أدى التدريب المسبق للرؤية واللغة (VLP) إلى تقدم الأداء في العديد من مهام الرؤية واللغة. ومع ذلك، فإن معظم النماذج التي تم تدريبها مسبقًا لا تتفوق إلا في مهام الفهم أو المهام القائمة على التوليد. علاوة على ذلك، تم تحقيق تحسين الأداء إلى حد كبير عن طريق توسيع نطاق مجموعة البيانات باستخدام أزواج من الصور والنصوص الضخمة التي تم جمعها من الويب، والتي تعد مصدرًا غير مثاليًا للإشراف. في هذه الورقة، نقترح BLIP، وهو إطار عمل جديد لـ VLP ينتقل بمرونة إلى مهام الفهم وتوليد الرؤية واللغة. يستخدم BLIP البيانات الضخمة من الويب بشكل فعال من خلال تعزيز التعليقات التوضيحية، حيث تقوم أداة إنشاء التعليقات التوضيحية بتوليد تعليقات توضيحية اصطناعية وتقوم أداة الترشيح بإزالة غير النظيفة منها. نحقق نتائج متقدمة في مجموعة واسعة من مهام الرؤية واللغة، مثل استرجاع الصور والنصوص (+2.7% في متوسط الاستدعاء@1)، ووضع تعليقات توضيحية على الصور (+2.8% في CIDEr)، والإجابة على الأسئلة البصرية (+1.6% في درجة VQA). كما يظهر BLIP قدرة تعميم قوية عند نقله مباشرة إلى مهام اللغة المرئية بطريقة الصفر. تم إصدار الكود والنماذج ومجموعات البيانات.* + +![BLIP.gif](https://cdn-uploads.huggingface.co/production/uploads/1670928184033-62441d1d9fdefb55a0b7d12c.gif) + +تمت المساهمة بهذا النموذج بواسطة [ybelkada](https://huggingface.co/ybelkada). يمكن العثور على الكود الأصلي [هنا](https://github.com/salesforce/BLIP). + +## الموارد + +- [دفتر Jupyter](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_blip.ipynb) حول كيفية ضبط نموذج BLIP لوضع تعليقات توضيحية على الصور باستخدام مجموعة بيانات مخصصة + +## BlipConfig + +[[autodoc]] BlipConfig + +- from_text_vision_configs + +## BlipTextConfig + +[[autodoc]] BlipTextConfig + +## BlipVisionConfig + +[[autodoc]] BlipVisionConfig + +## BlipProcessor + +[[autodoc]] BlipProcessor + +## BlipImageProcessor + +[[autodoc]] BlipImageProcessor + +- preprocess + + + + + +## BlipModel + +سيتم إيقاف استخدام `BlipModel` في الإصدارات المستقبلية، يرجى استخدام `BlipForConditionalGeneration` أو `BlipForImageTextRetrieval` أو `BlipForQuestionAnswering` حسب حالتك الاستخدامية. + +[[autodoc]] BlipModel + +- forward +- get_text_features +- get_image_features + +## BlipTextModel + +[[autodoc]] BlipTextModel + +- forward + +## BlipVisionModel + +[[autodoc]] BlipVisionModel + +- forward + +## BlipForConditionalGeneration + +[[autodoc]] BlipForConditionalGeneration + +- forward + +## BlipForImageTextRetrieval + +[[autodoc]] BlipForImageTextRetrieval + +- forward + +## BlipForQuestionAnswering + +[[autodoc]] BlipForQuestionAnswering + +- forward + + + + + +## TFBlipModel + +[[autodoc]] TFBlipModel + +- call +- get_text_features +- get_image_features + +## TFBlipTextModel + +[[autodoc]] TFBlipTextModel + +- call + +## TFBlipVisionModel + +[[autodoc]] TFBlipVisionModel + +- call + + +## TFBlipForConditionalGeneration + +[[autodoc]] TFBlipForConditionalGeneration + +- call + +## TFBlipForImageTextRetrieval + +[[autodoc]] TFBlipForImageTextRetrieval + +- call + +## TFBlipForQuestionAnswering + +[[autodoc]] TFBlipForQuestionAnswering + +- call + + + + \ No newline at end of file From 43dd1511ee509ed16089be54509bdc1443d558de Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:44 +0300 Subject: [PATCH 385/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bloom.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bloom.md | 102 ++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/source/ar/model_doc/bloom.md diff --git a/docs/source/ar/model_doc/bloom.md b/docs/source/ar/model_doc/bloom.md new file mode 100644 index 00000000000000..28744a5ecb1997 --- /dev/null +++ b/docs/source/ar/model_doc/bloom.md @@ -0,0 +1,102 @@ +# BLOOM + +## نظرة عامة +تم اقتراح نموذج BLOOM بإصداراته المختلفة من خلال [ورشة BigScience](https://bigscience.huggingface.co/). ويستلهم BigScience الإلهام من مبادرات العلوم المفتوحة الأخرى حيث يجمع الباحثون وقتهم ومواردهم لتحقيق تأثير أكبر بشكل جماعي. + +يتشابه تصميم BLOOM بشكل أساسي مع تصميم GPT3 (نموذج التنبؤ بالرمز التلقائي التراجعي)، ولكنه تم تدريبه على 46 لغة مختلفة و13 لغة برمجة. + +تم تدريب عدة إصدارات أصغر من النماذج على نفس مجموعة البيانات. BLOOM متاح في الإصدارات التالية: + +- [bloom-560m](https://huggingface.co/bigscience/bloom-560m) +- [bloom-1b1](https://huggingface.co/bigscience/bloom-1b1) +- [bloom-1b7](https://huggingface.co/bigscience/bloom-1b7) +- [bloom-3b](https://huggingface.co/bigscience/bloom-3b) +- [bloom-7b1](https://huggingface.co/bigscience/bloom-7b1) +- [bloom](https://huggingface.co/bigscience/bloom) (176B معلمات) + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها بـ 🌎) لمساعدتك في البدء مع BLOOM. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنقوم بمراجعته! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- [`BloomForCausalLM`] مدعوم بواسطة [مثال على النص البرمجي للنمذجة اللغوية السببية](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#gpt-2gpt-and-causal-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). + +انظر أيضًا: + +- [دليل مهام النمذجة اللغوية السببية](../tasks/language_modeling) +- [دليل مهام التصنيف النصي](../tasks/sequence_classification) +- [دليل مهام التصنيف الرمزي](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) + +⚡️ الاستنتاج + +- مدونة حول [قصة التحسين: استنتاج Bloom](https://huggingface.co/blog/bloom-inference-optimization). +- مدونة حول [سرعة استنتاج BLOOM بشكل لا يصدق باستخدام DeepSpeed و Accelerate](https://huggingface.co/blog/bloom-inference-pytorch-scripts). + +⚙️ التدريب + +- مدونة حول [التكنولوجيا وراء تدريب BLOOM](https://huggingface.co/blog/bloom-megatron-deepspeed). + +## BloomConfig + +[[autodoc]] BloomConfig + +- all + +## BloomTokenizerFast + +[[autodoc]] BloomTokenizerFast + +- all + + + + +## BloomModel + +[[autodoc]] BloomModel + +- forward + +## BloomForCausalLM + +[[autodoc]] BloomForCausalLM + +- forward + +## BloomForSequenceClassification + +[[autodoc]] BloomForSequenceClassification + +- forward + +## BloomForTokenClassification + +[[autodoc]] BloomForTokenClassification + +- forward + +## BloomForQuestionAnswering + +[[autodoc]] BloomForQuestionAnswering + +- forward + + + + +## FlaxBloomModel + +[[autodoc]] FlaxBloomModel + +- __call__ + +## FlaxBloomForCausalLM + +[[autodoc]] FlaxBloomForCausalLM + +- __call__ + + + \ No newline at end of file From f48f1ff1ce74b0779c3bd986cbb72d5ada08358c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:46 +0300 Subject: [PATCH 386/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bort.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bort.md | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/source/ar/model_doc/bort.md diff --git a/docs/source/ar/model_doc/bort.md b/docs/source/ar/model_doc/bort.md new file mode 100644 index 00000000000000..7dd33e65552a7f --- /dev/null +++ b/docs/source/ar/model_doc/bort.md @@ -0,0 +1,36 @@ +# BORT + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.30.0. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.30.0`. + + +## نظرة عامة +اقترح نموذج BORT في [استخراج البنية الفرعية المثلى لـ BERT](https://arxiv.org/abs/2010.10499) بواسطة +أدريان دي وينتر ودانيال جيه بيري. إنه مجموعة فرعية مثالية من المعلمات المعمارية لـ BERT، والتي +يشير إليها المؤلفون باسم "Bort". + +المقتطف من الورقة هو ما يلي: + +*نحن نستخرج مجموعة فرعية مثالية من المعلمات المعمارية لهندسة BERT من ديفلين وآخرون. (2018) من خلال +تطبيق الاختراقات الحديثة في خوارزميات البحث المعماري العصبي. هذه المجموعة الفرعية المثلى، والتي نشير إليها باسم +"Bort"، أصغر بشكل واضح، حيث يبلغ حجمها الفعال (أي عدم حساب طبقة التضمين) 5.5٪ من +هندسة BERT الكبيرة الأصلية، و 16٪ من الحجم الصافي. يمكن أيضًا تهيئة Bort مسبقًا في 288 ساعة من وحدة معالجة الرسومات، والتي +1.2٪ من الوقت اللازم لتهيئة أعلى متغير معماري لـ BERT، وهو RoBERTa-large +(ليو وآخرون، 2019)، وحوالي 33٪ من الرقم القياسي العالمي، في ساعات وحدة معالجة الرسومات، اللازمة لتدريب BERT-large على نفس +الأجهزة. كما أنه أسرع 7.9 مرة على وحدة المعالجة المركزية، بالإضافة إلى كونه أفضل أداءً من المتغيرات المضغوطة الأخرى +الهندسة المعمارية، وبعض المتغيرات غير المضغوطة: فهو يحقق تحسينات في الأداء تتراوح بين 0.3٪ و 31٪، +القيمة المطلقة، فيما يتعلق بـ BERT-large، على مقاييس فهم اللغة الطبيعية العامة المتعددة.* + +تمت المساهمة بهذا النموذج من قبل [stefan-it](https://huggingface.co/stefan-it). يمكن العثور على الكود الأصلي [هنا](https://github.com/alexa/bort/). + +## نصائح الاستخدام + +- تستند بنية نموذج BORT إلى BERT، راجع [صفحة وثائق BERT](bert) للحصول على مرجع API النموذجي بالإضافة إلى أمثلة الاستخدام. + +- يستخدم BORT محلل RoBERTa بدلاً من محلل BERT، راجع [صفحة وثائق RoBERTa](roberta) للحصول على مرجع API المحلل بالإضافة إلى أمثلة الاستخدام. + +- يتطلب BORT خوارزمية ضبط دقيقة محددة، تسمى [Agora](https://adewynter.github.io/notes/bort_algorithms_and_applications.html#fine-tuning-with-algebraic-topology) +)، والتي لم يتم طرحها للجمهور بعد للأسف. سيكون من المفيد جدًا للمجتمع، إذا حاول شخص ما تنفيذ +الخوارزمية لجعل BORT يعمل ضبط الدقة. \ No newline at end of file From ec8d0d541073f3e565da993efefe171004e125b9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:47 +0300 Subject: [PATCH 387/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bridgetower.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bridgetower.md | 153 ++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 docs/source/ar/model_doc/bridgetower.md diff --git a/docs/source/ar/model_doc/bridgetower.md b/docs/source/ar/model_doc/bridgetower.md new file mode 100644 index 00000000000000..1471011f8baf21 --- /dev/null +++ b/docs/source/ar/model_doc/bridgetower.md @@ -0,0 +1,153 @@ +# BridgeTower + +## نظرة عامة + +اقتُرح نموذج BridgeTower في ورقة "BridgeTower: بناء جسور بين المشفرين أحاديي النمط في التعلم التمثيلي للرؤية واللغة" بواسطة شياو شو، وتشنفي وو، وشاشار روزنمان، وفاسوديف لال، ووانكسيانغ تشي، ونان دوان. ويهدف هذا النموذج إلى بناء جسر بين كل مشفر أحادي النمط والمشفر متعدد الأنماط لتمكين التفاعل الشامل والمفصل في كل طبقة من المشفر متعدد الأنماط، وبالتالي تحقيق أداء ملحوظ في مختلف المهام دون زيادة تذكر في التكاليف الحسابية والأداء. + +تم قبول هذه الورقة في مؤتمر AAAI'23. + +وفيما يلي ملخص الورقة: + +"سيطرت نماذج الرؤية واللغة (VL) ذات البنية ثنائية الأبراج على تعلم التمثيل البصري اللغوي في السنوات الأخيرة. تستخدم النماذج الحالية للرؤية واللغة إما مشفرات أحادية النمط خفيفة الوزن وتتعلم استخراج ومواءمة ودمج كلا النمطين بشكل متزامن في مشفر متعدد الأنماط عميق، أو تغذي التمثيلات أحادية النمط من الطبقة الأخيرة من المشفرات أحادية النمط مسبقة التدريب إلى المشفر متعدد الأنماط العلوي. يقيد كلا النهجين من تعلم التمثيل البصري اللغوي ويحد من أداء النموذج. في هذه الورقة، نقترح BRIDGETOWER، الذي يقدم طبقات جسر متعددة تربط بين الطبقات العليا من المشفرات أحادية النمط وكل طبقة من المشفر متعدد الأنماط. يسمح هذا بالمحاذاة والدمج الفعالين من الأسفل إلى الأعلى بين التمثيلات البصرية والنصية لمستويات دلالية مختلفة من المشفرات أحادية النمط مسبقة التدريب في المشفر متعدد الأنماط. حقق BRIDGETOWER، الذي تم تدريبه مسبقًا على 4 ملايين صورة فقط، أداءً متميزًا في مختلف مهام الرؤية واللغة. وعلى وجه التحديد، حقق BRIDGETOWER دقة تبلغ 78.73% على مجموعة اختبار VQAv2 test-std، متجاوزًا نموذج METER الأفضل في فئته بنسبة 1.09% باستخدام نفس بيانات التدريب المسبق وعدد إضافي ضئيل من المعلمات والتكاليف الحسابية. وعند زيادة حجم النموذج، حقق BRIDGETOWER دقة بلغت 81.15%، متفوقًا على النماذج التي تم تدريبها مسبقًا على مجموعات بيانات أكبر بعدة مرات." + + + + بنية BridgeTower. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل أناهيتا بهيوانديوالا، وتييب لي، وشاويين تسنغ. ويمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/BridgeTower). + +## نصائح الاستخدام وأمثلة + +يتكون BridgeTower من مشفر بصري ومشفر نصي ومشفر متعدد الأنماط مع طبقات جسر خفيفة متعددة. ويهدف هذا النهج إلى بناء جسر بين كل مشفر أحادي النمط والمشفر متعدد الأنماط لتمكين التفاعل الشامل والمفصل في كل طبقة من المشفر متعدد الأنماط. + +من حيث المبدأ، يمكن تطبيق أي مشفر بصري أو نصي أو متعدد الأنماط في البنية المقترحة. + +يغلف [`BridgeTowerProcessor`] كلاً من [`RobertaTokenizer`] و [`BridgeTowerImageProcessor`] في مثيل واحد لتشفير النص وإعداد الصور على التوالي. + +يوضح المثال التالي كيفية تشغيل التعلم التبايني باستخدام [`BridgeTowerProcessor`] و [`BridgeTowerForContrastiveLearning`]. + +```python +>>> from transformers import BridgeTowerProcessor, BridgeTowerForContrastiveLearning +>>> import requests +>>> from PIL import Image + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"] + +>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc") +>>> model = BridgeTowerForContrastiveLearning.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc") + +>>> # forward pass +>>> scores = dict() +>>> for text in texts: +... # prepare inputs +... encoding = processor(image, text, return_tensors="pt") +... outputs = model(**encoding) +... scores[text] = outputs +``` + +يوضح المثال التالي كيفية تشغيل الاسترجاع الصوري النصي باستخدام [`BridgeTowerProcessor`] و [`BridgeTowerForImageAndTextRetrieval`]. + +```python +>>> from transformers import BridgeTowerProcessor, BridgeTowerForImageAndTextRetrieval +>>> import requests +>>> from PIL import Image + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"] + +>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") +>>> model = BridgeTowerForImageAndTextRetrieval.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") + +>>> # forward pass +>>> scores = dict() +>>> for text in texts: +... # prepare inputs +... encoding = processor(image, text, return_tensors="pt") +... outputs = model(**encoding) +... scores[text] = outputs.logits[0, 1].item() +``` + +يوضح المثال التالي كيفية تشغيل نمذجة اللغة المقنعة باستخدام [`BridgeTowerProcessor`] و [`BridgeTowerForMaskedLM`]. + +```python +>>> from transformers import BridgeTowerProcessor, BridgeTowerForMaskedLM +>>> from PIL import Image +>>> import requests + +>>> url = "http://images.cocodataset.org/val2017/000000360943.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB") +>>> text = "a looking out of the window" + +>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") +>>> model = BridgeTowerForMaskedLM.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") + +>>> # prepare inputs +>>> encoding = processor(image, text, return_tensors="pt") + +>>> # forward pass +>>> outputs = model(**encoding) + +>>> results = processor.decode(outputs.logits.argmax(dim=-1).squeeze(0).tolist()) + +>>> print(results) +.a cat looking out of the window. +``` + +## نصائح: + +- يستخدم هذا التنفيذ من BridgeTower [`RobertaTokenizer`] لتوليد تضمينات نصية ونموذج CLIP/ViT من OpenAI لحساب التضمينات البصرية. +- تم إصدار نقاط تفتيش مسبقة التدريب لـ [bridgeTower-base](https://huggingface.co/BridgeTower/bridgetower-base) و [bridgetower masked language modeling and image text matching](https://huggingface.co/BridgeTower/bridgetower-base-itm-mlm). +- يرجى الرجوع إلى [الجدول 5](https://arxiv.org/pdf/2206.08657.pdf) لأداء BridgeTower على استرجاع الصور ومهام أخرى. +- إصدار PyTorch من هذا النموذج متاح فقط في PyTorch 1.10 والإصدارات الأحدث. + +## BridgeTowerConfig + +[[autodoc]] BridgeTowerConfig + +## BridgeTowerTextConfig + +[[autodoc]] BridgeTowerTextConfig + +## BridgeTowerVisionConfig + +[[autodoc]] BridgeTowerVisionConfig + +## BridgeTowerImageProcessor + +[[autodoc]] BridgeTowerImageProcessor + +- معالجة مسبقة + +## BridgeTowerProcessor + +[[autodoc]] BridgeTowerProcessor + +- __call__ + +## BridgeTowerModel + +[[autodoc]] BridgeTowerModel + +- forward + +## BridgeTowerForContrastiveLearning + +[[autodoc]] BridgeTowerForContrastiveLearning + +- forward + +## BridgeTowerForMaskedLM + +[[autodoc]] BridgeTowerForMaskedLM + +- forward + +## BridgeTowerForImageAndTextRetrieval + +[[autodoc]] BridgeTowerForImageAndTextRetrieval + +- forward \ No newline at end of file From 6045eb660d5de836bf7579d9d1c21ba651c11dea Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:49 +0300 Subject: [PATCH 388/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/bros.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/bros.md | 107 +++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/source/ar/model_doc/bros.md diff --git a/docs/source/ar/model_doc/bros.md b/docs/source/ar/model_doc/bros.md new file mode 100644 index 00000000000000..d088e88872241d --- /dev/null +++ b/docs/source/ar/model_doc/bros.md @@ -0,0 +1,107 @@ +# BROS + +## نظرة عامة +تم اقتراح نموذج BROS في [BROS: A Pre-trained Language Model Focusing on Text and Layout for Better Key Information Extraction from Documents](https://arxiv.org/abs/2108.04539) بواسطة Teakgyu Hong, Donghyun Kim, Mingi Ji, Wonseok Hwang, Daehyun Nam, Sungrae Park. + +BROS اختصار لـ *BERT Relying On Spatiality*. وهو نموذج محول يعتمد على الترميز فقط يأخذ تسلسل الرموز ونطاقاتهم كمدخلات وينتج عنها تسلسل للحالات المخفية. يقوم BROS بتشفير المعلومات المكانية النسبية بدلاً من استخدام المعلومات المكانية المطلقة. + +تم تدريب النموذج مسبقًا باستخدام هدفين: هدف نمذجة اللغة المقنعة بالرموز (TMLM) المستخدم في BERT، وهدف نمذجة لغة جديدة تعتمد على المساحة (AMLM). + +في TMLM، يتم إخفاء الرموز بشكل عشوائي، ويتوقع النموذج الرموز المخفية باستخدام المعلومات المكانية والرموز الأخرى غير المخفية. + +أما AMLM فهو إصدار ثنائي الأبعاد من TMLM. فهو يقوم بإخفاء رموز النص بشكل عشوائي والتنبؤ بنفس المعلومات مثل TMLM، ولكنه يقوم بإخفاء كتل النص (المساحات). + +يحتوي `BrosForTokenClassification` على طبقة خطية بسيطة أعلى `BrosModel`. فهو يتنبأ بعلامة كل رمز. + +يتميز `BrosSpadeEEForTokenClassification` بـ `initial_token_classifier` و`subsequent_token_classifier` أعلى `BrosModel`. ويُستخدم `initial_token_classifier` للتنبؤ بالرمز الأول لكل كيان، بينما يُستخدم `subsequent_token_classifier` للتنبؤ بالرمز التالي ضمن الكيان. ويحتوي `BrosSpadeELForTokenClassification` على `entity_linker` أعلى `BrosModel`. ويُستخدم `entity_linker` للتنبؤ بالعلاقة بين كيانين. + +يقوم كل من `BrosForTokenClassification` و`BrosSpadeEEForTokenClassification` بنفس المهمة بشكل أساسي. ومع ذلك، يفترض `BrosForTokenClassification` أن رموز الإدخال مسلسلة بشكل مثالي (وهي مهمة صعبة للغاية لأنها موجودة في مساحة ثنائية الأبعاد)، في حين يسمح `BrosSpadeEEForTokenClassification` بالمرونة في التعامل مع أخطاء التسلسل لأنه يتنبأ برموز الاتصال التالية من رمز واحد. + +يقوم `BrosSpadeELForTokenClassification` بمهمة الربط داخل الكيان. فهو يتنبأ بالعلاقة من رمز واحد (لكيان واحد) إلى رمز آخر (لكيان آخر) إذا كان هذان الكيانان يتشاركان في بعض العلاقات. + +يحقق BROS نتائج مماثلة أو أفضل في استخراج المعلومات الأساسية (KIE) مثل FUNSD، SROIE، CORD وSciTSR، دون الاعتماد على الميزات المرئية الصريحة. + +ملخص الورقة البحثية هو كما يلي: + +> تتطلب عملية استخراج المعلومات الأساسية (KIE) من صور المستندات فهم الدلالات السياقية والمكانية للنصوص في مساحة ثنائية الأبعاد. وتحاول العديد من الدراسات الحديثة حل المهمة من خلال تطوير نماذج اللغة التي تم تدريبها مسبقًا والتي تركز على دمج الميزات المرئية من صور المستندات مع النصوص وتخطيطها. من ناحية أخرى، تتناول هذه الورقة المشكلة من خلال العودة إلى الأساسيات: الدمج الفعال للنص والتخطيط. نقترح نموذج لغة تم تدريبه مسبقًا، يسمى BROS (BERT Relying On Spatiality)، والذي يقوم بتشفير المواضع النسبية للنصوص في مساحة ثنائية الأبعاد ويتعلم من المستندات غير المعنونة باستخدام إستراتيجية التعتيم على المناطق. مع هذا المخطط التدريبي المحسن لفهم النصوص في مساحة ثنائية الأبعاد، يظهر BROS أداءً مماثلاً أو أفضل مقارنة بالطرق السابقة في أربعة مقاييس لتقييم استخراج المعلومات الأساسية (FUNSD، SROIE*، CORD، وSciTSR) دون الاعتماد على الميزات المرئية. تكشف هذه الورقة أيضًا عن تحديين حقيقيين في مهام استخراج المعلومات الأساسية - (1) تقليل الخطأ الناتج عن ترتيب النص غير الصحيح و(2) التعلم الفعال من أمثلة المصب القليلة - وتوضح تفوق BROS على الطرق السابقة. + +تمت المساهمة بهذا النموذج من قبل [jinho8345](https://huggingface.co/jinho8345). يمكن العثور على الكود الأصلي [هنا](https://github.com/clovaai/bros). + +## نصائح الاستخدام والأمثلة + +- يتطلب [`~transformers.BrosModel.forward`] `input_ids` و`bbox` (نطاق التصويب). يجب أن يكون كل نطاق تصويب بتنسيق (x0, y0, x1, y1) (الركن العلوي الأيسر، الركن السفلي الأيمن). يعتمد الحصول على نطاقات التصويب على نظام التعرف البصري على الحروف (OCR) الخارجي. يجب تطبيع إحداثية `x` عن طريق عرض صورة المستند، ويجب تطبيع إحداثية `y` عن طريق ارتفاع صورة المستند. + +```python +def expand_and_normalize_bbox(bboxes, doc_width, doc_height): +# هنا، bboxes هي مصفوفة numpy + +# تطبيع النطاق -> 0 ~ 1 +bboxes[:, [0, 2]] = bboxes[:, [0, 2]] / width +bboxes[:, [1, 3]] = bboxes[:, [1, 3]] / height +``` + +- تتطلب [`~transformers.BrosForTokenClassification.forward`]، و[`~transformers.BrosSpadeEEForTokenClassification.forward`]، و[`~transformers.BrosSpadeEEForTokenClassification.forward`] ليس فقط `input_ids` و`bbox` ولكن أيضًا `box_first_token_mask` لحساب الخسارة. وهي قناع لتصفية الرموز غير الأولى لكل نطاق. يمكنك الحصول على هذا القناع عن طريق حفظ مؤشرات الرموز الأولى لنطاقات التصويب عند إنشاء `input_ids` من الكلمات. يمكنك إنشاء `box_first_token_mask` باستخدام الكود التالي: + +```python +def make_box_first_token_mask(bboxes, words, tokenizer, max_seq_length=512): + + box_first_token_mask = np.zeros(max_seq_length, dtype=np.bool_) + + # تشفير (ترميز) كل كلمة من الكلمات (List[str]) + input_ids_list: List[List[int]] = [tokenizer.encode(e, add_special_tokens=False) for e in words] + + # الحصول على طول كل نطاق + tokens_length_list: List[int] = [len(l) for l in input_ids_list] + + box_end_token_indices = np.array(list(itertools.accumulate(tokens_length_list))) + box_start_token_indices = box_end_token_indices - np.array(tokens_length_list) + + # تصفية المؤشرات التي تتجاوز max_seq_length + box_end_token_indices = box_end_token_indices[box_end_token_indices < max_seq_length - 1] + if len(box_start_token_indices) > len(box_end_token_indices): + box_start_token_indices = box_start_token_indices[: len(box_end_token_indices)] + + # تعيين box_start_token_indices إلى True + box_first_token_mask[box_start_token_indices] = True + + return box_first_token_mask + +``` + +## الموارد + +- يمكن العثور على نصوص العرض التوضيحي [هنا](https://github.com/clovaai/bros). + +## BrosConfig + +[[autodoc]] BrosConfig + +## BrosProcessor + +[[autodoc]] BrosProcessor + +- __call__ + +## BrosModel + +[[autodoc]] BrosModel + +- forward + +## BrosForTokenClassification + +[[autodoc]] BrosForTokenClassification + +- forward + +## BrosSpadeEEForTokenClassification + +[[autodoc]] BrosSpadeEEForTokenClassification + +- forward + +## BrosSpadeELForTokenClassification + +[[autodoc]] BrosSpadeELForTokenClassification + +- forward \ No newline at end of file From 25af859a0034a7d1881f94b2efa87c96efe38abb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:51 +0300 Subject: [PATCH 389/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/byt5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/byt5.md | 117 +++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/source/ar/model_doc/byt5.md diff --git a/docs/source/ar/model_doc/byt5.md b/docs/source/ar/model_doc/byt5.md new file mode 100644 index 00000000000000..7cfc2ca26081a7 --- /dev/null +++ b/docs/source/ar/model_doc/byt5.md @@ -0,0 +1,117 @@ +# ByT5 + +## نظرة عامة + +تم تقديم نموذج ByT5 في ورقة بحثية بعنوان: [ByT5: Towards a token-free future with pre-trained byte-to-byte models](https://arxiv.org/abs/2105.13626) بواسطة Linting Xue و Aditya Barua و Noah Constant و Rami Al-Rfou و Sharan Narang و Mihir Kale و Adam Roberts و Colin Raffel. + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +*تعمل معظم نماذج اللغة المُدربة مسبقًا على نطاق واسع على تسلسلات من الرموز التي تتوافق مع وحدات الكلمات أو الوحدات الفرعية للكلمات. يتطلب ترميز النص كتسلسل من الرموز محللًا نحويًا، والذي يتم إنشاؤه عادةً كأثر مستقل عن النموذج. وللنّماذج الخالية من الرموز والتي تعمل مباشرةً على النص الخام (البايتات أو الأحرف) العديد من المزايا: فيمكنها معالجة النص بأي لغة بشكل افتراضي، وهي أكثر مقاومة للضوضاء، وتقلل من الديون التقنية عن طريق إزالة أنابيب المعالجة المسبقة للنص المعقدة والمعرضة للأخطاء. وبما أن تسلسلات البايتات أو الأحرف أطول من تسلسلات الرموز، فقد قدم العمل السابق حول النماذج الخالية من الرموز في كثير من الأحيان تصميمات معمارية جديدة للنماذج تهدف إلى استهلاك تكلفة العمل مباشرةً على النص الخام. وفي هذه الورقة، نُظهر أنه يمكن استخدام بنية Transformer القياسية مع تعديلات طفيفة لمعالجة تسلسلات البايتات. ونقوم بتحديد المقايضات بدقة من حيث عدد المعلمات، وFLOPs التدريب، وسرعة الاستدلال، ونُظهر أن النماذج على مستوى البايت تنافسية مع نظيراتها على مستوى الرموز. كما نُظهر أن النماذج على مستوى البايت أكثر مقاومة للضوضاء بشكل كبير، وتؤدي أداءً أفضل في المهام التي تتأثر بالإملاء والنطق. وكجزء من مساهمتنا، نقوم بإطلاق مجموعة جديدة من النماذج المُدربة مسبقًا على مستوى البايت والقائمة على بنية Transformer، بالإضافة إلى جميع الرموز والبيانات المستخدمة في تجاربنا.* + +تمت المساهمة بهذا النموذج من قبل [patrickvonplaten](https://huggingface.co/patrickvonplaten). ويمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/byt5). + + + +تستند بنية ByT5 إلى نموذج T5v1.1، راجع [صفحة وثائق T5v1.1](t5v1.1) للمرجع الخاص بواجهة برمجة التطبيقات (API). ويختلفان فقط في كيفية إعداد المدخلات للنموذج، راجع أمثلة الكود أدناه. + + + +نظرًا لأن ByT5 تم تدريبه بشكل غير خاضع للإشراف، فلا توجد ميزة حقيقية لاستخدام بادئة المهمة أثناء الضبط الدقيق أحادي المهمة. إذا كنت تقوم بالضبط الدقيق متعدد المهام، فيجب عليك استخدام بادئة. + +## مثال على الاستخدام + +يعمل ByT5 على بايتات UTF-8 الخام، لذلك يمكن استخدامه بدون محلل نحوي: + +```python +>>> from transformers import T5ForConditionalGeneration +>>> import torch + +>>> model = T5ForConditionalGeneration.from_pretrained("google/byt5-small") + +>>> num_special_tokens = 3 +>>> # Model has 3 special tokens which take up the input ids 0,1,2 of ByT5. +>>> # => Need to shift utf-8 character encodings by 3 before passing ids to model. + +>>> input_ids = torch.tensor([list("Life is like a box of chocolates.".encode("utf-8"))]) + num_special_tokens + +>>> labels = torch.tensor([list("La vie est comme une boîte de chocolat.".encode("utf-8"))]) + num_special_tokens + +>>> loss = model(input_ids, labels=labels).loss +>>> loss.item() +2.66 +``` + +ومع ذلك، يُنصح باستخدام المحلل النحوي للضبط الدقيق والتنبؤ بالدفعات: + +```python +>>> from transformers import T5ForConditionalGeneration, AutoTokenizer + +>>> model = T5ForConditionalGeneration.from_pretrained("google/byt5-small") +>>> tokenizer = AutoTokenizer.from_pretrained("google/byt5-small") + +>>> model_inputs = tokenizer( +... ["Life is like a box of chocolates.", "Today is Monday."], padding="longest", return_tensors="pt" +... ) +>>> labels_dict = tokenizer( +... ["La vie est comme une boîte de chocolat.", "Aujourd'hui c'est lundi."], padding="longest", return_tensors="pt" +... ) +>>> labels = labels_dict.input_ids + +>>> loss = model(**model_inputs, labels=labels).loss +>>> loss.item() +17.9 +``` + +على غرار [T5](t5)، تم تدريب ByT5 على مهمة إخفاء القناع. ومع ذلك، نظرًا لأن النموذج يعمل مباشرةً على الأحرف، فإن مهمة التدريب المسبق مختلفة قليلًا. دعونا نقوم بإفساد بعض أحرف الجملة التالية: `"The dog chases a ball in the park."` ونسأل ByT5 أن يتنبأ بها من أجلنا. + +```python +>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM +>>> import torch + +>>> tokenizer = AutoTokenizer.from_pretrained("google/byt5-base") +>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/byt5-base") + +>>> input_ids_prompt = "The dog chases a ball in the park." +>>> input_ids = tokenizer(input_ids_prompt).input_ids + +>>> # Note that we cannot add "{extra_id_...}" to the string directly +>>> # as the Byte tokenizer would incorrectly merge the tokens +>>> # For ByT5, we need to work directly on the character level +>>> # Contrary to T5, ByT5 does not use sentinel tokens for masking, but instead +>>> # uses final utf character ids. +>>> # UTF-8 is represented by 8 bits and ByT5 has 3 special tokens. +>>> # => There are 2**8+2 = 259 input ids and mask tokens count down from index 258. +>>> # => mask to "The dog [258]a ball [257]park." + +>>> input_ids = torch.tensor([input_ids[:8] + [258] + input_ids[14:21] + [257] + input_ids[28:]]) +>>> input_ids +tensor([[ 87, 107, 104, 35, 103, 114, 106, 35, 258, 35, 100, 35, 101, 100, 111, 111, 257, 35, 115, 100, 111, 110, 49, 1]]) + +>>> # ByT5 produces only one char at a time so we need to produce many more output characters here -> set `max_length=100`. +>>> output_ids = model.generate(input_ids, max_length=100)[0].tolist() +>>> output_ids +[0, 258, 108, 118, 35, 119, 107, 104, 35, 114, 113, 104, 35, 122, 107, 114, 35, 103, 114, 104, 118, 257, 35, 108, 113, 35, 119, 107, 104, 35, 103, 108, 118, 102, 114, 256, 108, 113, 35, 119, 107, 104, 35, 115, 100, 117, 110, 49, 35, 87, 107, 104, 35, 103, 114, 106, 35, 108, 118, 35, 119, 107, 104, 35, 114, 113, 104, 35, 122, 107, 114, 35, 103, 114, 104, 118, 35, 100, 35, 101, 100, 111, 111, 35, 108, 113, 255, 35, 108, 113, 35, 119, 107, 104, 35, 115, 100, 117, 110, 49] + +>>> # ^- Note how 258 descends to 257, 256, 255 + +>>> # Now we need to split on the sentinel tokens, let's write a short loop for this +>>> output_ids_list = [] +>>> start_token = 0 +>>> sentinel_token = 258 +>>> while sentinel_token in output_ids: +... split_idx = output_ids.index(sentinel_token) +... output_ids_list.append(output_ids[start_token:split_idx]) +... start_token = split_idx +... sentinel_token -= 1 + +>>> output_ids_list.append(output_ids[start_token:]) +>>> output_string = tokenizer.batch_decode(output_ids_list) +>>> output_string +['', 'is the one who does', ' in the disco', 'in the park. The dog is the one who does a ball in', ' in the park.'] +``` + +## ByT5Tokenizer + +[[autodoc]] ByT5Tokenizer + +راجع [`ByT5Tokenizer`] للحصول على جميع التفاصيل. \ No newline at end of file From 12569c5e8357ba02dddb6e88f92a6901ed0b7264 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:53 +0300 Subject: [PATCH 390/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/camembert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/camembert.md | 110 ++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 docs/source/ar/model_doc/camembert.md diff --git a/docs/source/ar/model_doc/camembert.md b/docs/source/ar/model_doc/camembert.md new file mode 100644 index 00000000000000..15499fab8c70f5 --- /dev/null +++ b/docs/source/ar/model_doc/camembert.md @@ -0,0 +1,110 @@ +# CamemBERT + +## نظرة عامة +تم اقتراح نموذج CamemBERT في ورقة بحثية بعنوان [CamemBERT: a Tasty French Language Model](https://arxiv.org/abs/1911.03894) بواسطة Louis Martin وآخرون. وهو مبني على نموذج RoBERTa الذي أصدرته شركة فيسبوك في عام 2019. وقد تم تدريب النموذج على 138 جيجابايت من النصوص باللغة الفرنسية. + +ملخص الورقة البحثية هو كما يلي: + +*تعتبر النماذج اللغوية المعالجة مسبقًا منتشرة الآن على نطاق واسع في معالجة اللغات الطبيعية. وعلى الرغم من نجاحها، إلا أن معظم النماذج المتاحة تم تدريبها إما على بيانات باللغة الإنجليزية أو على ربط بيانات من عدة لغات. وهذا يجعل الاستخدام العملي لمثل هذه النماذج -في جميع اللغات باستثناء الإنجليزية- محدودًا جدًا. بهدف معالجة هذه المشكلة بالنسبة للغة الفرنسية، نقدم CamemBERT، وهو إصدار باللغة الفرنسية من النماذج ثنائية الاتجاه للمتحولين (BERT). نقيس أداء CamemBERT مقارنة بالنماذج متعددة اللغات في مهام تدفق متعددة، وهي تحديد أجزاء الكلام، وتحليل الإعراب، وتعريف الكيانات المسماة، والاستدلال اللغوي الطبيعي. يحسن CamemBERT حالة الفن في معظم المهام التي تم أخذها في الاعتبار. نقوم بإطلاق النموذج المعالج مسبقًا لـ CamemBERT على أمل تعزيز البحث والتطبيقات اللاحقة لمعالجة اللغة الطبيعية باللغة الفرنسية.* + +تمت المساهمة بهذا النموذج من قبل فريق ALMAnaCH (Inria). يمكن العثور على الكود الأصلي [هنا](https://camembert-model.fr/). + + + +هذا التنفيذ هو نفسه في RoBERTa. راجع [توثيق RoBERTa](roberta) للحصول على أمثلة الاستخدام بالإضافة إلى المعلومات المتعلقة بالمدخلات والمخرجات. + + + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## CamembertConfig + +[[autodoc]] CamembertConfig + +## CamembertTokenizer + +[[autodoc]] CamembertTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## CamembertTokenizerFast + +[[autodoc]] CamembertTokenizerFast + + + + + +## CamembertModel + +[[autodoc]] CamembertModel + +## CamembertForCausalLM + +[[autodoc]] CamembertForCausalLM + +## CamembertForMaskedLM + +[[autodoc]] CamembertForMaskedLM + +## CamembertForSequenceClassification + +[[autodoc]] CamembertForSequenceClassification + +## CamembertForMultipleChoice + +[[autodoc]] CamembertForMultipleChoice + +## CamembertForTokenClassification + +[[autodoc]] CamembertForTokenClassification + +## CamembertForQuestionAnswering + +[[autodoc]] CamembertForQuestionAnswering + + + + + +## TFCamembertModel + +[[autodoc]] TFCamembertModel + +## TFCamembertForCausalLM + +[[autodoc]] TFCamembertForCausalLM + +## TFCamembertForMaskedLM + +[[autodoc]] TFCamembertForMaskedLM + +## TFCamembertForSequenceClassification + +[[autodoc]] TFCamembertForSequenceClassification + +## TFCamembertForMultipleChoice + +[[autodoc]] TFCamembertForMultipleChoice + +## TFCamembertForTokenClassification + +[[autodoc]] TFCamembertForTokenClassification + +## TFCamembertForQuestionAnswering + +[[autodoc]] TFCamembertForQuestionAnswering + + + + \ No newline at end of file From 333f4947a183b25915db8b7d5ba44edce534ebaa Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:55 +0300 Subject: [PATCH 391/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/canine.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/canine.md | 118 +++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 docs/source/ar/model_doc/canine.md diff --git a/docs/source/ar/model_doc/canine.md b/docs/source/ar/model_doc/canine.md new file mode 100644 index 00000000000000..15440b7044aa17 --- /dev/null +++ b/docs/source/ar/model_doc/canine.md @@ -0,0 +1,118 @@ +# CANINE + +## نظرة عامة + +اقتُرح نموذج CANINE في الورقة البحثية المعنونة "CANINE: Pre-training an Efficient Tokenization-Free Encoder for Language Representation" بواسطة Jonathan H. Clark وDan Garrette وIulia Turc وJohn Wieting. وتعد هذه الورقة من أوائل الأوراق التي تدرب محولًا بدون استخدام خطوة تمييز صريح (مثل ترميز زوج البايت أو WordPiece أو SentencePiece). وبدلاً من ذلك، يتم تدريب النموذج مباشرة على مستوى أحرف Unicode. ويأتي التدريب على مستوى الأحرف حتمًا بطول تسلسل أطول، والذي يحله CANINE باستخدام استراتيجية تقليل فعالة، قبل تطبيق محول ترميز عميق. + +وفيما يلي الملخص المستخرج من الورقة: + +*على الرغم من أن أنظمة NLP المتسلسلة قد حلت محلها إلى حد كبير نمذجة عصبية من النهاية إلى النهاية، إلا أن معظم النماذج الشائعة الاستخدام لا تزال تتطلب خطوة تمييز صريحة. وفي حين أن أساليب التمييز الحديثة القائمة على معاجم الكلمات الفرعية المستمدة من البيانات أقل هشاشة من أدوات التمييز المصممة يدويًا، إلا أن هذه التقنيات لا تناسب جميع اللغات، وقد تحد أي مفردات ثابتة من قدرة النموذج على التكيف. وفي هذه الورقة، نقدم CANINE، وهو محول عصبي يعمل مباشرة على تسلسلات الأحرف، بدون تمييز أو مفردات صريحة، واستراتيجية تدريب مسبق تعمل إما مباشرة على الأحرف أو تستخدم الكلمات الفرعية كتحيز استقرائي ناعم. ولاستخدام مدخلاته الدقيقة بشكل فعال وكفء، يجمع CANINE بين تقليل العينات، الذي يقلل من طول تسلسل المدخلات، مع مكدس محول الترميز العميق، الذي يشفر السياق. ويتفوق CANINE على نموذج mBERT المماثل بمقدار 2.8 F1 على TyDi QA، وهو معيار مرجعي متعدد اللغات، على الرغم من أن لديه 28% معلمات نموذج أقل.* + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/language/tree/master/language/canine). + +## نصائح الاستخدام + +- يستخدم CANINE داخليًا ما لا يقل عن 3 محولات ترميز: محولان "ضحلان" (يتكونان من طبقة واحدة فقط) ومحول ترميز "عميق" (وهو محول ترميز BERT عادي). أولاً، يتم استخدام محول ترميز "ضحل" لسياق تضمين الأحرف، باستخدام الانتباه المحلي. بعد ذلك، بعد تقليل العينات، يتم تطبيق محول الترميز "العميق". وأخيراً، بعد زيادة العينات، يتم استخدام محول ترميز "ضحل" لإنشاء تضمين الأحرف النهائي. يمكن العثور على التفاصيل المتعلقة بزيادة وتقليل العينات في الورقة. + +- يستخدم CANINE بشكل افتراضي طول تسلسل أقصاه 2048 حرفًا. يمكن استخدام [`CanineTokenizer`] لإعداد النص للنموذج. + +- يمكن إجراء التصنيف عن طريق وضع طبقة خطية أعلى حالة الإخفاء النهائية للرمز الخاص [CLS] (الذي له نقطة رمز Unicode محددة مسبقًا). ومع ذلك، بالنسبة لمهام تصنيف الرموز، يجب زيادة تسلسل الرموز المخفضة مرة أخرى لمطابقة طول تسلسل الأحرف الأصلي (الذي يبلغ 2048). يمكن العثور على التفاصيل الخاصة بذلك في الورقة. + +نقاط تفتيش النموذج: + +- [google/canine-c](https://huggingface.co/google/canine-c): تم التدريب المسبق باستخدام خسارة الأحرف ذاتية الارتباط، 12 طبقة، 768 مخفية، 12 رأسًا، 121 مليون معلمة (الحجم ~500 ميجابايت). + +- [google/canine-s](https://huggingface.co/google/canine-s): تم التدريب المسبق باستخدام خسارة الكلمات الفرعية، 12 طبقة، 768 مخفية، 12 رأسًا، 121 مليون معلمة (الحجم ~500 ميجابايت). + +## مثال على الاستخدام + +يعمل CANINE على الأحرف الخام، لذا يمكن استخدامه **بدون أداة تمييز**: + +```python +>>> from transformers import CanineModel +>>> import torch + +>>> model = CanineModel.from_pretrained("google/canine-c") # model pre-trained with autoregressive character loss + +>>> text = "hello world" +>>> # use Python's built-in ord() function to turn each character into its unicode code point id +>>> input_ids = torch.tensor([[ord(char) for char in text]]) + +>>> outputs = model(input_ids) # forward pass +>>> pooled_output = outputs.pooler_output +>>> sequence_output = outputs.last_hidden_state +``` + +بالنسبة للاستدلال بالدفعات والتدريب، يوصى مع ذلك باستخدام أداة التمييز (لضبط/اقتصاص جميع التسلسلات إلى نفس الطول): + +```python +>>> from transformers import CanineTokenizer, CanineModel + +>>> model = CanineModel.from_pretrained("google/canine-c") +>>> tokenizer = CanineTokenizer.from_pretrained("google/canine-c") + +>>> inputs = ["Life is like a box of chocolates.", "You never know what you gonna get."] +>>> encoding = tokenizer(inputs, padding="longest", truncation=True, return_tensors="pt") + +>>> outputs = model(**encoding) # forward pass +>>> pooled_output = outputs.pooler_output +>>> sequence_output = outputs.last_hidden_state +``` + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) + +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) + +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) + +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## CanineConfig + +[[autodoc]] CanineConfig + +## CanineTokenizer + +[[autodoc]] CanineTokenizer + +- build_inputs_with_special_tokens + +- get_special_tokens_mask + +- create_token_type_ids_from_sequences + +## المخرجات الخاصة بـ CANINE + +[[autodoc]] models.canine.modeling_canine.CanineModelOutputWithPooling + +## CanineModel + +[[autodoc]] CanineModel + +- forward + +## CanineForSequenceClassification + +[[autodoc]] CanineForSequenceClassification + +- forward + +## CanineForMultipleChoice + +[[autodoc]] CanineForMultipleChoice + +- forward + +## CanineForTokenClassification + +[[autodoc]] CanineForTokenClassification + +- forward + +## CanineForQuestionAnswering + +[[autodoc]] CanineForQuestionAnswering + +- forward \ No newline at end of file From d3935fec534890436062fa2a320a46350fb369d3 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:56 +0300 Subject: [PATCH 392/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/chinese=5Fclip.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/chinese_clip.md | 102 +++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/source/ar/model_doc/chinese_clip.md diff --git a/docs/source/ar/model_doc/chinese_clip.md b/docs/source/ar/model_doc/chinese_clip.md new file mode 100644 index 00000000000000..7776bb25914099 --- /dev/null +++ b/docs/source/ar/model_doc/chinese_clip.md @@ -0,0 +1,102 @@ +# Chinese-CLIP + +## نظرة عامة +تم اقتراح نموذج Chinese-CLIP في الورقة البحثية بعنوان "Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese" بواسطة An Yang و Junshu Pan و Junyang Lin و Rui Men و Yichang Zhang و Jingren Zhou و Chang Zhou. + +نموذج Chinese-CLIP هو تطبيق لنموذج CLIP (Radford et al.، 2021) على مجموعة بيانات ضخمة من أزواج الصور والنصوص المكتوبة باللغة الصينية. يتميز النموذج بالقدرة على إجراء الاسترجاع عبر الوسائط، كما يمكن استخدامه كعمود فقري للمهام البصرية مثل تصنيف الصور بدون الإشراف والتعرف على الأشياء في النطاق المفتوح، وما إلى ذلك. تم إصدار الكود الأصلي لنموذج Chinese-CLIP [على هذا الرابط](https://github.com/OFA-Sys/Chinese-CLIP). + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +*حقق نموذج CLIP (Radford et al.، 2021) نجاحًا هائلاً، مما عزز البحث والتطبيق في مجال التعلم التمييزي للتمثيل المسبق للرؤية واللغة. وفي هذا العمل، نقوم ببناء مجموعة بيانات ضخمة من أزواج الصور والنصوص باللغة الصينية، حيث تم استخراج معظم البيانات من مجموعات البيانات المتاحة للعموم، ثم نقوم بتدريب نماذج Chinese CLIP على مجموعة البيانات الجديدة. قمنا بتطوير 5 نماذج Chinese CLIP بأحجام متعددة، تتراوح من 77 إلى 958 مليون معامل. علاوة على ذلك، نقترح طريقة تدريب مكونة من مرحلتين، حيث يتم تدريب النموذج أولاً مع تثبيت مشفر الصور، ثم يتم تدريبه مع تحسين جميع المعلمات، وذلك لتحقيق أداء أفضل للنموذج. تُظهر تجاربنا الشاملة أن نموذج Chinese CLIP يمكن أن يحقق أداءً متميزًا على MUGE و Flickr30K-CN و COCO-CN في إعدادات التعلم بدون إشراف وتنقيح الدقة، كما أنه قادر على تحقيق أداء تنافسي في تصنيف الصور بدون إشراف بناءً على التقييم على معيار ELEVATER (Li et al.، 2022). وقد تم إصدار أكوادنا والنماذج التي تم تدريبها مسبقًا والعروض التوضيحية.* + +تمت المساهمة في نموذج Chinese-CLIP بواسطة [OFA-Sys](https://huggingface.co/OFA-Sys). + +## مثال على الاستخدام +يوضح مقتطف الكود التالي كيفية حساب ميزات الصور والنصوص ومستويات التشابه بينها: + +```python +>>> from PIL import Image +>>> import requests +>>> from transformers import ChineseCLIPProcessor, ChineseCLIPModel + +>>> model = ChineseCLIPModel.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16") +>>> processor = ChineseCLIPProcessor.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16") + +>>> url = "https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/pokemon.jpeg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> # Squirtle, Bulbasaur, Charmander, Pikachu in English +>>> texts = ["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"] + +>>> # compute image feature +>>> inputs = processor(images=image, return_tensors="pt") +>>> image_features = model.get_image_features(**inputs) +>>> image_features = image_features / image_features.norm(p=2, dim=-1, keepdim=True) # normalize + +>>> # compute text features +>>> inputs = processor(text=texts, padding=True, return_tensors="pt") +>>> text_features = model.get_text_features(**inputs) +>>> text_features = text_features / text_features.norm(p=2, dim=-1, keepdim=True) # normalize + +>>> # compute image-text similarity scores +>>> inputs = processor(text=texts, images=image, return_tensors="pt", padding=True) +>>> outputs = model(**inputs) +>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score +>>> probs = logits_per_image.softmax(dim=1) # probs: [[1.2686e-03, 5.4499e-02, 6.7968e-04, 9.4355e-01]] +``` + +حاليًا، تتوفر النماذج المُدربة مسبقًا التالية لنموذج Chinese-CLIP على منصة 🤗 Hub بالأحجام المختلفة: + +- [OFA-Sys/chinese-clip-vit-base-patch16](https://huggingface.co/OFA-Sys/chinese-clip-vit-base-patch16) +- [OFA-Sys/chinese-clip-vit-large-patch14](https://huggingface.co/OFA-Sys/chinese-clip-vit-large-patch14) +- [OFA-Sys/chinese-clip-vit-large-patch14-336px](https://huggingface.co/OFA-Sys/chinese-clip-vit-large-patch14-336px) +- [OFA-Sys/chinese-clip-vit-huge-patch14](https://huggingface.co/OFA-Sys/chinese-clip-vit-huge-patch14) + +## ChineseCLIPConfig + +[[autodoc]] ChineseCLIPConfig + +- from_text_vision_configs + +## ChineseCLIPTextConfig + +[[autodoc]] ChineseCLIPTextConfig + +## ChineseCLIPVisionConfig + +[[autodoc]] ChineseCLIPVisionConfig + +## ChineseCLIPImageProcessor + +[[autodoc]] ChineseCLIPImageProcessor + +- preprocess + +## ChineseCLIPFeatureExtractor + +[[autodoc]] ChineseCLIPFeatureExtractor + +## ChineseCLIPProcessor + +[[autodoc]] ChineseCLIPProcessor + +## ChineseCLIPModel + +[[autodoc]] ChineseCLIPModel + +- forward + +- get_text_features + +- get_image_features + +## ChineseCLIPTextModel + +[[autodoc]] ChineseCLIPTextModel + +- forward + +## ChineseCLIPVisionModel + +[[autodoc]] ChineseCLIPVisionModel + +- forward \ No newline at end of file From 2f8a3d2daad0554232cc7ba3b3704284e2011724 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:23:58 +0300 Subject: [PATCH 393/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/clap.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/clap.md | 71 ++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/source/ar/model_doc/clap.md diff --git a/docs/source/ar/model_doc/clap.md b/docs/source/ar/model_doc/clap.md new file mode 100644 index 00000000000000..aee2866544e28e --- /dev/null +++ b/docs/source/ar/model_doc/clap.md @@ -0,0 +1,71 @@ +# CLAP + +## نظرة عامة +تم اقتراح نموذج CLAP في [Large Scale Contrastive Language-Audio pretraining with feature fusion and keyword-to-caption augmentation](https://arxiv.org/pdf/2211.06687.pdf) بواسطة Yusong Wu و Ke Chen و Tianyu Zhang و Yuchen Hui و Taylor Berg-Kirkpatrick و Shlomo Dubnov. + +CLAP (Contrastive Language-Audio Pretraining) هي شبكة عصبية تم تدريبها على مجموعة متنوعة من أزواج (الصوت، النص). يمكن توجيهه للتنبؤ بمقطع النص الأكثر ملاءمة، بالنظر إلى الصوت، دون تحسين المهمة مباشرةً. يستخدم نموذج CLAP محول SWINTransformer لاستخراج ميزات الصوت من مدخلات مخطط Mel اللوغاريتمي، ونموذج RoBERTa للحصول على ميزات النص. بعد ذلك، يتم إسقاط كل من ميزات النص والصوت إلى مساحة كامنة ذات أبعاد متطابقة. ثم يتم استخدام حاصل الضرب النقطي بين ميزات الصوت والنص المسقط كدرجة تشابه. + +الملخص من الورقة هو كما يلي: + +> أظهر التعلم التبايني نجاحًا ملحوظًا في مجال تعلم التمثيل متعدد الوسائط. في هذه الورقة، نقترح خط أنابيب للتعلم التبايني للغة الصوت لتطوير تمثيل صوتي من خلال دمج بيانات الصوت مع أوصاف اللغة الطبيعية. لتحقيق هذا الهدف، نقوم أولاً بإصدار LAION-Audio-630K، وهو مجموعة كبيرة من 633,526 زوجًا من الصوت والنص من مصادر بيانات مختلفة. ثانيًا، نقوم ببناء نموذج للتعلم التبايني للغة الصوت من خلال مراعاة مختلف برامج ترميز الصوت ومشفرات النص. ندمج آلية دمج الميزات وتعزيز الكلمات الرئيسية إلى العناوين في تصميم النموذج لتمكين النموذج بشكل أكبر من معالجة إدخالات الصوت ذات الأطوال المتغيرة وتعزيز الأداء. ثالثًا، نقوم بإجراء تجارب شاملة لتقييم نموذجنا عبر ثلاث مهام: استرجاع النص إلى الصوت، والتصنيف الصوتي باستخدام الصفر، والتصنيف الصوتي الخاضع للإشراف. تُظهر النتائج أن نموذجنا يحقق أداءً متفوقًا في مهمة استرجاع النص إلى الصوت. في مهام التصنيف الصوتي، يحقق النموذج أداءً متميزًا في إعداد الصفر ويتمكن من الحصول على أداء قابل للمقارنة مع نتائج النماذج في الإعداد غير الصفري. LAION-Audio-6 + +تمت المساهمة بهذا النموذج من قبل [Younes Belkada](https://huggingface.co/ybelkada) و [Arthur Zucker](https://huggingface.co/ArthurZ). +يمكن العثور على الكود الأصلي [هنا](https://github.com/LAION-AI/Clap). + +## ClapConfig + +[[autodoc]] ClapConfig + +- from_text_audio_configs + +## ClapTextConfig + +[[autodoc]] ClapTextConfig + +## ClapAudioConfig + +[[autodoc]] ClapAudioConfig + +## ClapFeatureExtractor + +[[autodoc]] ClapFeatureExtractor + +## ClapProcessor + +[[autodoc]] ClapProcessor + +## ClapModel + +[[autodoc]] ClapModel + +- forward + +- get_text_features + +- get_audio_features + +## ClapTextModel + +[[autodoc]] ClapTextModel + +- forward + +## ClapTextModelWithProjection + + +[[autodoc]] ClapTextModelWithProjection + +- forward + +## ClapAudioModel + +[[autodoc]] ClapAudioModel + +- forward + +## ClapAudioModelWithProjection + + +[[autodoc]] ClapAudioModelWithProjection + +- forward \ No newline at end of file From 6d1f60b96350cef90fc32e24a9da2b58d8f3e374 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:00 +0300 Subject: [PATCH 394/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/clip.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/clip.md | 201 +++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 docs/source/ar/model_doc/clip.md diff --git a/docs/source/ar/model_doc/clip.md b/docs/source/ar/model_doc/clip.md new file mode 100644 index 00000000000000..a5fb367440cdea --- /dev/null +++ b/docs/source/ar/model_doc/clip.md @@ -0,0 +1,201 @@ +# CLIP + +## نظرة عامة + +اقترح نموذج CLIP في ورقة البحث [Learning Transferable Visual Models From Natural Language Supervision](https://arxiv.org/abs/2103.00020) من قبل Alec Radford و Jong Wook Kim و Chris Hallacy و Aditya Ramesh و Gabriel Goh و Sandhini Agarwal و Girish Sastry و Amanda Askell و Pamela Mishkin و Jack Clark و Gretchen Krueger و Ilya Sutskever. CLIP (Contrastive Language-Image Pre-Training) هي شبكة عصبية مدربة على مجموعة متنوعة من أزواج (الصورة، النص). يمكن توجيهه باستخدام اللغة الطبيعية للتنبؤ بأكثر جزء من النص ملاءمة، بالنظر إلى صورة، دون التحسين المباشر للمهمة، على غرار القدرات ذات الصفر للتصوير المقطعي GPT-2 و 3. + +الملخص من الورقة هو ما يلي: + +> "تدرب أنظمة رؤية الكمبيوتر المتقدمة على التنبؤ بمجموعة ثابتة من فئات الكائنات المحددة مسبقًا. تحد هذه الصيغة المقيدة من الإشراف من عموميتها وقابليتها للاستخدام نظرًا للحاجة إلى بيانات موسومة إضافية لتحديد أي مفهوم بصري آخر. التعلم مباشرة من النص الخام حول الصور هو بديل واعد والذي يستفيد من مصدر أوسع بكثير من الإشراف. نحن نثبت أن مهمة ما قبل التدريب البسيطة المتمثلة في التنبؤ بالتعليق التوضيحي الذي يتوافق مع الصورة هي طريقة فعالة وقابلة للتطوير لتعلم تمثيلات SOTA للصور من الصفر على مجموعة بيانات تحتوي على 400 مليون زوج من (الصورة، النص) تم جمعها من الإنترنت. بعد ما قبل التدريب، يتم استخدام اللغة الطبيعية للإشارة إلى المفاهيم المرئية المكتسبة (أو وصف مفاهيم جديدة) لتمكين النقل الصفري للنموذج إلى مهام التدفق السفلي. نقوم بدراسة أداء هذا النهج من خلال وضع معايير لأكثر من 30 مجموعة بيانات رؤية حاسوبية مختلفة، تشمل مهام مثل التعرف الضوئي على الحروف، والتعرف على الإجراءات في مقاطع الفيديو، والجغرافيا، والعديد من أنواع التصنيف الدقيق للكائنات. ينتقل النموذج بشكل غير تافه إلى معظم المهام ويكون غالبًا قادرًا على المنافسة مع خط الأساس الخاضع للإشراف الكامل دون الحاجة إلى أي تدريب محدد لمجموعة البيانات. على سبيل المثال، نحن نطابق دقة ResNet-50 الأصلية على ImageNet Zero-shot دون الحاجة إلى استخدام أي من 1.28 مليون مثال تدريبي تم تدريبه عليها. نقوم بإصدار الكود الخاص بنا وأوزان النموذج المسبق التدريب على هذا الرابط https." + +تمت المساهمة بهذا النموذج من قبل [valhalla](https://huggingface.co/valhalla). يمكن العثور على الكود الأصلي [هنا](https://github.com/openai/CLIP). + +## نصائح الاستخدام ومثال + +CLIP هو نموذج متعدد الوسائط للرؤية واللغة. يمكن استخدامه لتشابه الصور والنص ولتصنيف الصور ذات الصفر. يستخدم CLIP محولًا مثل ViT لاستخراج الميزات المرئية ونموذج لغة سببي لاستخراج ميزات النص. ثم يتم إسقاط كل من ميزات النص والمرئيات إلى مساحة كامنة ذات أبعاد متطابقة. يتم بعد ذلك استخدام المنتج النقطي بين الصورة وميزات النص المسقطة كنتيجة مماثلة. + +لتغذية الصور في محول الترميز، يتم تقسيم كل صورة إلى تسلسل من رقع ثابتة الحجم غير المتداخلة، والتي يتم تضمينها خطيًا بعد ذلك. يتم إضافة رمز [CLS] ليعمل كتمثيل لصورة كاملة. يضيف المؤلفون أيضًا تضمينات الموضع المطلق، ويغذون تسلسل المتجهات الناتج في محول ترميز قياسي. يمكن استخدام [`CLIPImageProcessor`] لإعادة تحجيم (أو إعادة تحجيم) الصور وتطبيعها للنموذج. + +يُستخدم [`CLIPTokenizer`] لتشفير النص. يغلف [`CLIPProcessor`] [`CLIPImageProcessor`] و [`CLIPTokenizer`] في مثيل واحد لتشفير النص وإعداد الصور. يوضح المثال التالي كيفية الحصول على درجات التشابه بين الصورة والنص باستخدام [`CLIPProcessor`] و [`CLIPModel`]. + +```python +>>> from PIL import Image +>>> import requests + +>>> from transformers import CLIPProcessor, CLIPModel + +>>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") +>>> processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True) + +>>> outputs = model(**inputs) +>>> logits_per_image = outputs.logits_per_image # هذه هي نتيجة التشابه بين الصورة والنص +>>> probs = logits_per_image.softmax(dim=1) # يمكننا أخذ softmax للحصول على احتمالات التصنيف +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها برمز 🌎) لمساعدتك في البدء باستخدام CLIP. + +- [ضبط دقيق لـ CLIP باستخدام صور الاستشعار عن بعد (الصور الملتقطة عبر الأقمار الصناعية) والتعليقات التوضيحية](https://huggingface.co/blog/fine-tune-clip-rsicd)، وهي مشاركة مدونة حول كيفية ضبط دقة CLIP باستخدام [مجموعة بيانات RSICD](https://github.com/201528014227051/RSICD_optimal) ومقارنة التغييرات في الأداء بسبب زيادة البيانات. +- يوضح هذا [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/contrastive-image-text) كيفية تدريب نموذج تشفير ثنائي للرؤية والنص يشبه CLIP باستخدام مشفر رؤية ونص مسبق التدريب باستخدام [مجموعة بيانات COCO](https://cocodataset.org/#home). + + +- [دفتر الملاحظات](https://colab.research.google.com/drive/1tuoAC5F4sC7qid56Z0ap-stR3rwdk0ZV?usp=sharing) حول كيفية استخدام CLIP مسبق التدريب للتنفيذ مع البحث الشعاعي لتوليد التعليقات التوضيحية للصور. 🌎 + +**استرجاع الصور** + +- [دفتر ملاحظات](https://colab.research.google.com/drive/1bLVwVKpAndpEDHqjzxVPr_9nGrSbuOQd?usp=sharing) حول استرجاع الصور باستخدام CLIP مسبق التدريب وحساب MRR (متوسط المرتبة المتبادلة). 🌎 +- [دفتر ملاحظات](https://colab.research.google.com/github/deep-diver/image_search_with_natural_language/blob/main/notebooks/Image_Search_CLIP.ipynb) حول استرجاع الصور وإظهار نتيجة التشابه. 🌎 +- [دفتر الملاحظات](https://colab.research.google.com/drive/1xO-wC_m_GNzgjIBQ4a4znvQkvDoZJvH4?usp=sharing) حول كيفية رسم خرائط للصور والنصوص إلى نفس مساحة المتجه باستخدام CLIP متعددة اللغات. 🌎 +- [دفتر الملاحظات](https://colab.research.google.com/github/vivien000/clip-demo/blob/master/clip.ipynb#scrollTo=uzdFhRGqiWkR) حول كيفية تشغيل CLIP على البحث عن الصور الدلالية باستخدام [Unsplash](https://unsplash.com) و [TMDB](https://www.themoviedb.org/) مجموعات البيانات. 🌎 + +**القابلية للتفسير** + +- [دفتر ملاحظات](https://colab.research.google.com/github/hila-chefer/Transformer-MM-Explainability/blob/main/CLIP_explainability.ipynb) حول كيفية تصور التشابه بين رمز الإدخال وقسم الصورة. 🌎 + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه. + +يجب أن يثبت المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## CLIPConfig + +[[autodoc]] CLIPConfig + +- from_text_vision_configs + +## CLIPTextConfig + +[[autodoc]] CLIPTextConfig + +## CLIPVisionConfig + +[[autodoc]] CLIPVisionConfig + +## CLIPTokenizer + +[[autodoc]] CLIPTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## CLIPTokenizerFast + +[[autodoc]] CLIPTokenizerFast + +## CLIPImageProcessor + +[[autodoc]] CLIPImageProcessor + +- preprocess + +## CLIPFeatureExtractor + +[[autodoc]] CLIPFeatureExtractor + +## CLIPProcessor + +[[autodoc]] CLIPProcessor + + + + +## CLIPModel + +[[autodoc]] CLIPModel + +- forward +- get_text_features +- get_image_features + +## CLIPTextModel + +[[autodoc]] CLIPTextModel + +- forward + +## CLIPTextModelWithProjection + +[[autodoc]] CLIPTextModelWithProjection + +- forward + +## CLIPVisionModelWithProjection + +[[autodoc]] CLIPVisionModelWithProjection + +- forward + +## CLIPVisionModel + +[[autodoc]] CLIPVisionModel + +- forward + +## CLIPForImageClassification + +[[autodoc]] CLIPForImageClassification + +- forward + + + + +## TFCLIPModel + +[[autodoc]] TFCLIPModel + +- call +- get_text_features +- get_image_features + + +## TFCLIPTextModel + +[[autodoc]] TFCLIPTextModel + +- call + +## TFCLIPVisionModel + +[[autodoc]] TFCLIPVisionModel + +- call + + + + +## FlaxCLIPModel + +[[autodoc]] FlaxCLIPModel + +- __call__ +- get_text_features +- get_image_features + +## FlaxCLIPTextModel + +[[autodoc]] FlaxCLIPTextModel + +- __call__ + +## FlaxCLIPTextModelWithProjection + +[[autodoc]] FlaxCLIPTextModelWithProjection + +- __call__ + +## FlaxCLIPVisionModel + +[[autodoc]] FlaxCLIPVisionModel + +- __call__ + + + \ No newline at end of file From 90f83cb80685375bcb44d73648d6a796784c1f6d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:02 +0300 Subject: [PATCH 395/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/clipseg.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/clipseg.md | 73 +++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/source/ar/model_doc/clipseg.md diff --git a/docs/source/ar/model_doc/clipseg.md b/docs/source/ar/model_doc/clipseg.md new file mode 100644 index 00000000000000..b28c19a4c9db19 --- /dev/null +++ b/docs/source/ar/model_doc/clipseg.md @@ -0,0 +1,73 @@ +# CLIPSeg + +## نظرة عامة +اقترح نموذج CLIPSeg في [Image Segmentation Using Text and Image Prompts](https://arxiv.org/abs/2112.10003) بواسطة تيمو لوديكي وألكسندر إيكر. يضيف CLIPSeg فك تشفير بسيطًا أعلى نموذج CLIP مجمد للتجزئة الصفرية والتجزئة الصورة الواحدة. + +المستخلص من الورقة هو ما يلي: + +*يتم عادةً معالجة تجزئة الصورة عن طريق تدريب نموذج لمجموعة ثابتة من فئات الكائنات. إن دمج فئات إضافية أو استفسارات أكثر تعقيدًا لاحقًا مكلف لأنه يتطلب إعادة تدريب النموذج على مجموعة بيانات تشمل هذه التعبيرات. نقترح هنا نظامًا يمكنه إنشاء تجزئات الصور بناءً على مطالبات تعسفية في وقت الاختبار. يمكن أن يكون المطالبة إما نصًا أو صورة. يمكّننا هذا النهج من إنشاء نموذج موحد (تم تدريبه مرة واحدة) لثلاث مهام تجزئة شائعة، والتي تأتي مع تحديات متميزة: تجزئة تعبير الإحالة، وتجزئة الصور الصفرية، وتجزئة الصور الواحدة. + +نعتمد على نموذج CLIP كعمود فقري نقوم بتوسيع نطاقه باستخدام فك تشفير يعتمد على المحول الذي يمكّن التنبؤ الكثيف. بعد التدريب على إصدار موسع من مجموعة بيانات PhraseCut، يقوم نظامنا بتوليد خريطة تجزئة ثنائية لصورة بناءً على مطالبة نصية حرة أو على صورة إضافية تعبر عن الاستعلام. نقوم بتحليل متغيرات مختلفة من مطالبات الصور اللاحقة هذه بالتفصيل. يسمح هذا الإدخال الهجين الجديد بالتكيف الديناميكي ليس فقط مع مهام التجزئة الثلاث المذكورة أعلاه، ولكن مع أي مهمة تجزئة ثنائية يمكن صياغة استعلام نصي أو صورة لها. وأخيرًا، نجد أن نظامنا يتكيف جيدًا مع الاستفسارات العامة التي تنطوي على إمكانات أو خصائص*. + +drawing + +نظرة عامة على CLIPSeg. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/timojl/clipseg). + +## نصائح الاستخدام + +- [`CLIPSegForImageSegmentation`] يضيف فك تشفير أعلى [`CLIPSegModel`]. هذا الأخير متطابق مع [`CLIPModel`]. +- [`CLIPSegForImageSegmentation`] يمكنه إنشاء تجزئات الصور بناءً على مطالبات تعسفية في وقت الاختبار. يمكن أن يكون المطالبة إما نصًا (مقدمًا إلى النموذج على أنه `input_ids`) أو صورة (مقدمة إلى النموذج على أنها `conditional_pixel_values`). يمكنك أيضًا توفير تضمينات شرطية مخصصة (مقدمة إلى النموذج على أنها `conditional_embeddings`). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام CLIPSeg. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + + + +- دفتر ملاحظات يوضح [تجزئة الصور الصفرية باستخدام CLIPSeg](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/CLIPSeg/Zero_shot_image_segmentation_with_CLIPSeg.ipynb). + +## CLIPSegConfig + +[[autodoc]] CLIPSegConfig + +- from_text_vision_configs + +## CLIPSegTextConfig + +[[autodoc]] CLIPSegTextConfig + +## CLIPSegVisionConfig + +[[autodoc]] CLIPSegVisionConfig + +## CLIPSegProcessor + +[[autodoc]] CLIPSegProcessor + +## CLIPSegModel + +[[autodoc]] CLIPSegModel + +- forward +- get_text_features +- get_image_features + +## CLIPSegTextModel + +[[autodoc]] CLIPSegTextModel + +- forward + +## CLIPSegVisionModel + +[[autodoc]] CLIPSegVisionModel + +- forward + +## CLIPSegForImageSegmentation + +[[autodoc]] CLIPSegForImageSegmentation + +- forward \ No newline at end of file From c41c14f32fb9c4aa0ac1b746a96b3025ae80e275 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:03 +0300 Subject: [PATCH 396/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/clvp.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/clvp.md | 72 ++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 docs/source/ar/model_doc/clvp.md diff --git a/docs/source/ar/model_doc/clvp.md b/docs/source/ar/model_doc/clvp.md new file mode 100644 index 00000000000000..68e317c626448c --- /dev/null +++ b/docs/source/ar/model_doc/clvp.md @@ -0,0 +1,72 @@ +# CLVP + +## نظرة عامة + اقترح جيمس بيتكر نموذج CLVP (Contrastive Language-Voice Pretrained Transformer) في ورقته البحثية [Better speech synthesis through scaling](https://arxiv.org/abs/2305.07243). + فيما يلي الملخص المستخرج من الورقة البحثية: + *"في السنوات الأخيرة، أحدث تطبيق المحولات التلقائية والنماذج التنافسية ثورة في مجال توليد الصور. تقوم هذه الأساليب بوضع عملية توليد الصور كعمليات احتمالية متدرجة وتستفيد من كميات كبيرة من البيانات والحوسبة لتعلم توزيع الصور. لا تحتاج منهجية تحسين الأداء هذه إلى أن تقتصر على الصور. تصف هذه الورقة طريقة لتطبيق التقدمات في مجال توليد الصور على تركيب الكلام. والنتيجة هي Tortoise - نظام نص إلى كلام تعبيري ومتعدد الأصوات."* + ساهم في هذا النموذج [سوسناتو دار](https://huggingface.co/susnato). + يمكن العثور على الكود الأصلي [هنا](https://github.com/neonbjb/tortoise-tts). + ## نصائح الاستخدام +1. CLVP هو جزء لا يتجزأ من نموذج Tortoise TTS. +2. يمكن استخدام CLVP لمقارنة مرشحي الكلام المولَّد المختلفين مع النص المقدم، ويتم تمرير أفضل رموز الكلام إلى نموذج الانتشار. +3. يوصى بشدة باستخدام طريقة [`ClvpModelForConditionalGeneration.generate()`] للاستخدام في السلحفاة. +4. لاحظ أن نموذج CLVP يتوقع أخذ عينات من الصوت عند 22.05 كيلو هرتز على عكس نماذج الصوت الأخرى التي تتوقع 16 كيلو هرتز. + ## شرح موجز: + - [`ClvpTokenizer`] يقسم نص الإدخال، و [`ClvpFeatureExtractor`] يستخرج مخطط ميلوغرام من الصوت المطلوب. + - [`ClvpConditioningEncoder`] يأخذ رموز النص وتمثيلات الصوت ويحولها إلى تضمينات مشروطة بالنص والصوت. + - يستخدم [`ClvpForCausalLM`] هذه التضمينات لتوليد عدة مرشحين للكلام. + - يتم تمرير كل مرشح كلامي عبر مشفر الكلام ([`ClvpEncoder`]) الذي يحوله إلى تمثيل متجهي، ويحول مشفر النص ([`ClvpEncoder`]) رموز النص إلى نفس الفراغ الكامن. + - في النهاية، نقارن كل متجه كلامي مع متجه النص لمعرفة أي متجه كلامي يشبه متجه النص أكثر. + - [`ClvpModelForConditionalGeneration.generate()`] يضغط كل المنطق الموضح أعلاه في طريقة واحدة. + مثال: + ```python +>>> import datasets +>>> from transformers import ClvpProcessor, ClvpModelForConditionalGeneration + +>>> # Define the Text and Load the Audio (We are taking an audio example from Hugging Face Hub using `datasets` library). +>>> text = "This is an example text." + +>>> ds = datasets.load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +>>> ds = ds.cast_column("audio", datasets.Audio(sampling_rate=22050)) +>>> sample = ds[0]["audio"] + +>>> # Define processor and model. +>>> processor = ClvpProcessor.from_pretrained("susnato/clvp_dev") +>>> model = ClvpModelForConditionalGeneration.from_pretrained("susnato/clvp_dev") + +>>> # Generate processor output and model output. +>>> processor_output = processor(raw_speech=sample["array"], sampling_rate=sample["sampling_rate"], text=text, return_tensors="pt") +>>> generated_output = model.generate(**processor_output) +``` + ## ClvpConfig + [[autodoc]] ClvpConfig + - from_sub_model_configs + ## ClvpEncoderConfig + [[autodoc]] ClvpEncoderConfig + ## ClvpDecoderConfig + [[autodoc]] ClvpDecoderConfig + ## ClvpTokenizer + [[autodoc]] ClvpTokenizer + - save_vocabulary + ## ClvpFeatureExtractor + [[autodoc]] ClvpFeatureExtractor + - __call__ + ## ClvpProcessor + [[autodoc]] ClvpProcessor + - __call__ + - decode + - batch_decode + ## ClvpModelForConditionalGeneration + [[autodoc]] ClvpModelForConditionalGeneration + - forward + - generate + - get_text_features + - get_speech_features + ## ClvpForCausalLM + [[autodoc]] ClvpForCausalLM + ## ClvpModel + [[autodoc]] ClvpModel + ## ClvpEncoder + [[autodoc]] ClvpEncoder + ## ClvpDecoder + [[autodoc]] ClvpDecoder \ No newline at end of file From 160d94076ed3de268b26bed7e8dbb758bb963ecf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:05 +0300 Subject: [PATCH 397/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/codegen.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/codegen.md | 80 +++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 docs/source/ar/model_doc/codegen.md diff --git a/docs/source/ar/model_doc/codegen.md b/docs/source/ar/model_doc/codegen.md new file mode 100644 index 00000000000000..84d740ffc1b602 --- /dev/null +++ b/docs/source/ar/model_doc/codegen.md @@ -0,0 +1,80 @@ +# CodeGen + +## نظرة عامة + +اقترح نموذج CodeGen في [نموذج محادثي للتركيب البرمجي](https://arxiv.org/abs/2203.13474) بواسطة Erik Nijkamp و Bo Pang و Hiroaki Hayashi و Lifu Tu و Huan Wang و Yingbo Zhou و Silvio Savarese و Caiming Xiong. + +CodeGen هو نموذج لغة مولدة للتركيب البرمجي تم تدريبه بشكل متسلسل على [The Pile](https://pile.eleuther.ai/) و BigQuery و BigPython. + +الملخص من الورقة هو ما يلي: + +> يسعى تركيب البرنامج إلى توليد برنامج كمبيوتر كحل لمشكلة مواصفات معينة. نقترح نهجًا محادثيًا لتركيب البرنامج من خلال نماذج اللغة الكبيرة، والتي تتناول التحديات المتمثلة في البحث في مساحة برنامج ضخمة وتحديد نية المستخدم التي واجهتها في الأساليب السابقة. يلقي نهجنا الجديد عملية كتابة المواصفات والبرنامج كمحادثة متعددة الأدوار بين المستخدم والنظام. إنه يعامل تركيب البرنامج كمشكلة تنبؤ تسلسلي، يتم فيها التعبير عن المواصفات بلغة طبيعية ويتم أخذ عينات من البرنامج المطلوب بشكل شرطي. نقوم بتدريب عائلة من نماذج اللغة الكبيرة، تسمى CodeGen، على بيانات اللغة الطبيعية وبيانات لغة البرمجة. مع الإشراف الضعيف في البيانات وتوسيع حجم البيانات وحجم النموذج، تظهر القدرات المحادثية من نمذجة اللغة الذاتية البسيطة. لدراسة سلوك النموذج على التركيب البرمجي المحادثي، نقوم بتطوير معيار برمجة متعدد الأدوار (MTPB)، حيث يتطلب حل كل مشكلة تركيبًا متعدد الخطوات من خلال محادثة متعددة الأدوار بين المستخدم والنموذج. توضح نتائجنا ظهور القدرات المحادثية وفعالية نموذج التركيب البرمجي المحادثي المقترح. بالإضافة إلى ذلك، يتفوق نموذجنا CodeGen (بحد أقصى 16 بليون معلمة مدربة على TPU-v4) على OpenAI's Codex على معيار HumanEval. نجعل مكتبة التدريب JaxFormer بما في ذلك نقاط المراقبة متاحة كمساهمة مفتوحة المصدر: [هذا عنوان URL https](https://github.com/salesforce/codegen). + +تمت المساهمة بهذا النموذج من قبل [Hiroaki Hayashi](https://huggingface.co/rooa). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/salesforce/codegen). + +## تسمية نقطة التفتيش + +- تتوفر نقاط تفتيش نموذج CodeGen [checkpoints](https://huggingface.co/models?other=codegen) على بيانات تدريب مسبق مختلفة بأحجام متغيرة. +- التنسيق هو: `Salesforce/codegen-{size}-{data}`، حيث +- `size`: `350M`، `2B`، `6B`، `16B` +- `data`: + - `nl`: مدرب مسبقًا على Pile + - `multi`: تم التهيئة الأولية باستخدام `nl`، ثم تم التدريب المسبق بشكل أكبر على بيانات لغات برمجة متعددة + - `mono`: تم التهيئة الأولية باستخدام `multi`، ثم تم التدريب المسبق بشكل أكبر على بيانات Python + +على سبيل المثال، يوفر `Salesforce/codegen-350M-mono` نقطة تفتيش بحجم 350 مليون معلمة تم تدريبها مسبقًا بشكل متسلسل على Pile ولغات برمجة متعددة وPython. + +## مثال على الاستخدام + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> checkpoint = "Salesforce/codegen-350M-mono" +>>> model = AutoModelForCausalLM.from_pretrained(checkpoint) +>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint) + +>>> text = "def hello_world():" + +>>> completion = model.generate(**tokenizer(text, return_tensors="pt")) + +>>> print(tokenizer.decode(completion[0])) +def hello_world(): + print("Hello World") + +hello_world() +``` + +## الموارد + +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +## CodeGenConfig + +[[autodoc]] CodeGenConfig + +- all + +## CodeGenTokenizer + +[[autodoc]] CodeGenTokenizer + +- create_token_type_ids_from_sequences +- save_vocabulary + +## CodeGenTokenizerFast + +[[autodoc]] CodeGenTokenizerFast + +## CodeGenModel + +[[autodoc]] CodeGenModel + +- forward + +## CodeGenForCausalLM + +[[autodoc]] CodeGenForCausalLM + +- forward \ No newline at end of file From 1d4b2f7cb2b483983ab0984fbe34b9e765f2f7db Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:07 +0300 Subject: [PATCH 398/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/code=5Fllama.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/code_llama.md | 112 +++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 docs/source/ar/model_doc/code_llama.md diff --git a/docs/source/ar/model_doc/code_llama.md b/docs/source/ar/model_doc/code_llama.md new file mode 100644 index 00000000000000..7222ce5818e3cd --- /dev/null +++ b/docs/source/ar/model_doc/code_llama.md @@ -0,0 +1,112 @@ +# CodeLlama + +## نظرة عامة +اقترح نموذج Code Llama في [Code Llama: Open Foundation Models for Code](https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/) بواسطة Baptiste Rozière، Jonas Gehring، Fabian Gloeckle، Sten Sootla، Itai Gat، Xiaoqing Ellen Tan، Yossi Adi، Jingyu Liu، Tal Remez، Jérémy Rapin، Artyom Kozhevnikov، Ivan Evtimov، Joanna Bitton، Manish Bhatt، Cristian Canton Ferrer، Aaron Grattafiori، Wenhan Xiong، Alexandre Défossez، Jade Copet، Faisal Azhar، Hugo Touvron، Louis Martin، Nicolas Usunier، Thomas Scialom، Gabriel Synnaeve. + +ملخص الورقة هو ما يلي: + +*نحن نطلق Code Llama، وهي عائلة من نماذج اللغة الكبيرة للكود المستندة إلى Llama 2 والتي توفر أداءً متميزًا بين النماذج المفتوحة، وقدرات infilling، ودعم سياقات الإدخال الكبيرة، والقدرة على اتباع التعليمات من الصفر لمهام البرمجة. نوفر نكهات متعددة لتغطية مجموعة واسعة من التطبيقات: نماذج الأساس (Code Llama)، والتخصصات في Python (Code Llama - Python)، ونماذج اتباع التعليمات (Code Llama - Instruct) مع 7B و13B و34B من المعلمات لكل منها. تم تدريب جميع النماذج على تسلسلات من 16000 رمز، وتظهر تحسينات على الإدخالات التي يصل طولها إلى 100000 رمز. تدعم متغيرات Code Llama وCode Llama - Instruct بسعة 7B و13B infilling بناءً على المحتوى المحيط. يحقق Code Llama أداءً متميزًا بين النماذج المفتوحة على العديد من معايير الكود، مع تحقيق نتائج تصل إلى 53% و55% على HumanEval وMBPP على التوالي. ومن الجدير بالذكر أن Code Llama - Python 7B يتفوق على Llama 2 70B في HumanEval وMBPP، وتتفوق جميع نماذجنا على أي نموذج متاح للجمهور في MultiPL-E. نطلق Code Llama بموجب ترخيص متساهل يسمح باستخدامه في كل من الأبحاث والتطبيقات التجارية.* + +اطلع على جميع نقاط تفتيش نموذج Code Llama [هنا](https://huggingface.co/models?search=code_llama) والنماذج التي تم إصدارها رسميًا في [Meta Llama org](https://huggingface.co/meta-llama). + +تمت المساهمة بهذا النموذج بواسطة [ArthurZucker](https://huggingface.co/ArthurZ). يمكن العثور على الكود الأصلي للمؤلفين [هنا](https://github.com/facebookresearch/llama). + +## نصائح الاستخدام وأمثلة + + +تم تدريب نماذج عائلة `Llama2`، التي يعتمد عليها Code Llama، باستخدام `bfloat16`، ولكن الاستدلال الأصلي يستخدم `float16`. دعونا نلقي نظرة على الدقة المختلفة: + +* `float32`: اتفاقية PyTorch عند تهيئة النموذج هي تحميل النماذج في `float32`، بغض النظر عن `dtype` الذي تم تخزين أوزان النموذج به. يتبع `transformers` أيضًا هذه الاتفاقية للاتساق مع PyTorch. سيتم اختياره افتراضيًا. إذا كنت تريد أن يقوم واجهة برمجة التطبيقات (API) لـ `AutoModel` بتحويل نقاط تفتيش التحميل إلى نوع أوزان التخزين، فيجب عليك تحديد `torch_dtype="auto"`، على سبيل المثال `model = AutoModelForCausalLM.from_pretrained("path", torch_dtype = "auto")`. + +* `bfloat16`: تم تدريب Code Llama بهذه الدقة، لذلك نوصي باستخدامها للمزيد من التدريب أو الضبط الدقيق. + +* `float16`: نوصي بتشغيل الاستدلال باستخدام هذه الدقة، حيث أنها عادةً ما تكون أسرع من `bfloat16`، ولا تظهر مقاييس التقييم أي تدهور ملحوظ فيما يتعلق بـ `bfloat16`. يمكنك أيضًا تشغيل الاستدلال باستخدام `bfloat16`، ونوصيك بالتحقق من نتائج الاستدلال باستخدام كل من `float16` و`bfloat16` بعد الضبط الدقيق. + +كما ذكرنا سابقًا، فإن `dtype` لأوزان التخزين غير مهم إلى حد كبير ما لم تكن تستخدم `torch_dtype="auto"` عند تهيئة نموذج باستخدام. والسبب هو أن النموذج سيتم تنزيله أولاً (باستخدام `dtype` لنقاط التفتيش عبر الإنترنت) ثم سيتم تحويله إلى `dtype` الافتراضي لـ `torch` (يصبح `torch.float32`). إذا كان هناك `torch_dtype` محدد، فسيتم استخدامه بدلاً من ذلك. + + +نصائح: + +- يتم دعم مهمة infilling بشكل افتراضي. يجب عليك استخدام `tokenizer.fill_token` حيث تريد ملء الإدخال الخاص بك. + +- نص البرنامج النصي لتحويل النموذج هو نفسه لعائلة `Llama2`: + +فيما يلي مثال على الاستخدام: + +```bash +python src/transformers/models/llama/convert_llama_weights_to_hf.py \ +--input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path +``` + +ملاحظة: يتطلب تنفيذ البرنامج النصي مساحة كافية من ذاكرة الوصول العشوائي (RAM) في وحدة المعالجة المركزية (CPU) لاستضافة النموذج بالكامل في دقة float16 (حتى إذا كانت أكبر الإصدارات +تأتي في عدة نقاط تفتيش، يحتوي كل منها على جزء من كل وزن للنموذج، لذلك نحتاج إلى تحميلها جميعًا في ذاكرة الوصول العشوائي). + +بعد التحويل، يمكن تحميل النموذج والمحلل اللغوي باستخدام ما يلي: + +```python +>>> from transformers import LlamaForCausalLM, CodeLlamaTokenizer + +>>> tokenizer = CodeLlamaTokenizer.from_pretrained("meta-llama/CodeLlama-7b-hf") +>>> model = LlamaForCausalLM.from_pretrained("meta-llama/CodeLlama-7b-hf") +>>> PROMPT = '''def remove_non_ascii(s: str) -> str: +... """ +... return result +... ''' +>>> input_ids = tokenizer(PROMPT, return_tensors="pt")["input_ids"] +>>> generated_ids = model.generate(input_ids, max_new_tokens=128) + +>>> filling = tokenizer.batch_decode(generated_ids[:, input_ids.shape[1]:], skip_special_tokens = True)[0] +>>> print(PROMPT.replace("", filling)) +def remove_non_ascii(s: str) -> str: + """ Remove non-ASCII characters from a string. + + Args: + s: The string to remove non-ASCII characters from. + + Returns: + The string with non-ASCII characters removed. + """ + result = "" + for c in s: + if ord(c) < 128: + result += c + return result + +``` + +إذا كنت تريد فقط الجزء المملوء: + +```python +>>> from transformers import pipeline +>>> import torch + +>>> generator = pipeline("text-generation",model="meta-llama/CodeLlama-7b-hf",torch_dtype=torch.float16, device_map="auto") +>>> generator('def remove_non_ascii(s: str) -> str:\n """ \n return result', max_new_tokens = 128) +[{'generated_text': 'def remove_non_ascii(s: str) -> str:\n """ \n return resultRemove non-ASCII characters from a string. """\n result = ""\n for c in s:\n if ord(c) < 128:\n result += c'}] +``` + +في الخلفية، يقوم المحلل اللغوي [بالتقسيم تلقائيًا بواسطة ``](https://huggingface.co/docs/transformers/main/model_doc/code_llama#transformers.CodeLlamaTokenizer.fill_token) لإنشاء سلسلة إدخال بتنسيق يتبع [نمط التدريب الأصلي](https://github.com/facebookresearch/codellama/blob/cb51c14ec761370ba2e2bc351374a79265d0465e/llama/generation.py#L402). هذه الطريقة أكثر متانة من إعداد النمط بنفسك: فهي تتجنب المشكلات، مثل لصق الرموز، والتي يصعب تصحيحها. لمعرفة مقدار ذاكرة وحدة المعالجة المركزية (CPU) وذاكرة وحدة معالجة الرسومات (GPU) التي تحتاجها لهذا النموذج أو غيره، جرب [هذه الآلة الحاسبة](https://huggingface.co/spaces/hf-accelerate/model-memory-usage) والتي يمكن أن تساعد في تحديد تلك القيمة. + +محلل LLaMA اللغوي هو نموذج BPE يعتمد على [sentencepiece](https://github.com/google/sentencepiece). إحدى ميزات sentencepiece هي أنه عند فك تشفير تسلسل، إذا كان الرمز الأول هو بداية الكلمة (مثل "Banana")، فإن المحلل اللغوي لا يسبق المسافة البادئة للسلسلة. + + +يحتوي Code Llama على نفس بنية نماذج `Llama2`، راجع [صفحة وثائق Llama2](llama2) للحصول على مرجع واجهة برمجة التطبيقات (API). +يمكنك العثور على مرجع محلل Llama اللغوي أدناه. + + +## CodeLlamaTokenizer + +[[autodoc]] CodeLlamaTokenizer +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## CodeLlamaTokenizerFast + +[[autodoc]] CodeLlamaTokenizerFast +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- update_post_processor +- save_vocabulary \ No newline at end of file From b280829b413e1d12d5262d16e55cddb87aa79f65 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:09 +0300 Subject: [PATCH 399/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/cohere.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/cohere.md | 141 +++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 docs/source/ar/model_doc/cohere.md diff --git a/docs/source/ar/model_doc/cohere.md b/docs/source/ar/model_doc/cohere.md new file mode 100644 index 00000000000000..3faa0ff26a87d6 --- /dev/null +++ b/docs/source/ar/model_doc/cohere.md @@ -0,0 +1,141 @@ +# Cohere + +## نظرة عامة +اقترح فريق Cohere نموذج Cohere Command-R في المنشور على المدونة [Command-R: Retrieval Augmented Generation at Production Scale](https://txt.cohere.com/command-r/) بواسطة فريق Cohere. + +المقتطف من الورقة هو ما يلي: + +> "Command-R هو نموذج توليدي قابل للتطوير يستهدف RAG واستخدام الأدوات لتمكين الذكاء الاصطناعي على نطاق الإنتاج للمؤسسات. واليوم، نقدم Command-R، وهو نموذج LLM جديد يستهدف أعباء العمل الإنتاجية واسعة النطاق. ويستهدف Command-R فئة "قابلة للتطوير" الناشئة من النماذج التي توازن بين الكفاءة العالية والدقة القوية، مما يمكّن الشركات من تجاوز مفهوم الإثبات، والانتقال إلى الإنتاج." + +> "Command-R هو نموذج توليدي مُحُسّن لمهام السياق الطويلة مثل استرجاع التوليد المعزز (RAG) واستخدام واجهات برمجة التطبيقات والأدوات الخارجية. وقد صُمم للعمل بالتنسيق مع نماذج Embed وRerank الرائدة في الصناعة لتوفير أفضل تكامل لتطبيقات RAG والتميز في حالات استخدام المؤسسات. وباعتباره نموذجًا مُصممًا للشركات لتنفيذه على نطاق واسع، يتفاخر Command-R بما يلي: + +- دقة قوية في RAG واستخدام الأدوات +- انخفاض زمن الوصول، وسرعة عالية في معالجة البيانات +- سياق أطول يبلغ 128 كيلو بايت وتكلفة أقل +- قدرات قوية عبر 10 لغات رئيسية +- أوزان النموذج متاحة على HuggingFace للبحث والتقييم + +تفقد نقاط تفتيش النموذج [هنا](https://huggingface.co/CohereForAI/c4ai-command-r-v01). + +ساهم بهذا النموذج [Saurabh Dash](https://huggingface.co/saurabhdash) و [Ahmet Üstün](https://huggingface.co/ahmetustun). وتستند شفرة التنفيذ في Hugging Face إلى GPT-NeoX [هنا](https://github.com/EleutherAI/gpt-neox). + +## نصائح الاستخدام + + + +تستخدم نقاط التفتيش المرفوعة على المحاور `torch_dtype = 'float16'`، والتي سيتم استخدامها بواسطة واجهة برمجة التطبيقات `AutoModel` لتحويل نقاط التفتيش من `torch.float32` إلى `torch.float16`. + +إن نوع بيانات الأوزان عبر الإنترنت غير ذي صلة إلى حد كبير ما لم تكن تستخدم `torch_dtype="auto"` عند تهيئة نموذج باستخدام `model = AutoModelForCausalLM.from_pretrained("path"، torch_dtype = "auto")`. والسبب هو أن النموذج سيتم تنزيله أولاً (باستخدام نوع بيانات نقاط التفتيش عبر الإنترنت)، ثم سيتم تحويله إلى نوع بيانات الافتراضي لـ `torch` (يصبح `torch.float32`)، وأخيراً، إذا كان هناك `torch_dtype` مقدم في التكوين، فسيتم استخدامه. + +لا يُنصح بالتدريب على النموذج في `float16` ومن المعروف أنه ينتج عنه `nan`؛ لذلك، يجب تدريب النموذج في `bfloat16`. + + + +يمكن تحميل النموذج والمحلل اللغوي باستخدام ما يلي: + +```python +# pip install transformers +from transformers import AutoTokenizer, AutoModelForCausalLM + +model_id = "CohereForAI/c4ai-command-r-v01" +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_pretrained(model_id) + +# تنسيق الرسالة باستخدام قالب الدردشة command-r +messages = [{"role": "user", "content": "Hello, how are you?"}] +input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt") +## \\<\|START_OF_TURN_TOKEN\|\>\<\|USER_TOKEN\|\>Hello, how are you?\<\|END_OF_TURN_TOKEN\|\>\<\|START_OF_TURN_TOKEN\|\>\<\|CHATBOT_TOKEN\|\> + +gen_tokens = model.generate( + input_ids, + max_new_tokens=100, + do_sample=True, + temperature=0.3, +) + +gen_text = tokenizer.decode(gen_tokens[0]) +print(gen_text) +``` + +- عند استخدام Flash Attention 2 عبر `attn_implementation="flash_attention_2"`، لا تمرر `torch_dtype` إلى طريقة الفصل `from_pretrained` واستخدم التدريب على الدقة المختلطة التلقائية. عند استخدام `Trainer`، فهو ببساطة تحديد إما `fp16` أو `bf16` إلى `True`. وإلا، تأكد من استخدامك لـ `torch.autocast`. وهذا مطلوب لأن Flash Attention يدعم فقط نوعي البيانات `fp16` و`bf16`. + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بالعالم 🌎) لمساعدتك في البدء باستخدام Command-R. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنقوم بمراجعته! ويفضل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +تحميل نموذج FP16 + +```python +# pip install transformers +from transformers import AutoTokenizer, AutoModelForCausalLM + +model_id = "CohereForAI/c4ai-command-r-v01" +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_pretrained(model_id) + +# تنسيق الرسالة باستخدام قالب الدردشة command-r +messages = [{"role": "user", "content": "Hello, how are you?"}] +input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt") +## \\<\|START_OF_TURN_TOKEN\|\>\<\|USER_TOKEN\|\>Hello, how are you?\<\|END_OF_TURN_TOKEN\|\>\<\|START_OF_TURN_TOKEN\|\>\<\|CHATBOT_TOKEN\|\> + +gen_tokens = model.generate( + input_ids, + max_new_tokens=100, + do_sample=True, + temperature=0.3, +) + +gen_text = tokenizer.decode(gen_tokens[0]) +print(gen_text) +``` + +تحميل نموذج bitsnbytes 4bit الكمي + +```python +# pip install transformers bitsandbytes accelerate +from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig + +bnb_config = BitsAndBytesConfig(load_in_4bit=True) + +model_id = "CohereForAI/c4ai-command-r-v01" +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config) + +gen_tokens = model.generate( + input_ids, + max_new_tokens=100, + do_sample=True, + temperature=0.3, +) + +gen_text = tokenizer.decode(gen_tokens[0]) +print(gen_text) +``` + +## CohereConfig + +[[autodoc]] CohereConfig + +## CohereTokenizerFast + +[[autodoc]] CohereTokenizerFast + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- update_post_processor +- save_vocabulary + +## CohereModel + +[[autodoc]] CohereModel + +- forward + +## CohereForCausalLM + +[[autodoc]] CohereForCausalLM + +- forward \ No newline at end of file From a5b4bf719d498bd8e44f9fbe1d2b9c0090f27cd9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:11 +0300 Subject: [PATCH 400/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/conditional=5Fdetr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/conditional_detr.md | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/source/ar/model_doc/conditional_detr.md diff --git a/docs/source/ar/model_doc/conditional_detr.md b/docs/source/ar/model_doc/conditional_detr.md new file mode 100644 index 00000000000000..4630cadb1eabae --- /dev/null +++ b/docs/source/ar/model_doc/conditional_detr.md @@ -0,0 +1,63 @@ +# Conditional DETR + +## نظرة عامة + +تم اقتراح نموذج Conditional DETR في الورقة البحثية [Conditional DETR for Fast Training Convergence](https://arxiv.org/abs/2108.06152) بواسطة Depu Meng وآخرون. يقدم Conditional DETR آلية اهتمام متقاطع مشروطة لتسريع تدريب DETR. ويحقق تقاربًا أسرع من DETR بمعدل 6.7 إلى 10 مرات. + +ملخص الورقة البحثية كما يلي: + +*"تقدم طريقة DETR التي تم تطويرها مؤخرًا بنية الترميز فك الترميز Transformer إلى كشف الأشياء وتحقيق أداء واعد. في هذه الورقة، نعالج مشكلة التقارب البطيء للتدريب، ونقدم آلية اهتمام متقاطع مشروطة لتسريع تدريب DETR. ويستلهم نهجنا من حقيقة أن الاهتمام المتقاطع في DETR يعتمد بشكل كبير على تضمين المحتوى لتحديد المواقع الأربعة المتطرفة والتنبؤ بالصندوق، مما يزيد من الحاجة إلى تضمينات محتوى عالية الجودة، وبالتالي صعوبة التدريب. ويقوم نهجنا، الذي يسمى Conditional DETR، بتعلم استعلام مكاني مشروط من تضمين فك الترميز للاهتمام المتقاطع متعدد الرؤوس في فك الترميز. وتتمثل الفائدة في أنه من خلال الاستعلام المكاني المشروط، يمكن لكل رأس اهتمام متقاطع أن يركز على نطاق يحتوي على منطقة مميزة، مثل أحد طرفي الكائن أو منطقة داخل صندوق الكائن. وهذا يحد من النطاق المكاني لتحديد المواقع للمناطق المميزة من أجل تصنيف الكائنات وانحدار الصندوق، وبالتالي تقليل الاعتماد على تضمينات المحتوى وتسهيل التدريب. وتظهر النتائج التجريبية أن Conditional DETR يحقق تقاربًا أسرع بمعدل 6.7 مرة لهياكل R50 و R101 الأساسية و 10 مرات لهياكل DC5-R50 و DC5-R101 الأقوى. الكود متاح على https://github.com/Atten4Vis/ConditionalDETR.* + + + + يظهر Conditional DETR تقاربًا أسرع بكثير مقارنة بـ DETR الأصلي. مأخوذ من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [DepuMeng](https://huggingface.co/DepuMeng). ويمكن العثور على الكود الأصلي [هنا](https://github.com/Atten4Vis/ConditionalDETR). + +## الموارد + +- يمكن العثور على البرامج النصية لضبط نموذج [`ConditionalDetrForObjectDetection`] باستخدام [`Trainer`] أو [Accelerate](https://huggingface.co/docs/accelerate/index) [هنا](https://github.com/huggingface/transformers/tree/main/examples/pytorch/object-detection). +- راجع أيضًا: [دليل مهمة كشف الأشياء](../tasks/object_detection). + +## ConditionalDetrConfig + +[[autodoc]] ConditionalDetrConfig + +## ConditionalDetrImageProcessor + +[[autodoc]] ConditionalDetrImageProcessor + +- preprocess +- post_process_object_detection +- post_process_instance_segmentation +- post_process_semantic_segmentation +- post_process_panoptic_segmentation + +## ConditionalDetrFeatureExtractor + +[[autodoc]] ConditionalDetrFeatureExtractor + +- __call__ +- post_process_object_detection +- post_process_instance_segmentation +- post_process_semantic_segmentation +- post_process_panoptic_segmentation + +## ConditionalDetrModel + +[[autodoc]] ConditionalDetrModel + +- forward + +## ConditionalDetrForObjectDetection + +[[autodoc]] ConditionalDetrForObjectDetection + +- forward + +## ConditionalDetrForSegmentation + +[[autodoc]] ConditionalDetrForSegmentation + +- forward \ No newline at end of file From 34f13d2095e54f8f11fe62eb08daf22e3080b96e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:12 +0300 Subject: [PATCH 401/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/convbert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/convbert.md | 121 +++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/source/ar/model_doc/convbert.md diff --git a/docs/source/ar/model_doc/convbert.md b/docs/source/ar/model_doc/convbert.md new file mode 100644 index 00000000000000..e520fcb34e2269 --- /dev/null +++ b/docs/source/ar/model_doc/convbert.md @@ -0,0 +1,121 @@ +# ConvBERT + +## نظرة عامة + +اقتُرح نموذج ConvBERT في [ConvBERT: Improving BERT with Span-based Dynamic Convolution](https://arxiv.org/abs/2008.02496) بواسطة Zihang Jiang, Weihao Yu, Daquan Zhou, Yunpeng Chen, Jiashi Feng, Shuicheng Yan. + +مقدمة الورقة البحثية هي التالية: + +*حققت نماذج اللغة المُدربة مسبقًا مثل BERT ومتغيراته أداءً مثيرًا للإعجاب في العديد من مهام فهم اللغة الطبيعية. ومع ذلك، يعتمد BERT بشكل كبير على كتلة الاهتمام الذاتي العالمي، وبالتالي يعاني من آثار ذاكرة كبيرة وتكلفة حوسبة عالية. على الرغم من أن جميع رؤوس اهتمامه تستفسر عن التسلسل الكامل للإدخال لإنشاء خريطة الاهتمام من منظور عالمي، إلا أننا نلاحظ أن بعض الرؤوس تحتاج فقط إلى تعلم التبعيات المحلية، مما يعني وجود حوسبة زائدة. لذلك، نقترح حوسبة ديناميكية جديدة تعتمد على النطاق لاستبدال رؤوس الاهتمام الذاتي هذه لنمذجة التبعيات المحلية مباشرةً. تشكل رؤوس الحوسبة الجديدة، جنبًا إلى جنب مع بقية رؤوس الاهتمام الذاتي، كتلة اهتمام مختلطة أكثر كفاءة في تعلم السياق العالمي والمحلي. نقوم بتجهيز BERT بتصميم الاهتمام المختلط هذا وبناء نموذج ConvBERT. وقد أظهرت التجارب أن ConvBERT يتفوق بشكل كبير على BERT ومتغيراته في مهام مختلفة، بتكلفة تدريب أقل وعدد أقل من معلمات النموذج. ومن المثير للاهتمام أن نموذج ConvBERTbase يحقق نتيجة 86.4 في اختبار GLUE، أي أعلى بـ 0.7 من نموذج ELECTRAbase، مع استخدام أقل من ربع تكلفة التدريب. سيتم إطلاق الكود والنماذج المُدربة مسبقًا.* + +تمت المساهمة بهذا النموذج من قبل [abhishek](https://huggingface.co/abhishek). ويمكن العثور على التنفيذ الأصلي هنا: https://github.com/yitu-opensource/ConvBert + +## نصائح الاستخدام + +نصائح تدريب ConvBERT مماثلة لتلك الخاصة بـ BERT. للاطلاع على نصائح الاستخدام، يرجى الرجوع إلى [توثيق BERT](bert). + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة المعقدة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## ConvBertConfig + +[[autodoc]] ConvBertConfig + +## ConvBertTokenizer + +[[autodoc]] ConvBertTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## ConvBertTokenizerFast + +[[autodoc]] ConvBertTokenizerFast + + + + +## ConvBertModel + +[[autodoc]] ConvBertModel + +- forward + +## ConvBertForMaskedLM + +[[autodoc]] ConvBertForMaskedLM + +- forward + +## ConvBertForSequenceClassification + +[[autodoc]] ConvBertForSequenceClassification + +- forward + +## ConvBertForMultipleChoice + +[[autodoc]] ConvBertForMultipleChoice + +- forward + +## ConvBertForTokenClassification + +[[autodoc]] ConvBertForTokenClassification + +- forward + +## ConvBertForQuestionAnswering + +[[autodoc]] ConvBertForQuestionAnswering + +- forward + + + + +## TFConvBertModel + +[[autodoc]] TFConvBertModel + +- call + +## TFConvBertForMaskedLM + +[[autodoc]] TFConvBertForMaskedLM + +- call + +## TFConvBertForSequenceClassification + +[[autodoc]] TFConvBertForSequenceClassification + +- call + +## TFConvBertForMultipleChoice + +[[autodoc]] TFConvBertForMultipleChoice + +- call + +## TFConvBertForTokenClassification + +[[autodoc]] TFConvBertForTokenClassification + +- call + +## TFConvBertForQuestionAnswering + +[[autodoc]] TFConvBertForQuestionAnswering + +- call + + + \ No newline at end of file From d08bd6211d2607e061d5e8b055d4286b06f67053 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:14 +0300 Subject: [PATCH 402/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/convnext.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/convnext.md | 79 ++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/source/ar/model_doc/convnext.md diff --git a/docs/source/ar/model_doc/convnext.md b/docs/source/ar/model_doc/convnext.md new file mode 100644 index 00000000000000..0a45bb1508d32a --- /dev/null +++ b/docs/source/ar/model_doc/convnext.md @@ -0,0 +1,79 @@ +# ConvNeXT + +## نظرة عامة + +اقترح نموذج ConvNeXT في [شبكة Convolutional لعقد العشرينيات](https://arxiv.org/abs/2201.03545) بواسطة زوانج ليو، هانزي ماو، تشاو-يوان وو، كريستوف فايشتنهوفر، تريفور داريل، ساينينغ شي. + +ConvNeXT هي نموذج قائم على الشبكات العصبية التلافيفية الخالصة (ConvNet)، مستوحى من تصميم محولات الرؤية، والذي يدعي أنه يتفوق عليها. + +الملخص من الورقة هو ما يلي: + +*"بدأ "عقد العشرينيات الصاخب" للتعرف البصري مع تقديم محولات الرؤية (ViTs)، والتي تفوقت بسرعة على شبكات Convolutional كنموذج تصنيف الصور الأكثر تقدماً. من ناحية أخرى، يواجه ViT الأساسي صعوبات عند تطبيقه على مهام رؤية الكمبيوتر العامة مثل الكشف عن الأجسام والتجزئة الدلالية. إن المحولات الهرمية (مثل محولات Swin) هي التي أعادت تقديم العديد من الأولويات المسبقة لـ ConvNet، مما يجعل المحولات قابلة للتطبيق عمليًا كعمود فقري بصري عام وإظهار أداء رائع في مجموعة واسعة من مهام الرؤية. ومع ذلك، لا يزال يُنسب فعالية هذه الأساليب الهجينة إلى حد كبير إلى التفوق المتأصل لمحولات، بدلاً من التحيزات الاستقرائية المتأصلة للالتفافات. في هذا العمل، نعيد فحص مساحات التصميم واختبار حدود ما يمكن أن تحققه شبكة Convolutional نقية. نقوم تدريجياً "تحديث" ResNet القياسية نحو تصميم محول رؤية، واكتشاف العديد من المكونات الرئيسية التي تساهم في اختلاف الأداء على طول الطريق. نتيجة هذا الاستكشاف هي عائلة من نماذج ConvNet النقية تسمى ConvNeXt. تم بناء ConvNeXts بالكامل من وحدات ConvNet القياسية، وتتنافس ConvNeXts بشكل إيجابي مع المحولات من حيث الدقة وقابلية التطوير، وتحقيق 87.8٪ من دقة ImageNet الأعلى وتفوق محولات Swin على كوكو للكشف وADE20K للتجزئة، مع الحفاظ على بساطة وكفاءة شبكات ConvNets القياسية.* + +drawing + +هندسة ConvNeXT. مأخوذة من الورقة الأصلية. + +تمت المساهمة في هذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). تمت المساهمة في إصدار TensorFlow من النموذج بواسطة [ariG23498](https://github.com/ariG23498) و [gante](https://github.com/gante) و [sayakpaul](https://github.com/sayakpaul) (مساهمة متساوية). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/ConvNeXt). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام ConvNeXT. + + + +- [`ConvNextForImageClassification`] مدعوم بواسطة [نص برمجي توضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## ConvNextConfig + +[[autodoc]] ConvNextConfig + +## ConvNextFeatureExtractor + +[[autodoc]] ConvNextFeatureExtractor + +## ConvNextImageProcessor + +[[autodoc]] ConvNextImageProcessor + +- preprocess + + + + + +## ConvNextModel + +[[autodoc]] ConvNextModel + +- forward + +## ConvNextForImageClassification + +[[autodoc]] ConvNextForImageClassification + +- forward + + + + + +## TFConvNextModel + +[[autodoc]] TFConvNextModel + +- call + +## TFConvNextForImageClassification + +[[autodoc]] TFConvNextForImageClassification + +- call + + + + \ No newline at end of file From cc966f2302e567997d069e11e8591589b4d659b9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:16 +0300 Subject: [PATCH 403/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/convnextv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/convnextv2.md | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 docs/source/ar/model_doc/convnextv2.md diff --git a/docs/source/ar/model_doc/convnextv2.md b/docs/source/ar/model_doc/convnextv2.md new file mode 100644 index 00000000000000..b22186fbed9268 --- /dev/null +++ b/docs/source/ar/model_doc/convnextv2.md @@ -0,0 +1,56 @@ +# ConvNeXt V2 + +## نظرة عامة + +اقترح نموذج ConvNeXt V2 في ورقة "ConvNeXt V2: التصميم المشترك وتوسيع شبكات التحويل مع برامج الترميز الذاتية القناع" بقلم سانجهيون وو، وشوبهيك ديبناث، ورونجهانج هو، وزينلي تشن، وزوانج ليو، وإن سو كيون، وساينينج شي. + +ConvNeXt V2 هو نموذج قائم على الشبكات العصبية الالتفافية الخالصة (ConvNet)، مستوحى من تصميم محولات الرؤية، وهو خلف لـ [ConvNeXT](convnext). + +الملخص من الورقة هو كما يلي: + +*دفعًا من خلال التحسينات المعمارية وأطر تعلم التمثيل الأفضل، شهد مجال التعرف المرئي تحديثًا سريعًا وتعزيز الأداء في أوائل العقد الأول من القرن الحادي والعشرين. على سبيل المثال، أظهرت شبكات الالتفاف الحديثة، التي يمثلها ConvNeXt، أداءً قويًا في سيناريوهات مختلفة. في حين صممت هذه النماذج في الأصل للتعلم الخاضع للإشراف باستخدام علامات ImageNet، إلا أنها يمكن أن تستفيد أيضًا من تقنيات التعلم الذاتي مثل برامج الترميز الذاتية القناع (MAE). ومع ذلك، وجدنا أن الجمع البسيط بين هذين النهجين يؤدي إلى أداء دون المستوى المطلوب. في هذه الورقة، نقترح إطار ترميز ذاتي قناع قائمًا على التحويل بالكامل وطبقة جديدة لتطبيع الاستجابة العالمية (GRN) يمكن إضافتها إلى بنية ConvNeXt لتعزيز المنافسة بين ميزات القناة. يؤدي هذا التصميم المشترك لتقنيات التعلم الذاتي والتحسين المعماري إلى عائلة نماذج جديدة تسمى ConvNeXt V2، والتي تحسن بشكل كبير أداء شبكات الالتفاف الخالصة على معايير التعرف المختلفة، بما في ذلك تصنيف ImageNet، والكشف عن COCO، وقسم ADE20K. كما نقدم نماذج ConvNeXt V2 مُدربة مسبقًا بأحجام مختلفة، بدءًا من نموذج Atto الفعال بحجم 3.7 مليون معلمة بنسبة دقة 76.7٪ على ImageNet، إلى نموذج Huge بحجم 650 مليون معلمة يحقق دقة 88.9٪ من الطراز الأول باستخدام بيانات التدريب العامة فقط.* + + + +هندسة ConvNeXt V2. مأخوذة من الورقة الأصلية. + +ساهم بهذا النموذج [adirik](https://huggingface.co/adirik). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/ConvNeXt-V2). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام ConvNeXt V2. + + + +- [`ConvNextV2ForImageClassification`] مدعوم بواسطة [نص برمجي مثالي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد في الحالة المثالية شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## ConvNextV2Config + +[[autodoc]] ConvNextV2Config + +## ConvNextV2Model + +[[autodoc]] ConvNextV2Model + +- forward + +## ConvNextV2ForImageClassification + +[[autodoc]] ConvNextV2ForImageClassification + +- forward + +## TFConvNextV2Model + +[[autodoc]] TFConvNextV2Model + +- call + +## TFConvNextV2ForImageClassification + +[[autodoc]] TFConvNextV2ForImageClassification + +- call \ No newline at end of file From 2524c1ffc3f1bb00692d1bc583554ad76af7f64f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:18 +0300 Subject: [PATCH 404/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/cpm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/cpm.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 docs/source/ar/model_doc/cpm.md diff --git a/docs/source/ar/model_doc/cpm.md b/docs/source/ar/model_doc/cpm.md new file mode 100644 index 00000000000000..632722c47c846d --- /dev/null +++ b/docs/source/ar/model_doc/cpm.md @@ -0,0 +1,30 @@ +# CPM + +## نظرة عامة +اقترح نموذج CPM في [CPM: A Large-scale Generative Chinese Pre-trained Language Model](https://arxiv.org/abs/2012.00413) بواسطة Zhengyan Zhang, Xu Han, Hao Zhou, Pei Ke, Yuxian Gu, Deming Ye, Yujia Qin, +Yusheng Su, Haozhe Ji, Jian Guan, Fanchao Qi, Xiaozhi Wang, Yanan Zheng, Guoyang Zeng, Huanqi Cao, Shengqi Chen, +Daixuan Li, Zhenbo Sun, Zhiyuan Liu, Minlie Huang, Wentao Han, Jie Tang, Juanzi Li, Xiaoyan Zhu, Maosong Sun. + +المقتطف من الورقة هو ما يلي: + +* أثبتت نماذج اللغة المعالجة مسبقًا (PLMs) فائدتها لمختلف مهام معالجة اللغات الطبيعية (NLP) التنازلية. مؤخرًا، لفت GPT-3، +بـ 175 مليار معلمة و 570 جيجابايت من بيانات التدريب، الكثير من الانتباه بسبب قدرة التعلم القليلة الإشراف (حتى +التعلم بدون إشراف). ومع ذلك، لا يزال تطبيق GPT-3 لحل مهام NLP الصينية يمثل تحديًا، حيث أن فيلق تدريب GPT-3 هو في الأساس باللغة الإنجليزية، والمعلمات غير متاحة للجمهور. في هذا التقرير الفني، نقدم النموذج الصيني المعالج مسبقًا للغة (CPM) مع المعالجة المولدة مسبقًا على بيانات التدريب الصينية واسعة النطاق. على حد علمنا، يعد CPM، الذي يحتوي على 2.6 مليار معلمة و 100 جيجابايت من بيانات التدريب الصينية، أكبر نموذج لغوي صيني معالج مسبقًا، والذي يمكن أن يسهل العديد من مهام NLP الصينية التنازلية، مثل المحادثة، وتوليد المقالات، +اختبار الاختيار من متعدد، وفهم اللغة. تُظهر التجارب المستفيضة أن CPM يحقق أداءً قويًا في العديد من مهام NLP في إعدادات التعلم القليلة الإشراف (حتى بدون إشراف). + +تمت المساهمة بهذا النموذج بواسطة [canwenxu](https://huggingface.co/canwenxu). يمكن العثور على التنفيذ الأصلي +هنا: https://github.com/TsinghuaAI/CPM-Generate + + + +تتشابه بنية CPM مع GPT-2، باستثناء طريقة التمييز. راجع [وثائق GPT-2](gpt2) للحصول على معلومات مرجعية حول واجهة برمجة التطبيقات. + + + +## CpmTokenizer + +[[autodoc]] CpmTokenizer + +## CpmTokenizerFast + +[[autodoc]] CpmTokenizerFast \ No newline at end of file From 886684c2c07b8fb6d0eeda6525271ae3fa8400b1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:20 +0300 Subject: [PATCH 405/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/cpmant.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/cpmant.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/source/ar/model_doc/cpmant.md diff --git a/docs/source/ar/model_doc/cpmant.md b/docs/source/ar/model_doc/cpmant.md new file mode 100644 index 00000000000000..c5bc12cd3ddf7c --- /dev/null +++ b/docs/source/ar/model_doc/cpmant.md @@ -0,0 +1,29 @@ +# CPMAnt + +## نظرة عامة +CPM-Ant هو نموذج لغة صيني مفتوح المصدر مُدرب مسبقًا (PLM) يحتوي على 10 مليار معامل. وهو أيضًا أول معلم رئيسي في عملية التدريب المباشر لـ CPM-Live. عملية التدريب فعالة من حيث التكلفة وصديقة للبيئة. يحقق CPM-Ant أيضًا نتائج واعدة مع الضبط الدلتا على معيار CUGE. بالإضافة إلى النموذج الكامل، نقدم أيضًا إصدارات مضغوطة مختلفة لتلبية متطلبات تكوينات الأجهزة المختلفة. [انظر المزيد](https://github.com/OpenBMB/CPM-Live/tree/cpm-ant/cpm-live) + +تمت المساهمة بهذا النموذج من قبل [OpenBMB](https://huggingface.co/openbmb). يمكن العثور على الكود الأصلي [هنا](https://github.com/OpenBMB/CPM-Live/tree/cpm-ant/cpm-live). + +## الموارد +- تعليمات برمجية حول [CPM-Live](https://github.com/OpenBMB/CPM-Live/tree/cpm-ant/cpm-live). + +## CpmAntConfig + +[[autodoc]] CpmAntConfig +- all + +## CpmAntTokenizer + +[[autodoc]] CpmAntTokenizer +- all + +## CpmAntModel + +[[autodoc]] CpmAntModel +- all + +## CpmAntForCausalLM + +[[autodoc]] CpmAntForCausalLM +- all \ No newline at end of file From cd82e54757c753e00b3d17e6c579c096e4ee2ad6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:22 +0300 Subject: [PATCH 406/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/ctrl.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/ctrl.md | 84 ++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 docs/source/ar/model_doc/ctrl.md diff --git a/docs/source/ar/model_doc/ctrl.md b/docs/source/ar/model_doc/ctrl.md new file mode 100644 index 00000000000000..12cf46aecdc2c3 --- /dev/null +++ b/docs/source/ar/model_doc/ctrl.md @@ -0,0 +1,84 @@ +# CTRL + +## نظرة عامة +اقترح نموذج CTRL في [CTRL: A Conditional Transformer Language Model for Controllable Generation](https://arxiv.org/abs/1909.05858) بواسطة Nitish Shirish Keskar*، Bryan McCann*، Lav R. Varshney، Caiming Xiong و Richard Socher. وهو محول سببي (أحادي الاتجاه) تم تدريبه مسبقًا باستخدام نمذجة اللغة على مجموعة بيانات نصية كبيرة جدًا تبلغ حوالي 140 جيجابايت مع الاحتفاظ بالرمز الأول كرمز تحكم (مثل الروابط، والكتب، وويكيبيديا، وما إلى ذلك). + +مقتطف من الورقة هو ما يلي: + +*تظهر نماذج اللغة واسعة النطاق قدرات واعدة لتوليد النص، ولكن لا يمكن للمستخدمين التحكم بسهولة في جوانب معينة من النص المولد. نقدم CTRL، وهو نموذج لغة محول مشروط بحجم 1.63 مليار معلمة، تم تدريبه على رموز تحكم تحكم الأسلوب والمحتوى والسلوك الخاص بالمهمة. تم اشتقاق رموز التحكم من البنية التي تحدث بشكل طبيعي مع النص الخام، مما يحافظ على مزايا التعلم غير الخاضع للإشراف أثناء توفير تحكم أكثر صراحة في توليد النص. تسمح هذه الرموز أيضًا لـ CTRL بالتنبؤ بأجزاء بيانات التدريب التي من المحتمل أن تكون الأكثر احتمالًا تسلسل. توفر هذه الطريقة إمكانية تحليل كميات كبيرة من البيانات عبر عزو المصدر القائم على النموذج.* + +تمت المساهمة بهذا النموذج من قبل [keskarnitishr](https://huggingface.co/keskarnitishr). يمكن العثور على الكود الأصلي [هنا](https://github.com/salesforce/ctrl). + +## نصائح الاستخدام + +- يستخدم CTRL رموز التحكم لتوليد النص: فهو يتطلب أن تبدأ الأجيال بكلمات أو جمل أو روابط معينة لتوليد نص متماسك. راجع [التنفيذ الأصلي](https://github.com/salesforce/ctrl) لمزيد من المعلومات. + +- CTRL هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بتعبئة المدخلات على اليمين بدلاً من اليسار. + +- تم تدريب CTRL باستخدام هدف نمذجة اللغة السببية (CLM) وهو لذلك قوي في التنبؤ بالرمز التالي في تسلسل. الاستفادة من هذه الميزة تسمح CTRL لتوليد النص متماسكة من الناحية التركيبية كما يمكن ملاحظته في مثال *run_generation.py* النصي. + +- يمكن لنماذج PyTorch أن تأخذ `past_key_values` كإدخال، وهو أزواج الاهتمام بالقيمة الرئيسية التي تم حسابها مسبقًا. تقبل نماذج TensorFlow `past` كإدخال. يمنع استخدام قيمة `past_key_values` النموذج من إعادة حساب القيم المحسوبة مسبقًا في سياق توليد النص. راجع طريقة [`forward`](model_doc/ctrl#transformers.CTRLModel.forward) لمزيد من المعلومات حول استخدام هذا الحجة. + +## الموارد + +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) + +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +## CTRLConfig + +[[autodoc]] CTRLConfig + +## CTRLTokenizer + +[[autodoc]] CTRLTokenizer + +- save_vocabulary + + + + + +## CTRLModel + +[[autodoc]] CTRLModel + +- forward + +## CTRLLMHeadModel + +[[autodoc]] CTRLLMHeadModel + +- forward + +## CTRLForSequenceClassification + +[[autodoc]] CTRLForSequenceClassification + +- forward + + + + + +## TFCTRLModel + +[[autodoc]] TFCTRLModel + +- call + +## TFCTRLLMHeadModel + +[[autodoc]] TFCTRLLMHeadModel + +- call + +## TFCTRLForSequenceClassification + +[[autodoc]] TFCTRLForSequenceClassification + +- call + + + + \ No newline at end of file From 632df2fe222c0980f5b0daf2fe1e95b8c77648bd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:24 +0300 Subject: [PATCH 407/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/cvt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/cvt.md | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/source/ar/model_doc/cvt.md diff --git a/docs/source/ar/model_doc/cvt.md b/docs/source/ar/model_doc/cvt.md new file mode 100644 index 00000000000000..f3c3cd849312a9 --- /dev/null +++ b/docs/source/ar/model_doc/cvt.md @@ -0,0 +1,66 @@ +# محول الرؤية التحويلي التلافيفي (CvT) + +## نظرة عامة + +اقترح نموذج CvT في [CvT: تقديم التحويلات إلى محولات الرؤية](https://arxiv.org/abs/2103.15808) بواسطة Haiping Wu و Bin Xiao و Noel Codella و Mengchen Liu و Xiyang Dai و Lu Yuan و Lei Zhang. محول الرؤية التلافيفي (CvT) يحسن من [محول الرؤية (ViT)](vit) في الأداء والكفاءة من خلال تقديم التحويلات إلى ViT لإنتاج الأفضل من كلا التصميمين. + +الملخص من الورقة هو ما يلي: + +*نقدم في هذه الورقة بنية جديدة، تسمى محول الرؤية التلافيفي (CvT)، والتي تحسن محول الرؤية (ViT) في الأداء والكفاءة من خلال تقديم التحويلات إلى ViT لإنتاج الأفضل من كلا التصميمين. يتم تحقيق ذلك من خلال تعديلين رئيسيين: تسلسل هرمي لمحولات تحتوي على تضمين رمزي تحويلي جديد، وكتلة محول تحويلي تستخدم إسقاطًا تحويليًا. وتضيف هذه التغييرات خصائص مرغوبة من شبكات التلافيف العصبية (CNNs) إلى بنية ViT (مثل التحول، والتدرج، وثبات التشوه) مع الحفاظ على مزايا المحولات (مثل الاهتمام الديناميكي، والسياق العالمي، والتعميم الأفضل). نحن نتحقق من صحة CvT من خلال إجراء تجارب واسعة النطاق، مما يظهر أن هذا النهج يحقق أداءً متميزًا على محولات الرؤية الأخرى وشبكات ResNet على ImageNet-1k، مع عدد أقل من المعلمات وعمليات الفاصلة العائمة. بالإضافة إلى ذلك، يتم الحفاظ على مكاسب الأداء عند التدريب المسبق على مجموعات بيانات أكبر (مثل ImageNet-22k) والضبط الدقيق لمهام التدفق السفلي. عند التدريب المسبق على ImageNet-22k، يحصل نموذجنا CvT-W24 على دقة 87.7٪ للتصنيفات الأعلى-1 على مجموعة بيانات ImageNet-1k للتحقق من الصحة. وأخيرًا، تُظهر نتائجنا أنه يمكن الاستغناء بأمان عن الترميز الموضعي، وهو مكون أساسي في محولات الرؤية الحالية، في نموذجنا، مما يبسط التصميم لمهام الرؤية ذات الدقة الأعلى.* + +تمت المساهمة بهذا النموذج بواسطة [anugunj](https://huggingface.co/anugunj). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/CvT). + +## نصائح الاستخدام + +- تعد نماذج CvT محولات رؤية عادية، ولكنها مدربة باستخدام التحويلات. إنها تتفوق على [النموذج الأصلي (ViT)](vit) عند ضبطها الدقيق على ImageNet-1K و CIFAR-100. +- يمكنك الاطلاع على دفاتر الملاحظات التجريبية المتعلقة بالاستدلال وكذلك الضبط الدقيق على البيانات المخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/VisionTransformer) (يمكنك ببساطة استبدال [`ViTFeatureExtractor`] بـ [`AutoImageProcessor`] و [`ViTForImageClassification`] بـ [`CvtForImageClassification`]). +- نقاط التفتيش المتاحة إما (1) مدربة مسبقًا على [ImageNet-22k](http://www.image-net.org/) (مجموعة من 14 مليون صورة و22 ألف فئة) فقط، أو (2) أيضًا ضبطها بدقة على ImageNet-22k أو (3) أيضًا ضبطها بدقة على [ImageNet-1k](http://www.image-net.org/challenges/LSVRC/2012/) (يشار إليها أيضًا باسم ILSVRC 2012، وهي مجموعة من 1.3 مليون صورة و1000 فئة). + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام CvT. + + + +- [`CvtForImageClassification`] مدعوم بواسطة [نص البرنامج النصي التوضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## CvtConfig + +[[autodoc]] CvtConfig + + + + +## CvtModel + +[[autodoc]] CvtModel + +- forward + +## CvtForImageClassification + +[[autodoc]] CvtForImageClassification + +- forward + + + + +## TFCvtModel + +[[autodoc]] TFCvtModel + +- call + +## TFCvtForImageClassification + +[[autodoc]] TFCvtForImageClassification + +- call + + + + \ No newline at end of file From cfb3db3d74a3733ef1a061058dc5643ab8f6be6a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:25 +0300 Subject: [PATCH 408/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/data2vec.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/data2vec.md | 198 +++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 docs/source/ar/model_doc/data2vec.md diff --git a/docs/source/ar/model_doc/data2vec.md b/docs/source/ar/model_doc/data2vec.md new file mode 100644 index 00000000000000..218d955824eabb --- /dev/null +++ b/docs/source/ar/model_doc/data2vec.md @@ -0,0 +1,198 @@ +# Data2Vec + +## نظرة عامة + +اقترح نموذج Data2Vec في ورقة بحثية بعنوان "data2vec: A General Framework for Self-supervised Learning in Speech, Vision and Language" بواسطة Alexei Baevski و Wei-Ning Hsu و Qiantong Xu و Arun Babu و Jiatao Gu و Michael Auli. + +يقترح Data2Vec إطار عمل موحد للتعلم الذاتي الإشراف عبر طرائق بيانات مختلفة - النص والصوت والصور. والأهم من ذلك، أن الأهداف المتوقعة للتعليم المسبق هي تمثيلات كامنة متخصصة في السياق للإدخالات، بدلاً من أهداف مستقلة عن السياق خاصة بالطرائق. + +الملخص من الورقة هو ما يلي: + +* "في حين أن الفكرة العامة للتعلم الذاتي الإشراف متطابقة عبر الطرائق، إلا أن الخوارزميات والأهداف الفعلية تختلف اختلافًا كبيرًا لأنها طُورت مع وضع طريقة واحدة في الاعتبار. وللاقتراب أكثر من التعلم الذاتي الإشراف العام، نقدم data2vec، وهو إطار عمل يستخدم نفس طريقة التعلم إما للكلام أو معالجة اللغات الطبيعية أو رؤية الكمبيوتر. وتتمثل الفكرة الأساسية في التنبؤ بالتمثيلات الكامنة للبيانات الكاملة للإدخال بناءً على عرض مقنع للإدخال في إعداد التقطير الذاتي باستخدام بنية Transformer القياسية. + +بدلاً من التنبؤ بالأهداف الخاصة بالطرائق مثل الكلمات أو الرموز المرئية أو وحدات الكلام البشري التي تكون محلية في طبيعتها، يتنبأ نموذج data2vec بالتمثيلات الكامنة المتخصصة في السياق والتي تحتوي على معلومات من الإدخال بالكامل. وتظهر التجارب على المعايير المرجعية الرئيسية للتعرف على الكلام وتصنيف الصور وفهم اللغة الطبيعية حالة جديدة من الفن أو الأداء التنافسي للأساليب السائدة. النماذج والتعليمات البرمجية متاحة على www.github.com/pytorch/fairseq/tree/master/examples/data2vec. + +هذه النماذج ساهم بها [edugp](https://huggingface.co/edugp) و [patrickvonplaten](https://huggingface.co/patrickvonplaten). وساهم [sayakpaul](https://github.com/sayakpaul) و [Rocketknight1](https://github.com/Rocketknight1) في Data2Vec للرؤية في TensorFlow. + +يمكن العثور على التعليمات البرمجية الأصلية (للنص والكلام) هنا: [https://github.com/pytorch/fairseq/tree/main/examples/data2vec](https://github.com/pytorch/fairseq/tree/main/examples/data2vec). + +يمكن العثور على التعليمات البرمجية الأصلية للرؤية هنا: [https://github.com/facebookresearch/data2vec_vision/tree/main/beit](https://github.com/facebookresearch/data2vec_vision/tree/main/beit). + +## نصائح الاستخدام + +- تم تدريب كل من Data2VecAudio و Data2VecText و Data2VecVision باستخدام نفس طريقة التعلم الذاتي. + +- بالنسبة لـ Data2VecAudio، تكون المعالجة المسبقة مماثلة لـ [`Wav2Vec2Model`]، بما في ذلك استخراج الميزات. + +- بالنسبة لـ Data2VecText، تكون المعالجة المسبقة مماثلة لـ [`RobertaModel`]، بما في ذلك التمييز. + +- بالنسبة لـ Data2VecVision، تكون المعالجة المسبقة مماثلة لـ [`BeitModel`]، بما في ذلك استخراج الميزات. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Data2Vec. + + + +- [`Data2VecVisionForImageClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + +- للضبط الدقيق لـ [`TFData2VecVisionForImageClassification`] على مجموعة بيانات مخصصة، راجع [دفتر الملاحظات](https://colab.research.google.com/github/sayakpaul/TF-2.0-Hacks/blob/master/data2vec_vision_image_classification.ipynb) هذا. + +**موارد وثائق Data2VecText** + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) + +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) + +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) + +- [دليل مهمة النمذجة اللغوية السببية](../tasks/language_modeling) + +- [دليل مهمة النمذجة اللغوية المقنعة](../tasks/masked_language_modeling) + +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +**موارد وثائق Data2VecAudio** + +- [دليل مهمة تصنيف الصوت](../tasks/audio_classification) + +- [دليل مهمة التعرف التلقائي على الكلام](../tasks/asr) + +**موارد وثائق Data2VecVision** + +- [تصنيف الصور](../tasks/image_classification) + +- [القطاعية الدلالية](../tasks/semantic_segmentation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب Pull Request وسنراجعه! ويفضل أن يوضح المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## Data2VecTextConfig + +[[autodoc]] Data2VecTextConfig + +## Data2VecAudioConfig + +[[autodoc]] Data2VecAudioConfig + +## Data2VecVisionConfig + +[[autodoc]] Data2VecVisionConfig + + + + +## Data2VecAudioModel + +[[autodoc]] Data2VecAudioModel + +- forward + +## Data2VecAudioForAudioFrameClassification + +[[autodoc]] Data2VecAudioForAudioFrameClassification + +- forward + +## Data2VecAudioForCTC + +[[autodoc]] Data2VecAudioForCTC + +- forward + +## Data2VecAudioForSequenceClassification + +[[autodoc]] Data2VecAudioForSequenceClassification + +- forward + +## Data2VecAudioForXVector + + +[[autodoc]] Data2VecAudioForXVector + +- forward + +## Data2VecTextModel + +[[autodoc]] Data2VecTextModel + +- forward + +## Data2VecTextForCausalLM + +[[autodoc]] Data2VecTextForCausalLM + +- forward + +## Data2VecTextForMaskedLM + +[[autodoc]] Data2VecTextForMaskedLM + +- forward + +## Data2VecTextForSequenceClassification + + +[[autodoc]] Data2VecTextForSequenceClassification + +- forward + +## Data2VecTextForMultipleChoice + +[[autodoc]] Data2VecTextForMultipleChoice + +- forward + +## Data2VecTextForTokenClassification + +[[autodoc]] Data2VecTextForTokenClassification + +- forward + +## Data2VecTextForQuestionAnswering + +[[autodoc]] Data2VecTextForQuestionAnswering + +- forward + +## Data2VecVisionModel + +[[autodoc]] Data2VecVisionModel + +- forward + +## Data2VecVisionForImageClassification + +[[autodoc]] Data2VecVisionForImageClassification + +- forward + +## Data2VecVisionForSemanticSegmentation + +[[autodoc]] Data2VecVisionForSemanticSegmentation + +- forward + + + + +## TFData2VecVisionModel + +[[autodoc]] TFData2VecVisionModel + +- call + +## TFData2VecVisionForImageClassification + +[[autodoc]] TFData2VecVisionForImageClassification + +- call + +## TFData2VecVisionForSemanticSegmentation + +[[autodoc]] TFData2VecVisionForSemanticSegmentation + +- call + + + \ No newline at end of file From 0b444e0c0749036881e479218711f41e8fdc5abe Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:27 +0300 Subject: [PATCH 409/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dbrx.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dbrx.md | 107 +++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/source/ar/model_doc/dbrx.md diff --git a/docs/source/ar/model_doc/dbrx.md b/docs/source/ar/model_doc/dbrx.md new file mode 100644 index 00000000000000..5391e30bac35d6 --- /dev/null +++ b/docs/source/ar/model_doc/dbrx.md @@ -0,0 +1,107 @@ +# DBRX + +## نظرة عامة + +DBRX هو نموذج لغة كبير (LLM) قائم على محول فك التشفير فقط تم تدريبه باستخدام التنبؤ بالعلامة التالية. يستخدم النموذج بنية mixture-of-experts (MoE) ذات الحبيبات الدقيقة مع ما مجموعه 132 بليون معلمة، يتم تنشيط 36 بليون معلمة منها لأي إدخال. تم التدريب المسبق لـ DBRX على 12 طن من رموز نص وبيانات التعليمات البرمجية. + +بالمقارنة مع النماذج المفتوحة الأخرى القائمة على MoE مثل Mixtral-8x7B و Grok-1، فإن DBRX دقيق، مما يعني أنه يستخدم عددًا أكبر من الخبراء الأصغر. يحتوي DBRX على 16 خبيرًا ويختار 4، بينما يحتوي Mixtral-8x7B و Grok-1 على 8 خبراء ويختاران 2. يوفر هذا 65 ضعف المزيد من مجموعات الخبراء الممكنة، وقد وجدنا أن هذا يحسن جودة النموذج. + +يستخدم DBRX ترميزات الموضع الدوارة (RoPE) ووحدات الخطية المحكومة (GLU) واهتمام الاستعلام المجمع (GQA). إنه نموذج قائم على BPE ويستخدم محلل رموز GPT-4 كما هو موضح في مستودع [tiktoken](https://github.com/openai/tiktoken). + +تم إجراء هذه الخيارات بناءً على تقييم شامل وتجارب التوسع. + +تم التدريب المسبق لـ DBRX على 12 طن من الرموز من البيانات المختارة بعناية وطول سياق أقصى يبلغ 32000 رمز. نقدر أن هذه البيانات أفضل مرتين على الأقل من البيانات التي استخدمناها لتدريب عائلة نماذج MPT. + +تم تطوير مجموعة البيانات الجديدة هذه باستخدام مجموعة أدوات Databricks الكاملة، بما في ذلك Apache Spark™ ودفاتر Databricks لمعالجة البيانات، وUnity Catalog لإدارة البيانات والحوكمة. + +لقد استخدمنا التعلم المناهج لتدريب سابق، وتغيير مزيج البيانات أثناء التدريب بطرق وجدنا أنها تحسن بشكل كبير من جودة النموذج. + +يمكن العثور على معلومات أكثر تفصيلاً حول DBRX Instruct و DBRX Base في منشور المدونة الفنية الخاص بنا [هنا](https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm). + +تمت المساهمة بهذا النموذج من قبل [eitan-turok](https://huggingface.co/eitanturok) و [abhi-db](https://huggingface.co/abhi-db). يمكن العثور على الكود الأصلي [هنا](https://github.com/databricks/dbrx-instruct)، على الرغم من أنه قد لا يكون محدثًا. + +## أمثلة الاستخدام + +يمكن استخدام طريقة `generate()` لتوليد نص باستخدام DBRX. يمكنك إنشاء باستخدام تنفيذ الاهتمام القياسي، واهتمام الفلاش، واهتمام المنتج النقطي المميز PyTorch. يوفر الاهتمامان الأخيران تسريعًا. + +```python +from transformers import DbrxForCausalLM, AutoTokenizer +import torch + +tokenizer = AutoTokenizer.from_pretrained("databricks/dbrx-instruct", token="YOUR_HF_TOKEN") +model = DbrxForCausalLM.from_pretrained( + "databricks/dbrx-instruct", + device_map="auto", + torch_dtype=torch.bfloat16, + token="YOUR_HF_TOKEN", +) + +input_text = "What does it take to build a great LLM?" +messages = [{"role": "user", "content": input_text}] +input_ids = tokenizer.apply_chat_template(messages, return_dict=True, tokenize=True, add_generation_prompt=True, return_tensors="pt").to("cuda") + +outputs = model.generate(**input_ids, max_new_tokens=200) +print(tokenizer.decode(outputs[0])) +``` + +إذا كان لديك تثبيت اهتمام الفلاش (`pip install flash-attn`)، فيمكنك إنشاء أسرع. (يمكن العثور على وثائق HuggingFace لاهتمام الفلاش [هنا](https://huggingface.co/docs/transformers/perf_infer_gpu_one#flashattention-2).) + +```python +from transformers import DbrxForCausalLM, AutoTokenizer +import torch + +tokenizer = AutoTokenizer.from_pretrained("databricks/dbrx-instruct", token="YOUR_HF_TOKEN") +model = DbrxForCausalLM.from_pretrained( + "databricks/dbrx-instruct", + device_map="auto", + torch_dtype=torch.bfloat16, + token="YOUR_HF_TOKEN", + attn_implementation="flash_attention_2", +) + +input_text = "What does it take to build a great LLM?" +messages = [{"role": "user", "content": input_text}] +input_ids = tokenizer.apply_chat_template(messages, return_dict=True, tokenize=True, add_generation_prompt=True, return_tensors="pt").to("cuda") + +outputs = model.generate(**input_ids, max_new_tokens=200) +print(tokenizer.decode(outputs[0])) +``` + +يمكنك أيضًا إنشاء أسرع باستخدام اهتمام المنتج النقطي لـ PyTorch. (يمكن العثور على وثائق HuggingFace لاهتمام المنتج النقطي المقيّم [هنا](https://huggingface.co/docs/transformers/perf_infer_gpu_one#pytorch-scaled-dot-product-attention).) + +```python +from transformers import DbrxForCausalLM, AutoTokenizer +import torch + +tokenizer = AutoTokenizer.from_pretrained("databricks/dbrx-instruct", token="YOUR_HF_TOKEN") +model = DbrxForCausalLM.from_pretrained( + "databricks/dbrx-instruct", + device_map="auto", + torch_dtype=torch.bfloat16, + token="YOUR_HF_TOKEN", + attn_implementation="sdpa", +) + +input_text = "What does it take to build a great LLM?" +messages = [{"role": "user", "content": input_text}] +input_ids = tokenizer.apply_chat_template(messages, return_dict=True, tokenize=True, add_generation_prompt=True, return_tensors="pt").to("cuda") + +outputs = model.generate(**input_ids, max_new_tokens=200) +print(tokenizer.decode(outputs[0])) +``` + +## DbrxConfig + +[[autodoc]] DbrxConfig + +## DbrxModel + +[[autodoc]] DbrxModel + +- forword + +## DbrxForCausalLM + +[[autodoc]] DbrxForCausalLM + +- forword \ No newline at end of file From 2246e618140ef28488c4be52f866307aa716e061 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:29 +0300 Subject: [PATCH 410/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/deberta-v2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/deberta-v2.md | 148 +++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 docs/source/ar/model_doc/deberta-v2.md diff --git a/docs/source/ar/model_doc/deberta-v2.md b/docs/source/ar/model_doc/deberta-v2.md new file mode 100644 index 00000000000000..e1ae1d5ef2e130 --- /dev/null +++ b/docs/source/ar/model_doc/deberta-v2.md @@ -0,0 +1,148 @@ +# DeBERTa-v2 + +## نظرة عامة + +اقترح نموذج DeBERTa في [DeBERTa: Decoding-enhanced BERT with Disentangled Attention](https://arxiv.org/abs/2006.03654) من قبل Pengcheng He, Xiaodong Liu, Jianfeng Gao, Weizhu Chen. وهو مبني على نموذج BERT من Google الذي صدر في عام 2018 ونموذج RoBERTa من Facebook الذي صدر في عام 2019. + +يستند النموذج إلى RoBERTa مع اهتمام منفصل وتدريب محسن لترميز الأقنعة باستخدام نصف البيانات المستخدمة في RoBERTa. + +الملخص من الورقة هو كما يلي: + +*أدى التقدم الأخير في نماذج اللغة العصبية المسبقة التدريب إلى تحسين كبير في أداء العديد من مهام معالجة اللغة الطبيعية (NLP). في هذه الورقة، نقترح بنية نموذج جديدة تسمى DeBERTa (Decoding-enhanced BERT with disentangled attention) والتي تحسن نماذج BERT وRoBERTa باستخدام تقنيتين جديدتين. الأولى هي آلية الاهتمام المنفصل، حيث يتم تمثيل كل كلمة باستخدام متجهين يشفر كل منهما المحتوى والموضع على التوالي، ويتم حساب أوزان الاهتمام بين الكلمات باستخدام مصفوفات منفصلة لمحتوياتها ومواضعها النسبية. ثانياً، يتم استخدام ترميز قناع محسن لاستبدال طبقة softmax الإخراجية للتنبؤ بالرموز المميزة المقنعة لتدريب النموذج المسبق. نُظهر أن هاتين التقنيتين تحسنان بشكل كبير كفاءة التدريب المسبق للنموذج وأداء المهام اللاحقة. مقارنة بـ RoBERTa-Large، يؤدي نموذج DeBERTa الذي تم تدريبه على نصف بيانات التدريب إلى أداء أفضل باستمرار في مجموعة واسعة من مهام NLP، حيث يحقق تحسينات على MNLI بنسبة +0.9% (90.2% مقابل 91.1%)، وعلى SQuAD v2.0 بنسبة +2.3% (88.4% مقابل 90.7%) وعلى RACE بنسبة +3.6% (83.2% مقابل 86.8%). سيتم إتاحة كود DeBERTa والنماذج المُدربة مسبقًا للجمهور على https://github.com/microsoft/DeBERTa.* + +يمكن العثور على المعلومات التالية مباشرة في [مستودع التنفيذ الأصلي](https://github.com/microsoft/DeBERTa). DeBERTa v2 هو الإصدار الثاني من نموذج DeBERTa. وهو يشمل نموذج 1.5B المستخدم في إرسال SuperGLUE single-model والذي حقق 89.9، مقابل خط الأساس البشري 89.8. يمكنك العثور على مزيد من التفاصيل حول هذا الإرسال في [مدونة](https://www.microsoft.com/en-us/research/blog/microsoft-deberta-surpasses-human-performance-on-the-superglue-benchmark/) المؤلفين. + +جديد في v2: + +- **المفردات** في v2، تم تغيير المحلل اللغوي لاستخدام مفردات جديدة بحجم 128K تم بناؤها من بيانات التدريب. بدلاً من المحلل اللغوي المستند إلى GPT2، أصبح المحلل اللغوي الآن [محللًا قائمًا على sentencepiece](https://github.com/google/sentencepiece). +- **nGiE(nGram Induced Input Encoding)** يستخدم نموذج DeBERTa-v2 طبقة تضمين إضافية إلى جانب طبقة المحول الأولى للتعرف بشكل أفضل على التبعية المحلية للرموز المميزة للإدخال. +- **مشاركة مصفوفة موضع الإسقاط مع مصفوفة إسقاط المحتوى في طبقة الاهتمام** بناءً على التجارب السابقة، يمكن أن يؤدي ذلك إلى توفير المعلمات دون التأثير على الأداء. +- **تطبيق bucket لتشفير المواضع النسبية** يستخدم نموذج DeBERTa-v2 log bucket لتشفير المواضع النسبية على غرار T5. +- **نموذج 900M & 1.5B** هناك حجمين إضافيين للنموذج متاحين: 900M و 1.5B، مما يحسن بشكل كبير أداء المهام اللاحقة. + +تمت المساهمة بهذا النموذج من قبل [DeBERTa](https://huggingface.co/DeBERTa). تمت المساهمة في تنفيذ TF 2.0 من قبل [kamalkraj](https://huggingface.co/kamalkraj). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/DeBERTa). + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز المميزة](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## DebertaV2Config + +[[autodoc]] DebertaV2Config + +## DebertaV2Tokenizer + +[[autodoc]] DebertaV2Tokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## DebertaV2TokenizerFast + +[[autodoc]] DebertaV2TokenizerFast + +- build_inputs_with_special_tokens +- create_token_type_ids_from_sequences + + + + + +## DebertaV2Model + +[[autodoc]] DebertaV2Model + +- forward + +## DebertaV2PreTrainedModel + +[[autodoc]] DebertaV2PreTrainedModel + +- forward + +## DebertaV2ForMaskedLM + +[[autodoc]] DebertaV2ForMaskedLM + +- forward + +## DebertaV2ForSequenceClassification + +[[autodoc]] DebertaV2ForSequenceClassification + +- forward + +## DebertaV2ForTokenClassification + +[[autodoc]] DebertaV2ForTokenClassification + +- forward + +## DebertaV2ForQuestionAnswering + +[[autodoc]] DebertaV2ForQuestionAnswering + +- forward + +## DebertaV2ForMultipleChoice + +[[autodoc]] DebertaV2ForMultipleChoice + +- forward + + + + + +## TFDebertaV2Model + +[[autodoc]] TFDebertaV2Model + +- call + +## TFDebertaV2PreTrainedModel + +[[autodoc]] TFDebertaV2PreTrainedModel + +- call + +## TFDebertaV2ForMaskedLM + +[[autodoc]] TFDebertaV2ForMaskedLM + +- call + +## TFDebertaV2ForSequenceClassification + +[[autodoc]] TFDebertaV2ForSequenceClassification + +- call + +## TFDebertaV2ForTokenClassification + +[[autodoc]] TFDebertaV2ForTokenClassification + +- call + +## TFDebertaV2ForQuestionAnswering + +[[autodoc]] TFDebertaV2ForQuestionAnswering + +- call + +## TFDebertaV2ForMultipleChoice + +[[autodoc]] TFDebertaV2ForMultipleChoice + +- call + + + + + \ No newline at end of file From 9cb93bfeedecd5e37f632e472d5e622c6f442ed0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:31 +0300 Subject: [PATCH 411/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/deberta.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/deberta.md | 157 ++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 docs/source/ar/model_doc/deberta.md diff --git a/docs/source/ar/model_doc/deberta.md b/docs/source/ar/model_doc/deberta.md new file mode 100644 index 00000000000000..f5c11d031438b6 --- /dev/null +++ b/docs/source/ar/model_doc/deberta.md @@ -0,0 +1,157 @@ +# DeBERTa + +## نظرة عامة +اقترح Pengcheng He وآخرون نموذج DeBERTa في ورقتهم البحثية بعنوان "DeBERTa: Decoding-enhanced BERT with Disentangled Attention". وهو مبني على نموذج BERT من Google الذي تم إصداره في عام 2018، ونموذج RoBERTa من Facebook الذي تم إصداره في عام 2019. + +يستند DeBERTa إلى نموذج RoBERTa مع إضافة آلية الانتباه المنفصلة (disentangled attention) وتعزيز تدريب فك تشفير القناع (enhanced mask decoder training) باستخدام نصف كمية البيانات المستخدمة في RoBERTa. + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +"حققت التقدمات الأخيرة في نماذج اللغة العصبية المُدربة مسبقًا تحسينات كبيرة في أداء العديد من مهام معالجة اللغة الطبيعية (NLP). وفي هذه الورقة، نقترح بنية نموذج جديدة تسمى DeBERTa (Decoding-enhanced BERT with disentangled attention) والتي تحسن نماذج BERT وRoBERTa باستخدام تقنيتين جديدتين. الأولى هي آلية الانتباه المنفصلة، حيث يتم تمثيل كل كلمة باستخدام متجهين يشفر أحدهما المحتوى والآخر الموضع، ويتم حساب أوزان الانتباه بين الكلمات باستخدام مصفوفات منفصلة لمحتوياتها ومواضعها النسبية. أما التقنية الثانية، فهي استخدام فك تشفير القناع المعزز ليحل محل طبقة softmax الإخراجية للتنبؤ بالرموز المميزة المقنعة لتدريب النموذج المُسبق. ونُظهر أن هاتين التقنيتين تحسنان بشكل كبير من كفاءة تدريب النموذج المُسبق وأداء المهام اللاحقة. مقارنة بنموذج RoBERTa-Large، يحقق نموذج DeBERTa المُدرب على نصف بيانات التدريب نتائج أفضل باستمرار في مجموعة واسعة من مهام NLP، حيث يحقق تحسينات بنسبة +0.9% في MNLI (من 90.2% إلى 91.1%)، و+2.3% في SQuAD v2.0 (من 88.4% إلى 90.7%)، و+3.6% في RACE (من 83.2% إلى 86.8%). ستكون شفرة DeBERTa والنماذج المُدربة مسبقًا متاحة للجمهور على https://github.com/microsoft/DeBERTa." + +تمت المساهمة بهذا النموذج من قبل [DeBERTa] (https://huggingface.co/DeBERTa). وتمت المساهمة في تنفيذ TF 2.0 بواسطة [kamalkraj] (https://huggingface.co/kamalkraj). ويمكن العثور على الشفرة الأصلية [هنا] (https://github.com/microsoft/DeBERTa). + +## الموارد +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DeBERTa. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب (Pull Request) وسنقوم بمراجعته! ويفضل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- منشور مدونة حول كيفية [تسريع تدريب النماذج الكبيرة باستخدام DeepSpeed] (https://huggingface.co/blog/accelerate-deepspeed) مع DeBERTa. + +- منشور مدونة حول [تعزيز خدمة العملاء باستخدام التعلم الآلي] (https://huggingface.co/blog/supercharge-customer-service-with-machine-learning) مع DeBERTa. + +- [`DebertaForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification.ipynb). + +- [`TFDebertaForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/tensorflow/text-classification) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification-tf.ipynb). + +- دليل مهام التصنيف النصي [هنا] (../tasks/sequence_classification). + +- [`DebertaForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/pytorch/token-classification) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification.ipynb). + +- [`TFDebertaForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/tensorflow/token-classification) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification-tf.ipynb). + +- فصل [تصنيف الرموز] (https://huggingface.co/course/chapter7/2?fw=pt) من دورة 🤗 Hugging Face Course. + +- فصل [ترميز الاقتران البايت ثنائي] (https://huggingface.co/course/chapter6/5?fw=pt) من دورة 🤗 Hugging Face Course. + +- دليل مهام تصنيف الرموز [هنا] (../tasks/token_classification). + +- [`DebertaForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#robertabertdistilbert-and-masked-language-modeling) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). + +- [`TFDebertaForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_mlmpy) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). + +- فصل [نمذجة اللغة المقنعة] (https://huggingface.co/course/chapter7/3?fw=pt) من دورة 🤗 Hugging Face Course. + +- دليل مهام نمذجة اللغة المقنعة [هنا] (../tasks/masked_language_modeling). + +- [`DebertaForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb). + +- [`TFDebertaForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي هذا] (https://github.com/huggingface/transformers/tree/main/examples/tensorflow/question-answering) و [دفتر الملاحظات] (https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering-tf.ipynb). + +- فصل [الإجابة على الأسئلة] (https://huggingface.co/course/chapter7/7?fw=pt) من دورة 🤗 Hugging Face Course. + +- دليل مهام الإجابة على الأسئلة [هنا] (../tasks/question_answering). + +## DebertaConfig + +[[autodoc]] DebertaConfig + +## DebertaTokenizer + +[[autodoc]] DebertaTokenizer + +- build_inputs_with_special_tokens + +- get_special_tokens_mask + +- create_token_type_ids_from_sequences + +- save_vocabulary + +## DebertaTokenizerFast + +[[autodoc]] DebertaTokenizerFast + +- build_inputs_with_special_tokens + +- create_token_type_ids_from_sequences + + + + + +## DebertaModel + +[[autodoc]] DebertaModel + +- forward + +## DebertaPreTrainedModel + +[[autodoc]] DebertaPreTrainedModel + +## DebertaForMaskedLM + +[[autodoc]] DebertaForMaskedLM + +- forward + +## DebertaForSequenceClassification + +[[autodoc]] DebertaForSequenceClassification + +- forward + +## DebertaForTokenClassification + +[[autodoc]] DebertaForTokenClassification + +- forward + +## DebertaForQuestionAnswering + +[[autodoc]] DebertaForQuestionAnswering + +- forward + + + + + +## TFDebertaModel + +[[autodoc]] TFDebertaModel + +- call + +## TFDebertaPreTrainedModel + +[[autodoc]] TFDebertaPreTrainedModel + +- call + +## TFDebertaForMaskedLM + +[[autodoc]] TFDebertaForMaskedLM + +- call + +## TFDebertaForSequenceClassification + +[[autodoc]] TFDebertaForSequenceClassification + +- call + +## TFDebertaForTokenClassification + +[[autodoc]] TFDebertaForTokenClassification + +- call + +## TFDebertaForQuestionAnswering + +[[autodoc]] TFDebertaForQuestionAnswering + +- call + + + + \ No newline at end of file From 7813a2954677d27408fdd7c56d548bb467d6d06e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:33 +0300 Subject: [PATCH 412/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/decision=5Ftransformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/decision_transformer.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/source/ar/model_doc/decision_transformer.md diff --git a/docs/source/ar/model_doc/decision_transformer.md b/docs/source/ar/model_doc/decision_transformer.md new file mode 100644 index 00000000000000..47871daa400a38 --- /dev/null +++ b/docs/source/ar/model_doc/decision_transformer.md @@ -0,0 +1,29 @@ +# محول القرار + +## نظرة عامة + +اقترح نموذج محول القرار في "محول القرار: تعلم التعزيز عبر نمذجة التسلسل" من قبل ليلي تشين، وكيفن لو، وأرافند راجسواران، وكيمين لي، وأديتيا جروفر، ومايكل لاسكين، وبيتر أبيل، وأرافند سرينيفاس، وإيغور مورداتش. + +الملخص من الورقة هو ما يلي: + +*نقدم إطارًا يُجرِّد تعلم التعزيز (RL) كمشكلة نمذجة تسلسل. يتيح لنا ذلك الاستفادة من بساطة وبساطة بنية المحول، والتقدمات المرتبطة في نمذجة اللغة مثل GPT-x وBERT. نقدم على وجه التحديد، محول القرار، وهو بنية تعيد صياغة مشكلة RL كنمذجة تسلسل مشروطة. على عكس النهج السابقة لـ RL التي تناسب وظائف القيمة أو تحسب تدرجات السياسة، يقوم محول القرار ببساطة بإخراج الإجراءات المثلى من خلال الاستفادة من محول مقنع بشكل سببي. من خلال اشتراط نموذج ذاتي الارتداد على العائد المرغوب (المكافأة)، والدول، والإجراءات السابقة، يمكن لنموذج محول القرار الخاص بنا توليد إجراءات مستقبلية تحقق العائد المرغوب. على الرغم من بساطته، فإن محول القرار يتطابق مع أداء الخط الأساسي لـ RL غير الموجه بدون حالة الفن أو يتجاوزه في ألعاب Atari وOpenAI Gym وKey-to-Door.* + +هذه النسخة من النموذج مخصصة للمهام التي تكون فيها الحالة عبارة عن متجه. + +ساهم بهذا النموذج [edbeeching] (https://huggingface.co/edbeeching). يمكن العثور على الكود الأصلي [هنا] (https://github.com/kzl/decision-transformer). + +## DecisionTransformerConfig + +[[autodoc]] DecisionTransformerConfig + +## DecisionTransformerGPT2Model + +[[autodoc]] DecisionTransformerGPT2Model + +- forward + +## DecisionTransformerModel + +[[autodoc]] DecisionTransformerModel + +- forward \ No newline at end of file From 3b34661534b8126a6e1ed31d9197937abb460abc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:34 +0300 Subject: [PATCH 413/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/deformable=5Fdetr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/deformable_detr.md | 68 +++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 docs/source/ar/model_doc/deformable_detr.md diff --git a/docs/source/ar/model_doc/deformable_detr.md b/docs/source/ar/model_doc/deformable_detr.md new file mode 100644 index 00000000000000..15b0a76b96bad6 --- /dev/null +++ b/docs/source/ar/model_doc/deformable_detr.md @@ -0,0 +1,68 @@ +# Deformable DETR + +## نظرة عامة + +اقتُرح نموذج Deformable DETR في الورقة البحثية [Deformable DETR: Deformable Transformers for End-to-End Object Detection](https://arxiv.org/abs/2010.04159) من قبل Xizhou Zhu و Weijie Su و Lewei Lu و Bin Li و Xiaogang Wang و Jifeng Dai. + +يعالج Deformable DETR مشكلات بطء التقارب والحد من دقة الحيز المكاني للسمات في النموذج الأصلي [DETR](detr) من خلال الاستفادة من وحدة انتباه قابلة للتشكيل جديدة لا تهتم إلا بمجموعة صغيرة من نقاط المعاينة الرئيسية حول مرجع. + +ملخص الورقة البحثية هو كما يلي: + +*على الرغم من أن نموذج DETR قد اقترح مؤخرًا للتخلص من الحاجة إلى العديد من المكونات المصممة يدويًا في الكشف عن الأشياء مع إظهار أداء جيد، إلا أنه يعاني من بطء التقارب والحد من دقة الحيز المكاني للسمات، وذلك بسبب قيود وحدات اهتمام المحول في معالجة خرائط سمات الصور. وللتخفيف من هذه المشكلات، نقترح Deformable DETR، الذي تهتم وحدات الاهتمام فيه بنقاط المعاينة الرئيسية الصغيرة حول مرجع. يمكن لـ Deformable DETR تحقيق أداء أفضل من DETR (خاصة على الأجسام الصغيرة) مع تقليل عدد دورات التدريب بمقدار 10 مرات. وتظهر التجارب المستفيضة على مجموعة بيانات COCO فعالية نهجنا.* + + + + بنية Deformable DETR. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). ويمكن العثور على الكود الأصلي [هنا](https://github.com/fundamentalvision/Deformable-DETR). + +## نصائح الاستخدام + +- تدريب Deformable DETR مكافئ لتدريب نموذج [DETR](detr) الأصلي. راجع قسم [الموارد](#الموارد) أدناه لمفكرات الملاحظات التوضيحية. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Deformable DETR. + + + +- يمكن العثور على مفكرات الملاحظات التوضيحية المتعلقة بالاستنتاج + الضبط الدقيق على مجموعة بيانات مخصصة لـ [`DeformableDetrForObjectDetection`] [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Deformable-DETR). + +- يمكن العثور على النصوص البرمجية للضبط الدقيق لـ [`DeformableDetrForObjectDetection`] باستخدام [`Trainer`] أو [Accelerate](https://huggingface.co/docs/accelerate/index) [هنا](https://github.com/huggingface/transformers/tree/main/examples/pytorch/object-detection). + +- راجع أيضًا: [دليل مهمة الكشف عن الأشياء](../tasks/object_detection). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنراجعه! ويفضل أن يظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DeformableDetrImageProcessor + +[[autodoc]] DeformableDetrImageProcessor + +- preprocess + +- post_process_object_detection + +## DeformableDetrFeatureExtractor + +[[autodoc]] DeformableDetrFeatureExtractor + +- __call__ + +- post_process_object_detection + +## DeformableDetrConfig + +[[autodoc]] DeformableDetrConfig + +## DeformableDetrModel + +[[autodoc]] DeformableDetrModel + +- forward + +## DeformableDetrForObjectDetection + +[[autodoc]] DeformableDetrForObjectDetection + +- forward \ No newline at end of file From 82fed22167bc000ed187f63ec44f78eff22ca761 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:36 +0300 Subject: [PATCH 414/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/deit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/deit.md | 125 +++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 docs/source/ar/model_doc/deit.md diff --git a/docs/source/ar/model_doc/deit.md b/docs/source/ar/model_doc/deit.md new file mode 100644 index 00000000000000..06b73536f50667 --- /dev/null +++ b/docs/source/ar/model_doc/deit.md @@ -0,0 +1,125 @@ +# DeiT + +## نظرة عامة +اقترح نموذج DeiT في ورقة "تدريب محولات الصور الفعالة من حيث البيانات والتدريس من خلال الانتباه" بواسطة Hugo Touvron وآخرون. أظهرت محولات الرؤية (ViT) التي تم تقديمها في ورقة Dosovitskiy et al. أن أحدًا يمكنه مطابقة أو حتى التفوق على شبكات عصبية تلافيفية موجودة باستخدام محول تشفير (شبيه بـ BERT). ومع ذلك، تطلبت نماذج ViT التي تم تقديمها في تلك الورقة التدريب على بنية تحتية مكلفة لعدة أسابيع، باستخدام بيانات خارجية. تعد محولات DeiT (محولات الصور الفعالة من حيث البيانات) محولات يتم تدريبها بكفاءة أكبر لتصنيف الصور، حيث تتطلب كمية أقل بكثير من البيانات وموارد الحوسبة مقارنة بنماذج ViT الأصلية. + +المقتطف من الورقة هو كما يلي: + +*أظهرت مؤخرًا أن الشبكات العصبية التي تعتمد فقط على الانتباه يمكنها معالجة مهام فهم الصور مثل تصنيف الصور. ومع ذلك، يتم تدريب هذه المحولات المرئية باستخدام مئات الملايين من الصور باستخدام بنية تحتية مكلفة، مما يحد من اعتمادها. في هذا العمل، نقوم بإنشاء محول خالٍ من الضربات التنافسية عن طريق التدريب على ImageNet فقط. نقوم بتدريبها على جهاز كمبيوتر واحد في أقل من 3 أيام. يحقق محول الرؤية المرجعي الخاص بنا (86 مليون معلمة) دقة أعلى-1 تبلغ 83.1٪ (تقييم القطع الفردي) على ImageNet دون أي بيانات خارجية. والأهم من ذلك، أننا نقدم استراتيجية المعلم-الطالب محددة لمحولات. يعتمد على رمز التقطير الذي يضمن أن يتعلم الطالب من المعلم من خلال الانتباه. نُظهر أهمية هذا التقطير القائم على الرمز، خاصة عند استخدام شبكة عصبية تلافيفية كمعلم. يؤدي بنا ذلك إلى الإبلاغ عن نتائج تنافسية مع الشبكات العصبية التلافيفية لكل من ImageNet (حيث نحصل على دقة تصل إلى 85.2٪) وعند نقلها إلى مهام أخرى. نشارك الرمز والنماذج الخاصة بنا.* + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). تمت إضافة إصدار TensorFlow من هذا النموذج بواسطة [amyeroberts](https://huggingface.co/amyeroberts). + +## نصائح الاستخدام +- مقارنة بـ ViT، تستخدم نماذج DeiT ما يسمى رمز التقطير للتعلم بشكل فعال من معلم (والذي، في ورقة DeiT، هو نموذج مثل ResNet). يتم تعلم رمز التقطير من خلال الانتشار الخلفي، عن طريق التفاعل مع رمز الفئة ورموز التصحيح من خلال طبقات الاهتمام الذاتي. +- هناك طريقتان لضبط النماذج المقطرة، إما (1) بالطريقة الكلاسيكية، عن طريق وضع رأس تنبؤ فقط أعلى حالة الإخفاء النهائية لرموز الفئة وعدم استخدام إشارة التقطير، أو (2) عن طريق وضع رأس تنبؤ أعلى كل من رمز الفئة ورمز التقطير. في هذه الحالة، يتم تدريب رأس التنبؤ [CLS] باستخدام التناظر المتقاطع العادي بين تنبؤ الرأس والملصق الصحيح، في حين يتم تدريب رأس التقطير التنبؤي باستخدام التقطير الصعب (التناظم المتقاطع بين تنبؤ رأس التقطير والملصق الذي يتوقعه المعلم). في وقت الاستدلال، يتم أخذ متوسط التنبؤ بين كلا الرأسين كتنبؤ نهائي. (2) يُطلق عليه أيضًا "الضبط الدقيق مع التقطير"، لأنه يعتمد على معلم تم ضبطه بالفعل على مجموعة البيانات النهائية. من حيث النماذج، (1) يقابل [`DeiTForImageClassification`] و (2) يقابل [`DeiTForImageClassificationWithTeacher`]. +- لاحظ أن المؤلفين أيضًا حاولوا التقطير الناعم لـ (2) (في هذه الحالة، يتم تدريب رأس التنبؤ بالتقطير باستخدام انحراف كولباك-لايبلير لمطابقة الإخراج الناعم للمعلم)، ولكن التقطير الصعب أعطى أفضل النتائج. +- تم إجراء جميع عمليات التحقق من الصحة المفرج عنها مسبقًا والضبط الدقيق على ImageNet-1k فقط. لم يتم استخدام أي بيانات خارجية. هذا على النقيض من نموذج ViT الأصلي، والذي استخدم بيانات خارجية مثل مجموعة بيانات JFT-300M/Imagenet-21k للضبط الأولي. +- أصدر مؤلفو DeiT أيضًا نماذج ViT المدربة بكفاءة أكبر، والتي يمكنك توصيلها مباشرة في [`ViTModel`] أو [`ViTForImageClassification`]. تم استخدام تقنيات مثل زيادة البيانات والتحسين والتنظيم لمحاكاة التدريب على مجموعة بيانات أكبر بكثير (مع استخدام ImageNet-1k فقط للضبط الأولي). هناك 4 متغيرات متاحة (في 3 أحجام مختلفة): *facebook/deit-tiny-patch16-224*، *facebook/deit-small-patch16-224*، *facebook/deit-base-patch16-224* و *facebook/deit-base-patch16-384*. لاحظ أنه يجب استخدام [`DeiTImageProcessor`] لتحضير الصور للنموذج. + +### استخدام الانتباه المنتج المرجح بالنقاط (SDPA) +يتضمن PyTorch مشغل اهتمام منتج مرجح بالنقاط (SDPA) أصلي كجزء من `torch.nn.functional`. تشمل هذه الدالة عدة تنفيذات يمكن تطبيقها اعتمادًا على المدخلات والأجهزة المستخدمة. راجع [الوثائق الرسمية](https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) أو صفحة [GPU Inference](https://huggingface.co/docs/transformers/main/en/perf_infer_gpu_one#pytorch-scaled-dot-product-attention) لمزيد من المعلومات. + +يتم استخدام SDPA بشكل افتراضي لـ `torch>=2.1.1` عندما يكون التنفيذ متاحًا، ولكن يمكنك أيضًا تعيين `attn_implementation="sdpa"` في `from_pretrained()` لطلب استخدام SDPA بشكل صريح. + +``` +from transformers import DeiTForImageClassification +model = DeiTForImageClassification.from_pretrained("facebook/deit-base-distilled-patch16-224", attn_implementation="sdpa", torch_dtype=torch.float16) +... +``` + +للحصول على أفضل التحسينات، نوصي بتحميل النموذج بنصف الدقة (على سبيل المثال `torch.float16` أو `torch.bfloat16`). + +في معيار محلي (A100-40GB، PyTorch 2.3.0، نظام التشغيل Ubuntu 22.04) مع `float32` ونموذج `facebook/deit-base-distilled-patch16-224`، رأينا تسريعًا التالي أثناء الاستدلال. + +| حجم الدفعة | متوسط وقت الاستدلال (مللي ثانية)، وضع Eager | متوسط وقت الاستدلال (مللي ثانية)، نموذج SDPA | تسريع، SDPA / Eager (x) | +|--------------|-------------------------------------------|-------------------------------------------|------------------------------| +| 1 | 8 | 6 | 1.33 | +| 2 | 9 | 6 | 1.5 | +| 4 | 9 | 6 | 1.5 | +| 8 | 8 | 6 | 1.33 | + +## الموارد +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DeiT. + +- [`DeiTForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +بالإضافة إلى ذلك: + +- [`DeiTForMaskedImageModeling`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-pretraining) هذا. + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فلا تتردد في فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DeiTConfig + +[[autodoc]] DeiTConfig + +## DeiTFeatureExtractor + +[[autodoc]] DeiTFeatureExtractor + +- __call__ + +## DeiTImageProcessor + +[[autodoc]] DeiTImageProcessor + +- preprocess + + + + +## DeiTModel + +[[autodoc]] DeiTModel + +- forward + +## DeiTForMaskedImageModeling + +[[autodoc]] DeiTForMaskedImageModeling + +- forward + +## DeiTForImageClassification + +[[autodoc]] DeiTForImageClassification + +- forward + +## DeiTForImageClassificationWithTeacher + +[[autodoc]] DeiTForImageClassificationWithTeacher + +- forward + + + + +## TFDeiTModel + +[[autodoc]] TFDeiTModel + +- call + +## TFDeiTForMaskedImageModeling + +[[autodoc]] TFDeiTForMaskedImageModeling + +- call + +## TFDeiTForImageClassification + +[[autodoc]] TFDeiTForImageClassification + +- call + +## TFDeiTForImageClassificationWithTeacher + +[[autodoc]] TFDeiTForImageClassificationWithTeacher + +- call + + + + \ No newline at end of file From 778bcc1ea7915d362f0263f63a01fc129694fe5a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:38 +0300 Subject: [PATCH 415/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/efficientformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/efficientformer.md | 87 +++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 docs/source/ar/model_doc/efficientformer.md diff --git a/docs/source/ar/model_doc/efficientformer.md b/docs/source/ar/model_doc/efficientformer.md new file mode 100644 index 00000000000000..29841dc9e363ae --- /dev/null +++ b/docs/source/ar/model_doc/efficientformer.md @@ -0,0 +1,87 @@ +# EfficientFormer + + +هذا النموذج في وضع الصيانة فقط، ولا نقبل أي PRs جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + +## نظرة عامة + +اقترح نموذج EfficientFormer في ورقة بحثية بعنوان [EfficientFormer: Vision Transformers at MobileNet Speed](https://arxiv.org/abs/2206.01191) +من قبل ياني لي، وغينغ يوان، ويانغ وين، وإريك هو، وجورجيوس إيفانجيليديس، وسيرجي تولياكوف، ويانزهي وانغ، وجيان رين. ويقترح EfficientFormer محولًا متسقًا للأبعاد يمكن تشغيله على الأجهزة المحمولة لمهام التنبؤ الكثيف مثل تصنيف الصور، والكشف عن الأشياء، والتجزئة الدلالية. + +ملخص الورقة البحثية هو كما يلي: + +*أظهرت محولات الرؤية (ViT) تقدمًا سريعًا في مهام الرؤية الحاسوبية، وحققت نتائج واعدة في مختلف المعايير. +ومع ذلك، بسبب العدد الهائل من المعلمات وتصميم النموذج، مثل آلية الانتباه، فإن النماذج المستندة إلى ViT تكون عادةً أبطأ بعدة مرات من الشبكات الاقتصادية المبنية على التلافيف. وبالتالي، فإن نشر ViT للتطبيقات في الوقت الفعلي صعب بشكل خاص، خاصة على الأجهزة ذات الموارد المحدودة مثل الأجهزة المحمولة. وتحاول الجهود الأخيرة تقليل تعقيد الحساب في ViT من خلال البحث المعماري للشبكة أو التصميم الهجين مع كتلة MobileNet، ولكن سرعة الاستدلال لا تزال غير مرضية. وهذا يطرح سؤالًا مهمًا: هل يمكن أن تعمل المحولات بسرعة MobileNet مع تحقيق أداء عالٍ؟ +للإجابة على هذا السؤال، نقوم أولاً بإعادة النظر في بنية الشبكة والمشغلين المستخدمين في النماذج المستندة إلى ViT وتحديد التصميمات غير الفعالة. +بعد ذلك، نقدم محولًا متسقًا للأبعاد (بدون كتل MobileNet) كنموذج تصميم. +وأخيرًا، نقوم بتنفيذ التخسيس القائم على الكمون للحصول على سلسلة من النماذج النهائية التي يطلق عليها EfficientFormer. +وتظهر التجارب المستفيضة تفوق EfficientFormer في الأداء والسرعة على الأجهزة المحمولة. +ويحقق نموذجنا الأسرع، EfficientFormer-L1، دقة أعلى بنسبة 79.2٪ على ImageNet-1K مع زمن استدلال يبلغ 1.6 مللي ثانية فقط على +iPhone 12 (المترجم باستخدام CoreML)، وهو ما يعادل سرعة MobileNetV2×1.4 (1.6 مللي ثانية، 74.7٪ أعلى)، ويحصل أكبر نموذج لدينا، +EfficientFormer-L7، على دقة 83.3٪ مع زمن استجابة 7.0 مللي ثانية فقط. ويؤكد عملنا أنه يمكن للمحولات المصممة بشكل صحيح +الوصول إلى زمن استجابة منخفض للغاية على الأجهزة المحمولة مع الحفاظ على الأداء العالي.* + +تمت المساهمة بهذا النموذج من قبل [novice03](https://huggingface.co/novice03) و [Bearnardd](https://huggingface.co/Bearnardd). +يمكن العثور على الشفرة الأصلية [هنا](https://github.com/snap-research/EfficientFormer). تمت إضافة إصدار TensorFlow من هذا النموذج بواسطة [D-Roberts](https://huggingface.co/D-Roberts). + +## موارد التوثيق + +- [دليل مهام تصنيف الصور](../tasks/image_classification) + +## EfficientFormerConfig + +[[autodoc]] EfficientFormerConfig + +## EfficientFormerImageProcessor + +[[autodoc]] EfficientFormerImageProcessor + +- معالجة مسبقة + + + + +## EfficientFormerModel + +[[autodoc]] EfficientFormerModel + +- forword + +## EfficientFormerForImageClassification + +[[autodoc]] EfficientFormerForImageClassification + +- forword + +## EfficientFormerForImageClassificationWithTeacher + +[[autodoc]] EfficientFormerForImageClassificationWithTeacher + +- forword + + + + +## TFEfficientFormerModel + +[[autodoc]] TFEfficientFormerModel + +- call + +## TFEfficientFormerForImageClassification + +[[autodoc]] TFEfficientFormerForImageClassification + +- call + +## TFEfficientFormerForImageClassificationWithTeacher + +[[autodoc]] TFEfficientFormerForImageClassificationWithTeacher + +- call + + + \ No newline at end of file From df5471be4a1e22091b69cc0157a8504e7e8cf6e9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:40 +0300 Subject: [PATCH 416/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/deplot.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/deplot.md | 51 ++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/source/ar/model_doc/deplot.md diff --git a/docs/source/ar/model_doc/deplot.md b/docs/source/ar/model_doc/deplot.md new file mode 100644 index 00000000000000..704201045b6f71 --- /dev/null +++ b/docs/source/ar/model_doc/deplot.md @@ -0,0 +1,51 @@ +# DePlot + +## نظرة عامة + +تم اقتراح DePlot في الورقة البحثية [DePlot: One-shot visual language reasoning by plot-to-table translation](https://arxiv.org/abs/2212.10505) من قبل Fangyu Liu, Julian Martin Eisenschlos, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Wenhu Chen, Nigel Collier, Yasemin Altun. + +يوضح ملخص الورقة ما يلي: + +*يعد اللغة المرئية مثل الرسوم البيانية والمخططات منتشرة في العالم البشري. يتطلب فهم المخططات والرسوم البيانية مهارات استدلالية قوية. تتطلب النماذج السابقة المتقدمة في هذا المجال عشرات الآلاف من أمثلة التدريب على الأقل، ولا تزال قدراتها الاستدلالية محدودة، خاصة عند التعامل مع الاستفسارات المعقدة التي يكتبها البشر. تقدم هذه الورقة أول حل قائم على التعلم لمرة واحدة للاستدلال اللغوي المرئي. نقوم بتفصيل تحدي الاستدلال اللغوي المرئي إلى خطوتين: (1) الترجمة من المخطط إلى النص، و (2) الاستدلال على النص المترجم. وتكمن الفكرة الأساسية لهذه الطريقة في وحدة تحويل الطراز، والتي يُطلق عليها DePlot، والتي تقوم بترجمة صورة المخطط أو الرسم البياني إلى جدول خطي. بعد ذلك، يمكن استخدام إخراج DePlot مباشرة لتوجيه نموذج اللغة الضخم (LLM) مسبق التدريب، مما يستغل قدرات الاستدلال القليلة لنموذج اللغة الضخم. وللحصول على DePlot، نقوم بتوحيد مهمة الترجمة من المخطط إلى الجدول من خلال إنشاء تنسيقات ومقاييس موحدة للمهمة، ثم تدريب DePlot بطريقة متكاملة على هذه المهمة. يمكن بعد ذلك استخدام DePlot مباشرة مع نماذج اللغة الضخمة بطريقة قابلة للتوصيل والتشغيل. مقارنة بنموذج متقدم في هذا المجال تم ضبط دقته على أكثر من 28000 نقطة بيانات، حقق DePlot+LLM مع توجيه التعلم لمرة واحدة تحسنًا بنسبة 24.0% مقارنة بالنماذج المتقدمة في هذا المجال عند استخدامه على استفسارات مكتوبة من قبل البشر من مهمة الأسئلة والأجوبة حول الرسوم البيانية.* + +DePlot هو نموذج تم تدريبه باستخدام بنية `Pix2Struct`. يمكنك العثور على مزيد من المعلومات حول `Pix2Struct` في [توثيق Pix2Struct](https://huggingface.co/docs/transformers/main/en/model_doc/pix2struct). + +DePlot هو مجموعة فرعية من بنية "Visual Question Answering" الخاصة بـ `Pix2Struct`. حيث يقوم برسم السؤال المدخل على الصورة والتنبؤ بالإجابة. + +## مثال على الاستخدام + +حاليًا، تتوفر نقطة تفتيش واحدة لـ DePlot: + +- `google/deplot`: DePlot تمت معايرته بدقة على مجموعة بيانات ChartQA + +```python +from transformers import AutoProcessor, Pix2StructForConditionalGeneration +import requests +from PIL import Image + +model = Pix2StructForConditionalGeneration.from_pretrained("google/deplot") +processor = AutoProcessor.from_pretrained("google/deplot") +url = "https://raw.githubusercontent.com/vis-nlp/ChartQA/main/ChartQA%20Dataset/val/png/5090.png" +image = Image.open(requests.get(url, stream=True).raw) + +inputs = processor(images=image, text="Generate underlying data table of the figure below:", return_tensors="pt") +predictions = model.generate(**inputs, max_new_tokens=512) +print(processor.decode(predictions[0], skip_special_tokens=True)) +``` + +## الضبط الدقيق + +لضبط دقة DePlot، راجع دفتر ملاحظات الضبط الدقيق [pix2struct](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb). بالنسبة لنماذج `Pix2Struct`، وجدنا أن ضبط دقة النموذج باستخدام Adafactor ومخطط معدل التعلم المتناقص يؤدي إلى تقارب أسرع: + +```python +from transformers.optimization import Adafactor, get_cosine_schedule_with_warmup + +optimizer = Adafactor(self.parameters(), scale_parameter=False, relative_step=False, lr=0.01, weight_decay=1e-05) +scheduler = get_cosine_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=40000) +``` + + + +DePlot هو نموذج تم تدريبه باستخدام بنية `Pix2Struct`. للرجوع إلى واجهة برمجة التطبيقات (API)، راجع وثائق [`Pix2Struct`](pix2struct). + + \ No newline at end of file From 8b387f044c2b706c434ec5878f737b932be9cb2a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:42 +0300 Subject: [PATCH 417/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/depth=5Fanything.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/depth_anything.md | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 docs/source/ar/model_doc/depth_anything.md diff --git a/docs/source/ar/model_doc/depth_anything.md b/docs/source/ar/model_doc/depth_anything.md new file mode 100644 index 00000000000000..c19e0ac2b32e4d --- /dev/null +++ b/docs/source/ar/model_doc/depth_anything.md @@ -0,0 +1,96 @@ +# Depth Anything + +## نظرة عامة + +اقتُرح نموذج Depth Anything في ورقة بحثية بعنوان "Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data" من قبل Lihe Yang و Bingyi Kang و Zilong Huang و Xiaogang Xu و Jiashi Feng و Hengshuang Zhao. ويستند Depth Anything على بنية DPT، وقد تم تدريبه على حوالي 62 مليون صورة، وحقق نتائج متقدمة في كل من تقدير العمق النسبي والمطلق. + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +*يقدم هذا العمل Depth Anything، وهو حل عملي للغاية لتقدير العمق أحادي العين المتين. وبدون السعي إلى وحدات تقنية جديدة، نهدف إلى بناء نموذج أساسي بسيط ولكنه قوي للتعامل مع أي صور في أي ظروف. ولهذه الغاية، نقوم بزيادة حجم مجموعة البيانات من خلال تصميم محرك بيانات لجمع البيانات غير المُعَلَّمة على نطاق واسع (حوالي 62 مليون) ووضع العلامات عليها تلقائيًا، مما يزيد بشكل كبير من تغطية البيانات، وبالتالي تقليل خطأ التعميم. ونحن نبحث استراتيجيتين بسيطتين ولكن فعالتين تجعلان من الواعد زيادة حجم البيانات. أولاً، يتم إنشاء هدف تحسين أكثر تحديًا من خلال الاستفادة من أدوات زيادة البيانات. إنه يجبر النموذج على السعي بنشاط للحصول على معرفة بصرية إضافية واكتساب تمثيلات قوية. ثانيًا، تم تطوير إشراف مساعد لإجبار النموذج على وراثة المعلمات الإحصائية الدلالية الغنية من المشفرات المُدربة مسبقًا. نقوم بتقييم قدراته على نطاق واسع، بما في ذلك ست مجموعات بيانات عامة وصور تم التقاطها بشكل عشوائي. ويظهر قدرة انعمام مثيرة للإعجاب. علاوة على ذلك، من خلال ضبط دقة النموذج باستخدام معلومات العمق المتري من NYUv2 و KITTI، يتم تحديد حالات جديدة من حالات SOTA. كما يؤدي نموذج العمق الأفضل لدينا إلى شبكة تحكم أفضل تعتمد على العمق.* + +drawing + +نظرة عامة على Depth Anything. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/LiheYoung/Depth-Anything). + +## مثال على الاستخدام + +هناك طريقتان رئيسيتان لاستخدام Depth Anything: إما باستخدام واجهة برمجة التطبيقات الخاصة بالخطوط الأنابيب، والتي تُبسِّط جميع التعقيدات لك، أو باستخدام فئة `DepthAnythingForDepthEstimation` بنفسك. + +### واجهة برمجة التطبيقات الخاصة بالخطوط الأنابيب + +تسمح واجهة برمجة التطبيقات باستخدام النموذج في بضع سطور من الكود: + +```python +>>> from transformers import pipeline +>>> from PIL import Image +>>> import requests + +>>> # تحميل الأنبوب +>>> pipe = pipeline(task="depth-estimation", model="LiheYoung/depth-anything-small-hf") + +>>> # تحميل الصورة +>>> url = 'http://images.cocodataset.org/val2017/000000039769.jpg' +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> # الاستنتاج +>>> depth = pipe(image)["depth"] +``` + +### استخدام النموذج بنفسك + +إذا كنت تريد القيام بالمعالجة المسبقة واللاحقة بنفسك، فهذا هو كيفية القيام بذلك: + +```python +>>> from transformers import AutoImageProcessor, AutoModelForDepthEstimation +>>> import torch +>>> import numpy as np +>>> from PIL import Image +>>> import requests + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> image_processor = AutoImageProcessor.from_pretrained("LiheYoung/depth-anything-small-hf") +>>> model = AutoModelForDepthEstimation.from_pretrained("LiheYoung/depth-anything-small-hf") + +>>> # إعداد الصورة للنموذج +>>> inputs = image_processor(images=image, return_tensors="pt") + +>>> with torch.no_grad(): +... outputs = model(**inputs) +... predicted_depth = outputs.predicted_depth + +>>> # الاستيفاء إلى الحجم الأصلي +>>> prediction = torch.nn.functional.interpolate( +... predicted_depth.unsqueeze(1), +... size=image.size[::-1], +... mode="bicubic", +... align_corners=False, +... ) + +>>> # تصور التنبؤ +>>> output = prediction.squeeze().cpu().numpy() +>>> formatted = (output * 255 / np.max(output)).astype("uint8") +>>> depth = Image.fromarray(formatted) +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Depth Anything. + +- [دليل مهام تقدير العمق أحادي العين](../tasks/depth_estimation) +- يمكن العثور على دفتر ملاحظات يُظهر الاستدلال باستخدام [`DepthAnythingForDepthEstimation`] [هنا](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Depth%20Anything/Predicting_depth_in_an_image_with_Depth_Anything.ipynb). 🌎 + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DepthAnythingConfig + +[[autodoc]] DepthAnythingConfig + +## DepthAnythingForDepthEstimation + +[[autodoc]] DepthAnythingForDepthEstimation + +- forward \ No newline at end of file From 868e766493eac024ca74f9cfaae2f7fb7e2aeb63 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:44 +0300 Subject: [PATCH 418/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/deta.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/deta.md | 52 ++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/source/ar/model_doc/deta.md diff --git a/docs/source/ar/model_doc/deta.md b/docs/source/ar/model_doc/deta.md new file mode 100644 index 00000000000000..8696d25882d67e --- /dev/null +++ b/docs/source/ar/model_doc/deta.md @@ -0,0 +1,52 @@ +# DETA + +> هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب جديدة لتغيير شفرته. إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + +## نظرة عامة + +اقترح نموذج DETA في ورقة بحثية بعنوان [NMS Strikes Back](https://arxiv.org/abs/2212.06137) من قبل Jeffrey Ouyang-Zhang وJang Hyun Cho وXingyi Zhou وPhilipp Krähenbühl. + +يحسن DETA (اختصار لـ Detection Transformers with Assignment) [Deformable DETR](deformable_detr) عن طريق استبدال مطابقة Hungarian الثنائية المتماثلة بخسارة تعيين التسميات من واحد إلى كثير المستخدمة في أجهزة الكشف التقليدية مع الحد الأقصى لقمع غير أقصى (NMS). يؤدي هذا إلى مكاسب كبيرة تصل إلى 2.5 mAP. + +الملخص من الورقة هو كما يلي: + +> يحول محول الكشف (DETR) الاستعلامات مباشرة إلى كائنات فريدة من خلال استخدام المطابقة الثنائية المتماثلة أثناء التدريب ويمكّن الكشف عن الكائنات من النهاية إلى النهاية. مؤخرًا، تفوقت هذه النماذج على أجهزة الكشف التقليدية على COCO بأسلوب لا يمكن إنكاره. ومع ذلك، فإنها تختلف عن أجهزة الكشف التقليدية في العديد من التصميمات، بما في ذلك بنية النموذج وجداول التدريب، وبالتالي فإن فعالية المطابقة المتماثلة غير مفهومة تمامًا. في هذا العمل، نجري مقارنة صارمة بين المطابقة المتماثلة لـ Hungarian في DETRs وتعيينات التسميات من واحد إلى كثير في أجهزة الكشف التقليدية مع الإشراف غير الأقصى الأقصى (NMS). ومما يثير الدهشة أننا نلاحظ أن التعيينات من واحد إلى كثير مع NMS تتفوق باستمرار على المطابقة المتماثلة القياسية في نفس الإعداد، مع مكسب كبير يصل إلى 2.5 mAP. حقق مكتشفنا الذي يدرب Deformable-DETR مع تعيين التسمية المستندة إلى IoU 50.2 COCO mAP في غضون 12 فترة (جدول 1x) مع العمود الفقري ResNet50، متفوقًا على جميع أجهزة الكشف التقليدية أو القائمة على المحول الموجودة في هذا الإعداد. على مجموعات بيانات متعددة وجداول ومعماريات، نُظهر باستمرار أن المطابقة الثنائية غير ضرورية لمحولات الكشف القابلة للأداء. علاوة على ذلك، نعزو نجاح محولات الكشف إلى بنية المحول التعبيري. + +drawing + +نظرة عامة على DETA. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/jozhang97/DETA). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DETA. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ DETA [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/DETA). +- يمكن العثور على البرامج النصية لتدريب النماذج الدقيقة [`DetaForObjectDetection`] مع [`Trainer`] أو [Accelerate](https://huggingface.co/docs/accelerate/index) [هنا](https://github.com/huggingface/transformers/tree/main/examples/pytorch/object-detection). +- راجع أيضًا: [دليل مهام الكشف عن الأشياء](../tasks/object_detection). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DetaConfig + +[[autodoc]] DetaConfig + +## DetaImageProcessor + +[[autodoc]] DetaImageProcessor + +- preprocess +- post_process_object_detection + +## DetaModel + +[[autodoc]] DetaModel + +- forward + +## DetaForObjectDetection + +[[autodoc]] DetaForObjectDetection + +- forward \ No newline at end of file From cf114a4201a982396040c08cf7b12ead4f3cae4a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:46 +0300 Subject: [PATCH 419/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/detr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/detr.md | 150 +++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 docs/source/ar/model_doc/detr.md diff --git a/docs/source/ar/model_doc/detr.md b/docs/source/ar/model_doc/detr.md new file mode 100644 index 00000000000000..57f9cbcab5516a --- /dev/null +++ b/docs/source/ar/model_doc/detr.md @@ -0,0 +1,150 @@ +# DETR + +## نظرة عامة + +اقتُرح نموذج DETR في ورقة "End-to-End Object Detection with Transformers" بواسطة Nicolas Carion وآخرين. يتكون نموذج DETR من شبكة عصبية تعاقبية تليها محول تشفير وفك تشفير يمكن تدريبهما من البداية إلى النهاية للكشف عن الأشياء. إنه يبسط كثيرًا من تعقيدات النماذج مثل Faster-R-CNN وMask-R-CNN، والتي تستخدم أشياء مثل اقتراحات المناطق، وإجراءات القمع غير القصوى، وتوليد المراسي. علاوة على ذلك، يمكن أيضًا توسيع نموذج DETR بشكل طبيعي لأداء التجزئة الشاملة، وذلك ببساطة عن طريق إضافة رأس قناع أعلى مخرجات فك التشفير. + +مقتطف من الورقة البحثية على النحو التالي: + +> "نقدم طريقة جديدة تنظر إلى الكشف عن الأشياء كمشكلة تنبؤ مجموعة مباشرة. يبسط نهجنا خط أنابيب الكشف، مما يزيل فعليًا الحاجة إلى العديد من المكونات المصممة يدويًا مثل إجراءات القمع غير القصوى أو توليد المرساة التي تشفر صراحة معرفتنا المسبقة بالمهمة. المكونات الرئيسية للإطار الجديد، المسمى محول الكشف أو DETR، هي خسارة عالمية قائمة على المجموعة تجبر التنبؤات الفريدة من خلال المطابقة الثنائية، وبنية محول الترميز وفك الترميز. بالنظر إلى مجموعة صغيرة ثابتة من استفسارات الكائن المُعلم، يُجري DETR استدلالًا حول علاقات الأشياء وسياق الصورة العالمي لإخراج مجموعة التنبؤات النهائية بالتوازي. النموذج الجديد مفهوميًا بسيط ولا يتطلب مكتبة متخصصة، على عكس العديد من الكاشفات الحديثة الأخرى. يُظهر DETR دقة وأداء وقت التشغيل على قدم المساواة مع خط الأساس Faster RCNN الراسخ والمحسّن جيدًا في مجموعة بيانات COCO الصعبة للكشف عن الأشياء. علاوة على ذلك، يمكن تعميم DETR بسهولة لإنتاج التجزئة الشاملة بطريقة موحدة. نُظهر أنه يتفوق بشكل كبير على خطوط الأساس التنافسية." + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/detr). + +## كيف يعمل DETR + +فيما يلي ملخص يوضح كيفية عمل [`~transformers.DetrForObjectDetection`]. + +أولاً، يتم إرسال صورة عبر شبكة عصبية تعاقبية مُعلمة مسبقًا (في الورقة، يستخدم المؤلفون ResNet-50/ResNet-101). لنفترض أننا أضفنا أيضًا بُعد الدفعة. وهذا يعني أن المدخلات إلى الشبكة العصبية التعاقبية هي مصفوفة ذات شكل `(batch_size، 3، height، width)`، مع افتراض أن الصورة تحتوي على 3 قنوات لونية (RGB). تقوم الشبكة العصبية التعاقبية بإخراج خريطة ميزات ذات دقة أقل، عادةً ذات شكل `(batch_size، 2048، height/32، width/32)`. يتم بعد ذلك إسقاطها لمطابقة البعد المخفي لمحول DETR، والذي يكون `256` بشكل افتراضي، باستخدام طبقة `nn.Conv2D`. لذا، لدينا الآن مصفوفة ذات شكل `(batch_size، 256، height/32، width/32)`. بعد ذلك، يتم تسطيح خريطة الميزات وتعديلها للحصول على مصفوفة ذات شكل `(batch_size، seq_len، d_model)` = `(batch_size، width/32*height/32، 256)`. لذا، فإن أحد الاختلافات مع نماذج معالجة اللغات الطبيعية هو أن طول التسلسل أطول من المعتاد، ولكن مع `d_model` أصغر (والذي يكون عادةً 768 أو أعلى في نماذج معالجة اللغات الطبيعية). + +بعد ذلك، يتم إرسال هذا إلى المشفر، مما يؤدي إلى إخراج `encoder_hidden_states` بنفس الشكل (يمكن اعتبارها ميزات صورة). بعد ذلك، يتم إرسال ما يسمى بـ **استعلامات الكائن** عبر فك التشفير. هذه مصفوفة ذات شكل `(batch_size، num_queries، d_model)`، مع `num_queries` يتم تعيينها عادةً إلى 100 وإعدادها إلى الصفر. هذه المدخلات هي ترميزات موضع مُعلمة يشير إليها المؤلفون باستعلامات الكائن، وعلى غرار المشفر، يتم إضافتها إلى إدخال كل طبقة اهتمام. سيبحث كل استعلام كائن عن كائن معين في الصورة. يقوم فك التشفير بتحديث هذه الترميزات من خلال طبقات اهتمام ذاتية واهتمام بتشفير وفك تشفير متعددة لإخراج `decoder_hidden_states` بنفس الشكل: `(batch_size، num_queries، d_model)`. بعد ذلك، يتم إضافة رأسين لأعلى للكشف عن الأشياء: طبقة خطية لتصنيف كل استعلام كائن إلى أحد الأشياء أو "لا شيء"، وMLP للتنبؤ بحدود الإحداثيات لكل استعلام. + +يتم تدريب النموذج باستخدام **خسارة المطابقة الثنائية**: لذا ما نفعله بالفعل هو مقارنة الفئات المتنبأ بها + حدود الإحداثيات لكل من استعلامات N = 100 مع التعليقات التوضيحية الأرضية الحقيقة، مع توسيع نطاقها إلى نفس الطول N (لذا، إذا كانت الصورة تحتوي على 4 أشياء فقط، فستحتوي 96 تعليق توضيحي فقط على "لا شيء" كفئة و"لا حدود إحداثيات" كحدود إحداثيات). يتم استخدام خوارزمية المطابقة الهنغارية للعثور على خريطة واحدة لواحدة مثالية لكل من الاستعلامات N والتعليقات N. بعد ذلك، يتم استخدام الانحدار اللوغاريتمي (للطبقات) ومزيج خطي من L1 و [خسارة IoU العامة](https://giou.stanford.edu/) (لحدود الإحداثيات) لتحسين معلمات النموذج. + +يمكن توسيع نموذج DETR بشكل طبيعي لأداء التجزئة الشاملة (التي توحد التجزئة الدلالية وتجزئة المثيل). يضيف [`~transformers.DetrForSegmentation`] رأس قناع أعلى [`~transformers.DetrForObjectDetection`]. يمكن تدريب رأس القناع إما بشكل مشترك، أو في عملية من خطوتين، حيث يتم أولاً تدريب نموذج [`~transformers.DetrForObjectDetection`] للكشف عن حدود الإحداثيات حول كل من "الأشياء" (المثيلات) و"الأشياء" (أشياء الخلفية مثل الأشجار والطرق والسماء)، ثم يتم تجميد جميع الأوزان وتدريب رأس القناع فقط لمدة 25 حقبة. تجريبياً، تعطي هاتان المقاربتان نتائج مماثلة. لاحظ أن التنبؤ بالحدود مطلوب لإمكانية التدريب، حيث يتم حساب المطابقة الهنغارية باستخدام المسافات بين الحدود. + +## نصائح الاستخدام + +- يستخدم نموذج DETR ما يسمى بـ **استعلامات الكائن** للكشف عن الأشياء في صورة. يحدد عدد الاستعلامات العدد الأقصى للأشياء التي يمكن اكتشافها في صورة واحدة، وهو مضبوط على 100 بشكل افتراضي (راجع معلمة `num_queries` من [`~transformers.DetrConfig`]). لاحظ أنه من الجيد أن يكون هناك بعض المرونة (في COCO، استخدم المؤلفون 100، في حين أن العدد الأقصى للأشياء في صورة COCO هو ~70). + +- يقوم فك تشفير نموذج DETR بتحديث ترميزات الاستعلام بالتوازي. هذا يختلف عن نماذج اللغة مثل GPT-2، والتي تستخدم فك تشفير ذاتي الرجوع بدلاً من ذلك. وبالتالي، لا يتم استخدام قناع اهتمام سببي. + +- يضيف نموذج DETR ترميزات الموضع إلى الحالات المخفية في كل طبقة اهتمام ذاتي واهتمام متعدد قبل إسقاطها إلى استعلامات ومفاتيح. بالنسبة لترميزات موضع الصورة، يمكن للمرء أن يختار بين ترميزات موضع ثابتة أو تعلمية. بشكل افتراضي، يتم ضبط معلمة `position_embedding_type` من [`~transformers.DetrConfig`] على `"sine"`. + +- أثناء التدريب، وجد مؤلفو نموذج DETR أنه من المفيد استخدام خسائر مساعدة في فك التشفير، خاصة لمساعدة النموذج على إخراج العدد الصحيح من الأشياء لكل فئة. إذا قمت بتعيين معلمة `auxiliary_loss` من [`~transformers.DetrConfig`] إلى `True`، فسيتم إضافة شبكات عصبية أمامية وخسائر هنغارية بعد كل طبقة فك تشفير (مع مشاركة FFNs للمعلمات). + +- إذا كنت تريد تدريب النموذج في بيئة موزعة عبر عدة عقد، فيجب عليك تحديث متغير _num_boxes_ في فئة _DetrLoss_ من _modeling_detr.py_. عند التدريب على عدة عقد، يجب تعيين هذا إلى متوسط عدد الصناديق المستهدفة عبر جميع العقد، كما هو موضح في التنفيذ الأصلي [هنا](https://github.com/facebookresearch/detr/blob/a54b77800eb8e64e3ad0d8237789fcbf2f8350c5/models/detr.py#L227-L232). + +- يمكن تهيئة [`~transformers.DetrForObjectDetection`] و [`~transformers.DetrForSegmentation`] بأي شبكة عصبية تعاقبية متوفرة في [مكتبة timm](https://github.com/rwightman/pytorch-image-models). يمكن تهيئة نموذج مع شبكة عصبية تعاقبية MobileNet على سبيل المثال عن طريق تعيين سمة `backbone` من [`~transformers.DetrConfig`] إلى `"tf_mobilenetv3_small_075"`، ثم تهيئة النموذج باستخدام هذا التكوين. + +- يقوم نموذج DETR بتغيير حجم الصور المدخلة بحيث يكون الجانب الأقصر على الأقل عددًا معينًا من البكسلات في حين أن الأطول هو 1333 بكسل كحد أقصى. أثناء التدريب، يتم استخدام زيادة حجم المقياس بحيث يكون الجانب الأقصر عشوائيًا على الأقل 480 بكسل وكحد أقصى 800 بكسل. أثناء الاستدلال، يتم تعيين الجانب الأقصر إلى 800. يمكن استخدام [`~transformers.DetrImageProcessor`] لإعداد الصور (والتعليقات التوضيحية الاختيارية بتنسيق COCO) للنموذج. نظرًا لهذا التغيير في الحجم، يمكن أن يكون للصور في دفعة أحجام مختلفة. يحل نموذج DETR هذه المشكلة عن طريق إضافة صور إلى الحجم الأكبر في دفعة، وعن طريق إنشاء قناع بكسل يشير إلى البكسلات الحقيقية/الوسادات. بدلاً من ذلك، يمكن للمرء أيضًا تحديد دالة تجميع مخصصة من أجل تجميع الصور معًا، باستخدام [`~transformers.DetrImageProcessor.pad_and_create_pixel_mask`]. + +- سيحدد حجم الصور مقدار الذاكرة المستخدمة، وبالتالي سيحدد `batch_size`. يُنصح باستخدام حجم دفعة يبلغ 2 لكل GPU. راجع [خيط GitHub](https://github.com/facebookresearch/detr/issues/150) هذا لمزيد من المعلومات. + +هناك ثلاث طرق لتهيئة نموذج DETR (حسب تفضيلك): + +الخيار 1: تهيئة نموذج DETR بأوزان مُعلمة مسبقًا للنموذج بالكامل + +```py +>>> from transformers import DetrForObjectDetection + +>>> model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50") +``` + +الخيار 2: تهيئة نموذج DETR بأوزان مُعلمة مسبقًا للشبكة العصبية التعاقبية، ولكن بأوزان مُعلمة مسبقًا لمحول الترميز وفك الترميز + +```py +>>> from transformers import DetrConfig, DetrForObjectDetection + +>>> config = DetrConfig() +>>> model = DetrForObjectDetection(config) +``` + +الخيار 3: تهيئة نموذج DETR بأوزان مُعلمة مسبقًا للشبكة العصبية التعاقبية + محول الترميز وفك الترميز + +```py +>>> config = DetrConfig(use_pretrained_backbone=False) +>>> model = DetrForObjectDetection(config) +``` + +كملخص، ضع في اعتبارك الجدول التالي: + +| المهمة | الكشف عن الأشياء | تجزئة المثيل | التجزئة الشاملة | +|------|------------------|-----------------------|-----------------------| +| **الوصف** | التنبؤ بحدود الإحداثيات وتصنيفات الفئات حول الأشياء في صورة | التنبؤ بأقنعة حول الأشياء (أي المثيلات) في صورة | التنبؤ بأقنعة حول كل من الأشياء (أي المثيلات) وكذلك "الأشياء" (أي أشياء الخلفية مثل الأشجار والطرق) في صورة | +| **النموذج** | [`~transformers.DetrForObjectDetection`] | [`~transformers.DetrForSegmentation`] | [`~transformers.DetrForSegmentation`] | +| **مجموعة البيانات النموذجية** | COCO detection | COCO detection، COCO panoptic | COCO panoptic | +| **تنسيق التعليقات التوضيحية لتوفيرها إلى** [`~transformers.DetrImageProcessor`] | {'image_id': `int`، 'annotations': `List [Dict]`} كل Dict عبارة عن تعليق توضيحي لكائن COCO | {'image_id': `int`، 'annotations': `List [Dict]`} (في حالة الكشف عن COCO) أو {'file_name': `str`، 'image_id': `int`، 'segments_info': `List [Dict]`} (في حالة COCO panoptic) | {'file_name': `str`، 'image_id': `int`، 'segments_info': `List [Dict]`} و masks_path (مسار إلى الدليل الذي يحتوي على ملفات PNG للأقنعة) | +| **ما بعد المعالجة** (أي تحويل إخراج النموذج إلى تنسيق Pascal VOC) | [`~transformers.DetrImageProcessor.post_process`] | [`~transformers.DetrImageProcessor.post_process_segmentation`] | [`~transformers.DetrImageProcessor.post_process_segmentation`]`، [`~transformers.DetrImageProcessor.post_process_panoptic`] | +| **المقيمون** | `CocoEvaluator` مع `iou_types="bbox"` | `CocoEvaluator` مع `iou_types="bbox"` أو `"segm"` | `CocoEvaluator` مع `iou_tupes="bbox"` أو `"segm"`، `PanopticEvaluator` | + +باختصار، يجب إعداد البيانات بتنسيق COCO detection أو COCO panoptic، ثم استخدام [`~transformers.DetrImageProcessor`] لإنشاء `pixel_values`، `pixel_mask`، والتعليقات التوضيحية الاختيارية `labels`، والتي يمكن بعد ذلك استخدامها لتدريب (أو ضبط دقيق) نموذج. للتقويم، يجب أولاً تحويل مخرجات النموذج باستخدام إحدى طرق ما بعد المعالجة من [`~transformers.DetrImageProcessor`]. يمكن بعد ذلك توفير هذه المخرجات إلى `CocoEvaluator` أو `PanopticEvaluator`، والتي تتيح لك حساب مقاييس مثل متوسط الدقة (mAP) والجودة الشاملة (PQ). يتم تنفيذ هذه الكائنات في [المستودع الأصلي](https://github.com/facebookresearch/detr). راجع [دفاتر الملاحظات التوضيحية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/DETR) للحصول على مزيد من المعلومات حول التقييم. +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (يشار إليها برمز 🌎) لمساعدتك في البدء مع DETR. + + +- يمكن العثور على جميع دفاتر الملاحظات التوضيحية للمثال التي توضح الضبط الدقيق لـ [`DetrForObjectDetection`] و [`DetrForSegmentation`] على مجموعة بيانات مخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/DETR). + +- يمكن العثور على البرامج النصية للضبط الدقيق لـ [`DetrForObjectDetection`] باستخدام [`Trainer`] أو [Accelerate](https://huggingface.co/docs/accelerate/index) [هنا](https://github.com/huggingface/transformers/tree/main/examples/pytorch/object-detection). + +- راجع أيضًا: [دليل مهام الكشف عن الأشياء](../tasks/object_detection). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنقوم بمراجعته! ويفضل أن يظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DetrConfig + +[[autodoc]] DetrConfig + +## DetrImageProcessor + +[[autodoc]] DetrImageProcessor + +- preprocess + +- post_process_object_detection + +- post_process_semantic_segmentation + +- post_process_instance_segmentation + +- post_process_panoptic_segmentation + +## DetrFeatureExtractor + +[[autodoc]] DetrFeatureExtractor + +- __call__ + +- post_process_object_detection + +- post_process_semantic_segmentation + +- post_process_instance_segmentation + +- post_process_panoptic_segmentation + +## المخرجات الخاصة بـ DETR + +[[autodoc]] models.detr.modeling_detr.DetrModelOutput + +[[autodoc]] models.detr.modeling_detr.DetrObjectDetectionOutput + +[[autodoc]] models.detr.modeling_detr.DetrSegmentationOutput + +## DetrModel + +[[autodoc]] DetrModel + +- forward + +## DetrForObjectDetection + +[[autodoc]] DetrForObjectDetection + +- forward + +## DetrForSegmentation + +[[autodoc]] DetrForSegmentation + +- forward \ No newline at end of file From 9d9ec94165fd7ce9548583dc6fa049b16a68c3eb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:47 +0300 Subject: [PATCH 420/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dialogpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dialogpt.md | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/source/ar/model_doc/dialogpt.md diff --git a/docs/source/ar/model_doc/dialogpt.md b/docs/source/ar/model_doc/dialogpt.md new file mode 100644 index 00000000000000..92567bce67b5b9 --- /dev/null +++ b/docs/source/ar/model_doc/dialogpt.md @@ -0,0 +1,29 @@ +# DialoGPT + +## نظرة عامة + +اقترح DialoGPT في [DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation](https://arxiv.org/abs/1911.00536) بواسطة Yizhe Zhang, Siqi Sun, Michel Galley, Yen-Chun Chen, Chris Brockett, Xiang Gao, Jianfeng Gao, Jingjing Liu, Bill Dolan. إنه نموذج GPT2 مدرب على 147 مليون محادثة تشبه المحادثات المستخرجة من Reddit. + +الملخص من الورقة هو ما يلي: + +*نقدم نموذجًا عصبيًا كبيرًا وقابلًا للضبط لاستجابة المحادثة، DialoGPT (محول مسبق التدريب للحوارات). تم تدريبه على 147 مليون محادثة تشبه المحادثات المستخرجة من سلاسل تعليقات Reddit على مدى فترة تمتد من 2005 إلى 2017، ويوسع DialoGPT محول PyTorch من Hugging Face لتحقيق أداء قريب من الإنسان من حيث التقييم التلقائي والبشرية في إعدادات الحوار ذات الدورة الواحدة. نحن نثبت أن أنظمة المحادثة التي تستفيد من DialoGPT تولد استجابات أكثر ملاءمة وغنية بالمعلومات واتساقًا مع السياق من أنظمة خط الأساس القوية. تم إصدار النموذج المسبق التدريب وخط أنابيب التدريب للجمهور لتسهيل البحث في توليد الاستجابات العصبية وتطوير أنظمة حوار أكثر ذكاءً ومفتوحة المجال.* + +يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/DialoGPT). + +## نصائح الاستخدام + +- DialoGPT هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بتعبئة المدخلات على اليمين بدلاً من اليسار. + +- تم تدريب DialoGPT بهدف نمذجة اللغة السببية (CLM) على بيانات المحادثة، وبالتالي فهو قوي في توليد الاستجابات في أنظمة الحوار مفتوحة المجال. + +- يتيح DialoGPT للمستخدم إنشاء برنامج دردشة في 10 أسطر فقط من التعليمات البرمجية كما هو موضح على [بطاقة نموذج DialoGPT](https://huggingface.co/microsoft/DialoGPT-medium). + +التدريب: + +لتدريب أو ضبط نموذج DialoGPT، يمكن للمرء استخدام التدريب على نمذجة اللغة السببية. للاستشهاد بالورقة الرسمية: *نتبع OpenAI GPT-2 لنمذجة جلسة حوار متعددة الدورات كنص طويل ووضع مهمة التوليد على أنها نمذجة اللغة. أولاً، نقوم بدمج جميع دورات الحوار ضمن جلسة حوار في نص طويل x_1,..., x_N (N هو طول التسلسل)، ينتهي برمز end-of-text*. لمزيد من المعلومات، يرجى الرجوع إلى الورقة الأصلية. + + + +تستند بنية DialoGPT إلى نموذج GPT2، راجع [صفحة وثائق GPT2](gpt2) للحصول على مرجع API وأمثلة. + + \ No newline at end of file From c892e285b7fa0b3b565d38bb6dad6c15627fe590 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:49 +0300 Subject: [PATCH 421/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dinat.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dinat.md | 66 +++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/source/ar/model_doc/dinat.md diff --git a/docs/source/ar/model_doc/dinat.md b/docs/source/ar/model_doc/dinat.md new file mode 100644 index 00000000000000..82f914eb182f08 --- /dev/null +++ b/docs/source/ar/model_doc/dinat.md @@ -0,0 +1,66 @@ +# محول اهتمام الحي المتمدد + +## نظرة عامة + +اقترح DiNAT في [محول اهتمام الحي المتمدد](https://arxiv.org/abs/2209.15001) +بواسطة علي حساني وهامفري شي. + +يوسع NAT من خلال إضافة نمط اهتمام الحي المتمدد لالتقاط السياق العالمي، +ويظهر تحسينات أداء كبيرة عليه. + +المستخلص من الورقة هو ما يلي: + +> "تحول المحولات بسرعة إلى إحدى أكثر بنيات التعلم العميق تطبيقًا عبر الطرائق والمجالات والمهام. في الرؤية، بالإضافة إلى الجهود المستمرة في المحولات العادية، اكتسبت المحولات الهرمية أيضًا اهتمامًا كبيرًا، بفضل أدائها وسهولة دمجها في الأطر الحالية. عادةً ما تستخدم هذه النماذج آليات اهتمام محلية، مثل اهتمام الحي المنزلق أو اهتمام النافذة المنزلق لمحول Swin. في حين أن الاهتمام المحلي فعال في تقليل التعقيد التربيعي للاهتمام الذاتي، إلا أنه يضعف اثنتين من أكثر خصائص الاهتمام الذاتي المرغوبة: نمذجة التبعية البعيدة المدى، ومجال الاستقبال العالمي. في هذه الورقة، نقدم اهتمام الحي المتمدد (DiNA)، وهو امتداد طبيعي ومرن وفعال لـ NA يمكنه التقاط سياق عالمي أكثر وتوسيع حقول الاستقبال بشكل أسي دون أي تكلفة إضافية. يكمل اهتمام NA المحلي واهتمام DiNA العالمي النادر بعضهما البعض، وبالتالي نقدم محول اهتمام الحي المتمدد (DiNAT)، وهو محول رؤية هرمي جديد مبني على كليهما. تتمتع متغيرات DiNAT بتحسينات كبيرة على خطوط الأساس القوية مثل NAT وSwin وConvNeXt. + +> إن نموذجنا الكبير أسرع ويتفوق على نظيره Swin بنسبة 1.5% box AP في اكتشاف كائن COCO، و1.3% mask AP في تجزئة مثيل COCO، و1.1% mIoU في تجزئة المشهد لـ ADE20K. + +> وبالاقتران بأطر جديدة، فإن متغيرنا الكبير هو نموذج التجزئة الشاملة الجديد للدولة في الفن على COCO (58.2 PQ) وADE20K (48.5 PQ)، ونموذج تجزئة المثيل على Cityscapes (44.5 AP) وADE20K (35.4 AP) (بدون بيانات إضافية). كما أنه يتطابق مع أحدث النماذج المتخصصة في التجزئة الدلالية على ADE20K (58.2 mIoU)، ويحتل المرتبة الثانية على Cityscapes (84.5 mIoU) (بدون بيانات إضافية). + + + + اهتمام الحي مع قيم التمدد المختلفة. +مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [علي حساني](https://huggingface.co/alihassanijr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/SHI-Labs/Neighborhood-Attention-Transformer). + +## نصائح الاستخدام + +يمكن استخدام DiNAT كـ *عمود فقري*. عندما `output_hidden_states = True`، +سيخرج كلا من `hidden_states` و`reshaped_hidden_states`. تحتوي `reshaped_hidden_states` على شكل `(batch، num_channels، height، width)` بدلاً من `(batch_size، height، width، num_channels)`. + +ملاحظات: + +- يعتمد DiNAT على تنفيذ اهتمام الحي واهتمام الحي المتمدد من [NATTEN](https://github.com/SHI-Labs/NATTEN/). + يمكنك تثبيته باستخدام العجلات المسبقة البناء لـ Linux بالرجوع إلى [shi-labs.com/natten](https://shi-labs.com/natten)، أو البناء على نظامك عن طريق تشغيل `pip install natten`. + لاحظ أن هذا الأمر سيستغرق وقتًا طويلاً لتجميع NATTEN ولا يدعم أجهزة Windows بعد. +- حجم التصحيح 4 هو الحجم الوحيد المدعوم في الوقت الحالي. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DiNAT. + + + +- [`DinatForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. +- راجع أيضًا: [دليل مهمة تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DinatConfig + +[[autodoc]] DinatConfig + +## DinatModel + +[[autodoc]] DinatModel + +- forword + +## DinatForImageClassification + +[[autodoc]] DinatForImageClassification + +- forword \ No newline at end of file From 176c5820dbd4399ae708006f28add80e0c293b14 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:51 +0300 Subject: [PATCH 422/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dinov2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dinov2.md | 74 ++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/source/ar/model_doc/dinov2.md diff --git a/docs/source/ar/model_doc/dinov2.md b/docs/source/ar/model_doc/dinov2.md new file mode 100644 index 00000000000000..f1ad3e16dc1389 --- /dev/null +++ b/docs/source/ar/model_doc/dinov2.md @@ -0,0 +1,74 @@ +# DINOv2 + +## نظرة عامة +اقترح نموذج DINOv2 في [DINOv2: Learning Robust Visual Features without Supervision](https://arxiv.org/abs/2304.07193) من قبل Maxime Oquab, Timothée Darcet, Théo Moutakanni, Huy Vo, Marc Szafraniec, Vasil Khalidov, Pierre Fernandez, Daniel Haziza, Francisco Massa, Alaaeldin El-Nouby, Mahmoud Assran, Nicolas Ballas, Wojciech Galuba, Russell Howes, Po-Yao Huang, Shang-Wen Li, Ishan Misra, Michael Rabbat, Vasu Sharma, Gabriel Synnaeve, Hu Xu, Hervé Jegou, Julien Mairal, Patrick Labatut, Armand Joulin, وPiotr Bojanowski. + +DINOv2 هو ترقية لـ [DINO](https://arxiv.org/abs/2104.14294)، وهي طريقة ذاتية الإشراف تطبق على [محولات الرؤية](vit). تمكن هذه الطريقة من ميزات بصرية متعددة الأغراض، أي ميزات تعمل عبر توزيعات الصور والمهام دون الحاجة إلى الضبط الدقيق. + +المقتطف من الورقة هو ما يلي: + +*أدت الاختراقات الأخيرة في معالجة اللغة الطبيعية لنماذج ما قبل التدريب على كميات كبيرة من البيانات إلى فتح الطريق أمام نماذج الأساس المماثلة في رؤية الكمبيوتر. يمكن أن تبسط هذه النماذج بشكل كبير استخدام الصور في أي نظام عن طريق إنتاج ميزات بصرية متعددة الأغراض، أي ميزات تعمل عبر توزيعات الصور والمهام دون الحاجة إلى الضبط الدقيق. يُظهر هذا العمل أن طرق ما قبل التدريب الحالية، خاصة الطرق الخاضعة للإشراف الذاتي، يمكن أن تنتج مثل هذه الميزات إذا تم تدريبها على بيانات كافية ومنتقاة من مصادر متنوعة. نعيد النظر في النهج الحالية ونجمع بين تقنيات مختلفة لزيادة حجم ما قبل التدريب من حيث البيانات وحجم النموذج. تهدف معظم المساهمات التقنية إلى تسريع التدريب وتثبيته على نطاق واسع. من حيث البيانات، نقترح خط أنابيب تلقائي لبناء مجموعة بيانات مخصصة ومتنوعة ومنتقاة بدلاً من البيانات غير المنتقاة، كما هو الحال عادة في الأدبيات الخاضعة للإشراف الذاتي. من حيث النماذج، نقوم بتدريب نموذج ViT (Dosovitskiy et al.، 2020) مع 1B معلمات وتقطيرها إلى سلسلة من النماذج الأصغر التي تتفوق على أفضل الميزات متعددة الأغراض المتاحة، OpenCLIP (Ilharco et al.، 2021) في معظم المعايير المرجعية على مستويي الصورة والبكسل.* + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/dinov2). + +## نصائح الاستخدام + +يمكن تتبع النموذج باستخدام `torch.jit.trace` الذي يستفيد من تجميع JIT لتحسين النموذج وجعله أسرع في التشغيل. لاحظ أن هذا لا يزال ينتج بعض العناصر غير المطابقة وأن الفرق بين النموذج الأصلي والنموذج الذي تم تتبعه هو من رتبة 1e-4. + +```python +import torch +from transformers import AutoImageProcessor, AutoModel +from PIL import Image +import requests + +url = 'http://images.cocodataset.org/val2017/000000039769.jpg' +image = Image.open(requests.get(url, stream=True).raw) + +processor = AutoImageProcessor.from_pretrained('facebook/dinov2-base') +model = AutoModel.from_pretrained('facebook/dinov2-base') + +inputs = processor(images=image, return_tensors="pt") +outputs = model(**inputs) +last_hidden_states = outputs[0] + +# We have to force return_dict=False for tracing +model.config.return_dict = False + +with torch.no_grad(): + traced_model = torch.jit.trace(model, [inputs.pixel_values]) + traced_outputs = traced_model(inputs.pixel_values) + +print((last_hidden_states - traced_outputs[0]).abs().max()) +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DPT. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ DINOv2 [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/DINOv2). 🌎 + + + +- [`Dinov2ForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهام التصنيف الصوري](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنقوم بمراجعته! يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## Dinov2Config + +[[autodoc]] Dinov2Config + +## Dinov2Model + +[[autodoc]] Dinov2Model + +- forward + +## Dinov2ForImageClassification + +[[autodoc]] Dinov2ForImageClassification + +- forward \ No newline at end of file From ce13af17ac494e0edca38e36b2dd391c0b31da96 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:53 +0300 Subject: [PATCH 423/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/distilbert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/distilbert.md | 253 +++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 docs/source/ar/model_doc/distilbert.md diff --git a/docs/source/ar/model_doc/distilbert.md b/docs/source/ar/model_doc/distilbert.md new file mode 100644 index 00000000000000..8419ee5548e278 --- /dev/null +++ b/docs/source/ar/model_doc/distilbert.md @@ -0,0 +1,253 @@ +# DistilBERT + +## نظرة عامة + +اقتُرح نموذج DistilBERT في المنشور على المدونة [Smaller, faster, cheaper, lighter: Introducing DistilBERT, a distilled version of BERT](https://medium.com/huggingface/distilbert-8cf3380435b5)، وورقة البحث [DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter](https://arxiv.org/abs/1910.01108). DistilBERT هو نموذج Transformer صغير وسريع ورخيص وخفيف تم تدريبه عن طريق تقطير BERT base. لديه 40% معلمات أقل من *google-bert/bert-base-uncased*، ويعمل أسرع بنسبة 60% مع الحفاظ على أكثر من 95% من أداء BERT كما تم قياسه على معيار GLUE لفهم اللغة. + +الملخص من الورقة هو ما يلي: + +> مع انتشار تعلم النقل من النماذج الكبيرة المُدربة مسبقًا في معالجة اللغة الطبيعية (NLP)، لا يزال تشغيل هذه النماذج الكبيرة على الحافة و/أو ضمن ميزانيات التدريب أو الاستدلال المحوسب المقيد يمثل تحديًا. في هذا العمل، نقترح طريقة لتدريب نموذج تمثيل لغوي عام أصغر، يسمى DistilBERT، يمكن بعد ذلك ضبط دقته بدقة مع أداء جيد على مجموعة واسعة من المهام مثل نظرائه الأكبر حجمًا. في حين أن معظم الأعمال السابقة درست استخدام التقطير لبناء نماذج خاصة بمهام معينة، فإننا نستفيد من التقطير المعرفي أثناء مرحلة التدريب المسبق ونظهر أنه من الممكن تقليل حجم نموذج BERT بنسبة 40%، مع الاحتفاظ بنسبة 97% من قدراته على فهم اللغة وكونه أسرع بنسبة 60%. للاستفادة من الانحيازات الاستقرائية التي تعلمتها النماذج الأكبر أثناء التدريب المسبق، نقدم خسارة ثلاثية تجمع بين خسائر النمذجة اللغوية والتقطير والمسافة الكوسينية. إن نموذجنا الأصغر والأسرع والأخف أرخص في التدريب المسبق، ونحن نثبت قدراته على الحسابات داخل الجهاز في تجربة إثبات المفهوم ودراسة مقارنة على الجهاز. + +تمت المساهمة بهذا النموذج من قبل [victorsanh](https://huggingface.co/victorsanh). تمت المساهمة بهذه النسخة من النموذج بواسطة [kamalkraj](https://huggingface.co/kamalkraj). يمكن العثور على الكود الأصلي [هنا](https://github.com/huggingface/transformers/tree/main/examples/research_projects/distillation). + +## نصائح الاستخدام + +- لا يمتلك DistilBERT `token_type_ids`، لذا لا تحتاج إلى الإشارة إلى الرمز الذي ينتمي إلى أي مقطع. فقط قم بفصل مقاطعك باستخدام رمز الفصل `tokenizer.sep_token` (أو `[SEP]`). + +- لا يمتلك DistilBERT خيارات لتحديد مواضع الإدخال (`position_ids` input). يمكن إضافة هذا إذا لزم الأمر، فقط أخبرنا إذا كنت بحاجة إلى هذا الخيار. + +- مثل BERT ولكن أصغر. تم تدريبه عن طريق تقطير نموذج BERT المُدرب مسبقًا، مما يعني أنه تم تدريبه للتنبؤ بنفس الاحتمالات مثل النموذج الأكبر. الهدف الفعلي هو مزيج من: + + - العثور على نفس الاحتمالات مثل نموذج المعلم + - التنبؤ بالرموز المُقنعة بشكل صحيح (ولكن بدون هدف الجملة التالية) + - تشابه كوسيني بين الحالات المخفية للطالب والمعلم + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DistilBERT. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب Pull Request وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- منشور مدونة حول [Getting Started with Sentiment Analysis using Python](https://huggingface.co/blog/sentiment-analysis-python) باستخدام DistilBERT. + +- منشور مدونة حول كيفية [تدريب DistilBERT باستخدام Blurr للتصنيف التسلسلي](https://huggingface.co/blog/fastai). + +- منشور مدونة حول كيفية استخدام [Ray لضبط دقة فرط معلمات DistilBERT](https://huggingface.co/blog/ray-tune). + +- منشور مدونة حول كيفية [تدريب DistilBERT باستخدام Hugging Face وAmazon SageMaker](https://huggingface.co/blog/the-partnership-amazon-sagemaker-and-hugging-face). + +- دفتر ملاحظات حول كيفية [ضبط دقة فرط معلمات DistilBERT للتصنيف متعدد التصنيفات](https://colab.research.google.com/github/DhavalTaunk08/Transformers_scripts/blob/master/Transformers_multilabel_distilbert.ipynb). 🌎 + +- دفتر ملاحظات حول كيفية [ضبط دقة فرط معلمات DistilBERT للتصنيف متعدد الفئات باستخدام PyTorch](https://colab.research.google.com/github/abhimishra91/transformers-tutorials/blob/master/transformers_multiclass_classification.ipynb). 🌎 + +- دفتر ملاحظات حول كيفية [ضبط دقة فرط معلمات DistilBERT للتصنيف النصي في TensorFlow](https://colab.research.google.com/github/peterbayerle/huggingface_notebook/blob/main/distilbert_tf.ipynb). 🌎 + +- [`DistilBertForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification.ipynb). + +- [`TFDistilBertForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification-tf.ipynb). + +- [`FlaxDistilBertForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification_flax.ipynb). + +- [دليل مهام التصنيف النصي](../tasks/sequence_classification) + +- [`DistilBertForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/token-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification.ipynb). + +- [`TFDistilBertForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/token-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification-tf.ipynb). + +- [`FlaxDistilBertForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/token-classification). + +- فصل [التصنيف الرمزي](https://huggingface.co/course/chapter7/2?fw=pt) من دورة 🤗 Hugging Face Course. + +- [دليل مهام التصنيف الرمزي](../tasks/token_classification) + +- [`DistilBertForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#robertabertdistilbert-and-masked-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). + +- [`TFDistilBertForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_mlmpy) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). + +- [`FlaxDistilBertForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#masked-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/masked_language_modeling_flax.ipynb). + +- فصل [النمذجة اللغوية المقنعة](https://huggingface.co/course/chapter7/3?fw=pt) من دورة 🤗 Hugging Face Course. + +- [دليل مهام النمذجة اللغوية المقنعة](../tasks/masked_language_modeling) + +- [`DistilBertForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb). + +- [`TFDistilBertForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering-tf.ipynb). + +- [`FlaxDistilBertForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/question-answering). + +- فصل [الأسئلة والأجوبة](https://huggingface.co/course/chapter7/7?fw=pt) من دورة 🤗 Hugging Face Course. + +- [دليل مهام الأسئلة والأجوبة](../tasks/question_answering) + +**الاختيار من متعدد** + +- [`DistilBertForMultipleChoice`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/multiple-choice) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice.ipynb). + +- [`TFDistilBertForMultipleChoice`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/multiple-choice) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice-tf.ipynb). + +- [دليل مهام الاختيار من متعدد](../tasks/multiple_choice) + +⚗️ التحسين + +- منشور مدونة حول كيفية [تقطير DistilBERT باستخدام 🤗 Optimum وIntel](https://huggingface.co/blog/intel). + +- منشور مدونة حول كيفية [تحسين المحولات للوحدات GPU باستخدام 🤗 Optimum](https://www.philschmid.de/optimizing-transformers-with-optimum-gpu). + +- منشور مدونة حول [تحسين المحولات باستخدام Hugging Face Optimum](https://www.philschmid.de/optimizing-transformers-with-optimum). + +⚡️ الاستدلال + +- منشور مدونة حول كيفية [تسريع استدلال BERT باستخدام Hugging Face Transformers وAWS Inferentia](https://huggingface.co/blog/bert-inferentia-sagemaker) مع DistilBERT. + +- منشور مدونة حول [Serverless Inference with Hugging Face's Transformers, DistilBERT and Amazon SageMaker](https://www.philschmid.de/sagemaker-serverless-huggingface-distilbert). + +🚀 النشر + +- منشور مدونة حول كيفية [نشر DistilBERT على Google Cloud](https://huggingface.co/blog/how-to-deploy-a-pipeline-to-google-clouds). + +- منشور مدونة حول كيفية [نشر DistilBERT باستخدام Amazon SageMaker](https://huggingface.co/blog/deploy-hugging-face-models-easily-with-amazon-sagemaker). + +- منشور مدونة حول كيفية [نشر BERT باستخدام Hugging Face Transformers وAmazon SageMaker ووحدة Terraform](https://www.philschmid.de/terraform-huggingface-amazon-sagemaker). + +## الجمع بين DistilBERT وFlash Attention 2 + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الاهتمام المنزلقة. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لمستودع flash-attn. تأكد أيضًا من تحميل نموذجك في نصف الدقة (مثل `torch.float16`) + +لتحميل وتشغيل نموذج باستخدام Flash Attention 2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import AutoTokenizer, AutoModel + +>>> device = "cuda" # الجهاز الذي سيتم تحميل النموذج عليه + +>>> tokenizer = AutoTokenizer.from_pretrained('distilbert/distilbert-base-uncased') +>>> model = AutoModel.from_pretrained("distilbert/distilbert-base-uncased", torch_dtype=torch.float16, attn_implementation="flash_attention_2") + +>>> text = "استبدلني بأي نص تريده." + +>>> encoded_input = tokenizer(text, return_tensors='pt').to(device) +>>> model.to(device) + +>>> output = model(**encoded_input) +``` + + +## DistilBertConfig + +[[autodoc]] DistilBertConfig + +## DistilBertTokenizer + +[[autodoc]] DistilBertTokenizer + +## DistilBertTokenizerFast + +[[autodoc]] DistilBertTokenizerFast + + + + +## DistilBertModel + +[[autodoc]] DistilBertModel + - forward + +## DistilBertForMaskedLM + +[[autodoc]] DistilBertForMaskedLM + - forward + +## DistilBertForSequenceClassification + +[[autodoc]] DistilBertForSequenceClassification + - forward + +## DistilBertForMultipleChoice + +[[autodoc]] DistilBertForMultipleChoice + - forward + +## DistilBertForTokenClassification + +[[autodoc]] DistilBertForTokenClassification + - forward + +## DistilBertForQuestionAnswering + +[[autodoc]] DistilBertForQuestionAnswering + - forward + + + + +## TFDistilBertModel + +[[autodoc]] TFDistilBertModel + - call + +## TFDistilBertForMaskedLM + +[[autodoc]] TFDistilBertForMaskedLM + - call + +## TFDistilBertForSequenceClassification + +[[autodoc]] TFDistilBertForSequenceClassification + - call + +## TFDistilBertForMultipleChoice + +[[autodoc]] TFDistilBertForMultipleChoice + - call + +## TFDistilBertForTokenClassification + +[[autodoc]] TFDistilBertForTokenClassification + - call + +## TFDistilBertForQuestionAnswering + +[[autodoc]] TFDistilBertForQuestionAnswering + - call + + + + +## FlaxDistilBertModel + +[[autodoc]] FlaxDistilBertModel + - __call__ + +## FlaxDistilBertForMaskedLM + +[[autodoc]] FlaxDistilBertForMaskedLM + - __call__ + +## FlaxDistilBertForSequenceClassification + +[[autodoc]] FlaxDistilBertForSequenceClassification + - __call__ + +## FlaxDistilBertForMultipleChoice + +[[autodoc]] FlaxDistilBertForMultipleChoice + - __call__ + +## FlaxDistilBertForTokenClassification + +[[autodoc]] FlaxDistilBertForTokenClassification + - __call__ + +## FlaxDistilBertForQuestionAnswering + +[[autodoc]] FlaxDistilBertForQuestionAnswering + - __call__ + + + \ No newline at end of file From ddd92e52a75bf5a13cd4371508a60a45662de4df Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:55 +0300 Subject: [PATCH 424/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dit.md | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/source/ar/model_doc/dit.md diff --git a/docs/source/ar/model_doc/dit.md b/docs/source/ar/model_doc/dit.md new file mode 100644 index 00000000000000..ed41e2eeb1ebb5 --- /dev/null +++ b/docs/source/ar/model_doc/dit.md @@ -0,0 +1,67 @@ +# DiT + +## نظرة عامة + +اقترح DiT في [DiT: Self-supervised Pre-training for Document Image Transformer](https://arxiv.org/abs/2203.02378) بواسطة Junlong Li, Yiheng Xu, Tengchao Lv, Lei Cui, Cha Zhang, Furu Wei. + +يطبق DiT الهدف الخاضع للإشراف الذاتي لـ [BEiT](https://huggingface.co/docs/models/beit) (BERT pre-training of Image Transformers) على 42 مليون صورة للمستندات، مما يسمح بتحقيق نتائج متقدمة في المهام بما في ذلك: + +- تصنيف صورة المستند: مجموعة بيانات [RVL-CDIP](https://www.cs.cmu.edu/~aharley/rvl-cdip/) (مجموعة من 400,000 صورة تنتمي إلى واحدة من 16 فئة). +- تحليل تخطيط المستند: مجموعة بيانات [PubLayNet](https://github.com/ibm-aur-nlp/PubLayNet) (مجموعة من أكثر من 360,000 صورة للمستندات تم إنشاؤها عن طريق التحليل التلقائي لملفات PubMed XML). +- كشف الجدول: مجموعة بيانات [ICDAR 2019 cTDaR](https://github.com/cndplab-founder/ICDAR2019_cTDaR) (مجموعة من 600 صورة تدريب و240 صورة اختبار). + +الملخص من الورقة هو كما يلي: + +*حققت Image Transformer مؤخرًا تقدمًا كبيرًا في فهم الصور الطبيعية، باستخدام تقنيات التدريب الخاضعة للإشراف (ViT، DeiT، إلخ) أو تقنيات التدريب الخاضعة للإشراف الذاتي (BEiT، MAE، إلخ). في هذه الورقة، نقترح DiT، وهو نموذج تحويل صورة مستند خاضع للإشراف الذاتي باستخدام صور نصية غير موسومة واسعة النطاق لمهام AI الخاصة بالمستندات، وهو أمر أساسي نظرًا لعدم وجود نظراء مشرفين بسبب نقص صور المستندات التي وضع عليها الإنسان علامات. نحن نستفيد من DiT كشبكة أساسية في مجموعة متنوعة من مهام AI الخاصة بالمستندات والقائمة على الرؤية، بما في ذلك تصنيف صورة المستند، وتحليل تخطيط المستند، وكذلك كشف الجدول. وقد أوضحت نتائج التجربة أن نموذج DiT الخاضع للإشراف الذاتي يحقق نتائج جديدة متقدمة في هذه المهام اللاحقة، مثل تصنيف صورة المستند (91.11 → 92.69)، وتحليل تخطيط المستند (91.0 → 94.9) واكتشاف الجدول (94.23 → 96.55).* + +drawing + + ملخص النهج. مأخوذ من [الورقة الأصلية](https://arxiv.org/abs/2203.02378). + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/unilm/tree/master/dit). + +## نصائح الاستخدام + +يمكن للمرء استخدام أوزان DiT مباشرة مع واجهة برمجة تطبيقات AutoModel: + +```python +from transformers import AutoModel + +model = AutoModel.from_pretrained("microsoft/dit-base") +``` + +سيؤدي هذا إلى تحميل النموذج الذي تم تدريبه مسبقًا على نمذجة الصور المقنعة. لاحظ أن هذا لن يتضمن رأس نمذجة اللغة في الأعلى، والذي يستخدم للتنبؤ بالرموز البصرية. + +لإدراج الرأس، يمكنك تحميل الأوزان في نموذج `BeitForMaskedImageModeling`، كما هو موضح أدناه: + +```python +from transformers import BeitForMaskedImageModeling + +model = BeitForMaskedImageModeling.from_pretrained("microsoft/dit-base") +``` + +يمكنك أيضًا تحميل نموذج مدرب من [المحور](https://huggingface.co/models?other=dit)، كما هو موضح أدناه: + +```python +from transformers import AutoModelForImageClassification + +model = AutoModelForImageClassification.from_pretrained("microsoft/dit-base-finetuned-rvlcdip") +``` + +تم ضبط نقطة التحقق هذه بشكل دقيق على [RVL-CDIP](https://www.cs.cmu.edu/~aharley/rvl-cdip/)، وهو معيار مرجعي مهم لتصنيف صورة المستند. + +يمكن العثور على دفتر الملاحظات الذي يوضح الاستدلال لتصنيف صورة المستند [هنا](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/DiT/Inference_with_DiT_(Document_Image_Transformer)_for_document_image_classification.ipynb). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DiT. + + + +- [`BeitForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنقوم بمراجعته! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + + +نظرًا لأن بنية DiT تعادل بنية BEiT، فيمكنك الرجوع إلى [صفحة وثائق BEiT](https://huggingface.co/docs/models/beit) للحصول على جميع النصائح وأمثلة التعليمات البرمجية ومفكرات Jupyter. + \ No newline at end of file From f7a8ee01194cdc69eae7406440e4006fe02ea84c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:57 +0300 Subject: [PATCH 425/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/donut.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/donut.md | 202 ++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 docs/source/ar/model_doc/donut.md diff --git a/docs/source/ar/model_doc/donut.md b/docs/source/ar/model_doc/donut.md new file mode 100644 index 00000000000000..8a962388b92b9e --- /dev/null +++ b/docs/source/ar/model_doc/donut.md @@ -0,0 +1,202 @@ +# Donut + +## نظرة عامة + +اقتُرح نموذج Donut في ورقة بحثية بعنوان "محول فهم المستندات دون استخدام تقنية التعرف البصري على الحروف" من قبل جيووك كيم، وتيكغيو هونغ، وموونبين ييم، وجيونجيون نام، وجينييونغ بارك، وجينيونج ييم، وونسويك هوانج، وسانغدو يون، ودونغيون هان، وسيونغهيون بارك. + +يتكون نموذج Donut من محول ترميز الصور ومحول ترميز النصوص التلقائي لإنجاز مهام فهم المستندات مثل تصنيف صور المستندات، وفهم النماذج، والإجابة على الأسئلة البصرية. + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +*يعد فهم صور المستندات (مثل الفواتير) مهمة أساسية ولكنها صعبة لأنها تتطلب وظائف معقدة مثل قراءة النص وفهم المستند ككل. وتستعين الطرق الحالية لفهم المستندات المرئية بتقنية التعرف البصري على الحروف المتوفرة تجاريًا للقيام بمهمة قراءة النص، وتركز على مهمة الفهم باستخدام مخرجات التعرف البصري على الحروف. وعلى الرغم من أن هذه الطرق التي تعتمد على تقنية التعرف البصري على الحروف أظهرت أداءً واعدًا، إلا أنها تعاني من 1) ارتفاع التكاليف الحسابية لاستخدام تقنية التعرف البصري على الحروف؛ 2) عدم مرونة نماذج التعرف البصري على الحروف في اللغات أو أنواع المستندات؛ 3) انتشار أخطاء التعرف البصري على الحروف في العملية اللاحقة. ولمعالجة هذه القضايا، نقدم في هذه الورقة نموذجًا جديدًا لفهم المستندات المرئية دون استخدام تقنية التعرف البصري على الحروف يسمى Donut، وهو اختصار لـ "محول فهم المستندات". وكخطوة أولى في أبحاث فهم المستندات المرئية دون استخدام تقنية التعرف البصري على الحروف، نقترح بنية بسيطة (أي محول) مع هدف تدريب مسبق (أي دالة الخسارة المتقاطعة). ويتميز نموذج Donut ببساطته وفعاليته في نفس الوقت. ومن خلال التجارب والتحليلات المستفيضة، نثبت أن نموذج Donut البسيط لفهم المستندات المرئية دون استخدام تقنية التعرف البصري على الحروف يحقق أداءً متميزًا من حيث السرعة والدقة في العديد من مهام فهم المستندات المرئية. بالإضافة إلى ذلك، نقدم مولد بيانات تركيبية يساعد في مرونة التدريب المسبق للنموذج في مختلف اللغات والمجالات.* + +drawing + +نظرة عامة عالية المستوى لنموذج Donut. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). ويمكن العثور على الكود الأصلي [هنا](https://github.com/clovaai/donut). + +## نصائح الاستخدام + +- أسرع طريقة للبدء في استخدام نموذج Donut هي من خلال الاطلاع على [دفاتر الملاحظات التعليمية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Donut)، والتي توضح كيفية استخدام النموذج في مرحلة الاستدلال وكذلك الضبط الدقيق على بيانات مخصصة. + +- يتم استخدام نموذج Donut دائمًا ضمن إطار عمل [VisionEncoderDecoder](vision-encoder-decoder). + +## أمثلة الاستدلال + +يقبل نموذج [`VisionEncoderDecoder`] في نموذج Donut الصور كمدخلات ويستخدم [`~generation.GenerationMixin.generate`] لتوليد النص تلقائيًا بناءً على صورة المدخلات. + +تتولى فئة [`DonutImageProcessor`] مسؤولية معالجة صورة المدخلات، ويقوم [`XLMRobertaTokenizer`/`XLMRobertaTokenizerFast`] بفك ترميز رموز الهدف المتوقعة إلى سلسلة الهدف. وتجمع فئة [`DonutProcessor`] بين [`DonutImageProcessor`] و [`XLMRobertaTokenizer`/`XLMRobertaTokenizerFast`] في مثيل واحد لاستخراج ميزات المدخلات وفك ترميز رموز الهدف المتوقعة. + +- خطوة بخطوة لتصنيف صورة المستند: + +```py +>>> import re + +>>> from transformers import DonutProcessor, VisionEncoderDecoderModel +>>> from datasets import load_dataset +>>> import torch + +>>> processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base-finetuned-rvlcdip") +>>> model = VisionEncoderDecoderModel.from_pretrained("naver-clova-ix/donut-base-finetuned-rvlcdip") + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> model.to(device) # doctest: +IGNORE_RESULT + +>>> # تحميل صورة المستند +>>> dataset = load_dataset("hf-internal-testing/example-documents", split="test") +>>> image = dataset[1]["image"] + +>>> # إعداد مدخلات فك الترميز +>>> task_prompt = "" +>>> decoder_input_ids = processor.tokenizer(task_prompt, add_special_tokens=False, return_tensors="pt").input_ids + +>>> pixel_values = processor(image, return_tensors="pt").pixel_values + +>>> outputs = model.generate( +... pixel_values.to(device), +... decoder_input_ids=decoder_input_ids.to(device), +... max_length=model.decoder.config.max_position_embeddings, +... pad_token_id=processor.tokenizer.pad_token_id, +... eos_token_id=processor.tokenizer.eos_token_id, +... use_cache=True, +... bad_words_ids=[[processor.tokenizer.unk_token_id]], +... return_dict_in_generate=True, +... ) + +>>> sequence = processor.batch_decode(outputs.sequences)[0] +>>> sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "") +>>> sequence = re.sub(r"<.*?>", "", sequence, count=1).strip() # إزالة رمز بدء المهمة الأول +>>> print(processor.token2json(sequence)) +{'class': 'advertisement'} +``` + +- خطوة بخطوة لفهم المستند: + +```py +>>> import re + +>>> from transformers import DonutProcessor, VisionEncoderDecoderModel +>>> from datasets import load_dataset +>>> import torch + +>>> processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base-finetuned-cord-v2") +>>> model = VisionEncoderDecoderModel.from_pretrained("naver-clova-ix/donut-base-finetuned-cord-v2") + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> model.to(device) # doctest: +IGNORE_RESULT + +>>> # تحميل صورة المستند +>>> dataset = load_dataset("hf-internal-testing/example-documents", split="test") +>>> image = dataset[2]["image"] + +>>> # إعداد مدخلات فك الترميز +>>> task_prompt = "" +>>> decoder_input_ids = processor.tokenizer(task_prompt, add_special_tokens=False, return_tensors="pt").input_ids + +>>> pixel_values = processor(image, return_tensors="pt").pixel_values + +>>> outputs = model.generate( +... pixel_values.to(device), +... decoder_input_ids=decoder_input_ids.to(device), +... max_length=model.decoder.config.max_position_embeddings, +... pad_token_id=processor.tokenizer.pad_token_id, +... eos_token_id=processor.tokenizer.eos_token_id, +... use_cache=True, +... bad_words_ids=[[processor.tokenizer.unk_token_id]], +... return_dict_in_generate=True, +... ) + +>>> sequence = processor.batch_decode(outputs.sequences)[0] +>>> sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "") +>>> sequence = re.sub(r"<.*?>", "", sequence, count=1).strip() # إزالة رمز بدء المهمة الأول +>>> print(processor.token2json(sequence)) +{'menu': {'nm': 'CINNAMON SUGAR', 'unitprice': '17,000', 'cnt': '1 x', 'price': '17,000'}, 'sub_total': {'subtotal_price': '17,000'}, 'total': {'total_price': '17,000', 'cashprice': '20,000', 'changeprice': '3,000'}} +``` + +- خطوة بخطوة للإجابة على الأسئلة البصرية في المستند (DocVQA): + +```py +>>> import re + +>>> from transformers import DonutProcessor, VisionEncoderDecoderModel +>>> from datasets import load_dataset +>>> import torch + +>>> processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base-finetuned-docvqa") +>>> model = VisionEncoderDecoderModel.from_pretrained("naver-clova-ix/donut-base-finetuned-docvqa") + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> model.to(device) # doctest: +IGNORE_RESULT + +>>> # تحميل صورة المستند من مجموعة بيانات DocVQA +>>> dataset = load_dataset("hf-internal-testing/example-documents", split="test") +>>> image = dataset[0]["image"] + +>>> # إعداد مدخلات فك الترميز +>>> task_prompt = "{user_input}" +>>> question = "When is the coffee break?" +>>> prompt = task_prompt.replace("{user_input}", question) +>>> decoder_input_ids = processor.tokenizer(prompt, add_special_tokens=False, return_tensors="pt").input_ids + +>>> pixel_values = processor(image, return_tensors="pt").pixel_values + +>>> outputs = model.generate( +... pixel_values.to(device), +... decoder_input_ids=decoder_input_ids.to(device), +... max_length=model.decoder.config.max_position_embeddings, +... pad_token_id=processor.tokenizer.pad_token_id, +... eos_token_id=processor.tokenizer.eos_token_id, +... use_cache=True, +... bad_words_ids=[[processor.tokenizer.unk_token_id]], +... return_dict_in_generate=True, +... ) + +>>> sequence = processor.batch_decode(outputs.sequences)[0] +>>> sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "") +>>> sequence = re.sub(r"<.*?>", "", sequence, count=1).strip() # إزالة رمز بدء المهمة الأول +>>> print(processor.token2json(sequence)) +{'question': 'When is the coffee break?', 'answer': '11-14 to 11:39 a.m.'} +``` + +يمكنك الاطلاع على [مركز النماذج](https://huggingface.co/models?filter=donut) للبحث عن نقاط تفتيش لنموذج Donut. + +## التدريب + +يمكن الرجوع إلى [دفاتر الملاحظات التعليمية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Donut). + +## DonutSwinConfig + +[[autodoc]] DonutSwinConfig + +## DonutImageProcessor + +[[autodoc]] DonutImageProcessor + +- preprocess + +## DonutFeatureExtractor + +[[autodoc]] DonutFeatureExtractor + +- __call__ + +## DonutProcessor + +[[autodoc]] DonutProcessor + +- __call__ + +- from_pretrained + +- save_pretrained + +- batch_decode + +- decode + +## DonutSwinModel + +[[autodoc]] DonutSwinModel + +- forward \ No newline at end of file From f165870d45d52ca2230f20ea43c295e405fe2e23 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:24:59 +0300 Subject: [PATCH 426/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dpr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dpr.md | 100 ++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/source/ar/model_doc/dpr.md diff --git a/docs/source/ar/model_doc/dpr.md b/docs/source/ar/model_doc/dpr.md new file mode 100644 index 00000000000000..4d2f759e098072 --- /dev/null +++ b/docs/source/ar/model_doc/dpr.md @@ -0,0 +1,100 @@ +# DPR + +## نظرة عامة + +Dense Passage Retrieval (DPR) هي مجموعة من الأدوات والنماذج لبحوث أسئلة وأجوبة المجال المفتوح المتقدمة. تم تقديمه في "استرجاع المرور الكثيف لأسئلة المجال المفتوح وأجوبتها" بواسطة فلاديمير كاربوخين، وبارلاس أوجوز، وسيون مين، وباتريك لويس، وليديل وو، وسيرجي إدونوف، ودانقي تشن، وون-تاو ييه. + +ملخص الورقة هو ما يلي: + +*يعتمد نظام الأسئلة والأجوبة في المجال المفتوح على استرجاع المرور الكفء لاختيار سياقات المرشحين، حيث تعد نماذج الفضاء المتفرق، مثل TF-IDF أو BM25، هي الطريقة الفعلية. في هذا العمل، نُظهر أن الاسترجاع يمكن تنفيذه عمليًا باستخدام التمثيلات الكثيفة بمفردها، حيث يتم تعلم التضمينات من عدد صغير من الأسئلة والمرور بواسطة إطار عمل مشفر مزدوج بسيط. عندما تم تقييمه على مجموعة واسعة من مجموعات بيانات QA المجال المفتوح، تفوق نظام الاسترجاع الكثيف لدينا على نظام Lucene-BM25 القوي إلى حد كبير بنسبة 9٪ -19٪ مطلقًا من حيث دقة استرجاع المرور العلوي 20، وساعد نظام QA من البداية إلى النهاية في إنشاء حالة جديدة من الفن في نقاط مرجعية QA المجال المفتوح متعددة.* + +تمت المساهمة بهذا النموذج من قبل [lhoestq](https://huggingface.co/lhoestq). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/DPR). + +## نصائح الاستخدام + +يتكون DPR من ثلاثة نماذج: + +* مشفر السؤال: قم بتشفير الأسئلة على شكل متجهات +* مشفر السياق: قم بتشفير السياقات على شكل متجهات +* القارئ: استخراج إجابة الأسئلة داخل السياقات المستردة، إلى جانب درجة الملاءمة (عالية إذا كانت الفترة المستدلة تجيب بالفعل على السؤال). + +## تكوين DPR + +[[autodoc]] DPRConfig + +## معالج مشفر سياق DPR + +[[autodoc]] DPRContextEncoderTokenizer + +## معالج مشفر سياق DPR السريع + +[[autodoc]] DPRContextEncoderTokenizerFast + +## معالج مشفر سؤال DPR + +[[autodoc]] DPRQuestionEncoderTokenizer + +## معالج مشفر سؤال DPR السريع + +[[autodoc]] DPRQuestionEncoderTokenizerFast + +## معالج قارئ DPR + +[[autodoc]] DPRReaderTokenizer + +## معالج قارئ DPR السريع + +[[autodoc]] DPRReaderTokenizerFast + +## المخرجات المحددة لـ DPR + +[[autodoc]] models.dpr.modeling_dpr.DPRContextEncoderOutput + +[[autodoc]] models.dpr.modeling_dpr.DPRQuestionEncoderOutput + +[[autodoc]] models.dpr.modeling_dpr.DPRReaderOutput + + + + +## مشفر السياق DPR + +[[autodoc]] DPRContextEncoder + +- forword + +## مشفر السؤال DPR + +[[autodoc]] DPRQuestionEncoder + +- forword + +## قارئ DPR + +[[autodoc]] DPRReader + +- forword + + + + +## TFDPRContextEncoder + +[[autodoc]] TFDPRContextEncoder + +- call + +## TFDPRQuestionEncoder + +[[autodoc]] TFDPRQuestionEncoder + +- call + +## TFDPRReader + +[[autodoc]] TFDPRReader + +- call + + + \ No newline at end of file From 8edfa35a08ca40801152301cc5903b61c0ee9a92 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:00 +0300 Subject: [PATCH 427/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/dpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/dpt.md | 75 +++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/source/ar/model_doc/dpt.md diff --git a/docs/source/ar/model_doc/dpt.md b/docs/source/ar/model_doc/dpt.md new file mode 100644 index 00000000000000..2c551d6033ed03 --- /dev/null +++ b/docs/source/ar/model_doc/dpt.md @@ -0,0 +1,75 @@ +# DPT + +## نظرة عامة +يقترح نموذج DPT في [محولات الرؤية للتنبؤ الكثيف](https://arxiv.org/abs/2103.13413) بواسطة René Ranftl، وAlexey Bochkovskiy، وVladlen Koltun. +DPT هو نموذج يعتمد على [محول الرؤية (ViT)](vit) كعمود فقري لمهام التنبؤ الكثيف مثل التجزئة الدلالية وتقدير العمق. + +المستخلص من الورقة هو ما يلي: + +*نقدم محولات الرؤية الكثيفة، وهي بنية تستخدم محولات الرؤية بدلاً من الشبكات الاقترانية كعمود فقري لمهام التنبؤ الكثيف. نقوم بتجميع الرموز من مراحل مختلفة من محول الرؤية إلى تمثيلات شبيهة بالصور بدقات مختلفة ونجمعها تدريجياً في تنبؤات بدقة كاملة باستخدام فك تشفير الاقتران. تقوم البنية الأساسية للمحول بمعالجة التمثيلات بدقة ثابتة وعالية نسبياً ولها مجال استقبال عالمي في كل مرحلة. تسمح هذه الخصائص لمحول الرؤية الكثيف بتوفير تنبؤات أكثر دقة وتماسكاً عالمياً عند مقارنتها بالشبكات الاقترانية بالكامل. تُظهر تجاربنا أن هذا التصميم يحقق تحسينات كبيرة في مهام التنبؤ الكثيف، خاصة عند توفر كمية كبيرة من بيانات التدريب. بالنسبة لتقدير العمق الأحادي، نلاحظ تحسناً يصل إلى 28% في الأداء النسبي عند مقارنته بشبكة اقترانية كاملة متقدمة. عند تطبيقها على التجزئة الدلالية، تحدد محولات الرؤية الكثيفة حالة جديدة في الفن على ADE20K بنسبة 49.02% mIoU. كما نوضح أن البنية يمكن ضبطها بشكل دقيق على مجموعات بيانات أصغر مثل NYUv2 وKITTI وPascal Context حيث تحدد أيضًا الحالة الجديدة للفن.* + + + +هندسة DPT. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/isl-org/DPT). + +## نصائح الاستخدام +يتوافق DPT مع فئة [`AutoBackbone`]. يسمح ذلك باستخدام إطار عمل DPT مع العمود الفقري لرؤية الكمبيوتر المختلفة المتاحة في المكتبة، مثل [`VitDetBackbone`] أو [`Dinov2Backbone`]. يمكن إنشاؤه على النحو التالي: + +```python +from transformers import Dinov2Config, DPTConfig, DPTForDepthEstimation + +# initialize with a Transformer-based backbone such as DINOv2 +# in that case, we also specify `reshape_hidden_states=False` to get feature maps of shape (batch_size, num_channels, height, width) +backbone_config = Dinov2Config.from_pretrained("facebook/dinov2-base", out_features=["stage1", "stage2", "stage3", "stage4"], reshape_hidden_states=False) + +config = DPTConfig(backbone_config=backbone_config) +model = DPTForDepthEstimation(config=config) +``` + +## الموارد +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام DPT. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ [`DPTForDepthEstimation`] [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/DPT). +- [دليل مهام التجزئة الدلالية](../tasks/semantic_segmentation) +- [دليل مهام تقدير العمق الأحادي](../tasks/monocular_depth_estimation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## DPTConfig + +[[autodoc]] DPTConfig + +## DPTFeatureExtractor + +[[autodoc]] DPTFeatureExtractor + +- __call__ +- post_process_semantic_segmentation + +## DPTImageProcessor + +[[autodoc]] DPTImageProcessor + +- preprocess +- post_process_semantic_segmentation + +## DPTModel + +[[autodoc]] DPTModel + +- forward + +## DPTForDepthEstimation + +[[autodoc]] DPTForDepthEstimation + +- forward + +## DPTForSemanticSegmentation + +[[autodoc]] DPTForSemanticSegmentation + +- forward \ No newline at end of file From 5769073b1ccbb6aa8a65ad0fe51affc809e12754 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:02 +0300 Subject: [PATCH 428/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/graphormer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/graphormer.md | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/source/ar/model_doc/graphormer.md diff --git a/docs/source/ar/model_doc/graphormer.md b/docs/source/ar/model_doc/graphormer.md new file mode 100644 index 00000000000000..f6aa9a46c9c31d --- /dev/null +++ b/docs/source/ar/model_doc/graphormer.md @@ -0,0 +1,36 @@ +# Graphormer + +> **ملاحظة:** +> هذا النموذج في وضع الصيانة فقط، ولن نقبل أي طلبات سحب (Pull Requests) جديدة لتغيير شفرته. إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + +## نظرة عامة + +اقتُرح نموذج Graphormer في الورقة البحثية [Do Transformers Really Perform Bad for Graph Representation?](https://arxiv.org/abs/2106.05234) من قبل Chengxuan Ying وآخرين. وهو نموذج محول رسومي (Graph Transformer) معدل للسماح بإجراء الحسابات على الرسوم البيانية بدلاً من تسلسلات النص من خلال توليد التضمينات (embeddings) والسمات ذات الاهتمام أثناء المعالجة المسبقة والجمع، ثم استخدام انتباه معدل. + +هذا هو الملخص من الورقة: + +> أصبحت بنية المحول (Transformer) اختيارًا مهيمنًا في العديد من المجالات، مثل معالجة اللغة الطبيعية والرؤية الحاسوبية. ومع ذلك، لم يحقق أداءً تنافسيًا في لوحات القيادة الشائعة للتنبؤ على مستوى الرسم البياني مقارنة بالمتغيرات الشائعة لشبكات الرسوم البيانية العصبية (GNN). لذلك، يظل الأمر لغزًا كيف يمكن أن تؤدي المحولات أداءً جيدًا لتعلم تمثيل الرسم البياني. في هذه الورقة، نقوم بحل هذا اللغز من خلال تقديم Graphormer، والذي تم بناؤه بناءً على بنية المحول القياسية، ويمكنه تحقيق نتائج ممتازة في مجموعة واسعة من مهام تعلم تمثيل الرسم البياني، خاصة في تحدي OGB Large-Scale Challenge الأخير. تتمثل رؤيتنا الأساسية لاستخدام المحول في الرسم البياني في ضرورة ترميز المعلومات الهيكلية للرسم البياني بشكل فعال في النموذج. ولهذه الغاية، نقترح عدة طرق ترميز هيكلية بسيطة وفعالة لمساعدة Graphormer على نمذجة البيانات المبنية على الرسوم البيانية بشكل أفضل. بالإضافة إلى ذلك، نحدد الخصائص التعبيرية لـ Graphormer ونظهر أنه مع طرقنا لترميز المعلومات الهيكلية للرسوم البيانية، يمكن تغطية العديد من المتغيرات الشائعة لشبكات GNN كحالات خاصة لـ Graphormer. + +تمت المساهمة بهذا النموذج من قبل [clefourrier](https://huggingface.co/clefourrier). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/Graphormer). + +## نصائح الاستخدام + +لن يعمل هذا النموذج بشكل جيد على الرسوم البيانية الكبيرة (أكثر من 100 عقدة/حافة)، حيث سيؤدي ذلك إلى انفجار الذاكرة. يمكنك تقليل حجم الدفعة، أو زيادة ذاكرة الوصول العشوائي (RAM)، أو تقليل معلمة `UNREACHABLE_NODE_DISTANCE` في ملف `algos_graphormer.pyx`، ولكن سيكون من الصعب تجاوز 700 عقدة/حافة. + +لا يستخدم هذا النموذج رمزًا مميزًا (tokenizer)، ولكنه يستخدم بدلاً من ذلك مجمعًا (collator) خاصًا أثناء التدريب. + +## GraphormerConfig + +[[autodoc]] GraphormerConfig + +## GraphormerModel + +[[autodoc]] GraphormerModel + +- forward + +## GraphormerForGraphClassification + +[[autodoc]] GraphormerForGraphClassification + +- forward \ No newline at end of file From 4b626cf1c6d547a6b271a21155579c33473d1fb7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:04 +0300 Subject: [PATCH 429/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/efficientnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/efficientnet.md | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/source/ar/model_doc/efficientnet.md diff --git a/docs/source/ar/model_doc/efficientnet.md b/docs/source/ar/model_doc/efficientnet.md new file mode 100644 index 00000000000000..c90d206d3a5c03 --- /dev/null +++ b/docs/source/ar/model_doc/efficientnet.md @@ -0,0 +1,34 @@ +# EfficientNet + +## نظرة عامة +تم اقتراح نموذج EfficientNet في ورقة [EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks](https://arxiv.org/abs/1905.11946) بواسطة Mingxing Tan و Quoc V. Le. تعد EfficientNets عائلة من نماذج تصنيف الصور، والتي تحقق دقة عالية، مع كونها أصغر وأسرع من النماذج السابقة. + +ملخص الورقة البحثية هو كما يلي: + +*تُطور شبكات العصبونات التلافيفية (ConvNets) عادةً بميزانية موارد ثابتة، ثم يتم توسيعها للحصول على دقة أفضل إذا كانت هناك موارد إضافية متاحة. في هذه الورقة، نقوم بدراسة منهجية لقياس النموذج وتحديد أن الموازنة الدقيقة بين عمق الشبكة وعرضها ودقتها يمكن أن تؤدي إلى أداء أفضل. وبناءً على هذه الملاحظة، نقترح طريقة جديدة لقياس النطاق الذي يوسع جميع أبعاد العمق/العرض/الدقة باستخدام معامل مركب بسيط ولكنه فعال للغاية. نثبت فعالية هذه الطريقة في توسيع MobileNets و ResNet. + +وللمضي قدما، نستخدم البحث المعماري العصبي لتصميم شبكة أساس جديدة وتوسيعها للحصول على عائلة من النماذج، تسمى EfficientNets، والتي تحقق دقة وكفاءة أفضل بكثير من ConvNets السابقة. على وجه الخصوص، يحقق نموذجنا EfficientNet-B7 دقة أعلى بنسبة 84.3٪ في تصنيف الصور ImageNet، بينما يكون أصغر 8.4 مرة وأسرع 6.1 مرة في الاستدلال من أفضل ConvNet موجود. كما أن نماذج EfficientNets الخاصة بنا تنتقل بشكل جيد وتحقق دقة عالية على مجموعات بيانات التعلم بالانتقال CIFAR-100 (91.7٪) و Flowers (98.8٪) وخمس مجموعات بيانات أخرى للتعلم بالانتقال، مع عدد أقل من المعلمات.* + +تمت المساهمة بهذا النموذج من قبل [adirik](https://huggingface.co/adirik). يمكن العثور على الكود الأصلي [هنا](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet). + +## EfficientNetConfig + +[[autodoc]] EfficientNetConfig + +## EfficientNetImageProcessor + +[[autodoc]] EfficientNetImageProcessor + +- preprocess + +## EfficientNetModel + +[[autodoc]] EfficientNetModel + +- forward + +## EfficientNetForImageClassification + +[[autodoc]] EfficientNetForImageClassification + +- forward \ No newline at end of file From 1df4a1b5e6d70821899a6764bca10959e8aecb9d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:06 +0300 Subject: [PATCH 430/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/electra.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/electra.md | 198 ++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 docs/source/ar/model_doc/electra.md diff --git a/docs/source/ar/model_doc/electra.md b/docs/source/ar/model_doc/electra.md new file mode 100644 index 00000000000000..4d0d2a2bcf8c60 --- /dev/null +++ b/docs/source/ar/model_doc/electra.md @@ -0,0 +1,198 @@ +# ELECTRA + +## نظرة عامة + +تم اقتراح نموذج ELECTRA في الورقة البحثية [ELECTRA: Pre-training Text Encoders as Discriminators Rather Than +Generators](https://openreview.net/pdf?id=r1xMH1BtvB). ELECTRA هو أسلوب جديد للتعليم المسبق يقوم بتدريب نموذجين من نوع المحول: المولد والمحقق. يتمثل دور المولد في استبدال الرموز في تسلسل، وبالتالي يتم تدريبه كنموذج لغة مقنعة. أما المحقق، وهو النموذج الذي يهمنا، فيحاول تحديد الرموز التي استبدلها المولد في التسلسل. + +ملخص الورقة البحثية هو كما يلي: + +> تقوم طرق التعليم المسبق لـ MLM (Masked Language Modeling) مثل BERT بإفساد الإدخال عن طريق استبدال بعض الرموز بـ [MASK] ثم تدريب نموذج لإعادة بناء الرموز الأصلية. وعلى الرغم من أنها تنتج نتائج جيدة عند نقلها إلى مهام NLP لأسفل، إلا أنها تتطلب عمومًا كميات كبيرة من الحساب لتكون فعالة. وبدلاً من ذلك، نقترح مهمة تعليم مسبق أكثر كفاءة في العينات تسمى كشف الرمز المُستبدل. بدلاً من قناع الإدخال، يقوم نهجنا بإفساده عن طريق استبدال بعض الرموز ببدائل مقنعة يتم أخذ عينات منها من شبكة مولد صغيرة. ثم، بدلاً من تدريب نموذج يتنبأ بالهويات الأصلية للرموز الفاسدة، نقوم بتدريب نموذج تمييزي يتنبأ بما إذا كان كل رمز في الإدخال الفاسد قد تم استبداله بواسطة عينة من المولد أم لا. تُظهر التجارب الشاملة أن مهمة التعليم المسبق الجديدة هذه أكثر كفاءة من MLM لأن المهمة محددة لجميع رموز الإدخال بدلاً من المجموعة الفرعية الصغيرة التي تم قناعها. ونتيجة لذلك، فإن التمثيلات السياقية التي تعلمها نهجنا تتفوق بشكل كبير على تلك التي تعلمها BERT نظرًا لنفس حجم النموذج والبيانات والحساب. وتكون المكاسب قوية بشكل خاص بالنسبة للنماذج الصغيرة؛ على سبيل المثال، نقوم بتدريب نموذج على وحدة معالجة رسومات واحدة لمدة 4 أيام تتفوق على GPT (تم تدريبه باستخدام 30 ضعف الحساب) في معيار الفهم اللغوي GLUE. كما يعمل نهجنا بشكل جيد على نطاق واسع، حيث يؤدي أداءً مماثلاً لـ RoBERTa و XLNet باستخدام أقل من 1/4 من حساباتهما ويتفوق عليهما عند استخدام نفس الكمية من الحساب. + +تمت المساهمة بهذا النموذج من قبل [lysandre](https://huggingface.co/lysandre). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/electra). + +## نصائح الاستخدام + +- ELECTRA هو نهج التعليم المسبق، وبالتالي لا يوجد أي تغييرات تقريبًا في النموذج الأساسي: BERT. التغيير الوحيد هو فصل حجم تضمين وحجم المخفي: حجم التضمين أصغر عمومًا، في حين أن حجم المخفي أكبر. تُستخدم طبقة إسقاط إضافية (خطية) لإسقاط التضمينات من حجم التضمين إلى حجم المخفي. في الحالة التي يكون فيها حجم التضمين هو نفسه حجم المخفي، لا تُستخدم أي طبقة إسقاط. + +- ELECTRA هو نموذج محول مُدرب مسبقًا باستخدام نموذج لغة مقنع آخر (صغير). يتم إفساد الإدخالات بواسطة نموذج اللغة هذا، والذي يأخذ نصًا مقنعًا عشوائيًا كإدخال ويقوم بإخراج نص يجب على ELECTRA التنبؤ به والذي هو رمز أصلي والذي تم استبداله. مثل تدريب GAN، يتم تدريب نموذج اللغة الصغيرة لبضع خطوات (ولكن باستخدام النصوص الأصلية كهدف، وليس خداع نموذج ELECTRA كما هو الحال في إعداد GAN التقليدي) ثم يتم تدريب نموذج ELECTRA لبضع خطوات. + +- تحتوي نقاط تفتيش ELECTRA المحفوظة باستخدام [تنفيذ Google Research](https://github.com/google-research/electra) على كل من المولد والمحقق. يتطلب برنامج التحويل من المستخدم تسمية النموذج الذي سيتم تصديره إلى الهندسة المعمارية الصحيحة. بمجرد تحويلها إلى تنسيق HuggingFace، يمكن تحميل هذه نقاط التفتيش في جميع نماذج ELECTRA المتاحة، ومع ذلك. وهذا يعني أنه يمكن تحميل المحقق في نموذج [`ElectraForMaskedLM`]، ويمكن تحميل المولد في نموذج [`ElectraForPreTraining`] (سيتم تهيئة رأس التصنيف بشكل عشوائي لأنه غير موجود في المولد). + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## ElectraConfig + +[[autodoc]] ElectraConfig + +## ElectraTokenizer + +[[autodoc]] ElectraTokenizer + +## ElectraTokenizerFast + +[[autodoc]] ElectraTokenizerFast + +## المخرجات الخاصة بـ Electra + +[[autodoc]] models.electra.modeling_electra.ElectraForPreTrainingOutput + +[[autodoc]] models.electra.modeling_tf_electra.TFElectraForPreTrainingOutput + + + + +## ElectraModel + +[[autodoc]] ElectraModel + +- forward + +## ElectraForPreTraining + +[[autodoc]] ElectraForPreTraining + +- forward + +## ElectraForCausalLM + +[[autodoc]] ElectraForCausalLM + +- forward + +## ElectraForMaskedLM + +[[autodoc]] ElectraForMaskedLM + +- forward + +## ElectraForSequenceClassification + +[[autodoc]] ElectraForSequenceClassification + +- forward + +## ElectraForMultipleChoice + +[[autodoc]] ElectraForMultipleChoice + +- forward + +## ElectraForTokenClassification + +[[autodoc]] ElectraForTokenClassification + +- forward + +## ElectraForQuestionAnswering + +[[autodoc]] ElectraForQuestionAnswering + +- forward + + + + +## TFElectraModel + +[[autodoc]] TFElectraModel + +- call + +## TFElectraForPreTraining + +[[autodoc]] TFElectraForPreTraining + +- call + +## TFElectraForMaskedLM + +[[autodoc]] TFElectraForMaskedLM + +- call + +## TFElectraForSequenceClassification + +[[autodoc]] TFElectraForSequenceClassification + +- call + +## TFElectraForMultipleChoice + + +[[autodoc]] TFElectraForMultipleChoice + +- call + +## TFElectraForTokenClassification + +[[autodoc]] TFElectraForTokenClassification + +- call + +## TFElectraForQuestionAnswering + +[[autodoc]] TFElectraForQuestionAnswering + +- call + + + + +## FlaxElectraModel + +[[autodoc]] FlaxElectraModel + +- __call__ + +## FlaxElectraForPreTraining + +[[autodoc]] FlaxElectraForPreTraining + +- __call__ + +## FlaxElectraForCausalLM + +[[autodoc]] FlaxElectraForCausalLM + +- __call__ + +## FlaxElectraForMaskedLM + +[[autodoc]] FlaxElectraForMaskedLM + +- __call__ + +## FlaxElectraForSequenceClassification + +[[autodoc]] FlaxElectraForSequenceClassification + +- __call__ + +## FlaxElectraForMultipleChoice + +[[autodoc]] FlaxElectraForMultipleChoice + +- __call__ + +## FlaxElectraForTokenClassification + +[[autodoc]] FlaxElectraForTokenClassification + +- __call__ + +## FlaxElectraForQuestionAnswering + +[[autodoc]] FlaxElectraForQuestionAnswering + +- __call__ + + + \ No newline at end of file From ba34601dcc3a055bbf97e49954e879f2013382ba Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:08 +0300 Subject: [PATCH 431/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/encodec.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/encodec.md | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/source/ar/model_doc/encodec.md diff --git a/docs/source/ar/model_doc/encodec.md b/docs/source/ar/model_doc/encodec.md new file mode 100644 index 00000000000000..8cd929c0cedf7a --- /dev/null +++ b/docs/source/ar/model_doc/encodec.md @@ -0,0 +1,50 @@ +# EnCodec + +## نظرة عامة +تم اقتراح نموذج EnCodec neural codec model في ورقة "High Fidelity Neural Audio Compression" بواسطة Alexandre Défossez وJade Copet وGabriel Synnaeve وYossi Adi. + +ملخص الورقة البحثية هو كما يلي: + +*نحن نقدم أحدث تقنيات الترميز الصوتي في الوقت الفعلي وعالي الدقة والذي يعتمد على الشبكات العصبية. ويتكون من بنية تدفق الترميز فك الترميز مع مساحة كمية خفية يتم تدريبها بطريقة متكاملة. نقوم بتبسيط وتسريع التدريب باستخدام معارض متعددة النطاقات للتحليل الطيفي والتي تقلل بشكل فعال من التشوهات وتنتج عينات عالية الجودة. كما نقدم آلية موازنة خسارة جديدة لتثبيت التدريب: وزن الخسارة الآن يحدد نسبة التدرج الكلي الذي يجب أن تمثله، وبالتالي فصل اختيار هذا الفرط المعلمي عن النطاق النموذجي للخسارة. وأخيرًا، ندرس كيف يمكن استخدام نماذج المحول الخفيفة لضغط التمثيل الذي تم الحصول عليه بنسبة تصل إلى 40%، مع الحفاظ على سرعة أسرع من الوقت الفعلي. نقدم وصفًا تفصيليًا لخيارات التصميم الرئيسية للنموذج المقترح بما في ذلك: الهدف من التدريب والتغييرات المعمارية ودراسة لوظائف الخسارة الإدراكية المختلفة. نقدم تقييمًا ذاتيًا واسع النطاق (اختبارات MUSHRA) جنبًا إلى جنب مع دراسة إبطال لأحجام النطاق ومجالات الصوت المختلفة، بما في ذلك الكلام والخطاب الصاخب والصدى والموسيقى. تفوق طريقتنا طرق الخط الأساسي عبر جميع الإعدادات المقيمين، مع مراعاة كل من الصوت أحادي القناة 24 كيلو هرتز والستيريو 48 كيلو هرتز.* + +تمت المساهمة في هذا النموذج بواسطة Matthijs وPatrick Von Platen وArthur Zucker. يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/encodec). + +## مثال على الاستخدام +فيما يلي مثال سريع يوضح كيفية ترميز وفك ترميز الصوت باستخدام هذا النموذج: + +```python +>>> from datasets import load_dataset, Audio +>>> from transformers import EncodecModel, AutoProcessor +>>> librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") + +>>> model = EncodecModel.from_pretrained("facebook/encodec_24khz") +>>> processor = AutoProcessor.from_pretrained("facebook/encodec_24khz") +>>> librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate)) +>>> audio_sample = librispeech_dummy[-1]["audio"]["array"] +>>> inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt") + +>>> encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"]) +>>> audio_values = model.decode(encoder_outputs.audio_codes, encoder_outputs.audio_scales, inputs["padding_mask"])[0] +>>> # أو المكافئ مع تمريرة للأمام +>>> audio_values = model(inputs["input_values"], inputs["padding_mask"]).audio_values +``` + +## EncodecConfig + +[[autodoc]] EncodecConfig + +## EncodecFeatureExtractor + +[[autodoc]] EncodecFeatureExtractor + +- __call__ + +## EncodecModel + +[[autodoc]] EncodecModel + +- decode + +- encode + +- forward \ No newline at end of file From b1b3b5e36b13c52e18091d3777172fbea2a2315d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:10 +0300 Subject: [PATCH 432/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/encoder-decoder.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/encoder-decoder.md | 178 ++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 docs/source/ar/model_doc/encoder-decoder.md diff --git a/docs/source/ar/model_doc/encoder-decoder.md b/docs/source/ar/model_doc/encoder-decoder.md new file mode 100644 index 00000000000000..1ae4c01159128b --- /dev/null +++ b/docs/source/ar/model_doc/encoder-decoder.md @@ -0,0 +1,178 @@ +# Encoder Decoder Models + +## Overview + +يمكن استخدام [`EncoderDecoderModel`] لتهيئة نموذج تسلسل إلى تسلسل باستخدام أي نموذج ترميز ذاتي مسبق التدريب كترميز وأي نموذج توليدي ذاتي مسبق التدريب كفك تشفير. + +وقد تم توضيح فعالية تهيئة نماذج تسلسل إلى تسلسل باستخدام نقاط تفتيش مسبقة التدريب لمهام توليد التسلسل في [Leveraging Pre-trained Checkpoints for Sequence Generation Tasks](https://arxiv.org/abs/1907.12461) بواسطة +Sascha Rothe، Shashi Narayan، Aliaksei Severyn. + +بعد تدريب/ضبط نموذج [`EncoderDecoderModel`]، يمكن حفظه/تحميله تمامًا مثل أي نموذج آخر (راجع الأمثلة لمزيد من المعلومات). + +يمكن أن يكون أحد تطبيقات هذه البنية هو الاستفادة من نموذجين [`BertModel`] مسبقين التدريب كترميز وفك تشفير لنموذج تلخيص كما هو موضح في: [Text Summarization with Pretrained Encoders](https://arxiv.org/abs/1908.08345) بواسطة Yang Liu وMirella Lapata. + +## التهيئة العشوائية لـ `EncoderDecoderModel` من تكوينات النموذج. + +يمكن تهيئة [`EncoderDecoderModel`] بشكل عشوائي من تكوين الترميز وفك التشفير. في المثال التالي، نوضح كيفية القيام بذلك باستخدام تكوين [`BertModel`] الافتراضي للترميز وتكوين [`BertForCausalLM`] الافتراضي لفك التشفير. + +```python +>>> from transformers import BertConfig, EncoderDecoderConfig, EncoderDecoderModel + +>>> config_encoder = BertConfig() +>>> config_decoder = BertConfig() + +>>> config = EncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder) +>>> model = EncoderDecoderModel(config=config) +``` + +## تهيئة `EncoderDecoderModel` من ترميز مسبق التدريب وفك تشفير مسبق التدريب. + +يمكن تهيئة [`EncoderDecoderModel`] من نقطة تفتيش ترميز مسبقة التدريب ونقطة تفتيش فك تشفير مسبقة التدريب. لاحظ أن أي نموذج ترميز ذاتي مسبق التدريب، مثل BERT، يمكن أن يعمل كترميز، ويمكن استخدام كل من نماذج الترميز الذاتي المسبقة التدريب، مثل BERT، ونماذج اللغة السببية المسبقة التدريب، مثل GPT2، بالإضافة إلى الجزء فك تشفير من نماذج تسلسل إلى تسلسل، مثل فك تشفير BART، كفك تشفير. + +اعتمادًا على البنية التي تختارها كفك تشفير، قد يتم تهيئة طبقات الاهتمام المتقاطع بشكل عشوائي. + +تتطلب تهيئة [`EncoderDecoderModel`] من نقطة تفتيش ترميز مسبقة التدريب ونقطة تفتيش فك تشفير مسبقة التدريب ضبط النموذج على مهمة أسفل البنية، كما هو موضح في [منشور المدونة *Warm-starting-encoder-decoder*](https://huggingface.co/blog/warm-starting-encoder-decoder). + +للقيام بذلك، توفر فئة `EncoderDecoderModel` طريقة [`EncoderDecoderModel.from_encoder_decoder_pretrained`]. + +```python +>>> from transformers import EncoderDecoderModel, BertTokenizer + +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased") +>>> model = EncoderDecoderModel.from_encoder_decoder_pretrained("google-bert/bert-base-uncased", "google-bert/bert-base-uncased") +``` + +## تحميل نقطة تفتيش `EncoderDecoderModel` موجودة والقيام بالاستدلال. + +لتحميل نقاط تفتيش ضبط الدقة لفئة `EncoderDecoderModel`، توفر [`EncoderDecoderModel`] طريقة `from_pretrained(...)` تمامًا مثل أي بنية نموذج أخرى في Transformers. + +للاستدلال، يستخدم المرء طريقة [`generate`]، والتي تسمح بتوليد النص بشكل تلقائي. تدعم هذه الطريقة أشكالًا مختلفة من فك التشفير، مثل الجشع، وبحث الشعاع، وأخذ العينات متعددة الحدود. + +```python +>>> from transformers import AutoTokenizer, EncoderDecoderModel + +>>> # تحميل نموذج تسلسل إلى تسلسل مضبوط الدقة ومحلل الأجزاء المقابلة +>>> model = EncoderDecoderModel.from_pretrained("patrickvonplaten/bert2bert_cnn_daily_mail") +>>> tokenizer = AutoTokenizer.from_pretrained("patrickvonplaten/bert2bert_cnn_daily_mail") + +>>> # لنقم بالاستدلال على قطعة نص طويلة +>>> ARTICLE_TO_SUMMARIZE = ( +... "PG&E stated it scheduled the blackouts in response to forecasts for high winds " +... "amid dry conditions. The aim is to reduce the risk of wildfires. Nearly 800 thousand customers were " +... "scheduled to be affected by the shutoffs which were expected to last through at least midday tomorrow." +... ) +>>> input_ids = tokenizer(ARTICLE_TO_SUMMARIZE, return_tensors="pt").input_ids + +>>> # توليد تلخيص تلقائيًا (يستخدم فك التشفير الجشع بشكل افتراضي) +>>> generated_ids = model.generate(input_ids) +>>> generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +>>> print(generated_text) +nearly 800 thousand customers were affected by the shutoffs. the aim is to reduce the risk of wildfires. nearly 800, 000 customers were expected to be affected by high winds amid dry conditions. pg & e said it scheduled the blackouts to last through at least midday tomorrow. + +``` + +## تحميل نقطة تفتيش PyTorch في `TFEncoderDecoderModel`. + +لا يدعم [`TFEncoderDecoderModel.from_pretrained`] حاليًا تهيئة النموذج من +نقطة تفتيش PyTorch. سيؤدي تمرير `from_pt=True` إلى هذه الطريقة إلى إلقاء استثناء. إذا كانت هناك نقاط تفتيش PyTorch فقط +لنموذج ترميز وفك تشفير معين، فإن الحل البديل هو: + +```python +>>> # حل بديل لتحميل نقطة تفتيش PyTorch +>>> from transformers import EncoderDecoderModel, TFEncoderDecoderModel + +>>> _model = EncoderDecoderModel.from_pretrained("patrickvonplaten/bert2bert-cnn_dailymail-fp16") + +>>> _model.encoder.save_pretrained("./encoder") +>>> _model.decoder.save_pretrained("./decoder") + +>>> model = TFEncoderDecoderModel.from_encoder_decoder_pretrained( +... "./encoder", "./decoder"، encoder_from_pt=True، decoder_from_pt=True +... ) +>>> # هذا فقط لنسخ بعض السمات المحددة لهذا النموذج المحدد. +>>> model.config = _model.config +``` + +## التدريب + +بمجرد إنشاء النموذج، يمكن ضبط دقته مثل BART أو T5 أو أي نموذج ترميز وفك تشفير آخر. + +كما ترون، هناك مدخلان فقط مطلوبان للنموذج من أجل حساب الخسارة: `input_ids` (التي هي +`input_ids` من تسلسل الإدخال المشفر) و`labels` (التي هي +`input_ids` من تسلسل الإخراج المشفر). + +```python +>>> from transformers import BertTokenizer, EncoderDecoderModel + +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased") +>>> model = EncoderDecoderModel.from_encoder_decoder_pretrained("google-bert/bert-base-uncased", "google-bert/bert-base-uncased") + +>>> model.config.decoder_start_token_id = tokenizer.cls_token_id +>>> model.config.pad_token_Multiplier = tokenizer.pad_token_id + +# >>> input_ids = tokenizer( +# ... "يبلغ ارتفاع البرج 324 مترًا (1,063 قدمًا)، أي ما يعادل ارتفاع مبنى مكون من 81 طابقًا، وهو أطول هيكل في باريس. قاعدته مربعة، يبلغ طول كل جانب 125 مترًا (410 قدمًا). خلال بنائه، تجاوز برج إيفل نصب واشنطن التذكاري ليصبح أطول هيكل من صنع الإنسان في العالم، وهو لقب احتفظ به لمدة 41 عامًا حتى اكتمل مبنى كرايسلر في مدينة نيويورك في عام 1930. كان أول هيكل يصل إلى ارتفاع 300 متر. وبسبب إضافة هوائي بث في الجزء العلوي من البرج في عام 1957، فهو الآن أطول من مبنى كرايسلر بـ 5.2 متر (17 قدمًا). باستثناء أجهزة الإرسال، يعد برج إيفل ثاني أطول هيكل قائم بذاته في فرنسا بعد جسر ميلو"، +# ... return_tensors="pt"، +# ... ).input_ids + +# >>> labels = tokenizer( +# ... "تجاوز برج إيفل نصب واشنطن التذكاري ليصبح أطول هيكل في العالم. كان أول هيكل يصل إلى ارتفاع 300 متر في باريس في عام 1930. إنه الآن أطول من مبنى كرايسلر بـ 5.2 متر (17 قدمًا) وهو ثاني أطول هيكل قائم بذاته في باريس.", +# ... return_tensors="pt"، +# ... ).input_ids + +>>> input_ids = tokenizer( +... "The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side.During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler Building by 5.2 metres (17 ft).Excluding transmitters, the Eiffel Tower is the second tallest free-standing structure in France after the Millau Viaduct.", +... return_tensors="pt", +... ).input_ids + +>>> labels = tokenizer( +... "the eiffel tower surpassed the washington monument to become the tallest structure in the world. it was the first structure to reach a height of 300 metres in paris in 1930. it is now taller than the chrysler building by 5. 2 metres ( 17 ft ) and is the second tallest free - standing structure in paris.", +... return_tensors="pt", +... ).input_ids + +>>> # تقوم دالة forward تلقائيًا بإنشاء decoder_input_ids الصحيحة +>>> loss = model(input_ids=input_ids, labels=labels).loss +``` + +[تفاصيل](https://colab.research.google.com/drive/1WIk2bxglElfZewOHboPFNj8H44_VAyKE?usp=sharing#scrollTo=ZwQIEhKOrJpl) حول التدريب. + +تمت المساهمة بهذا النموذج بواسطة [thomwolf](https://github.com/thomwolf). تمت المساهمة في إصدارات TensorFlow وFlax من هذا النموذج +بواسطة [ydshieh](https://github.com/ydshieh). + +## EncoderDecoderConfig + +[[autodoc]] EncoderDecoderConfig + + + + +## EncoderDecoderModel + +[[autodoc]] EncoderDecoderModel + +- forward +- from_encoder_decoder_pretrained + + + + +## TFEncoderDecoderModel + +[[autodoc]] TFEncoderDecoderModel + +- call +- from_encoder_decoder_pretrained + + + + +## FlaxEncoderDecoderModel + +[[autodoc]] FlaxEncoderDecoderModel + +- __call__ +- from_encoder_decoder_pretrained + + + + \ No newline at end of file From 9115ab84f54da2dfcd4a1f4ff7eb50ec85637699 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:11 +0300 Subject: [PATCH 433/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/ernie.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/ernie.md | 107 ++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/source/ar/model_doc/ernie.md diff --git a/docs/source/ar/model_doc/ernie.md b/docs/source/ar/model_doc/ernie.md new file mode 100644 index 00000000000000..05762a17692c5f --- /dev/null +++ b/docs/source/ar/model_doc/ernie.md @@ -0,0 +1,107 @@ +# ERNIE + +## نظرة عامة + +ERNIE هي سلسلة من النماذج القوية التي اقترحتها Baidu، خاصة في المهام الصينية، بما في ذلك [ERNIE1.0](https://arxiv.org/abs/1904.09223)، [ERNIE2.0](https://ojs.aaai.org/index.php/AAAI/article/view/6428)، [ERNIE3.0](https://arxiv.org/abs/2107.02137)، [ERNIE-Gram](https://arxiv.org/abs/2010.12148)، [ERNIE-health](https://arxiv.org/abs/2110.07244)، وغيرها. + +هذه النماذج مساهمة من [nghuyong](https://huggingface.co/nghuyong) ويمكن العثور على الكود الرسمي في [PaddleNLP](https://github.com/PaddlePaddle/PaddleNLP) (في PaddlePaddle). + +### مثال على الاستخدام + +خذ `ernie-1.0-base-zh` كمثال: + +```python +from transformers import AutoTokenizer, AutoModel +tokenizer = AutoTokenizer.from_pretrained("nghuyong/ernie-1.0-base-zh") +model = AutoModel.from_pretrained("nghuyong/ernie-1.0-base-zh") +``` + +### نقاط تفتيش النموذج + +| اسم النموذج | اللغة | الوصف | +| :----: | :----: | :----: | +| ernie-1.0-base-zh | الصينية | Layer:12, Heads:12, Hidden:768 | +| ernie-2.0-base-en | الإنجليزية | Layer:12, Heads:12, Hidden:768 | +| ernie-2.0-large-en | الإنجليزية | Layer:24, Heads:16, Hidden:1024 | +| ernie-3.0-base-zh | الصينية | Layer:12, Heads:12, Hidden:768 | +| ernie-3.0-medium-zh | الصينية | Layer:6, Heads:12, Hidden:768 | +| ernie-3.0-mini-zh | الصينية | Layer:6, Heads:12, Hidden:384 | +| ernie-3.0-micro-zh | الصينية | Layer:4, Heads:12, Hidden:384 | +| ernie-3.0-nano-zh | الصينية | Layer:4, Heads:12, Hidden:312 | +| ernie-health-zh | الصينية | Layer:12, Heads:12, Hidden:768 | +| ernie-gram-zh | الصينية | Layer:12, Heads:12, Hidden:768 | + +يمكنك العثور على جميع النماذج المدعومة من مركز نماذج Huggingface: [huggingface.co/nghuyong](https://huggingface.co/nghuyong)، وتفاصيل النموذج من المستودع الرسمي لـ Paddle: [PaddleNLP](https://paddlenlp.readthedocs.io/zh/latest/model_zoo/transformers/ERNIE/contents.html) و [ERNIE](https://github.com/PaddlePaddle/ERNIE/blob/repro). + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## ErnieConfig + +[[autodoc]] ErnieConfig + +- all + +## مخرجات Ernie المحددة + +[[autodoc]] models.ernie.modeling_ernie.ErnieForPreTrainingOutput + +## ErnieModel + +[[autodoc]] ErnieModel + +- forward + +## ErnieForPreTraining + +[[autodoc]] ErnieForPreTraining + +- forward + +## ErnieForCausalLM + +[[autodoc]] ErnieForCausalLM + +- forward + +## ErnieForMaskedLM + +[[autodoc]] ErnieForMaskedLM + +- forward + +## ErnieForNextSentencePrediction + +[[autodoc]] ErnieForNextSentencePrediction + +- forward + +## ErnieForSequenceClassification + +[[autodoc]] ErnieForSequenceClassification + +- forward + +## ErnieForMultipleChoice + +[[autodoc]] ErnieForMultipleChoice + +- forward + +## ErnieForTokenClassification + +[[autodoc]] ErnieForTokenClassification + +- forward + +## ErnieForQuestionAnswering + +[[autodoc]] ErnieForQuestionAnswering + +- forward \ No newline at end of file From 77ca6529390828481b98f6ee0de38bb754490967 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:13 +0300 Subject: [PATCH 434/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/ernie=5Fm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/ernie_m.md | 79 +++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/source/ar/model_doc/ernie_m.md diff --git a/docs/source/ar/model_doc/ernie_m.md b/docs/source/ar/model_doc/ernie_m.md new file mode 100644 index 00000000000000..3f95780e1194cf --- /dev/null +++ b/docs/source/ar/model_doc/ernie_m.md @@ -0,0 +1,79 @@ +# ErnieM + + +يتم الاحتفاظ بهذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب (Pull Requests) جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + +## نظرة عامة +تم اقتراح نموذج ErnieM في الورقة البحثية [ERNIE-M: Enhanced Multilingual Representation by Aligning Cross-lingual Semantics with Monolingual Corpora](https://arxiv.org/abs/2012.15674) بواسطة Xuan Ouyang و Shuohuan Wang و Chao Pang و Yu Sun و Hao Tian و Hua Wu و Haifeng Wang. + +ملخص الورقة البحثية هو كما يلي: + +أظهرت الدراسات الحديثة أن النماذج متعددة اللغات المُدربة مسبقًا تحقق أداءً مثيرًا للإعجاب في المهام متعددة اللغات التنازلية. وتستفيد هذه التحسينات من تعلم كمية كبيرة من النصوص أحادية اللغة والنصوص المتوازية. وعلى الرغم من الاعتراف العام بأن النصوص المتوازية مهمة لتحسين أداء النموذج، إلا أن الطرق الحالية مقيدة غالبًا بحجم النصوص المتوازية، خاصة بالنسبة للغات منخفضة الموارد. في هذه الورقة، نقترح ERNIE-M، وهي طريقة تدريب جديدة تشجع النموذج على محاذاة تمثيل عدة لغات مع النصوص أحادية اللغة، للتغلب على القيود التي يفرضها حجم النصوص المتوازية على أداء النموذج. وتتمثل رؤيتنا الأساسية في دمج الترجمة من اللغة الأخرى إلى اللغة الأصلية في عملية التدريب المسبق. نقوم بتوليد أزواج من الجمل المتوازية الزائفة على نص أحادي اللغة لتمكين تعلم المحاذاة الدلالية بين اللغات المختلفة، وبالتالي تعزيز النمذجة الدلالية للنماذج متعددة اللغات. وتظهر النتائج التجريبية أن ERNIE-M يتفوق على النماذج متعددة اللغات الحالية ويحقق نتائج جديدة رائدة في مختلف المهام التنازلية متعددة اللغات. + +تمت المساهمة بهذا النموذج من قبل [Susnato Dhar](https://huggingface.co/susnato). يمكن العثور على الشفرة الأصلية [هنا](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/paddlenlp/transformers/ernie_m). + +## نصائح الاستخدام + +- Ernie-M هو نموذج مشابه لـ BERT، وبالتالي فهو عبارة عن مكدس لترميز المحول Transformer Encoder. +- بدلاً من استخدام MaskedLM للمرحلة السابقة للتدريب (كما هو الحال في BERT)، استخدم المؤلفون تقنيتين جديدتين: `Cross-attention Masked Language Modeling` و `Back-translation Masked Language Modeling`. حاليًا، لم يتم تنفيذ هذين الهدفين من أهداف LMHead هنا. +- إنه نموذج لغوي متعدد اللغات. +- لم يتم استخدام التنبؤ بالجملة التالية في عملية التدريب المسبق. + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف العلامات](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## ErnieMConfig + +[[autodoc]] ErnieMConfig + +## ErnieMTokenizer + +[[autodoc]] ErnieMTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## ErnieMModel + +[[autodoc]] ErnieMModel + +- forward + +## ErnieMForSequenceClassification + +[[autodoc]] ErnieMForSequenceClassification + +- forward + +## ErnieMForMultipleChoice + +[[autodoc]] ErnieMForMultipleChoice + +- forward + +## ErnieMForTokenClassification + +[[autodoc]] ErnieMForTokenClassification + +- forward + +## ErnieMForQuestionAnswering + +[[autodoc]] ErnieMForQuestionAnswering + +- forward + +## ErnieMForInformationExtraction + +[[autodoc]] ErnieMForInformationExtraction + +- forward \ No newline at end of file From bec3ce99b37560da7e9c48e3cefc34de5e4415ce Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:15 +0300 Subject: [PATCH 435/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/esm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/esm.md | 125 ++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 docs/source/ar/model_doc/esm.md diff --git a/docs/source/ar/model_doc/esm.md b/docs/source/ar/model_doc/esm.md new file mode 100644 index 00000000000000..2aaeff1b3026b7 --- /dev/null +++ b/docs/source/ar/model_doc/esm.md @@ -0,0 +1,125 @@ +# ESM + +## نظرة عامة + +يوفر هذا الصفحة التعليمات البرمجية وأوزان مُدربة مسبقًا لنماذج لغة البروتين Transformer من فريق Meta AI's Fundamental AI Research، والتي توفر أحدث التقنيات في ESMFold و ESM-2، بالإضافة إلى النماذج التي تم إصدارها سابقًا ESM-1b و ESM-1v. + +تم تقديم نماذج لغة بروتين Transformer في الورقة البحثية [Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences](https://www.pnas.org/content/118/15/e2016239118) بواسطة Alexander Rives، Joshua Meier، Tom Sercu، Siddharth Goyal، Zeming Lin، Jason Liu، Demi Guo، Myle Ott، C. Lawrence Zitnick، Jerry Ma، and Rob Fergus. + +تمت طباعة النسخة الأولى من هذه الورقة مسبقًا في عام 2019](https://www.biorxiv.org/content/10.1101/622803v1?versioned=true). + +يتفوق ESM-2 على جميع نماذج لغة البروتين ذات التسلسل الفردي التي تم اختبارها عبر مجموعة من مهام التنبؤ بالبنية، ويمكّن من التنبؤ بالبنية بدقة الذرة. + +تم إصداره مع الورقة البحثية [Language models of protein sequences at the scale of evolution enable accurate structure prediction](https://doi.org/10.1101/2022.07.20.500902) بواسطة Zeming Lin، Halil Akin، Roshan Rao، Brian Hie، Zhongkai Zhu، Wenting Lu، Allan dos Santos Costa، Maryam Fazel-Zarandi، Tom Sercu، Sal Candido and Alexander Rives. + +تم أيضًا تقديم ESMFold في هذه الورقة. يستخدم رأسًا يمكنه التنبؤ ببنى البروتين المطوية بدقة فائقة. على عكس [AlphaFold2](https://www.nature.com/articles/s41586-021-03819-2)، فإنه يعتمد على embeddings الرموز من جذع نموذج لغة البروتين المُدرب مسبقًا ولا يقوم بخطوة محاذاة تسلسل متعددة (MSA) في وقت الاستدلال، مما يعني أن نقاط تفتيش ESMFold مستقلة تمامًا - لا تتطلب قاعدة بيانات للتسلسلات والبنى البروتينية المعروفة مع أدوات الاستعلام الخارجية المرتبطة بها لإجراء التنبؤات، وهي أسرع بكثير نتيجة لذلك. + +المستخلص من + +"Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences" هو + +*في مجال الذكاء الاصطناعي، أدى الجمع بين الحجم في البيانات وسعة النموذج الذي تمكّنه التعلم غير الخاضع للإشراف إلى تقدم كبير في تعلم التمثيل وتوليد الإحصائيات. في علوم الحياة، من المتوقع أن يوفر النمو في التسلسل بيانات غير مسبوقة حول التنوع التسلسلي الطبيعي. تعد نمذجة لغة البروتين على نطاق التطور خطوة منطقية نحو الذكاء الاصطناعي التنبئي والتوليدي لعلم الأحياء. لتحقيق هذه الغاية، نستخدم التعلم غير الخاضع للإشراف لتدريب نموذج لغة سياقية عميقة على 86 مليار حمض أميني عبر 250 مليون تسلسل بروتيني يغطي التنوع التطوري. يحتوي النموذج الناتج على معلومات حول الخصائص البيولوجية في تمثيلاته. يتم تعلم التمثيلات من بيانات التسلسل وحدها. يتمتع مساحة التمثيل المكتسبة بتنظيم متعدد النطاقات يعكس البنية من مستوى الخصائص الكيميائية الحيوية للأحماض الأمينية إلى التماثل البعيد للبروتينات. يتم ترميز المعلومات حول البنية الثانوية والثالثة في التمثيلات ويمكن تحديدها بواسطة إسقاطات خطية. ينتج تعلم التمثيل ميزات يتم تعميمها عبر مجموعة من التطبيقات، مما يمكّن أحدث التنبؤات الخاضعة للإشراف بتأثير الطفرة والبنية الثانوية وتحسين ميزات أحدث التقنيات للتنبؤ بالاتصال طويل المدى.* + +المستخلص من + +"Language models of protein sequences at the scale of evolution enable accurate structure prediction" هو + +*أظهرت نماذج اللغة الكبيرة مؤخرًا أنها تطور قدرات ناشئة مع الحجم، تتجاوز مطابقة الأنماط لأداء الاستدلال على مستوى أعلى وتوليد الصور والنصوص التي تشبه الحياة. في حين تمت دراسة نماذج اللغة التي تم تدريبها على تسلسلات البروتين على نطاق أصغر، لا يُعرف سوى القليل عن ما تتعلمه عن علم الأحياء أثناء توسيع نطاقها. في هذا العمل، نقوم بتدريب النماذج حتى 15 مليار معلمة، وهي أكبر نماذج لغة البروتين التي تم تقييمها حتى الآن. نجد أنه مع توسيع نطاق النماذج، تتعلم معلومات تمكّن من التنبؤ بالبنية ثلاثية الأبعاد للبروتين بدقة الذرة. نقدم ESMFold للتنبؤ عالي الدقة بالبنية على مستوى الذرة من النهاية إلى النهاية مباشرةً من التسلسل الفردي للبروتين. تتمتع ESMFold بدقة مماثلة لـ AlphaFold2 و RoseTTAFold للتسلسلات ذات الارتباك المنخفض والتي يفهمها نموذج اللغة جيدًا. الاستدلال ESMFold أسرع بعشر مرات من AlphaFold2، مما يمكّن من استكشاف مساحة البنية للبروتينات الميتاجينومية في أطر زمنية عملية.* + +يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/esm) وتم تطويره بواسطة فريق Fundamental AI Research في Meta AI. + +تمت المساهمة بـ ESM-1b و ESM-1v و ESM-2 في huggingface بواسطة [jasonliu](https://huggingface.co/jasonliu) و [Matt](https://huggingface.co/Rocketknight1). + +تمت المساهمة بـ ESMFold في huggingface بواسطة [Matt](https://huggingface.co/Rocketknight1) و [Sylvain](https://huggingface.co/sgugger)، مع خالص الشكر لـ Nikita Smetanin، Roshan Rao، و Tom Sercu لمساعدتهم طوال العملية! + +## نصائح الاستخدام + +- يتم تدريب نماذج ESM بهدف نمذجة اللغة المقنعة (MLM). +- يستخدم منفذ HuggingFace من ESMFold أجزاء من مكتبة [openfold](https://github.com/aqlaboratory/openfold). يتم ترخيص مكتبة `openfold` بموجب ترخيص Apache License 2.0. + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) + +## EsmConfig + +[[autodoc]] EsmConfig + +- all + +## EsmTokenizer + +[[autodoc]] EsmTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + + + + + +## EsmModel + +[[autodoc]] EsmModel + +- forward + +## EsmForMaskedLM + +[[autodoc]] EsmForMaskedLM + +- forward + +## EsmForSequenceClassification + +[[autodoc]] EsmForSequenceClassification + +- forward + +## EsmForTokenClassification + +[[autodoc]] EsmForTokenClassification + +- forward + +## EsmForProteinFolding + +[[autodoc]] EsmForProteinFolding + +- forward + + + + + +## TFEsmModel + +[[autodoc]] TFEsmModel + +- call + +## TFEsmForMaskedLM + +[[autodoc]] TFEsmForMaskedLM + +- call + +## TFEsmForSequenceClassification + +[[autodoc]] TFEsmForSequenceClassification + +- call + +## TFEsmForTokenClassification + +[[autodoc]] TFEsmForTokenClassification + +- call + + + + \ No newline at end of file From 595facaedd31716fcfa328744d24e2f087f3b03f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:17 +0300 Subject: [PATCH 436/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/falcon.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/falcon.md | 55 ++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/source/ar/model_doc/falcon.md diff --git a/docs/source/ar/model_doc/falcon.md b/docs/source/ar/model_doc/falcon.md new file mode 100644 index 00000000000000..ba8d58603b992d --- /dev/null +++ b/docs/source/ar/model_doc/falcon.md @@ -0,0 +1,55 @@ +# Falcon + +## نظرة عامة + +Falcon هي فئة من فك تشفير النماذج السببية التي بناها [TII](https://www.tii.ae/). تم تدريب أكبر نقاط تفتيش Falcon على >=1T من الرموز النصية، مع التركيز بشكل خاص على [RefinedWeb](https://arxiv.org/abs/2306.01116) corpus. وهي متاحة بموجب ترخيص Apache 2.0. + +تم تصميم بنية Falcon بشكل حديث وتمت تهيئتها للتنفيذ، مع دعم الاهتمام متعدد الاستعلامات واهتمام فعال للمتغيرات مثل `FlashAttention`. تتوفر نماذج "base" المدربة فقط كنماذج لغة سببية، بالإضافة إلى نماذج "instruct" التي خضعت لمزيد من الضبط الدقيق. + +تعد نماذج Falcon (اعتبارًا من عام 2023) من أكبر نماذج اللغة مفتوحة المصدر وأكثرها قوة، وتحتل باستمرار مرتبة عالية في [لوحة قيادة OpenLLM](https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard). + +## تحويل نقاط التفتيش المخصصة + + + +تمت إضافة نماذج Falcon في البداية إلى Hugging Face Hub كنقاط تفتيش للرمز المخصص. ومع ذلك، يتم الآن دعم Falcon بالكامل في مكتبة المحولات. إذا قمت بضبط دقيق لنموذج من نقطة تفتيش للرمز المخصص، فإننا نوصي بتحويل نقطة تفتيشك إلى التنسيق الجديد داخل المكتبة، حيث يجب أن يوفر ذلك تحسينات كبيرة في الاستقرار والأداء، خاصة للجيل، بالإضافة إلى إزالة الحاجة إلى استخدام `trust_remote_code=True`! + + + +يمكنك تحويل نقاط تفتيش الرمز المخصص إلى نقاط تفتيش Transformers كاملة باستخدام `convert_custom_code_checkpoint.py` النصي الموجود في [دليل نموذج Falcon](https://github.com/huggingface/transformers/tree/main/src/transformers/models/falcon) في مكتبة المحولات. لاستخدام هذا البرنامج النصي، ما عليك سوى استدعائه باستخدام `python convert_custom_code_checkpoint.py --checkpoint_dir my_model`. سيؤدي هذا إلى تحويل نقطة التفتيش الخاصة بك في المكان، ويمكنك تحميلها على الفور من الدليل بعد ذلك باستخدام `from_pretrained()`. إذا لم يتم تحميل نموذجك إلى Hub، فنحن نوصي بعمل نسخة احتياطية قبل محاولة التحويل، تحسبا لأي طارئ! + +## FalconConfig + +[[autodoc]] FalconConfig + +- all + +## FalconModel + +[[autodoc]] FalconModel + +- forword + +## FalconForCausalLM + +[[autodoc]] FalconForCausalLM + +- forword + +## FalconForSequenceClassification + +[[autodoc]] FalconForSequenceClassification + +- forword + +## FalconForTokenClassification + +[[autodoc]] FalconForTokenClassification + +- forword + +## FalconForQuestionAnswering + +[[autodoc]] FalconForQuestionAnswering + +- forword \ No newline at end of file From b79e3c6c40bdca0a1b4b92aff60c09a691c65e0a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:18 +0300 Subject: [PATCH 437/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/fastspeech2=5Fconformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/fastspeech2_conformer.md | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 docs/source/ar/model_doc/fastspeech2_conformer.md diff --git a/docs/source/ar/model_doc/fastspeech2_conformer.md b/docs/source/ar/model_doc/fastspeech2_conformer.md new file mode 100644 index 00000000000000..50b1952bab44fc --- /dev/null +++ b/docs/source/ar/model_doc/fastspeech2_conformer.md @@ -0,0 +1,104 @@ +# FastSpeech2Conformer + +## نظرة عامة +تم اقتراح نموذج FastSpeech2Conformer في الورقة البحثية بعنوان "التطورات الحديثة في حزمة Espnet المدعومة بواسطة Conformer" بواسطة Pengcheng Guo وآخرون. ويهدف النموذج إلى تحسين جودة الصوت في أنظمة تركيب الكلام غير المعتمدة على النماذج الذاتية (non-autoregressive text-to-speech)، وذلك من خلال معالجة بعض العيوب الموجودة في النموذج السابق FastSpeech. + +يوفر الملخص من الورقة الأصلية لـ FastSpeech2 السياق التالي: + +> تواجه نماذج تركيب الكلام غير المعتمدة على النماذج الذاتية مشكلة الخريطة من واحد إلى متعدد، حيث يمكن أن تتوافق عدة متغيرات من الكلام مع نفس النص. وعلى الرغم من أن نموذج FastSpeech يعالج هذه المشكلة من خلال استخدام نموذج معلم ذاتي لتوفير معلومات إضافية، إلا أنه يعاني من بعض العيوب مثل تعقيد وطول عملية التدريب، وعدم دقة كافية في استخراج المدة، وفقدان المعلومات في الميلات المقطعية المقطرة. يقدم FastSpeech 2 تحسينات من خلال التدريب المباشر باستخدام الهدف الحقيقي بدلاً من الإخراج المبسط من المعلم، وإدخال معلومات متغيرة إضافية مثل الطبقة والنطاق ومدة أكثر دقة. + +تمت المساهمة في هذا النموذج من قبل كونور هندرسون، ويمكن العثور على الكود الأصلي على مستودع Espnet على GitHub. + +## 🤗 تصميم النموذج +تم تنفيذ البنية العامة لـ FastSpeech2 مع فك تشفير Mel-spectrogram، وتم استبدال كتل المحول التقليدية بكتل Conformer كما هو الحال في مكتبة ESPnet. + +#### تصميم نموذج FastSpeech2 +![تصميم نموذج FastSpeech2](https://www.microsoft.com/en-us/research/uploads/prod/2021/04/fastspeech2-1.png) + +#### كتل Conformer +![كتل Conformer](https://www.researchgate.net/profile/Hirofumi-Inaguma-2/publication/344911155/figure/fig2/AS:951455406108673@1603856054097/An-overview-of-Conformer-block.png) + +#### وحدة التجزئة +![وحدة التجزئة](https://d3i71xaburhd42.cloudfront.net/8809d0732f6147d4ad9218c8f9b20227c837a746/2-Figure1-1.png) + +## 🤗 استخدام مكتبة Transformers +يمكنك تشغيل FastSpeech2Conformer محليًا باستخدام مكتبة 🤗 Transformers. فيما يلي الخطوات: + +1. قم بتثبيت مكتبة 🤗 Transformers ومكتبة g2p-en: +```bash +pip install --upgrade pip +pip install --upgrade transformers g2p-en +``` + +2. قم بتشغيل الاستنتاج باستخدام كود النمذجة في المكتبة مع النموذج وHiFiGan بشكل منفصل: +```python +from transformers import FastSpeech2ConformerTokenizer, FastSpeech2ConformerModel, FastSpeech2ConformerHifiGan +import soundfile as sf + +tokenizer = FastSpeech2ConformerTokenizer.from_pretrained("espnet/fastspeech2_conformer") +inputs = tokenizer("Hello, my dog is cute.", return_tensors="pt") +input_ids = inputs["input_ids"] + +model = FastSpeech2ConformerModel.from_pretrained("espnet/fastspeech2_conformer") +output_dict = model(input_ids, return_dict=True) +spectrogram = output_dict["spectrogram"] + +hifigan = FastSpeech2ConformerHifiGan.from_pretrained("espnet/fastspeech2_conformer_hifigan") +waveform = hifigan(spectrogram) + +sf.write("speech.wav", waveform.squeeze().detach().numpy(), samplerate=22050) +``` + +3. قم بتشغيل الاستنتاج باستخدام كود النمذجة في المكتبة مع النموذج وHiFiGan مجتمعين: +```python +from transformers import FastSpeech2ConformerTokenizer, FastSpeech2ConformerWithHifiGan +import soundfile as sf + +tokenizer = FastSpeech2ConformerTokenizer.from_pretrained("espnet/fastspeech2_conformer") +inputs = tokenizer("Hello, my dog is cute.", return_tensors="pt") +input_ids = inputs["input_ids"] + +model = FastSpeech2ConformerWithHifiGan.from_pretrained("espnet/fastspeech2_conformer_with_hifigan") +output_dict = model(input_ids, return_dict=True) +waveform = output_dict["waveform"] + +sf.write("speech.wav", waveform.squeeze().detach().numpy(), samplerate=22050) +``` + +4. قم بتشغيل الاستنتاج باستخدام خط أنابيب وتحديد برنامج ترميز الصوت الذي تريد استخدامه: +```python +from transformers import pipeline, FastSpeech2ConformerHifiGan +import soundfile as sf + +vocoder = FastSpeech2ConformerHifiGan.from_pretrained("espnet/fastspeech2_conformer_hifigan") +synthesiser = pipeline(model="espnet/fastspeech2_conformer", vocoder=vocoder) + +speech = synthesiser("Hello, my dog is cooler than you!") + +sf.write("speech.wav", speech["audio"].squeeze(), samplerate=speech["sampling_rate"]) +``` + +## FastSpeech2ConformerConfig + +## FastSpeech2ConformerHifiGanConfig + +## FastSpeech2ConformerWithHifiGanConfig + +## FastSpeech2ConformerTokenizer + +- __call__ +- save_vocabulary +- decode +- batch_decode + +## FastSpeech2ConformerModel + +- forward + +## FastSpeech2ConformerHifiGan + +- forward + +## FastSpeech2ConformerWithHifiGan + +- forward \ No newline at end of file From 21bb461e877ddb7a8b52d68bdd9f0cb5f6f67418 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:20 +0300 Subject: [PATCH 438/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/flan-t5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/flan-t5.md | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/source/ar/model_doc/flan-t5.md diff --git a/docs/source/ar/model_doc/flan-t5.md b/docs/source/ar/model_doc/flan-t5.md new file mode 100644 index 00000000000000..bab81271a27e07 --- /dev/null +++ b/docs/source/ar/model_doc/flan-t5.md @@ -0,0 +1,34 @@ +# FLAN-T5 + +## نظرة عامة +تم إصدار FLAN-T5 في الورقة البحثية [Scaling Instruction-Finetuned Language Models](https://arxiv.org/pdf/2210.11416.pdf) - وهي نسخة محسنة من T5 تم ضبطها بشكل دقيق في مزيج من المهام. + +يمكن استخدام أوزان FLAN-T5 مباشرة دون ضبط نموذج الدقة: + +```python +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small") +>>> tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small") + +>>> inputs = tokenizer("A step by step recipe to make bolognese pasta:", return_tensors="pt") +>>> outputs = model.generate(**inputs) +>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['Pour a cup of bolognese into a large bowl and add the pasta'] +``` + +يتضمن FLAN-T5 التحسينات نفسها الموجودة في الإصدار T5 1.1 (راجع [هنا](https://huggingface.co/docs/transformers/model_doc/t5v1.1) للاطلاع على التفاصيل الكاملة لتحسينات النموذج). + +أصدرت Google المتغيرات التالية: + +- [google/flan-t5-small](https://huggingface.co/google/flan-t5-small) +- [google/flan-t5-base](https://huggingface.co/google/flan-t5-base) +- [google/flan-t5-large](https://huggingface.co/google/flan-t5-large) +- [google/flan-t5-xl](https://huggingface.co/google/flan-t5-xl) +- [google/flan-t5-xxl](https://huggingface.co/google/flan-t5-xxl). + +يمكن العثور على نقاط التفتيش الأصلية [هنا](https://github.com/google-research/t5x/blob/main/docs/models.md#flan-t5-checkpoints). + + +راجع [صفحة وثائق T5](t5) للحصول على جميع مراجع API وأمثلة التعليمات البرمجية ومفكرات Jupyter. لمزيد من التفاصيل حول تدريب وتقييم FLAN-T5، راجع بطاقة النموذج. + \ No newline at end of file From 4a13f0e1270ca4db5e0f92c50297697c441af862 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:22 +0300 Subject: [PATCH 439/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/flan-ul2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/flan-ul2.md | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/source/ar/model_doc/flan-ul2.md diff --git a/docs/source/ar/model_doc/flan-ul2.md b/docs/source/ar/model_doc/flan-ul2.md new file mode 100644 index 00000000000000..3b0b755d9cfdf5 --- /dev/null +++ b/docs/source/ar/model_doc/flan-ul2.md @@ -0,0 +1,39 @@ +# FLAN-UL2 + +## نظرة عامة + +Flan-UL2 هو نموذج ترميز وفك ترميز يعتمد على بنية T5. يستخدم نفس تكوين نموذج [UL2](ul2) الذي تم إصداره في وقت سابق من العام الماضي. + +تم ضبطه بدقة باستخدام ضبط "Flan" وجمع البيانات. وعلى غرار `Flan-T5`، يمكن استخدام أوزان FLAN-UL2 مباشرة دون ضبط دقيق للنموذج: + +وفقًا للمدونة الأصلية، فيما يلي التحسينات الملحوظة: + +- تم تدريب نموذج UL2 الأصلي فقط باستخدام حقل استقبال يبلغ 512، مما جعله غير مثالي لـ N-shot prompting حيث N كبير. +- تستخدم نقطة تفتيش Flan-UL2 حقل استقبال يبلغ 2048 مما يجعلها أكثر ملاءمة للتعلم القائم على السياق القليل. +- كان لنموذج UL2 الأصلي أيضًا رموز تبديل الوضع التي كانت إلزامية إلى حد ما للحصول على أداء جيد. ومع ذلك، كانت مزعجة بعض الشيء لأنها تتطلب في كثير من الأحيان بعض التغييرات أثناء الاستدلال أو الضبط الدقيق. في هذا التحديث/التغيير، نواصل تدريب UL2 20B لمدة 100 ألف خطوة إضافية (بمجموعة صغيرة) لنسيان "رموز الوضع" قبل تطبيق ضبط تعليمات Flan. لا تتطلب نقطة تفتيش Flan-UL2 هذه رموز الوضع بعد الآن. + +أصدرت Google المتغيرات التالية: + +يمكن العثور على نقاط التفتيش الأصلية [هنا](https://github.com/google-research/t5x/blob/main/docs/models.md#flan-ul2-checkpoints). + +## التشغيل على أجهزة ذات موارد منخفضة + +النموذج ثقيل للغاية (~40 جيجابايت في نصف الدقة)، لذا إذا كنت تريد تشغيل النموذج فقط، فتأكد من تحميل نموذجك في 8 بت، واستخدم `device_map="auto"` للتأكد من عدم وجود أي مشكلة في الذاكرة! + +```python +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-ul2", load_in_8bit=True, device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("google/flan-ul2") + +>>> inputs = tokenizer("A step by step recipe to make bolognese pasta:", return_tensors="pt") +>>> outputs = model.generate(**inputs) +>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['In a large skillet, brown the ground beef and onion over medium heat. Add the garlic'] +``` + + + +راجع صفحة وثائق T5 للرجوع إلى API والنصائح وأمثلة التعليمات البرمجية ومفكرات Jupyter. + + \ No newline at end of file From 41acef998ecf34a966e4d1d10cd73b4c806e6495 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:24 +0300 Subject: [PATCH 440/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/flaubert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/flaubert.md | 119 +++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 docs/source/ar/model_doc/flaubert.md diff --git a/docs/source/ar/model_doc/flaubert.md b/docs/source/ar/model_doc/flaubert.md new file mode 100644 index 00000000000000..97efa7caf2f2eb --- /dev/null +++ b/docs/source/ar/model_doc/flaubert.md @@ -0,0 +1,119 @@ +# FlauBERT + +## نظرة عامة + +اقترح نموذج FlauBERT في الورقة البحثية [FlauBERT: Unsupervised Language Model Pre-training for French](https://arxiv.org/abs/1912.05372) بواسطة هانج لي وآخرون. إنه نموذج محول تم تدريبه مسبقًا باستخدام هدف نمذجة اللغة المقنعة (MLM) (مثل BERT). + +وملخص الورقة هو كما يلي: + +* أصبحت نماذج اللغة خطوة أساسية لتحقيق نتائج متقدمة في العديد من مهام معالجة اللغات الطبيعية المختلفة. من خلال الاستفادة من الكمية الهائلة من النصوص غير الموسومة المتاحة الآن، توفر هذه النماذج طريقة فعالة لتدريب التمثيلات الكلامية المستمرة التي يمكن ضبطها الدقيق لمهام تالية، إلى جانب سياقها على مستوى الجملة. وقد تم إثبات ذلك على نطاق واسع للغة الإنجليزية باستخدام التمثيلات السياقية (Dai and Le, 2015; Peters et al., 2018; Howard and Ruder, 2018; Radford et al., 2018; Devlin et al., 2019; Yang et al., 2019b). في هذه الورقة، نقدم ونشارك FlauBERT، وهو نموذج تم تعلمه على مجموعة بيانات فرنسية كبيرة ومتنوعة للغاية. تم تدريب نماذج ذات أحجام مختلفة باستخدام الحاسوب العملاق الجديد CNRS (المركز الوطني الفرنسي للبحث العلمي) Jean Zay. نطبق نماذج اللغة الفرنسية الخاصة بنا على مهام NLP متنوعة (تصنيف النصوص، إعادة الصياغة، الاستدلال اللغوي الطبيعي، التحليل، تحديد المعنى الدلالي للكلمة) ونظهر أنها في معظم الوقت تتفوق على أساليب التدريب الأخرى. يتم مشاركة إصدارات مختلفة من FlauBERT وكذلك بروتوكول تقييم موحد لمهام المصب، يسمى FLUE (تقييم فهم اللغة الفرنسية)، مع مجتمع البحث لإجراء المزيد من التجارب القابلة للتكرار في معالجة اللغة الطبيعية الفرنسية. + +تمت المساهمة بهذا النموذج من قبل [formiel](https://huggingface.co/formiel). يمكن العثور على الكود الأصلي [هنا](https://github.com/getalp/Flaubert). + +النصائح: + +- مثل RoBERTa، بدون التنبؤ بترتيب الجمل (لذلك تم تدريبه فقط على هدف MLM). + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## FlaubertConfig + +[[autodoc]] FlaubertConfig + +## FlaubertTokenizer + +[[autodoc]] FlaubertTokenizer + + + + +## FlaubertModel + +[[autodoc]] FlaubertModel + +- forward + +## FlaubertWithLMHeadModel + +[[autodoc]] FlaubertWithLMHeadModel + +- forward + +## FlaubertForSequenceClassification + +[[autodoc]] FlaubertForSequenceClassification + +- forward + +## FlaubertForMultipleChoice + +[[autodoc]] FlaubertForMultipleChoice + +- forward + +## FlaubertForTokenClassification + +[[autodoc]] FlaubertForTokenClassification + +- forward + +## FlaubertForQuestionAnsweringSimple + +[[autodoc]] FlaubertForQuestionAnsweringSimple + +- forward + +## FlaubertForQuestionAnswering + +[[autodoc]] FlaubertForQuestionAnswering + +- forward + + + + +## TFFlaubertModel + +[[autodoc]] TFFlaubertModel + +- call + +## TFFlaubertWithLMHeadModel + +[[autodoc]] TFFlaubertWithLMHeadModel + +- call + +## TFFlaubertForSequenceClassification + +[[autodoc]] TFFlaubertForSequenceClassification + +- call + +## TFFlaubertForMultipleChoice + +[[autodoc]] TFFlaubertForMultipleChoice + +- call + +## TFFlaubertForTokenClassification + +[[autodoc]] TFFlaubertForTokenClassification + +- call + +## TFFlaubertForQuestionAnsweringSimple + + +[[autodoc]] TFFlaubertForQuestionAnsweringSimple + +- call + + + \ No newline at end of file From 101d2644eda248daf4da1317c84610c0fdb5d621 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:25 +0300 Subject: [PATCH 441/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/flava.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/flava.md | 90 +++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 docs/source/ar/model_doc/flava.md diff --git a/docs/source/ar/model_doc/flava.md b/docs/source/ar/model_doc/flava.md new file mode 100644 index 00000000000000..d57b4fc82c01ad --- /dev/null +++ b/docs/source/ar/model_doc/flava.md @@ -0,0 +1,90 @@ +# FLAVA + +## نظرة عامة + +اقترح نموذج FLAVA في [FLAVA: A Foundational Language And Vision Alignment Model](https://arxiv.org/abs/2112.04482) بواسطة Amanpreet Singh، Ronghang Hu، Vedanuj Goswami، Guillaume Couairon، Wojciech Galuba، Marcus Rohrbach، و Douwe Kiela وتم قبوله في مؤتمر CVPR 2022. + +تهدف هذه الورقة إلى إنشاء نموذج أساس موحد واحد يمكنه العمل عبر الرؤية واللغة، بالإضافة إلى المهام متعددة الوسائط للرؤية واللغة. + +الملخص من الورقة هو ما يلي: + +*تعتمد أحدث نماذج الرؤية والرؤية واللغة على التدريب اللغوي على نطاق واسع للحصول على أداء جيد في مجموعة متنوعة من المهام اللاحقة. بشكل عام، تكون هذه النماذج غالبًا إما متعددة الوسائط (اندماج سابق) أو متعددة الوسائط ولكن ليس كلاهما؛ وغالبًا ما تستهدف طرائق أو مهام محددة فقط. سيكون الاتجاه الواعد هو استخدام نموذج شامل عالمي واحد، باعتباره "أساسًا"، يستهدف جميع الطرائق في نفس الوقت - يجب أن يكون النموذج الأساسي الحقيقي للرؤية واللغة جيدًا في مهام الرؤية ومهام اللغة، والمهام متعددة الوسائط للرؤية واللغة. نقدم FLAVA كنموذج من هذا القبيل ونظهر أداءً رائعًا في مجموعة واسعة من 35 مهمة تشمل هذه الطرائق المستهدفة.* + +تمت المساهمة بهذا النموذج من قبل [aps](https://huggingface.co/aps). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/multimodal/tree/main/examples/flava). + +## FlavaConfig + +[[autodoc]] FlavaConfig + +## FlavaTextConfig + +[[autodoc]] FlavaTextConfig + +## FlavaImageConfig + +[[autodoc]] FlavaImageConfig + +## FlavaMultimodalConfig + +[[autodoc]] FlavaMultimodalConfig + +## FlavaImageCodebookConfig + +[[autodoc]] FlavaImageCodebookConfig + +## FlavaProcessor + +[[autodoc]] FlavaProcessor + +## FlavaFeatureExtractor + +[[autodoc]] FlavaFeatureExtractor + +## FlavaImageProcessor + +- preprocess + +## FlavaForPreTraining + +[[autodoc]] FlavaForPreTraining + +- forward + +## FlavaModel + +[[autodoc]] FlavaModel + +- forward + +- get_text_features + +- get_image_features + +## FlavaImageCodebook + +[[autodoc]] FlavaImageCodebook + +- forward + +- get_codebook_indices + +- get_codebook_probs + +## FlavaTextModel + +[[autodoc]] FlavaTextModel + +- forward + +## FlavaImageModel + +[[autodoc]] FlavaImageModel + + +- forward + +## FlavaMultimodalModel + +[[autodoc]] FlavaMultimodalModel + +- forward \ No newline at end of file From 7bffdb781157f75278373a4027739b139656e110 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:27 +0300 Subject: [PATCH 442/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/fnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/fnet.md | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/fnet.md diff --git a/docs/source/ar/model_doc/fnet.md b/docs/source/ar/model_doc/fnet.md new file mode 100644 index 00000000000000..9c231db93696ae --- /dev/null +++ b/docs/source/ar/model_doc/fnet.md @@ -0,0 +1,83 @@ +# FNet + +## نظرة عامة +اقترح نموذج FNet في [FNet: Mixing Tokens with Fourier Transforms](https://arxiv.org/abs/2105.03824) بواسطة James Lee-Thorp و Joshua Ainslie و Ilya Eckstein و Santiago Ontanon. يستبدل النموذج طبقة self-attention في نموذج BERT بتحويل فورييه الذي يعيد فقط الأجزاء الحقيقية من التحويل. النموذج أسرع بكثير من نموذج BERT لأنه يحتوي على عدد أقل من المعلمات وأكثر كفاءة في استخدام الذاكرة. يحقق النموذج حوالي 92-97% من دقة نظرائه BERT على معيار GLUE، ويتدرب بشكل أسرع بكثير من نموذج BERT. الملخص من الورقة هو كما يلي: + +*نحن نبين أن هندسات ترميز المحول يمكن تسريعها، مع تكاليف دقة محدودة، عن طريق استبدال طبقات فرعية للاهتمام الذاتي بتحويلات خطية بسيطة "تمزج" رموز الإدخال. تثبت هذه الخلاطات الخطية، إلى جانب غير الخطية القياسية في الطبقات التغذوية الأمامية، كفاءتها في نمذجة العلاقات الدلالية في العديد من مهام تصنيف النصوص. والأكثر مفاجأة، أننا نجد أن استبدال الطبقة الفرعية للاهتمام الذاتي في ترميز المحول بتحويل فورييه قياسي وغير معلم يحقق 92-97% من دقة نظرائه BERT على معيار GLUE، ولكنه يتدرب بنسبة 80% أسرع على وحدات معالجة الرسوميات (GPUs) وبنسبة 70% أسرع على وحدات معالجة الدوال (TPUs) عند أطوال الإدخال القياسية 512. عند أطوال الإدخال الأطول، يكون نموذج FNet الخاص بنا أسرع بكثير: عند مقارنته بالمحولات "الفعالة" على معيار Long Range Arena، يطابق FNet دقة أكثر النماذج دقة، بينما يتفوق على أسرع النماذج عبر جميع أطوال التسلسل على وحدات معالجة الرسوميات (وعبر أطوال أقصر نسبيًا على وحدات معالجة الدوال). وأخيرًا، يتميز FNet ببصمة خفيفة الوزن في الذاكرة وكفاءة خاصة عند أحجام النماذج الصغيرة؛ بالنسبة لميزانية سرعة ودقة ثابتة، تفوق نماذج FNet الصغيرة نظرائها من المحولات.* + +تمت المساهمة بهذا النموذج من قبل [gchhablani](https://huggingface.co/gchhablani). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/google-research/tree/master/f_net). + +## نصائح الاستخدام +تم تدريب النموذج بدون قناع اهتمام لأنه يعتمد على تحويل فورييه. تم تدريب النموذج بطول تسلسل أقصاه 512 والذي يتضمن رموز الحشو. وبالتالي، يوصى بشدة باستخدام نفس الطول الأقصى للتسلسل للضبط الدقيق والاستنتاج. + +## الموارد +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## FNetConfig + +[[autodoc]] FNetConfig + +## FNetTokenizer + +[[autodoc]] FNetTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## FNetTokenizerFast + +[[autodoc]] FNetTokenizerFast + +## FNetModel + +[[autodoc]] FNetModel + +- forward + +## FNetForPreTraining + +[[autodoc]] FNetForPreTraining + +- forward + +## FNetForMaskedLM + +[[autodoc]] FNetForMaskedLM + +- forward + +## FNetForNextSentencePrediction + +[[autodoc]] FNetForNextSentencePrediction + +- forward + +## FNetForSequenceClassification + +[[autodoc]] FNetForSequenceClassification + +- forward + +## FNetForMultipleChoice + +[[autodoc]] FNetForMultipleChoice + +- forward + +## FNetForTokenClassification + +[[autodoc]] FNetForTokenClassification + +- forward + +## FNetForQuestionAnswering + +[[autodoc]] FNetForQuestionAnswering + +- forward \ No newline at end of file From 5a8f67b6d7345ee77c6461b7afc53fcff677244e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:29 +0300 Subject: [PATCH 443/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/focalnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/focalnet.md | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/source/ar/model_doc/focalnet.md diff --git a/docs/source/ar/model_doc/focalnet.md b/docs/source/ar/model_doc/focalnet.md new file mode 100644 index 00000000000000..4f0455ee43ff76 --- /dev/null +++ b/docs/source/ar/model_doc/focalnet.md @@ -0,0 +1,39 @@ +# FocalNet + +## نظرة عامة + +اقترح نموذج FocalNet في ورقة "Focal Modulation Networks" من قبل Jianwei Yang و Chunyuan Li و Xiyang Dai و Lu Yuan و Jianfeng Gao. + +يستبدل FocalNets تمامًا آلية التحويل الذاتي (المستخدمة في نماذج مثل [ViT](vit) و [Swin](swin)) بآلية تعديل بؤري لنمذجة تفاعلات الرموز في الرؤية. + +يدعي المؤلفون أن FocalNets تتفوق على النماذج المستندة إلى التحويل الذاتي بتكاليف حسابية مماثلة في مهام تصنيف الصور وكشف الأشياء والتجزئة. + +الملخص من الورقة هو ما يلي: + +*نقترح شبكات التعديل البؤري (FocalNets اختصارًا)، حيث يتم استبدال التحويل الذاتي (SA) تمامًا بآلية تعديل بؤري لنمذجة تفاعلات الرموز في الرؤية. يتكون التعديل البؤري من ثلاثة مكونات: (1) السياق الهرمي، الذي يتم تنفيذه باستخدام مكدس من طبقات التجزئة المجمعة، لترميز السياقات المرئية من النطاقات القصيرة إلى الطويلة، (2) التجميع المحكوم لجمع السياقات بشكل انتقائي لكل رمز استعلام بناءً على محتواه، و (3) التعديل العنصري أو التحول المائل لحقن السياق المجمع في الاستعلام. تُظهر التجارب المستفيضة أن FocalNets تتفوق على نظيراتها الرائدة في مجال التحويل الذاتي (مثل Swin و Focal Transformers) بتكاليف حسابية مماثلة في مهام تصنيف الصور وكشف الأشياء والتجزئة. على وجه التحديد، تحقق FocalNets بحجم صغير وقياسي 82.3٪ و 83.9٪ من الدقة العليا على ImageNet-1K. بعد التدريب المسبق على ImageNet-22K في دقة 224، فإنه يحقق 86.5٪ و 87.3٪ من الدقة العليا عند ضبط دقة 224 و 384، على التوالي. عند نقلها إلى مهام المصب، تُظهر FocalNets تفوقًا واضحًا. بالنسبة لكشف الأشياء باستخدام Mask R-CNN، تتفوق FocalNet base المدربة على 1x على نظيرتها Swin بمقدار 2.1 نقطة وتتفوق بالفعل على Swin المدربة على جدول 3x (49.0 مقابل 48.5). بالنسبة للتجزئة الدلالية باستخدام UPerNet، تتفوق FocalNet base ذات المقياس الفردي على Swin بمقدار 2.4، وتتغلب على Swin في المقياس المتعدد (50.5 مقابل 49.7). باستخدام FocalNet كبيرة و Mask2former، نحقق 58.5 mIoU لتجزئة ADE20K الدلالية، و 57.9 PQ لتجزئة COCO Panoptic. باستخدام FocalNet كبيرة و DINO، حققنا 64.3 و 64.4 mAP على COCO minival و test-dev، على التوالي، مما يحدد حالة جديدة من الفن على رأس نماذج أكبر بكثير تعتمد على الانتباه مثل Swinv2-G و BEIT-3.* + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/FocalNet). + +## FocalNetConfig + +[[autodoc]] FocalNetConfig + +## FocalNetModel + +[[autodoc]] FocalNetModel + +- forward + +## FocalNetForMaskedImageModeling + +[[autodoc]] FocalNetForMaskedImageModeling + +- forward + +## FocalNetForImageClassification + +[[autodoc]] FocalNetForImageClassification + +- forward \ No newline at end of file From c7b69615c19719d5a5eaaab78e1e138a9cce99e1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:31 +0300 Subject: [PATCH 444/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/fsmt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/fsmt.md | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/source/ar/model_doc/fsmt.md diff --git a/docs/source/ar/model_doc/fsmt.md b/docs/source/ar/model_doc/fsmt.md new file mode 100644 index 00000000000000..36b9a006bba808 --- /dev/null +++ b/docs/source/ar/model_doc/fsmt.md @@ -0,0 +1,40 @@ +# FSMT + +## نظرة عامة + +تم تقديم نماذج FSMT (FairSeq Machine Translation) في [Facebook FAIR's WMT19 News Translation Task Submission](https://arxiv.org/abs/1907.06616) بواسطة Nathan Ng و Kyra Yee و Alexei Baevski و Myle Ott و Michael Auli و Sergey Edunov. + +ملخص الورقة هو كما يلي: + +*تصف هذه الورقة مشاركة Facebook FAIR في مسابقة WMT19 للترجمة الإخبارية. نشارك في زوجين لغويين وأربعة اتجاهات لغوية، الإنجليزية <-> الألمانية والإنجليزية <-> الروسية. وبناءً على مشاركتنا في العام الماضي، فإن أنظمتنا الأساسية هي نماذج محول كبيرة تعتمد على BPE تم تدريبها باستخدام مجموعة أدوات نمذجة Fairseq والتي تعتمد على ترجمات عكسية تمت معاينتها. وفي هذا العام، نجري تجارب على مخططات مختلفة لتصفية بيانات النصوص المتوازية، بالإضافة إلى إضافة بيانات مترجمة عكسياً تمت تصفيتها. كما نقوم بتجميع وتعديل دقيق لنماذجنا على بيانات خاصة بالمجال، ثم نقوم بفك الترميز باستخدام إعادة ترتيب نموذج القناة الصاخبة. وقد احتلت مشاركاتنا المرتبة الأولى في جميع الاتجاهات الأربعة للحملة التقييمية البشرية. وفي اتجاه En->De، تفوق نظامنا بشكل كبير على الأنظمة الأخرى والترجمات البشرية. ويحسن هذا النظام من مشاركتنا في WMT'18 بمقدار 4.5 نقاط BLEU.* + +تمت المساهمة بهذا النموذج من قبل [stas](https://huggingface.co/stas). يمكن العثور على الكود الأصلي [هنا](https://github.com/pytorch/fairseq/tree/master/examples/wmt19). + +## ملاحظات التنفيذ + +- يستخدم FSMT أزواج مفردات المصدر والهدف التي لا يتم دمجها في واحدة. كما أنه لا يشارك رموز التعلم. تشبه طريقة تمييزه إلى حد كبير [`XLMTokenizer`] ويتم اشتقاق النموذج الرئيسي من [`BartModel`]. + +## FSMTConfig + +[[autodoc]] FSMTConfig + +## FSMTTokenizer + +[[autodoc]] FSMTTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## FSMTModel + +[[autodoc]] FSMTModel + +- forward + +## FSMTForConditionalGeneration + +[[autodoc]] FSMTForConditionalGeneration + +- forward \ No newline at end of file From f56b77669fdb0000687715210860b405e38126ca Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:32 +0300 Subject: [PATCH 445/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/funnel.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/funnel.md | 155 +++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 docs/source/ar/model_doc/funnel.md diff --git a/docs/source/ar/model_doc/funnel.md b/docs/source/ar/model_doc/funnel.md new file mode 100644 index 00000000000000..209b5ff64357c0 --- /dev/null +++ b/docs/source/ar/model_doc/funnel.md @@ -0,0 +1,155 @@ +# Funnel Transformer + +## نظرة عامة + +اقتُرح نموذج Funnel Transformer في الورقة البحثية [Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing](https://arxiv.org/abs/2006.03236). وهو نموذج تحويل ثنائي الاتجاه، مثل BERT، ولكن مع عملية تجميع (Pooling) بعد كل كتلة من الطبقات، تشبه إلى حد ما الشبكات العصبية التلافيفية التقليدية (CNN) في رؤية الكمبيوتر. + +وملخص الورقة البحثية هو كما يلي: + +*مع نجاح اللغة في مرحلة ما قبل التدريب، من المرغوب فيه للغاية تطوير هندسات أكثر كفاءة وقابلة للتطوير بشكل جيد يمكنها استغلال البيانات غير المُعَلَّمَة الوفيرة بتكلفة أقل. ولتحسين الكفاءة، ندرس التكرار المُهْمَل إلى حد كبير في الحفاظ على عرض كامل على مستوى الرمز، خاصة بالنسبة للمهام التي تتطلب فقط عرضًا أحادي المتجه للتسلسل. وبناءً على هذا الحدس، نقترح Funnel-Transformer الذي يضغط تدريجيًا تسلسل حالات المخفية إلى تسلسل أقصر، وبالتالي يقلل تكلفة الحساب. والأهم من ذلك، من خلال إعادة استثمار FLOPs المحفوظة من تقليل الطول في بناء نموذج أعمق أو أوسع، فإننا نحسن بشكل أكبر سعة النموذج. بالإضافة إلى ذلك، ولأداء تنبؤات على مستوى الرمز كما هو مطلوب من قبل أهداف ما قبل التدريب الشائعة، يمكن لـ Funnel-Transformer استعادة تمثيل عميق لكل رمز من التسلسل المخفي المختزل عبر فك الترميز. ومن الناحية التجريبية، وباستخدام عدد مماثل أو أقل من FLOPs، يفوق Funnel-Transformer المحول القياسي في مجموعة واسعة من مهام التنبؤ على مستوى التسلسل، بما في ذلك تصنيف النصوص، وفهم اللغة، والفهم القرائي.* + +تمت المساهمة بهذا النموذج من قبل [sgugger](https://huggingface.co/sgugger). يمكن العثور على الكود الأصلي [هنا](https://github.com/laiguokun/Funnel-Transformer). + +## نصائح الاستخدام + +- بما أن Funnel Transformer يستخدم التجميع (Pooling)، يتغير طول تسلسل الحالات المخفية بعد كل كتلة من الطبقات. بهذه الطريقة، يتم تقسيم طولها إلى النصف، مما يسرع حساب الحالات المخفية التالية. لذلك، فإن طول التسلسل النهائي للنموذج الأساسي هو ربع الطول الأصلي. يمكن استخدام هذا النموذج مباشرة للمهام التي تتطلب فقط ملخص الجملة (مثل تصنيف التسلسل أو الاختيار من متعدد). بالنسبة للمهام الأخرى، يتم استخدام النموذج الكامل؛ يحتوي هذا النموذج الكامل على فك تشفير يقوم بزيادة حجم الحالات المخفية النهائية إلى نفس طول التسلسل مثل الإدخال. + +- بالنسبة لمهام مثل التصنيف، لا يمثل ذلك مشكلة، ولكن بالنسبة للمهام مثل نمذجة اللغة المقنعة أو تصنيف الرموز، نحتاج إلى حالة مخفية بنفس طول تسلسل الإدخال الأصلي. في تلك الحالات، يتم زيادة حجم الحالات المخفية النهائية إلى طول تسلسل الإدخال وتمر عبر طبقتين إضافيتين. هذا هو السبب في وجود إصدارين لكل نقطة تفتيش. يحتوي الإصدار الذي يحمل اللاحقة "-base" على الكتل الثلاث فقط، في حين أن الإصدار بدون اللاحقة يحتوي على الكتل الثلاث ورأس زيادة الحجم مع طبقاته الإضافية. + +- تتوفر جميع نقاط تفتيش Funnel Transformer بإصدارين، كامل وأساسي. يجب استخدام الإصدارات الأولى لـ [`FunnelModel`]، و [`FunnelForPreTraining`]، و [`FunnelForMaskedLM`]، و [`FunnelForTokenClassification`]، و [`FunnelForQuestionAnswering`]. يجب استخدام الإصدارات الثانية لـ [`FunnelBaseModel`]، و [`FunnelForSequenceClassification`]، و [`FunnelForMultipleChoice`]. + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار من متعدد](../tasks/multiple_choice) + +## FunnelConfig + +[[autodoc]] FunnelConfig + +## FunnelTokenizer + +[[autodoc]] FunnelTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## FunnelTokenizerFast + +[[autodoc]] FunnelTokenizerFast + +## المخرجات الخاصة بـ Funnel + +[[autodoc]] models.funnel.modeling_funnel.FunnelForPreTrainingOutput + +[[autodoc]] models.funnel.modeling_tf_funnel.TFFunnelForPreTrainingOutput + + + + +## FunnelBaseModel + +[[autodoc]] FunnelBaseModel + +- forward + +## FunnelModel + +[[autodoc]] FunnelModel + +- forward + +## FunnelModelForPreTraining + +[[autodoc]] FunnelForPreTraining + +- forward + +## FunnelForMaskedLM + +[[autodoc]] FunnelForMaskedLM + +- forward + +## FunnelForSequenceClassification + +[[autodoc]] FunnelForSequenceClassification + +- forward + +## FunnelForMultipleChoice + +[[autodoc]] FunnelForMultipleChoice + +- forward + +## FunnelForTokenClassification + +[[autodoc]] FunnelForTokenClassification + +- forward + +## FunnelForQuestionAnswering + +[[autodoc]] FunnelForQuestionAnswering + +- forward + + + + +## TFFunnelBaseModel + +[[autodoc]] TFFunnelBaseModel + +- call + +## TFFunnelModel + +[[autodoc]] TFFunnelModel + +- call + +## TFFunnelModelForPreTraining + +[[autodoc]] TFFunnelForPreTraining + +- call + +## TFFunnelForMaskedLM + +[[autodoc]] TFFunnelForMaskedLM + +- call + +## TFFunnelForSequenceClassification + +[[autodoc]] TFFunnelForSequenceClassification + +- call + +## TFFunnelForMultipleChoice + +[[autodoc]] TFFunnelForMultipleChoice + +- call + +## TFFunnelForTokenClassification + +[[autodoc]] TFFunnelForTokenClassification + +- call + +## TFFunnelForQuestionAnswering + +[[autodoc]] TFFunnelForQuestionAnswering + +- call + + + \ No newline at end of file From d9641360ae1d3803640ddbeac7cc4c3d14703a3f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:34 +0300 Subject: [PATCH 446/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/fuyu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/fuyu.md | 104 +++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 docs/source/ar/model_doc/fuyu.md diff --git a/docs/source/ar/model_doc/fuyu.md b/docs/source/ar/model_doc/fuyu.md new file mode 100644 index 00000000000000..7252b042f8533a --- /dev/null +++ b/docs/source/ar/model_doc/fuyu.md @@ -0,0 +1,104 @@ +# Fuyu + +## نظرة عامة + +تم إنشاء نموذج Fuyu بواسطة [ADEPT](https://www.adept.ai/blog/fuyu-8b)، وكتبه روهان بافيشي، وإريش إلسن، وكيرتيس هاوثورن، وماكسويل ناي، وأوغستوس أودينا، وأروش سوماني، وساجناك تاسيلار. + +قدم المؤلفون Fuyu-8B، وهو نموذج متعدد الوسائط يعتمد على فك التشفير فقط ويستند إلى بنية المحولات الكلاسيكية، مع تطبيع الاستعلام والمفتاح. تمت إضافة مشفر خطي لإنشاء تضمينات متعددة الوسائط من إدخالات الصور. + +من خلال معاملة رموز الصور مثل رموز النص واستخدام حرف خاص لفاصل الصور، يعرف النموذج متى ينتهي سطر الصورة. تتم إزالة تضمينات الموضع الصوري. يتجنب هذا الحاجة إلى مراحل تدريب مختلفة لقرارات الصور المختلفة. مع 8 مليار معلمة ومرخص بموجب CC-BY-NC، يُعرف Fuyu-8B بقدرته على التعامل مع كل من النص والصور، وحجم السياق المثيرة للإعجاب البالغ 16K، وأدائه العام. + + + +تم تدريب نماذج "فيويو" باستخدام "bfloat16"، ولكن الاستدلال الأصلي يستخدم "float16" تستخدم نقاط التحقق المرفوعة على المحور `torch_dtype = 'float16'` والتي سيتم + +يتم استخدامها بواسطة `AutoModel` API لتحويل نقاط التحقق من `torch.float32` إلى `torch.float16`. + +إن نوع بيانات الأوزان عبر الإنترنت غير ذي صلة إلى حد كبير، ما لم تكن تستخدم `torch_dtype="auto"` عند تهيئة نموذج باستخدام `model = AutoModelForCausalLM.from_pretrained("path"، torch_dtype = "auto")`. والسبب هو أنه سيتم أولاً تنزيل النموذج (باستخدام `dtype` من نقاط التحقق عبر الإنترنت) ثم تحويله إلى `dtype` الافتراضي لـ `torch` (يصبح `torch.float32`). يجب على المستخدمين تحديد `torch_dtype` الذي يريدونه، وإذا لم يفعلوا ذلك، فسيكون `torch.float32`. + +لا يُنصح بالتدريب الدقيق للنموذج في `float16` ومن المعروف أنه ينتج عنه `نان`، لذلك يجب ضبط دقة النموذج باستخدام `bfloat16`. + + + +نصائح: + +- لتحويل النموذج، تحتاج إلى استنساخ المستودع الأصلي باستخدام `git clone https://github.com/persimmon-ai-labs/adept-inference`، ثم الحصول على نقاط التحقق: + +```bash +git clone https://github.com/persimmon-ai-labs/adept-inference +wget path/to/fuyu-8b-model-weights.tar +tar -xvf fuyu-8b-model-weights.tar +بايثون src/transformers/models/fuyu/convert_fuyu_weights_to_hf.py --input_dir /path/to/downloaded/fuyu/weights/ --output_dir /output/path \ +--pt_model_path /path/to/fuyu_8b_release/iter_0001251/mp_rank_00/model_optim_rng.pt +--ada_lib_path /path/to/adept-inference +``` + +لنموذج الدردشة: + +```bash +wget https://axtkn4xl5cip.objectstorage.us-phoenix-1.oci.customer-oci.com/n/axtkn4xl5cip/b/adept-public-data/o/8b_chat_model_release.tar +tar -xvf 8b_base_model_release.tar +``` + +بعد ذلك، يمكن تحميل النموذج عبر: + +```py +from transformers import FuyuConfig, FuyuForCausalLM +model_config = FuyuConfig() +model = FuyuForCausalLM(model_config).from_pretrained('/output/path') +``` + +يجب تمرير الإدخالات عبر معالج محدد للحصول على التنسيقات الصحيحة. + +يتطلب المعالج معالج صور ومعالج توكن. وبالتالي، يمكن تحميل الإدخالات عبر: + +```py +from PIL import Image +from transformers import AutoTokenizer +from transformers.models.fuyu.processing_fuyu import FuyuProcessor +from transformers.models.fuyu.image_processing_fuyu import FuyuImageProcessor + + +tokenizer = AutoTokenizer.from_pretrained('adept-hf-collab/fuyu-8b') +image_processor = FuyuImageProcessor() + + +processor = FuyuProcessor(image_processor=image_processor, tokenizer=tokenizer) +text_prompt = "Generate a coco-style caption.\\n" + +bus_image_url = "https://huggingface.co/datasets/hf-internal-testing/fixtures-captioning/resolve/main/bus.png" +bus_image_pil = Image.open(io.BytesIO(requests.get(bus_image_url).content)) +inputs_to_model = processor(text=text_prompt, images=bus_image_pil) +``` + +تمت المساهمة بهذا النموذج بواسطة [Molbap](https://huggingface.co/Molbap). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/persimmon-ai-labs/adept-inference). + +- يستخدم Fuyu معالج رموز يعتمد على `sentencepiece`، مع نموذج "Unigram". يدعم bytefallback، وهو متاح فقط في `tokenizers==0.14.0` لمعالج الرموز السريع. + +يتم استخدام `LlamaTokenizer` لأنه عبارة عن غلاف قياسي حول sentencepiece. + +- يقترح المؤلفون استخدام المطالبة التالية لتعليق الصور: `f"Generate a coco-style caption.\\n"` + +## FuyuConfig + +[[autodoc]] FuyuConfig + +## FuyuForCausalLM + +[[autodoc]] FuyuForCausalLM + +- forword + +## FuyuImageProcessor + +[[autodoc]] FuyuImageProcessor + +- __call__ + +## FuyuProcessor + +[[autodoc]] FuyuProcessor + +- __call__ \ No newline at end of file From fb29989c67e44a43621006b93f3d57605e1ff4c1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:36 +0300 Subject: [PATCH 447/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gemma.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gemma.md | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 docs/source/ar/model_doc/gemma.md diff --git a/docs/source/ar/model_doc/gemma.md b/docs/source/ar/model_doc/gemma.md new file mode 100644 index 00000000000000..39376d6ca39201 --- /dev/null +++ b/docs/source/ar/model_doc/gemma.md @@ -0,0 +1,64 @@ +# Gemma + +## نظرة عامة +اقترح فريق Gemma من Google نموذج Gemma في [Gemma: Open Models Based on Gemini Technology and Research](https://blog.google/technology/developers/gemma-open-models/) . + +تم تدريب نماذج Gemma على 6T من الرموز، وتم إصدارها بإصدارين، 2b و 7b. + +الملخص من الورقة هو ما يلي: + +> يقدم هذا العمل Gemma، وهي عائلة جديدة من نماذج اللغة المفتوحة التي تظهر أداءً قوياً عبر المعايير الأكاديمية لفهم اللغة والتفكير والسلامة. نقوم بإصدار حجمين من النماذج (2 مليار و 7 مليار معلمة)، ونقدم نقاط تفتيش لكل من النماذج المسبقة التدريب والمعايرة الدقيقة. تتفوق Gemma على النماذج المفتوحة المماثلة في الحجم في 11 من أصل 18 مهمة قائمة على النص، ونقدم تقييمات شاملة لجوانب السلامة والمسؤولية للنماذج، إلى جانب وصف مفصل لتطوير نموذجنا. نعتقد أن الإصدار المسؤول لنماذج اللغة الكبيرة مهم لتحسين سلامة النماذج الرائدة، ولتمكين الموجة التالية من الابتكارات في نماذج اللغة الكبيرة. + +نصائح: + +- يمكن تحويل نقاط التفتيش الأصلية باستخدام نص البرنامج النصي للتحويل `src/transformers/models/gemma/convert_gemma_weights_to_hf.py` + +تمت المساهمة بهذا النموذج من قبل [Arthur Zucker](https://huggingface.co/ArthurZ)، [Younes Belkada](https://huggingface.co/ybelkada)، [Sanchit Gandhi](https://huggingface.co/sanchit-gandhi)، [Pedro Cuenca](https://huggingface.co/pcuenq). + +## GemmaConfig + +[[autodoc]] GemmaConfig + +## GemmaTokenizer + +[[autodoc]] GemmaTokenizer + +## GemmaTokenizerFast + +[[autodoc]] GemmaTokenizerFast + +## GemmaModel + +[[autodoc]] GemmaModel + +- forward + +## GemmaForCausalLM + +[[autodoc]] GemmaForCausalLM + +- forward + +## GemmaForSequenceClassification + +[[autodoc]] GemmaForSequenceClassification + +- forward + +## GemmaForTokenClassification + +[[autodoc]] GemmaForTokenClassification + +- forward + +## FlaxGemmaModel + +[[autodoc]] FlaxGemmaModel + +- __call__ + +## FlaxGemmaForCausalLM + +[[autodoc]] FlaxGemmaForCausalLM + +- __call__ \ No newline at end of file From 33a18f58f49446e31576de2ad46c13546970a824 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:38 +0300 Subject: [PATCH 448/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/git.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/git.md | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/source/ar/model_doc/git.md diff --git a/docs/source/ar/model_doc/git.md b/docs/source/ar/model_doc/git.md new file mode 100644 index 00000000000000..b2085190a731a0 --- /dev/null +++ b/docs/source/ar/model_doc/git.md @@ -0,0 +1,62 @@ +# GIT + +## نظرة عامة +اقترح نموذج GIT في [GIT: A Generative Image-to-text Transformer for Vision and Language](https://arxiv.org/abs/2205.14100) من قبل Jianfeng Wang, Zhengyuan Yang, Xiaowei Hu, Linjie Li, Kevin Lin, Zhe Gan, Zicheng Liu, Ce Liu, Lijuan Wang. GIT هو محول فك تشفير يعتمد فقط على مشفر الرؤية CLIP لتعريض النموذج لمدخلات الرؤية بالإضافة إلى النص. يحقق النموذج نتائج متقدمة على معايير تقييم إنشاء تعليقات الصور والإجابة على الأسئلة البصرية. + +الملخص من الورقة هو ما يلي: + +*في هذه الورقة، نقوم بتصميم وتدريب محول الصور النصية التوليدي، GIT، لتوحيد مهام الرؤية واللغة مثل إنشاء تعليقات الصور/الفيديو والإجابة على الأسئلة. في حين أن النماذج التوليدية توفر بنية شبكة متسقة بين المراحل التدريبية والضبط الدقيق، عادةً ما تحتوي الأعمال الموجودة على هياكل معقدة (مشفر/فك تشفير أحادي/متعدد الوسائط) وتعتمد على وحدات خارجية مثل أجهزة الكشف عن الأشياء/الموسومات والتعرف الضوئي على الحروف (OCR). في GIT، قمنا بتبسيط البنية إلى مشفر صورة واحد وفك تشفير نص واحد في إطار مهمة نمذجة لغة واحدة. كما نقوم بزيادة حجم بيانات التدريب المسبق وحجم النموذج لتعزيز أداء النموذج. بدون أجراس وصفارات، يحقق GIT الخاص بنا حالة جديدة من الفن في 12 معيارًا مرجعيًا صعبًا بهامش كبير. على سبيل المثال، يتفوق نموذجنا على أداء الإنسان لأول مرة في TextCaps (138.2 مقابل 125.5 في CIDEr). علاوة على ذلك، نقدم مخططًا جديدًا لتصنيف الصور والتعرف على نص المشهد القائمين على التوليد، وتحقيق أداء جيد في المعايير المرجعية القياسية.* + + + +بنية GIT. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/GenerativeImage2Text). + +## نصائح الاستخدام + +- تم تنفيذ GIT بطريقة مشابهة جدًا لـ GPT-2، والفرق الوحيد هو أن النموذج مشروط أيضًا بـ `pixel_values`. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام GIT. + +- يمكن العثور على دفاتر الملاحظات التوضيحية المتعلقة بالاستدلال + الضبط الدقيق لـ GIT على بيانات مخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/GIT). +- راجع أيضًا: [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه. يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## GitVisionConfig + +[[autodoc]] GitVisionConfig + +## GitVisionModel + +[[autodoc]] GitVisionModel + +- forward + +## GitConfig + +[[autodoc]] GitConfig + +- all + +## GitProcessor + +[[autodoc]] GitProcessor + +- __call__ + +## GitModel + +[[autodoc]] GitModel + +- forward + +## GitForCausalLM + +[[autodoc]] GitForCausalLM + +- forward \ No newline at end of file From b0cadf3f330e6cef575d7f0386993d6104a95182 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:39 +0300 Subject: [PATCH 449/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/glpn.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/glpn.md | 59 ++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/glpn.md diff --git a/docs/source/ar/model_doc/glpn.md b/docs/source/ar/model_doc/glpn.md new file mode 100644 index 00000000000000..763cef1538602b --- /dev/null +++ b/docs/source/ar/model_doc/glpn.md @@ -0,0 +1,59 @@ +# GLPN + + + +هذا نموذج تم تقديمه مؤخرًا، لذلك لم يتم اختبار واجهة برمجة التطبيقات الخاصة به بشكل مكثف. قد تكون هناك بعض الأخطاء أو التغييرات الطفيفة التي قد تسبب كسره في المستقبل. إذا لاحظت شيئًا غريبًا، يرجى إرسال تقرير عن المشكلة على <[Github Issue](https://github.com/huggingface/transformers/issues/new?assignees=&labels=&template=bug-report.md&title)> + + + +## نظرة عامة + +تم اقتراح نموذج GLPN في <["Global-Local Path Networks for Monocular Depth Estimation with Vertical CutDepth"](https://arxiv.org/abs/2201.07436)> بواسطة دويون كيم، وونغهيون جا، وبيونغوان آن، ودونجيو جو، وسيوهان تشون، وجونمو كيم. + +يُدمج GLPN محول SegFormer الهرمي مع فك تشفير خفيف الوزن لتقدير العمق أحادي العين. ويظهر فك التشفير المقترح أداءً أفضل من فك التشفير المقترح سابقًا، مع تعقيد حسابي أقل بكثير. + +الملخص من الورقة هو ما يلي: + +*تقدير العمق من صورة واحدة هي مهمة مهمة يمكن تطبيقها على مختلف المجالات في رؤية الكمبيوتر، وقد نمت بسرعة مع تطور الشبكات العصبية التلافيفية. في هذه الورقة، نقترح بنية واستراتيجية تدريب جديدتين لتقدير العمق أحادي العين لتحسين دقة التنبؤ للشبكة بشكل أكبر. نستخدم برنامج ترميز محول هرمي لالتقاط ونقل السياق العالمي، ونصمم فك تشفير خفيف الوزن ولكنه قوي لتوليد خريطة عمق مقدرة مع مراعاة الاتصال المحلي. من خلال بناء مسارات متصلة بين ميزات متعددة النطاق وتدفق فك التشفير العالمي مع وحدة دمج الميزات الانتقائية المقترحة، يمكن للشبكة دمج كلا التمثيلين واستعادة التفاصيل الدقيقة. بالإضافة إلى ذلك، يظهر فك التشفير المقترح أداءً أفضل من فك التشفير المقترح سابقًا، مع تعقيد حسابي أقل بكثير. علاوة على ذلك، نحسن طريقة التعزيز المحددة للعمق من خلال الاستفادة من ملاحظة مهمة في تقدير العمق لتعزيز النموذج. تتفوق شبكتنا على أداء الطراز المماثل على مجموعة بيانات العمق الصعبة NYU Depth V2. وقد أجريت تجارب مكثفة للتحقق من صحة النهج المقترح وإظهار فعاليته. وأخيرًا، يظهر نموذجنا قدرة تعميم وقوة تحمل أفضل من النماذج المقارنة الأخرى.* + + + + ملخص النهج. مأخوذ من <[الأوراق الأصلية](https://arxiv.org/abs/2201.07436)> + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/vinvino02/GLPDepth). + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام GLPN. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ [`GLPNForDepthEstimation`] [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/GLPN). +- [دليل مهام تقدير العمق أحادي العين](../tasks/monocular_depth_estimation) + +## GLPNConfig + +[[autodoc]] GLPNConfig + +## GLPNFeatureExtractor + +[[autodoc]] GLPNFeatureExtractor + +- __call__ + +## GLPNImageProcessor + +[[autodoc]] GLPNImageProcessor + +- preprocess + +## GLPNModel + +[[autodoc]] GLPNModel + +- forward + +## GLPNForDepthEstimation + +[[autodoc]] GLPNForDepthEstimation + +- forward \ No newline at end of file From 51139c4f3ab99e54dceda6c399dac9b458bb87f5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:41 +0300 Subject: [PATCH 450/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gpt-sw3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gpt-sw3.md | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/source/ar/model_doc/gpt-sw3.md diff --git a/docs/source/ar/model_doc/gpt-sw3.md b/docs/source/ar/model_doc/gpt-sw3.md new file mode 100644 index 00000000000000..e1acb32d6e7e74 --- /dev/null +++ b/docs/source/ar/model_doc/gpt-sw3.md @@ -0,0 +1,47 @@ +# GPT-Sw3 + +## نظرة عامة + +اقترح نموذج GPT-Sw3 لأول مرة في ورقة "الدروس المستفادة من GPT-SW3: بناء أول نموذج لغوي توليدي واسع النطاق للغة السويدية" من قبل أرييل إكغرين، وأمارو كوبا جيلينستن، وإيفانجيليا جوجولو، وأليس هايمان، وسيفيرين فيرليندن، وجوي أوهمان، وفريدريك كارلسون، وماغنوس ساهلجرين. + +ومنذ تلك الورقة الأولى، وسع المؤلفون عملهم ودربوا نماذج جديدة على مجموعات بياناتهم الجديدة التي تبلغ 1.2 تيرابايت والتي تسمى The Nordic Pile. + +GPT-Sw3 عبارة عن مجموعة من نماذج المحول اللغوي فك التشفير فقط كبيرة الحجم التي تم تطويرها بواسطة AI Sweden بالتعاون مع RISE و WASP WARA for Media and Language. تم تدريب GPT-Sw3 على مجموعة بيانات تحتوي على 320 مليار رمز في السويدية والنرويجية والدانماركية والإيسلندية والإنجليزية، ورموز البرمجة. تم تدريب النموذج المسبق باستخدام هدف نمذجة اللغة السببية (CLM) باستخدام تنفيذ NeMo Megatron GPT. + +تمت المساهمة بهذا النموذج من قبل [نماذج AI Sweden](https://huggingface.co/AI-Sweden-Models). + +## مثال على الاستخدام + +```python +>>> from transformers import AutoTokenizer, AutoModelForCausalLM + +>>> tokenizer = AutoTokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-356m") +>>> model = AutoModelForCausalLM.from_pretrained("AI-Sweden-Models/gpt-sw3-352m") + +>>> input_ids = tokenizer("Träd är fina för att", return_tensors="pt")["input_ids"] + +>>> generated_token_ids = model.generate(inputs=input_ids, max_new_tokens=10, do_sample=True)[0] + +>>> print(tokenizer.decode(generated_token_ids)) +Träd är fina för att de är färgstarka. Men ibland är det fint +``` + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل نمذجة اللغة السببية](../tasks/language_modeling) + + + +يستخدم التنفيذ `GPT2Model` المقترن بـ `GPTSw3Tokenizer`. راجع [وثائق GPT2Model](gpt2) للحصول على المراجع والأمثلة الخاصة بواجهة برمجة التطبيقات. + +ملاحظة: مطلوب تثبيت Sentencepiece لاستخدام محولنا البرمجي ويمكن تثبيته باستخدام `pip install transformers[sentencepiece]` أو `pip install sentencepiece`. + + + +## GPTSw3Tokenizer + +[[autodoc]] GPTSw3Tokenizer + +- save_vocabulary \ No newline at end of file From 65e572757251ac932f4120b320fcd26fc91dbcc6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:43 +0300 Subject: [PATCH 451/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gpt2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gpt2.md | 235 +++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 docs/source/ar/model_doc/gpt2.md diff --git a/docs/source/ar/model_doc/gpt2.md b/docs/source/ar/model_doc/gpt2.md new file mode 100644 index 00000000000000..c195f9c79e1e9f --- /dev/null +++ b/docs/source/ar/model_doc/gpt2.md @@ -0,0 +1,235 @@ +# OpenAI GPT2 + +## نظرة عامة +اقترح نموذج OpenAI GPT-2 في [نماذج اللغة غير الخاضعة للإشراف هي متعلمات متعددة المهام](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) بواسطة Alec Radford و Jeffrey Wu و Rewon Child و David Luan و Dario Amodei و Ilya Sutskever من [OpenAI] (https://huggingface.co/openai). إنه محول أحادي الاتجاه تم تدريبه مسبقًا باستخدام نمذجة اللغة على مجموعة بيانات كبيرة جدًا تبلغ حوالي 40 جيجابايت من بيانات النص. + +المستخلص من الورقة هو ما يلي: + +> "GPT-2 هو نموذج لغة كبير قائم على المحول مع 1.5 مليار معلمة، تم تدريبه على مجموعة بيانات [1] من 8 ملايين صفحة ويب. يتم تدريب GPT-2 بهدف بسيط: التنبؤ بالكلمة التالية، بالنظر إلى جميع الكلمات السابقة داخل بعض النصوص. يؤدي تنوع مجموعة البيانات إلى احتواء هذا الهدف البسيط بشكل طبيعي على عروض توضيحية للعديد من المهام عبر المجالات المتنوعة. يعد GPT-2 عملية توسيع مباشرة لـ GPT، مع أكثر من 10X من المعلمات وتم تدريبه على أكثر من 10X من كمية البيانات." + +[اكتب باستخدام المحول](https://transformer.huggingface.co/doc/gpt2-large) هو تطبيق ويب تم إنشاؤه واستضافته بواسطة Hugging Face والذي يوضح القدرات التوليدية لعدة نماذج. يعد GPT-2 أحد هذه النماذج وهو متاح بخمسة أحجام مختلفة: صغير ومتوسط وكبير وxl وإصدار مقطر من نقطة تفتيش صغيرة: *distilgpt-2*. + +تمت المساهمة بهذا النموذج من قبل [thomwolf](https://huggingface.co/thomwolf). يمكن العثور على الكود الأصلي [هنا](https://openai.com/blog/better-language-models/). + +## نصائح الاستخدام + +- GPT-2 هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بتعبئة المدخلات على اليمين بدلاً من اليسار. + +- تم تدريب GPT-2 بهدف نمذجة اللغة السببية (CLM) وبالتالي فهو قوي في التنبؤ بالرمز التالي في تسلسل. الاستفادة من هذه الميزة تسمح لـ GPT-2 بتوليد نص متماسك من الناحية التركيبية كما يمكن ملاحظته في مثال *run_generation.py* النصي. + +- يمكن أن يأخذ النموذج *past_key_values* (لـ PyTorch) أو *past* (لـ TF) كإدخال، وهو أزواج الاهتمام الرئيسية/القيم المحسوبة مسبقًا. باستخدام هذا (*past_key_values* أو *past*) القيمة يمنع النموذج من إعادة حساب القيم المحسوبة مسبقًا في سياق توليد النص. بالنسبة لـ PyTorch، راجع حجة *past_key_values* لطريقة [`GPT2Model.forward`]، أو بالنسبة لـ TF، راجع حجة *past* لطريقة [`TFGPT2Model.call`] لمزيد من المعلومات حول استخدامه. + +- سيطبق تمكين علامات *scale_attn_by_inverse_layer_idx* و *reorder_and_upcast_attn* تحسينات الاستقرار التدريبي من [Mistral](https://github.com/stanford-crfm/mistral/) (لـ PyTorch فقط). + +## مثال الاستخدام + +يمكن استخدام طريقة `generate()` لتوليد نص باستخدام نموذج GPT2. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("gpt2") +>>> tokenizer = AutoTokenizer.from_pretrained("gpt2") + +>>> prompt = "GPT2 is a model developed by OpenAI." + +>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids + +>>> gen_tokens = model.generate( +... input_ids, +... do_sample=True, +... temperature=0.9, +... max_length=100, +... ) +>>> gen_text = tokenizer.batch_decode(gen_tokens)[0] +``` + +## استخدام فلاش الاهتمام 2 + +Flash Attention 2 هو إصدار أسرع وأكثر تحسينًا من حساب درجات الاهتمام والذي يعتمد على نواة `cuda`. + +### التثبيت + +أولاً، تحقق مما إذا كان الأجهزة الخاصة بك متوافقة مع Flash Attention 2. يمكن العثور على أحدث قائمة للأجهزة المتوافقة في [الوثائق الرسمية](https://github.com/Dao-AILab/flash-attention#installation-and-features). إذا لم يكن الأجهزة الخاص بك متوافقًا مع Flash Attention 2، فيمكنك الاستفادة من تحسينات نواة الاهتمام من خلال دعم المحول الأفضل المشمول [أعلاه](https://huggingface.co/docs/transformers/main/en/model_doc/bark#using-better-transformer). + +بعد ذلك، قم بتثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +### الاستخدام + +لتحميل نموذج باستخدام Flash Attention 2، يمكننا تمرير الحجة `attn_implementation="flash_attention_2"` إلى [`.from_pretrained`](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained). سنقوم أيضًا بتحميل النموذج في نصف الدقة (على سبيل المثال `torch.float16`)، حيث يؤدي ذلك إلى انخفاض كبير في استخدام الذاكرة وسرعة الاستدلال مع انخفاض طفيف في جودة الصوت: + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer +>>> device = "cuda" # the device to load the model onto + +>>> model = AutoModelForCausalLM.from_pretrained("gpt2", torch_dtype=torch.float16, attn_implementation="flash_attention_2") +>>> tokenizer = AutoTokenizer.from_pretrained("gpt2") + +>>> prompt = "def hello_world():" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to(device) +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +``` + +### تسريع المتوقع + +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `gpt2` وإصدار Flash Attention 2 من النموذج باستخدام طول تسلسل يبلغ 512. + +
+ +
+ +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها برمز 🌎) لمساعدتك في البدء باستخدام GPT2. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + +- مدونة حول كيفية [ضبط نموذج GPT-2 غير الإنجليزي باستخدام Hugging Face](https://www.philschmid.de/fine-tune-a-non-english-gpt-2-model-with-huggingface). + +- مدونة حول [كيفية توليد النص: استخدام طرق فك مختلفة لتوليد اللغة مع المحولات](https://huggingface.co/blog/how-to-generate) مع GPT-2. + +- مدونة حول [تدريب CodeParrot 🦜 من الصفر](https://huggingface.co/blog/codeparrot)، وهو نموذج GPT-2 كبير. + +- مدونة حول [توليد نص أسرع مع TensorFlow و XLA](https://huggingface.co/blog/tf-xla-generate) مع GPT-2. + +- مدونة حول [كيفية تدريب نموذج لغة باستخدام Megatron-LM](https://huggingface.co/blog/megatron-training) مع نموذج GPT-2. + +- دفتر ملاحظات حول كيفية [ضبط دقيق لـ GPT2 لتوليد كلمات الأغاني على غرار فنانك المفضل](https://colab.research.google.com/github/AlekseyKorshuk/huggingartists/blob/master/huggingartists-demo.ipynb). 🌎 + +- دفتر ملاحظات حول كيفية [ضبط دقيق لـ GPT2 لتوليد التغريدات على غرار مستخدم Twitter المفضل لديك](https://colab.research.google.com/github/borisdayma/huggingtweets/blob/master/huggingtweets-demo.ipynb). 🌎 + +- فصل [نمذجة اللغة السببية](https://huggingface.co/course/en/chapter7/6?fw=pt#training-a-causal-language-model-from-scratch) من دورة 🤗 Hugging Face Course. + +- [`GPT2LMHeadModel`] مدعوم بواسطة هذا [مثال على النص البرمجي لنمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#gpt-2gpt-and-causal-language-modeling)، [مثال على النص البرمجي لتوليد النص](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-generation)، و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). + +- [`TFGPT2LMHeadModel`] مدعوم بواسطة هذا [مثال على النص البرمجي لنمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_clmpy) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). + +- [`FlaxGPT2LMHeadModel`] مدعوم بواسطة هذا [مثال على النص البرمجي لنمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#causal-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/causal_language_modeling_flax.ipynb). + +- دليل مهمة تصنيف النص [](../tasks/sequence_classification) + +- دليل مهمة تصنيف الرموز [](../tasks/token_classification) + +- دليل مهمة نمذجة اللغة السببية [](../tasks/language_modeling) + +## GPT2Config + +[[autodoc]] GPT2Config + +## GPT2Tokenizer + +[[autodoc]] GPT2Tokenizer + +- save_vocabulary + +## GPT2TokenizerFast + +[[autodoc]] GPT2TokenizerFast + +## مخرجات GPT2 المحددة + +[[autodoc]] models.gpt2.modeling_gpt2.GPT2DoubleHeadsModelOutput + +[[autodoc]] models.gpt2.modeling_tf_gpt2.TFGPT2DoubleHeadsModelOutput + + + + +## GPT2Model + +[[autodoc]] GPT2Model + +- forward + +## GPT2LMHeadModel + +[[autodoc]] GPT2LMHeadModel + +- forward + +## GPT2DoubleHeadsModel + +[[autodoc]] GPT2DoubleHeadsModel + +- forward + +## GPT2ForQuestionAnswering + +[[autodoc]] GPT2ForQuestionAnswering + +- forward + +## GPT2ForSequenceClassification + +[[autodoc]] GPT2ForSequenceClassification + + +- forward + +## GPT2ForTokenClassification + +[[autodoc]] GPT2ForTokenClassification + + +- forward + + + + +## TFGPT2Model + +[[autodoc]] TFGPT2Model + +- call + +## TFGPT2LMHeadModel + + +[[autodoc]] TFGPT2LMHeadModel + +- call + +## TFGPT2DoubleHeadsModel + +[[autodoc]] TFGPT2DoubleHeadsModel + +- call + +## TFGPT2ForSequenceClassification + +[[autodoc]] TFGPT2ForSequenceClassification + +- call + +## TFSequenceClassifierOutputWithPast + +[[autodoc]] modeling_tf_outputs.TFSequenceClassifierOutputWithPast + +## TFGPT2Tokenizer + +[[autodoc]] TFGPT2Tokenizer + + + + +## FlaxGPT2Model + +[[autodoc]] FlaxGPT2Model + +- __call__ + +## FlaxGPT2LMHeadModel + +[[autodoc]] FlaxGPT2LMHeadModel + +- __call__ + + + \ No newline at end of file From bbb87508e611bee63135d45a093733d7e06e2e13 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:45 +0300 Subject: [PATCH 452/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gptj.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gptj.md | 180 +++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 docs/source/ar/model_doc/gptj.md diff --git a/docs/source/ar/model_doc/gptj.md b/docs/source/ar/model_doc/gptj.md new file mode 100644 index 00000000000000..52d432aae4679b --- /dev/null +++ b/docs/source/ar/model_doc/gptj.md @@ -0,0 +1,180 @@ +# GPT-J + +## نظرة عامة +نموذج GPT-J هو نموذج لغوي احتمالي تم إصداره في مستودع [kingoflolz/mesh-transformer-jax](https://github.com/kingoflolz/mesh-transformer-jax) بواسطة Ben Wang و Aran Komatsuzaki. وهو يشبه نموذج GPT-2 حيث تم تدريبه على مجموعة بيانات [the Pile](https://pile.eleuther.ai/) لإنتاج النصوص بشكل تلقائي. + +تمت المساهمة بهذا النموذج من قبل [Stella Biderman](https://huggingface.co/stellaathena). + +## نصائح الاستخدام +- لتحميل [GPT-J](https://huggingface.co/EleutherAI/gpt-j-6B) بتنسيق float32، ستحتاج إلى ضعف حجم الذاكرة العشوائية للنموذج، أي 1x لحجم الأوزان الأولية و 1x لتحميل نقطة التفتيش. لذلك، بالنسبة لـ GPT-J، ستكون هناك حاجة إلى 48 جيجابايت من الذاكرة العشوائية كحد أدنى لتحميل النموذج فقط. لتقليل استخدام الذاكرة العشوائية، هناك بعض الخيارات. يمكن استخدام وسيط `torch_dtype` لتهيئة النموذج بنصف الدقة على جهاز CUDA فقط. هناك أيضًا فرع fp16 والذي يخزن أوزان fp16، والذي يمكن استخدامه لتقليل استخدام الذاكرة العشوائية: + +```python +>>> from transformers import GPTJForCausalLM +>>> import torch + +>>> device = "cuda" +>>> model = GPTJForCausalLM.from_pretrained( +... "EleutherAI/gpt-j-6B", +... revision="float16", +... torch_dtype=torch.float16, +... ).to(device) +``` + +- يجب أن يتناسب النموذج مع ذاكرة GPU بسعة 16 جيجابايت للتنفيذ. ولكن بالنسبة للتدريب/الضبط الدقيق، سيتطلب الأمر ذاكرة GPU أكبر بكثير. على سبيل المثال، يقوم مُحسِّن Adam بإنشاء أربع نسخ من النموذج: النموذج، والمشتقات، ومتوسط المشتقات، ومتوسط المربعات للمشتقات. لذلك، ستحتاج إلى ذاكرة GPU بحجم 4x على الأقل لحجم النموذج، حتى مع الدقة المختلطة، لأن تحديثات المشتقات تكون في تنسيق fp32. هذا لا يشمل المصفوفات والدفعات، والتي تتطلب أيضًا المزيد من ذاكرة GPU. لذلك، يجب استكشاف حلول مثل DeepSpeed لتدريب/ضبط النموذج. الخيار الآخر هو استخدام الكود الأصلي لتدريب/ضبط النموذج على وحدة معالجة الرسوميات (TPU)، ثم تحويل النموذج إلى تنسيق Transformers للتنفيذ. يمكن العثور على التعليمات الخاصة بذلك [هنا](https://github.com/kingoflolz/mesh-transformer-jax/blob/master/howto_finetune.md). + +- على الرغم من أن مصفوفة التعليقات التوضيحية لها حجم 50400، إلا أن محدد GPT-2 يستخدم فقط 50257 إدخالًا. تم إضافة هذه الرموز الإضافية من أجل الكفاءة على وحدات معالجة الرسوميات (TPUs). ولتجنب عدم التطابق بين حجم مصفوفة التعليقات التوضيحية وحجم المفردات، يحتوي محدد الـ GPT-J على 143 رمزًا إضافيًا `<|extratoken_1|>... <|extratoken_143|>`، وبالتالي يصبح حجم مفردات المحلل 50400 أيضًا. + +## أمثلة الاستخدام +يمكن استخدام طريقة [`~generation.GenerationMixin.generate`] لتوليد النصوص باستخدام نموذج GPT-J. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-j-6B") +>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B") + +>>> prompt = ( +... "In a shocking finding, scientists discovered a herd of unicorns living in a remote, " +... "previously unexplored valley, in the Andes Mountains. Even more surprising to the " +... "researchers was the fact that the unicorns spoke perfect English." +... ) + +>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids + +>>> gen_tokens = model.generate( +... input_ids, +... do_sample=True, +... temperature=0.9, +... max_length=100, +... ) +>>> gen_text = tokenizer.batch_decode(gen_tokens)[0] +``` + +أو باستخدام الدقة العائمة 16: + +```python +>>> from transformers import GPTJForCausalLM, AutoTokenizer +>>> import torch + +>>> device = "cuda" +>>> model = GPTJForCausalLM.from_pretrained("EleutherAI/gpt-j-6B", torch_dtype=torch.float16).to(device) +>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B") + +>>> prompt = ( +... "In a shocking finding, scientists discovered a herd of unicorns living in a remote, " +... "previously unexplored valley, in the Andes Mountains. Even more surprising to the " +... "researchers was the fact that the unicorns spoke perfect English." +... ) + +>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device) + +>>> gen_tokens = model.generate( +... input_ids, +... do_sample=True, +... temperature=0.9, +... max_length=100, +... ) +>>> gen_text = tokenizer.batch_decode(gen_tokens)[0] +``` + +## الموارد +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها برمز 🌎) لمساعدتك في البدء في استخدام GPT-J. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنقوم بمراجعته! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- وصف [GPT-J](https://huggingface.co/EleutherAI/gpt-j-6B). +- مدونة حول كيفية [نشر GPT-J 6B للتنفيذ باستخدام Hugging Face Transformers وAmazon SageMaker](https://huggingface.co/blog/gptj-sagemaker). +- مدونة حول كيفية [تسريع تنفيذ GPT-J باستخدام DeepSpeed-Inference على وحدات معالجة الرسوميات](https://www.philschmid.de/gptj-deepspeed-inference). +- منشور مدونة يقدم [GPT-J-6B: 6B JAX-Based Transformer](https://arankomatsuzaki.wordpress.com/2021/06/04/gpt-j/). 🌎 +- دفتر ملاحظات لـ [GPT-J-6B Inference Demo](https://colab.research.google.com/github/kingoflolz/mesh-transformer-jax/blob/master/colab_demo.ipynb). 🌎 +- دفتر ملاحظات آخر يوضح [Inference with GPT-J-6B](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/GPT-J-6B/Inference_with_GPT_J_6B.ipynb). +- فصل [نمذجة اللغة السببية](https://huggingface.co/course/en/chapter7/6?fw=pt#training-a-causal-language-model-from-scratch) من دورة 🤗 Hugging Face Course. +- [`GPTJForCausalLM`] مدعوم بواسطة [مثال برمجة النماذج اللغوية السببية](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#gpt-2gpt-and-causal-language-modeling)، و[مثال النص النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-generation)، و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). +- [`TFGPTJForCausalLM`] مدعوم بواسطة [مثال برمجة النماذج اللغوية السببية](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_clmpy) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). +- [`FlaxGPTJForCausalLM`] مدعوم بواسطة [مثال برمجة النماذج اللغوية السببية](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#causal-language-modeling) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/causal_language_modeling_flax.ipynb). + +**موارد التوثيق** + +- دليل مهام تصنيف النصوص [Text classification task guide](../tasks/sequence_classification) +- دليل مهام الإجابة على الأسئلة [Question answering task guide](../tasks/question_answering) +- دليل مهام نمذجة اللغة السببية [Causal language modeling task guide](../tasks/language_modeling) + +## GPTJConfig + +[[autodoc]] GPTJConfig + +- all + + + + + +## GPTJModel + +[[autodoc]] GPTJModel + +- forward + +## GPTJForCausalLM + +[[autodoc]] GPTJForCausalLM + +- forward + +## GPTJForSequenceClassification + +[[autodoc]] GPTJForSequenceClassification + +- forward + +## GPTJForQuestionAnswering + +[[autodoc]] GPTJForQuestionAnswering + +- forward + + + + + +## TFGPTJModel + +[[autodoc]] TFGPTJModel + +- call + +## TFGPTJForCausalLM + +[[autodoc]] TFGPTJForCausalLM + +- call + +## TFGPTJForSequenceClassification + +[[autodoc]] TFGPTJForSequenceClassification + +- call + +## TFGPTJForQuestionAnswering + +[[autodoc]] TFGPTJForQuestionAnswering + +- call + + + + + +## FlaxGPTJModel + +[[autodoc]] FlaxGPTJModel + +- __call__ + +## FlaxGPTJForCausalLM + +[[autodoc]] FlaxGPTJForCausalLM + +- __call__ + + + + \ No newline at end of file From 964f4a92c77dfffa413180b164710e9c1e9c8269 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:46 +0300 Subject: [PATCH 453/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gptsan-japanese.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gptsan-japanese.md | 110 ++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 docs/source/ar/model_doc/gptsan-japanese.md diff --git a/docs/source/ar/model_doc/gptsan-japanese.md b/docs/source/ar/model_doc/gptsan-japanese.md new file mode 100644 index 00000000000000..bf9e320ca32fdd --- /dev/null +++ b/docs/source/ar/model_doc/gptsan-japanese.md @@ -0,0 +1,110 @@ +# GPTSAN-japanese + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب (Pull Requests) جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + +## نظرة عامة +تم إصدار نموذج GPTSAN-japanese في المستودع بواسطة Toshiyuki Sakamoto (tanreinama). +GPTSAN هو نموذج لغة ياباني يستخدم Switch Transformer. لديه نفس بنية النموذج الذي تم تقديمه على أنه Prefix LM في ورقة T5، ويدعم كل من مهام Text Generation و Masked Language Modeling. يمكن أيضًا ضبط هذه المهام الأساسية بشكل دقيق للترجمة أو الملخص. + +### مثال على الاستخدام +يمكن استخدام طريقة `generate()` لتوليد نص باستخدام نموذج GPTSAN-Japanese. + +```python +>>> from transformers import AutoModel, AutoTokenizer +>>> import torch + +>>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese") +>>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").cuda() +>>> x_tok = tokenizer("は、", prefix_text="織田信長", return_tensors="pt") +>>> torch.manual_seed(0) +>>> gen_tok = model.generate(x_tok.input_ids.cuda(), token_type_ids=x_tok.token_type_ids.cuda(), max_new_tokens=20) +>>> tokenizer.decode(gen_tok[0]) +'織田信長は、2004年に『戦国BASARA』のために、豊臣秀吉' +``` + +## ميزات GPTSAN +يتمتع GPTSAN ببعض الميزات الفريدة. فهو يتمتع ببنية نموذج Prefix-LM. يعمل كنموذج Masked Language Model منزاح للرموز المميزة للبادئة (Prefix Input tokens). وتتصرف المدخلات غير المميزة كنماذج توليدية عادية. + +Spout vector هو مدخل خاص بنموذج GPTSAN. تم تدريب Spout مسبقًا باستخدام مدخلات عشوائية، ولكن يمكنك تحديد فئة من النص أو متجهًا عشوائيًا أثناء الضبط الدقيق. يسمح لك ذلك بالإشارة إلى اتجاه النص المولد. + +يحتوي GPTSAN على طبقة توصيل متفرقة (Feed Forward) تعتمد على Switch-Transformer. يمكنك أيضًا إضافة طبقات أخرى وتدريبها بشكل جزئي. راجع مستودع GPTSAN الأصلي للحصول على التفاصيل. + +### نموذج Prefix-LM +يتمتع GPTSAN ببنية النموذج المسمى Prefix-LM في ورقة "T5". (يطلق عليه المستودع الأصلي لـ GPTSAN اسم "hybrid") + +في GPTSAN، يمكن تحديد جزء "Prefix" من Prefix-LM، أي موضع الإدخال الذي يمكن أن يرجع إليه كلا الرمزين، بأي طول. + +يمكن أيضًا تحديد أطوال مختلفة لكل دفعة. + +ينطبق هذا الطول على النص الذي تم إدخاله في `prefix_text` لـ tokenizer. + +تعيد tokenizer قناع جزء "Prefix" من Prefix-LM على أنه `token_type_ids`. + +يعامل النموذج الجزء الذي يكون فيه `token_type_ids` 1 كجزء "Prefix"، أي أن الإدخال يمكن أن يشير إلى كلا الرمزين قبل وبعد. + +## نصائح الاستخدام +يتم تحديد جزء البادئة باستخدام قناع يتم تمريره إلى self-attention. +عندما يكون token_type_ids=None أو كله أصفار، فهو مكافئ لقناع سببي منتظم + +على سبيل المثال: + +``` +>>> x_token = tokenizer("アイウエ") +input_ids: | SOT | SEG | ア | イ | ウ | エ | +token_type_ids: | 1 | 0 | 0 | 0 | 0 | 0 | +prefix_lm_mask: +SOT | 1 0 0 0 0 0 | +SEG | 1 1 0 0 0 0 | +ア | 1 1 1 0 0 0 | +イ | 1 1 1 1 0 0 | +ウ | 1 1 1 1 1 0 | +エ | 1 1 1 1 1 1 | + +>>> x_token = tokenizer("", prefix_text="アイウエ") +input_ids: | SOT | ア | イ | ウ | エ | SEG | +token_type_ids: | 1 | 1 | 1 | 1 | 1 | 0 | +prefix_lm_mask: +SOT | 1 1 1 1 1 0 | +ア | 1 1 1 1 1 0 | +イ | 1 1 1 1 1 0 | +ウ | 1 1 1 1 1 0 | +エ | 1 1 1 1 1 0 | +SEG | 1 1 1 1 1 1 | + +>>> x_token = tokenizer("ウエ", prefix_text="アイ") +input_ids: | SOT | ア | イ | SEG | ウ | エ | +token_type_ids: | 1 | 1 | 1 | 0 | 0 | 0 | +prefix_lm_mask: +SOT | 1 1 1 0 0 0 | +ア | 1 1 1 0 0 0 | +イ | 1 1 1 0 0 0 | +SEG | 1 1 1 1 0 0 | +ウ | 1 1 1 1 1 0 | +エ | 1 1 1 1 1 1 | +``` + +### Spout Vector +Spout Vector هو متجه خاص للتحكم في توليد النص. +يتم التعامل مع هذا المتجه على أنه أول تضمين في self-attention لجلب الانتباه الخارجي إلى الرموز المولدة. + +في النموذج المُدرب مسبقًا المنشور من `Tanrei/GPTSAN-japanese`، يكون Spout Vector عبارة عن متجه 128-بعدي يمر عبر 8 طبقات متصلة بالكامل في النموذج ويتم إسقاطه في الفضاء الذي يعمل كاهتمام خارجي. + +يتم تقسيم Spout Vector الذي تم إسقاطه بواسطة الطبقة المتصلة بالكامل لتمريره إلى جميع عمليات self-attention. + +## GPTSanJapaneseConfig +[[autodoc]] GPTSanJapaneseConfig + +## GPTSanJapaneseTokenizer +[[autodoc]] GPTSanJapaneseTokenizer + +## GPTSanJapaneseModel +[[autodoc]] GPTSanJapaneseModel + +## GPTSanJapaneseForConditionalGeneration +[[autodoc]] GPTSanJapaneseForConditionalGeneration + +- forward \ No newline at end of file From cf65f17a581d5fa316e0d633f64c6c20dae090a4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:48 +0300 Subject: [PATCH 454/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gpt=5Fbigcode.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gpt_bigcode.md | 94 +++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 docs/source/ar/model_doc/gpt_bigcode.md diff --git a/docs/source/ar/model_doc/gpt_bigcode.md b/docs/source/ar/model_doc/gpt_bigcode.md new file mode 100644 index 00000000000000..77d13d45f79e84 --- /dev/null +++ b/docs/source/ar/model_doc/gpt_bigcode.md @@ -0,0 +1,94 @@ +# GPTBigCode + +## نظرة عامة + +اقتُرح نموذج GPTBigCode في ورقة [SantaCoder: don't reach for the stars!](https://arxiv.org/abs/2301.03988) بواسطة BigCode. المؤلفون هم: Loubna Ben Allal, Raymond Li, Denis Kocetkov, Chenghao Mou, Christopher Akiki, Carlos Munoz Ferrandis, Niklas Muennighoff, Mayank Mishra, Alex Gu, Manan Dey, Logesh Kumar Umapathi, Carolyn Jane Anderson, Yangtian Zi, Joel Lamy Poirier, Hailey Schoelkopf, Sergey Troshin, Dmitry Abulkhanov, Manuel Romero, Michael Lappert, Francesco De Toni, Bernardo García del Río, Qian Liu, Shamik Bose, Urvashi Bhattacharyya, Terry Yue Zhuo, Ian Yu, Paulo Villegas, Marco Zocca, Sourab Mangrulkar, David Lansky, Huu Nguyen, Danish Contractor, Luis Villa, Jia Li, Dzmitry Bahdanau, Yacine Jernite, Sean Hughes, Daniel Fried, Arjun Guha, Harm de Vries, Leandro von Werra. + +ملخص الورقة هو كما يلي: + +*مشروع BigCode هو تعاون علمي مفتوح يعمل على التطوير المسؤول لنماذج اللغة الكبيرة للكود. ويصف هذا التقرير التقني التقدم الذي أحرزه التعاون حتى ديسمبر 2022، مُبرزًا الحالة الراهنة لأنبوب حجب المعلومات الشخصية (PII)، والتجارب التي أُجريت لتخفيف المخاطر عن بنية النموذج، والتجارب التي تبحث في طرق ما قبل المعالجة الأفضل لبيانات التدريب. نقوم بتدريب نماذج ذات 1.1 مليار معامل على مجموعات فرعية Java وJavaScript وPython من Stack وتقييمها على معيار MultiPL-E text-to-code. ونجد أن التصفية الأكثر عدوانية للنسخ المتماثلة القريبة يمكن أن تعزز الأداء بشكل أكبر، ومفاجئ، أن اختيار الملفات من المستودعات التي تحتوي على 5 نجوم GitHub أو أكثر يضر بالأداء بشكل كبير. يفوق نموذجنا الأفضل أداء نماذج إنشاء التعليمات البرمجية متعددة اللغات مفتوحة المصدر (InCoder-6.7B وCodeGen-Multi-2.7B) في كل من إنشاء من اليسار إلى اليمين والإكمال في الأجزاء Java وJavaScript وPython من MultiPL-E، على الرغم من كونه نموذجًا أصغر بكثير. يتم إصدار جميع النماذج بموجب ترخيص OpenRAIL في [هذا عنوان URL https.](https://huggingface.co/bigcode)* + +النموذج هو [نموذج GPT2](https://huggingface.co/docs/transformers/model_doc/gpt2) مُحسّن مع دعم Multi-Query Attention. + +## تفاصيل التنفيذ + +الفروق الرئيسية مقارنة بـ GPT2: + +- أضيف دعم Multi-Query Attention. +- استخدم `gelu_pytorch_tanh` بدلاً من `gelu` الكلاسيكي. +- تجنب المزامنات غير الضرورية (تمت إضافته منذ ذلك الحين إلى GPT2 في #20061، ولكنه لم يكن في كود المرجع). +- استخدم الطبقات الخطية بدلاً من Conv1D (تحسين جيد ولكنه يجعل نقاط التحقق غير متوافقة). +- دمج `_attn` و`_upcast_and_reordered_attn`. دائمًا قم بدمج الضرب النقطي مع التقييم. إعادة تسمية `reorder_and_upcast_attn`->`attention_softmax_in_fp32` +- قم بتخزين قناع الانتباه في الذاكرة المؤقتة لتجنب إعادة إنشائه في كل مرة. +- استخدم jit لدمج الانتباه fp32 casting وmasking وsoftmax وscaling. +- قم بدمج قناع الانتباه والقناع السببي في قناع واحد، محسوبة مسبقًا للنموذج بأكمله بدلاً من كل طبقة. +- دمج ذاكرة التخزين المؤقت الرئيسية وذاكرة التخزين المؤقت للقيمة في ذاكرة واحدة (يغير هذا تنسيق layer_past/present، فهل يخاطر ذلك بخلق مشاكل؟) +- استخدم تخطيط الذاكرة (self.num_heads، 3، self.head_dim) بدلاً من `(3، self.num_heads، self.head_dim)` لمصفوفة QKV مع MHA. (يمنع حدوث علو مع القيم الرئيسية والفرعية المدمجة، ولكنه يجعل نقاط التحقق غير متوافقة مع نموذج openai-community/gpt2 الأصلي). + +يمكنك قراءة المزيد حول التحسينات في [طلب السحب الأصلي](https://github.com/huggingface/transformers/pull/22575) + +## الجمع بين Starcoder وFlash Attention 2 + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الانزلاق. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لمستودع flash-attn. تأكد أيضًا من تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.float16`) + +لتحميل وتشغيل نموذج باستخدام Flash Attention 2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer +>>> device = "cuda" # الجهاز الذي سيتم تحميل النموذج عليه + +>>> model = AutoModelForCausalLM.from_pretrained("bigcode/gpt_bigcode-santacoder", torch_dtype=torch.float16, attn_implementation="flash_attention_2") +>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/gpt_bigcode-santacoder") + +>>> prompt = "def hello_world():" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to(device) +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=30, do_sample=False) +>>> tokenizer.batch_decode(generated_ids)[0] +'def hello_world():\n print("hello world")\n\nif __name__ == "__main__":\n print("hello world")\n<|endoftext|>' +``` + +### تسريع الأداء المتوقع + +فيما يلي رسم بياني لتسريع الأداء المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في transformers باستخدام نقطة تفتيش `bigcode/starcoder` وإصدار Flash Attention 2 من النموذج باستخدام طولين تسلسليين مختلفين. + +
+ +
+ +## GPTBigCodeConfig + +[[autodoc]] GPTBigCodeConfig + +## GPTBigCodeModel + +[[autodoc]] GPTBigCodeModel + +- forward + +## GPTBigCodeForCausalLM + +[[autodoc]] GPTBigCodeForCausا + +- forward + +## GPTBigCodeForSequenceClassification + +[[autodoc]] GPTBigCodeForSequenceClassification + +- forward + +## GPTBigCodeForTokenClassification + +[[autodoc]] GPTBigCodeForTokenClassification + +- forward \ No newline at end of file From 37b1cdfaf688dc92c4cd4c6a6677abcb20751747 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:50 +0300 Subject: [PATCH 455/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gpt=5Fneo.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gpt_neo.md | 131 ++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 docs/source/ar/model_doc/gpt_neo.md diff --git a/docs/source/ar/model_doc/gpt_neo.md b/docs/source/ar/model_doc/gpt_neo.md new file mode 100644 index 00000000000000..00bed543d9a200 --- /dev/null +++ b/docs/source/ar/model_doc/gpt_neo.md @@ -0,0 +1,131 @@ +# GPT Neo + +## نظرة عامة +نموذج GPTNeo تم إصداره في مستودع [EleutherAI/gpt-neo](https://github.com/EleutherAI/gpt-neo) بواسطة سيد بلاك، وستيلا بيدرمان، وليو جاو، وفيل وانج، وكونور ليهي. وهو نموذج لغوي توجيهي مشابه لـ GPT2، تم تدريبه على مجموعة بيانات [Pile](https://pile.eleuther.ai/). + +يتشابه التصميم المعماري لـ GPTNeo مع GPT2، باستثناء أن GPT Neo يستخدم الانتباه المحلي في كل طبقة أخرى بحجم نافذة يبلغ 256 رمزًا. + +تمت المساهمة بهذا النموذج بواسطة [valhalla](https://huggingface.co/valhalla). + +## مثال على الاستخدام +يمكن استخدام طريقة `generate()` لتوليد النص باستخدام نموذج GPT Neo. + +```python +>>> from transformers import GPTNeoForCausalLM, GPT2Tokenizer + +>>> model = GPTNeoForCausalLM.from_pretrained("EleutherAI/gpt-neo-1.3B") +>>> tokenizer = GPT2Tokenizer.from_pretrained("EleutherAI/gpt-neo-1.3B") + +>>> prompt = ( +... "In a shocking finding, scientists discovered a herd of unicorns living in a remote, " +... "previously unexplored valley, in the Andes Mountains. Even more surprising to the " +... "researchers was the fact that the unicorns spoke perfect English." +... ) + +>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids + +>>> gen_tokens = model.generate( +... input_ids, +... do_sample=True, +... temperature=0.9, +... max_length=100, +... ) +>>> gen_text = tokenizer.batch_decode(gen_tokens)[0] +``` + +## الجمع بين GPT-Neo وFlash Attention 2 + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة اهتمام نافذة الانزلاق، وتأكد من أن أجهزتك متوافقة مع Flash-Attention 2. تتوفر المزيد من التفاصيل [هنا](https://huggingface.co/docs/transformers/perf_infer_gpu_one#flashattention-2) حول التثبيت. + +تأكد أيضًا من تحميل نموذجك بنصف الدقة (على سبيل المثال `torch.float16`). + +لتحميل وتشغيل نموذج باستخدام Flash Attention 2، راجع المقطع أدناه: + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer +>>> device = "cuda" # the device to load the model onto + +>>> model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-neo-2.7B", torch_dtype=torch.float16, attn_implementation="flash_attention_2") +>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neo-2.7B") + +>>> prompt = "def hello_world():" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to(device) +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"def hello_world():\n\t>>> run_script(\"hello.py\")\n\t>>> exit(0)\n<|endoftext|>" +``` + +### تسريع المتوقع + +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستنتاج النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `EleutherAI/gpt-neo-2.7B` وإصدار Flash Attention 2 من النموذج. + +لاحظ أنه بالنسبة لـ GPT-Neo، لا يمكن التدريب / التشغيل على سياق طويل جدًا حيث تكون القيمة القصوى [تضمين الموضع](https://huggingface.co/EleutherAI/gpt-neo-2.7B/blob/main/config.json#L58) محدودة بـ 2048 - ولكن هذا ينطبق على جميع النماذج gpt-neo وليس محددًا لـ FA-2. + +
+ +
+ +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +## GPTNeoConfig + +[[autodoc]] GPTNeoConfig + + + + +## GPTNeoModel + +[[autodoc]] GPTNeoModel + +- forword + +## GPTNeoForCausalLM + +[[autodoc]] GPTNeoForCausalLM + +- forword + +## GPTNeoForQuestionAnswering + +[[autodoc]] GPTNeoForQuestionAnswering + +- forword + +## GPTNeoForSequenceClassification + +[[autodoc]] GPTNeoForSequenceClassification + +- forword + +## GPTNeoForTokenClassification + +[[autodoc]] GPTNeoForTokenClassification + +- forword + + + + +## FlaxGPTNeoModel + +[[autodoc]] FlaxGPTNeoModel + +- __call__ + +## FlaxGPTNeoForCausalLM + +[[autodoc]] FlaxGPTNeoForCausalLM + +- __call__ + + + + \ No newline at end of file From 0bda8c04848261c0c50de95fc16eb0565f8c7e1c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:52 +0300 Subject: [PATCH 456/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gpt=5Fneox.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gpt_neox.md | 177 +++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 docs/source/ar/model_doc/gpt_neox.md diff --git a/docs/source/ar/model_doc/gpt_neox.md b/docs/source/ar/model_doc/gpt_neox.md new file mode 100644 index 00000000000000..b34f018cc50a3c --- /dev/null +++ b/docs/source/ar/model_doc/gpt_neox.md @@ -0,0 +1,177 @@ +# GPT-NeoX + +## نظرة عامة + +نحن نقدم GPT-NeoX-20B، وهو نموذج لغة احتمالي ذو 20 مليار معامل تم تدريبه على Pile، وستكون أوزانه متاحة بحرية وعلانية للجمهور من خلال ترخيص متساهل. وهو، على حد علمنا، أكبر نموذج احتمالي كثيف متاح للجمهور في وقت تقديمه. في هذا العمل، نصف بنية GPT-NeoX-20B والتدريب ونقيم أداءه على مجموعة من مهام فهم اللغة والرياضيات والمعرفة. نجد أن GPT-NeoX-20B هو سبب قوي للغاية ويحقق مكاسب أكبر بكثير في الأداء عند تقييمه بخمسة تسديدات مقارنة بنماذج GPT-3 و FairSeq ذات الحجم المماثل. نقوم بإتاحة المصدر المفتوح لتعليمات البرمجية للتدريب والتقييم، بالإضافة إلى أوزان النموذج، على [https://github.com/EleutherAI/gpt-neox](https://github.com/EleutherAI/gpt-neox). + +تمت قيادة تطوير النموذج بواسطة Sid Black وStella Biderman وEric Hallahan، وتم تدريب النموذج بدعم سخي من [CoreWeave](https://www.coreweave.com/). + +تم تدريب GPT-NeoX-20B باستخدام fp16، لذلك يوصى بتهيئة النموذج على النحو التالي: + +```python +model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b").half().cuda() +``` + +لدى GPT-NeoX-20B أيضًا محدد مواقع مختلف عن المحدد المستخدم في GPT-J-6B وGPT-Neo. يقوم محدد المواقع الجديد بتخصيص رموز إضافية لمحارف المسافة البيضاء، مما يجعل النموذج أكثر ملاءمة لمهام معينة مثل توليد التعليمات البرمجية. + +## مثال على الاستخدام + +يمكن استخدام طريقة `generate()` لتوليد نص باستخدام نموذج GPT Neo. + +```python +>>> from transformers import GPTNeoXForCausalLM, GPTNeoXTokenizerFast + +>>> model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b") +>>> tokenizer = GPTNeoXTokenizerFast.from_pretrained("EleutherAI/gpt-neox-20b") + +>>> prompt = "GPTNeoX20B is a 20B-parameter autoregressive Transformer model developed by EleutherAI." + +>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids + +>>> gen_tokens = model.generate( +... input_ids, +... do_sample=True, +... temperature=0.9, +... max_length=100, +... ) +>>> gen_text = tokenizer.batch_decode(gen_tokens)[0]``` + +## استخدام Flash Attention 2 + +Flash Attention 2 هو إصدار أسرع وأكثر تحسينًا من النموذج. + +### التثبيت + +أولاً، تحقق مما إذا كان جهازك متوافقًا مع Flash Attention 2. يمكن العثور على أحدث قائمة بالأجهزة المتوافقة في [الوثائق الرسمية](https://github.com/Dao-AILab/flash-attention#installation-and-features). إذا لم يكن جهازك متوافقًا مع Flash Attention 2، فيمكنك الاستفادة من تحسينات نواة الاهتمام من خلال دعم Better Transformer المشمول [أعلاه](https://huggingface.co/docs/transformers/main/en/model_doc/bark#using-better-transformer). + +بعد ذلك، قم بتثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +### الاستخدام + +لتحميل نموذج باستخدام Flash Attention 2، يمكننا تمرير الحجة `attn_implementation="flash_attention_2"` إلى [`.from_pretrained`](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained). سنقوم أيضًا بتحميل النموذج في نصف الدقة (على سبيل المثال `torch.float16`)، حيث يؤدي ذلك إلى تقليل استخدام الذاكرة وسرعة الاستدلال بشكل كبير دون أي تدهور تقريبًا في جودة الصوت: + +```python +>>> from transformers import GPTNeoXForCausalLM, GPTNeoXTokenizerFast + +model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to(device) +... +``` + +### تسريع الأداء المتوقع + +فيما يلي رسم بياني لتسريع الأداء المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `stockmark/gpt-neox-japanese-1.4b` وإصدار Flash Attention 2 من النموذج باستخدام طول تسلسل يبلغ 2048. + +
+ +
+ + +## Using Scaled Dot Product Attention (SDPA) + +يتضمن PyTorch عامل تشغيل أصلي لمنتج النقطة (SDPA) كجزء من "torch.nn.functional". هذه الوظيفة +يشمل العديد من التطبيقات التي يمكن تطبيقها اعتمادًا على المدخلات والأجهزة المستخدمة. انظر +[الوثائق الرسمية](https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) +أو [استدلال وحدة معالجة الرسومات](https://huggingface.co/docs/transformers/main/en/perf_infer_gpu_one#pytorch-scaled-dot-product-attention) +الصفحة لمزيد من المعلومات. + +يتم استخدام SDPA افتراضيًا لـ `torch>=2.1.1` عندما يكون التنفيذ متاحًا، ولكن يمكنك أيضًا تعيين +`attn_implementation="sdpa"` في `from_pretrained()` لطلب استخدام SDPA بشكل صريح. + +```python +from transformers import GPTNeoXForCausalLM +model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", torch_dtype=torch.float16, attn_implementation="sdpa") +... +``` + +للحصول على أفضل عمليات التسريع، نوصي بتحميل النموذج بنصف الدقة (على سبيل المثال، `torch.float16` أو `torch.bfloat16`). + +على معيار محلي (rtx3080ti-16GB، PyTorch 2.2.1، OS Ubuntu 22.04) باستخدام 'float16' مع +[pythia-410m-deduped](https://huggingface.co/EleutherAI/pythia-410m-deduped)، رأينا +متابعة التسريعات أثناء التدريب والاستدلال. + + +### Training +| Batch size | Seq len | Time per batch (Eager - s) | Time per batch (SDPA - s) | Speedup (%) | Eager peak mem (MB) | SDPA peak mem (MB) | Mem saving (%) | +|-----------:|-----------:|---------------------------:|-----------------------------:|------------:|--------------------:|-------------------:|------------------:| +| 1 | 128 | 0.024 | 0.019 | 28.945 | 1789.95 | 1789.95 | 0 | +| 1 | 256 | 0.039 | 0.031 | 23.18 | 1845.83 | 1844.84 | 0.053 | +| 1 | 512 | 0.08 | 0.055 | 45.524 | 2278.38 | 1953.76 | 16.615 | +| 1 | 1024 | 0.19 | 0.102 | 86.777 | 4772.36 | 2408.35 | 98.159 | +| 1 | 2048 | 0.565 | 0.204 | 177.098 | 13484.1 | 3882.01 | 247.348 | +| 2 | 128 | 0.037 | 0.032 | 15.121 | 1843.86 | 1844.78 | -0.05 | +| 2 | 256 | 0.067 | 0.055 | 21.706 | 1999.72 | 1951.67 | 2.462 | +| 2 | 512 | 0.144 | 0.096 | 50.046 | 3613.16 | 2406.77 | 50.125 | +| 2 | 1024 | 0.366 | 0.193 | 89.666 | 8707.55 | 3878.86 | 124.487 | +| 2 | 2048 | OOM | 0.379 | / | OOM | 6825.13 | SDPA does not OOM | +| 4 | 128 | 0.06 | 0.054 | 11.539 | 1947.6 | 1952.06 | -0.228 | +| 4 | 256 | 0.119 | 0.093 | 28.072 | 3008.39 | 2405.99 | 25.038 | +| 4 | 512 | 0.275 | 0.187 | 47.145 | 6290.58 | 3877.29 | 62.242 | +| 4 | 1024 | OOM | 0.36 | / | OOM | 6821.98 | SDPA does not OOM | +| 4 | 2048 | OOM | 0.731 | / | OOM | 12705.1 | SDPA does not OOM | + +### Inference +| Batch size | Seq len | Per token latency Eager (ms) | Per token latency SDPA (ms) | Speedup (%) | Mem Eager (MB) | Mem SDPA (MB) | Mem saved (%) | +|--------------:|-------------:|--------------------------------:|-------------------------------:|---------------:|------------------:|----------------:|-----------------:| +| 1 | 128 | 6.569 | 5.858 | 12.14 | 974.831 | 974.826 | 0 | +| 1 | 256 | 7.009 | 5.863 | 19.542 | 1029.01 | 1028.08 | 0.09 | +| 1 | 512 | 7.157 | 5.965 | 19.983 | 1137.54 | 1137.52 | 0.001 | +| 1 | 1024 | 7.523 | 6.506 | 15.637 | 1329.3 | 1329.26 | 0.003 | +| 1 | 2048 | 9.271 | 9.205 | 0.713 | 1752.47 | 1734.51 | 1.036 | +| 2 | 128 | 7.239 | 5.959 | 21.493 | 1044.8 | 1028.37 | 1.597 | +| 2 | 256 | 7.228 | 6.036 | 19.757 | 1167.32 | 1137.73 | 2.601 | +| 2 | 512 | 7.538 | 6.693 | 12.628 | 1352.93 | 1329.55 | 1.758 | +| 2 | 1024 | 8.916 | 8.632 | 3.291 | 1752.56 | 1734.62 | 1.034 | +| 2 | 2048 | 12.628 | 12.606 | 0.181 | 2558.72 | 2545.8 | 0.508 | +| 4 | 128 | 7.278 | 6.046 | 20.373 | 1168.41 | 1137.79 | 2.691 | +| 4 | 256 | 7.614 | 6.588 | 15.574 | 1353.1 | 1329.79 | 1.753 | +| 4 | 512 | 8.798 | 8.144 | 8.028 | 1752.76 | 1734.85 | 1.032 | +| 4 | 1024 | 11.765 | 11.303 | 4.09 | 2558.96 | 2546.04 | 0.508 | +| 4 | 2048 | 19.568 | 17.735 | 10.33 | 4175.5 | 4165.26 | 0.246 | + + + +## الموارد + +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) + +## GPTNeoXConfig + +[[autodoc]] GPTNeoXConfig + +## GPTNeoXTokenizerFast + +[[autodoc]] GPTNeoXTokenizerFast + +## GPTNeoXModel + +[[autodoc]] GPTNeoXModel + +- forward + +## GPTNeoXForCausalLM + +[[autodoc]] GPTNeoXForCausalLM + +- forward + +## GPTNeoXForQuestionAnswering + +[[autodoc]] GPTNeoXForQuestionAnswering + +- forward + +## GPTNeoXForSequenceClassification + +[[autodoc]] GPTNeoXForSequenceClassification + +- forward + +## GPTNeoXForTokenClassification + +[[autodoc]] GPTNeoXForTokenClassification + +- forward \ No newline at end of file From 2b1a274e2b9191fd76c1836e89646bfdc9acbb56 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:54 +0300 Subject: [PATCH 457/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/gpt=5Fneox=5Fjapanese.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/gpt_neox_japanese.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/source/ar/model_doc/gpt_neox_japanese.md diff --git a/docs/source/ar/model_doc/gpt_neox_japanese.md b/docs/source/ar/model_doc/gpt_neox_japanese.md new file mode 100644 index 00000000000000..2f01ca61a6ce38 --- /dev/null +++ b/docs/source/ar/model_doc/gpt_neox_japanese.md @@ -0,0 +1,63 @@ +# GPT-NeoX-Japanese + +## نظرة عامة + +نحن نقدم GPT-NeoX-Japanese، وهو نموذج لغة مولّد للغة اليابانية، تم تدريبه بناءً على [https://github.com/EleutherAI/gpt-neox](https://github.com/EleutherAI/gpt-neox). + +تتميز اللغة اليابانية بأنها لغة فريدة من نوعها، حيث تمتلك مفردات كبيرة ومزيجًا من أنماط الكتابة هيراغانا، وكاتاكانا، وكانجي. + +لمعالجة هذا البناء المميز للغة اليابانية، نستخدم [محللًا نحويًا خاصًا للكلمات الفرعية](https://github.com/tanreinama/Japanese-BPEEncoder_V2). ونحن ممتنون للغاية لـ *tanreinama* على إتاحته لمحلل الكلمات هذا مفتوح المصدر، والذي كان مفيدًا للغاية. + +وبناءً على التوصيات المنبثقة عن بحث Google حول [PaLM](https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html)، قمنا بإزالة معلمات التحيز من كتل المحول، مما أدى إلى تحسين أداء النموذج. يرجى الرجوع إلى [هذه المقالة](https://medium.com/ml-abeja/training-a-better-gpt-2-93b157662ae4) لمزيد من التفاصيل. + +تمت قيادة عملية تطوير النموذج من قبل [شينيا أوتاني](https://github.com/SO0529)، و[تاكايوشي ماكابي](https://github.com/spider-man-tm)، و[أنوج أرورا](https://github.com/Anuj040)، و[كيو هاتوري](https://github.com/go5paopao) من [شركة ABEJA](https://www.abejainc.com/). لمزيد من المعلومات حول نشاط بناء النموذج هذا، يرجى الرجوع إلى [هنا (ja)](https://tech-blog.abeja.asia/entry/abeja-gpt-project-202207). + +### مثال على الاستخدام + +يمكن استخدام الدالة `generate()` لتوليد نص باستخدام نموذج GPT NeoX Japanese. + +```python +>>> from transformers import GPTNeoXJapaneseForCausalLM, GPTNeoXJapaneseTokenizer + +>>> model = GPTNeoXJapaneseForCausalLM.from_pretrained("abeja/gpt-neox-japanese-2.7b") +>>> tokenizer = GPTNeoXJapaneseTokenizer.from_pretrained("abeja/gpt-neox-japanese-2.7b") + +>>> prompt = "人とAIが協調するためには、" + +>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids + +>>> gen_tokens = model.generate( +... input_ids, +... do_sample=True, +... temperature=0.9, +... max_length=100, +... ) +>>> gen_text = tokenizer.batch_decode(gen_tokens, skip_special_tokens=True)[0] + +>>> print(gen_text) +AI との共存を実現し、AI を正しく理解することが必要です。 +``` + +## الموارد + +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) + +## GPTNeoXJapaneseConfig + +[[autodoc]] GPTNeoXJapaneseConfig + +## GPTNeoXJapaneseTokenizer + +[[autodoc]] GPTNeoXJapaneseTokenizer + +## GPTNeoXJapaneseModel + +[[autodoc]] GPTNeoXJapaneseModel + +- forward + +## GPTNeoXJapaneseForCausalLM + +[[autodoc]] GPTNeoXJapaneseForCausalLM + +- forward \ No newline at end of file From 4954bd422a062b3a172c4313d34e0ebc5240d387 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:55 +0300 Subject: [PATCH 458/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/grounding-dino.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/grounding-dino.md | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/source/ar/model_doc/grounding-dino.md diff --git a/docs/source/ar/model_doc/grounding-dino.md b/docs/source/ar/model_doc/grounding-dino.md new file mode 100644 index 00000000000000..afadd53974a832 --- /dev/null +++ b/docs/source/ar/model_doc/grounding-dino.md @@ -0,0 +1,98 @@ +# Grounding DINO + +## نظرة عامة + +اقتُرح نموذج Grounding DINO في ورقة بحثية بعنوان "Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection" من قبل Shilong Liu وآخرون. يوسع Grounding DINO نموذج اكتشاف الكائنات المغلق باستخدام مشفر نصي، مما يمكّن اكتشاف الكائنات المفتوح. ويحقق النموذج نتائج ملحوظة، مثل 52.5 AP على COCO zero-shot. + +ملخص الورقة البحثية هو كما يلي: + +> "في هذه الورقة، نقدم مكتشف كائنات مفتوح يسمى Grounding DINO، من خلال دمج مكتشف الكائنات القائم على Transformer DINO مع التدريب المسبق المستند إلى النص، والذي يمكنه اكتشاف الكائنات التعسفية مع مدخلات بشرية مثل أسماء الفئات أو التعبيرات المرجعية. يتمثل الحل الرئيسي لاكتشاف الكائنات المفتوح في تقديم اللغة إلى مكتشف الكائنات المغلق من أجل تعميم مفهوم المجموعة المفتوحة. ولدمج أوضاع اللغة والرؤية بشكل فعال، نقسم مفهومًا مكتشفًا مغلقًا إلى ثلاث مراحل ونقترح حل دمج محكم، والذي يتضمن محسن ميزات، واختيار استعلام موجه باللغة، وفك تشفير متعدد الوسائط لفك تشفير متعدد الوسائط. في حين أن الأعمال السابقة تقيم بشكل أساسي اكتشاف الكائنات المفتوح على الفئات الجديدة، نقترح أيضًا إجراء تقييمات على فهم التعبيرات المرجعية للكائنات المحددة بالسمات. يعمل Grounding DINO بشكل جيد للغاية في جميع الإعدادات الثلاثة، بما في ذلك المعايير المرجعية على COCO وLVIS وODinW وRefCOCO/+/g. يحقق Grounding DINO 52.5 AP على معيار نقل اكتشاف COCO zero-shot، أي بدون أي بيانات تدريب من COCO. ويحقق رقماً قياسياً جديداً على معيار ODinW zero-shot بمتوسط 26.1 AP." + + + + نظرة عامة على Grounding DINO. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل EduardoPacheco وnielsr. يمكن العثور على الكود الأصلي [هنا](https://github.com/IDEA-Research/GroundingDINO). + +## نصائح الاستخدام + +- يمكن استخدام [`GroundingDinoProcessor`] لإعداد أزواج الصور والنصوص للنموذج. +- لفصل الفئات في النص، استخدم فترة، على سبيل المثال "قطة. كلب." +- عند استخدام فئات متعددة (على سبيل المثال "قطة. كلب.")، استخدم `post_process_grounded_object_detection` من [`GroundingDinoProcessor`] لمعالجة الإخراج. نظرًا لأن التسميات التي تم إرجاعها من `post_process_object_detection` تمثل المؤشرات من بُعد النموذج حيث تكون الاحتمالية أكبر من العتبة. + +فيما يلي كيفية استخدام النموذج للكشف عن الكائنات بدون الإشراف: + +```python +import requests + +import torch +from PIL import Image +from transformers import AutoProcessor, AutoModelForZeroShotObjectDetection, + +model_id = "IDEA-Research/grounding-dino-tiny" + +processor = AutoProcessor.from_pretrained(model_id) +model = AutoModelForZeroShotObjectDetection.from_pretrained(model_id).to(device) + +image_url = "http://images.cocodataset.org/val2017/000000039769.jpg" +image = Image.open(requests.get(image_url, stream=True).raw) +# Check for cats and remote controls +text = "a cat. a remote control." + +inputs = processor(images=image, text=text, return_tensors="pt").to(device) +with torch.no_grad(): + outputs = model(**inputs) + +results = processor.post_process_grounded_object_detection( + outputs, + inputs.input_ids, + box_threshold=0.4, + text_threshold=0.3, + target_sizes=[image.size[::-1]] +) +``` + +## Grounded SAM + +يمكنك دمج Grounding DINO مع نموذج [Segment Anything](sam) للتنقيب القائم على النص كما هو مقدم في ورقة "Grounded SAM: Assembling Open-World Models for Diverse Visual Tasks". يمكنك الرجوع إلى هذا [دفتر الملاحظات التوضيحي](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Grounding%20DINO/GroundingDINO_with_Segment_Anything.ipynb) 🌍 للحصول على التفاصيل. + + + + نظرة عامة على Grounded SAM. مأخوذة من المستودع الأصلي. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Grounding DINO. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- يمكن العثور على دفاتر الملاحظات التوضيحية المتعلقة بالاستدلال باستخدام Grounding DINO، وكذلك دمجه مع [SAM](sam) [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Grounding%20DINO). 🌎 + +## GroundingDinoImageProcessor + +[[autodoc]] GroundingDinoImageProcessor + +- preprocess +- post_process_object_detection + +## GroundingDinoProcessor + +[[autodoc]] GroundingDinoProcessor + +- post_process_grounded_object_detection + +## GroundingDinoConfig + +[[autodoc]] GroundingDinoConfig + +## GroundingDinoModel + +[[autodoc]] GroundingDinoModel + +- forward + +## GroundingDinoForObjectDetection + +[[autodoc]] GroundingDinoForObjectDetection + +- forward \ No newline at end of file From 7e2f1e5dcc2ae55e663054568419b90bb390d05b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:57 +0300 Subject: [PATCH 459/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/groupvit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/groupvit.md | 98 ++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/source/ar/model_doc/groupvit.md diff --git a/docs/source/ar/model_doc/groupvit.md b/docs/source/ar/model_doc/groupvit.md new file mode 100644 index 00000000000000..f63b72f252035d --- /dev/null +++ b/docs/source/ar/model_doc/groupvit.md @@ -0,0 +1,98 @@ +# GroupViT + +## نظرة عامة + +اقترح نموذج GroupViT في [GroupViT: Semantic Segmentation Emerges from Text Supervision](https://arxiv.org/abs/2202.11094) بواسطة Jiarui Xu, Shalini De Mello, Sifei Liu, Wonmin Byeon, Thomas Breuel, Jan Kautz, Xiaolong Wang. + +استوحى من [CLIP](clip)، GroupViT هو نموذج للرؤية اللغوية يمكنه أداء تجزئة دلالية بدون الإشراف على أي فئات معجمية معينة. + +المستخلص من الورقة هو ما يلي: + +*يعد التجميع والتعرف على المكونات المهمة لفهم المشهد المرئي، على سبيل المثال، للكشف عن الأشياء والتجزئة الدلالية. مع أنظمة التعلم العميق من البداية إلى النهاية، يحدث تجميع مناطق الصورة عادة بشكل ضمني عبر الإشراف من أعلى إلى أسفل من علامات التعرف على مستوى البكسل. بدلاً من ذلك، في هذه الورقة، نقترح إعادة آلية التجميع إلى الشبكات العصبية العميقة، والتي تسمح للشرائح الدلالية بالظهور تلقائيًا مع الإشراف النصي فقط. نقترح مجموعة هرمية من محول الرؤية (GroupViT)، والتي تتجاوز تمثيل هيكل الشبكة المنتظمة وتتعلم تجميع مناطق الصورة في شرائح ذات أشكال تعسفية أكبر تدريجيًا. نقوم بتدريب GroupViT بشكل مشترك مع مشفر نصي على مجموعة بيانات نصية للصور واسعة النطاق عبر الخسائر التباينية. بدون أي ملاحظات على مستوى البكسل، يتعلم GroupViT تجميع المناطق الدلالية معًا وينتقل بنجاح إلى مهمة التجزئة الدلالية بطريقة بدون إشراف، أي بدون أي ضبط دقيق إضافي. يحقق دقة بدون إشراف تبلغ 52.3% mIoU على مجموعة بيانات PASCAL VOC 2012 و22.4% mIoU على مجموعة بيانات PASCAL Context، وينافس طرق التعلم عن طريق النقل التي تتطلب مستويات أعلى من الإشراف.* + +ساهم بهذا النموذج [xvjiarui](https://huggingface.co/xvjiarui). ساهم في إصدار TensorFlow بواسطة [ariG23498](https://huggingface.co/ariG23498) بمساعدة [Yih-Dar SHIEH](https://huggingface.co/ydshieh) و[Amy Roberts](https://huggingface.co/amyeroberts) و[Joao Gante](https://huggingface.co/joaogante). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/NVlabs/GroupViT). + +## نصائح الاستخدام + +- يمكنك تحديد `output_segmentation=True` في الأمام من `GroupViTModel` للحصول على logits التجزئة للنصوص المدخلة. + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام GroupViT. + +- أسرع طريقة للبدء في استخدام GroupViT هي التحقق من [دفاتر الملاحظات التوضيحية](https://github.com/xvjiarui/GroupViT/blob/main/demo/GroupViT_hf_inference_notebook.ipynb) (والتي تعرض الاستدلال على التجزئة بدون إشراف). + +- يمكنك أيضًا الاطلاع على [تجربة HuggingFace Spaces](https://huggingface.co/spaces/xvjiarui/GroupViT) للعب مع GroupViT. + +## GroupViTConfig + +[[autodoc]] GroupViTConfig + +- from_text_vision_configs + +## GroupViTTextConfig + +[[autodoc]] GroupViTTextConfig + +## GroupViTVisionConfig + +[[autodoc]] GroupViTVisionConfig + + + + + +## GroupViTModel + +[[autodoc]] GroupViTModel + +- forward + +- get_text_features + +- get_image_features + +## GroupViTTextModel + +[[autodoc]] GroupViTTextModel + +- forward + +## GroupViTVisionModel + +[[autodoc]] GroupViTVisionModel + +- forward + + + + + +## TFGroupViTModel + +[[autodoc]] TFGroupViTModel + +- call + +- get_text_features + +- get_image_features + +## TFGroupViTTextModel + + +[[autodoc]] TFGroupViTTextModel + +- call + +## TFGroupViTVisionModel + +[[autodoc]] TFGroupViTVisionModel + +- call + + + + \ No newline at end of file From 07adb6db7696a81af1fc0c49ee4c80e82f14a3e4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:25:59 +0300 Subject: [PATCH 460/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/herbert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/herbert.md | 43 +++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/source/ar/model_doc/herbert.md diff --git a/docs/source/ar/model_doc/herbert.md b/docs/source/ar/model_doc/herbert.md new file mode 100644 index 00000000000000..bdb3b8ad6702f2 --- /dev/null +++ b/docs/source/ar/model_doc/herbert.md @@ -0,0 +1,43 @@ +# HerBERT + +## نظرة عامة +تم اقتراح نموذج HerBERT في الورقة البحثية [KLEJ: Comprehensive Benchmark for Polish Language Understanding](https://www.aclweb.org/anthology/2020.acl-main.111.pdf) بواسطة Piotr Rybak, Robert Mroczkowski, Janusz Tracz, و Ireneusz Gawlik. وهو نموذج لغة يعتمد على BERT تم تدريبه على نصوص اللغة البولندية باستخدام هدف MLM مع التمويه الديناميكي للكلمات الكاملة. + +الملخص المستخرج من الورقة البحثية هو كما يلي: + +*في السنوات الأخيرة، حققت سلسلة من النماذج القائمة على محول تحسينات كبيرة في مهام فهم اللغة الطبيعية العامة (NLU). إن وتيرة البحث السريعة هذه ما كانت لتكون ممكنة بدون معايير NLU العامة، والتي تسمح بمقارنة عادلة للطرق المقترحة. ومع ذلك، فإن هذه المعايير متاحة لعدد قليل من اللغات فقط. وللتخفيف من هذه المشكلة، نقدم معيارًا متعدد المهام شاملًا لفهم اللغة البولندية، مصحوبًا بلوحة قيادة عبر الإنترنت. ويتكون من مجموعة متنوعة من المهام، تم تبنيها من مجموعات البيانات الحالية للتعرف على الكيانات المسماة، والأسئلة والأجوبة، والاستدلال النصي، وغيرها. كما نقدم مهمة جديدة لتحليل المشاعر لمجال التجارة الإلكترونية، تسمى Allegro Reviews (AR). ولضمان وجود مخطط تقييم مشترك وتشجيع النماذج التي تعمم على مهام NLU المختلفة، يتضمن المعيار مجموعات بيانات من مجالات وتطبيقات مختلفة. بالإضافة إلى ذلك، نقدم HerBERT، وهو نموذج محول تم تدريبه خصيصًا للغة البولندية، والذي يحقق أفضل أداء متوسط ويحصل على أفضل النتائج في ثلاث مهام من أصل تسع مهام. وأخيرًا، نقدم تقييمًا شاملاً، بما في ذلك العديد من خطوط الأساس القياسية والنماذج متعددة اللغات المقترحة مؤخرًا والقائمة على المحول.* + +تمت المساهمة بهذا النموذج من قبل [rmroczkowski](https://huggingface.co/rmroczkowski). يمكن العثور على الكود الأصلي [هنا](https://github.com/allegro/HerBERT). + +## مثال على الاستخدام + +```python +>>> from transformers import HerbertTokenizer, RobertaModel + +>>> tokenizer = HerbertTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1") +>>> model = RobertaModel.from_pretrained("allegro/herbert-klej-cased-v1") + +>>> encoded_input = tokenizer.encode("Kto ma lepszą sztukę, ma lepszy rząd – to jasne.", return_tensors="pt") +>>> outputs = model(encoded_input) + +>>> # يمكن أيضًا تحميل HerBERT باستخدام AutoTokenizer وAutoModel: +>>> import torch +>>> from transformers import AutoModel, AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1") +>>> model = AutoModel.from_pretrained("allegro/herbert-klej-cased-v1") +``` + + + +يتماثل تنفيذ Herbert مع تنفيذ `BERT` باستثناء طريقة التمييز. راجع [توثيق BERT](bert) للحصول على مرجع API وأمثلة. + + + +## HerbertTokenizer + +[[autodoc]] HerbertTokenizer + +## HerbertTokenizerFast + +[[autodoc]] HerbertTokenizerFast \ No newline at end of file From 5562d34dec80824c5bb13aa174c46e1a5f776ec2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:01 +0300 Subject: [PATCH 461/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/hubert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/hubert.md | 97 ++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 docs/source/ar/model_doc/hubert.md diff --git a/docs/source/ar/model_doc/hubert.md b/docs/source/ar/model_doc/hubert.md new file mode 100644 index 00000000000000..b296f809ad8757 --- /dev/null +++ b/docs/source/ar/model_doc/hubert.md @@ -0,0 +1,97 @@ +# Hubert + +## نظرة عامة + +اقترح Hubert في [HuBERT: Self-Supervised Speech Representation Learning by Masked Prediction of Hidden Units](https://arxiv.org/abs/2106.07447) بواسطة Wei-Ning Hsu, Benjamin Bolte, Yao-Hung Hubert Tsai, Kushal Lakhotia, Ruslan Salakhutdinov, Abdelrahman Mohamed. + +مقدمة الورقة البحثية هي التالية: + +> تواجه الأساليب ذاتية الإشراف لتعلم تمثيل الكلام ثلاث مشكلات فريدة: (1) هناك وحدات صوت متعددة في كل عبارة مدخلة، (2) لا توجد قائمة مصطلحات لوحدات الصوت المدخلة أثناء مرحلة التدريب المسبق، (3) لوحدات الصوت أطوال متغيرة بدون تجزئة صريحة. وللتعامل مع هذه المشكلات الثلاث، نقترح نهج BERT المخفي (HuBERT) لتعلم تمثيل الكلام ذاتي الإشراف، والذي يستخدم خطوة تجميع غير متصلة لتوفير تسميات مستهدفة محاذاة لخسارة التنبؤ على غرار BERT. المكون الرئيسي لنهجنا هو تطبيق خسارة التنبؤ على المناطق المُقنَّعة فقط، مما يجبر النموذج على تعلم نموذج صوتي ولغوي مجمع على المدخلات المستمرة. يعتمد HuBERT بشكل أساسي على اتساق خطوة التجميع غير الخاضعة للإشراف بدلاً من الجودة الجوهرية لعلامات التصنيف المعينة. بدءًا من معلم k-means البسيط لـ 100 مجموعة، واستخدام تكرارين من التجميع، فإن نموذج HuBERT إما يتطابق مع أداء wav2vec 2.0 المميز أو يحسنه في معايير Librispeech (960h) و Libri-light (60,000h) مع مجموعات ضبط دقيق فرعية لمدة 10 دقائق و 1 ساعة و 10 ساعات و 100 ساعة و 960 ساعة. باستخدام نموذج معلمات 1B، يُظهر HuBERT انخفاضًا نسبيًا في WER يصل إلى 19% و13% على مجموعات التقييم الأكثر تحديًا dev-other وtest-other. + +تمت المساهمة بهذا النموذج من قبل [patrickvonplaten](https://huggingface.co/patrickvonplaten). + +# نصائح الاستخدام + +- Hubert هو نموذج كلام يقبل مصفوفة عائمة تتوافق مع شكل الموجة الخام لإشارة الكلام. +- تم ضبط نموذج Hubert الدقيق باستخدام التصنيف الزمني للاتصال (CTC)، لذلك يجب فك تشفير إخراج النموذج باستخدام [`Wav2Vec2CTCTokenizer`]. + +## استخدام Flash Attention 2 + +Flash Attention 2 هو إصدار أسرع وأكثر تحسينًا من النموذج. + +### التثبيت + +أولاً، تحقق مما إذا كان الأجهزة الخاصة بك متوافقة مع Flash Attention 2. يمكن العثور على أحدث قائمة بالأجهزة المتوافقة في [الوثائق الرسمية](https://github.com/Dao-AILab/flash-attention#installation-and-features). إذا لم يكن الأجهزة الخاص بك متوافقًا مع Flash Attention 2، فيمكنك الاستفادة من تحسينات نواة الاهتمام من خلال دعم Transformer الأفضل المشمولة [أعلاه](https://huggingface.co/docs/transformers/main/en/model_doc/bark#using-better-transformer). + +بعد ذلك، قم بتثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +### الاستخدام + +فيما يلي مخطط تسريع متوقع يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات من `facebook/hubert-large-ls960-ft`، وflash-attention-2، وإصدار sdpa (scale-dot-product-attention). نعرض متوسط التسريع الذي تم الحصول عليه على تقسيم التحقق `clean` من `librispeech_asr`: + +```python +>>> from transformers import Wav2Vec2Model + +model = Wav2Vec2Model.from_pretrained("facebook/hubert-large-ls960-ft", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to(device) +... +``` + +### التسريع المتوقع + +فيما يلي مخطط تسريع متوقع يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات لنموذج `facebook/hubert-large-ls960-ft` وإصدارات flash-attention-2 وsdpa (scale-dot-product-attention). نعرض متوسط التسريع الذي تم الحصول عليه على تقسيم التحقق `clean` من `librispeech_asr`: + +
+ +
+ +## الموارد + +- [دليل مهام تصنيف الصوت](../tasks/audio_classification) +- [دليل مهام التعرف التلقائي على الكلام](../tasks/asr) + +## HubertConfig + +[[autodoc]] HubertConfig + + + + +## HubertModel + +[[autodoc]] HubertModel + +- forward + +## HubertForCTC + +[[autodoc]] HubertForCTC + +- forward + +## HubertForSequenceClassification + +[[autodoc]] HubertForSequenceClassification + +- forward + + + + +## TFHubertModel + +[[autodoc]] TFHubertModel + +- call + +## TFHubertForCTC + +[[autodoc]] TFHubertForCTC + +- call + + + \ No newline at end of file From 837f9b4f84304a039c6080a1f45affc5847a7e9c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:03 +0300 Subject: [PATCH 462/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/ibert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/ibert.md | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/ibert.md diff --git a/docs/source/ar/model_doc/ibert.md b/docs/source/ar/model_doc/ibert.md new file mode 100644 index 00000000000000..42a66fa72afa7e --- /dev/null +++ b/docs/source/ar/model_doc/ibert.md @@ -0,0 +1,59 @@ +# I-BERT + +## نظرة عامة + +تم اقتراح نموذج I-BERT في [I-BERT: Integer-only BERT Quantization](https://arxiv.org/abs/2101.01321) بواسطة Sehoon Kim و Amir Gholami و Zhewei Yao و Michael W. Mahoney و Kurt Keutzer. إنه إصدار كمي من RoBERTa يعمل على استنتاج يصل إلى أربعة أضعاف أسرع. + +الملخص من الورقة هو كما يلي: + +*حققت النماذج المستندة إلى المحول، مثل BERT و RoBERTa، نتائج متميزة في العديد من مهام معالجة اللغات الطبيعية. ومع ذلك، فإن بصمتها الذاكرية، ووقت الاستدلال، واستهلاك الطاقة الخاصة بها تحد من الاستدلال الفعال على الحافة، وحتى في مركز البيانات. في حين أن الكم يمكن أن يكون حلاً قابلاً للتطبيق لهذا، يستخدم العمل السابق على تحويل النماذج الكمية الحساب ذا النقطة العائمة أثناء الاستدلال، والذي لا يمكنه الاستفادة بكفاءة من الوحدات المنطقية ذات الأعداد الصحيحة فقط مثل Tensor Cores من Turing الحديث، أو معالجات ARM التقليدية ذات الأعداد الصحيحة فقط. في هذا العمل، نقترح I-BERT، وهو نظام كمي جديد لنماذج المحول التي تقوم بكمية الاستدلال بالكامل باستخدام الحساب ذو الأعداد الصحيحة فقط. بناءً على طرق التقريب خفيفة الوزن ذات الأعداد الصحيحة فقط للعمليات غير الخطية، على سبيل المثال، GELU و Softmax و Layer Normalization، يقوم I-BERT بأداء استدلال BERT من النهاية إلى النهاية باستخدام الأعداد الصحيحة فقط دون أي حسابات ذات أرقام عائمة. نقيم نهجنا على مهام GLUE لأسفل باستخدام RoBERTa-Base/Large. نُظهر أنه في كلتا الحالتين، يحقق I-BERT دقة مماثلة (وأعلى قليلاً) مقارنة بخط الأساس عالي الدقة. علاوة على ذلك، يظهر تنفيذنا الأولي لـ I-BERT تسريعًا يتراوح من 2.4 إلى 4.0x لاستدلال INT8 على نظام GPU T4 مقارنة باستدلال FP32. تم تطوير الإطار في PyTorch وتم إصداره مفتوح المصدر.* + +تمت المساهمة بهذا النموذج من قبل [kssteven](https://huggingface.co/kssteven). يمكن العثور على الكود الأصلي [هنا](https://github.com/kssteven418/I-BERT). + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/masked_language_modeling) + +## IBertConfig + +[[autodoc]] IBertConfig + +## IBertModel + +[[autodoc]] IBertModel + +- forword + +## IBertForMaskedLM + +[[autodoc]] IBertForMaskedLM + +- forword + +## IBertForSequenceClassification + +[[autodoc]] IBertForSequenceClassification + +- forword + +## IBertForMultipleChoice + +[[autodoc]] IBertForMultipleChoice + +- forword + +## IBertForTokenClassification + +[[autodoc]] IBertForTokenClassification + +- forword + +## IBertForQuestionAnswering + +[[autodoc]] IBertForQuestionAnswering + +- forword \ No newline at end of file From 217c5c2f00ae317b21f0f2c34ca3dc273cff5743 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:04 +0300 Subject: [PATCH 463/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/idefics.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/idefics.md | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/idefics.md diff --git a/docs/source/ar/model_doc/idefics.md b/docs/source/ar/model_doc/idefics.md new file mode 100644 index 00000000000000..9c7eb94b261c01 --- /dev/null +++ b/docs/source/ar/model_doc/idefics.md @@ -0,0 +1,59 @@ +# IDEFICS + +## ملخص + +تم اقتراح نموذج IDEFICS في [OBELICS: مجموعة بيانات مفلترة مفتوحة على نطاق الويب لمستندات نصية متداخلة +](https://huggingface.co/papers/2306.16527 +) بواسطة هوغو لورينسون، لوسيل سولنييه، ليو ترونشون، ستاس بيكمان، أمانبريت سينغ، أنطون لوزكوف، توماس وانغ، سيدهارث كارامشيتي، ألكسندر إم راش، دووي كيلا، ماتيو كورد، فيكتور سانه + +الملخص من الورقة هو ما يلي: + +*تتفوق النماذج الكبيرة متعددة الوسائط المدربة على المستندات الطبيعية، والتي تتداخل مع الصور والنصوص، على النماذج المدربة على أزواج الصور والنص في معايير متعددة الوسائط متعددة تتطلب التفكير في صورة واحدة أو عدة صور لإنشاء نص. ومع ذلك، لم يتم إصدار مجموعات البيانات المستخدمة لتدريب هذه النماذج، ولم يتم تحديد عملية التجميع بشكل كامل. نقدم مجموعة بيانات OBELICS، وهي مجموعة بيانات مفتوحة مفلترة على نطاق الويب من مستندات نصية مصورة متداخلة تضم 141 مليون صفحة ويب مستخرجة من Common Crawl، و353 مليون صورة مرتبطة، و115 مليار رمز نصي. نحن نصف عملية إنشاء مجموعة البيانات، ونقدم قواعد تصفية شاملة، ونقدم تحليلاً لمحتوى مجموعة البيانات. لإظهار جدوى OBELISC، نقوم بتدريب 80 مليار نموذج رؤية ولغة على مجموعة البيانات والحصول على أداء تنافسي في مختلف المعايير متعددة الوسائط. نقوم بإصدار الكود لإعادة إنتاج مجموعة البيانات مع مجموعة البيانات نفسها.* + +تمت المساهمة في هذا النموذج بواسطة [HuggingFaceM4](https://huggingface.co/HuggingFaceM4). يمكن العثور على الكود الأصلي [هنا](). (المهام: ليس لديك رابط عام حتى الآن). + + + +رمز IDEFICS في Transformers مخصص لضبط دقة نماذج IDEFICS المُدربة مسبقًا واستنتاجها. +للتدريب من الصفر، استخدم رمز M4 (سيتم توفير رابط عند إتاحته للجمهور) + + +## IdeficsConfig + +[[autodoc]] IdeficsConfig + +## IdeficsModel + +[[autodoc]] IdeficsModel + +- forward + +## IdeficsForVisionText2Text + +[[autodoc]] IdeficsForVisionText2Text + +- forward + +## TFIdeficsModel + +[[autodoc]] TFIdeficsModel + +- call + +## TFIdeficsForVisionText2Text + +[[autodoc]] TFIdeficsForVisionText2Text + +- call + +## IdeficsImageProcessor + +[[autodoc]] IdeficsImageProcessor + +- preprocess + +## IdeficsProcessor + +[[autodoc]] IdeficsProcessor + +- __call__ \ No newline at end of file From 614805bd63d5d6f8c508ba3391171924fb79a835 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:06 +0300 Subject: [PATCH 464/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/idefics2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/idefics2.md | 198 +++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 docs/source/ar/model_doc/idefics2.md diff --git a/docs/source/ar/model_doc/idefics2.md b/docs/source/ar/model_doc/idefics2.md new file mode 100644 index 00000000000000..1256c615ef6856 --- /dev/null +++ b/docs/source/ar/model_doc/idefics2.md @@ -0,0 +1,198 @@ +# Idefics2 + +## نظرة عامة +اقترح نموذج Idefics2 في [ما الذي يهم عند بناء نماذج الرؤية واللغة؟](https://arxiv.org/abs/2405.02246) بواسطة ليو ترونشون، وهوجو لورينكون، وفيكتور سانه. ويمكن العثور على المنشور المرافق [هنا](https://huggingface.co/blog/idefics2). + +Idefics2 هو نموذج مفتوح متعدد الوسائط يقبل تسلسلات تعسفية من إدخالات الصور والنصوص وينتج مخرجات نصية. يمكن للنموذج الإجابة على الأسئلة حول الصور، ووصف المحتوى المرئي، ورواية القصص المستندة إلى صور متعددة، أو التصرف ببساطة كنموذج لغة نقي بدون إدخالات بصرية. إنه يحسن IDEFICS-1، خاصة في فهم المستندات، أو التعرف الضوئي على الحروف، أو الاستدلال البصري. Idefics2 خفيف الوزن (8 مليار معلمة) ويعامل الصور بنسبة عرض إلى ارتفاع أصلية ودقة، مما يسمح بكفاءة استدلال متغيرة. + +الملخص من الورقة هو ما يلي: + +*لقد أدى الاهتمام المتزايد بنماذج اللغة المرئية (VLMs) إلى تحسينات في نماذج اللغة الكبيرة ومحولات الرؤية. وعلى الرغم من وفرة الأدبيات حول هذا الموضوع، فإننا نلاحظ أن القرارات الحاسمة المتعلقة بتصميم VLMs لا تكون مبررة في كثير من الأحيان. ونحن نجادل بأن هذه القرارات غير المدعومة تعرقل التقدم في هذا المجال من خلال جعل من الصعب تحديد الخيارات التي تحسن أداء النموذج. ولمعالجة هذه المشكلة، نجري تجارب واسعة النطاق حول النماذج المسبقة التدريب، واختيار الهندسة المعمارية، والبيانات، وأساليب التدريب. ويشمل توحيد نتائجنا تطوير Idefics2، وهو VLM أساسي فعال يبلغ 8 مليارات معلمة. ويحقق Idefics2 أداءً متميزًا ضمن فئة حجمه عبر العديد من المعايير متعددة الوسائط، ويكون غالبًا على قدم المساواة مع النماذج التي يبلغ حجمها أربعة أضعاف. ونقوم بإطلاق النموذج (الأساسي والموجه والدردشة) إلى جانب مجموعات البيانات التي تم إنشاؤها لتدريبه.* + +drawing + +هندسة Idefics2. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [amyeroberts](https://huggingface.co/amyeroberts). +يمكن العثور على الكود الأصلي [هنا](https://huggingface.co/HuggingFaceM4/idefics2). + +## نصائح الاستخدام + +- يمكن أن يحتوي كل عينة على صور متعددة، ويمكن أن يختلف عدد الصور بين العينات. وسوف يقوم المعالج بملء إدخالات إلى العدد الأقصى من الصور في دفعة للإدخال إلى النموذج. +- يوجد لدى المعالج خيار `do_image_splitting`. إذا كان `True`، فسيتم تقسيم كل صورة إدخال إلى 4 صور فرعية، وسيتم دمجها مع الأصل لتشكيل 5 صور. هذا مفيد لزيادة أداء النموذج. تأكد من تعيين `processor.image_processor.do_image_splitting` على `False` إذا لم يتم تدريب النموذج باستخدام هذا الخيار. +- يجب أن يكون `text` الذي تم تمريره إلى المعالج رموز `` حيث يجب إدراج الصور. و `` في نهاية كل عبارة إذا كان النص رسالة دردشة. +- يوجد لدى المعالج طريقة `apply_chat_template` الخاصة به لتحويل رسائل الدردشة إلى نص يمكن تمريره بعد ذلك كـ `text` إلى المعالج. + +مثال على كيفية استخدام المعالج على رسائل الدردشة: + +```python +import requests +from PIL import Image +from transformers import Idefics2Processor, Idefics2ForConditionalGeneration +import torch + +device = "cuda" if torch.cuda.is_available() else "cpu" + +url_1 = "http://images.cocodataset.org/val2017/000000039769.jpg" +url_2 = "http://images.cocodataset.org/val2017/000000219578.jpg" + +image_1 = Image.open(requests.get(url_1, stream=True).raw) +image_2 = Image.open(requests.get(url_2, stream=True).raw) +images = [image_1, image_2] + +messages = [{ + "role": "user", + "content": [ + {"type": "text", "text": "What’s the difference between these two images?"}, + {"type": "image"}, + {"type": "image"}, + ], +}] + +processor = Idefics2Processor.from_pretrained("HuggingFaceM4/idefics2-8b") +model = Idefics2ForConditionalGeneration.from_pretrained("HuggingFaceM4/idefics2-8b") +model.to(device) + +# at inference time, one needs to pass `add_generation_prompt=True` in order to make sure the model completes the prompt +text = processor.apply_chat_template(messages, add_generation_prompt=True) +print(text) +# 'User: What’s the difference between these two images?\nAssistant:' + +inputs = processor(images=images, text=text, return_tensors="pt").to(device) + +generated_text = model.generate(**inputs, max_new_tokens=500) +generated_text = processor.batch_decode(generated_text, skip_special_tokens=True)[0] +print("Generated text:", generated_text) +``` + +- أثناء التدريب، من المهم تحديد الرموز التي لا يجب على النموذج تعلمها. بالنسبة لـ Idefics2، ينخفض هذا عادةً إلى رموز الصور والتعبئة. وهذا يعني أنه يمكن إنشاء التسميات كما يلي: + +```python +import requests +from PIL import Image +from transformers import Idefics2Processor, Idefics2ForConditionalGeneration +import torch + +url_1 = "http://images.cocodataset.org/val2017/000000039769.jpg" +url_2 = "http://images.cocodataset.org/val2017/000000219578.jpg" + +image_1 = Image.open(requests.get(url_1, stream=True).raw) +image_2 = Image.open(requests.get(url_2, stream=True).raw) +images = [image_1, image_2] + +messages = [{ + "role": "user", + "content": [ + {"type": "text", "text": "What’s the difference between these two images?"}, + {"type": "image"}, + {"type": "image"}, + ], + }, + { + "role": "assistant", + "content": [ + {"type": "text", "text": "The difference is that one image is about dogs and the other one about cats."}, + ], +}] + +device = "cuda" if torch.cuda.is_available() else "cpu" + +processor = Idefics2Processor.from_pretrained("HuggingFaceM4/idefics2-8b") +model = Idefics2ForConditionalGeneration.from_pretrained("HuggingFaceM4/idefics2-8b") +model.to(device) + +text = processor.apply_chat_template(messages, add_generation_prompt=False) +inputs = processor(images=images, text=text, return_tensors="pt").to(device) + +labels = inputs.input_ids.clone() +labels[labels == processor.tokenizer.pad_token_id] = -100 +labels[labels == model.config.image_token_id] = -100 + +inputs["labels"] = labels + +outputs = model(**inputs) +loss = outputs.loss +loss.backward() +``` + +يرجى ملاحظة أنه عند تدريب Idefics2 على المحادثات متعددة الأدوار بين المستخدم والمساعد، يتم أيضًا تعيين جميع الرموز المقابلة لرسائل المستخدم إلى -100. + +## تحسين النموذج: Flash Attention + +توضح مقتطفات الكود أعلاه الاستدلال بدون أي حيل تحسين. ومع ذلك، يمكن للمرء أن يسرع بشكل كبير من النموذج من خلال الاستفادة من [Flash Attention](../perf_train_gpu_one.md#flash-attention-2)، وهو تنفيذ أسرع لآلية الانتباه المستخدمة داخل النموذج. + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الانزلاق. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لـ [مستودع الانتباه السريع](https://github.com/Dao-AILab/flash-attention). تأكد أيضًا من تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.float16`). + +لتحميل وتشغيل نموذج باستخدام Flash Attention-2، قم ببساطة بتغيير مقتطف الكود أعلاه بالتغيير التالي: + +```diff +model = Idefics2ForConditionalGeneration.from_pretrained( +"HuggingFaceM4/idefics2-8b", ++ torch_dtype=torch.float16, ++ attn_implementation="flash_attention_2", +).to(device) +``` + +## تصغير حجم Idefics2 باستخدام التكميم + +نظرًا لأن نموذج Idefics2 يحتوي على 8 مليارات معلمة، فهذا يتطلب حوالي 16 جيجابايت من ذاكرة GPU RAM في نصف الدقة (float16)، حيث يتم تخزين كل معلمة في بايتين. ومع ذلك، يمكن تقليل حجم النموذج باستخدام [التكميم](../quantization.md). إذا تم تكميم النموذج إلى 4 بتات (أو نصف بايت لكل معلمة)، فهذا يتطلب فقط حوالي 3.5 جيجابايت من ذاكرة الوصول العشوائي. + +إن تكميم نموذج بسيط مثل تمرير `quantization_config` إلى النموذج. يمكنك تغيير مقتطف الكود أعلاه بالتغييرات أدناه. سنستفيد من تكوين BitsAndyBytes (ولكن راجع [هذه الصفحة](../quantization.md) لأساليب التكميم الأخرى): + +```diff ++ from transformers import BitsAndBytesConfig + ++ quantization_config = BitsAndBytesConfig( ++ load_in_4bit=True, ++ bnb_4bit_quant_type="nf4", ++ bnb_4bit_use_double_quant=True, ++ bnb_4bit_compute_dtype=torch.float16 ++ ) +model = Idefics2ForConditionalGeneration.from_pretrained( + "HuggingFaceM4/idefics2-8b", ++ torch_dtype=torch.float16, ++ quantization_config=quantization_config, +).to(device) +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Idefics2. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- يمكن العثور على دفتر ملاحظات حول كيفية ضبط نموذج Idefics2 على مجموعة بيانات مخصصة باستخدام [المدرب](../main_classes/trainer.md) [هنا](https://colab.research.google.com/drive/1NtcTgRbSBKN7pYD3Vdx1j9m8pt3fhFDB?usp=sharing). وهو يدعم كل من الضبط الدقيق الكامل وكذلك (المكمم) LoRa. +- يمكن العثور على نص برمجي حول كيفية ضبط نموذج Idefics2 باستخدام مكتبة TRL [هنا](https://gist.github.com/edbeeching/228652fc6c2b29a1641be5a5778223cb). +- يمكن العثور على دفتر ملاحظات توضيحي حول ضبط نموذج Idefics2 لاستخدامات استخراج JSON [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Idefics2). 🌎 + +## Idefics2Config + +[[autodoc]] Idefics2Config + +## Idefics2Model + +[[autodoc]] Idefics2Model + +- forward + +## Idefics2ForConditionalGeneration + +[[autodoc]] Idefics2ForConditionalGeneration + +- forward + +## Idefics2ImageProcessor + +[[autodoc]] Idefics2ImageProcessor + +- preprocess + +## Idefics2Processor + +[[autodoc]] Idefics2Processor + +- __call__ \ No newline at end of file From 336bba90f603d48b0f54df553daa9644600bb38d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:08 +0300 Subject: [PATCH 465/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/imagegpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/imagegpt.md | 82 ++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 docs/source/ar/model_doc/imagegpt.md diff --git a/docs/source/ar/model_doc/imagegpt.md b/docs/source/ar/model_doc/imagegpt.md new file mode 100644 index 00000000000000..5ac864b0c2c36f --- /dev/null +++ b/docs/source/ar/model_doc/imagegpt.md @@ -0,0 +1,82 @@ +# ImageGPT + +## نظرة عامة + +تم اقتراح نموذج ImageGPT في [Generative Pretraining from Pixels](https://openai.com/blog/image-gpt) بواسطة Mark Chen, Alec Radford, Rewon Child, Jeffrey Wu, Heewoo Jun, David Luan, Ilya Sutskever. ImageGPT (iGPT) هو نموذج مشابه لـ GPT-2 تم تدريبه للتنبؤ بقيمة البكسل التالي، مما يسمح بتوليد الصور غير المشروطة والمشروطة. + +الملخص من الورقة هو ما يلي: + +> *مستوحى من التقدم في تعلم التمثيل غير الخاضع للإشراف للغة الطبيعية، نحن نبحث ما إذا كانت النماذج المماثلة يمكن أن تتعلم تمثيلات مفيدة للصور. نقوم بتدريب محول تسلسلي للتنبؤ التلقائي بالبكسل، دون دمج معرفة بنية الإدخال ثنائية الأبعاد. على الرغم من التدريب على ImageNet منخفض الدقة بدون ملصقات، وجدنا أن نموذجًا بنطاق GPT-2 يتعلم تمثيلات صورة قوية كما هو مقاس بواسطة الاستجواب الخطي والضبط الدقيق والتصنيف منخفض البيانات. على CIFAR-10، نحقق دقة 96.3٪ باستخدام مسبار خطي، متجاوزًا شبكة ResNet واسعة النطاق الخاضعة للإشراف، ودقة 99.0٪ باستخدام الضبط الدقيق الكامل، مما يتطابق مع أفضل النماذج المسبقة التدريب الخاضعة للإشراف. نحن أيضًا تنافسية مع المعايير ذاتية الإشراف على ImageNet عند استبدال البكسلات لترميز VQVAE، وتحقيق 69.0٪ دقة أعلى-1 على مسبار خطي لميزاتنا.* + +drawing + + ملخص النهج. مأخوذ من [الورقة الأصلية](https://cdn.openai.com/papers/Generative_Pretraining_from_Pixels_V2.pdf). + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr)، بناءً على [هذه القضية](https://github.com/openai/image-gpt/issues/7). يمكن العثور على الكود الأصلي [هنا](https://github.com/openai/image-gpt). + +## نصائح الاستخدام + +- ImageGPT هو نفسه تقريبًا مثل [GPT-2](gpt2)، باستثناء استخدام دالة تنشيط مختلفة (وهي "quick gelu")، ولا تقوم طبقات التطبيع الطبقي بمركز متوسط المدخلات. كما أن ImageGPT لا يحتوي على تضمين إدخال وإخراج مربوط. + +- نظرًا لأن متطلبات الوقت والذاكرة لآلية اهتمام المحولات تتناسب تربيعيًا مع طول التسلسل، قام المؤلفون بتدريب ImageGPT مسبقًا على دقات إدخال أصغر، مثل 32x32 و64x64. ومع ذلك، فإن إدخال تسلسل من 32x32x3=3072 رمزًا من 0..255 في محول لا يزال كبيرًا جدًا. لذلك، طبق المؤلفون التجميع k-means على قيم البكسل (R,G,B) مع k=512. بهذه الطريقة، لدينا تسلسل يبلغ طوله 32*32 = 1024، ولكنه الآن من الأعداد الصحيحة في النطاق 0..511. لذلك، نقوم بتقليص طول التسلسل على حساب مصفوفة تضمين أكبر. وبعبارة أخرى، يبلغ حجم مفردات ImageGPT 512، + 1 لعلامة "بداية الجملة" (SOS) الخاصة، والتي يتم استخدامها في بداية كل تسلسل. يمكن للمرء استخدام [`ImageGPTImageProcessor`] لتحضير الصور للنموذج. + +- على الرغم من التدريب المسبق تمامًا بدون إشراف (أي بدون استخدام أي ملصقات)، فإن ImageGPT ينتج ميزات صورة جيدة الأداء مفيدة للمهام اللاحقة، مثل تصنيف الصور. أظهر المؤلفون أن الميزات الموجودة في منتصف الشبكة هي الأكثر أداءً، ويمكن استخدامها كما هي لتدريب نموذج خطي (مثل نموذج الانحدار اللوجستي sklearn على سبيل المثال). يُشار إلى هذا أيضًا باسم "الاستجواب الخطي". يمكن الحصول على الميزات بسهولة عن طريق تمرير الصورة أولاً عبر النموذج، ثم تحديد `output_hidden_states=True`، ثم تجميع المتوسط للدول المخفية في أي طبقة تريدها. + +- بدلاً من ذلك، يمكن للمرء مواصلة الضبط الدقيق للنموذج بالكامل على مجموعة بيانات تابعة، على غرار BERT. للقيام بذلك، يمكنك استخدام [`ImageGPTForImageClassification`]. + +- يأتي ImageGPT بأحجام مختلفة: هناك ImageGPT-small، وImageGPT-medium، وImageGPT-large. قام المؤلفون أيضًا بتدريب متغير XL، لكنهم لم يطلقوه. يتم تلخيص الاختلافات في الحجم في الجدول التالي: + +| **متغير النموذج** | **الأعماق** | **الأحجام المخفية** | **حجم فك تشفير المخفية** | **بارامترات (م)** | **ImageNet-1k Top 1** | +|---|---|---|---|---|---| +| MiT-b0 | [2, 2, 2, 2] | [32, 64, 160, 256] | 256 | 3.7 | 70.5 | +| MiT-b1 | [2, 2, 2, 2] | [64, 128, 320, 512] | 256 | 14.0 | 78.7 | +| MiT-b2 | [3, 4, 6, 3] | [64, 128, 320, 512] | 768 | 25.4 | 81.6 | +| MiT-b3 | [3, 4, 18, 3] | [64, 128, 320, 512] | 768 | 45.2 | 83.1 | +| MiT-b4 | [3, 8, 27, 3] | [64, 128, 320, 512] | 768 | 62.6 | 83.6 | +| MiT-b5 | [3, 6, 40, 3] | [64, 128, 320, 512] | 768 | 82.0 | 83.8 | + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام ImageGPT. + + + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ ImageGPT [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/ImageGPT). +- [`ImageGPTForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## ImageGPTConfig + +[[autodoc]] ImageGPTConfig + +## ImageGPTFeatureExtractor + +[[autodoc]] ImageGPTFeatureExtractor + +- __call__ + +## ImageGPTImageProcessor + +[[autodoc]] ImageGPTImageProcessor + +- preprocess + +## ImageGPTModel + +[[autodoc]] ImageGPTModel + +- forward + +## ImageGPTForCausalImageModeling + +[[autodoc]] ImageGPTForCausalImageModeling + +- forward + +## ImageGPTForImageClassification + +[[autodoc]] ImageGPTForImageClassification + +- forward \ No newline at end of file From 3e89f7fe7d9e77c4c347884f6d10c4d2d5f85c76 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:10 +0300 Subject: [PATCH 466/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/informer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/informer.md | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/source/ar/model_doc/informer.md diff --git a/docs/source/ar/model_doc/informer.md b/docs/source/ar/model_doc/informer.md new file mode 100644 index 00000000000000..54e7d08c1e062f --- /dev/null +++ b/docs/source/ar/model_doc/informer.md @@ -0,0 +1,37 @@ +# Informer + +## نظرة عامة + +اقترح نموذج Informer في "Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting" من قبل هايوي تشو، وشانجهانغ جانغ، وجييكي بينغ، وشوواي جانغ، وجيانكسين لي، وهوي شيونغ، ووانكاي جانغ. + +تقدم هذه الطريقة آلية اهتمام احتمالية لاختيار الاستعلامات "النشطة" بدلاً من الاستعلامات "الخاملة" وتوفر محولًا مبعثرًا، مما يخفف من متطلبات الحوسبة والذاكرة التربيعية لاهتمام الفانيلا. + +الملخص من الورقة هو ما يلي: + +تتطلب العديد من تطبيقات العالم الحقيقي التنبؤ بسلاسل زمنية طويلة، مثل تخطيط استهلاك الكهرباء. يتطلب التنبؤ بسلاسل زمنية طويلة (LSTF) قدرة تنبؤية عالية للنموذج، وهي القدرة على التقاط الاعتماد طويل المدى الدقيق بين الإخراج والإدخال بكفاءة. أظهرت الدراسات الحديثة الإمكانات التي يتمتع بها المحول لزيادة قدرة التنبؤ. ومع ذلك، هناك عدة مشكلات خطيرة مع المحول تمنعه من أن يكون قابلاً للتطبيق مباشرة على LSTF، بما في ذلك التعقيد الزمني التربيعي، والاستخدام العالي للذاكرة، والقيود المتأصلة في بنية الترميز فك الترميز. لمعالجة هذه القضايا، نقوم بتصميم نموذج محول كفء لـ LSTF، يسمى Informer، مع ثلاث خصائص مميزة: (1) آلية ProbSparse self-attention، والتي تحقق O (L logL) في التعقيد الزمني واستخدام الذاكرة، ولها أداء قابل للمقارنة في محاذاة تبعية التسلسلات. (2) تقطير الاهتمام الذاتي يسلط الضوء على الاهتمام المهيمن عن طريق تقسيم إدخال الطبقة المتتالية إلى النصف، ويتعامل بكفاءة مع تسلسلات الإدخال الطويلة للغاية. (3) فك تشفير النمط التوليدي، على الرغم من بساطته من الناحية المفاهيمية، فإنه يتنبأ بتسلسلات السلاسل الزمنية الطويلة في عملية توجيه واحدة بدلاً من طريقة الخطوة بخطوة، مما يحسن بشكل كبير من سرعة الاستدلال في التنبؤات ذات التسلسلات الطويلة. تُظهر التجارب واسعة النطاق على أربع مجموعات بيانات كبيرة الحجم أن Informer يتفوق بشكل كبير على الطرق الموجودة ويقدم حلاً جديدًا لمشكلة LSTF. + +ساهم بهذا النموذج [elisim](https://huggingface.co/elisim) و [kashif](https://huggingface.co/kashif). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/zhouhaoyi/Informer2020). + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- اطلع على منشور مدونة Informer في مدونة HuggingFace: [Multivariate Probabilistic Time Series Forecasting with Informer](https://huggingface.co/blog/informer) + +## InformerConfig + +[[autodoc]] InformerConfig + +## نموذج Informer + +[[autodoc]] InformerModel + +- forword + +## InformerForPrediction + +[[autodoc]] InformerForPrediction + +- forword \ No newline at end of file From 3bfa3b30246b509d71be3b58b58854eee1787ddb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:12 +0300 Subject: [PATCH 467/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/instructblip.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/instructblip.md | 58 ++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 docs/source/ar/model_doc/instructblip.md diff --git a/docs/source/ar/model_doc/instructblip.md b/docs/source/ar/model_doc/instructblip.md new file mode 100644 index 00000000000000..d57c98c53f14ce --- /dev/null +++ b/docs/source/ar/model_doc/instructblip.md @@ -0,0 +1,58 @@ +# InstructBLIP + +## نظرة عامة +تم اقتراح نموذج InstructBLIP في ورقة بحثية بعنوان [InstructBLIP: Towards General-purpose Vision-Language Models with Instruction Tuning](https://arxiv.org/abs/2305.06500) بواسطة Wenliang Dai و Junnan Li و Dongxu Li و Anthony Meng Huat Tiong و Junqi Zhao و Weisheng Wang و Boyang Li و Pascale Fung و Steven Hoi. + +يستفيد InstructBLIP من بنية BLIP-2 في الضبط البصري للتعليمات. + +هذا ملخص الورقة: + +> "ظهرت نماذج اللغة متعددة الأغراض القادرة على حل مهام مختلفة في مجال اللغة، وذلك بفضل خط أنابيب ما قبل التدريب والضبط التعليمي. ومع ذلك، فإن بناء نماذج متعددة الوسائط متعددة الأغراض يمثل تحديًا بسبب زيادة التباين في المهام الذي تسببه المدخلات البصرية الإضافية. على الرغم من أن التدريب المسبق متعدد الوسائط قد تمت دراسته على نطاق واسع، إلا أن الضبط التعليمي متعدد الوسائط لم يتم استكشافه نسبيًا. في هذه الورقة، نجري دراسة منهجية وشاملة حول الضبط التعليمي متعدد الوسائط بناءً على النماذج المُدربة مسبقًا BLIP-2. نقوم بتجميع مجموعة متنوعة من 26 مجموعة بيانات متاحة للجمهور، وتحويلها إلى تنسيق الضبط التعليمي، وتصنيفها إلى مجموعتين للضبط التعليمي المُحتجز والتقييم الصفري المحتجز. بالإضافة إلى ذلك، نقدم طريقة استخراج الميزات البصرية الواعية بالتعليمات، وهي طريقة حاسمة تمكن النموذج من استخراج ميزات مفيدة مصممة خصيصًا للتعليمات المعطاة. تحقق نماذج InstructBLIP الناتجة أداءً متميزًا في جميع مجموعات البيانات المحتجزة البالغ عددها 13، متفوقة بشكل كبير على BLIP-2 و Flamingo الأكبر حجمًا. كما أن نماذجنا تؤدي إلى أداء متميز عند ضبط دقتها على مهام منفصلة للأسفل (على سبيل المثال، دقة 90.7% على ScienceQA IMG). علاوة على ذلك، نثبت نوعيًا مزايا InstructBLIP على النماذج متعددة الوسائط المتزامنة." + + + + بنية InstructBLIP. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/salesforce/LAVIS/tree/main/projects/instructblip). + +## نصائح الاستخدام +يستخدم InstructBLIP نفس البنية مثل [BLIP-2](blip2) مع اختلاف بسيط ولكنه مهم: فهو أيضًا يغذي موجه النص (التعليمات) إلى Q-Former. + +## InstructBlipConfig + +[[autodoc]] InstructBlipConfig + +- from_vision_qformer_text_configs + +## InstructBlipVisionConfig + +[[autodoc]] InstructBlipVisionConfig + +## InstructBlipQFormerConfig + +[[autodoc]] InstructBlipQFormerConfig + +## InstructBlipProcessor + +[[autodoc]] InstructBlipProcessor + +## InstructBlipVisionModel + +[[autodoc]] InstructBlipVisionModel + +- forward + +## InstructBlipQFormerModel + +[[autodoc]] InstructBlipQFormerModel + +- forward + +## InstructBlipForConditionalGeneration + +[[autodoc]] InstructBlipForConditionalGeneration + +- forward + +- generate \ No newline at end of file From 73f0ceb19857715c5ab722bf3c4ce8d23b73359a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:14 +0300 Subject: [PATCH 468/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/jamba.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/jamba.md | 115 ++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 docs/source/ar/model_doc/jamba.md diff --git a/docs/source/ar/model_doc/jamba.md b/docs/source/ar/model_doc/jamba.md new file mode 100644 index 00000000000000..c14e99001097b5 --- /dev/null +++ b/docs/source/ar/model_doc/jamba.md @@ -0,0 +1,115 @@ +# Jamba + +## نظرة عامة + +Jamba عبارة عن شبكة عصبية هجينة SSM-Transformer LLM رائدة في مجالها. إنه أول تطبيق لمقياس Mamba، والذي يفتح فرصًا مثيرة للبحث والتطبيق. في حين أن هذه التجربة الأولية تظهر مكاسب مشجعة، فإننا نتوقع أن يتم تعزيزها بشكل أكبر مع الاستكشافات والتحسينات المستقبلية. + +للحصول على التفاصيل الكاملة حول هذا النموذج، يرجى قراءة [منشور المدونة](https://www.ai21.com/blog/announcing-jamba) الخاص بالإصدار. + +### تفاصيل النموذج + +Jamba هو نموذج نصي تنبئي مسبق التدريب، يعتمد على مزيج من الخبراء (MoE)، ويحتوي على 12 بليون معامل نشط و52 بليون معامل إجمالي عبر جميع الخبراء. يدعم النموذج طول سياق يصل إلى 256 ألفًا، ويمكنه استيعاب ما يصل إلى 140 ألف رمز على وحدة معالجة رسومية (GPU) واحدة بسعة 80 جيجابايت. + +كما هو موضح في الرسم البياني أدناه، تتميز بنية Jamba بنهج الكتل والطبقات الذي يسمح لـ Jamba بدمج بنيات Transformer وMamba بنجاح. تحتوي كل كتلة من Jamba إما على طبقة اهتمام أو طبقة Mamba، تليها شبكة عصبية متعددة الطبقات (MLP)، مما ينتج عنه نسبة إجمالية تبلغ طبقة Transformer واحدة من كل ثماني طبقات إجمالية. + +![رسم توضيحي لبنية Jamba](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/jamba_architecture.png) + +## الاستخدام + +### المتطلبات الأساسية + +يتطلب Jamba استخدام إصدار `transformers` 4.39.0 أو أعلى: + +```bash +pip install transformers>=4.39.0 +``` + +لتشغيل تطبيقات Mamba المحسّنة، يجب أولاً تثبيت `mamba-ssm` و`causal-conv1d`: + +```bash +pip install mamba-ssm causal-conv1d>=1.2.0 +``` + +يجب أيضًا أن يكون لديك النموذج على جهاز CUDA. + +يمكنك تشغيل النموذج دون استخدام نوى Mamba المحسنة، ولكن لا يوصى بذلك لأنه سيؤدي إلى انخفاض كبير في الكمون. للقيام بذلك، ستحتاج إلى تحديد `use_mamba_kernels=False` عند تحميل النموذج. + +### تشغيل النموذج + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer + +model = AutoModelForCausalLM.from_pretrained("ai21labs/Jamba-v0.1") +tokenizer = AutoTokenizer.from_pretrained("ai21labs/Jamba-v0.1") + +input_ids = tokenizer("In the recent Super Bowl LVIII,", return_tensors='pt').to(model.device)["input_ids"] + +outputs = model.generate(input_ids, max_new_tokens=216) + +print(tokenizer.batch_decode(outputs)) +# ["<|startoftext|>In the recent Super Bowl LVIII, the Kansas City Chiefs emerged victorious, defeating the San Francisco 49ers in a thrilling overtime showdown. The game was a nail-biter, with both teams showcasing their skills and determination.\n\nThe Chiefs, led by their star quarterback Patrick Mahomes, displayed their offensive prowess, while the 49ers, led by their strong defense, put up a tough fight. The game went into overtime, with the Chiefs ultimately securing the win with a touchdown.\n\nThe victory marked the Chiefs' second Super Bowl win in four years, solidifying their status as one of the top teams in the NFL. The game was a testament to the skill and talent of both teams, and a thrilling end to the NFL season.\n\nThe Super Bowl is not just about the game itself, but also about the halftime show and the commercials. This year's halftime show featured a star-studded lineup, including Usher, Alicia Keys, and Lil Jon. The show was a spectacle of music and dance, with the performers delivering an energetic and entertaining performance.\n"] +``` + +
+ +تحميل النموذج بنصف الدقة + +تم حفظ نقطة التفتيش المنشورة في BF16. لتحميله في ذاكرة الوصول العشوائي (RAM) في BF16/FP16، تحتاج إلى تحديد `torch_dtype`: + +```python +from transformers import AutoModelForCausalLM +import torch +model = AutoModelForCausalLM.from_pretrained("ai21labs/Jamba-v0.1", torch_dtype=torch.bfloat16) +# يمكنك أيضًا استخدام torch_dtype=torch.float16 +``` + +عند استخدام نصف الدقة، يمكنك تمكين تنفيذ [FlashAttention2](https://github.com/Dao-AILab/flash-attention) لكتل الاهتمام. لاستخدامه، تحتاج أيضًا إلى وجود النموذج على جهاز CUDA. نظرًا لأن النموذج في هذه الدقة كبير جدًا بحيث لا يمكنه الاندماج في وحدة معالجة رسومية (GPU) واحدة بسعة 80 جيجابايت، فستحتاج أيضًا إلى موازاته باستخدام [accelerate](https://huggingface.co/docs/accelerate/index): + +```python +from transformers import AutoModelForCausalLM +import torch +model = AutoModelForCausalLM.from_pretrained("ai21labs/Jamba-v0.1", + torch_dtype=torch.bfloat16, + attn_implementation="flash_attention_2", + device_map="auto") +``` + +
+ +
+ +تحميل النموذج بدقة 8 بت + +**باستخدام دقة 8 بت، من الممكن استيعاب أطوال تسلسل تصل إلى 140 ألفًا على وحدة معالجة رسومية (GPU) واحدة بسعة 80 جيجابايت.** يمكنك بسهولة تحويل النموذج إلى 8 بت باستخدام [bitsandbytes](https://huggingface.co/docs/bitsandbytes/index). للحفاظ على جودة النموذج، نوصي باستبعاد كتل Mamba من التقريب: + +```python +from transformers import AutoModelForCausalLM, BitsAndBytesConfig +quantization_config = BitsAndBytesConfig(load_in_8bit=True, llm_int8_skip_modules=["mamba"]) +model = AutoModelForCausalLM.from_pretrained( +"ai21labs/Jamba-v0.1", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2", quantization_config=quantization_config +) +``` + +
+ +## JambaConfig + +[[autodoc]] JambaConfig + +## JambaModel + +[[autodoc]] JambaModel + +- forward + +## JambaForCausalLM + +[[autodoc]] JambaForCausalLM + +- forward + +## JambaForSequenceClassification + +[[autodoc]] transformers.JambaForSequenceClassification + +- forward \ No newline at end of file From fd2284f0c22a428c52516c4a3db40fba998a249a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:15 +0300 Subject: [PATCH 469/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/jetmoe.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/jetmoe.md | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/source/ar/model_doc/jetmoe.md diff --git a/docs/source/ar/model_doc/jetmoe.md b/docs/source/ar/model_doc/jetmoe.md new file mode 100644 index 00000000000000..2b7c76a01463e1 --- /dev/null +++ b/docs/source/ar/model_doc/jetmoe.md @@ -0,0 +1,35 @@ +# JetMoe + +## نظرة عامة + +**JetMoe-8B** هو نموذج لغة Mixture-of-Experts (MoE) بسعة 8B طوّره [Yikang Shen](https://scholar.google.com.hk/citations?user=qff5rRYAAAAJ) و [MyShell](https://myshell.ai/). يهدف مشروع JetMoe إلى توفير أداء LLaMA2-level وكفاءة نموذج اللغة بميزانية محدودة. + +لتحقيق هذا الهدف، يستخدم JetMoe بنية تنشيط نادرة الإستخدام مستوحاة من [ModuleFormer](https://arxiv.org/abs/2306.04640). يتكون كل كتلة JetMoe من طبقتين MoE: مزيج من رؤوس الانتباه وخبراء مزيج MLP. + +بالنسبة لرموز الإدخال، فإنه ينشط مجموعة فرعية من خبرائه لمعالجتها. يسمح مخطط التنشيط النادر هذا لـ JetMoe بتحقيق معدل نقل تدريب أفضل بكثير من النماذج الكثيفة المماثلة في الحجم. + +يبلغ معدل نقل التدريب لـ JetMoe-8B حوالي 100 مليار رمز في اليوم على مجموعة من 96 وحدة معالجة رسومات H100 باستخدام استراتيجية تسلسلية ثلاثية الاتجاهات. + +تمت المساهمة بهذا النموذج من قبل [Yikang Shen](https://huggingface.co/YikangS). + +## JetMoeConfig + +[[autodoc]] JetMoeConfig + +## JetMoeModel + +[[autodoc]] JetMoeModel + +- forward + +## JetMoeForCausalLM + +[[autodoc]] JetMoeForCausalLM + +- forward + +## JetMoeForSequenceClassification + +[[autodoc]] JetMoeForSequenceClassification + +- forward \ No newline at end of file From ef6ed83c980adc6337eb4be92ddd254156c3755d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:17 +0300 Subject: [PATCH 470/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/jukebox.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/jukebox.md | 83 +++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/jukebox.md diff --git a/docs/source/ar/model_doc/jukebox.md b/docs/source/ar/model_doc/jukebox.md new file mode 100644 index 00000000000000..67cbaacd9913db --- /dev/null +++ b/docs/source/ar/model_doc/jukebox.md @@ -0,0 +1,83 @@ +# Jukebox + +**ملاحظة:** هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب (Pull Requests) جديدة لتغيير شفرته البرمجية. في حالة مواجهة أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + +## نظرة عامة + +اقترح نموذج Jukebox في الورقة البحثية [Jukebox: A generative model for music](https://arxiv.org/pdf/2005.00341.pdf) بواسطة Prafulla Dhariwal وHeewoo Jun وChristine Payne وJong Wook Kim وAlec Radford وIlya Sutskever. ويقدم نموذجًا موسيقيًا توليديًا يمكنه إنتاج عينات طويلة تصل إلى دقيقة، ويمكن تكييفها مع فنان أو نوع موسيقي أو كلمات أغنية. + +الملخص من الورقة البحثية هو كما يلي: + +> "نقدم نموذج Jukebox، وهو نموذج لتوليد الموسيقى مع الغناء في مجال الصوت الخام. نعالج السياق الطويل للصوت الخام باستخدام VQ-VAE متعدد المقاييس لضغطه إلى رموز منفصلة، ونقوم بنمذجة تلك الرموز باستخدام محولات Transformers ذاتية الارتباط. نُظهر أن النموذج المدمج على نطاق واسع يمكنه توليد أغانٍ عالية الدقة ومتنوعة مع اتساق يصل إلى عدة دقائق. يمكننا تكييف النموذج حسب الفنان والنوع الموسيقي لتوجيه الأسلوب الموسيقي والغناء، وحسب كلمات الأغنية غير المترابطة لجعل الغناء أكثر قابلية للتحكم. نقوم بإطلاق آلاف العينات غير المختارة يدويًا، إلى جانب أوزان النموذج والشيفرة البرمجية." + +كما هو موضح في الشكل التالي، يتكون نموذج Jukebox من 3 "مولدات" (Priors) وهي عبارة عن نماذج فك تشفير فقط. وتتبع هذه المولدات البنية الموضحة في الورقة البحثية [Generating Long Sequences with Sparse Transformers](https://arxiv.org/abs/1904.10509)، مع تعديلها لدعم طول سياق أطول. + +أولاً، يتم استخدام ترميز فك تشفير ذاتي (Autoencoder) لتشفير كلمات الأغنية النصية. بعد ذلك، يقوم المولد الأول (يسمى أيضًا "top_prior") بالاهتمام بحالات الإخفاء الأخيرة المستخرجة من ترميز كلمات الأغنية. يتم ربط المولدات بالنماذج السابقة على التوالي عبر وحدة "AudioConditioner". وتقوم وحدة "AudioConditioner" بزيادة دقة إخراج النموذج السابق إلى رموز خام بمعدل إطارات صوتية معينة في الثانية. + +تتم تمرير البيانات الوصفية مثل اسم الفنان والنوع الموسيقي والتوقيت إلى كل مولد، في شكل رمز بداية (Start Token) ومؤشر موضعي (Positional Embedding) لبيانات التوقيت. يتم رسم حالات الإخفاء إلى أقرب متجه رمزي من VQVAE لتحويلها إلى صوت خام. + +![JukeboxModel](https://gist.githubusercontent.com/ArthurZucker/92c1acaae62ebf1b6a951710bdd8b6af/raw/c9c517bf4eff61393f6c7dec9366ef02bdd059a3/jukebox.svg) + +تمت المساهمة بهذا النموذج من قبل [Arthur Zucker](https://huggingface.co/ArthurZ). ويمكن إيجاد الشيفرة البرمجية الأصلية [هنا](https://github.com/openai/jukebox). + +## نصائح الاستخدام + +- يدعم هذا النموذج الاستنتاج فقط. هناك عدة أسباب لذلك، معظمها يرجع إلى أن تدريب النموذج يتطلب كمية كبيرة من الذاكرة. يمكنك فتح طلب سحب (Pull Request) وإضافة ما ينقص لإتاحة الدمج الكامل مع مدرب Hugging Face! + +- هذا النموذج بطيء للغاية، ويستغرق 8 ساعات لتوليد دقيقة واحدة من الصوت باستخدام المولد الأعلى (top prior) على وحدة معالجة الرسوميات (GPU) من نوع V100. وللمعالجة التلقائية للجهاز الذي يجب أن ينفذ عليه النموذج، استخدم "accelerate". + +- على عكس الورقة البحثية، فإن ترتيب المولدات يبدأ من "0" إلى "1" لأنه بدا أكثر بديهية: نبدأ بالنمذجة من "0". + +- تتطلب عملية توليد العينات الموجهة (Primed sampling) (تكييف عملية التوليد على صوت خام) ذاكرة أكبر من عملية توليد العينات الأسية (Ancestral sampling) ويجب استخدامها مع تعيين "fp16" إلى "True". + +تمت المساهمة بهذا النموذج من قبل [Arthur Zucker](https://huggingface.co/ArthurZ). ويمكن إيجاد الشيفرة البرمجية الأصلية [هنا](https://github.com/openai/jukebox). + +## JukeboxConfig + +[[autodoc]] JukeboxConfig + +## JukeboxPriorConfig + +[[autodoc]] JukeboxPriorConfig + +## JukeboxVQVAEConfig + +[[autodoc]] JukeboxVQVAEConfig + +## JukeboxTokenizer + +[[autodoc]] JukeboxTokenizer + +- save_vocabulary + +## JukeboxModel + +[[autodoc]] JukeboxModel + +- ancestral_sample + +- primed_sample + +- continue_sample + +- upsample + +- _sample + +## JukeboxPrior + +[[autodoc]] JukeboxPrior + +- sample + +- forward + +## JukeboxVQVAE + +[[autodoc]] JukeboxVQVAE + +- forward + +- encode + +- decode \ No newline at end of file From 5cb8ac276b4d14efd3673214651f7a36e7de4330 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:19 +0300 Subject: [PATCH 471/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/kosmos-2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/kosmos-2.md | 79 ++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/source/ar/model_doc/kosmos-2.md diff --git a/docs/source/ar/model_doc/kosmos-2.md b/docs/source/ar/model_doc/kosmos-2.md new file mode 100644 index 00000000000000..09e81fbd5ef48b --- /dev/null +++ b/docs/source/ar/model_doc/kosmos-2.md @@ -0,0 +1,79 @@ +# KOSMOS-2 + +## نظرة عامة +اقترح نموذج KOSMOS-2 في ورقة بحثية بعنوان "Kosmos-2: Grounding Multimodal Large Language Models to the World" من قبل Zhiliang Peng وآخرون. + +KOSMOS-2 هو نموذج لغوي سببي قائم على محول، تم تدريبه باستخدام مهمة التنبؤ بالكلمة التالية على مجموعة بيانات واسعة النطاق من أزواج الصور والنصوص المترابطة. يتم تحويل الإحداثيات المكانية لصناديق الحدود في مجموعة البيانات إلى تسلسل من رموز المواقع، والتي يتم إلحاقها بنص الكيان المقابل (على سبيل المثال، "a snowman" متبوعًا بـ ""). يشبه تنسيق البيانات "الروابط التشعبية" التي تربط مناطق الكائنات في صورة بنصها في التعليق التوضيحي المقابل. + +ملخص الورقة البحثية هو كما يلي: + +> "نقدم Kosmos-2، وهو نموذج لغة متعدد الوسائط (MLLM)، يمكّن قدرات جديدة لفهم أوصاف الكائنات (مثل صناديق الحدود) وربط النص بالعالم المرئي. وعلى وجه التحديد، فإننا نمثل تعبيرات الإشارة على أنها روابط في Markdown، أي "[نص التعليمة البرمجية](صناديق الحدود)"، حيث تكون أوصاف الكائنات عبارة عن تسلسلات من رموز المواقع. إلى جانب مجموعات البيانات متعددة الوسائط، نقوم ببناء بيانات كبيرة الحجم من أزواج الصور والنصوص المترابطة (تسمى GrIT) لتدريب النموذج. بالإضافة إلى القدرات الحالية لـ MLLMs (مثل إدراك الوسائط العامة، واتباع التعليمات، والتعلم في السياق)، يدمج Kosmos-2 قدرات الربط في التطبيقات النهائية. نقيّم Kosmos-2 على مجموعة واسعة من المهام، بما في ذلك (1) الربط متعدد الوسائط، مثل فهم تعبيرات الإشارة، وربط العبارات، (2) الإشارة متعددة الوسائط، مثل توليد تعبيرات الإشارة، (3) مهام اللغة الإدراكية، و (4) فهم اللغة وتوليد النصوص. يضع هذا العمل الأساس لتطوير الذكاء الاصطناعي التجسيدي ويلقي الضوء على التقارب الكبير بين اللغة، والإدراك متعدد الوسائط، والعمل، ونمذجة العالم، والتي تعد خطوة رئيسية نحو الذكاء الاصطناعي العام. الكود والنماذج المسبقة التدريب متوفرة في https://aka.ms/kosmos-2." + +drawing + +نظرة عامة على المهام التي يمكن أن يتعامل معها KOSMOS-2. مأخوذة من الورقة البحثية الأصلية. + +## مثال + +```python +>>> from PIL import Image +>>> import requests +>>> from transformers import AutoProcessor, Kosmos2ForConditionalGeneration + +>>> model = Kosmos2ForConditionalGeneration.from_pretrained("microsoft/kosmos-2-patch14-224") +>>> processor = AutoProcessor.from_pretrained("microsoft/kosmos-2-patch14-224") + +>>> url = "https://huggingface.co/microsoft/kosmos-2-patch14-224/resolve/main/snowman.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> prompt = " An image of" + +>>> inputs = processor(text=prompt, images=image, return_tensors="pt") + +>>> generated_ids = model.generate( +... pixel_values=inputs["pixel_values"], +... input_ids=inputs["input_ids"], +... attention_mask=inputs["attention_mask"], +... image_embeds=None, +... image_embeds_position_mask=inputs["image_embeds_position_mask"], +... use_cache=True, +... max_new_tokens=64, +... ) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] +>>> processed_text = processor.post_process_generation(generated_text, cleanup_and_extract=False) +>>> processed_Multiplier +' An image of a snowman warming himself by a fire.' + +>>> caption, entities = processor.post_process_generation(generated_text) +>>> caption +'An image of a snowman warming himself by a fire.' + +>>> entities +[('a snowman', (12, 21), [(0.390625, 0.046875, 0.984375, 0.828125)]), ('a fire', (41, 47), [(0.171875, 0.015625, 0.484375, 0.890625)])] +``` + +تمت المساهمة بهذا النموذج من قبل [Yih-Dar SHIEH](https://huggingface.co/ydshieh). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/unilm/tree/master/kosmos-2). + +## Kosmos2Config + +[[autodoc]] Kosmos2Config + +## Kosmos2ImageProcessor + +## Kosmos2Processor + +[[autodoc]] Kosmos2Processor + +- __call__ + +## Kosmos2Model + +[[autodoc]] Kosmos2Model + +- forward + +## Kosmos2ForConditionalGeneration + +[[autodoc]] Kosmos2ForConditionalGeneration + +- forward \ No newline at end of file From 11e4f82e84b7f3cc59f86f95928b7c30ee9140f6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:21 +0300 Subject: [PATCH 472/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/layoutlm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/layoutlm.md | 122 +++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/source/ar/model_doc/layoutlm.md diff --git a/docs/source/ar/model_doc/layoutlm.md b/docs/source/ar/model_doc/layoutlm.md new file mode 100644 index 00000000000000..6469229937e613 --- /dev/null +++ b/docs/source/ar/model_doc/layoutlm.md @@ -0,0 +1,122 @@ +# LayoutLM + +## نظرة عامة + +تم اقتراح نموذج LayoutLM في الورقة البحثية [LayoutLM: Pre-training of Text and Layout for Document Image Understanding](https://arxiv.org/abs/1912.13318) بواسطة Yiheng Xu و Minghao Li و Lei Cui و Shaohan Huang و Furu Wei و Ming Zhou. إنه أسلوب بسيط ولكنه فعال لتمثيل النص والتخطيط لفهم صورة المستند ومهام استخراج المعلومات، مثل فهم النماذج وفهم الإيصالات. يحقق نتائج متميزة في العديد من المهام الفرعية: + +- فهم النماذج: مجموعة بيانات [FUNSD](https://guillaumejaume.github.io/FUNSD/) (مجموعة من 199 نموذجًا تمت معاينتها تضم أكثر من 30,000 كلمة). +- فهم الإيصالات: مجموعة بيانات [SROIE](https://rrc.cvc.uab.es/?ch=13) (مجموعة من 626 إيصالًا للتدريب و347 إيصالًا للاختبار). +- تصنيف صورة المستند: مجموعة بيانات [RVL-CDIP](https://www.cs.cmu.edu/~aharley/rvl-cdip/) (مجموعة من 400,000 صورة تنتمي إلى واحدة من 16 فئة). + +فيما يلي ملخص من الورقة البحثية: + +*تم التحقق من تقنيات التمثيل المسبق بنجاح في مجموعة متنوعة من مهام معالجة اللغات الطبيعية في السنوات الأخيرة. على الرغم من الاستخدام الواسع لنماذج التمثيل المسبق لتطبيقات معالجة اللغات الطبيعية، فإنها تركز بشكل حصري تقريبًا على معالجة النص، بينما تتجاهل معلومات التخطيط والنمط التي تعد حيوية لفهم صورة المستند. في هذه الورقة، نقترح LayoutLM لنمذجة التفاعلات المشتركة بين نص ومعلومات التخطيط عبر صور المستندات الممسوحة ضوئيًا، والتي تفيد عددًا كبيرًا من مهام فهم صورة المستند في العالم الحقيقي مثل استخراج المعلومات من المستندات الممسوحة ضوئيًا. علاوة على ذلك، نستفيد أيضًا من ميزات الصور لإدراج المعلومات المرئية للكلمات في LayoutLM. حسب أفضل معرفتنا، هذه هي المرة الأولى التي يتم فيها تعلم النص والتخطيط معًا في إطار واحد للتمثيل المسبق على مستوى المستند. يحقق نتائج جديدة متميزة في العديد من المهام الفرعية، بما في ذلك فهم النماذج (من 70.72 إلى 79.27)، وفهم الإيصالات (من 94.02 إلى 95.24) وتصنيف صورة المستند (من 93.07 إلى 94.42).* + +## نصائح الاستخدام + +بالإضافة إلى *input_ids*، يتوقع [`~transformers.LayoutLMModel.forward`] أيضًا إدخال `bbox`، وهو عبارة عن صناديق محيطة (أي مواضع ثنائية الأبعاد) للرموز المميزة للإدخال. يمكن الحصول على هذه الصناديق باستخدام محرك OCR خارجي مثل [Tesseract](https://github.com/tesseract-ocr/tesseract) من Google (هناك [غلاف Python](https://pypi.org/project/pytesseract/) متاح). يجب أن يكون كل صندوق محيطي بتنسيق (x0, y0, x1, y1)، حيث يتوافق (x0, y0) مع موضع الركن العلوي الأيسر في الصندوق المحيطي، ويمثل (x1, y1) موضع الركن السفلي الأيمن. لاحظ أنه يجب عليك أولاً تطبيع الصناديق المحيطة لتكون على مقياس 0-1000. لتطبيع، يمكنك استخدام الدالة التالية: + +```python +def normalize_bbox(bbox, width, height): + return [ + int(1000 * (bbox[0] / width)), + int(1000 * (bbox[1] / height)), + int(1000 * (bbox[2] / width)), + int(1000 * (bbox[3] / height)), + ] +``` + +هنا، `width` و`height` يقابلان عرض وارتفاع المستند الأصلي الذي يحدث فيه الرمز المميز. يمكن الحصول على تلك باستخدام مكتبة Python Image Library (PIL)، على سبيل المثال، كما يلي: + +```python +from PIL import Image + +# يمكن أن تكون الوثيقة png أو jpg، إلخ. يجب تحويل ملفات PDF إلى صور. +image = Image.open(name_of_your_document).convert("RGB") + +width, height = image.size +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام LayoutLM. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب Pull Request وسنقوم بمراجعته! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- منشور مدونة حول [ضبط دقيق لـ LayoutLM لفهم المستندات باستخدام Keras وHugging Face Transformers](https://www.philschmid.de/fine-tuning-layoutlm-keras). +- منشور مدونة حول كيفية [ضبط دقيق لـ LayoutLM لفهم المستندات باستخدام Hugging Face Transformers فقط](https://www.philschmid.de/fine-tuning-layoutlm). +- دفتر ملاحظات حول كيفية [ضبط دقيق لـ LayoutLM على مجموعة بيانات FUNSD مع تضمين الصور](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLM/Add_image_embeddings_to_LayoutLM.ipynb). +- راجع أيضًا: [دليل مهام الإجابة على الأسئلة الوثائقية](../tasks/document_question_answering) + +- دفتر ملاحظات حول كيفية [ضبط دقيق لـ LayoutLM لتصنيف التسلسلات على مجموعة بيانات RVL-CDIP](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLM/Fine_tuning_LayoutLMForSequenceClassification_on_RVL_CDIP.ipynb). +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) + +- دفتر ملاحظات حول كيفية [ضبط دقيق لـ LayoutLM لتصنيف الرموز المميزة على مجموعة بيانات FUNSD](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/LayoutLM/Fine_tuning_LayoutLMForTokenClassification_on_FUNSD.ipynb). +- [دليل مهام تصنيف الرموز المميزة](../tasks/token_classification) + +**موارد أخرى** + +- [دليل مهام نمذجة اللغة المُقنعة](../tasks/masked_language_modeling) + +🚀 النشر + +- منشور مدونة حول كيفية [نشر LayoutLM مع نقاط النهاية الاستدلالية لـ Hugging Face](https://www.philschmid.de/inference-endpoints-layoutlm). + +## LayoutLMConfig + +[[autodoc]] LayoutLMConfig + +## LayoutLMTokenizer + +[[autodoc]] LayoutLMTokenizer + +## LayoutLMTokenizerFast + +[[autodoc]] LayoutLMTokenizerFast + + + + +## LayoutLMModel + +[[autodoc]] LayoutLMModel + +## LayoutLMForMaskedLM + +[[autodoc]] LayoutLMForMaskedLM + +## LayoutLMForSequenceClassification + +[[autodoc]] LayoutLMForSequenceClassification + +## LayoutLMForTokenClassification + +[[autodoc]] LayoutLMForTokenClassification + +## LayoutLMForQuestionAnswering + +[[autodoc]] LayoutLMForQuestionAnswering + + + + +## TFLayoutLMModel + +[[autodoc]] TFLayoutLMModel + +## TFLayoutLMForMaskedLM + +[[autodoc]] TFLayoutLMForMaskedLM + +## TFLayoutLMForSequenceClassification + +[[autodoc]] TFLayoutLMForSequenceClassification + +## TFLayoutLMForTokenClassification + +[[autodoc]] TFLayoutLMForTokenClassification + +## TFLayoutLMForQuestionAnswering + +[[autodoc]] TFLayoutLMForQuestionAnswering + + + \ No newline at end of file From 5ea0f342d2895a37e7c8294ec198694ae45a426a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:23 +0300 Subject: [PATCH 473/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/layoutlmv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/layoutlmv2.md | 266 +++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 docs/source/ar/model_doc/layoutlmv2.md diff --git a/docs/source/ar/model_doc/layoutlmv2.md b/docs/source/ar/model_doc/layoutlmv2.md new file mode 100644 index 00000000000000..779272f2923ba8 --- /dev/null +++ b/docs/source/ar/model_doc/layoutlmv2.md @@ -0,0 +1,266 @@ +# LayoutLMV2 + +## نظرة عامة + +اقترح نموذج LayoutLMV2 في "LayoutLMv2: Multi-modal Pre-training for Visually-Rich Document Understanding" بواسطة يانغ شو، وييهينج شو، وتينجتشاو ليو، ولي كوي، وفورو وي، وجووكسين وانج، وييجوان لو، وديناي فلورنسيو، وتشا زهانج، ووانشيانج تشي، ومين زهانج، وليدونج تشو. ويحسن LayoutLMV2 من LayoutLM للحصول على نتائج متقدمة في العديد من معايير فهم صورة المستند: + +- استخراج المعلومات من المستندات الممسوحة ضوئيًا: مجموعة بيانات FUNSD (مجموعة من 199 نموذجًا تضم أكثر من 30000 كلمة)، ومجموعة بيانات CORD (مجموعة من 800 إيصال للتدريب، و100 للتحقق، و100 للاختبار)، ومجموعة بيانات SROIE (مجموعة من 626 إيصال للتدريب و347 إيصال للاختبار)، ومجموعة بيانات Kleister-NDA (مجموعة من اتفاقات عدم الإفصاح من قاعدة بيانات EDGAR، بما في ذلك 254 وثيقة للتدريب، و83 وثيقة للتحقق، و203 وثيقة للاختبار). + +- تصنيف صورة المستند: مجموعة بيانات RVL-CDIP (مجموعة من 400000 صورة تنتمي إلى واحدة من 16 فئة). + +- الأسئلة والأجوبة البصرية للمستند: مجموعة بيانات DocVQA (مجموعة من 50000 سؤال محدد على 12000+ صورة للمستند). + +ملخص الورقة هو كما يلي: + +* أثبت التدريب المسبق للنص والتخطيط فعاليته في مجموعة متنوعة من مهام فهم المستندات الغنية بصريًا وذلك بفضل تصميم نموذج معماريته المتميز وميزة المستندات الكبيرة غير الموسومة الممسوحة ضوئيًا/الرقمية. وفي هذه الورقة، نقدم LayoutLMv2 من خلال التدريب المسبق للنص والتخطيط والصورة في إطار متعدد الوسائط، حيث يتم الاستفادة من تصميمات معمارية جديدة للنماذج ومهام التدريب المسبق. وعلى وجه التحديد، لا يستخدم LayoutLMv2 مهمة نمذجة اللغة المرئية المقنعة الموجودة فحسب، بل يستخدم أيضًا مهمتي محاذاة النص والصورة ومطابقة النص والصورة الجديدتين في مرحلة التدريب المسبق، حيث يتم تعلم التفاعل متعدد الوسائط بشكل أفضل. وفي الوقت نفسه، فإنه يدمج أيضًا آلية اهتمام ذاتي واعية مكانيًا في تصميم معمارية المحول، بحيث يمكن للنموذج أن يفهم تمامًا العلاقة الموضعية النسبية بين كتل النص المختلفة. وتظهر نتائج التجارب أن LayoutLMv2 يتفوق على الخطوط القاعدية القوية ويحقق نتائج متقدمة جديدة في مجموعة واسعة من مهام فهم المستندات الغنية بصريًا، بما في ذلك FUNSD (0.7895 -> 0.8420)، CORD (0.9493 -> 0.9601)، SROIE (0.9524 -> 0.9781)، Kleister-NDA (0.834 -> 0.852)، RVL-CDIP (0.9443 -> 0.9564)، وDocVQA (0.7295 -> 0.8672). ويُتاح نموذج LayoutLMv2 المدرب مسبقًا للجمهور على هذا الرابط https.* + +يعتمد LayoutLMv2 على detectron2 وtorchvision وtesseract. قم بتشغيل ما يلي لتثبيتها: + +```bash +python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' +python -m pip install torchvision tesseract +``` + +(إذا كنت تقوم بالتطوير لـ LayoutLMv2، لاحظ أن اجتياز اختبارات doctests يتطلب أيضًا تثبيت هذه الحزم.) + +## نصائح الاستخدام + +- الفرق الرئيسي بين LayoutLMv1 وLayoutLMv2 هو أن الأخير يتضمن تضمينًا بصريًا أثناء التدريب المسبق (بينما يضيف LayoutLMv1 تضمينات بصرية فقط أثناء الضبط الدقيق). + +- يضيف LayoutLMv2 كلًا من انحياز الاهتمام النسبي أحادي البعد وانحياز الاهتمام المكاني ثنائي البعد إلى درجات الاهتمام في طبقات الاهتمام الذاتي. يمكن العثور على التفاصيل في الصفحة 5 من الورقة. + +- يمكن العثور على دفاتر الملاحظات التوضيحية حول كيفية استخدام نموذج LayoutLMv2 على RVL-CDIP وFUNSD وDocVQA وCORD [هنا](https://github.com/NielsRogge/Transformers-Tutorials). + +- يستخدم LayoutLMv2 حزمة [Detectron2](https://github.com/facebookresearch/detectron2/) من Facebook AI لعمودها الفقري المرئي. راجع [هذا الرابط](https://detectron2.readthedocs.io/en/latest/tutorials/install.html) للحصول على تعليمات التثبيت. + +- بالإضافة إلى `input_ids`، يتوقع [`~LayoutLMv2Model.forward`] إدخالين إضافيين، وهما `image` و`bbox`. ويمثل إدخال `image` صورة المستند الأصلي الذي تظهر فيه رموز النص. ويتوقع النموذج أن تكون كل صورة للمستند بحجم 224x224. وهذا يعني أنه إذا كان لديك دفعة من صور المستندات، فيجب أن يكون `image` عبارة عن مصفوفة من الشكل (batch_size، 3، 224، 224). ويمكن أن يكون هذا إما `torch.Tensor` أو `Detectron2.structures.ImageList`. لا تحتاج إلى تطبيع القنوات، حيث يقوم النموذج بذلك. ومن المهم ملاحظة أن العمود الفقري المرئي يتوقع قنوات BGR بدلاً من RGB، حيث أن جميع النماذج في Detectron2 يتم تدريبها مسبقًا باستخدام تنسيق BGR. وإدخال `bbox` عبارة عن حدود (مواضع ثنائية الأبعاد) لرموز النص المدخلة. وهذا مطابق لـ [`LayoutLMModel`]. ويمكن الحصول عليها باستخدام محرك التعرف الضوئي على الحروف مثل [Tesseract](https://github.com/tesseract-ocr/tesseract) من Google (يوجد [غلاف Python](https://pypi.org/project/pytesseract/) متاح). يجب أن يكون كل حد في تنسيق (x0، y0، x1، y1)، حيث يتوافق (x0، y0) مع موضع الركن العلوي الأيسر في الحد، و(x1، y1) يمثل موضع الركن السفلي الأيمن. لاحظ أنه يجب أولاً تطبيع الحدود لتكون على مقياس 0-1000. لتطبيع، يمكنك استخدام الدالة التالية: + +```python +def normalize_bbox(bbox, width, height): + return [ + int(1000 * (bbox[0] / width)), + int(1000 * (bbox[1] / height)), + int(1000 * (bbox[2] / width)), + int(1000 * (bbox[3] / height)), + ] +``` + +هنا، `width` و`height` هما عرض وارتفاع المستند الأصلي الذي يحدث فيه الرمز (قبل تغيير حجم الصورة). ويمكن الحصول عليها باستخدام مكتبة Python Image Library (PIL)، على سبيل المثال، كما يلي: + +```python +from PIL import Image + +image = Image.open( + "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)." +) + +width, height = image.size +``` + +ومع ذلك، يتضمن هذا النموذج معالجًا جديدًا تمامًا [`~transformers.LayoutLMv2Processor`] يمكن استخدامه لإعداد البيانات للنموذج مباشرة (بما في ذلك تطبيق التعرف الضوئي على الحروف تحت الغطاء). يمكن العثور على مزيد من المعلومات في قسم "الاستخدام" أدناه. + +- داخليًا، سيرسل [`~transformers.LayoutLMv2Model`] إدخال `image` عبر عموده الفقري المرئي للحصول على خريطة ميزات ذات دقة أقل، يكون شكلها مطابقًا لسمة `image_feature_pool_shape` من [`~transformers.LayoutLMv2Config`]. يتم بعد ذلك تسطيح خريطة الميزات هذه للحصول على تسلسل من رموز الصورة. وبما أن حجم خريطة الميزات هو 7x7 بشكل افتراضي، فإننا نحصل على 49 رمز صورة. يتم بعد ذلك دمج هذه الرموز مع رموز النص، وإرسالها عبر مشفر المحول. وهذا يعني أن الحالات المخفية الأخيرة للنموذج سيكون لها طول 512 + 49 = 561، إذا قمت بضبط رموز النص حتى الطول الأقصى. وبشكل أكثر عمومية، سيكون للحالات المخفية الأخيرة شكل `seq_length` + `image_feature_pool_shape[0]` * `config.image_feature_pool_shape[1]`. + +- عند استدعاء [`~transformers.LayoutLMv2Model.from_pretrained`]`]، سيتم طباعة تحذير مع قائمة طويلة من أسماء المعلمات التي لم يتم تهيئتها. وهذا ليس مشكلة، حيث أن هذه المعلمات هي إحصاءات التطبيع بالدفعات، والتي سيكون لها قيم عند الضبط الدقيق على مجموعة بيانات مخصصة. + +- إذا كنت تريد تدريب النموذج في بيئة موزعة، فتأكد من استدعاء [`synchronize_batch_norm`] على النموذج من أجل مزامنة طبقات التطبيع بالدفعات للعمود الفقري المرئي بشكل صحيح. + +بالإضافة إلى ذلك، هناك LayoutXLM، وهو إصدار متعدد اللغات من LayoutLMv2. يمكن العثور على مزيد من المعلومات على [صفحة توثيق LayoutXLM](layoutxlm). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها برمز 🌎) لمساعدتك في البدء باستخدام LayoutLMv2. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنراجعه! ويجب أن يثبت المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- دفتر ملاحظات حول كيفية [ضبط نموذج LayoutLMv2 الدقيق لتصنيف النصوص على مجموعة بيانات RVL-CDIP](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/RVL-CDIP/Fine_tuning_LayoutLMv2ForSequenceClassification_on_RVL_CDIP.ipynb). + +- راجع أيضًا: [دليل مهام تصنيف النصوص](../tasks/sequence_classification) + + + +- دفتر ملاحظات حول كيفية [ضبط نموذج LayoutLMv2 الدقيق لأسئلة وأجوبة على مجموعة بيانات DocVQA](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/DocVQA/Fine_tuning_LayoutLMv2ForQuestionAnswering_on_DocVQA.ipynb). + +- راجع أيضًا: [دليل مهام الأسئلة والأجوبة](../tasks/question_answering) + +- راجع أيضًا: [دليل مهام الأسئلة والأجوبة للمستندات](../tasks/document_question_answering) + + + +- دفتر ملاحظات حول كيفية [ضبط نموذج LayoutLMv2 الدقيق لتصنيف الرموز على مجموعة بيانات CORD](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/CORD/Fine_tuning_LayoutLMv2ForTokenClassification_on_CORD.ipynb). + +- دفتر ملاحظات حول كيفية [ضبط نموذج LayoutLMv2 الدقيق لتصنيف الرموز على مجموعة بيانات FUNSD](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/FUNSD/Fine_tuning_LayoutLMv2ForTokenClassification_on_FUNSD_using_HuggingFace_Trainer.ipynb). + +- راجع أيضًا: [دليل مهام تصنيف الرموز](../tasks/token_classification) +## Usage: LayoutLMv2Processor + +أسهل طريقة لإعداد البيانات للنموذج هي استخدام [LayoutLMv2Processor]، والذي يجمع داخلياً بين معالج الصور [LayoutLMv2ImageProcessor] ومحلل الرموز [LayoutLMv2Tokenizer] أو [LayoutLMv2TokenizerFast]. ويتولى معالج الصور التعامل مع الصور، بينما يتعامل محلل الرموز مع النص. ويجمع المعالج بين الاثنين، وهو مثالي لنموذج متعدد الوسائط مثل LayoutLMv2. لاحظ أنه يمكنك استخدام كل منهما بشكل منفصل إذا كنت تريد التعامل مع وسيط واحد فقط. + +```python +from transformers import LayoutLMv2ImageProcessor, LayoutLMv2TokenizerFast, LayoutLMv2Processor + +image_processor = LayoutLMv2ImageProcessor() # apply_ocr is set to True by default +tokenizer = LayoutLMv2TokenizerFast.from_pretrained("microsoft/layoutlmv2-base-uncased") +processor = LayoutLMv2Processor(image_processor, tokenizer) +``` + +باختصار، يمكنك تزويد [LayoutLMv2Processor] بصورة المستند (وربما بيانات إضافية)، وسينشئ المدخلات التي يتوقعها النموذج. داخلياً، يستخدم المعالج أولاً [LayoutLMv2ImageProcessor] لتطبيق التعرف الضوئي على الحروف (OCR) على الصورة للحصول على قائمة بالكلمات وحدود الصناديق المعيارية، بالإضافة إلى تغيير حجم الصورة إلى حجم معين للحصول على مدخلات الصورة. ثم يتم تزويد الكلمات وحدود الصناديق المعيارية إلى [LayoutLMv2Tokenizer] أو [LayoutLMv2TokenizerFast]، والذي يحولها إلى رموز على مستوى الرمز `input_ids`، و`attention_mask`، و`token_type_ids`، و`bbox`. ويمكنك أيضًا تزويد المعالج بعلامات الكلمات، والتي يتم تحويلها إلى `labels` على مستوى الرمز. + +يستخدم [LayoutLMv2Processor] [PyTesseract](https://pypi.org/project/pytesseract/)، وهو غلاف Python حول محرك التعرف الضوئي على الحروف (OCR) Tesseract من Google، تحت الغطاء. لاحظ أنه يمكنك استخدام محرك التعرف الضوئي على الحروف (OCR) الذي تختاره وتوفير الكلمات وحدود الصناديق بنفسك. يتطلب ذلك تهيئة [LayoutLMv2ImageProcessor] مع `apply_ocr` تعيينها على `False`. + +هناك ما مجموعه 5 حالات استخدام يدعمها المعالج. أدناه، نقوم بإدراجها جميعًا. لاحظ أن كل من هذه الحالات الاستخدامية تعمل لكل من المدخلات المجمعة وغير المجمعة (نوضحها لمدخلات غير مجمعة). + +**حالة الاستخدام 1: تصنيف صورة المستند (التدريب والاستدلال) + تصنيف الرموز (الاستدلال)، apply_ocr = True** + +هذه هي الحالة الأكثر بساطة، والتي سيؤدي فيها المعالج (في الواقع معالج الصور) إلى التعرف الضوئي على الحروف في الصورة للحصول على الكلمات وحدود الصناديق المعيارية. + +```python +from transformers import LayoutLMv2Processor +from PIL import Image + +processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased") + +image = Image.open( + "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)." +).convert("RGB") +encoding = processor( + image, return_tensors="pt" +) # يمكنك أيضًا إضافة جميع معلمات محلل الرموز هنا مثل padding أو truncation +print(encoding.keys()) +# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image']) +``` + +**حالة الاستخدام 2: تصنيف صورة المستند (التدريب والاستدلال) + تصنيف الرموز (الاستدلال)، apply_ocr=False** + +في حالة الرغبة في إجراء التعرف الضوئي على الحروف بنفسك، يمكنك تهيئة معالج الصور مع `apply_ocr` تعيينها على `False`. في هذه الحالة، يجب عليك توفير الكلمات وحدود الصناديق المقابلة (المعيارية) بنفسك للمعالج. + +```python +from transformers import LayoutLMv2Processor +from PIL import Image + +processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr") + +image = Image.open( + "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)." +).convert("RGB") +words = ["hello", "world"] +boxes = [[1, 2, 3, 4], [5, 6, 7, 8]] # تأكد من تطبيع حدود الصناديق الخاصة بك +encoding = processor(image, words, boxes=boxes, return_tensors="pt") +print(encoding.keys()) +# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image']) +``` + +**حالة الاستخدام 3: تصنيف الرموز (التدريب)، apply_ocr=False** + +بالنسبة لمهام تصنيف الرموز (مثل FUNSD وCORD وSROIE وKleister-NDA)، يمكنك أيضًا توفير علامات الكلمات المقابلة لتدريب النموذج. سيقوم المعالج بعد ذلك بتحويلها إلى `labels` على مستوى الرمز. بشكل افتراضي، سيقوم بتسمية أول كلمة فقط من الكلمة، وتسمية الكلمات المتبقية بـ -100، والتي هي `ignore_index` من PyTorch's CrossEntropyLoss. في حالة الرغبة في تسمية جميع الكلمات في الكلمة، يمكنك تهيئة محلل الرموز مع `only_label_first_subword` تعيينها على `False`. + +```python +from transformers import LayoutLMv2Processor +from PIL import Image + +processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr") + +image = Image.open( + "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)." +).convert("RGB") +words = ["hello", "world"] +boxes = [[1, 2, 3, 4], [5, 6, 7, 8]] # تأكد من تطبيع حدود الصناديق الخاصة بك +word_labels = [1, 2] +encoding = processor(image, words, boxes=boxes, word_labels=word_labels, return_tensors="pt") +print(encoding.keys()) +# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'labels', 'image']) +``` + +**حالة الاستخدام 4: الإجابة على الأسئلة المرئية (الاستدلال)، apply_ocr=True** + +بالنسبة لمهام الإجابة على الأسئلة المرئية (مثل DocVQA)، يمكنك تزويد المعالج بسؤال. بشكل افتراضي، سيقوم المعالج بتطبيق التعرف الضوئي على الحروف في الصورة، وإنشاء رموز [CLS] للأسئلة [SEP] للكلمات [SEP]. + +```python +from transformers import LayoutLMv2Processor +from PIL import Image + +processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased") + +image = Image.open( + "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)." +).convert("RGB") +question = "What's his name?" +encoding = processor(image, question, return_tensors="pt") +print(encoding.keys()) +# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image']) +``` + +**حالة الاستخدام 5: الإجابة على الأسئلة المرئية (الاستدلال)، apply_ocr=False** + +بالنسبة لمهام الإجابة على الأسئلة المرئية (مثل DocVQA)، يمكنك تزويد المعالج بسؤال. إذا كنت تريد إجراء التعرف الضوئي على الحروف بنفسك، يمكنك تزويد المعالج بالكلمات وحدود الصناديق (المعيارية) الخاصة بك. + +```python +from transformers import LayoutLMv2Processor +from PIL import Image + +processor = LayoutLMv2Processor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr") + +image = Image.open( + "name_of_your_document - can be a png, jpg, etc. of your documents (PDFs must be converted to images)." +).convert("RGB") +question = "What's his name?" +words = ["hello", "world"] +boxes = [[1, 2, 3, 4], [5, 6, 7, 8]] # تأكد من تطبيع حدود الصناديق الخاصة بك +encoding = processor(image, question, words, boxes=boxes, return_tensors="pt") +print(encoding.keys()) +# dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'bbox', 'image']) +``` + +## LayoutLMv2Config + +[[autodoc]] LayoutLMv2Config + +## LayoutLMv2FeatureExtractor + +[[autodoc]] LayoutLMv2FeatureExtractor + +- __call__ + +## LayoutLMv2ImageProcessor + +[[autodoc]] LayoutLMv2ImageProcessor + +- preprocess + +## LayoutLMv2Tokenizer + +[[autodoc]] LayoutLMv2Tokenizer + +- __call__ + +- save_vocabulary + +## LayoutLMv2TokenizerFast + +[[autodoc]] LayoutLMv2TokenizerFast + +- __call__ + +## LayoutLMv2Processor + +[[autodoc]] LayoutLMv2Processor + +- __call__ + +## LayoutLMv2Model + +[[autodoc]] LayoutLMv2Model + +- forward + +## LayoutLMv2ForSequenceClassification + +[[autodoc]] LayoutLMv2ForSequenceClassification + +## LayoutLMv2ForTokenClassification + +[[autodoc]] LayoutLMv2ForTokenClassification + +## LayoutLMv2ForQuestionAnswering + +[[autodoc]] LayoutLMv2ForQuestionAnswering \ No newline at end of file From 541316d658287e97e4768b55f89144bf1e8c74d1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:25 +0300 Subject: [PATCH 474/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/layoutlmv3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/layoutlmv3.md | 164 +++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 docs/source/ar/model_doc/layoutlmv3.md diff --git a/docs/source/ar/model_doc/layoutlmv3.md b/docs/source/ar/model_doc/layoutlmv3.md new file mode 100644 index 00000000000000..53b45d37087740 --- /dev/null +++ b/docs/source/ar/model_doc/layoutlmv3.md @@ -0,0 +1,164 @@ +# LayoutLMv3 + +## نظرة عامة + +اقتُرح نموذج LayoutLMv3 في ورقة بحثية بعنوان "LayoutLMv3: Pre-training for Document AI with Unified Text and Image Masking" من قبل يوبان هوانغ، وتينغتشاو ليو، وليي كوي، ويوتونغ لو، وفورو وي. + +LayoutLMv3 هو نسخة مبسطة من [LayoutLMv2](layoutlmv2) حيث يستخدم embeddings رقعة (كما في [ViT](vit)) بدلاً من الاستفادة من الشبكة العصبية التلافيفية CNN، ويتم التدريب المسبق للنموذج على 3 مهام: نمذجة اللغة المقنعة (MLM)، ونمذجة الصور المقنعة (MIM)، ومواءمة الكلمات-الرقعة (WPA). + +ملخص الورقة البحثية هو كما يلي: + +"حققت تقنيات التدريب الذاتي المسبق تقدمًا ملحوظًا في مجال الذكاء الاصطناعي للوثائق. تستخدم معظم النماذج متعددة الوسائط التي تم تدريبها مسبقًا هدف نمذجة اللغة المقنعة لتعلم التمثيلات ثنائية الاتجاه على طريقة اللغة، ولكنها تختلف في أهداف التدريب المسبق لطريقة الصورة. يضيف هذا الاختلاف صعوبة في تعلم التمثيل متعدد الوسائط. في هذه الورقة، نقترح LayoutLMv3 لتدريب المحولات متعددة الوسائط مسبقًا من أجل الذكاء الاصطناعي للوثائق مع القناع الموحد للنص والصورة. بالإضافة إلى ذلك، يتم تدريب LayoutLMv3 مسبقًا بهدف مواءمة الكلمات-الرقعة لتعلم المحاذاة متعددة الوسائط عن طريق التنبؤ بما إذا كانت رقعة الصورة المقابلة لكلمة نصية مقنعة. يجعل هذا التصميم المعماري الموحد البسيط وأهداف التدريب LayoutLMv3 نموذجًا مسبقًا للتدريب العام لكل من مهام الذكاء الاصطناعي للوثائق التي تركز على النص وتلك التي تركز على الصور. وتظهر النتائج التجريبية أن LayoutLMv3 يحقق أداءً متميزًا ليس فقط في المهام التي تركز على النص، بما في ذلك فهم النماذج والفهم الإيصالات، والأسئلة البصرية للوثائق، ولكن أيضًا في المهام التي تركز على الصور مثل تصنيف صور المستندات وتحليل تخطيط المستندات." + + + + تصميم LayoutLMv3. مأخوذ من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). تمت إضافة إصدار TensorFlow من هذا النموذج بواسطة [chriskoo](https://huggingface.co/chriskoo)، و [tokec](https://huggingface.co/tokec)، و [lre](https://huggingface.co/lre). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/unilm/tree/master/layoutlmv3). + +## نصائح الاستخدام + +- من حيث معالجة البيانات، فإن LayoutLMv3 مطابق لسلفه [LayoutLMv2](layoutlmv2)، باستثناء ما يلي: + +- يجب تغيير حجم الصور وتطبيعها مع القنوات بتنسيق RGB العادي. من ناحية أخرى، يقوم LayoutLMv2 بتطبيع الصور داخليًا ويتوقع القنوات بتنسيق BGR. + +- يتم توكين النص باستخدام الترميز ثنائي البايت (BPE)، على عكس WordPiece. + +بسبب هذه الاختلافات في معالجة البيانات الأولية، يمكن استخدام [`LayoutLMv3Processor`] الذي يجمع داخليًا بين [`LayoutLMv3ImageProcessor`] (لطريقة الصورة) و [`LayoutLMv3Tokenizer`]/[`LayoutLMv3TokenizerFast`] (لطريقة النص) لإعداد جميع البيانات للنموذج. + +- فيما يتعلق باستخدام [`LayoutLMv3Processor`]]، نشير إلى [دليل الاستخدام](layoutlmv2#usage-layoutlmv2processor) لسلفه. + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام LayoutLMv3. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنقوم بمراجعته! يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +LayoutLMv3 متطابق تقريبًا مع LayoutLMv2، لذلك أدرجنا أيضًا موارد LayoutLMv2 التي يمكنك تكييفها لمهام LayoutLMv3. بالنسبة إلى دفاتر الملاحظات هذه، احرص على استخدام [`LayoutLMv2Processor`] بدلاً من ذلك عند إعداد البيانات للنموذج! + + + +- يمكن العثور على دفاتر الملاحظات التجريبية لـ LayoutLMv3 [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/LayoutLMv3). + +- يمكن العثور على النصوص التجريبية [هنا](https://github.com/huggingface/transformers/tree/main/examples/research_projects/layoutlmv3). + + + +- يتم دعم [`LayoutLMv2ForSequenceClassification`] بواسطة هذا [دفتر الملاحظات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/RVL-CDIP/Fine_tuning_LayoutLMv2ForSequenceClassification_on_RVL_CDIP.ipynb). + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) + + + +- يتم دعم [`LayoutLMv3ForTokenClassification`] بواسطة [نص النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/research_projects/layoutlmv3) و [دفتر الملاحظات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv3/Fine_tune_LayoutLMv3_on_FUNSD_(HuggingFace_Trainer).ipynb). + +- [دفتر الملاحظات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/FUNSD/Inference_with_LayoutLMv2ForTokenClassification.ipynb) حول كيفية إجراء الاستدلال مع [`LayoutLMv2ForTokenClassification`] و [دفتر الملاحظات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/FUNSD/True_inference_with_LayoutLMv2ForTokenClassification_%2B_Gradio_demo.ipynb) حول كيفية إجراء الاستدلال عند عدم توفر التسميات مع [`LayoutLMv2ForTokenClassification`]. + +- [دفتر الملاحظات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/FUNSD/Fine_tuning_LayoutLMv2ForTokenClassification_on_FUNSD_using_HuggingFace_Trainer.ipynb) حول كيفية ضبط نموذج [`LayoutLMv2ForTokenClassification`] باستخدام مدرب 🤗 Trainer. + +- [دليل مهام تصنيف الرموز](../tasks/token_classification) + + + +- يتم دعم [`LayoutLMv2ForQuestionAnswering`] بواسطة هذا [دفتر الملاحظات](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/DocVQA/Fine_tuning_LayoutLMv2ForQuestionAnswering_on_DocVQA.ipynb). + +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) + +**الإجابة على أسئلة الوثائق** + +- [دليل مهام الإجابة على أسئلة الوثائق](../tasks/document_question_answering) + +## LayoutLMv3Config + +[[autodoc]] LayoutLMv3Config + +## LayoutLMv3FeatureExtractor + +[[autodoc]] LayoutLMv3FeatureExtractor + +- __call__ + +## LayoutLMv3ImageProcessor + +[[autodoc]] LayoutLMv3ImageProcessor + +- preprocess + +## LayoutLMv3Tokenizer + +[[autodoc]] LayoutLMv3Tokenizer + +- __call__ + +- save_vocabulary + +## LayoutLMv3TokenizerFast + +[[autodoc]] LayoutLMv3TokenizerFast + +- __call__ + +## LayoutLMv3Processor + +[[autodoc]] LayoutLMv3Processor + +- __call__ + + + + +## LayoutLMv3Model + +[[autodoc]] LayoutLMv3Model + +- forward + +## LayoutLMv3ForSequenceClassification + +[[autodoc]] LayoutLMv3ForSequenceClassification + +- forward + +## LayoutLMv3ForTokenClassification + +[[autodoc]] LayoutLMv3ForTokenClassification + +- forward + +## LayoutLMv3ForQuestionAnswering + +[[autodoc]] LayoutLMv3ForQuestionAnswering + +- forward + + + + +## TFLayoutLMv3Model + +[[autodoc]] TFLayoutLMv3Model + +- call + + +## TFLayoutLMv3ForSequenceClassification + +[[autodoc]] TFLayoutLMv3ForSequenceClassification + +- call + +## TFLayoutLMv3ForTokenClassification + +[[autodoc]] TFLayoutLMv3ForTokenClassification + +- call + +## TFLayoutLMv3ForQuestionAnswering + +[[autodoc]] TFLayoutLMv3ForQuestionAnswering + +- call + + + \ No newline at end of file From 797fec7e3845c72d69d3d53f4898d83b393ccab8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:27 +0300 Subject: [PATCH 475/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/layoutxlm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/layoutxlm.md | 54 +++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 docs/source/ar/model_doc/layoutxlm.md diff --git a/docs/source/ar/model_doc/layoutxlm.md b/docs/source/ar/model_doc/layoutxlm.md new file mode 100644 index 00000000000000..459d3d85fce549 --- /dev/null +++ b/docs/source/ar/model_doc/layoutxlm.md @@ -0,0 +1,54 @@ +# LayoutXLM + +## نظرة عامة + +اقترح LayoutXLM في [LayoutXLM: Multimodal Pre-training for Multilingual Visually-rich Document Understanding](https://arxiv.org/abs/2104.08836) بواسطة Yiheng Xu, Tengchao Lv, Lei Cui, Guoxin Wang, Yijuan Lu, Dinei Florencio, Cha Zhang, Furu Wei. وهو امتداد متعدد اللغات لنموذج [LayoutLMv2](https://arxiv.org/abs/2012.14740) تم تدريبه على 53 لغة. + +الملخص من الورقة هو ما يلي: + +> حقق التعلم المتعدد الوسائط باستخدام النص والتخطيط والصورة أداءً متميزًا في مهام فهم المستندات الغنية بالمعلومات المرئية مؤخرًا، مما يدل على الإمكانات الكبيرة للتعلم المشترك عبر الوسائط المختلفة. في هذه الورقة، نقدم LayoutXLM، وهو نموذج متعدد الوسائط مُدرب مسبقًا لفهم المستندات متعددة اللغات، يهدف إلى سد الحواجز اللغوية لفهم المستندات الغنية بالمعلومات المرئية. ولتقييم LayoutXLM بدقة، نقدم أيضًا مجموعة بيانات مرجعية لفهم النماذج متعددة اللغات تسمى XFUN، والتي تتضمن نماذج لفهم النماذج باللغة الصينية واليابانية والإسبانية والفرنسية والإيطالية والألمانية والبرتغالية، وتم وضع علامات يدوية على أزواج القيم الرئيسية لكل لغة. وتظهر نتائج التجارب أن نموذج LayoutXLM قد تفوق بشكل كبير على النماذج المُدربة مسبقًا متعددة اللغات الموجودة حاليًا في مجموعة بيانات XFUN. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/unilm). + +## نصائح الاستخدام وأمثلة + +يمكنك مباشرةً توصيل أوزان LayoutXLM في نموذج LayoutLMv2، مثل ما يلي: + +```python +from transformers import LayoutLMv2Model + +model = LayoutLMv2Model.from_pretrained("microsoft/layoutxlm-base") +``` + +لاحظ أن LayoutXLM لديه محدد خاص به، يعتمد على [`LayoutXLMTokenizer`]/[`LayoutXLMTokenizerFast`]. يمكنك تهيئته كما يلي: + +```python +from transformers import LayoutXLMTokenizer + +tokenizer = LayoutXLMTokenizer.from_pretrained("microsoft/layoutxlm-base") +``` + +مثل LayoutLMv2، يمكنك استخدام [`LayoutXLMProcessor`] (الذي يطبق داخليًا [`LayoutLMv2ImageProcessor`] و [`LayoutXLMTokenizer`]/[`LayoutXLMTokenizerFast`] بالتتابع) لإعداد جميع البيانات للنموذج. + + +نظرًا لأن بنية LayoutXLM تعادل بنية LayoutLMv2، فيمكن الرجوع إلى [صفحة توثيق LayoutLMv2](layoutlmv2) للحصول على جميع النصائح وأمثلة التعليمات البرمجية ومفكرات Jupyter Notebook. + + +## LayoutXLMTokenizer + +[[autodoc]] LayoutXLMTokenizer +- __call__ +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## LayoutXLMTokenizerFast + +[[autodoc]] LayoutXLMTokenizerFast +- __call__ + +## LayoutXLMProcessor + +[[autodoc]] LayoutXLMProcessor +- __call__ \ No newline at end of file From 48e9481949f14e756a659a71ab9c758f654b6d3a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:28 +0300 Subject: [PATCH 476/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/led.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/led.md | 89 +++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 docs/source/ar/model_doc/led.md diff --git a/docs/source/ar/model_doc/led.md b/docs/source/ar/model_doc/led.md new file mode 100644 index 00000000000000..062a421924b065 --- /dev/null +++ b/docs/source/ar/model_doc/led.md @@ -0,0 +1,89 @@ +# LED + +## نظرة عامة +اقترح نموذج LED في "Longformer: The Long-Document Transformer" بواسطة Iz Beltagy و Matthew E. Peters و Arman Cohan. + +مقدمة الورقة البحثية هي التالية: + +*لا تستطيع النماذج المستندة إلى المحول معالجة التسلسلات الطويلة بسبب عملية الاهتمام الذاتي، والتي تتناسب تربيعيًا مع طول التسلسل. ولمعالجة هذا القيد، نقدم Longformer بآلية اهتمام تتناسب خطيًا مع طول التسلسل، مما يسهل معالجة المستندات التي تحتوي على آلاف الرموز أو أكثر. وآلية الاهتمام Longformer هي بديل مباشر لاهتمام الذات القياسي ويجمع بين الاهتمام المحلي بنافذة والاهتمام العالمي المدفوع بالمهمة. وبناءً على العمل السابق حول محولات التسلسل الطويل، نقيم Longformer على نمذجة اللغة على مستوى الأحرف ونحقق نتائج متقدمة على text8 و enwik8. وعلى عكس معظم الأعمال السابقة، نقوم أيضًا بتدريب Longformer مسبقًا وضبط دقته على مجموعة متنوعة من المهام اللاحقة. تفوق نسخة Longformer المُدربة مسبقًا باستمرار على RoBERTa في مهام المستندات الطويلة وتحقق نتائج متقدمة جديدة في WikiHop و TriviaQA. وأخيرًا، نقدم Longformer-Encoder-Decoder (LED)، وهو متغير Longformer لدعم مهام التسلسل إلى تسلسل التوليدية الخاصة بالمستندات الطويلة، ونثبت فعاليتها في مجموعة بيانات الملخصات arXiv.* + +## نصائح الاستخدام +- [`LEDForConditionalGeneration`] هو امتداد لـ +[`BartForConditionalGeneration`] باستبدال طبقة *الاهتمام الذاتي* التقليدية +بطبقة *اهتمام ذاتي مقسم* من *Longformer*. [`LEDTokenizer`] هو مرادف لـ +[`BartTokenizer`]. +- يعمل LED بشكل جيد جدًا في مهام *التسلسل إلى تسلسل* طويلة المدى حيث تتجاوز `input_ids` طول 1024 رمزًا. +- يقوم LED بضبط `input_ids` ليكون مضاعفًا لـ `config.attention_window` إذا لزم الأمر. لذلك، يتم تحقيق تسريع صغير عند استخدام [`LEDTokenizer`] مع وسيط `pad_to_multiple_of`. +- يستخدم LED *الاهتمام العالمي* من خلال `global_attention_mask` (راجع +[`LongformerModel`]). بالنسبة للتلخيص، يُنصح بوضع *الاهتمام العالمي* فقط على الرمز الأول +``. بالنسبة للإجابة على الأسئلة، يُنصح بوضع *الاهتمام العالمي* على جميع رموز السؤال. +- لضبط دقة LED على 16384، يمكن تمكين *التحقق من التدرج* في حالة حدوث أخطاء في الذاكرة أثناء التدريب. يمكن القيام بذلك عن طريق تنفيذ `model.gradient_checkpointing_enable()`. +بالإضافة إلى ذلك، يمكن استخدام علم `use_cache=False` +لإيقاف تشغيل آلية التخزين المؤقت لتوفير الذاكرة. +- LED هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بضبط المدخلات على اليمين بدلاً من اليسار. + +تمت المساهمة بهذا النموذج بواسطة [patrickvonplaten](https://huggingface.co/patrickvonplaten). + +## الموارد +- [دفتر ملاحظات يظهر كيفية تقييم LED](https://colab.research.google.com/drive/12INTTR6n64TzS4RrXZxMSXfrOd9Xzamo?usp=sharing). +- [دفتر ملاحظات يظهر كيفية ضبط دقة LED](https://colab.research.google.com/drive/12LjJazBl7Gam0XBPy_y0CTOJZeZ34c2v?usp=sharing). +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## LEDConfig +[[autodoc]] LEDConfig + +## LEDTokenizer +[[autodoc]] LEDTokenizer +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## LEDTokenizerFast +[[autodoc]] LEDTokenizerFast + +## المخرجات الخاصة بـ LED +[[autodoc]] models.led.modeling_led.LEDEncoderBaseModelOutput +[[autodoc]] models.led.modeling_led.LEDSeq2SeqModelOutput +[[autodoc]] models.led.modeling_led.LEDSeq2SeqLMOutput +[[autodoc]] models.led.modeling_led.LEDSeq2SeqSequenceClassifierOutput +[[autodoc]] models.led.modeling_led.LEDSeq2SeqQuestionAnsweringModelOutput +[[autodoc]] models.led.modeling_tf_led.TFLEDEncoderBaseModelOutput +[[autodoc]] models.led.modeling_tf_led.TFLEDSeq2SeqModelOutput +[[autodoc]] models.led.modeling_tf_led.TFLEDSeq2SeqLMOutput + + + + +## LEDModel +[[autodoc]] LEDModel +- forward + +## LEDForConditionalGeneration +[[autodoc]] LEDForConditionalGeneration +- forward + +## LEDForSequenceClassification +[[autodoc]] LEDForSequenceClassification +- forward + +## LEDForQuestionAnswering +[[autodoc]] LEDForQuestionAnswering +- forward + + + + +## TFLEDModel +[[autodoc]] TFLEDModel +- call + +## TFLEDForConditionalGeneration +[[autodoc]] TFLEDForConditionalGeneration +- call + + + \ No newline at end of file From bbaf04ea2865bdd0442e608fab30e6be06bec90f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:30 +0300 Subject: [PATCH 477/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/levit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/levit.md | 76 +++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/source/ar/model_doc/levit.md diff --git a/docs/source/ar/model_doc/levit.md b/docs/source/ar/model_doc/levit.md new file mode 100644 index 00000000000000..c2a095668891ae --- /dev/null +++ b/docs/source/ar/model_doc/levit.md @@ -0,0 +1,76 @@ +# LeViT + +## نظرة عامة +اقترح نموذج LeViT في [LeViT: تقديم المحولات إلى محولات الرؤية](https://arxiv.org/abs/2104.01136) بواسطة Ben Graham, وAlaaeldin El-Nouby, وHugo Touvron, وPierre Stock, وArmand Joulin, وHervé Jégou, وMatthijs Douze. يحسن LeViT [Vision Transformer (ViT)](vit) في الأداء والكفاءة من خلال بعض الاختلافات المعمارية مثل خرائط التنشيط ذات الدقة المنخفضة في المحولات وإدخال تحيز الانتباه لدمج المعلومات الموضعية. + +المستخلص من الورقة هو ما يلي: + +*نصمم عائلة من هندسات تصنيف الصور التي تحقق التوازن الأمثل بين الدقة والكفاءة في نظام السرعة العالية. تستفيد أعمالنا من النتائج الحديثة في البنى المعتمدة على الانتباه، والتي تتمتع بالقدرة التنافسية على أجهزة المعالجة المتوازية للغاية. نعيد النظر في المبادئ المستمدة من الأدبيات الواسعة حول الشبكات العصبية التلافيفية لتطبيقها على المحولات، وخاصة خرائط التنشيط ذات الدقة المنخفضة. كما نقدم تحيز الانتباه، وهي طريقة جديدة لدمج المعلومات الموضعية في محولات الرؤية. ونتيجة لذلك، نقترح LeViT: شبكة عصبية هجينة لتصنيف الصور ذات الاستدلال السريع. + +نأخذ في الاعتبار تدابير مختلفة للكفاءة على منصات الأجهزة المختلفة، وذلك لتعكس على أفضل وجه مجموعة واسعة من سيناريوهات التطبيق. وتؤكد تجاربنا المستفيضة صحة خياراتنا الفنية وتظهر أنها مناسبة لمعظم البنى. بشكل عام، يتفوق LeViT بشكل كبير على شبكات التلافيف ومحولات الرؤية الحالية فيما يتعلق بمقايضة السرعة/الدقة. على سبيل المثال، عند دقة ImageNet بنسبة 80%، يكون LeViT أسرع بخمس مرات من EfficientNet على وحدة المعالجة المركزية.* + +drawing + +هندسة LeViT. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [anugunj](https://huggingface.co/anugunj). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/LeViT). + +## نصائح الاستخدام + +- مقارنة بـ ViT، تستخدم نماذج LeViT رأس تقطير إضافي للتعلم الفعال من المعلم (والذي، في ورقة LeViT، هو نموذج مشابه لـ ResNet). يتم تعلم رأس التقطير من خلال الانتشار الخلفي تحت إشراف نموذج مشابه لـ ResNet. كما يستلهمون الإلهام من شبكات التلفيف العصبية لاستخدام خرائط تنشيط ذات دقة متناقصة لزيادة الكفاءة. + +- هناك طريقتان لضبط النماذج المقطرة، إما (1) بالطريقة الكلاسيكية، عن طريق وضع رأس تنبؤ فقط أعلى حالة الإخفاء النهائية وعدم استخدام رأس التقطير، أو (2) عن طريق وضع رأس تنبؤ ورأس تقطير أعلى حالة الإخفاء النهائية. في هذه الحالة، يتم تدريب رأس التنبؤ باستخدام الانتشارية العادية بين تنبؤ الرأس والملصق الأرضي، في حين يتم تدريب رأس التقطير التنبؤي باستخدام التقطير الصعب (الانتشارية بين تنبؤ رأس التقطير والملصق الذي تنبأ به المعلم). في وقت الاستدلال، يتم أخذ متوسط التنبؤ بين كلا الرأسين كتنبؤ نهائي. (2) يُطلق عليه أيضًا "الضبط الدقيق مع التقطير"، لأنه يعتمد على معلم تم ضبطه بالفعل على مجموعة البيانات النهائية. من حيث النماذج، (1) يقابل [`LevitForImageClassification`] و (2) يقابل [`LevitForImageClassificationWithTeacher`]. + +- تم ضبط جميع نقاط التحقق الصادرة مسبقًا والضبط الدقيق على [ImageNet-1k](https://huggingface.co/datasets/imagenet-1k) (يشار إليها أيضًا باسم ILSVRC 2012، وهي عبارة عن مجموعة من 1.3 مليون صورة و1000 فئة). لم يتم استخدام أي بيانات خارجية. وهذا يتعارض مع نموذج ViT الأصلي، والذي استخدم بيانات خارجية مثل مجموعة بيانات JFT-300M/Imagenet-21k للضبط المسبق. + +- أصدر مؤلفو LeViT 5 نماذج LeViT مدربة، والتي يمكنك توصيلها مباشرة في [`LevitModel`] أو [`LevitForImageClassification`]. تم استخدام تقنيات مثل زيادة البيانات والتحسين والتنظيم لمحاكاة التدريب على مجموعة بيانات أكبر بكثير (مع استخدام ImageNet-1k فقط للضبط المسبق). المتغيرات الخمسة المتاحة هي (جميعها مدربة على صور بحجم 224x224): *facebook/levit-128S*، *facebook/levit-128*، *facebook/levit-192*، *facebook/levit-256* و*facebook/levit-384*. لاحظ أنه يجب استخدام [`LevitImageProcessor`] لتحضير الصور للنموذج. + +- يدعم [`LevitForImageClassificationWithTeacher`] حاليًا الاستدلال فقط وليس التدريب أو الضبط الدقيق. + +- يمكنك الاطلاع على دفاتر الملاحظات التجريبية المتعلقة بالاستدلال وكذلك الضبط الدقيق على البيانات المخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/VisionTransformer) (يمكنك فقط استبدال [`ViTFeatureExtractor`] بـ [`LevitImageProcessor`] و [`ViTForImageClassification`] بـ [`LevitForImageClassification`] أو [`LevitForImageClassificationWithTeacher`]). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام LeViT. + + + +- [`LevitForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## LevitConfig + +[[autodoc]] LevitConfig + +## LevitFeatureExtractor + +[[autodoc]] LevitFeatureExtractor + +- __call__ + +## LevitImageProcessor + +[[autodoc]] LevitImageProcessor + +- preprocess + +## LevitModel + +[[autodoc]] LevitModel + +- forward + +## LevitForImageClassification + +[[autodoc]] LevitForImageClassification + +- forward + +## LevitForImageClassificationWithTeacher + +[[autodoc]] LevitForImageClassificationWithTeacher + +- forward \ No newline at end of file From 5131d014a992cfe875687392e2a583063dcc37bd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:32 +0300 Subject: [PATCH 478/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/lilt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/lilt.md | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/source/ar/model_doc/lilt.md diff --git a/docs/source/ar/model_doc/lilt.md b/docs/source/ar/model_doc/lilt.md new file mode 100644 index 00000000000000..c6265e1e62331e --- /dev/null +++ b/docs/source/ar/model_doc/lilt.md @@ -0,0 +1,76 @@ +# LiLT + +## نظرة عامة +تم اقتراح نموذج LiLT في [LiLT: A Simple yet Effective Language-Independent Layout Transformer for Structured Document Understanding](https://arxiv.org/abs/2202.13669) بواسطة Jiapeng Wang, Lianwen Jin, Kai Ding. + +يتيح LiLT الجمع بين أي مشفر نصي مدرب مسبقًا من نوع RoBERTa مع محول تخطيط خفيف الوزن، لتمكين فهم المستندات المشابهة لـ [LayoutLM](layoutlm) للعديد من اللغات. + +الملخص من الورقة هو كما يلي: + +*حظي فهم المستندات المنظمة باهتمام كبير وأحرز تقدمًا ملحوظًا في الآونة الأخيرة، وذلك بفضل دوره الحاسم في معالجة المستندات الذكية. ومع ذلك، لا يمكن لمعظم النماذج ذات الصلة الموجودة التعامل إلا مع بيانات المستندات بلغة (لغات) محددة (عادة ما تكون اللغة الإنجليزية) المدرجة في مجموعة البيانات التدريبية، والتي تعد محدودة للغاية. ولمعالجة هذه المشكلة، نقترح محول تخطيط مستقل عن اللغة (LiLT) بسيط وفعال لفهم المستندات المنظمة. يمكن تدريب نموذج LiLT مسبقًا على مستندات منظمة بلغة واحدة، ثم ضبط دقته مباشرة على لغات أخرى باستخدام النماذج النصية أحادية اللغة/المتعددة اللغات المُدربة مسبقًا المقابلة. أظهرت النتائج التجريبية على ثماني لغات أن LiLT يمكن أن يحقق أداءً تنافسيًا أو حتى متفوقًا على معايير مختلفة شائعة الاستخدام، مما يمكّن الاستفادة من التدريب المسبق لهيكل تخطيط المستندات بشكل مستقل عن اللغة.* + + + +هندسة LiLT. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/jpwang/lilt). + +## نصائح الاستخدام + +- للجمع بين محول التخطيط المستقل عن اللغة ونقطة تفتيش جديدة من RoBERTa من [hub](https://huggingface.co/models?search=roberta)، راجع [هذا الدليل](https://github.com/jpWang/LiLT#or-generate-your-own-checkpoint-optional). +سينتج البرنامج النصي عن ملفي `config.json` و`pytorch_model.bin` المخزنين محليًا. بعد القيام بذلك، يمكنك القيام بما يلي (بافتراض أنك قمت بتسجيل الدخول باستخدام حساب HuggingFace الخاص بك): + +```python +from transformers import LiltModel + +model = LiltModel.from_pretrained("path_to_your_files") +model.push_to_hub("name_of_repo_on_the_hub") +``` + +- عند إعداد البيانات للنموذج، تأكد من استخدام مفردات الرموز التي تتوافق مع نقطة تفتيش RoBERTa التي قمت بدمجها مع محول التخطيط. +- نظرًا لأن [lilt-roberta-en-base](https://huggingface.co/SCUT-DLVCLab/lilt-roberta-en-base) يستخدم نفس المفردات مثل [LayoutLMv3](layoutlmv3)، فيمكن استخدام [`LayoutLMv3TokenizerFast`] لإعداد البيانات للنموذج. +وينطبق الشيء نفسه على [lilt-roberta-en-base](https://huggingface.co/SCUT-DLVCLab/lilt-infoxlm-base): يمكن استخدام [`LayoutXLMTokenizerFast`] لهذا النموذج. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام LiLT. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ LiLT [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/LiLT). + +**موارد التوثيق** + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## LiltConfig + +[[autodoc]] LiltConfig + +## LiltModel + +[[autodoc]] LiltModel + +- forward + +## LiltForSequenceClassification + +[[autodoc]] LiltForSequenceClassification + +- forward + +## LiltForTokenClassification + +[[autodoc]] LiltForTokenClassification + +- forward + +## LiltForQuestionAnswering + +[[autodoc]] LiltForQuestionAnswering + +- forward \ No newline at end of file From 1717e6901e0d42677b67942ad2b198dab54d2f3e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:34 +0300 Subject: [PATCH 479/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/llama.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/llama.md | 133 ++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 docs/source/ar/model_doc/llama.md diff --git a/docs/source/ar/model_doc/llama.md b/docs/source/ar/model_doc/llama.md new file mode 100644 index 00000000000000..c5804d38a270fa --- /dev/null +++ b/docs/source/ar/model_doc/llama.md @@ -0,0 +1,133 @@ +# LLaMA + +## نظرة عامة +اقترح نموذج LLaMA في [LLaMA: Open and Efficient Foundation Language Models](https://arxiv.org/abs/2302.13971) بواسطة Hugo Touvron, Thibaut Lavril, Gautier Izacard, Xavier Martinet, Marie-Anne Lachaux, Timothée Lacroix, Baptiste Rozière, Naman Goyal, Eric Hambro, Faisal Azhar, Aurelien Rodriguez, Armand Joulin, Edouard Grave, and Guillaume Lample. وهي مجموعة من نماذج اللغة الأساسية التي تتراوح من 7B إلى 65B من المعلمات. + +الملخص من الورقة هو ما يلي: + +*نحن نقدم LLaMA، وهي مجموعة من نماذج اللغة الأساسية التي تتراوح من 7B إلى 65B من المعلمات. نقوم بتدريب نماذجنا على تريليونات من الرموز، ونظهر أنه من الممكن تدريب نماذج متقدمة باستخدام مجموعات البيانات المتاحة للجمهور حصريًا، دون اللجوء إلى مجموعات البيانات المملوكة وغير المتاحة. وعلى وجه الخصوص، يتفوق LLaMA-13B على GPT-3 (175B) في معظم المعايير، وينافس LLaMA-65B أفضل النماذج، Chinchilla-70B و PaLM-540B. نقوم بإطلاق جميع نماذجنا لمجتمع البحث.* + +تمت المساهمة بهذا النموذج من قبل [zphang](https://huggingface.co/zphang) بمساهمات من [BlackSamorez](https://huggingface.co/BlackSamorez). يعتمد كود التنفيذ في Hugging Face على GPT-NeoX [here](https://github.com/EleutherAI/gpt-neox). يمكن العثور على الكود الأصلي للمؤلفين [here](https://github.com/facebookresearch/llama). + +## نصائح الاستخدام + +- يمكن الحصول على أوزان نماذج LLaMA من خلال ملء [هذا النموذج](https://docs.google.com/forms/d/e/1FAIpQLSfqNECQnMkycAp2jP4Z9TFX0cGR4uf7b_fBxjY_OjhJILlKGA/viewform?usp=send_form) + +- بعد تنزيل الأوزان، سيتعين تحويلها إلى تنسيق Hugging Face Transformers باستخدام [Script التحويل](https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py). يمكن استدعاء النص البرمجي باستخدام الأمر التالي (كمثال): + +```bash +python src/transformers/models/llama/convert_llama_weights_to_hf.py \ +--input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path +``` + +- بعد التحويل، يمكن تحميل النموذج ومحول الرموز باستخدام ما يلي: + +```python +from transformers import LlamaForCausalLM, LlamaTokenizer + +tokenizer = LlamaTokenizer.from_pretrained("/output/path") +model = LlamaForCausalLM.from_pretrained("/output/path") +``` + +ملاحظة: يتطلب تنفيذ النص البرمجي مساحة كافية من ذاكرة الوصول العشوائي CPU لاستضافة النموذج بالكامل في دقة float16 (حتى إذا كانت الإصدارات الأكبر تأتي في عدة نقاط مرجعية، فإن كل منها يحتوي على جزء من كل وزن للنموذج، لذلك نحتاج إلى تحميلها جميعًا في ذاكرة الوصول العشوائي). بالنسبة للنموذج 65B، نحتاج إلى 130 جيجابايت من ذاكرة الوصول العشوائي. + +- محول رموز LLaMA هو نموذج BPE يعتمد على [sentencepiece](https://github.com/google/sentencepiece). إحدى ميزات sentencepiece هي أنه عند فك تشفير تسلسل، إذا كان الرمز الأول هو بداية الكلمة (مثل "Banana")، فإن المحلل اللغوي لا يسبق المسافة البادئة إلى السلسلة. + +تمت المساهمة بهذا النموذج من قبل [zphang](https://huggingface.co/zphang) بمساهمات من [BlackSamorez](https://huggingface.co/BlackSamorez). يعتمد كود التنفيذ في Hugging Face على GPT-NeoX [here](https://github.com/EleutherAI/gpt-neox). يمكن العثور على الكود الأصلي للمؤلفين [here](https://github.com/facebookresearch/llama). تم تقديم إصدار Flax من التنفيذ من قبل [afmck](https://huggingface.co/afmck) مع الكود في التنفيذ بناءً على Flax GPT-Neo من Hugging Face. + +بناءً على نموذج LLaMA الأصلي، أصدرت Meta AI بعض الأعمال اللاحقة: + +- **Llama2**: Llama2 هو إصدار محسن من Llama مع بعض التعديلات المعمارية (Grouped Query Attention)، وهو مُدرب مسبقًا على 2 تريليون رمز. راجع وثائق Llama2 التي يمكن العثور عليها [here](llama2). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام LLaMA. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- A [notebook](https://colab.research.google.com/github/bigscience-workshop/petals/blob/main/examples/prompt-tuning-sst2.ipynb#scrollTo=f04ba4d2) on how to use prompt tuning to adapt the LLaMA model for text classification task. 🌎 + + + +- [StackLLaMA: A hands-on guide to train LLaMA with RLHF](https://huggingface.co/blog/stackllama#stackllama-a-hands-on-guide-to-train-llama-with-rlhf), a blog post about how to train LLaMA to answer questions on [Stack Exchange](https://stackexchange.com/) with RLHF. + +⚗️ Optimization + +- A [notebook](https://colab.research.google.com/drive/1SQUXq1AMZPSLD4mk3A3swUIc6Y2dclme?usp=sharing) on how to fine-tune LLaMA model using xturing library on GPU which has limited memory. 🌎 + +⚡️ Inference + +- A [notebook](https://colab.research.google.com/github/DominguesM/alpaca-lora-ptbr-7b/blob/main/notebooks/02%20-%20Evaluate.ipynb) on how to run the LLaMA Model using PeftModel from the 🤗 PEFT library. 🌎 + +- A [notebook](https://colab.research.google.com/drive/1l2GiSSPbajVyp2Nk3CFT4t3uH6-5TiBe?usp=sharing) on how to load a PEFT adapter LLaMA model with LangChain. 🌎 + +🚀 Deploy + +- A [notebook](https://colab.research.google.com/github/lxe/simple-llama-finetuner/blob/master/Simple_LLaMA_FineTuner.ipynb#scrollTo=3PM_DilAZD8T) on how to fine-tune LLaMA model using LoRA method via the 🤗 PEFT library with intuitive UI. 🌎 + +- A [notebook](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart-foundation-models/text-generation-open-llama.ipynb) on how to deploy Open-LLaMA model for text generation on Amazon SageMaker. 🌎 + +## LlamaConfig + +[[autodoc]] LlamaConfig + +## LlamaTokenizer + +[[autodoc]] LlamaTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## LlamaTokenizerFast + +[[autodoc]] LlamaTokenizerFast + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- update_post_processor +- save_vocabulary + +## LlamaModel + +[[autodoc]] LlamaModel + +- forward + +## LlamaForCausalLM + +[[autodoc]] LlamaForCausalLM + +- forward + +## LlamaForSequenceClassification + +[[autodoc]] LlamaForSequenceClassification + +- forward + +## LlamaForQuestionAnswering + +[[autodoc]] LlamaForQuestionAnswering + +- forward + +## LlamaForTokenClassification + +[[autodoc]] LlamaForTokenClassification + +- forward + +## FlaxLlamaModel + +[[autodoc]] FlaxLlamaModel + +- __call__ + +## FlaxLlamaForCausalLM + +[[autodoc]] FlaxLlamaForCausalLM + +- __call__ \ No newline at end of file From 10a7fa4d0b5970370db4473dda4d106af7ba79ad Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:36 +0300 Subject: [PATCH 480/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/llama2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/llama2.md | 105 +++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 docs/source/ar/model_doc/llama2.md diff --git a/docs/source/ar/model_doc/llama2.md b/docs/source/ar/model_doc/llama2.md new file mode 100644 index 00000000000000..112a0f9bc94566 --- /dev/null +++ b/docs/source/ar/model_doc/llama2.md @@ -0,0 +1,105 @@ +# Llama2 + +## نظرة عامة +اقترح نموذج Llama2 في [LLaMA: Open Foundation and Fine-Tuned Chat Models](https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/) بواسطة Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, Dan Bikel، Lukas Blecher, Cristian Canton Ferrer, Moya Chen, Guillem Cucurull, David Esiobu, Jude Fernandes, Jeremy Fu, Wenyin Fu, Brian Fuller, Cynthia Gao, Vedanuj Goswami, Naman Goyal, Anthony Hartshorn, Saghar Hosseini, Rui Hou, Hakan Inan, Marcin Kardas, Viktor Kerkez Madian Khabsa, Isabel Kloumann, Artem Korenev, Punit Singh Koura, Marie-Anne Lachaux, Thibaut Lavril, Jenya Lee, Diana Liskovich, Yinghai Lu, Yuning Mao, Xavier Martinet, Todor Mihaylov, Pushka rMishra, Igor Molybog, Yixin Nie, Andrew Poulton, Jeremy Reizenstein, Rashi Rungta, Kalyan Saladi, Alan Schelten, Ruan Silva, Eric Michael Smith, Ranjan Subramanian, Xiaoqing EllenTan, Binh Tang, Ross Taylor, Adina Williams, Jian Xiang Kuan, Puxin Xu, Zheng Yan, Iliyan Zarov, Yuchen Zhang, Angela Fan, Melanie Kambadur, Sharan Narang, Aurelien Rodriguez, Robert Stojnic, Sergey Edunov, Thomas Scialom. وهي مجموعة من نماذج اللغة الأساسية التي تتراوح من 7 بليون إلى 70 بليون معلمة، مع نقاط تفتيش تمت معايرتها لتطبيق الدردشة! + +الملخص من الورقة هو ما يلي: + +> في هذا العمل، نقوم بتطوير وإصدار Llama 2، وهي مجموعة من نماذج اللغة الكبيرة المسبقة التدريب والمعايرة التي تتراوح في النطاق من 7 مليارات إلى 70 مليار معلمة. تم تحسين نماذجنا المعايرة للغة، والتي يطلق عليها اسم Llama 2-Chat، لاستخدامات الحوار. تتفوق نماذجنا على نماذج الدردشة مفتوحة المصدر في معظم المعايير التي اختبرناها، وقد تكون، بناءً على تقييماتنا البشرية للفائدة والسلامة، بديلاً مناسباً لنماذج المصدر المغلق. نقدم وصفًا مفصلاً لنهجنا في المعايرة وتحسينات السلامة لنموذج Llama 2-Chat من أجل تمكين المجتمع من البناء على عملنا والمساهمة في التطوير المسؤول لنماذج اللغة الكبيرة. + +تحقق من جميع نقاط تفتيش نموذج Llama2 [هنا](https://huggingface.co/models?search=llama2). + +تمت المساهمة بهذا النموذج من قبل [Arthur Zucker](https://huggingface.co/ArthurZ) بمساهمات من [Lysandre Debut](https://huggingface.co/lysandre). يعتمد كود التنفيذ في Hugging Face على GPT-NeoX [هنا](https://github.com/EleutherAI/gpt-neox). يمكن العثور على الكود الأصلي للمؤلفين [هنا](https://github.com/facebookresearch/llama). + +## نصائح الاستخدام + + + +تم تدريب نماذج "Llama2" باستخدام "bfloat16"، ولكن الاستدلال الأصلي يستخدم "float16". تستخدم نقاط التفتيش التي تم تحميلها على المحاور `torch_dtype = 'float16'`، والتي سيتم استخدامها بواسطة واجهة برمجة تطبيقات `AutoModel` لتحويل نقاط التفتيش من `torch.float32` إلى `torch.float16`. + +`dtype` للأوزان عبر الإنترنت غير ذي صلة في الغالب ما لم تكن تستخدم `torch_dtype="auto"` عند تهيئة نموذج باستخدام `model = AutoModelForCausalLM.from_pretrained("path"، torch_dtype = "auto")`. والسبب هو أن النموذج سيتم تنزيله أولاً (باستخدام `dtype` لنقاط التفتيش عبر الإنترنت)، ثم سيتم تحويله إلى `dtype` الافتراضي لـ `torch` (يصبح `torch.float32`)، وأخيراً، إذا كان هناك `torch_dtype` مقدم في التكوين، فسيتم استخدامه. + +لا يوصى بالتدريب على النموذج في `float16` وهو معروف بإنتاج `nan`؛ لذلك، يجب تدريب النموذج في `bfloat16`. + + + +نصائح: + +- يمكن الحصول على الأوزان لنماذج Llama2 عن طريق ملء [هذا النموذج](https://ai.meta.com/resources/models-and-libraries/llama-downloads/) +- الهندسة المعمارية مشابهة جدًا لـ Llama الأول، مع إضافة Grouped Query Attention (GQA) بعد هذه [الورقة](https://arxiv.org/pdf/2305.13245.pdf) +- يؤدي تعيين `config.pretraining_tp` إلى قيمة مختلفة عن 1 إلى تنشيط الحساب الأكثر دقة ولكن الأبطأ للطبقات الخطية، والتي يجب أن تتطابق بشكل أفضل مع اللوغاريتمات الأصلية. +- يستخدم النموذج الأصلي `pad_id = -1` مما يعني أنه لا يوجد رمز خاص للتعبئة. لا يمكننا أن يكون لدينا نفس المنطق، تأكد من إضافة رمز خاص للتعبئة باستخدام `tokenizer.add_special_tokens({"pad_token": ""})` وقم بتغيير حجم تضمين الرمز وفقًا لذلك. يجب عليك أيضًا تعيين `model.config.pad_token_id`. يتم تهيئة طبقة `embed_tokens` للنموذج باستخدام `self.embed_tokens = nn.Embedding(config.vocab_size، config.hidden_size، self.config.padding_idx)`، والذي يتأكد من أن ترميز الرمز الخاص بالتعبئة سيخرج أصفارًا، لذا يوصى بتمريره عند التهيئة. +- بعد ملء النموذج والحصول على حق الوصول إلى نقاط تفتيش النموذج، يجب أن تتمكن من استخدام نقاط التفتيش المحولة بالفعل. وإلا، إذا كنت تقوم بتحويل نموذجك الخاص، فلا تتردد في استخدام [سكريبت التحويل](https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py). يمكن استدعاء البرنامج النصي باستخدام الأمر التالي (كمثال): + +```bash +python src/transformers/models/llama/convert_llama_weights_to_hf.py \ +--input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path +``` + +- بعد التحويل، يمكن تحميل النموذج والمحلل اللغوي عبر: + +```python +from transformers import LlamaForCausalLM, LlamaTokenizer + +tokenizer = LlamaTokenizer.from_pretrained("/output/path") +model = LlamaForCausalLM.from_pretrained("/output/path") +``` + +ملاحظة: يتطلب تنفيذ البرنامج النصي مساحة كافية من ذاكرة الوصول العشوائي (RAM) لاستضافة النموذج بالكامل في دقة float16 (حتى إذا كانت أكبر الإصدارات تأتي في عدة نقاط تفتيش، يحتوي كل منها على جزء من كل وزن للنموذج، لذا نحتاج إلى تحميلها جميعًا في ذاكرة الوصول العشوائي). بالنسبة للنموذج 75B، هناك حاجة إلى 145 جيجابايت من ذاكرة الوصول العشوائي. + +- LLaMA tokenizer عبارة عن نموذج BPE يعتمد على [sentencepiece](https://github.com/google/sentencepiece). إحدى غرائب sentencepiece هي أنه عند فك تشفير تسلسل، إذا كان الرمز الأول هو بداية الكلمة (على سبيل المثال "Banana")، فإن المحلل اللغوي لا يسبق المسافة البادئة إلى السلسلة. +- عند استخدام Flash Attention 2 عبر `attn_implementation="flash_attention_2"`، لا تمرر `torch_dtype` إلى طريقة `from_pretrained` واستخدم التدريب Mixed-Precision التلقائي. عند استخدام `Trainer`، يكون الأمر ببساطة بتحديد إما `fp16` أو `bf16` إلى `True`. وإلا، تأكد من استخدامك لـ `torch.autocast`. هذا مطلوب لأن Flash Attention يدعم فقط أنواع البيانات `fp16` و`bf16`. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام LLaMA2. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب ومراجعته! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- [Llama 2 is here - get it on Hugging Face](https://huggingface.co/blog/llama2)، منشور مدونة حول Llama 2 وكيفية استخدامه مع 🤗 Transformers و🤗 PEFT. +- [LLaMA 2 - Every Resource you need](https://www.philschmid.de/llama-2)، مجموعة من الموارد ذات الصلة للتعرف على LLaMA 2 وكيفية البدء بسرعة. + +- [دفتر الملاحظات](https://colab.research.google.com/drive/1PEQyJO1-f6j0S_XJ8DV50NkpzasXkrzd?usp=sharing) حول كيفية معايرة Llama 2 في Google Colab باستخدام QLoRA ودقة 4 بت. 🌎 +- [دفتر الملاحظات](https://colab.research.google.com/drive/134o_cXcMe_lsvl15ZE_4Y75Kstepsntu?usp=sharing) حول كيفية معايرة نموذج "Llama-v2-7b-guanaco" باستخدام QLoRA بدقة 4 بت وتوليد مجموعات بيانات الأسئلة والأجوبة من ملفات PDF. 🌎 + +- [دفتر الملاحظات](https://colab.research.google.com/drive/1ggaa2oRFphdBmqIjSEbnb_HGkcIRC2ZB?usp=sharing) حول كيفية معايرة نموذج Llama 2 باستخدام QLoRa وTRL ومجموعة بيانات التصنيف النصي الكورية. 🌎🇰🇷 +⚗️ Optimization +- [Fine-tune Llama 2 with DPO](https://huggingface.co/blog/dpo-trl)، دليل لاستخدام طريقة DPO لمكتبة TRL لمعايرة Llama 2 على مجموعة بيانات محددة. +- [Extended Guide: Instruction-tune Llama 2](https://www.philschmid.de/instruction-tune-llama-2)، دليل لتدريب Llama 2 لتوليد التعليمات من المدخلات، وتحويل النموذج من اتباع التعليمات إلى إعطاء التعليمات. +- [دفتر الملاحظات](https://colab.research.google.com/drive/1SYpgFpcmtIUzdE7pxqknrM4ArCASfkFQ?usp=sharing) حول كيفية معايرة نموذج Llama 2 على جهاز كمبيوتر شخصي باستخدام QLoRa وTRL. 🌎 +⚡️ Inference +- [دفتر الملاحظات](https://colab.research.google.com/drive/1TC56ArKerXUpbgRy5vM3woRsbTEVNq7h?usp=sharing) حول كيفية تحديد كمية نموذج Llama 2 باستخدام GPTQ من مكتبة AutoGPTQ. 🌎 +- [دفتر الملاحظات](https://colab.research.google.com/drive/1X1z9Q6domMKl2CnEM0QGHNwidLfR4dW2?usp=sharing) حول كيفية تشغيل نموذج Llama 2 Chat Model بدقة 4 بت على جهاز كمبيوتر محلي أو Google Colab. 🌎 +🚀 Deploy +- [Fine-tune LLaMA 2 (7-70B) on Amazon SageMaker](https://www.philschmid.de/sagemaker-llama2-qlora)، دليل كامل من الإعداد إلى معايرة QLoRA والنشر على Amazon SageMaker. +- [Deploy Llama 2 7B/13B/70B on Amazon SageMaker](https://www.philschmid.de/sagemaker-llama-llm)، دليل لاستخدام حاوية DLC LLM من Hugging Face للنشر الآمن والقابل للتطوير. + + +## LlamaConfig + +[[autodoc]] LlamaConfig +## LlamaTokenizer + +[[autodoc]] LlamaTokenizer +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary +## LlamaTokenizerFast + +[[autodoc]] LlamaTokenizerFast +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- update_post_processor +- save_vocabulary +## LlamaModel + +[[autodoc]] LlamaModel +- forward +## LlamaForCausalLM + +[[autodoc]] LlamaForCausalLM +- forward +## LlamaForSequenceClassification + +[[autodoc]] LlamaForSequenceClassification +- forward \ No newline at end of file From bdaa22fe07d991803efb224c66863d5501ca909e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:38 +0300 Subject: [PATCH 481/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/llama3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/llama3.md | 76 ++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/source/ar/model_doc/llama3.md diff --git a/docs/source/ar/model_doc/llama3.md b/docs/source/ar/model_doc/llama3.md new file mode 100644 index 00000000000000..fe12943bf5cad7 --- /dev/null +++ b/docs/source/ar/model_doc/llama3.md @@ -0,0 +1,76 @@ +## Llama3 + +```py +import transformers +import torch + +model_id = "meta-llama/Meta-Llama-3-8B" + +pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"torch_dtype": torch.bfloat16}, device_map="auto") +pipeline("Hey how are you doing today?") +``` + +## نظرة عامة +اقترح فريق الذكاء الاصطناعي في Meta نموذج Llama3 في منشور المدونة [تقديم Meta Llama 3: أكثر أنظمة اللغة المفتوحة قدرة حتى الآن](https://ai.meta.com/blog/meta-llama-3/). + +وفيما يلي الملخص المنشور في المدونة: + +*اليوم، يسرنا أن نعلن عن أول نموذجين من الجيل التالي من Llama، Meta Llama 3، والمتاحين للاستخدام العام. يتضمن هذا الإصدار نموذجين للغة مسبقة التدريب ومضبوطة التعليمات مع 8B و70B من المعلمات التي يمكن أن تدعم مجموعة واسعة من حالات الاستخدام. وتبين الجيل التالي من Llama أداءً رائدًا في المجال على مجموعة واسعة من المعايير الصناعية ويقدم قدرات جديدة، بما في ذلك تحسين الاستدلال. نعتقد أن هذه النماذج هي الأفضل في فئتها من المصادر المفتوحة، ببساطة. ودعمًا لنهجنا المفتوح الذي نتبعه منذ فترة طويلة، فإننا نضع Llama 3 في أيدي المجتمع. ونريد أن نطلق شرارة الموجة التالية من الابتكار في الذكاء الاصطناعي عبر المكدس - بدءًا من التطبيقات وحتى أدوات المطورين وحتى عمليات التقييم وحتى تحسينات الاستدلال والمزيد. ولا يمكننا الانتظار لنرى ما ستبنيه ونتطلع إلى تلقي ملاحظاتك.* + +يمكنك الاطلاع على جميع نقاط تفتيش نموذج Llama3 [هنا](https://huggingface.co/models?search=llama3). + +يمكن العثور على الكود الأصلي للمؤلفين [هنا](https://github.com/meta-llama/llama3). + +## نصائح الاستخدام + + + +تم تدريب نماذج `Llama3` باستخدام `bfloat16`، ولكن الاستدلال الأصلي يستخدم `float16`. تستخدم نقاط التفتيش التي تم تحميلها على Hub `torch_dtype = 'float16'`، والتي سيتم استخدامها بواسطة واجهة برمجة التطبيقات `AutoModel` لتحويل نقاط التفتيش من `torch.float32` إلى `torch.float16`. + +إن `dtype` للأوزان عبر الإنترنت غير ذي صلة إلى حد كبير ما لم تكن تستخدم `torch_dtype="auto"` عند تهيئة نموذج باستخدام `model = AutoModelForCausalLM.from_pretrained("path", torch_dtype = "auto")`. والسبب هو أن النموذج سيتم تنزيله أولاً (باستخدام `dtype` لنقاط التفتيش عبر الإنترنت)، ثم سيتم تحويله إلى `dtype` الافتراضي لـ `torch` (يصبح `torch.float32`)، وأخيرًا، إذا كان هناك `torch_dtype` مقدم في التكوين، فسيتم استخدامه. + +لا يوصى بالتدريب على النموذج في `float16` ومن المعروف أنه ينتج `nan`؛ لذلك، يجب تدريب النموذج في `bfloat16`. + + + +نصائح: + +- يمكن الحصول على الأوزان الخاصة بنماذج Llama3 عن طريق ملء [هذا النموذج](https://ai.meta.com/resources/models-and-libraries/llama-downloads/). +- الهندسة المعمارية هي نفسها تمامًا مثل Llama2. +- محدد الرموز هو نموذج BPE يعتمد على [tiktoken](https://github.com/openai/tiktoken) (مقابل المستند إلى تنفيذ sentencepiece لـ Llama2). والفرق الرئيسي هو أنه يتجاهل قواعد الدمج BPE عندما يكون رمز الإدخال جزءًا من المفردات. وهذا يعني أنه إذا لم يكن هناك دمج لإنتاج "hugging"، بدلاً من وجود أصغر وحدات، مثل `["hug" و"ging"] تشكل رمزين، إذا كانت "hugging" جزءًا من المفردات، فسيتم إرجاعها تلقائيًا كرموز. +- يستخدم النموذج الأصلي `pad_id = -1` مما يعني أنه لا يوجد رمز خاص للتعبئة. لا يمكننا أن نتبع نفس المنطق، فتأكد من إضافة رمز خاص بالتعبئة باستخدام `tokenizer.add_special_tokens({"pad_token":""})` وقم بتغيير حجم تضمين الرمز وفقًا لذلك. يجب عليك أيضًا تعيين `model.config.pad_token_id`. يتم تهيئة طبقة `embed_tokens` للنموذج باستخدام `self.embed_tokens = nn.Embedding(config.vocab_size، config.hidden_size، self.config.padding_idx)`، والتي تتأكد من أن ترميز رمز التعبئة سينتج أصفارًا، لذا يوصى بتمريره عند التهيئة. +- يمكن تحويل نقطة التفتيش الأصلية باستخدام [سكريبت التحويل](https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py). يمكن استدعاء السكريبت باستخدام الأمر التالي (كمثال): + +```bash +python src/transformers/models/llama/convert_llama_weights_to_hf.py \ + --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path --llama_version 3 +``` + +- بعد التحويل، يمكن تحميل النموذج ومحول الرموز باستخدام ما يلي: + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained("/output/path") +model = AutoModelForCausalLM.from_pretrained("/output/path") +``` + +ملاحظة: يتطلب تنفيذ السكريبت مساحة كافية من ذاكرة الوصول العشوائي (RAM) لتنفيذ النموذج بالكامل في دقة float16 (حتى إذا كانت أكبر الإصدارات تأتي في عدة نقاط تفتيش، يحتوي كل منها على جزء من كل وزن للنموذج، لذلك نحتاج إلى تحميلها جميعًا في ذاكرة الوصول العشوائي). بالنسبة للنموذج 75B، هناك حاجة إلى 145 جيجابايت من ذاكرة الوصول العشوائي. + +- عند استخدام Flash Attention 2 عبر `attn_implementation="flash_attention_2"`، لا تمرر `torch_dtype` إلى طريقة `from_pretrained` واستخدم التدريب على الأرقام العشرية العائمة المختلطة التلقائية. عند استخدام "مدرب"، يكون الأمر ببساطة بتحديد إما `fp16` أو `bf16` إلى `True`. وإلا، فتأكد من استخدام `torch.autocast`. هذا مطلوب لأن Flash Attention يدعم فقط أنواع البيانات `fp16` و`bf16`. + +## الاستخدام السريع + +```py3 +import transformers +import torch + +model_id = "meta-llama/Meta-Llama-3-8B" + +pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"torch_dtype": torch.bfloat16}, device_map="auto") +pipeline("Hey how are you doing today?") +``` + +## الموارد + +تتوفر الكثير من الموارد الرائعة بالفعل على صفحة وثائق [~llama2]، وندعو المساهمين إلى إضافة موارد جديدة مخصصة لـ Llama3 هنا! 🤗 \ No newline at end of file From 47e8002f8135e7408617b9cd32a039c7b8679d64 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:39 +0300 Subject: [PATCH 482/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/llava.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/llava.md | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 docs/source/ar/model_doc/llava.md diff --git a/docs/source/ar/model_doc/llava.md b/docs/source/ar/model_doc/llava.md new file mode 100644 index 00000000000000..e572538fc4c786 --- /dev/null +++ b/docs/source/ar/model_doc/llava.md @@ -0,0 +1,64 @@ +# LLaVa + +## نظرة عامة +LLaVa هو دردوبوت مفتوح المصدر تم تدريبه عن طريق الضبط الدقيق لـ LlamA/Vicuna على بيانات التعليمات متعددة الوسائط المولدة بواسطة GPT. إنه نموذج لغوي تنازلي، يعتمد على بنية المحول. وبعبارة أخرى، فهو إصدار متعدد الوسائط من نماذج اللغة الضخمة التي تم ضبطها الدقيق للدردشة/التعليمات. + +تم اقتراح نموذج LLaVa في الورقة البحثية "Visual Instruction Tuning" وتم تحسينه في الورقة البحثية "Improved Baselines with Visual Instruction Tuning" بواسطة Haotian Liu وChunyuan Li وYuheng Li وYong Jae Lee. + +ملخص الورقة البحثية هو كما يلي: + +*أظهرت النماذج متعددة الوسائط الكبيرة مؤخرًا تقدمًا مشجعًا مع الضبط الدقيق للتعليمات المرئية. وفي هذه الملاحظة، نُظهر أن موصل الطراز الكامل عبر الوسائط في LLaVA قوي ومُتَوَفِّر للبيانات بشكل مدهش. ومن خلال إجراء تعديلات بسيطة على LLaVA، أي استخدام CLIP-ViT-L-336px مع إسقاط MLP وإضافة بيانات VQA الموجهة نحو المهام الأكاديمية مع مطالبات تنسيق الاستجابة البسيطة، نقوم بإنشاء خطوط أساس أقوى تتفوق على الحالة الراهنة عبر 11 معيارًا. وتستخدم نقطة التفتيش النهائية الخاصة بنا التي تبلغ 13 بليون مجرد 1.2 مليون بيانات متاحة للجمهور، وتنهي التدريب الكامل في ~1 يوم على عقدة A100 واحدة. ونأمل أن يجعل ذلك أبحاث النماذج اللغوية الضخمة متعددة الوسائط في متناول الجميع. وسيكون الكود والنموذج متاحين للجمهور* + + + +بنية LLaVa. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل [ArthurZ](https://huggingface.co/ArthurZ) و[ybelkada](https://huggingface.co/ybelkada). +يمكن العثور على الكود الأصلي [هنا](https://github.com/haotian-liu/LLaVA/tree/main/llava). + +## نصائح الاستخدام + +- ننصح المستخدمين باستخدام `padding_side="left"` عند حساب التوليد الدفعي حيث يؤدي إلى نتائج أكثر دقة. كل ما عليك التأكد من هو استدعاء `processor.tokenizer.padding_side = "left"` قبل التوليد. + +- لاحظ أن النموذج لم يتم تدريبه بشكل صريح لمعالجة صور متعددة في نفس المطالبة، على الرغم من أن هذا ممكن من الناحية الفنية، فقد تواجه نتائج غير دقيقة. + +- للحصول على نتائج أفضل، نوصي المستخدمين بتزويد النموذج بتنسيق المطالبة الصحيح: + +```bash +"USER: \n ASSISTANT:" +``` + +بالنسبة للمحادثات متعددة الأدوار: + +```bash +"USER: \n ASSISTANT: USER: ASSISTANT: USER: ASSISTANT:" +``` + +### استخدام Flash Attention 2 + +Flash Attention 2 هو إصدار أسرع وأكثر تحسينًا من التحسين السابق، يرجى الرجوع إلى قسم Flash Attention 2 في وثائق الأداء [هنا](https://huggingface.co/docs/transformers/perf_infer_gpu_one). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء مع BEiT. + + + +- عرض توضيحي لـ [Google Colab](https://colab.research.google.com/drive/1qsl6cd2c8gGtEW1xV5io7S8NHh-Cp1TV?usp=sharing) حول كيفية تشغيل Llava على مثيل Google colab من المستوى المجاني باستخدام الاستدلال بـ 4 بت. + +- دفتر ملاحظات [مشابه](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/LLaVa/Inference_with_LLaVa_for_multimodal_generation.ipynb) يوضح الاستدلال الدفعي. 🌎 + +## LlavaConfig + +[[autodoc]] LlavaConfig + +## LlavaProcessor + +[[autodoc]] LlavaProcessor + +## LlavaForConditionalGeneration + +[[autodoc]] LlavaForConditionalGeneration + +- forward \ No newline at end of file From 600d6167cccf68fb8195e839c026a12994177ad5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:41 +0300 Subject: [PATCH 483/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/llava-next-video.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/llava-next-video.md | 240 +++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 docs/source/ar/model_doc/llava-next-video.md diff --git a/docs/source/ar/model_doc/llava-next-video.md b/docs/source/ar/model_doc/llava-next-video.md new file mode 100644 index 00000000000000..94531b8d352ed3 --- /dev/null +++ b/docs/source/ar/model_doc/llava-next-video.md @@ -0,0 +1,240 @@ +# LLaVa-NeXT-Video + +## نظرة عامة + اقترح نموذج LLaVa-NeXT-Video في [LLaVA-NeXT: A Strong Zero-shot Video Understanding Model](https://llava-vl.github.io/blog/2024-04-30-llava-next-video/) بواسطة يوانهان جانج، وبو لي، وهاوتيان ليو، ويونغ جاي لي، وليانجكي جوي، ودي فو، وجياشي فينج، وزييوي ليو، وتشونيوان لي. ويحسن LLaVa-NeXT-Video من [LLaVa-NeXT](llava_next) عن طريق الضبط الدقيق على مزيج من مجموعات بيانات الفيديو والصور، مما يزيد من أداء النموذج على مقاطع الفيديو. + +لدى [LLaVA-NeXT](llava_next) أداء قوي ومفاجئ في فهم محتوى الفيديو بطريقة الصفر باستخدام تقنية AnyRes التي يستخدمها. وتمثل تقنية AnyRes بشكل طبيعي صورة عالية الدقة في صور متعددة. وهذه التقنية قابلة للتعميم بطبيعتها لتمثيل مقاطع الفيديو لأن مقاطع الفيديو يمكن اعتبارها مجموعة من الإطارات (مماثلة لمجموعة من الصور في LLaVa-NeXT). ويستخدم الإصدار الحالي من LLaVA-NeXT تقنية AnyRes ويتم تدريبه باستخدام الضبط الدقيق الخاضع للإشراف (SFT) أعلى LLaVA-Next على بيانات الفيديو لتحقيق فهم أفضل للفيديو. ويعد النموذج حاليًا الأفضل ضمن النماذج مفتوحة المصدر على [VideoMME bench](https://arxiv.org/abs/2405.21075). + +مقدمة المدونة هي كما يلي: + +في 30 يناير 2024، أصدرنا LLaVA-NeXT، وهو نموذج متعدد الوسائط كبير مفتوح المصدر (LMM) تم تدريبه حصريًا على بيانات الصور النصية. وبفضل تقنية AnyRes المقترحة، فإنه يعزز القدرات في الاستدلال، وOCR، ومعرفة العالم، مما يظهر أداءً ملحوظًا عبر طيف من مهام الفهم متعددة الوسائط القائمة على الصور، بل ويتفوق على Gemini-Pro في العديد من معايير الصور، مثل MMMU وMathVista. + +**في استكشاف اليوم، نتعمق في أداء LLaVA-NeXT في مجال مهام فهم الفيديو. ونكشف أن LLaVA-NeXT لديه أداء قوي ومفاجئ في فهم محتوى الفيديو. ويتضمن الإصدار الحالي من LLaVA-NeXT لتحسينات الفيديو ما يلي: + +- قدرات تمثيل الفيديو بدون تصوير باستخدام AnyRes: تمثل تقنية AnyRes بشكل طبيعي صورة عالية الدقة في صور متعددة يمكن لشبكة VIT مسبقة التدريب معالجتها، وتشكلها في تسلسل متجاور. وهذه التقنية قابلة للتعميم بطبيعتها لتمثيل مقاطع الفيديو (التي تتكون من إطارات متعددة)، مما يسمح لنموذج LLaVA-Next الذي تم تدريبه على الصور فقط بأداء جيد جدًا في مهام الفيديو. وتجدر الإشارة إلى أن هذه هي المرة الأولى التي تظهر فيها نماذج LMM قدرة قوية على نقل الوضع بدون تصوير. + +- الاستدلال باستخدام تعميم الطول يحسن مقاطع الفيديو الأطول. تمكن تقنية التدرج الخطي من تعميم الطول، مما يسمح لـ LLaVA-NeXT بمعالجة الفيديوهات الطويلة بشكل فعال بما يتجاوز حد "max_token_length" لشبكة اللغة. + +- قدرة قوية على فهم الفيديو. (1) يمنح LLaVa-Next-Image، الذي يجمع بين التقنيتين المذكورتين أعلاه، أداءً أفضل بدون تصوير من النماذج متعددة الوسائط الكبيرة مفتوحة المصدر التي تم ضبطها على مقاطع الفيديو. (2) يحقق LLaVa-Next-Video، الذي يقوم بضبط دقيق خاضع للإشراف إضافي (SFT) لـ LLaVa-Next-Image على بيانات الفيديو، فهمًا أفضل للفيديو مقارنة بـ LLaVa-Next-Image. (3) يظهر LLaVa-Next-Video-DPO، الذي يحاذي استجابة النموذج مع ملاحظات الذكاء الاصطناعي باستخدام التحسين المباشر للأفضليات (DPO)، زيادة كبيرة في الأداء. + +- النشر والاستدلال الفعالان باستخدام SGLang. يسمح بخمسة أضعاف سرعة الاستدلال في مهام الفيديو، مما يسمح بخدمة أكثر قابلية للتطوير مثل إعادة كتابة نص مليون فيديو. راجع التعليمات في مستودعنا.** + +تمت المساهمة بهذا النموذج بواسطة [RaushanTurganbay](https://huggingface.co/RaushanTurganbay). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/LLaVA-VL/LLaVA-NeXT/tree/inference). + +## نصائح الاستخدام + +- ننصح المستخدمين باستخدام `padding_side="left"` عند حساب التوليد المجمع حيث يؤدي إلى نتائج أكثر دقة. ما عليك سوى التأكد من استدعاء `processor.tokenizer.padding_side = "left"` قبل التوليد. + +- لاحظ أن كل نقطة تفتيش تم تدريبها بتنسيق موجه محدد، اعتمادًا على نموذج اللغة الضخم (LLM) الذي تم استخدامه. يمكنك استخدام `apply_chat_template` من المحلل اللغوي لتنسيق موجهاتك بشكل صحيح. فيما يلي مثال يوضح كيفية القيام بذلك. + +سنستخدم [LLaVA-NeXT-Video-7B-hf](https://huggingface.co/llava-hf/LLaVA-NeXT-Video-7B-hf) وسجل محادثة يتضمن مقاطع فيديو وصور. يجب أن يكون كل حقل محتوى قائمة من القواميس، كما يلي: + +```python +from transformers import LlavaNextVideoProcessor + +processor = LlavaNextVideoProcessor.from_pretrained("llava-hf/LLaVA-NeXT-Video-7B-hf") + +conversation = [ + { + "role": "system", + "content": [ + {"type": "text", "text": "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."}, + ], + }, + { + "role": "user", + "content": [ + {"type": "text", "text": "What’s shown in this image?"}, + {"type": "image"}, + ], + }, + { + "role": "assistant", + "content": [{"type": "text", "text": "This image shows a red stop sign."},] + }, + { + + "role": "user", + "content": [ + {"type": "text", "text": "Why is this video funny?"}, + {"type": "video"}, + ], + }, +] + +text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True) + +# Note that the template simply formats your prompt, you still have to tokenize it and obtain pixel values for your visuals +print(text_prompt) +``` + +## مثال الاستخدام + +### وضع الوسائط الفردية + +يمكن للنموذج قبول كل من الصور ومقاطع الفيديو كإدخال. فيما يلي مثال على التعليمات البرمجية للاستدلال في الدقة النصفية (`torch.float16`): + +```python +import av +import torch +import numpy as np +from transformers import LlavaNextVideoForConditionalGeneration, LlavaNextVideoProcessor + +def read_video_pyav(container, indices): + ''' + Decode the video with PyAV decoder. + Args: + container (`av.container.input.InputContainer`): PyAV container. + indices (`List[int]`): List of frame indices to decode. + Returns: + result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3). + ''' + frames = [] + container.seek(0) + start_index = indices[0] + end_index = indices[-1] + for i, frame in enumerate(container.decode(video=0)): + if i > end_index: + break + if i >= start_index and i in indices: + frames.append(frame) + return np.stack([x.to_ndarray(format="rgb24") for x in frames]) + +# Load the model in half-precision +model = LlavaNextVideoForConditionalGeneration.from_pretrained("llava-hf/LLaVA-NeXT-Video-7B-hf", torch_dtype=torch.float16, device_map="auto") +processor = LlavaNextVideoProcessor.from_pretrained("llava-hf/LLaVA-NeXT-Video-7B-hf") + +# Load the video as an np.array, sampling uniformly 8 frames (can sample more for longer videos) +video_path = hf_hub_download(repo_id="raushan-testing-hf/videos-test", filename="sample_demo_1.mp4", repo_type="dataset") +container = av.open(video_path) +total_frames = container.streams.video[0].frames +indices = np.arange(0, total_frames, total_frames / 8).astype(int) +video = read_video_pyav(container, indices) + +conversation = [ + { + + "role": "user", + "content": [ + {"type": "text", "text": "Why is this video funny?"}, + {"type": "video"}, + ], + }, +] + +prompt = processor.apply_chat_template(conversation, add_generation_prompt=True) +inputs = processor(text=prompt, videos=video, return_tensors="pt") + +out = model.generate(**inputs, max_new_tokens=60) +processor.batch_decode(out, skip_special_tokens=True, clean_up_tokenization_spaces=True) +``` + +### وضع الوسائط المختلطة + +يمكن للنموذج أيضًا التوليد من إدخالات الصور ومقاطع الفيديو المتشابكة. ومع ذلك، لاحظ أنه لم يتم تدريبه في إعداد متشابك للصور ومقاطع الفيديو، والذي قد يؤثر على الأداء. فيما يلي مثال على الاستخدام لوسائط الإدخال المختلطة، أضف السطور التالية إلى مقطع التعليمات البرمجية أعلاه: + +```python +from PIL import Image +import requests + +# Generate from image and video mixed inputs +# Load and image and write a new prompt +url = "http://images.cocodataset.org/val2017/000000039769.jpg" +image = Image.open(requests.get(url, stream=True).raw) +conversation = [ + { + + "role": "user", + "content": [ + {"type": "text", "text": "How many cats are there in the image?"}, + {"type": "image"}, + ], + }, + { + + "role": "assistant", + "content": [{"type": "text", "text": "There are two cats"}], + }, + { + + "role": "user", + "content": [ + {"type": "text", "text": "Why is this video funny?"}, + {"type": "video"}, + ], + }, +] +prompt = processor.apply_chat_template(conversation, add_generation_prompt=True) +inputs = processor(text=prompt, images=image, videos=clip, padding=True, return_tensors="pt") + +# Generate +generate_ids = model.generate(**inputs, max_length=50) +processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True) + + +``` + +## تحسين النموذج + +### التكميم باستخدام Bitsandbytes لكفاءة الذاكرة + +يمكن تحميل النموذج في عدد أقل من البتات، مما يقلل بشكل كبير من عبء الذاكرة مع الحفاظ على أداء النموذج الأصلي. يسمح ذلك بالنشر الفعال في الحالات المقيدة بالموارد. + +أولاً، تأكد من تثبيت bitsandbytes عن طريق تشغيل `pip install bitsandbytes` وامتلاك حق الوصول إلى جهاز GPU متوافق مع CUDA. قم بتحميل النموذج الكمي ببساطة عن طريق إضافة [`BitsAndBytesConfig`](../main_classes/quantization#transformers.BitsAndBytesConfig) كما هو موضح أدناه: + +```python +from transformers import LlavaNextVideoForConditionalGeneration, LlavaNextVideoProcessor + +# specify how to quantize the model +quantization_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_quant_type="nf4"، + bnb_4bit_compute_dtype=torch.float16, +) + +model = LlavaNextVideoForConditionalGeneration.from_pretrained("llava-hf/LLaVA-NeXT-Video-7B-hf"، quantization_config=quantization_config، device_map="auto") +``` + +### Flash-Attention 2 لتسريع التوليد + +بالإضافة إلى ذلك، يمكننا تسريع استدلال النموذج بشكل كبير باستخدام [Flash Attention](../perf_train_gpu_one.md#flash-attention-2)، وهو تنفيذ أسرع لآلية الانتباه المستخدمة داخل النموذج. + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +يجب أن يكون لديك أيضًا أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في وثائق مستودع [flash attention](https://github.com/Dao-AILab/flash-attention) الرسمي. يمكن استخدام FlashAttention-2 فقط عندما يتم تحميل النموذج في `torch.float16` أو `torch.bfloat16`. + +لتحميل وتشغيل نموذج باستخدام Flash Attention-2، أضف ببساطة `attn_implementation="flash_attention_2"` عند تحميل النموذج كما يلي: + +```python +from transformers import LlavaNextVideoForConditionalGeneration + +model = LlavaNextVideoForConditionalGeneration.from_pretrained( + "llava-hf/LLaVA-NeXT-Video-7B-hf"، + torch_dtype=torch.float16، + attn_implementation="flash_attention_2"، +).to(0) +``` + +## LlavaNextVideoConfig + +[[autodoc]] LlavaNextVideoConfig + +## LlavaNextVideoProcessor + +[[autodoc]] LlavaNextVideoProcessor + +## LlavaNextVideoImageProcessor + +[[autodoc]] LlavaNextVideoImageProcessor + +## LlavaNextVideoForConditionalGeneration + +[[autodoc]] LlavaNextVideoForConditionalGeneration + +- forward \ No newline at end of file From 6b580b2df84f3a44dd82640f9f8bd82e9a041ab5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:43 +0300 Subject: [PATCH 484/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/llava=5Fnext.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/llava_next.md | 171 +++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 docs/source/ar/model_doc/llava_next.md diff --git a/docs/source/ar/model_doc/llava_next.md b/docs/source/ar/model_doc/llava_next.md new file mode 100644 index 00000000000000..1ff24c825a521f --- /dev/null +++ b/docs/source/ar/model_doc/llava_next.md @@ -0,0 +1,171 @@ +# LLaVA-NeXT + +## نظرة عامة +اقترح نموذج LLaVA-NeXT في [LLaVA-NeXT: Improved reasoning, OCR, and world knowledge](https://llava-vl.github.io/blog/2024-01-30-llava-next/) بواسطة Haotian Liu, Chunyuan Li, Yuheng Li, Bo Li, Yuanhan Zhang, Sheng Shen, Yong Jae Lee. ويحسن LLaVa-NeXT (المعروف أيضًا باسم LLaVa-1.6) من [LLaVa](llava) عن طريق زيادة دقة صورة الإدخال والتدريب على مجموعة بيانات محسنة لضبط التعليمات المرئية لتحسين التعرف الضوئي على الحروف (OCR) والاستدلال بالمعرفة. + +مقدمة المدونة هي كما يلي: + +> "في أكتوبر 2023، أصدرنا LLaVA-1.5 بتصميم بسيط وفعال إلى جانب أداء رائع في مجموعة من 12 مجموعة بيانات. وقد شكل منذ ذلك الحين الأساس للعديد من الدراسات الشاملة للبيانات والنماذج وقدرات النماذج متعددة الوسائط الكبيرة (LMM)، وقد مكنت العديد من التطبيقات الجديدة. +> واليوم، يسرنا أن نقدم LLaVA-NeXT، مع تحسين الاستدلال والتعرف الضوئي على الحروف ومعرفة العالم. حتى أن LLaVA-NeXT يتفوق على Gemini Pro في العديد من المعايير المرجعية. +> مقارنة بـ LLaVA-1.5، يحتوي LLaVA-NeXT على العديد من التحسينات: +> - زيادة دقة صورة الإدخال إلى 4x بكسل أكثر. يسمح لها ذلك بالتقاط المزيد من التفاصيل المرئية. يدعم ثلاث نسب عرض إلى ارتفاع، تصل إلى 672x672، 336x1344، 1344x336 دقة. +> - قدرة استدلال بصرية أفضل وقدرة OCR مع مزيج محسن من بيانات ضبط التعليمات المرئية. +> - محادثة بصرية أفضل لمزيد من السيناريوهات، وتغطية تطبيقات مختلفة. معرفة عالمية واستدلال منطقي أفضل. +> - نشر فعال واستنتاج باستخدام SGLang. +> إلى جانب التحسينات في الأداء، يحافظ LLaVA-NeXT على التصميم الأنيق وكفاءة البيانات لـ LLaVA-1.5. فهو يعيد استخدام موصل pretrained من LLaVA-1.5، ولا يزال يستخدم أقل من 1 مليون عينة ضبط تعليمات بصرية. وينتهي أكبر متغير 34B من التدريب في ~1 يوم مع 32 A100s. " + + + + يدمج LLaVa-NeXT دقة إدخال أعلى عن طريق ترميز رقع مختلفة من صورة الإدخال. مأخوذة من الورقة الأصلية. + +ساهم بهذا النموذج [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/haotian-liu/LLaVA/tree/main). + +## نصائح الاستخدام + +- ننصح المستخدمين باستخدام `padding_side="left"` عند حساب التوليد الدفعي لأنه يؤدي إلى نتائج أكثر دقة. تأكد ببساطة من استدعاء `processor.tokenizer.padding_side = "left"` قبل التوليد. + +- لاحظ أن كل نقطة تفتيش تم تدريبها بتنسيق موجه محدد، اعتمادًا على نموذج اللغة الكبير (LLM) المستخدم. أدناه، نقوم بإدراج تنسيقات الموجه الصحيحة لاستخدامها في موجه النص "What is shown in this image؟": + +[llava-v1.6-mistral-7b-hf](https://huggingface.co/llava-hf/llava-v1.6-mistral-7b-hf) يتطلب التنسيق التالي: + +```bash +"[INST] \nWhat is shown in this image? [/INST]" +``` + +[llava-v1.6-vicuna-7b-hf](https://huggingface.co/llava-hf/llava-v1.6-vicuna-7b-hf) و [llava-v1.6-vicuna-13b-hf](https://huggingface.co/llava-hf/llava-v1.6-vicuna-13b-hf) يتطلب التنسيق التالي: + +```bash +"A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. USER: \nWhat is shown in this image? ASSISTANT:" +``` + +[llava-v1.6-34b-hf](https://huggingface.co/llava-hf/llava-v1.6-34b-hf) يتطلب التنسيق التالي: + +```bash +"<|im_start|>system\nAnswer the questions.<|im_end|><|im_start|>user\n\nWhat is shown in this image?<|im_end|><|im_start|>assistant\n" +``` + +## مثال الاستخدام + +### استنتاج صورة واحدة + +فيما يلي كيفية تحميل النموذج وإجراء الاستدلال بنصف الدقة (`torch.float16`): + +```python +from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration +import torch +from PIL import Image +import requests + +processor = LlavaNextProcessor.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf") + +model = LlavaNextForConditionalGeneration.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf", torch_dtype=torch.float16, low_cpu_mem_usage=True) +model.to("cuda:0") + +# prepare image and text prompt, using the appropriate prompt template +url = "https://github.com/haotian-liu/LLaVA/blob/1a91fc274d7c35a9b50b3cb29c4247ae5837ce39/images/llava_v1_5_radar.jpg?raw=true" +image = Image.open(requests.get(url, stream=True).raw) +prompt = "[INST] \nWhat is shown in this image? [/INST]" + +inputs = processor(prompt, image, return_tensors="pt").to("cuda:0") + +# autoregressively complete prompt +output = model.generate(**inputs, max_new_tokens=100) + +print(processor.decode(output[0], skip_special_tokens=True)) +``` + +### استنتاج الصور المتعددة + +يمكن لـ LLaVa-Next إجراء الاستدلال باستخدام صور متعددة كإدخال، حيث تنتمي الصور إما إلى نفس الموجه أو إلى موجهات مختلفة (في الاستدلال الدفعي). إليك كيفية القيام بذلك: + +```python +import requests +from PIL import Image +import torch +from transformers import AutoProcessor, LlavaNextForConditionalGeneration + +# Load the model in half-precision +model = LlavaNextForConditionalGeneration.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf", torch_dtype=torch.float16, device_map="auto") +processor = AutoProcessor.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf") + +# Get three different images +url = "https://www.ilankelman.org/stopsigns/australia.jpg" +image_stop = Image.open(requests.get(url, stream=True).raw) + +url = "http://images.cocodataset.org/val2017/000000039769.jpg" +image_cats = Image. Soehbat(requests.get(url, stream=True).raw) + +url = "https://huggingface.co/microsoft/kosmos-2-patch14-224/resolve/main/snowman.jpg" +image_snowman = Image.open(requests.get(url, stream=True).raw) + +# Prepare a batched prompt, where the first one is a multi-turn conversation and the second is not +prompt = [ + "[INST] \nWhat is shown in this image? [/INST] There is a red stop sign in the image. [INST] \nWhat about this image? How many cats do you see [/INST]", + "[INST] \nWhat is shown in this image? [/INST]" +] + +# We can simply feed images in the order they have to be used in the text prompt +# Each "" token uses one image leaving the next for the subsequent "" tokens +inputs = processor(text=prompt, images=[image_stop, image_cats, image_snowman], padding=True, return_tensors="pt").to(model.device) + +# Generate +generate_ids = model.generate(**inputs, max_new_tokens=30) +processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False) +``` + +## تحسين النموذج + +### التكميم باستخدام Bitsandbytes + +يمكن تحميل النموذج في 8 أو 4 بتات، مما يقلل بشكل كبير من متطلبات الذاكرة مع الحفاظ على أداء النموذج الأصلي. تأكد أولاً من تثبيت bitsandbytes، `pip install bitsandbytes` وتأكد من إمكانية الوصول إلى جهاز GPU متوافق مع CUDA. ببساطة قم بتغيير المقتطف أعلاه إلى: + +```python +from transformers import LlavaNextForConditionalGeneration, BitsAndBytesConfig + +# specify how to quantize the model +quantization_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_quant_type="nf4", + bnb_4bit_compute_dtype=torch.float16, +) + +model = LlavaNextForConditionalGeneration.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf", quantization_config=quantization_config, device_map="auto") +``` + +### استخدم Flash-Attention 2 لتسريع التوليد + +تأكد أولاً من تثبيت flash-attn. راجع [المستودع الأصلي لـ Flash Attention](https://github.com/Dao-AILab/flash-attention) فيما يتعلق بتثبيت الحزمة. ببساطة قم بتغيير المقتطف أعلاه إلى: + +```python +from transformers import LlavaNextForConditionalGeneration + +model = LlavaNextForConditionalGeneration.from_pretrained( + model_id, + torch_dtype=torch.float16, + low_cpu_mem_usage=True, + use_flash_attention_2=True +).to(0) +``` + +## LlavaNextConfig + +[[autodoc]] LlavaNextConfig + +## LlavaNextImageProcessor + +[[autodoc]] LlavaNextImageProcessor + +- معالجة مسبقة + +## LlavaNextProcessor + +[[autodoc]] LlavaNextProcessor + +## LlavaNextForConditionalGeneration + +[[autodoc]] LlavaNextForConditionalGeneration + +- forword \ No newline at end of file From 8b7f6d6faac02c8cc4784d212c78db6e54ed3649 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:45 +0300 Subject: [PATCH 485/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/longformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/longformer.md | 175 +++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 docs/source/ar/model_doc/longformer.md diff --git a/docs/source/ar/model_doc/longformer.md b/docs/source/ar/model_doc/longformer.md new file mode 100644 index 00000000000000..7c663a1cb27b75 --- /dev/null +++ b/docs/source/ar/model_doc/longformer.md @@ -0,0 +1,175 @@ +# Longformer + +## نظرة عامة +تم تقديم نموذج Longformer في ورقة "Longformer: The Long-Document Transformer" بواسطة Iz Beltagy و Matthew E. Peters و Arman Cohan. + +مقدمة الورقة البحثية هي التالية: + +*لا تستطيع النماذج المستندة إلى المحولات معالجة التسلسلات الطويلة بسبب عملية الاهتمام الذاتي، والتي تزداد تربيعيًا مع طول التسلسل. ولمعالجة هذا القيد، نقدم Longformer بآلية اهتمام تزداد خطيًا مع طول التسلسل، مما يجعل من السهل معالجة المستندات التي تحتوي على آلاف الرموز أو أكثر. وآلية الاهتمام في Longformer هي بديل مباشر لآلية الاهتمام الذاتي القياسية، وتجمع بين الاهتمام المحلي بنافذة والاهتمام العالمي المدفوع بالمهمة. وبناءً على العمل السابق حول محولات التسلسل الطويل، نقيم Longformer على النمذجة اللغوية على مستوى الأحرف ونحقق نتائج متقدمة على text8 و enwik8. وعلى عكس معظم الأعمال السابقة، نقوم أيضًا بتدريب Longformer مسبقًا وضبطها الدقيق على مجموعة متنوعة من المهام النهائية. ويفوق Longformer المُدرب مسبقًا أداء RoBERTa باستمرار في مهام المستندات الطويلة، ويحقق نتائج متقدمة جديدة في WikiHop و TriviaQA.* + +تمت المساهمة بهذا النموذج من قبل [beltagy](https://huggingface.co/beltagy). يمكن العثور على كود المؤلفين [هنا](https://github.com/allenai/longformer). + +## نصائح الاستخدام +- بما أن Longformer يعتمد على RoBERTa، فإنه لا يحتوي على `token_type_ids`. لا تحتاج إلى الإشارة إلى الجزء الذي ينتمي إليه الرمز. قم فقط بفصل أجزاءك باستخدام رمز الفصل `tokenizer.sep_token` (أو ``). + +- نموذج محول يستبدل مصفوفات الاهتمام بمصفوفات مبعثرة لتسريعها. غالبًا ما يكون السياق المحلي (على سبيل المثال، ما هو الرمزان الموجودان على اليسار واليمين؟) كافٍ لاتخاذ إجراء بالنسبة لرمز معين. لا تزال بعض الرموز المدخلة مسبقًا تحصل على اهتمام عالمي، ولكن مصفوفة الاهتمام بها عدد أقل بكثير من المعلمات، مما يؤدي إلى تسريعها. راجع قسم الاهتمام المحلي لمزيد من المعلومات. + +## الاهتمام الذاتي Longformer + +يستخدم الاهتمام الذاتي Longformer الاهتمام الذاتي لكل من السياق "المحلي" والسياق "العالمي". معظم الرموز لا تحضر إلا "محليًا" لبعضها البعض، مما يعني أن كل رمز يحضر إلى \\(\frac{1}{2} w\\) الرموز السابقة و \\(\frac{1}{2} w\\) الرموز اللاحقة مع \\(w\\) كونها طول النافذة كما هو محدد في `config.attention_window`. لاحظ أن `config.attention_window` يمكن أن يكون من النوع `List` لتحديد طول نافذة مختلف لكل طبقة. يحضر عدد قليل من الرموز المختارة "عالميًا" إلى جميع الرموز الأخرى، كما هو الحال تقليديًا بالنسبة لجميع الرموز في `BertSelfAttention`. + +لاحظ أن الرموز التي تحضر "محليًا" و "عالميًا" يتم إسقاطها بواسطة مصفوفات استعلام ومفتاح وقيمة مختلفة. لاحظ أيضًا أن كل رمز يحضر "محليًا" لا يحضر فقط إلى الرموز الموجودة داخل نافذته \\(w\\)، ولكن أيضًا إلى جميع الرموز التي تحضر "عالميًا" بحيث يكون الاهتمام العالمي *متناظرًا*. + +يمكن للمستخدم تحديد الرموز التي تحضر "محليًا" والرموز التي تحضر "عالميًا" عن طريق تعيين المصفوفة `global_attention_mask` بشكل مناسب في وقت التشغيل. تستخدم جميع نماذج Longformer المنطق التالي لـ `global_attention_mask`: + +- 0: يحضر الرمز "محليًا"، +- 1: يحضر الرمز "عالميًا". + +لمزيد من المعلومات، يرجى الرجوع إلى طريقة [`~LongformerModel.forward`]. + +باستخدام الاهتمام الذاتي Longformer، يمكن تقليل تعقيد الذاكرة والوقت لعملية الضرب في المصفوفة الاستعلامية الرئيسية، والتي تمثل عادةً عنق الزجاجة في الذاكرة والوقت، من \\(\mathcal{O}(n_s \times n_s)\\) إلى \\(\mathcal{O}(n_s \times w)\\)، مع \\(n_s\\) كونها طول التسلسل و \\(w\\) كونها متوسط حجم النافذة. من المفترض أن يكون عدد الرموز التي تحضر "عالميًا" غير مهم مقارنة بعدد الرموز التي تحضر "محليًا". + +لمزيد من المعلومات، يرجى الرجوع إلى الورقة [الأصلية](https://arxiv.org/pdf/2004.05150.pdf). + +## التدريب + +يتم تدريب [`LongformerForMaskedLM`] بنفس طريقة تدريب [`RobertaForMaskedLM`] ويجب استخدامه على النحو التالي: + +```python +input_ids = tokenizer.encode("This is a sentence from [MASK] training data", return_tensors="pt") +mlm_labels = tokenizer.encode("This is a sentence from the training data", return_tensors="pt") + +loss = model(input_ids, labels=input_ids, masked_lm_labels=mlm_labels)[0] +``` + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة المعقدة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## LongformerConfig + +[[autodoc]] LongformerConfig + +## LongformerTokenizer + +[[autodoc]] LongformerTokenizer + +## LongformerTokenizerFast + +[[autodoc]] LongformerTokenizerFast + +## المخرجات الخاصة بـ Longformer + +[[autodoc]] models.longformer.modeling_longformer.LongformerBaseModelOutput + +[[autodoc]] models.longformer.modeling_longformer.LongformerBaseModelOutputWithPooling + +[[autodoc]] models.longformer.modeling_longformer.LongformerMaskedLMOutput + +[[autodoc]] models.longformer.modeling_longformer.LongformerQuestionAnsweringModelOutput + +[[autodoc]] models.longformer.modeling_longformer.LongformerSequenceClassifierOutput + +[[autodoc]] models.longformer.modeling_longformer.LongformerMultipleChoiceModelOutput + +[[autodoc]] models.longformer.modeling_longformer.LongformerTokenClassifierOutput + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerBaseModelOutput + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerBaseModelOutputWithPooling + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerMaskedLMOutput + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerQuestionAnsweringModelOutput + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerSequenceClassifierOutput + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerMultipleChoiceModelOutput + +[[autodoc]] models.longformer.modeling_tf_longformer.TFLongformerTokenClassifierOutput + + + + +## LongformerModel + +[[autodoc]] LongformerModel + +- forward + +## LongformerForMaskedLM + +[[autodoc]] LongformerForMaskedLM + +- forward + +## LongformerForSequenceClassification + +[[autodoc]] LongformerForSequenceClassification + +- forward + +## LongformerForMultipleChoice + +[[autodoc]] LongformerForMultipleChoice + +- forward + +## LongformerForTokenClassification + +[[autodoc]] LongformerForTokenClassification + +- forward + +## LongformerForQuestionAnswering + +[[autodoc]] LongformerForQuestionAnswering + +- forward + + + + +## TFLongformerModel + +[[autodoc]] TFLongformerModel + +- call + +## TFLongformerForMaskedLM + +[[autodoc]] TFLongformerForMaskedLM + +- call + +## TFLongformerForQuestionAnswering + +[[autodoc]] TFLongformerForQuestionAnswering + +- call + +## TFLongformerForSequenceClassification + +[[autodoc]] TFLongformerForSequenceClassification + +- call + +## TFLongformerForTokenClassification + +[[autodoc]] TFLongformerForTokenClassification + +- call + +## TFLongformerForMultipleChoice + + +[[autodoc]] TFLongformerForMultipleChoice + +- call + + + \ No newline at end of file From 5207bbbc39b3a35c33919e01db3aad64234dfa50 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:47 +0300 Subject: [PATCH 486/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/longt5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/longt5.md | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/source/ar/model_doc/longt5.md diff --git a/docs/source/ar/model_doc/longt5.md b/docs/source/ar/model_doc/longt5.md new file mode 100644 index 00000000000000..c6c0cb7a417dba --- /dev/null +++ b/docs/source/ar/model_doc/longt5.md @@ -0,0 +1,66 @@ +# LongT5 + +## نظرة عامة +اقترح نموذج LongT5 في ورقة بحثية بعنوان: "LongT5: Efficient Text-To-Text Transformer for Long Sequences" من قبل مندي جوو، وجوشوا إنسلي، وديفيد يثوس، وسانتياغو أونتانون، وجيانمو ني، ويون-هسوان سونغ، ويينفي يانغ. وهو محول ترميز وفك ترميز تم تدريبه مسبقًا في إعداد توليدي لإزالة تشويش النص إلى نص. يعد نموذج LongT5 امتدادًا لنموذج T5، ويتيح استخدام إحدى آليتي الانتباه الكفءتين المختلفتين - (1) الانتباه المحلي، أو (2) الانتباه العالمي العابر. + +مقتبس من الورقة البحثية: + +> أظهر العمل الحديث أن إما (1) زيادة طول الإدخال أو (2) زيادة حجم النموذج يمكن أن يحسن أداء النماذج العصبية المستندة إلى محول. في هذه الورقة، نقدم نموذجًا جديدًا، يسمى LongT5، والذي نستكشف من خلاله آثار تغيير حجم كل من طول الإدخال وحجم النموذج في نفس الوقت. على وجه التحديد، قمنا بدمج أفكار الانتباه من المحولات المدخلة الطويلة (ETC)، واعتمدنا استراتيجيات التدريب المسبق من التدريب المسبق للتلخيص (PEGASUS) في بنية T5 القابلة للتطوير. وكانت النتيجة آلية انتباه جديدة نسميها "العالمية العابرة" (TGlobal)، والتي تحاكي آلية الانتباه المحلية/العالمية لـ ETC، ولكن دون الحاجة إلى إدخالات جانبية إضافية. وقد تمكنا من تحقيق نتائج متقدمة في عدة مهام تلخيص، وتفوق نماذج T5 الأصلية في مهام الأسئلة والأجوبة. + +تمت المساهمة بهذا النموذج من قبل [stancld]. يمكن العثور على الكود الأصلي [هنا]. + +## نصائح الاستخدام +- [`LongT5ForConditionalGeneration`] هو امتداد لـ [`T5ForConditionalGeneration`] حيث يستبدل طبقة *الانتباه الذاتي* للترميز بانتباه *محلي* أو *عابر عالمي* (*tglobal*) فعال. +- على عكس نموذج T5، لا يستخدم LongT5 بادئة المهمة. علاوة على ذلك، فإنه يستخدم هدفًا تدريبيًا مسبقًا مختلفًا مستوحى من التدريب المسبق لـ [`PegasusForConditionalGeneration`]. +- تم تصميم نموذج LongT5 للعمل بكفاءة وبشكل جيد جدًا في مهام *الترجمة الآلية* ذات النطاق الطويل حيث يتجاوز تسلسل الإدخال 512 رمزًا المستخدمة بشكل شائع. ويمكنه التعامل مع تسلسلات الإدخال بطول يصل إلى 16384 رمزًا. +- بالنسبة لـ *Local Attention*، تسمح عملية الانتباه المحلي المنزلق والمتباعد للرمز المعطى بالانتباه فقط إلى `r` من الرموز الموجودة على اليسار واليمين منه (مع `r=127` بشكل افتراضي). لا يقدم *Local Attention* أي معلمات جديدة للنموذج. تعقيد الآلية خطي في طول تسلسل الإدخال `l`: `O(l*r)`. +- *Transient Global Attention* هو امتداد لـ *Local Attention*. علاوة على ذلك، فإنه يسمح لكل رمز إدخال بالتفاعل مع جميع الرموز الأخرى في الطبقة. يتم ذلك عن طريق تقسيم تسلسل الإدخال إلى كتل ذات طول ثابت `k` (مع `k=16` بشكل افتراضي). بعد ذلك، يتم الحصول على رمز عالمي لمثل هذا الكتلة عن طريق جمع وتطبيع الرموز المضمنة لكل رمز في الكتلة. وبفضل ذلك، تسمح آلية الانتباه لكل رمز بالانتباه إلى كل من الرموز القريبة كما هو الحال في الانتباه المحلي، وإلى كل رمز عالمي كما هو الحال في الانتباه العالمي العادي (*transient* يمثل حقيقة أن الرموز العالمية يتم إنشاؤها ديناميكيًا داخل كل عملية انتباه). ونتيجة لذلك، تقدم آلية *TGlobal* بعض المعلمات الجديدة -- انحيازات الموضع النسبي العالمية وتطبيع الطبقة لرموز الكتل العالمية. تعقيد هذه الآلية هو `O(l(r + l/k))`. + +## الموارد +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## LongT5Config + +[[autodoc]] LongT5Config + + + +## LongT5Model + +[[autodoc]] LongT5Model + +- forward + +## LongT5ForConditionalGeneration + +[[autodoc]] LongT5ForConditionalGeneration + +- forward + +## LongT5EncoderModel + +[[autodoc]] LongT5EncoderModel + +- forward + + + +## FlaxLongT5Model + +[[autodoc]] FlaxLongT5Model + +- __call__ +- encode +- decode + +## FlaxLongT5ForConditionalGeneration + +[[autodoc]] FlaxLongT5ForConditionalGeneration + +- __call__ +- encode +- decode + + + \ No newline at end of file From 58a3d7debc402e1b2ff074e973dd4b35e1529833 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:49 +0300 Subject: [PATCH 487/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/luke.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/luke.md | 154 +++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 docs/source/ar/model_doc/luke.md diff --git a/docs/source/ar/model_doc/luke.md b/docs/source/ar/model_doc/luke.md new file mode 100644 index 00000000000000..570006dbf44217 --- /dev/null +++ b/docs/source/ar/model_doc/luke.md @@ -0,0 +1,154 @@ +# LUKE + +## نظرة عامة +اقترح نموذج LUKE في ورقة البحثية بعنوان: "LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attention" من قبل Ikuya Yamada وAkari Asai وHiroyuki Shindo وHideaki Takeda وYuji Matsumoto. + +يستند النموذج إلى RoBERTa ويضيف تضمين الكيانات، بالإضافة إلى آلية انتباه ذاتي على دراية بالكيانات، مما يساعد على تحسين الأداء في مهام مختلفة لأسفل تتضمن الاستدلال حول الكيانات مثل التعرف على الكيانات المسماة، والأسئلة والإجابات الاستخلاصية وأسلوب الإكمال، وتصنيف الكيانات والعلاقات. + +الملخص من الورقة هو كما يلي: + +*تمثل الكيانات مفيدة في المهام اللغوية الطبيعية التي تتضمن الكيانات. في هذه الورقة، نقترح تمثيلات سياقية جديدة للكلمات والكيانات بناءً على المحول ثنائي الاتجاه. ويعامل النموذج المقترح الكلمات والكيانات في نص معين كعلامات مستقلة، ويقوم بإخراج تمثيلات سياقية لها. يتم تدريب النموذج باستخدام مهمة تدريب مسبق جديدة بناءً على نموذج اللغة المقنعة من BERT. تتضمن المهمة التنبؤ بالكلمات والكيانات المقنعة بشكل عشوائي في مجموعة بيانات كبيرة موسومة بالكيانات تم استردادها من ويكيبيديا. نقترح أيضًا آلية انتباه ذاتي على دراية بالكيانات وهي امتداد لآلية الانتباه الذاتي لمحول، وتأخذ في الاعتبار أنواع العلامات (كلمات أو كيانات) عند حساب درجات الانتباه. يحقق النموذج المقترح أداءً تجريبيًا مثيرًا للإعجاب في مجموعة واسعة من المهام المتعلقة بالكيانات. وعلى وجه الخصوص، فإنه يحصل على نتائج متقدمة في خمس مجموعات بيانات شهيرة: Open Entity (تصنيف الكيانات)، TACRED (تصنيف العلاقات)، CoNLL-2003 (التعرف على الكيانات المسماة)، ReCoRD (الأسئلة والإجابات على طريقة الإكمال)، وSQuAD 1.1 (الأسئلة والإجابات الاستخلاصية).* + +تمت المساهمة بهذا النموذج من قبل [ikuyamada](https://huggingface.co/ikuyamada) و [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/studio-ousia/luke). + +## نصائح الاستخدام + +- هذا التنفيذ هو نفسه [`RobertaModel`] مع إضافة تضمين الكيانات وكذلك آلية الانتباه الذاتي على دراية بالكيانات، والتي تحسن الأداء في المهام التي تتضمن الاستدلال حول الكيانات. + +- يعامل LUKE الكيانات كعلامات إدخال؛ لذلك، فإنه يأخذ `entity_ids` و`entity_attention_mask` و`entity_token_type_ids` و`entity_position_ids` كإدخال إضافي. يمكنك الحصول على هذه المعلومات باستخدام [`LukeTokenizer`]. + +- يأخذ [`LukeTokenizer`] `entities` و`entity_spans` (مواضع البداية والنهاية المستندة إلى الأحرف للكيانات في نص الإدخال) كإدخال إضافي. تتكون `entities` عادةً من كيانات [MASK] أو كيانات Wikipedia. الوصف المختصر عند إدخال هذه الكيانات هو كما يلي: + +- *إدخال كيانات [MASK] لحساب تمثيلات الكيانات*: تستخدم كيان [MASK] لإخفاء الكيانات التي سيتم التنبؤ بها أثناء التدريب المسبق. عندما يتلقى LUKE كيان [MASK]، فإنه يحاول التنبؤ بالكيان الأصلي عن طريق جمع المعلومات حول الكيان من نص الإدخال. وبالتالي، يمكن استخدام كيان [MASK] لمعالجة المهام لأسفل التي تتطلب معلومات الكيانات في النص مثل تصنيف الكيانات، وتصنيف العلاقات، والتعرف على الكيانات المسماة. + +- *إدخال كيانات Wikipedia للحصول على تمثيلات الرموز المعززة بالمعرفة*: يتعلم LUKE معلومات غنية (أو معرفة) حول كيانات Wikipedia أثناء التدريب المسبق ويخزن المعلومات في تضمين الكيان الخاص به. من خلال استخدام كيانات Wikipedia كرموز إدخال، يقوم LUKE بإخراج تمثيلات الرموز المعززة بالمعلومات المخزنة في تضمين هذه الكيانات. وهذا فعال بشكل خاص للمهام التي تتطلب معرفة العالم الحقيقي، مثل الأسئلة والإجابات. + +- هناك ثلاثة نماذج رأس لحالة الاستخدام السابقة: + +- [`LukeForEntityClassification`]، للمهام التي تصنف كيانًا واحدًا في نص الإدخال مثل تصنيف الكيانات، على سبيل المثال مجموعة بيانات [Open Entity](https://www.cs.utexas.edu/~eunsol/html_pages/open_entity.html). يضع هذا النموذج رأسًا خطيًا أعلى تمثيل الكيان الإخراج. + +- [`LukeForEntityPairClassification`]، للمهام التي تصنف العلاقة بين كيانين مثل تصنيف العلاقات، على سبيل المثال مجموعة بيانات [TACRED](https://nlp.stanford.edu/projects/tacred/). يضع هذا النموذج رأسًا خطيًا أعلى التمثيل الموحد لزوج الكيانات المعطاة. + +- [`LukeForEntitySpanClassification`]، للمهام التي تصنف تسلسل نطاقات الكيانات، مثل التعرف على الكيانات المسماة (NER). يضع هذا النموذج رأسًا خطيًا أعلى تمثيلات الكيانات الإخراج. يمكنك معالجة NER باستخدام هذا النموذج عن طريق إدخال جميع نطاقات الكيانات المحتملة في النص إلى النموذج. + +لدى [`LukeTokenizer`] حجة `task`، والتي تتيح لك إنشاء إدخال لهذه النماذج الرأس بسهولة عن طريق تحديد `task="entity_classification"` أو `task="entity_pair_classification"` أو `task="entity_span_classification"`. يرجى الرجوع إلى كود المثال لكل نموذج رأس. + +مثال على الاستخدام: + +```python +>>> from transformers import LukeTokenizer, LukeModel, LukeForEntityPairClassification + +>>> model = LukeModel.from_pretrained("studio-ousia/luke-base") +>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-base") +# مثال 1: حساب التمثيل السياقي للكيان المقابل لذكر الكيان "Beyoncé" + +>>> text = "Beyoncé lives in Los Angeles." +>>> entity_spans = [(0, 7)] # entity span المستندة إلى الأحرف المقابلة لـ "Beyoncé" +>>> inputs = tokenizer(text, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt") +>>> outputs = model(**inputs) +>>> word_last_hidden_state = outputs.last_hidden_state +>>> entity_last_hidden_state = outputs.entity_last_hidden_state +# مثال 2: إدخال كيانات Wikipedia للحصول على تمثيلات سياقية مثراة + +>>> entities = [ +... "Beyoncé", +... "Los Angeles", +... ] # عناوين كيانات Wikipedia المقابلة لذكر الكيانات "Beyoncé" و "Los Angeles" +>>> entity_spans = [(0, 7), (17, 28)] # entity spans المستندة إلى الأحرف المقابلة لـ "Beyoncé" و "Los Angeles" +>>> inputs = tokenizer(text, entities=entities, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt") +>>> outputs = model(**inputs) +>>> word_last_hidden_state = outputs.last_hidden_state +>>> entity_last_hidden_state = outputs.entity_last_hidden_state +# مثال 3: تصنيف العلاقة بين كيانين باستخدام نموذج رأس LukeForEntityPairClassification + +>>> model = LukeForEntityPairClassification.from_pretrained("studio-ousia/luke-large-finetuned-tacred") +>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-tacred") +>>> entity_spans = [(0, 7), (17, 28)] # entity spans المستندة إلى الأحرف المقابلة لـ "Beyoncé" و "Los Angeles" +>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt") +>>> outputs = model(**inputs) +>>> logits = outputs.logits +>>> predicted_class_idx = int(logits[0].argmax()) +>>> print("Predicted class:", model.config.id2label[predicted_class_idx]) +``` + +## الموارد + +- [مفكرة توضيحية حول كيفية ضبط نموذج [`LukeForEntityPairClassification`] لتصنيف العلاقات](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/LUKE) + +- [مفكرات توضح كيفية إعادة إنتاج النتائج كما هو موضح في الورقة باستخدام تنفيذ HuggingFace لـ LUKE](https://github.com/studio-ousia/luke/tree/master/notebooks) + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) + +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) + +- [دليل مهمة الأسئلة والإجابات](../tasks/question_answering) + +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) + +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## LukeConfig + +[[autodoc]] LukeConfig + +## LukeTokenizer + +[[autodoc]] LukeTokenizer + +- __call__ + +- save_vocabulary + +## LukeModel + +[[autodoc]] LukeModel + +- forward + +## LukeForMaskedLM + +[[autodoc]] LukeForMaskedLM + +- forward + +## LukeForEntityClassification + +[[autodoc]] LukeForEntityClassification + +- forward + +## LukeForEntityPairClassification + +[[autodoc]] LukeForEntityPairClassification + +- forward + +## LukeForEntitySpanClassification + +[[autodoc]] LukeForEntitySpanClassification + +- forward + +## LukeForSequenceClassification + +[[autodoc]] LukeForSequenceClassification + +- forward + +## LukeForMultipleChoice + +[[autodoc]] LukeForMultipleChoice + +- forward + +## LukeForTokenClassification + +[[autodoc]] LukeForTokenClassification + +- forward + +## LukeForQuestionAnswering + +[[autodoc]] LukeForQuestionAnswering + +- forward \ No newline at end of file From a36933fcdc848e64f6658d46ec0875a289753ff0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:51 +0300 Subject: [PATCH 488/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/lxmert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/lxmert.md | 87 ++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 docs/source/ar/model_doc/lxmert.md diff --git a/docs/source/ar/model_doc/lxmert.md b/docs/source/ar/model_doc/lxmert.md new file mode 100644 index 00000000000000..f2b1ebaa6bf895 --- /dev/null +++ b/docs/source/ar/model_doc/lxmert.md @@ -0,0 +1,87 @@ +# LXMERT + +## نظرة عامة + +تم اقتراح نموذج LXMERT في [LXMERT: Learning Cross-Modality Encoder Representations from Transformers](https://arxiv.org/abs/1908.07490) بواسطة Hao Tan & Mohit Bansal. وهو عبارة عن سلسلة من مشفرات Transformer ثنائية الاتجاه (واحد لوضع الرؤية، وواحد لوضع اللغة، ثم واحد لدمج الوضعين) مُعلمة مسبقًا باستخدام مزيج من نمذجة اللغة المقنعة، ومواءمة النص المرئي، وانحدار ميزة ROI، ونمذجة السمات المرئية المقنعة، ونمذجة الأشياء المرئية المقنعة، وأهداف الإجابة على الأسئلة المرئية. ويتكون التعليم المُسبق من مجموعات بيانات متعددة الوسائط المتعددة: MSCOCO، وVisual-Genome + Visual-Genome Question Answering، وVQA 2.0، وGQA. + +الملخص من الورقة هو ما يلي: + +*يتطلب الاستدلال المرئي واللغوي فهم المفاهيم المرئية، ودلالة اللغة، والأهم من ذلك، محاذاة وعلاقات هاتين الطريقتين. لذلك نقترح إطار LXMERT (Learning Cross-Modality Encoder Representations from Transformers) لتعلم هذه الاتصالات المرئية واللغوية. في LXMERT، نقوم ببناء نموذج Transformer واسع النطاق يتكون من ثلاثة مشفرات: مشفر علاقات الكائنات، ومشفر اللغة، ومشفر متعدد الوسائط. بعد ذلك، لتمكين نموذجنا من القدرة على توصيل الدلالات المرئية واللغوية، نقوم بالتعليم المُسبق للنموذج باستخدام أزواج الصور والجمل الكبيرة، عبر خمس مهام تعليم مُسبق تمثيلية متنوعة: نمذجة اللغة المقنعة، والتنبؤ بالكائنات المقنعة (انحدار السمات وتصنيف العلامات)، والمطابقة متعددة الوسائط، والإجابة على أسئلة الصور. تساعد هذه المهام في تعلم العلاقات داخل الوسائط وعبر الوسائط. بعد الضبط الدقيق من معلماتنا المُعلمة مسبقًا، يحقق نموذجنا نتائج متقدمة على مجموعتين من بيانات الإجابة على الأسئلة المرئية (أي VQA وGQA). كما نوضح قابلية تعميم نموذجنا متعدد الوسائط المُعلم من خلال تكييفه مع مهمة استدلال مرئي صعبة، NLVR، وتحسين أفضل نتيجة سابقة بنسبة 22% مطلقة (من 54% إلى 76%). وأخيرًا، نقدم دراسات تفصيلية لإثبات أن كلًا من مكونات النموذج المبتكرة واستراتيجيات التعليم المُسبق تساهم بشكل كبير في نتائجنا القوية؛ ونقدم أيضًا العديد من تصورات الانتباه لمشفرات مختلفة.* + +تمت المساهمة بهذا النموذج من قبل [eltoto1219](https://huggingface.co/eltoto1219). يمكن العثور على الكود الأصلي [هنا](https://github.com/airsplay/lxmert). + +## نصائح الاستخدام + +- لا يلزم استخدام صناديق الحدود في تضمين الميزات المرئية، حيث يمكن استخدام أي نوع من الميزات المرئية المكانية. +- يتم تمرير كل من الحالات المخفية اللغوية والحالات المخفية المرئية التي ينتجها LXMERT عبر طبقة متعددة الوسائط، لذا فهي تحتوي على معلومات من كلا الوضعين. للوصول إلى طريقة لا تنتبه إلا لنفسها، حدد الحالات المخفية المرئية/اللغوية من الإدخال الأول في الرباعي. +- لا تقوم طبقة الترميز ثنائية الاتجاه متعددة الوسائط إلا بإرجاع قيم الانتباه عند استخدام الوضع اللغوي كإدخال والوضع المرئي كمتجه سياق. علاوة على ذلك، بينما يحتوي المشفر متعدد الوسائط على الانتباه الذاتي لكل طريقة والانتباه المتبادل، يتم إرجاع الانتباه المتبادل فقط ويتم تجاهل كل من نتائج الانتباه الذاتي. + +## الموارد + +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) + +## LxmertConfig + +[[autodoc]] LxmertConfig + +## LxmertTokenizer + +[[autodoc]] LxmertTokenizer + +## LxmertTokenizerFast + +[[autodoc]] LxmertTokenizerFast + +## المخرجات الخاصة بـ Lxmert + +[[autodoc]] models.lxmert.modeling_lxmert.LxmertModelOutput + +[[autodoc]] models.lxmert.modeling_lxmert.LxmertForPreTrainingOutput + +[[autodoc]] models.lxmert.modeling_lxmert.LxmertForQuestionAnsweringOutput + +[[autodoc]] models.lxmert.modeling_tf_lxmert.TFLxmertModelOutput + +[[autodoc]] models.lxmert.modeling_tf_lxmert.TFLxmertForPreTrainingOutput + + + + + +## LxmertModel + +[[autodoc]] LxmertModel + +- forward + +## LxmertForPreTraining + +[[autodoc]] LxmertForPreTraining + +- forward + +## LxmertForQuestionAnswering + +[[autodoc]] LxmertForQuestionAnswering + +- forward + + + + + +## TFLxmertModel + +[[autodoc]] TFLxmertModel + +- call + +## TFLxmertForPreTraining + +[[autodoc]] TFLxmertForPreTraining + +- call + + + + \ No newline at end of file From a69f155e083b7b66c7b2c20b08749d1d268d6f5a Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:52 +0300 Subject: [PATCH 489/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/m2m=5F100.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/m2m_100.md | 132 ++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 docs/source/ar/model_doc/m2m_100.md diff --git a/docs/source/ar/model_doc/m2m_100.md b/docs/source/ar/model_doc/m2m_100.md new file mode 100644 index 00000000000000..311ee8d38bb861 --- /dev/null +++ b/docs/source/ar/model_doc/m2m_100.md @@ -0,0 +1,132 @@ +# M2M100 + +## نظرة عامة +اقترح نموذج M2M100 في ورقة بحثية بعنوان "Beyond English-Centric Multilingual Machine Translation" (ما بعد الترجمة الآلية متعددة اللغات التي تركز على اللغة الإنجليزية) من قبل أنجيلا فان، وشروتي باهوسالي، وهولجر شونك، وزيهي ما، وأحمد الكشكي، وسيدارث جويال، ومنديپ باينس، وأونور شيلبي، وجيوم وينزيك، وفيشراف تشاوداري، ونيمان جويال، وتوم بيرش، وفيتالي ليبتشينسكي، وسيرجي إدونوف، وإدوارد جريف، ومايكل أولي، وأرماند جولين. + +ملخص الورقة البحثية هو كما يلي: + +أظهر العمل الحالي في الترجمة الآلية الإمكانات الهائلة للترجمة الآلية متعددة اللغات من خلال تدريب نموذج واحد قادر على الترجمة بين أي زوج من اللغات. ومع ذلك، يركز الكثير من هذا العمل على اللغة الإنجليزية من خلال التدريب فقط على البيانات التي تُرجمت من اللغة الإنجليزية أو إليها. وعلى الرغم من دعم هذا النهج بمصادر كبيرة من بيانات التدريب، إلا أنه لا يعكس احتياجات الترجمة في جميع أنحاء العالم. وفي هذا العمل، نقوم بإنشاء نموذج ترجمة حقيقي متعدد اللغات للعديد من اللغات يمكنه الترجمة المباشرة بين أي زوج من 100 لغة. نقوم ببناء ومشاركة مجموعة بيانات تدريب مفتوحة المصدر تغطي آلاف اتجاهات اللغة بالبيانات الخاضعة للإشراف، والتي تم إنشاؤها من خلال التنقيب على نطاق واسع. بعد ذلك، نستكشف كيفية زيادة سعة النموذج بفعالية من خلال الجمع بين النطاق الكثيف والمعلمات النادرة الخاصة باللغة لإنشاء نماذج عالية الجودة. ويركز عملنا على النماذج غير المركزة على اللغة الإنجليزية، مما يحقق مكاسب تزيد عن 10 نقاط BLEU عند الترجمة المباشرة بين الاتجاهات غير الإنجليزية، مع أداء تنافسي مقارنة بأفضل الأنظمة الفردية في WMT. ونقوم بمشاركة برامجنا مفتوحة المصدر حتى يتمكن الآخرون من استنساخ البيانات والتقييم والنموذج النهائي M2M-100. + +تمت المساهمة بهذا النموذج من قبل [valhalla](https://huggingface.co/valhalla). + +## نصائح الاستخدام وأمثلة + +M2M100 هو نموذج متعدد اللغات للترميز فك الترميز (الترتيب التسلسلي) المقصود في المقام الأول لمهام الترجمة. نظرًا لأن النموذج متعدد اللغات، فإنه يتوقع تسلسلًا بتنسيق معين: يتم استخدام رمز معرف اللغة الخاص كبادئة في كل من النص المصدر والنص المستهدف. تنسيق النص المصدر هو `[lang_code] X [eos]`، حيث `lang_code` هو معرف لغة المصدر للنص المصدر ومعرف لغة الهدف للنص المستهدف، و`X` هو نص المصدر أو الهدف. + +يعتمد [`M2M100Tokenizer`] على `sentencepiece`، لذلك تأكد من تثبيته قبل تشغيل الأمثلة. لتثبيت `sentencepiece`، قم بتشغيل `pip install sentencepiece`. + +**التدريب الخاضع للإشراف** + +```python +from transformers import M2M100Config, M2M100ForConditionalGeneration, M2M100Tokenizer + +model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M") +tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M", src_lang="en", tgt_lang="fr") + +src_text = "Life is like a box of chocolates." +tgt_text = "La vie est comme une boîte de chocolat." + +model_inputs = tokenizer(src_text, text_target=tgt_text, return_tensors="pt") + +loss = model(**model_inputs).loss # forward pass +``` + +**التوليد** + +يستخدم M2M100 `eos_token_id` كـ `decoder_start_token_id` للتوليد، مع فرض معرف لغة الهدف كأول رمز منشأ. لإجبار معرف لغة الهدف كأول رمز منشأ، قم بتمرير المعلمة *forced_bos_token_id* إلى طريقة *generate*. يوضح المثال التالي كيفية الترجمة بين الهندية والفرنسية والصينية والإنجليزية باستخدام نقطة تفتيش *facebook/m2m100_418M*. + +```python +>>> from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer + +>>> hi_text = "जीवन एक चॉकलेट बॉक्स की तरह है।" +>>> chinese_text = "生活就像一盒巧克力。" + +>>> model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M") +>>> tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M") + +>>> # translate Hindi to French +>>> tokenizer.src_lang = "hi" +>>> encoded_hi = tokenizer(hi_text, return_tensors="pt") +>>> generated_tokens = model.generate(**encoded_hi, forced_bos_token_id=tokenizer.get_lang_id("fr")) +>>> tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +"La vie est comme une boîte de chocolat." + +>>> # translate Chinese to English +>>> tokenizer.src_lang = "zh" +>>> encoded_zh = tokenizer(chinese_text, return_tensors="pt") +>>> generated_tokens = model.generate(**encoded_zh, forced_bos_token_id=tokenizer.get_lang_id("en")) +>>> tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +"Life is like a box of chocolate." +``` + +## الموارد + +- [دليل مهام الترجمة](../tasks/translation) +- [دليل مهام الملخص](../tasks/summarization) + +## M2M100Config + +[[autodoc]] M2M100Config + +## M2M100Tokenizer + +[[autodoc]] M2M100Tokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## M2M100Model + +[[autodoc]] M2M100Model + +- forward + +## M2M100ForConditionalGeneration + +[[autodoc]] M2M100ForConditionalGeneration + +- forward + +## استخدام Flash Attention 2 + +Flash Attention 2 هو إصدار أسرع وأكثر تحسينًا لحساب درجات الاهتمام والتي تعتمد على نوى `cuda`. + +### التثبيت + +أولاً، تحقق مما إذا كان عتادك متوافقًا مع Flash Attention 2. يمكن العثور على أحدث قائمة للأجهزة المتوافقة في [الوثائق الرسمية](https://github.com/Dao-AILab/flash-attention#installation-and-features). + +بعد ذلك، قم بتثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +### الاستخدام + +لتحميل نموذج يستخدم Flash Attention 2، يمكننا تمرير الحجة `attn_implementation="flash_attention_2"` إلى طريقة [`.from_pretrained`](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained). يمكنك استخدام دقة إما `torch.float16` أو `torch.bfloat16`. + +```python +>>> import torch +>>> from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer + +>>> model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to("cuda").eval() +>>> tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M") + +>>> # translate Hindi to French +>>> hi_text = "जीवन एक चॉकलेट बॉक्स की तरह है।" +>>> tokenizer.src_lang = "hi" +>>> encoded_hi = tokenizer(hi_text, return_tensors="pt").to("cuda") +>>> generated_tokens = model.generate(**encoded_hi, forced_bos_token_id=tokenizer.get_lang_id("fr")) +>>> tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +"La vie est comme une boîte de chocolat." +``` + +### تسريع الأداء المتوقع + +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي وFlash Attention 2. + +
+ +
\ No newline at end of file From 7077687c11e624721fe681e240c0898180230686 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:54 +0300 Subject: [PATCH 490/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/madlad-400.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/madlad-400.md | 42 ++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/source/ar/model_doc/madlad-400.md diff --git a/docs/source/ar/model_doc/madlad-400.md b/docs/source/ar/model_doc/madlad-400.md new file mode 100644 index 00000000000000..40ef827ca46870 --- /dev/null +++ b/docs/source/ar/model_doc/madlad-400.md @@ -0,0 +1,42 @@ +# MADLAD-400 + +## نظرة عامة + +تم إصدار نماذج MADLAD-400 في الورقة [MADLAD-400: مجموعة بيانات كبيرة ومتعددة اللغات وعلى مستوى المستندات تمت مراجعتها يدويًا](MADLAD-400: A Multilingual And Document-Level Large Audited Dataset). + +وفيما يلي الملخص من الورقة: + +> "نقدم MADLAD-400، وهي مجموعة بيانات أحادية اللغة يدوية المراجعة وعامة المجال و3T رمزية تستند إلى CommonCrawl، وتغطي 419 لغة. نناقش القيود التي كشفت عنها المراجعة الذاتية لـ MADLAD-400، ودور مراجعة البيانات في عملية إنشاء مجموعة البيانات. بعد ذلك، نقوم بتدريب وإطلاق نموذج ترجمة آلية متعدد اللغات بحجم 10.7 مليار معلمة على 250 مليار رمز تغطي أكثر من 450 لغة باستخدام البيانات المتاحة للجمهور، ونجد أنه قادر على المنافسة مع النماذج الأكبر حجمًا بشكل ملحوظ، ونقدم النتائج على مجالات مختلفة. بالإضافة إلى ذلك، نقوم بتدريب نموذج لغة بحجم 8 مليارات معلمة، وتقييم النتائج على الترجمة القليلة التصوير. نجعل النماذج الأساسية 1 متاحة لمجتمع الباحثين." + +أضاف هذا النموذج [Juarez Bochi](https://huggingface.co/jbochi). يمكن العثور على نقاط التفتيش الأصلية [هنا](https://github.com/google-research/google-research/tree/master/madlad_400). + +هذا نموذج ترجمة آلية يدعم العديد من اللغات منخفضة الموارد، وهو قادر على المنافسة مع النماذج الأكبر حجمًا بشكل ملحوظ. + +يمكن استخدام أوزان MADLAD-400 مباشرة دون ضبط دقيق للنموذج: + +```python +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/madlad400-3b-mt") +>>> tokenizer = AutoTokenizer.from_pretrained("google/madlad400-3b-mt") + +>>> inputs = tokenizer("<2pt> I love pizza!", return_tensors="pt") +>>> outputs = model.generate(**inputs) +>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) +['Eu amo pizza!'] +``` + +أطلقت Google المتغيرات التالية: + +- [google/madlad400-3b-mt](https://huggingface.co/google/madlad400-3b-mt) +- [google/madlad400-7b-mt](https://huggingface.co/google/madlad400-7b-mt) +- [google/madlad400-7b-mt-bt](https://huggingface.co/google/madlad400-7b-mt-bt) +- [google/madlad400-10b-mt](https://huggingface.co/google/madlad400-10b-mt) + +يمكن العثور على نقاط التفتيش الأصلية [هنا](https://github.com/google-research/google-research/tree/master/madlad_400). + + + +راجع [صفحة وثائق T5](t5) لجميع المراجع API وأمثلة التعليمات البرمجية ومفكرات الدفاتر. لمزيد من التفاصيل حول تدريب وتقييم MADLAD-400، راجع بطاقة النموذج. + + \ No newline at end of file From 12a5867f26675b98fc301124f3db2aecb5266294 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:56 +0300 Subject: [PATCH 491/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mamba.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mamba.md | 96 +++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 docs/source/ar/model_doc/mamba.md diff --git a/docs/source/ar/model_doc/mamba.md b/docs/source/ar/model_doc/mamba.md new file mode 100644 index 00000000000000..13ecede6d1b8d4 --- /dev/null +++ b/docs/source/ar/model_doc/mamba.md @@ -0,0 +1,96 @@ +# Mamba + +## نظرة عامة +اقترح نموذج مامبا في [مامبا: نمذجة تسلسل الوقت الخطي مع مساحات الحالة الانتقائية](https://arxiv.org/abs/2312.00752) بواسطة ألبرت جو وتري داو. + +هذا النموذج هو بنية نموذجية جديدة تعتمد على نماذج مساحات الحالة. يمكنك قراءة المزيد حول الحدس وراء هذه [هنا](https://srush.github.io/annotated-s4/). + +الملخص من الورقة هو ما يلي: + +*تعتمد نماذج الأساس، التي تعمل الآن على تشغيل معظم التطبيقات المثيرة في التعلم العميق، بشكل شبه عالمي على بنية المحول ووحدته الأساسية لوحدة الاهتمام. وقد تم تطوير العديد من التصميمات المعمارية ذات الوقت دون التربيعي مثل الاهتمام الخطي، والنماذج المتكررة والمقيدة، ونماذج مساحات الحالة المنظمة، لمعالجة عدم كفاءة المحول الحسابي على التسلسلات الطويلة، ولكنها لم تؤد أداءً جيدًا مثل الاهتمام بالطرائق المهمة مثل اللغة. نحدد أن أحد أوجه القصور الرئيسية لهذه النماذج هو عدم قدرتها على إجراء الاستدلال القائم على المحتوى، ونقوم بعدة تحسينات. أولاً، يؤدي ببساطة السماح لمعلمات SSM بأن تكون دالات للإدخال إلى معالجة ضعفها مع الطرائق المنفصلة، مما يسمح للنموذج بانتقائية انتشار المعلومات أو نسيانها على طول بعد طول التسلسل اعتمادًا على الرمز الحالي. ثانيًا، على الرغم من أن هذا التغيير يمنع استخدام التحويلات الفعالة، إلا أننا نصمم خوارزمية متوازية واعية بالأجهزة في الوضع المتكرر. ندمج هذه SSM الانتقائية في بنية شبكة عصبية مبسطة من النهاية إلى النهاية بدون كتل اهتمام أو حتى كتل MLP (Mamba). يتمتع مامبا باستدلال سريع (5x من خلال وضع المحولات) وتدرج خطي في طول التسلسل، ويتحسن أداؤه على البيانات الحقيقية حتى تسلسلات المليون طولًا. باعتباره العمود الفقري للنموذج التسلسلي العام، يحقق مامبا أداءً متميزًا عبر طرائق متعددة مثل اللغة والصوت وعلم الجينوم. في نمذجة اللغة، يتفوق نموذجنا مامبا-3B على المحولات بنفس الحجم ويتطابق مع المحولات التي يبلغ حجمها ضعف حجمها، في كل من التدريب المسبق والتقييم اللاحق.* + +نصائح: + +- مامبا هو بنية نموذج مساحة حالة جديدة تنافس المحولات الكلاسيكية. وهو يعتمد على خط التقدم في نماذج مساحات الحالة المنظمة، مع تصميم وتنفيذ فعالين وواعيين بالأجهزة على غرار [FlashAttention](https://github.com/Dao-AILab/flash-attention). + +- تُكدس مامبا طبقات "المزج"، والتي تعادل طبقات "الاهتمام". المنطق الأساسي لـ "مامبا" موجود في فئة "MambaMixer". + +- هناك تنفيذان متعايشان: أحدهما مُحسّن ويستخدم نوى CUDA السريعة، في حين أن الآخر بسيط ولكنه يمكن تشغيله على أي جهاز! + +- يستفيد التنفيذ الحالي من نوى CUDA الأصلية: ما يعادل الاهتمام الفوري لـ مامبا يستضيفه ["mamba-ssm"](https://github.com/state-spaces/mamba) و ["causal_conv1d"](https://github.com/Dao-AILab/causal-conv1d) المستودعات. تأكد من تثبيتها إذا كان جهازك يدعمها! + +- المساهمات لجعل المسار البسيط أسرع موضع ترحيب 🤗 + +تمت المساهمة بهذا النموذج من قبل [ArthurZ](https://huggingface.co/ArthurZ). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/state-spaces/mamba). + +# الاستخدام + +### مثال بسيط على التوليد: + +```python +from transformers import MambaConfig, MambaForCausalLM, AutoTokenizer +import torch + +tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-130m-hf") +model = MambaForCausalLM.from_pretrained("state-spaces/mamba-130m-hf") +input_ids = tokenizer("Hey how are you doing?", return_tensors="pt")["input_ids"] + +out = model.generate(input_ids, max_new_tokens=10) +print(tokenizer.batch_decode(out)) +``` + +### Peft fine-tuning + +الإصدار البطيء غير مستقر للغاية للتدريب، ويحتاج الإصدار السريع إلى `float32`! + +```python +from datasets import load_dataset +from trl import SFTTrainer +from peft import LoraConfig +from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments +model_id = "state-spaces/mamba-130m-hf" +tokenizer = AutoTokenizer.from_pretrained(model_id) +model = AutoModelForCausalLM.from_pretrained(model_id) +dataset = load_dataset("Abirate/english_quotes", split="train") +training_args = TrainingArguments( + output_dir="./results", + num_train_epochs=3, + per_device_train_batch_size=4, + logging_dir='./logs', + logging_steps=10, + learning_rate=2e-3 +) +lora_config = LoraConfig( + r=8, + target_modules=["x_proj", "embeddings", "in_proj", "out_proj"], + task_type="CAUSAL_LM", + bias="none" +) +trainer = SFTTrainer( + model=model, + tokenizer=tokenizer, + args=training_args, + peft_config=lora_config, + train_dataset=dataset, + dataset_text_field="quote", +) +trainer.train() +``` + +## MambaConfig + +[[autodoc]] MambaConfig + +## MambaModel + +[[autodoc]] MambaModel + +- forword + +## MambaLMHeadModel + +[[autodoc]] MambaForCausalLM + +- forword \ No newline at end of file From 0203030f236c56dbe0b412a020fe42e0861e1c5e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:26:58 +0300 Subject: [PATCH 492/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/marian.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/marian.md | 188 +++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 docs/source/ar/model_doc/marian.md diff --git a/docs/source/ar/model_doc/marian.md b/docs/source/ar/model_doc/marian.md new file mode 100644 index 00000000000000..4842f4ea0e17bf --- /dev/null +++ b/docs/source/ar/model_doc/marian.md @@ -0,0 +1,188 @@ +# MarianMT + +## نظرة عامة +إطار عمل لنماذج الترجمة، باستخدام نفس النماذج مثل BART. يجب أن تكون الترجمات مشابهة، ولكنها ليست مطابقة للإخراج في مجموعة الاختبار المرتبطة بكل بطاقة نموذج. +تمت المساهمة بهذا النموذج من قبل [sshleifer](https://huggingface.co/sshleifer). + +## ملاحظات التنفيذ +- يبلغ حجم كل نموذج حوالي 298 ميجابايت على القرص، وهناك أكثر من 1000 نموذج. +- يمكن العثور على قائمة أزواج اللغات المدعومة [هنا](https://huggingface.co/Helsinki-NLP). +- تم تدريب النماذج في الأصل من قبل [Jörg Tiedemann](https://researchportal.helsinki.fi/en/persons/j%C3%B6rg-tiedemann) باستخدام مكتبة [Marian](https://marian-nmt.github.io/) C++، والتي تدعم التدريب والترجمة السريعين. +- جميع النماذج هي محولات مشفرة-فك تشفير مع 6 طبقات في كل مكون. يتم توثيق أداء كل نموذج +في بطاقة نموذج. +- لا يتم دعم 80 نموذجًا من نماذج Opus التي تتطلب معالجة BPE. +- رمز النمذجة هو نفسه [`BartForConditionalGeneration`] مع بعض التعديلات الطفيفة: +- المواضع الثابتة (ذات الشكل الجيبي) (`MarianConfig.static_position_embeddings=True`) +- لا يوجد layernorm_embedding (`MarianConfig.normalize_embedding=False`) +- يبدأ النموذج في التوليد باستخدام `pad_token_id` (الذي يحتوي على 0 كـ token_embedding) كبادئة (يستخدم Bart +``)، +- يمكن العثور على التعليمات البرمجية لتحويل النماذج بالجملة في `convert_marian_to_pytorch.py`. + +## التسمية +- تستخدم جميع أسماء النماذج التنسيق التالي: `Helsinki-NLP/opus-mt-{src}-{tgt}` +- رموز اللغة المستخدمة لتسمية النماذج غير متسقة. يمكن عادةً العثور على رموز مكونة من رقمين [هنا](https://developers.google.com/admin-sdk/directory/v1/languages)، بينما تتطلب الرموز المكونة من ثلاثة أرقام البحث عن "رمز اللغة {code}". +- الرموز التي تم تنسيقها مثل `es_AR` هي عادةً `code_{region}`. هذا باللغة الإسبانية من الأرجنتين. +- تم تحويل النماذج على مرحلتين. تستخدم أول 1000 نموذج رموز ISO-639-2 لتحديد اللغات، بينما تستخدم المجموعة الثانية مزيجًا من رموز ISO-639-5 وISO-639-2. + +## أمثلة +- نظرًا لأن نماذج Marian أصغر من العديد من نماذج الترجمة الأخرى المتوفرة في المكتبة، فيمكن أن تكون مفيدة لتجارب الضبط الدقيق واختبارات الدمج. +- [الضبط الدقيق على GPU](https://github.com/huggingface/transformers/blob/master/examples/legacy/seq2seq/train_distil_marian_enro.sh) + +## النماذج متعددة اللغات +- تستخدم جميع أسماء النماذج التنسيق التالي: `Helsinki-NLP/opus-mt-{src}-{tgt}`: +- إذا كان بإمكان النموذج إخراج عدة لغات، فيجب عليك تحديد رمز لغة عن طريق إضافة رمز اللغة المرغوب إلى `src_text`. +- يمكنك الاطلاع على رموز اللغة المدعومة للنموذج في بطاقة النموذج الخاصة به، ضمن المكونات المستهدفة، كما هو الحال في [opus-mt-en-roa](https://huggingface.co/Helsinki-NLP/opus-mt-en-roa). +- لاحظ أنه إذا كان النموذج متعدد اللغات فقط على جانب المصدر، مثل `Helsinki-NLP/opus-mt-roa-en`، فلن تكون هناك حاجة إلى رموز اللغة. +تتطلب النماذج متعددة اللغات الجديدة من [مستودع Tatoeba-Challenge](https://github.com/Helsinki-NLP/Tatoeba-Challenge) رموز لغة مكونة من 3 أحرف: + +```python +>>> from transformers import MarianMTModel, MarianTokenizer + +>>> src_text = [ +... ">>fra<< this is a sentence in english that we want to translate to french", +... ">>por<< This should go to portuguese", +... ">>esp<< And this to Spanish", +... ] + +>>> model_name = "Helsinki-NLP/opus-mt-en-roa" +>>> tokenizer = MarianTokenizer.from_pretrained(model_name) +>>> print(tokenizer.supported_language_codes) +['>>zlm_Latn<<', '>>mfe<<', '>>hat<<', '>>pap<<', '>>ast<<', '>>cat<<', '>>ind<<', '>>glg<<', '>>wln<<', '>>spa<<', '>>fra<<', '>>ron<<', '>>por<<', '>>ita<<', '>>oci<<', '>>arg<<', '>>min<<'] + +>>> model = MarianMTModel.from_pretrained(model_name) +>>> translated = model.generate(**tokenizer(src_text, return_tensors="pt", padding=True)) +>>> [tokenizer.decode(t, skip_special_tokens=True) for t in translated] +["c'est une phrase en anglais que nous voulons traduire en français", +'Isto deve ir para o português.', +'Y esto al español'] +``` + +فيما يلي رمز لعرض جميع النماذج المسبقة التدريب المتوفرة في المركز: + +```python +from huggingface_hub import list_models + +model_list = list_models() +org = "Helsinki-NLP" +model_ids = [x.modelId for x in model_list if x.modelId.startswith(org)] +suffix = [x.split("/")[1] for x in model_ids] +old_style_multi_models = [f"{org}/{s}" for s in suffix if s != s.lower()] +``` + +## النماذج متعددة اللغات بالأسلوب القديم +هذه هي النماذج متعددة اللغات بالأسلوب القديم المنقولة من مستودع OPUS-MT-Train: وأعضاء كل مجموعة لغات: + +```python no-style +['Helsinki-NLP/opus-mt-NORTH_EU-NORTH_EU', +'Helsinki-NLP/opus-mt-ROMANCE-en', +'Helsinki-NLP/opus-mt-SCANDINAVIA-SCANDINAVIA', +'Helsinki-NLP/opus-mt-de-ZH', +'Helsinki-NLP/opus-mt-en-CELTIC', +'Helsinki-NLP/opus-mt-en-ROMANCE', +'Helsinki-NLP/opus-mt-es-NORWAY', +'Helsinki-NLP/opus-mt-fi-NORWAY', +'Helsinki-NLP/opus-mt-fi-ZH', +'Helsinki-NLP/opus-mt-fi_nb_no_nn_ru_sv_en-SAMI', +'Helsinki-NLP/opus-mt-sv-NORWAY', +'Helsinki-NLP/opus-mt-sv-ZH'] +GROUP_MEMBERS = { + 'ZH': ['cmn', 'cn', 'yue', 'ze_zh', 'zh_cn', 'zh_CN', 'zh_HK', 'zh_tw', 'zh_TW', 'zh_yue', 'zhs', 'zht', 'zh'], + 'ROMANCE': ['fr', 'fr_BE', 'fr_CA', 'fr_FR', 'wa', 'frp', 'oc', 'ca', 'rm', 'lld', 'fur', 'lij', 'lmo', 'es', 'es_AR', 'es_CL', 'es_CO', 'es_CR', 'es_DO', 'es_EC', 'es_ES', 'es_GT', 'es_HN', 'es_MX', 'es_NI', 'es_PA', 'es_PE', 'es_PR', 'es_SV', 'es_UY', 'es_VE', 'pt', 'pt_br', 'pt_BR', 'pt_PT', 'gl', 'lad', 'an', 'mwl', 'it', 'it_IT', 'co', 'nap', 'scn', 'vec', 'sc', 'ro', 'la'], + 'NORTH_EU': ['de', 'nl', 'fy', 'af', 'da', 'fo', 'is', 'no', 'nb', 'nn', 'sv'], + 'SCANDINAVIA': ['da', 'fo', 'is', 'no', 'nb', 'nn', 'sv'], + 'SAMI': ['se', 'sma', 'smj', 'smn', 'sms'], + 'NORWAY': ['nb_NO', 'nb', 'nn_NO', 'nn', 'nog', 'no_nb', 'no'], + 'CELTIC': ['ga', 'cy', 'br', 'gd', 'kw', 'gv'] +} +``` + +مثال على ترجمة الإنجليزية إلى العديد من لغات الرومانسية، باستخدام رموز اللغة المكونة من حرفين بالأسلوب القديم + +```python +>>> from transformers import MarianMTModel, MarianTokenizer + +>>> src_text = [ +... ">>fr<< this is a sentence in english that we want to translate to french", +... ">>pt<< This should go to portuguese", +... ">>es<< And this to Spanish", +... ] + +>>> model_name = "Helsinki-NLP/opus-mt-en-ROMANCE" +>>> tokenizer = MarianTokenizer.from_pretrained(model_name) + +>>> model = MarianMTModel.from_pretrained(model_name) +>>> translated = model.generate(**tokenizer(src_text, return_tensors="pt", padding=True)) +>>> tgt_text = [tokenizer.decode(t, skip_special_tokens=True) for t in translated] +["c'est une phrase en anglais que nous voulons traduire en français", +'Isto deve ir para o português.', +'Y esto al español'] +``` + +## الموارد +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) +- [دليل مهمة النمذجة اللغوية السببية](../tasks/language_modeling) + +## MarianConfig + +[[autodoc]] MarianConfig + +## MarianTokenizer + +[[autodoc]] MarianTokenizer + +- build_inputs_with_special_tokens + + + + +## MarianModel + +[[autodoc]] MarianModel + +- forward + +## MarianMTModel + +[[autodoc]] MarianMTModel + +- forward + +## MarianForCausalLM + +[[autodoc]] MarianForCausalLM + +- forward + + + + +## TFMarianModel + +[[autodoc]] TFMarianModel + +- call + +## TFMarianMTModel + +[[autodoc]] TFMarianMTModel + +- call + + + + +## FlaxMarianModel + +[[autodoc]] FlaxMarianModel + +- __call__ + +## FlaxMarianMTModel + +[[autodoc]] FlaxMarianMTModel + +- __call__ + + + \ No newline at end of file From 0a31a5fa21f4c67c092034cbed5a48b51a1ad21d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:00 +0300 Subject: [PATCH 493/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/markuplm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/markuplm.md | 209 +++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 docs/source/ar/model_doc/markuplm.md diff --git a/docs/source/ar/model_doc/markuplm.md b/docs/source/ar/model_doc/markuplm.md new file mode 100644 index 00000000000000..17c6b6cf25b479 --- /dev/null +++ b/docs/source/ar/model_doc/markuplm.md @@ -0,0 +1,209 @@ +# MarkupLM + +## نظرة عامة + +اقتُرح نموذج MarkupLM في ورقة بحثية بعنوان "MarkupLM: Pre-training of Text and Markup Language for Visually-rich Document Understanding" من قبل Junlong Li وYiheng Xu وLei Cui وFuru Wei. ويعد نموذج MarkupLM نسخة مطورة من نموذج BERT، ولكنه يطبق على صفحات HTML بدلاً من وثائق النص الخام. ويضيف النموذج طبقات تضمين إضافية لتحسين الأداء، على غرار نموذج LayoutLM. + +يمكن استخدام النموذج في مهام مثل الإجابة على الأسئلة على صفحات الويب أو استخراج المعلومات من صفحات الويب. ويحقق نتائج متقدمة في معيارين مهمين: + +- WebSRC، وهو مجموعة بيانات للقراءة التركيبية القائمة على الويب (مشابهة لأسئلة SQuAD ولكن لصفحات الويب) +- SWDE، وهي مجموعة بيانات لاستخراج المعلومات من صفحات الويب (تعرّف الكيانات المسماة على صفحات الويب بشكل أساسي) + +وفيما يلي ملخص الورقة البحثية: + +*أحرزت الطرق متعددة الوسائط في مرحلة ما قبل التدريب باستخدام النص والتخطيط والصورة تقدماً ملحوظاً في فهم المستندات الغنية بالمعلومات المرئية (VrDU)، خاصة المستندات ذات التخطيط الثابت مثل صور المستندات الممسوحة ضوئياً. ومع ذلك، لا يزال هناك عدد كبير من المستندات الرقمية التي لا يكون فيها معلومات التخطيط ثابتة ويجب عرضها بشكل تفاعلي وديناميكي، مما يجعل من الصعب تطبيق طرق ما قبل التدريب القائمة على التخطيط. وفي هذه الورقة، نقترح نموذج MarkupLM لمهام فهم المستندات التي تستخدم لغات الترميز كعمود فقري، مثل المستندات القائمة على HTML/XML، حيث يتم التدريب المشترك للمعلومات النصية ومعلومات الترميز. وتظهر نتائج التجارب أن نموذج MarkupLM المُدرب مسبقًا يتفوق بشكل كبير على نماذج الخط الأساسي القوية الحالية في عدة مهام لفهم المستندات. وسيتم إتاحة النموذج المُدرب مسبقًا والشفرة البرمجية للجمهور.* + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). ويمكن العثور على الشفرة البرمجية الأصلية [هنا](https://github.com/microsoft/unilm/tree/master/markuplm). + +## نصائح الاستخدام + +- بالإضافة إلى `input_ids`، يتوقع [`~MarkupLMModel.forward`] إدخالين إضافيين، وهما `xpath_tags_seq` و`xpath_subs_seq`. وهما علامات XPATH والمخطوطات الفرعية لكل رمز في تسلسل الإدخال على التوالي. +- يمكن استخدام [`MarkupLMProcessor`] لإعداد جميع البيانات للنموذج. راجع [دليل الاستخدام](#usage-markuplmprocessor) للحصول على مزيد من المعلومات. + +drawing + + بنية نموذج MarkupLM. مأخوذة من الورقة البحثية الأصلية. + +## الاستخدام: MarkupLMProcessor + +أسهل طريقة لإعداد البيانات للنموذج هي استخدام [`MarkupLMProcessor`]، والذي يجمع بين مستخرج الميزات ([`MarkupLMFeatureExtractor`]) ومُرمز ([`MarkupLMTokenizer`] أو [`MarkupLMTokenizerFast`]) داخليًا. ويستخدم مستخرج الميزات لاستخراج جميع العقد ومسارات لغة الترميز الموحدة (XPath) من سلاسل HTML، والتي يتم توفيرها بعد ذلك إلى المرمز، والذي يحولها إلى إدخالات على مستوى الرموز للنموذج (`input_ids`، إلخ). لاحظ أنه يمكنك استخدام مستخرج الميزات والمرمز بشكل منفصل إذا كنت تريد التعامل مع إحدى المهمتين فقط. + +```python +from transformers import MarkupLMFeatureExtractor, MarkupLMTokenizerFast, MarkupLMProcessor + +feature_extractor = MarkupLMFeatureExtractor() +tokenizer = MarkupLMTokenizerFast.from_pretrained("microsoft/markuplm-base") +processor = MarkupLMProcessor(feature_extractor, tokenizer) +``` + +وباختصار، يمكنك توفير سلاسل HTML (وربما بيانات إضافية) إلى [`MarkupLMProcessor`]، وسينشئ الإدخالات التي يتوقعها النموذج. داخليًا، يستخدم المعالج أولاً [`MarkupLMFeatureExtractor`] للحصول على قائمة العقد ومسارات لغة الترميز الموحدة (XPath) المقابلة. ثم يتم توفير العقد ومسارات لغة الترميز الموحدة (XPath) إلى [`MarkupLMTokenizer`] أو [`MarkupLMTokenizerFast`]، والذي يحولها إلى `input_ids` على مستوى الرموز و`attention_mask` و`token_type_ids` و`xpath_subs_seq` و`xpath_tags_seq`. + +اختياريًا، يمكنك توفير تسميات العقد للمعالج، والتي يتم تحويلها إلى `labels` على مستوى الرموز. + +يستخدم [`MarkupLMFeatureExtractor`] مكتبة [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)، وهي مكتبة بايثون لاستخراج البيانات من ملفات HTML وXML، في الخلفية. لاحظ أنه يمكنك استخدام حل التوصيل الخاص بك وتوفير العقد ومسارات لغة الترميز الموحدة (XPath) بنفسك إلى [`MarkupLMTokenizer`] أو [`MarkupLMTokenizerFast`]. + +هناك خمس حالات استخدام مدعومة من قبل المعالج. فيما يلي قائمة بها جميعًا. لاحظ أن كل حالة من هذه الحالات الاستخدامية تعمل مع الإدخالات المجمعة وغير المجمعة (نوضحها لإدخالات غير مجمعة). + +**حالة الاستخدام 1: تصنيف صفحات الويب (التدريب والاستنتاج) + تصنيف الرموز (الاستنتاج)، parse_html = True** + +هذه هي الحالة الأكثر بساطة، والتي سيستخدم فيها المعالج مستخرج الميزات للحصول على جميع العقد ومسارات لغة الترميز الموحدة (XPath) من HTML. + +```python +>>> from transformers import MarkupLMProcessor + +>>> processor = MarkupLMProcessor.from_pretrained("microsoft/markuplm-base") + +>>> html_string = """ +... +... +... +... Hello world +... +... +...

WelcomeHere is my website.

+... +... """ + +>>> # لاحظ أنه يمكنك أيضًا توفير جميع معلمات المرمز هنا مثل الحشو أو الاقتصاص +>>> encoding = processor(html_string, return_tensors="pt") +>>> print(encoding.keys()) +dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'xpath_tags_seq', 'xpath_subs_seq']) +``` + +**حالة الاستخدام 2: تصنيف صفحات الويب (التدريب والاستنتاج) + تصنيف الرموز (الاستنتاج)، parse_html=False** + +في حالة الحصول مسبقًا على جميع العقد ومسارات لغة الترميز الموحدة (XPath)، لا تحتاج إلى مستخرج الميزات. في هذه الحالة، يجب توفير العقد ومسارات لغة الترميز الموحدة (XPath) المقابلة بنفسك للمعالج، والتأكد من تعيين `parse_html` إلى `False`. + +```python +>>> from transformers import MarkupLMProcessor + +>>> processor = MarkupLMProcessor.from_pretrained("microsoft/markuplm-base") +>>> processor.parse_html = False + +>>> nodes = ["hello", "world", "how", "are"] +>>> xpaths = ["/html/body/div/li[1]/div/span", "/html/body/div/li[1]/div/span", "html/body", "html/body/div"] +>>> encoding = processor(nodes=nodes, xpaths=xpaths, return_tensors="pt") +>>> print(encoding.keys()) +dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'xpath_tags_seq', 'xpath_subs_seq']) +``` + +**حالة الاستخدام 3: تصنيف الرموز (التدريب)، parse_html=False** + +لمهام تصنيف الرموز (مثل [SWDE](https://paperswithcode.com/dataset/swde))، يمكنك أيضًا توفير تسميات العقد المقابلة لتدريب النموذج. وسيحولها المعالج بعد ذلك إلى `labels` على مستوى الرموز. + +وبشكل افتراضي، سيقوم بتسمية أول رمز من رموز الكلمة فقط، وتسمية رموز الكلمات المتبقية بـ -100، وهو `ignore_index` في وظيفة PyTorch's CrossEntropyLoss. إذا كنت تريد تسمية جميع رموز الكلمات، فيمكنك تهيئة المرمز مع تعيين `only_label_first_subword` إلى `False`. + +```python +>>> from transformers import MarkupLMProcessor + +>>> processor = MarkupLMProcessor.from_pretrained("microsoft/markuplm-base") +>>> processor.parse_html = False + +>>> nodes = ["hello", "world", "how", "are"] +>>> xpaths = ["/html/body/div/li[1]/div/span", "/html/body/div/li[1]/div/span", "html/body", "html/body/div"] +>>> node_labels = [1, 2, 2, 1] +>>> encoding = processor(nodes=nodes, xpaths=xpaths, node_labels=node_labels, return_tensors="pt") +>>> print(encoding.keys()) +dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'xpath_tags_seq', 'xpath_subs_seq', 'labels']) +``` + +**حالة الاستخدام 4: الإجابة على أسئلة صفحات الويب (الاستنتاج)، parse_html=True** + +لمهام الإجابة على الأسئلة على صفحات الويب، يمكنك توفير سؤال للمعالج. وبشكل افتراضي، سيستخدم المعالج مستخرج الميزات للحصول على جميع العقد ومسارات لغة الترميز الموحدة (XPath)، وإنشاء رموز [CLS] ورموز الأسئلة [SEP] ورموز الكلمات [SEP]. + +```python +>>> from transformers import MarkupLMProcessor + +>>> processor = MarkupLMProcessor.from_pretrained("microsoft/markuplm-base") + +>>> html_string = """ +... +... +... +... Hello world +... +... +...

Welcome

+...

My name is Niels.

+... +... """ + +>>> question = "What's his name?" +>>> encoding = processor(html_string, questions=question, return_tensors="pt") +>>> print(encoding.keys()) +dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'xpath_tags_seq', 'xpath_subs_seq']) +``` + +**حالة الاستخدام 5: الإجابة على أسئلة صفحات الويب (الاستنتاج)، parse_html=False** + +لمهام الإجابة على الأسئلة (مثل WebSRC)، يمكنك توفير سؤال للمعالج. إذا قمت باستخراج جميع العقد ومسارات لغة الترميز الموحدة (XPath) بنفسك، فيمكنك توفيرها مباشرة إلى المعالج. تأكد من تعيين `parse_html` إلى `False`. + +```python +>>> from transformers import MarkupLMProcessor + +>>> processor = MarkupLMProcessor.from_pretrained("microsoft/markuplm-base") +>>> processor.parse_html = False + +>>> nodes = ["hello", "world", "how", "are"] +>>> xpaths = ["/html/body/div/li[1]/div/span", "/html/body/div/li[1]/div/span", "html/body", "html/body/div"] +>>> question = "What's his name?" +>>> encoding = processor(nodes=nodes, xpaths=xpaths, questions=question, return_tensors="pt") +>>> print(encoding.keys()) +dict_keys(['input_ids', 'token_type_ids', 'attention_mask', 'xpath_tags_seq', 'xpath_subs_seq']) +``` + +## الموارد + +- [دفاتر الملاحظات التوضيحية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/MarkupLM) +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) + +## MarkupLMConfig + +[[autodoc]] MarkupLMConfig +- all + +## MarkupLMFeatureExtractor + +[[autodoc]] MarkupLMFeatureExtractor +- __call__ + +## MarkupLMTokenizer + +[[autodoc]] MarkupLMTokenizer +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## MarkupLMTokenizerFast + +[[autodoc]] MarkupLMTokenizerFast +- all + +## MarkupLMProcessor + +[[autodoc]] MarkupLMProcessor +- __call__ + +## MarkupLMModel + +[[autodoc]] MarkupLMModel +- forward + +## MarkupLMForSequenceClassification + +[[autodoc]] MarkupLMForSequenceClassification +- forward + +## MarkupLMForTokenClassification + +[[autodoc]] MarkupLMForTokenClassification +- forward + +## MarkupLMForQuestionAnswering + +[[autodoc]] MarkupLMForQuestionAnswering +- forward \ No newline at end of file From a54d32c532e7bac22129c3a2b6b3dd2d523673e1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:01 +0300 Subject: [PATCH 494/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mask2former.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mask2former.md | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/source/ar/model_doc/mask2former.md diff --git a/docs/source/ar/model_doc/mask2former.md b/docs/source/ar/model_doc/mask2former.md new file mode 100644 index 00000000000000..b819d87a0dee86 --- /dev/null +++ b/docs/source/ar/model_doc/mask2former.md @@ -0,0 +1,69 @@ +# Mask2Former + +## نظرة عامة +اقترح نموذج Mask2Former في [Masked-attention Mask Transformer for Universal Image Segmentation](https://arxiv.org/abs/2112.01527) بواسطة Bowen Cheng, Ishan Misra, Alexander G. Schwing, Alexander Kirillov, Rohit Girdhar. Mask2Former هو إطار موحد لقطاعات panoptic و instance و semantic ويتميز بتحسينات كبيرة في الأداء والكفاءة على [MaskFormer](maskformer). + +مقدمة الورقة هي التالية: + +*يقوم تجميع الصور بتجزئة البكسلات ذات الدلالات المختلفة، على سبيل المثال، فئة أو عضوية مثيل. كل خيار +تعرف الدلالات مهمة. في حين أن دلاليات كل مهمة تختلف فقط، يركز البحث الحالي على تصميم هندسات متخصصة لكل مهمة. نقدم Masked-attention Mask Transformer (Mask2Former)، وهو تصميم جديد قادر على معالجة أي مهمة تجزئة صور (panoptic أو instance أو semantic). تشمل مكوناته الرئيسية الانتباه المقنع، والذي يستخرج ميزات محلية عن طريق تقييد الانتباه المتقاطع داخل مناطق القناع المتوقعة. بالإضافة إلى تقليل جهد البحث ثلاث مرات على الأقل، فإنه يتفوق على أفضل العمارات المتخصصة بهامش كبير في أربع مجموعات بيانات شائعة. والأهم من ذلك، أن Mask2Former يحدد حالة جديدة لتقسيم الصور الفائقة (57.8 PQ على COCO) وتجزئة مثيلات (50.1 AP على COCO) وتجزئة دلالية (57.7 mIoU على ADE20K).* + +drawing + + هندسة Mask2Former. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [Shivalika Singh](https://huggingface.co/shivi) و [Alara Dirik](https://huggingface.co/adirik). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/Mask2Former). + +## نصائح الاستخدام + +- يستخدم Mask2Former نفس خطوات المعالجة المسبقة والمعالجة اللاحقة مثل [MaskFormer](maskformer). استخدم [`Mask2FormerImageProcessor`] أو [`AutoImageProcessor`] لإعداد الصور والأهداف الاختيارية للنموذج. + +- للحصول على التجزئة النهائية، اعتمادًا على المهمة، يمكنك استدعاء [`~Mask2FormerImageProcessor.post_process_semantic_segmentation`] أو [`~Mask2FormerImageProcessor.post_process_instance_segmentation`] أو [`~Mask2FormerImageProcessor.post_process_panoptic_segmentation`]. يمكن حل المهام الثلاث جميعها باستخدام إخراج [`Mask2FormerForUniversalSegmentation`]، ويقبل تجزئة panoptic حجة اختيارية `label_ids_to_fuse` لدمج مثيلات الكائن المستهدف (مثل السماء) معًا. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء في استخدام Mask2Former. + +- يمكن العثور على دفاتر الملاحظات التوضيحية المتعلقة بالاستدلال + ضبط Mask2Former على بيانات مخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Mask2Former). + +- يمكن العثور على البرامج النصية لضبط [`Mask2Former`] باستخدام [`Trainer`] أو [Accelerate](https://huggingface.co/docs/accelerate/index) [هنا](https://github.com/huggingface/transformers/tree/main/examples/pytorch/instance-segmentation). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فلا تتردد في فتح طلب سحب وسنراجعه. + +يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + +## Mask2FormerConfig + +[[autodoc]] Mask2FormerConfig + +## مخرجات خاصة بـ MaskFormer + +[[autodoc]] models.mask2former.modeling_mask2former.Mask2FormerModelOutput + +[[autodoc]] models.mask2former.modeling_mask2former.Mask2FormerForUniversalSegmentationOutput + +## Mask2FormerModel + +[[autodoc]] Mask2FormerModel + +- forword + +## Mask2FormerForUniversalSegmentation + +[[autodoc]] Mask2FormerForUniversalSegmentation + +- forword + +## Mask2FormerImageProcessor + +[[autodoc]] Mask2FormerImageProcessor + +- preprocess + +- encode_inputs + +- post_process_semantic_segmentation + +- post_process_instance_segmentation + +- post_process_panoptic_segmentation \ No newline at end of file From 86a33144c3f18be4ce786d4e91010d15cf6ec273 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:03 +0300 Subject: [PATCH 495/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/maskformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/maskformer.md | 75 ++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/source/ar/model_doc/maskformer.md diff --git a/docs/source/ar/model_doc/maskformer.md b/docs/source/ar/model_doc/maskformer.md new file mode 100644 index 00000000000000..7d40a39db3c2da --- /dev/null +++ b/docs/source/ar/model_doc/maskformer.md @@ -0,0 +1,75 @@ +# MaskFormer + +> هذا نموذج تم تقديمه مؤخرًا، لذلك لم يتم اختبار واجهة برمجة التطبيقات الخاصة به بشكل مكثف. قد تكون هناك بعض الأخطاء أو التغييرات الطفيفة التي قد تسبب كسر التعليمات البرمجية في المستقبل. إذا لاحظت شيئًا غريبًا، فقم بإنشاء [قضية على GitHub](https://github.com/huggingface/transformers/issues/new?assignees=&labels=&template=bug-report.md&title). + +## نظرة عامة + +تم اقتراح نموذج MaskFormer في ورقة "Per-Pixel Classification is Not All You Need for Semantic Segmentation" بواسطة Bowen Cheng و Alexander G. Schwing و Alexander Kirillov. يعالج MaskFormer التجزئة الدلالية باستخدام نموذج تصنيف الأقنعة بدلاً من إجراء التصنيف الكلاسيكي على مستوى البكسل. + +ملخص الورقة هو كما يلي: + +> "تقوم الأساليب الحديثة بشكل نموذجي بصياغة التجزئة الدلالية كمهمة تصنيف لكل بكسل، في حين يتم التعامل مع التجزئة على مستوى المثيل باستخدام تصنيف الأقنعة كبديل. رؤيتنا الأساسية هي: تصنيف الأقنعة عام بما يكفي لحل مهام التجزئة الدلالية ومستوى المثيل بطريقة موحدة باستخدام نفس النموذج والخسارة وإجراء التدريب بالضبط. بناءً على هذه الملاحظة، نقترح MaskFormer، وهو نموذج تصنيف أقنعة بسيط يتوقع مجموعة من الأقنعة الثنائية، وكل منها مرتبط بتوقع تسمية فئة عالمية واحدة. بشكل عام، تبسط طريقة التصنيف القائمة على الأقنعة المقترحة مشهد الأساليب الفعالة لمهام التجزئة الدلالية والكلية، وتحقق نتائج تجريبية ممتازة. على وجه الخصوص، نلاحظ أن MaskFormer يتفوق على خطوط الأساس لتصنيف البكسل عندما يكون عدد الفئات كبيرًا. تتفوق طريقة التصنيف المستندة إلى الأقنعة الخاصة بنا على أحدث نماذج التجزئة الدلالية (55.6 mIoU على ADE20K) والتجزئة الكلية (52.7 PQ على COCO) على حد سواء." + +يوضح الشكل أدناه بنية MaskFormer. مأخوذة من [الورقة الأصلية](https://arxiv.org/abs/2107.06278). + +![بنية MaskFormer](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/maskformer_architecture.png) + +تمت المساهمة بهذا النموذج من قبل [francesco](https://huggingface.co/francesco). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/MaskFormer). + +## نصائح الاستخدام + +- إن فك تشفير المحول في MaskFormer مطابق لفك تشفير [DETR](detr). أثناء التدريب، وجد مؤلفو DETR أنه من المفيد استخدام خسائر مساعدة في فك التشفير، خاصة لمساعدة النموذج على إخراج العدد الصحيح من الكائنات لكل فئة. إذا قمت بتعيين معلمة `use_auxiliary_loss` من [`MaskFormerConfig`] إلى `True`، فسيتم إضافة شبكات عصبية أمامية للتنبؤ وخسائر الهنغاري بعد كل طبقة فك تشفير (مع مشاركة FFNs للبارامترات). + +- إذا كنت تريد تدريب النموذج في بيئة موزعة عبر عدة عقد، فيجب عليك تحديث وظيفة `get_num_masks` داخل فئة `MaskFormerLoss` من `modeling_maskformer.py`. عند التدريب على عدة عقد، يجب تعيين هذا إلى متوسط عدد الأقنعة المستهدفة عبر جميع العقد، كما هو موضح في التنفيذ الأصلي [هنا](https://github.com/facebookresearch/MaskFormer/blob/da3e60d85fdeedcb31476b5edd7d328826ce56cc/mask_former/modeling/criterion.py#L169). + +- يمكنك استخدام [`MaskFormerImageProcessor`] لتحضير الصور للنموذج والأهداف الاختيارية للنموذج. + +- للحصول على التجزئة النهائية، اعتمادًا على المهمة، يمكنك استدعاء [`~MaskFormerImageProcessor.post_process_semantic_segmentation`] أو [`~MaskFormerImageProcessor.post_process_panoptic_segmentation`]. يمكن حل كلتا المهمتين باستخدام إخراج [`MaskFormerForInstanceSegmentation`]، ويقبل التجزئة الكلية حجة `label_ids_to_fuse` الاختيارية لدمج مثيلات الكائن المستهدف (مثل السماء) معًا. + +## الموارد + +- يمكن العثور على جميع دفاتر الملاحظات التي توضح الاستدلال وكذلك الضبط الدقيق على البيانات المخصصة باستخدام MaskFormer [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/MaskFormer). + +- يمكن العثور على البرامج النصية للضبط الدقيق لـ [`MaskFormer`] باستخدام [`Trainer`] أو [Accelerate](https://huggingface.co/docs/accelerate/index) [هنا](https://github.com/huggingface/transformers/tree/main/examples/pytorch/instance-segmentation). + +## مخرجات MaskFormer المحددة + +[[autodoc]] models.maskformer.modeling_maskformer.MaskFormerModelOutput + +[[autodoc]] models.maskformer.modeling_maskformer.MaskFormerForInstanceSegmentationOutput + +## MaskFormerConfig + +[[autodoc]] MaskFormerConfig + +## MaskFormerImageProcessor + +[[autodoc]] MaskFormerImageProcessor + +- preprocess +- encode_inputs +- post_process_semantic_segmentation +- post_process_instance_segmentation +- post_process_panoptic_segmentation + +## MaskFormerFeatureExtractor + +[[autodoc]] MaskFormerFeatureExtractor + +- __call__ +- encode_inputs +- post_process_semantic_segmentation +- post_process_instance_segmentation +- post_process_panoptic_segmentation + +## MaskFormerModel + +[[autodoc]] MaskFormerModel + +- forward + +## MaskFormerForInstanceSegmentation + +[[autodoc]] MaskFormerForInstanceSegmentation + +- forward \ No newline at end of file From 3df92f77b81c874ac133e193e8712a7fdc359fa2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:05 +0300 Subject: [PATCH 496/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/matcha.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/matcha.md | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/source/ar/model_doc/matcha.md diff --git a/docs/source/ar/model_doc/matcha.md b/docs/source/ar/model_doc/matcha.md new file mode 100644 index 00000000000000..53511e373aa46c --- /dev/null +++ b/docs/source/ar/model_doc/matcha.md @@ -0,0 +1,62 @@ +# MatCha + +## نظرة عامة + +اقتُرح MatCha في الورقة البحثية [MatCha: Enhancing Visual Language Pretraining with Math Reasoning and Chart Derendering](https://arxiv.org/abs/2212.09662)، من تأليف Fangyu Liu, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Yasemin Altun, Nigel Collier, Julian Martin Eisenschlos. + +يوضح ملخص الورقة البحثية ما يلي: + +> تنتشر البيانات المرئية اللغوية مثل الرسوم البيانية والمخططات والرسوم المعلوماتية انتشاراً واسعاً في العالم البشري. ومع ذلك، لا تؤدي النماذج اللغوية المرئية المتقدمة حالياً أداءً جيداً على هذه البيانات. نقترح MatCha (التدريب المسبق على الاستدلال الرياضي وإلغاء عرض المخططات) لتعزيز قدرات النماذج اللغوية المرئية في النمذجة المشتركة للمخططات/الرسوم البيانية والبيانات اللغوية. وعلى وجه التحديد، نقترح عدة مهام للتدريب المسبق تغطي تفكيك المخطط والاستدلال العددي، والتي تعد قدرات رئيسية في النمذجة اللغوية المرئية. ونقوم بالتدريب المسبق لـ MatCha انطلاقاً من Pix2Struct، وهو نموذج لغوي مرئي للصور النصية تم اقتراحه مؤخراً. وعلى المعايير القياسية مثل PlotQA وChartQA، يتفوق نموذج MatCha على الطرق الحالية بأداء أفضل يصل إلى 20%. كما نقوم بفحص مدى جودة نقل التدريب المسبق لـ MatCha إلى مجالات مثل لقطات الشاشة، ومخططات الكتب المدرسية، ورسوم الوثائق، ونلاحظ تحسناً عاماً، مما يؤكد فائدة التدريب المسبق لـ MatCha على المهام اللغوية المرئية الأوسع نطاقاً. + +## وصف النموذج + +MatCha هو نموذج تم تدريبه باستخدام بنية `Pix2Struct`. يمكنك العثور على مزيد من المعلومات حول `Pix2Struct` في [وثائق Pix2Struct](https://huggingface.co/docs/transformers/main/en/model_doc/pix2struct). + +MatCha هو مجموعة فرعية من الأسئلة البصرية والإجابة عليها في بنية `Pix2Struct`. فهو يقوم برسم السؤال المدخل على الصورة والتنبؤ بالإجابة. + +## الاستخدام + +تتوفر حالياً 6 نقاط تفتيش لـ MatCha: + +- `google/matcha`: نموذج MatCha الأساسي، المستخدم لتعديل نموذج MatCha لمهام تالية +- `google/matcha-chartqa`: نموذج MatCha المعدل لبيانات ChartQA. يمكن استخدامه للإجابة على الأسئلة حول المخططات. +- `google/matcha-plotqa-v1`: نموذج MatCha المعدل لبيانات PlotQA. يمكن استخدامه للإجابة على الأسئلة حول الرسوم البيانية. +- `google/matcha-plotqa-v2`: نموذج MatCha المعدل لبيانات PlotQA. يمكن استخدامه للإجابة على الأسئلة حول الرسوم البيانية. +- `google/matcha-chart2text-statista`: نموذج MatCha المعدل لمجموعة بيانات Statista. +- `google/matcha-chart2text-pew`: نموذج MatCha المعدل لمجموعة بيانات Pew. + +تكون النماذج المعدلة على `chart2text-pew` و`chart2text-statista` أكثر ملاءمة للتلخيص، في حين أن النماذج المعدلة على `plotqa` و`chartqa` تكون أكثر ملاءمة للإجابة على الأسئلة. + +يمكنك استخدام هذه النماذج على النحو التالي (مثال على مجموعة بيانات ChatQA): + +```python +from transformers import AutoProcessor, Pix2StructForConditionalGeneration +import requests +from PIL import Image + +model = Pix2StructForConditionalGeneration.from_pretrained("google/matcha-chartqa").to(0) +processor = AutoProcessor.from_pretrained("google/matcha-chartqa") +url = "https://raw.githubusercontent.com/vis-nlp/ChartQA/main/ChartQA%20Dataset/val/png/20294671002019.png" +image = Image.open(requests.get(url, stream=True).raw) + +inputs = processor(images=image, text="Is the sum of all 4 places greater than Laos?", return_tensors="pt").to(0) +predictions = model.generate(**inputs, max_new_tokens=512) +print(processor.decode(predictions[0], skip_special_tokens=True)) +``` + +## الضبط الدقيق + +لضبط نموذج MatCha بدقة، راجع دفتر الملاحظات [fine-tuning notebook](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb). بالنسبة لنماذج `Pix2Struct`، وجدنا أن ضبط النموذج بدقة باستخدام Adafactor وجدول التعلم بمعدل ثابت يؤدي إلى تقارب أسرع: + +```python +from transformers.optimization import Adafactor, get_cosine_schedule_with_warmup + +optimizer = Adafactor(self.parameters(), scale_parameter=False, relative_step=False, lr=0.01, weight_decay=1e-05) +scheduler = get_cosine_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=40000) +``` + + + +MatCha هو نموذج تم تدريبه باستخدام بنية `Pix2Struct`. يمكنك العثور على مزيد من المعلومات حول `Pix2Struct` في [وثائق Pix2Struct](https://huggingface.co/docs/transformers/main/en/model_doc/pix2struct). + + \ No newline at end of file From e959573de358ed0fb53f4983fb2a78e53b4af5c6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:07 +0300 Subject: [PATCH 497/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mbart.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mbart.md | 212 ++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 docs/source/ar/model_doc/mbart.md diff --git a/docs/source/ar/model_doc/mbart.md b/docs/source/ar/model_doc/mbart.md new file mode 100644 index 00000000000000..ffc87fe87bc50b --- /dev/null +++ b/docs/source/ar/model_doc/mbart.md @@ -0,0 +1,212 @@ +# MBart و MBart-50 + +## نظرة عامة على MBart + +تم تقديم نموذج MBart في [التدريب الأولي متعدد اللغات لإزالة التشويش من أجل الترجمة الآلية العصبية](https://arxiv.org/abs/2001.08210) بواسطة Yinhan Liu و Jiatao Gu و Naman Goyal و Xian Li و Sergey Edunov Marjan Ghazvininejad و Mike Lewis و Luke Zettlemoyer. + +وفقًا للملخص، فإن MBART هو برنامج ترميز وإلغاء ترميز تسلسلي إلى تسلسلي تم تدريبه مسبقًا على نصوص أحادية اللغة واسعة النطاق بالعديد من اللغات باستخدام هدف BART. يعد mBART إحدى أولى الطرق لتدريب نموذج تسلسلي كامل عن طريق إزالة تشويش النصوص الكاملة بعدة لغات، في حين ركزت الأساليب السابقة فقط على الترميز أو فك الترميز أو إعادة بناء أجزاء من النص. + +تمت المساهمة بهذا النموذج من قبل [valhalla](https://huggingface.co/valhalla). يمكن العثور على كود المؤلفين [هنا](https://github.com/pytorch/fairseq/tree/master/examples/mbart) + +### تدريب MBart + +MBart هو نموذج ترميز وفك ترميز متعدد اللغات (تسلسلي إلى تسلسلي) مصمم في المقام الأول لمهمة الترجمة. نظرًا لأن النموذج متعدد اللغات، فإنه يتوقع التسلسلات بتنسيق مختلف. تتم إضافة رمز معرف اللغة الخاص في كل من النص المصدر والنص المستهدف. يتكون تنسيق النص المصدر من `X [eos, src_lang_code]` حيث `X` هو نص المصدر. يتكون تنسيق النص المستهدف من `[tgt_lang_code] X [eos]`. لا يتم استخدام `bos` مطلقًا. + +سيقوم [`~MBartTokenizer.__call__`] العادي بترميز تنسيق النص المصدر الذي تم تمريره كحجة أولى أو باستخدام كلمة `text` الرئيسية، وتنسيق النص المستهدف الذي تم تمريره باستخدام كلمة `text_label` الرئيسية. + +- التدريب الخاضع للإشراف + +```python +>>> from transformers import MBartForConditionalGeneration, MBartTokenizer + +>>> tokenizer = MBartTokenizer.from_pretrained("facebook/mbart-large-en-ro", src_lang="en_XX", tgt_lang="ro_RO") +>>> example_english_phrase = "UN Chief Says There Is No Military Solution in Syria" +>>> expected_translation_romanian = "Şeful ONU declară că nu există o soluţie militară în Siria" + +>>> inputs = tokenizer(example_english_phrase, text_target=expected_translation_romanian, return_tensors="pt") + +>>> model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-en-ro") +>>> # forward pass +>>> model(**inputs) +``` + +- التوليد Generate +عند إنشاء النص المستهدف، قم بتعيين `decoder_start_token_id` إلى معرف اللغة المستهدفة. يوضح المثال التالي كيفية ترجمة اللغة الإنجليزية إلى الرومانية باستخدام نموذج *facebook/mbart-large-en-ro*. + +```python +>>> from transformers import MBartForConditionalGeneration, MBartTokenizer + +>>> tokenizer = MBartTokenizer.from_pretrained("facebook/mbart-large-en-ro", src_lang="en_XX") +>>> article = "UN Chief Says There Is No Military Solution in Syria" +>>> inputs = tokenizer(article, return_tensors="pt") +>>> translated_tokens = model.generate(**inputs, decoder_start_token_id=tokenizer.lang_code_to_id["ro_RO"]) +>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] +"Şeful ONU declară că nu există o soluţie militară în Siria" +``` + +## نظرة عامة على MBart-50 + +تم تقديم MBart-50 في ورقة [الترجمة متعددة اللغات باستخدام التدريب الأولي متعدد اللغات القابل للتوسيع والتدريب الدقيق](https://arxiv.org/abs/2008.00401) بواسطة Yuqing Tang و Chau Tran و Xian Li و Peng-Jen Chen و Naman Goyal و Vishrav Chaudhary و Jiatao Gu و Angela Fan. تم إنشاء MBart-50 باستخدام نقطة تفتيش *mbart-large-cc25* الأصلية عن طريق تمديد طبقاتها المضمنة مع متجهات تم تهيئتها بشكل عشوائي لمجموعة إضافية من 25 رمزًا للغة ثم التدريب المسبق على 50 لغة. + +وفقًا للملخص + +*يمكن إنشاء نماذج الترجمة متعددة اللغات من خلال التدريب الدقيق متعدد اللغات. بدلاً من التدريب الدقيق في اتجاه واحد، يتم تدريب نموذج مسبق التدريب على العديد من الاتجاهات في نفس الوقت. فهو يثبت أن النماذج المسبقة التدريب يمكن توسيعها لتشمل لغات إضافية دون فقدان الأداء. يحسن التدريب الدقيق متعدد اللغات 1 BLEU في المتوسط فوق أقوى خطوط الأساس (سواء متعددة اللغات من الصفر أو التدريب الدقيق ثنائي اللغة) مع تحسين 9.3 BLEU في المتوسط فوق خطوط الأساس ثنائية اللغة من الصفر.* + +### تدريب MBart-50 + +يختلف تنسيق النص لـ MBart-50 اختلافًا طفيفًا عن mBART. بالنسبة لـ MBart-50، يتم استخدام رمز معرف اللغة كبادئة لكل من النص المصدر والنص المستهدف أي أن تنسيق النص هو `[lang_code] X [eos]`، حيث `lang_code` هو معرف اللغة المصدر لنص المصدر ومعرف اللغة المستهدف للنص المستهدف، مع كون `X` هو نص المصدر أو النص المستهدف على التوالي. + +لدى MBart-50 محول رموز خاص به [`MBart50Tokenizer`]. + +- التدريب الخاضع للإشراف + +```python +from transformers import MBartForConditionalGeneration, MBart50TokenizerFast + +model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-50") +tokenizer = MBart50TokenizerFast.from_pretrained("facebook/mbart-large-50", src_lang="en_XX", tgt_lang="ro_RO") + +src_text = " UN Chief Says There Is No Military Solution in Syria" +tgt_text = "Şeful ONU declară că nu există o soluţie militară în Siria" + +model_inputs = tokenizer(src_text, text_target=tgt_text, return_tensors="pt") + +model(**model_inputs) # forward pass +``` + +- التوليد + +لإنشاء نموذج الترجمة متعدد اللغات mBART-50، يتم استخدام `eos_token_id` كـ `decoder_start_token_id` ويتم فرض معرف اللغة المستهدفة كأول رمز يتم إنشاؤه. لفرض معرف اللغة المستهدفة كأول رمز يتم إنشاؤه، قم بتمرير معلمة *forced_bos_token_id* إلى طريقة *generate*. يوضح المثال التالي كيفية الترجمة بين الهندية والفرنسية والعربية والإنجليزية باستخدام نقطة تفتيش *facebook/mbart-50-large-many-to-many*. + +```python +from transformers import MBartForConditionalGeneration, MBart50TokenizerFast + +article_hi = "संयुक्त राष्ट्ر के प्रमुख का कहना है कि सीरिया में कोई सैन्य समाधान नहीं है" +article_ar = "الأمين العام للأمم المتحدة يقول إنه لا يوجد حل عسكري في سوريا." + +model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-50-many-to-many-mmt") +tokenizer = MBart50TokenizerFast.from_pretrained("facebook/mbart-large-50-many-to-many-mmt") + +# translate Hindi to French +tokenizer.src_lang = "hi_IN" +encoded_hi = tokenizer(article_hi, return_tensors="pt") +generated_tokens = model.generate(**encoded_hi, forced_bos_token_id=tokenizer.lang_code_to_id["fr_XX"]) +tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +# => "Le chef de l 'ONU affirme qu 'il n 'y a pas de solution militaire en Syrie." + +# translate Arabic to English +tokenizer.src_lang = "ar_AR" +encoded_ar = tokenizer(article_ar, return_tensors="pt") +generated_tokens = model.generate(**encoded_ar, forced_bos_token_id=tokenizer.lang_code_to_id["en_XX"]) +tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) +# => "The Secretary-General of the United Nations says there is no military solution in Syria." +``` + +## موارد التوثيق + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة تلخيص](../tasks/summarization) + +## MBartConfig + +[[autodoc]] MBartConfig + +## MBartTokenizer + +[[autodoc]] MBartTokenizer + +- build_inputs_with_special_tokens + +## MBartTokenizerFast + +[[autodoc]] MBartTokenizerFast + +## MBart50Tokenizer + +[[autodoc]] MBart50Tokenizer + +## MBart50TokenizerFast + +[[autodoc]] MBart50TokenizerFast + + + + +## MBartModel + +[[autodoc]] MBartModel + +## MBartForConditionalGeneration + +[[autodoc]] MBartForConditionalGeneration + +## MBartForQuestionAnswering + +[[autodoc]] MBartForQuestionAnswering + +## MBartForSequenceClassification + +[[autodoc]] MBartForSequenceClassification + +## MBartForCausalLM + +[[autodoc]] MBartForCausalLM + +- forward + + + + +## TFMBartModel + +[[autodoc]] TFMBartModel + +- call + +## TFMBartForConditionalGeneration + +[[autodoc]] TFMBartForConditionalGeneration + +- call + + + + +## FlaxMBartModel + +[[autodoc]] FlaxMBartModel + +- __call__ +- encode +- decode + +## FlaxMBartForConditionalGeneration + +[[autodoc]] FlaxMBartForConditionalGeneration + +- __call__ +- encode +- decode + +## FlaxMBartForSequenceClassification + +[[autodoc]] FlaxMBartForSequenceClassification + +- __call__ +- encode +- decode + +## FlaxMBartForQuestionAnswering + +[[autodoc]] FlaxMBartForQuestionAnswering + +- __call__ +- encode +- decode + + + \ No newline at end of file From 11d8ea4697d464812561802fd290290d4e3196c5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:09 +0300 Subject: [PATCH 498/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mctct.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mctct.md | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 docs/source/ar/model_doc/mctct.md diff --git a/docs/source/ar/model_doc/mctct.md b/docs/source/ar/model_doc/mctct.md new file mode 100644 index 00000000000000..35bd67ff7b5c37 --- /dev/null +++ b/docs/source/ar/model_doc/mctct.md @@ -0,0 +1,57 @@ +# M-CTC-T + + + +This model is in maintenance mode only, so we won't accept any new PRs changing its code. If you run into any issues running this model, please reinstall the last version that supported this model: v4.30.0. You can do so by running the following command: `pip install -U transformers==4.30.0`. + + + +## نظرة عامة + +اقترح نموذج M-CTC-T في [Pseudo-Labeling For Massively Multilingual Speech Recognition](https://arxiv.org/abs/2111.00161) بواسطة Loren Lugosch وTatiana Likhomanenko وGabriel Synnaeve وRonan Collobert. النموذج عبارة عن محول Encoder بحجم 1 بليون معلمة، مع رأس CTC فوق 8065 تسمية حرفية ورأس تعريف لغة فوق 60 تسمية معرف لغة. تم تدريبه على Common Voice (الإصدار 6.1، إصدار ديسمبر 2020) وVoxPopuli. بعد التدريب على Common Voice وVoxPopuli، يتم تدريب النموذج على Common Voice فقط. التسميات هي نصوص حرفية غير معيارية (لم تتم إزالة علامات الترقيم والتهجئة). يأخذ النموذج كإدخال ميزات Mel filterbank من إشارة صوتية بتردد 16 كيلو هرتز. + +الملخص من الورقة هو كما يلي: + +> "أصبح التعلم شبه المُشرف من خلال وضع العلامات الوهمية ركنًا أساسيًا في أنظمة التعرف على الكلام أحادية اللغة المتقدمة. في هذا العمل، نقوم بتوسيع وضع العلامات الوهمية للتعرف على الكلام متعدد اللغات بشكل كبير مع 60 لغة. نقترح وصفة وضع علامات وهمية بسيطة تعمل بشكل جيد حتى مع اللغات منخفضة الموارد: تدريب نموذج متعدد اللغات مُشرف، وضبط دقته باستخدام التعلم شبه المُشرف على لغة مستهدفة، وإنشاء علامات وهمية لتلك اللغة، وتدريب نموذج نهائي باستخدام العلامات الوهمية لجميع اللغات، إما من الصفر أو عن طريق الضبط الدقيق. تُظهر التجارب على مجموعات بيانات Common Voice المُعنونة وVoxPopuli غير المُعنونة أن وصفتنا يمكن أن تنتج نموذجًا بأداء أفضل للعديد من اللغات التي تنتقل أيضًا بشكل جيد إلى LibriSpeech." + +تمت المساهمة بهذا النموذج بواسطة [cwkeam](https://huggingface.co/cwkeam). يمكن العثور على الكود الأصلي [هنا](https://github.com/flashlight/wav2letter/tree/main/recipes/mling_pl). + +## نصائح الاستخدام + +تتوفر نسخة PyTorch من هذا النموذج فقط في الإصدار 1.9 والإصدارات الأحدث. + +## الموارد + +- [دليل مهام التعرف التلقائي على الكلام](../tasks/asr) + +## MCTCTConfig + +[[autodoc]] MCTCTConfig + +## MCTCTFeatureExtractor + +[[autodoc]] MCTCTFeatureExtractor + +- __call__ + +## MCTCTProcessor + +[[autodoc]] MCTCTProcessor + +- __call__ +- from_pretrained +- save_pretrained +- batch_decode +- decode + +## MCTCTModel + +[[autodoc]] MCTCTModel + +- forward + +## MCTCTForCTC + +[[autodoc]] MCTCTForCTC + +- forward \ No newline at end of file From c0becd9e2668ed3478717b898ae54caeb3a52d89 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:10 +0300 Subject: [PATCH 499/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mega.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mega.md | 77 ++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 docs/source/ar/model_doc/mega.md diff --git a/docs/source/ar/model_doc/mega.md b/docs/source/ar/model_doc/mega.md new file mode 100644 index 00000000000000..5f3e66b122976a --- /dev/null +++ b/docs/source/ar/model_doc/mega.md @@ -0,0 +1,77 @@ +# MEGA + + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب (PRs) جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: "pip install -U transformers==4.40.2". + + + +## نظرة عامة + +تم اقتراح نموذج MEGA في الورقة البحثية [Mega: Moving Average Equipped Gated Attention](https://arxiv.org/abs/2209.10655) بواسطة Xuezhe Ma و Chunting Zhou و Xiang Kong و Junxian He و Liangke Gui و Graham Neubig و Jonathan May و Luke Zettlemoyer. +يقترح MEGA نهجًا جديدًا للاهتمام الذاتي حيث تحتوي كل طبقة ترميز على متوسط متحرك أسي متعدد الرؤوس بالإضافة إلى رأس واحد من الاهتمام المعتاد المعتمد على الضرب النقطي، مما يمنح آلية الاهتمام تحيزات موضعية أقوى. يسمح هذا لـ MEGA بأن يكون تنافسيًا مع المحولات في المعايير القياسية بما في ذلك LRA مع امتلاكه لعدد أقل بكثير من المعلمات. تتيح كفاءة MEGA الحسابية إمكانية توسيع نطاقه إلى تسلسلات طويلة جدًا، مما يجعله خيارًا جذابًا لمهمات معالجة اللغات الطبيعية التي تتضمن وثائق طويلة. + +ملخص الورقة البحثية هو كما يلي: + +*أدت خيارات التصميم في آلية اهتمام المحول، بما في ذلك التحيز الاستقرائي الضعيف والتعقيد الحسابي التربيعي، إلى الحد من تطبيقه في نمذجة التسلسلات الطويلة. في هذه الورقة، نقدم Mega، وهي آلية اهتمام بوابة أحادية الرأس بسيطة ومبررة نظريًا ومزودة بمتوسط متحرك (أسّي) لدمج التحيز الاستقرائي للاعتمادية المحلية الواعية بالموضع في آلية الاهتمام غير الواعية بالموضع. نقترح أيضًا متغيرًا لـ Mega يتيح تعقيدًا خطيًا في الوقت والمساحة مع حدوث خسارة طفيفة فقط في الجودة، وذلك من خلال تقسيم التسلسل بالكامل بكفاءة إلى عدة أجزاء ذات طول ثابت. تُظهر التجارب واسعة النطاق على مجموعة متنوعة من معايير نمذجة التسلسلات، بما في ذلك Long Range Arena، والترجمة الآلية العصبية، ونمذجة اللغة التوليدية، وتصنيف الصور والكلام، أن Mega يحقق تحسينات كبيرة مقارنة بنماذج التسلسل الأخرى، بما في ذلك متغيرات المحولات ونماذج فضاء الحالة الحديثة.* + +تمت المساهمة بهذا النموذج من قبل [mnaylor](https://huggingface.co/mnaylor). +يمكن العثور على الشفرة الأصلية [هنا](https://github.com/facebookresearch/mega). + +## نصائح الاستخدام + +- يمكن أن يعمل MEGA بشكل جيد جدًا بعدد قليل نسبيًا من المعلمات. راجع التذييل D في ورقة MEGA للحصول على أمثلة لمواصفات التصميم التي تعمل بشكل جيد في مختلف الإعدادات. عند استخدام MEGA كفك شفرة، تأكد من تعيين "bidirectional=False" لتجنب الأخطاء مع الاتجاه الافتراضي ثنائي الاتجاه. +- Mega-chunk هو متغير من Mega يقلل من التعقيد الزمني والمكاني من التربيعي إلى الخطي. يمكن استخدام التجزئة مع MegaConfig.use_chunking والتحكم في حجم الجزء باستخدام MegaConfig.chunk_size. + +## ملاحظات التنفيذ + +- كان للتنفيذ الأصلي لـ MEGA توقع غير متسق لأقنعة الاهتمام للوسائد والاهتمام الذاتي السببي بين طريقة الاهتمام الناعم وطريقة Laplace/squared ReLU. يعالج هذا التنفيذ عدم الاتساق هذا. +- لم يتضمن التنفيذ الأصلي تضمين نوع الرمز المميز؛ يضيف هذا التنفيذ الدعم لهذه الميزة، مع التحكم في الخيار باستخدام MegaConfig.add_token_type_embeddings. + +## MegaConfig + +[[autodoc]] MegaConfig + +## MegaModel + +[[autodoc]] MegaModel + +- forward + +## MegaForCausalLM + +[[autodoc]] MegaForCausalLM + +- forward + +## MegaForMaskedLM + +[[autodoc]] MegaForMaskedLM + +- forward + +## MegaForSequenceClassification + +[[autodoc]] MegaForSequenceClassification + +- forward + +## MegaForMultipleChoice + +[[autodoc]] MegaForMultipleChoice + +- forward + +## MegaForTokenClassification + +[[autodoc]] MegaForTokenClassification + +- forward + +## MegaForQuestionAnswering + +[[autodoc]] MegaForQuestionAnswering + +- forward \ No newline at end of file From 152dc684cf7e01dd976e5cc5925ec504ea483c46 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:12 +0300 Subject: [PATCH 500/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/megatron-bert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/megatron-bert.md | 111 ++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 docs/source/ar/model_doc/megatron-bert.md diff --git a/docs/source/ar/model_doc/megatron-bert.md b/docs/source/ar/model_doc/megatron-bert.md new file mode 100644 index 00000000000000..c54891d2959989 --- /dev/null +++ b/docs/source/ar/model_doc/megatron-bert.md @@ -0,0 +1,111 @@ +# MegatronBERT + +## نظرة عامة +تم اقتراح نموذج MegatronBERT في ورقة بحثية بعنوان "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism" بواسطة Mohammad Shoeybi وآخرين. + +ملخص الورقة البحثية هو كما يلي: + +أظهرت الأعمال الحديثة في نمذجة اللغة أن تدريب نماذج المحول الكبيرة تطور حالة الفن في تطبيقات معالجة اللغة الطبيعية. ومع ذلك، يمكن أن تكون النماذج الكبيرة جداً صعبة التدريب بسبب قيود الذاكرة. في هذا العمل، نقدم تقنياتنا لتدريب نماذج المحول الكبيرة للغاية وننفذ نهجًا موازيًا داخلي الطبقة بسيطًا وفعالًا يمكّن من تدريب نماذج المحول مع مليارات من المعلمات. لا يتطلب نهجنا مترجمًا أو تغييرات في المكتبة الجديدة، وهو متعامد ومتكامل مع موازاة نموذج الأنابيب، ويمكن تنفيذه بالكامل من خلال إدراج بعض عمليات الاتصال في PyTorch الأصلي. نوضح هذا النهج من خلال تقارب النماذج القائمة على المحول حتى 8.3 مليار معلمة باستخدام 512 وحدة معالجة رسومية (GPU). نحافظ على 15.1 PetaFLOPs عبر التطبيق بالكامل بكفاءة توسيع 76% عند مقارنته بخط أساس GPU واحد قوي يحافظ على 39 TeraFLOPs، والتي هي 30% من ذروة FLOPs. ولإثبات أن نماذج اللغة الكبيرة يمكن أن تواصل تطوير حالة الفن، نقوم بتدريب نموذج لغة محول 8.3 مليار معلمة مشابه لـ GPT-2 ونموذج 3.9 مليار معلمة مشابه لـ BERT. ونظهر أن الاهتمام الدقيق بوضع التطبيع الطبقي في النماذج الشبيهة بـ BERT أمر بالغ الأهمية لتحقيق أداء متزايد مع نمو حجم النموذج. باستخدام نموذج GPT-2، نحقق نتائج حالة أفضل على مجموعات بيانات WikiText103 (10.8 مقارنة بـ 15.8 من حالة أفضل) و LAMBADA (66.5% مقارنة بدقة 63.2% من حالة أفضل). ويحقق نموذج BERT الخاص بنا نتائج حالة أفضل على مجموعة بيانات RACE (90.9% مقارنة بدقة 89.4% من حالة أفضل). + +تمت المساهمة بهذا النموذج من قبل [jdemouth]. يمكن العثور على الكود الأصلي [هنا]. يحتوي هذا المستودع على تنفيذ متعدد وحدات معالجة الرسومات (GPU) ومتعدد العقد لنماذج Megatron Language. على وجه التحديد، يحتوي على نهج موازاة نموذج هجين باستخدام تقنيات "tensor parallel" و "pipeline parallel". + +## نصائح الاستخدام + +قمنا بتوفير نقاط تفتيش [BERT-345M] مسبقة التدريب للاستخدام في تقييم أو الضبط الدقيق لمهام المصب. + +للوصول إلى هذه النقاط المرجعية، قم أولاً بالتسجيل في NVIDIA GPU Cloud (NGC) وإعداد واجهة سطر الأوامر الخاصة بسجل NGC. يمكن العثور على مزيد من الوثائق حول تنزيل النماذج في [وثائق NGC]. + +أو، يمكنك تنزيل نقاط التفتيش مباشرة باستخدام ما يلي: + +BERT-345M-uncased: + +```bash +wget --content-disposition https://api.ngc.nvidia.com/v2/models/nvidia/megatron_bert_345m/versions/v0.1_uncased/zip +-O megatron_bert_345m_v0_1_uncased.zip +``` + +BERT-345M-cased: + +```bash +wget --content-disposition https://api.ngc.nvidia.com/v2/models/nvidia/megatron_bert_345m/versions/v0.1_cased/zip -O +megatron_bert_345m_v0_1_cased.zip +``` + +بمجرد الحصول على نقاط التفتيش من NVIDIA GPU Cloud (NGC)، يجب تحويلها إلى تنسيق يمكن تحميله بسهولة بواسطة Hugging Face Transformers ومنفذنا لرمز BERT. + +تسمح الأوامر التالية بإجراء التحويل. نفترض أن المجلد 'models/megatron_bert' يحتوي على 'megatron_bert_345m_v0_1_ {cased، uncased}.zip' وأن الأوامر يتم تشغيلها من داخل ذلك المجلد: + +```bash +python3 $PATH_TO_TRANSFORMERS/models/megatron_bert/convert_megatron_bert_checkpoint.py megatron_bert_345m_v0_1_uncased.zip +``` + +```bash +python3 $PATH_TO_TRANSFORMtakan/models/megatron_bert/convert_megatron_bert_checkpoint.py megatron_bert_345m_v0_1_cased.zip +``` + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## MegatronBertConfig + +[[autodoc]] MegatronBertConfig + +## MegatronBertModel + +[[autodoc]] MegatronBertModel + +- forward + +## MegatronBertForMaskedLM + +[[autodoc]] MegatronBertForMaskedLM + +- forward + +## MegatronBertForCausalLM + +[[autodoc]] MegatronBertForCausalLM + +- forward + +## MegatronBertForNextSentencePrediction + +[[autodoc]] MegatronBertForNextSentencePrediction + +- forward + +## MegatronBertForPreTraining + +[[autodoc]] MegatronBertForPreTraining + +- forward + +## MegatronBertForSequenceClassification + +[[autodoc]] MegatronBertForSequenceClassification + +- forward + +## MegatronBertForMultipleChoice + +[[autodoc]] MegatronBertForMultipleChoice + +- forward + +## MegatronBertForTokenClassification + +[[autodoc]] MegatronBertForTokenClassification + +- forward + +## MegatronBertForQuestionAnswering + +[[autodoc]] MegatronBertForQuestionAnswering + +- forward \ No newline at end of file From 7e34ec9cb9a2e5d3c0d9a730bf8fe47394bcdd53 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:14 +0300 Subject: [PATCH 501/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/megatron=5Fgpt2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/megatron_gpt2.md | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/source/ar/model_doc/megatron_gpt2.md diff --git a/docs/source/ar/model_doc/megatron_gpt2.md b/docs/source/ar/model_doc/megatron_gpt2.md new file mode 100644 index 00000000000000..6593f442d7e4e8 --- /dev/null +++ b/docs/source/ar/model_doc/megatron_gpt2.md @@ -0,0 +1,38 @@ +# MegatronGPT2 + +## نظرة عامة + +اقترح نموذج MegatronGPT2 في ورقة بحثية بعنوان "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism" بواسطة Mohammad Shoeybi وآخرون. + +يوضح الملخص المستخرج من الورقة البحثية ما يلي: + +أظهرت الأعمال الحديثة في نمذجة اللغة أن تدريب نماذج المحول الكبيرة تطور حالة الفن في تطبيقات معالجة اللغة الطبيعية. ومع ذلك، يمكن أن تكون النماذج الكبيرة جدًا صعبة التدريب بسبب قيود الذاكرة. في هذا العمل، نقدم تقنياتنا لتدريب نماذج المحول الكبيرة للغاية وننفذ نهجًا موازيًا بسيطًا وفعالًا داخل الطبقة لتمكين تدريب نماذج المحول مع مليارات من المعلمات. لا يتطلب نهجنا مترجمًا أو تغييرات مكتبية جديدة، وهو متعامد ومكمل لموازاة نموذج الأنابيب، ويمكن تنفيذه بالكامل بإدراج بعض عمليات الاتصال في PyTorch الأصلي. نوضح هذا النهج عن طريق تحويل النماذج المستندة إلى المحول حتى 8.3 مليار معلمة باستخدام 512 وحدة معالجة الرسومات (GPU). نحافظ على 15.1 PetaFLOPs عبر التطبيق بالكامل بكفاءة تحجيم تبلغ 76% عند مقارنتها بخط أساس GPU واحد قوي يحافظ على 39 TeraFLOPs، وهو 30% من ذروة FLOPs. ولإثبات أن نماذج اللغة الكبيرة يمكن أن تواصل تطوير حالة الفن، نقوم بتدريب نموذج لغة محول 8.3 مليار معلمة مشابه لـ GPT-2 ونموذج 3.9 مليار معلمة مشابه لـ BERT. نُظهر أن الاهتمام الدقيق بوضع طبقة التطبيع في النماذج الشبيهة بـ BERT أمر بالغ الأهمية لتحقيق أداء متزايد مع نمو حجم النموذج. باستخدام نموذج GPT-2، نحقق نتائج حالة أفضل على مجموعات بيانات WikiText103 (10.8 مقارنة بدرجة تعقيد 15.8) و LAMBADA (66.5% مقارنة بدقة 63.2%) . يحقق نموذج BERT الخاص بنا نتائج حالة أفضل في مجموعة بيانات RACE (90.9% مقارنة بدقة 89.4%). + +ساهم بهذا النموذج [jdemouth] (https://huggingface.co/jdemouth). يمكن العثور على الكود الأصلي [هنا] (https://github.com/NVIDIA/Megatron-LM). يحتوي هذا المستودع على تنفيذ متعدد وحدات معالجة الرسومات (GPU) ومتعدد العقد لنماذج Megatron Language. على وجه الخصوص، يحتوي على نهج موازاة نموذج مختلط باستخدام تقنيات "tensor parallel" و "pipeline parallel". + +## نصائح الاستخدام + +قمنا بتوفير نقاط التحقق المسبقة التدريب لـ [GPT2-345M] (https://ngc.nvidia.com/catalog/models/nvidia:megatron_lm_345m) للاستخدام في تقييم المهام أو الضبط الدقيق للمهام اللاحقة. + +للوصول إلى نقاط التحقق هذه، قم أولاً بالتسجيل في NVIDIA GPU Cloud (NGC) وإعداد CLI لسجل NGC. يمكن العثور على مزيد من الوثائق حول تنزيل النماذج في [وثائق NGC] (https://docs.nvidia.com/dgx/ngc-registry-cli-user-guide/index.html#topic_6_4_1). + +أو يمكنك تنزيل نقاط التحقق مباشرة باستخدام ما يلي: + +```bash +wget --content-disposition https://api.ngc.nvidia.com/v2/models/nvidia/megatron_lm_345m/versions/v0.0/zip -O +megatron_gpt2_345m_v0_0.zip +``` + +بمجرد حصولك على نقطة التحقق من NVIDIA GPU Cloud (NGC)، يجب عليك تحويلها إلى تنسيق يمكن تحميله بسهولة بواسطة تنفيذ Hugging Face Transformers GPT2. + +يسمح الأمر التالي بإجراء التحويل. نفترض أن المجلد "models/megatron_gpt2" يحتوي على "megatron_gpt2_345m_v0_0.zip" وأن الأمر يتم تشغيله من هذا المجلد: + +```bash +python3 $PATH_TO_TRANSFORMERS/models/megatron_gpt2/convert_megatron_gpt2_checkpoint.py megatron_gpt2_345m_v0_0.zip +``` + + + +تتشابه بنية MegatronGPT2 مع بنية OpenAI GPT-2. راجع [وثائق GPT-2] (gpt2) للحصول على معلومات حول فئات التكوين ومعلماتها. + + \ No newline at end of file From 114ddaf7d15a4dac40b31d6e8811f28efc6705b0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:16 +0300 Subject: [PATCH 502/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mgp-str.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mgp-str.md | 76 +++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/source/ar/model_doc/mgp-str.md diff --git a/docs/source/ar/model_doc/mgp-str.md b/docs/source/ar/model_doc/mgp-str.md new file mode 100644 index 00000000000000..c499e353fc7041 --- /dev/null +++ b/docs/source/ar/model_doc/mgp-str.md @@ -0,0 +1,76 @@ +# MGP-STR + +## نظرة عامة +اقترح نموذج MGP-STR في [التعرف على نص المشهد متعدد الدقة التنبؤية](https://arxiv.org/abs/2209.03592) بواسطة Peng Wang، وCheng Da، وCong Yao. MGP-STR هو نموذج تعرف على نص المشهد (STR) **بسيط** من الناحية النظرية ولكنه **قوي**، مبني على [محول الرؤية (ViT)](vit). ولدمج المعرفة اللغوية، اقترحت استراتيجية التنبؤ متعدد الدقة (MGP) لحقن المعلومات من الطراز اللغوي في النموذج بطريقة ضمنية. + +المستخلص من الورقة هو ما يلي: + +> "كان التعرف على نص المشهد (STR) موضوع بحث نشط في رؤية الكمبيوتر لسنوات. ولمعالجة هذه المشكلة الصعبة، اقترحت العديد من الطرق المبتكرة بشكل متتالي وأصبح دمج المعرفة اللغوية في نماذج STR اتجاهًا بارزًا مؤخرًا. في هذا العمل، نستلهم أولاً من التقدم الأخير في محول الرؤية (ViT) لبناء نموذج STR بصري مفهومي بسيط ولكنه قوي، مبني على ViT ويتفوق على النماذج السابقة الرائدة في مجال التعرف على نص المشهد، بما في ذلك النماذج البصرية البحتة والأساليب المعززة باللغة. لدمج المعرفة اللغوية، نقترح أيضًا استراتيجية التنبؤ متعدد الدقة لحقن المعلومات من الطراز اللغوي في النموذج بطريقة ضمنية، أي أنه يتم تقديم تمثيلات الوحدات الفرعية (BPE وWordPiece) المستخدمة على نطاق واسع في NLP في مساحة الإخراج، بالإضافة إلى التمثيل التقليدي لمستوى الأحرف، في حين لم يتم اعتماد أي نموذج لغة مستقل. يمكن للخوارزمية الناتجة (يطلق عليها MGP-STR) دفع مظروف أداء STR إلى مستوى أعلى. على وجه التحديد، يحقق متوسط دقة التعرف بنسبة 93.35٪ في المعايير القياسية." + +drawing + +هندسة MGP-STR. مأخوذة من الورقة الأصلية. + +تم تدريب MGP-STR على مجموعتين من البيانات الاصطناعية [MJSynth]((http://www.robots.ox.ac.uk/~vgg/data/text/)) (MJ) و[SynthText](http://www.robots.ox.ac.uk/~vgg/data/scenetext/) (ST) بدون ضبط دقيق على مجموعات بيانات أخرى. ويحقق نتائج رائدة على ستة معايير قياسية لنص المشهد اللاتيني، بما في ذلك 3 مجموعات بيانات نص عادية (IC13، SVT، IIIT) و3 مجموعات بيانات غير منتظمة (IC15، SVTP، CUTE). + +تمت المساهمة بهذا النموذج بواسطة [yuekun](https://huggingface.co/yuekun). يمكن العثور على الكود الأصلي [هنا](https://github.com/AlibabaResearch/AdvancedLiterateMachinery/tree/main/OCR/MGP-STR). + +## مثال الاستنتاج + +يقبل [`MgpstrModel`] الصور كمدخلات وينشئ ثلاثة أنواع من التنبؤات، والتي تمثل معلومات نصية بمستويات دقة مختلفة. + +يتم دمج الأنواع الثلاثة من التنبؤات لإعطاء نتيجة التنبؤ النهائية. + +تكون فئة [`ViTImageProcessor`] مسؤولة عن معالجة الصورة المدخلة، ويقوم [`MgpstrTokenizer`] بفك رموز الرموز المميزة المولدة إلى السلسلة المستهدفة. + +يغلف [`MgpstrProcessor`] [`ViTImageProcessor`] و [`MgpstrTokenizer`] في مثيل واحد لاستخراج ميزات الإدخال وفك تشفير معرّفات الرموز المميزة المتوقعة. + +- التعرف الضوئي على الأحرف خطوة بخطوة (OCR) + +```py +>>> from transformers import MgpstrProcessor, MgpstrForSceneTextRecognition +>>> import requests +>>> from PIL import Image + +>>> processor = MgpstrProcessor.from_pretrained('alibaba-damo/mgp-str-base') +>>> model = MgpstrForSceneTextRecognition.from_pretrained('alibaba-damo/mgp-str-base') + +>>> # تحميل الصورة من مجموعة بيانات IIIT-5k +>>> url = "https://i.postimg.cc/ZKwLg2Gw/367-14.png" +>>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB") + +>>> pixel_values = processor(images=image, return_tensors="pt").pixel_values +>>> outputs = model(pixel_values) + +>>> generated_text = processor.batch_decode(outputs.logits)['generated_text'] +``` + +## MgpstrConfig + +[[autodoc]] MgpstrConfig + +## MgpstrTokenizer + +[[autodoc]] MgpstrTokenizer + +- save_vocabulary + +## MgpstrProcessor + +[[autodoc]] MgpstrProcessor + +- __call__ + +- batch_decode + +## MgpstrModel + +[[autodoc]] MgpstrModel + +- forward + +## MgpstrForSceneTextRecognition + +[[autodoc]] MgpstrForSceneTextRecognition + +- forward \ No newline at end of file From 9e3e73a05c8a24d5dc9b98c9c216f15ee12dc1cd Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:17 +0300 Subject: [PATCH 503/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mistral.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mistral.md | 235 ++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 docs/source/ar/model_doc/mistral.md diff --git a/docs/source/ar/model_doc/mistral.md b/docs/source/ar/model_doc/mistral.md new file mode 100644 index 00000000000000..f374404fe95e6e --- /dev/null +++ b/docs/source/ar/model_doc/mistral.md @@ -0,0 +1,235 @@ +# Mistral + +## نظرة عامة +تم تقديم ميسترال في [هذه التدوينة](https://mistral.ai/news/announcing-mistral-7b/) بواسطة ألبرت جيانج، وألكسندر سابليرولز، وأرثر مينش، وكريس بامفورد، وديفندرا سينغ تشابلوت، ودييجو دي لاس كاساس، وفلوريان بريساند، وجيانا لينجيل، وجيوم لابل، وليليو رينارد لافو، ولوسيل سولنييه، وماري-آن لاشو، وبيير ستوك، وتيفين لو سكاو، وتيبو لافري، وتوماس وانج، وتيموتي لاكروا، وويليام إل سيد. + +تقول مقدمة التدوينة: + +> *يفتخر فريق Mistral AI بتقديم Mistral 7B، أقوى نموذج لغوي حتى الآن بحجمه.* + +ميسترال-7B هو أول نموذج لغوي كبير (LLM) أصدره [mistral.ai](https://mistral.ai/). + +### التفاصيل المعمارية + +ميسترال-7B هو محول فك تشفير فقط مع خيارات التصميم المعماري التالية: + +- Sliding Window Attention - تم تدريبه باستخدام طول سياق 8k وحجم ذاكرة التخزين المؤقت الثابت، مع نطاق اهتمام نظري يبلغ 128K رمزًا + +- GQA (Grouped Query Attention) - يسمح بإجراء استدلال أسرع وحجم ذاكرة تخزين مؤقت أقل. + +- Byte-fallback BPE tokenizer - يضمن عدم تعيين الأحرف مطلقًا إلى رموز خارج المفردات. + +للحصول على مزيد من التفاصيل، يرجى الرجوع إلى [تدوينة الإصدار](https://mistral.ai/news/announcing-mistral-7b/). + +### الترخيص + +تم إصدار `Mistral-7B` بموجب ترخيص Apache 2.0. + +## نصائح الاستخدام + +أصدر فريق ميسترال 3 نقاط تفتيش: + +- نموذج أساسي، [Mistral-7B-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1)، تم تدريبه مسبقًا للتنبؤ بالرمز التالي على بيانات بحجم الإنترنت. + +- نموذج ضبط التعليمات، [Mistral-7B-Instruct-v0.1](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1)، وهو النموذج الأساسي الذي تم تحسينه لأغراض الدردشة باستخدام الضبط الدقيق المُشرف (SFT) والتحسين المباشر للأفضليات (DPO). + +- نموذج ضبط تعليمات محسن، [Mistral-7B-Instruct-v0.2](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2)، والذي يحسن الإصدار 1. + +يمكن استخدام النموذج الأساسي على النحو التالي: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1") + +>>> prompt = "My favourite condiment is" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda") +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"My favourite condiment is to ..." +``` + +يمكن استخدام نموذج ضبط التعليمات على النحو التالي: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2") + +>>> messages = [ +... {"role": "user", "content": "What is your favourite condiment?"}, +... {"role": "assistant", "content": "Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!"}, +... {"role": "user", "content": "Do you have mayonnaise recipes?"} +... ] + +>>> model_inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda") + +>>> generated_ids = model.generate(model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"Mayonnaise can be made as follows: (...)" +``` + +كما هو موضح، يتطلب نموذج ضبط التعليمات [قالب دردشة](../chat_templating) للتأكد من إعداد المدخلات بتنسيق صحيح. + +## تسريع ميسترال باستخدام Flash Attention + +توضح مقتطفات الشفرة أعلاه الاستدلال بدون أي حيل للتحسين. ومع ذلك، يمكن للمرء تسريع النموذج بشكل كبير من خلال الاستفادة من [Flash Attention](../perf_train_gpu_one.md#flash-attention-2)، وهو تنفيذ أسرع لآلية الاهتمام المستخدمة داخل النموذج. + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الانزلاق. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لـ [مستودع الاهتمام بالوميض](https://github.com/Dao-AILab/flash-attention). تأكد أيضًا من تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.float16`) + +للتحميل وتشغيل نموذج باستخدام Flash Attention-2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1", torch_dtype=torch.float16, attn_implementation="flash_attention_2", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1") + +>>> prompt = "My favourite condiment is" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda") +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"My favourite condiment is to (...)" +``` + +### تسريع متوقع + +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `mistralai/Mistral-7B-v0.1` وإصدار Flash Attention 2 من النموذج. + +
+ +
+ +### نافذة انزلاق الاهتمام + +يدعم التنفيذ الحالي آلية اهتمام نافذة الانزلاق وإدارة ذاكرة التخزين المؤقت الفعالة من حيث الذاكرة. + +لتمكين اهتمام نافذة الانزلاق، تأكد فقط من وجود إصدار `flash-attn` متوافق مع اهتمام نافذة الانزلاق (`>=2.3.0`). + +يستخدم نموذج Flash Attention-2 أيضًا آلية تقطيع ذاكرة التخزين المؤقت الأكثر كفاءة من حيث الذاكرة - وفقًا للتنفيذ الرسمي لنموذج ميسترال الذي يستخدم آلية ذاكرة التخزين المؤقت المتداولة، نحتفظ بحجم ذاكرة التخزين المؤقت ثابتًا (`self.config.sliding_window`)، وندعم التوليد المجمع فقط لـ `padding_side="left"` ونستخدم الموضع المطلق للرمز الحالي لحساب التضمين الموضعي. + +## تقليل حجم ميسترال باستخدام التكميم + +نظرًا لأن نموذج ميسترال يحتوي على 7 مليارات معلمة، فسيحتاج ذلك إلى حوالي 14 جيجابايت من ذاكرة GPU RAM في الدقة النصفية (float16)، حيث يتم تخزين كل معلمة في 2 بايت. ومع ذلك، يمكن تقليل حجم النموذج باستخدام [التكميم](../quantization.md). إذا تم تكميم النموذج إلى 4 بتات (أو نصف بايت لكل معلمة)، فهذا يتطلب فقط حوالي 3.5 جيجابايت من ذاكرة الوصول العشوائي. + +إن تكميم نموذج بسيط مثل تمرير `quantization_config` إلى النموذج. أدناه، سنستفيد من تكميم BitsAndyBytes (ولكن راجع [هذه الصفحة](../quantization.md) لأساليب التكميم الأخرى): + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +>>> # specify how to quantize the model +>>> quantization_config = BitsAndBytesConfig( +... load_in_4bit=True, +... bnb_4bit_quant_type="nf4", +... bnb_4bit_compute_dtype="torch.float16", +... ) + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2", quantization_config=True, device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2") + +>>> prompt = "My favourite condiment is" + +>>> messages = [ +... {"role": "user", "content": "What is your favourite condiment?"}, +... {"role": "assistant", "content": "Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!"}, +... {"role": "user", "content": "Do you have mayonnaise recipes?"} +... ] + +>>> model_inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda") + +>>> generated_ids = model.generate(model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"The expected output" +``` + +تمت المساهمة بهذا النموذج من قبل [يونس بلقادة](https://huggingface.co/ybelkada) و[آرثر زوكر](https://huggingface.co/ArthurZ). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/mistralai/mistral-src). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام ميسترال. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + + + +- يمكن العثور على دفتر ملاحظات توضيحي لأداء الضبط الدقيق المُشرف (SFT) لـ Mistral-7B [هنا](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Mistral/Supervised_fine_tuning_(SFT)_of_an_LLM_using_Hugging_Face_tooling.ipynb). 🌎 + +- [تدوينة](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl) حول كيفية ضبط دقة LLMs في عام 2024 باستخدام أدوات Hugging Face. 🌎 + +- يتضمن [دليل المحاذاة](https://github.com/huggingface/alignment-handbook) من Hugging Face نصوصًا ووصفات لأداء الضبط الدقيق المُشرف (SFT) والتحسين المباشر للأفضليات باستخدام Mistral-7B. يتضمن هذا النصوص للضبط الدقيق الكامل، وQLoRa على GPU واحد بالإضافة إلى الضبط الدقيق متعدد GPU. + +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +## MistralConfig + +[[autodoc]] MistralConfig + +## MistralModel + +[[autodoc]] MistralModel + +- forward + +## MistralForCausalLM + +[[autodoc]] MistralForCausalLM + +- forward + +## MistralForSequenceClassification + +[[autodoc]] MistralForSequenceClassification + +- forward + +## MistralForTokenClassification + +[[autodoc]] MistralForTokenClassification + +- forward + +## FlaxMistralModel + +[[autodoc]] FlaxMistralModel + +- __call__ + +## FlaxMistralForCausalLM + +[[autodoc]] FlaxMistralForCausalLM + +- __call__ + +## TFMistralModel + +[[autodoc]] TFMistralModel + +- call + +## TFMistralForCausalLM + +[[autodoc]] TFMistralForCausalLM + +- call + +## TFMistralForSequenceClassification + +[[autodoc]] TFMistralForSequenceClassification + +- call \ No newline at end of file From b9d5612de1aeca44456f83bd9b31b624dcfd04ce Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:19 +0300 Subject: [PATCH 504/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mixtral.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mixtral.md | 196 ++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 docs/source/ar/model_doc/mixtral.md diff --git a/docs/source/ar/model_doc/mixtral.md b/docs/source/ar/model_doc/mixtral.md new file mode 100644 index 00000000000000..5eaf6501973bc6 --- /dev/null +++ b/docs/source/ar/model_doc/mixtral.md @@ -0,0 +1,196 @@ +# Mixtral + +## نظرة عامة +تم تقديم Mixtral-8x7B في [منشور مدونة Mixtral of Experts](https://mistral.ai/news/mixtral-of-experts/) بواسطة Albert Jiang، وAlexandre Sablayrolles، وArthur Mensch، وChris Bamford، وDevendra Singh Chaplot، وDiego de las Casas، وFlorian Bressand، وGianna Lengyel، وGuillaume Lample، وLélio Renard Lavaud، وLucile Saulnier، وMarie-Anne Lachaux، وPierre Stock، وTeven Le Scao، وThibaut Lavril، وThomas Wang، وTimothée Lacroix، وWilliam El Sayed. + +تقول مقدمة منشور المدونة: + +> "اليوم، يفخر الفريق بإطلاق Mixtral 8x7B، وهو نموذج عالي الجودة من نماذج المزج النادر للخبراء (SMoE) ذو أوزان مفتوحة. مرخص بموجب Apache 2.0. يتفوق Mixtral على Llama 2 70B في معظم المعايير المرجعية بسرعة استدلال أسرع 6 مرات. إنه أقوى نموذج ذو وزن مفتوح برخصة مسموحة، وأفضل نموذج بشكل عام فيما يتعلق بالمقايضات بين التكلفة والأداء. وعلى وجه الخصوص، فإنه يطابق أداء GPT3.5 أو يتفوق عليه في معظم المعايير المرجعية القياسية." + +Mixtral-8x7B هو ثاني نموذج لغة كبير (LLM) أصدرته [mistral.ai](https://mistral.ai/)، بعد [Mistral-7B](mistral). + +### التفاصيل المعمارية +Mixtral-8x7B هو محول فك تشفير فقط مع خيارات التصميم المعماري التالية: + +- Mixtral هو نموذج مزيج من الخبراء (MoE) مع 8 خبراء لكل شبكة عصبية متعددة الطبقات (MLP)، بإجمالي 45 مليار معلمة. لمزيد من المعلومات حول المزج من الخبراء، يرجى الرجوع إلى [منشور المدونة](https://huggingface.co/blog/moe). + +- على الرغم من أن النموذج يحتوي على 45 مليار معلمة، إلا أن الكمبيوتر المطلوب لإجراء تمرير أمامي واحد هو نفسه المطلوب لنموذج مع 14 مليار معلمة. ويرجع ذلك إلى أنه على الرغم من ضرورة تحميل كل خبير في ذاكرة الوصول العشوائي (متطلبات ذاكرة الوصول العشوائي مثل 70B)، يتم إرسال كل رمز من الرموز المخفية مرتين (التصنيف الأعلى 2) وبالتالي فإن الكمبيوتر (العملية المطلوبة في كل عملية حسابية أمامية) هو مجرد 2 X sequence_length. + +تفاصيل التنفيذ التالية مشتركة مع النموذج الأول لـ Mistral AI [Mistral-7B](mistral): + +- نافذة انزلاق الاهتمام - مدربة بطول سياق 8 كيلو بايت وحجم ذاكرة التخزين المؤقت ثابت، مع نطاق اهتمام نظري يبلغ 128 ألف رمز. + +- GQA (مجموعة Query Attention) - تسمح باستدلال أسرع وحجم ذاكرة تخزين مؤقت أقل. + +- محرف Byte-fallback BPE - يضمن عدم تعيين الأحرف مطلقًا إلى رموز خارج المفردات. + +للحصول على مزيد من التفاصيل، يرجى الرجوع إلى [منشور المدونة](https://mistral.ai/news/mixtral-of-experts/). + +### الترخيص +تم إصدار `Mixtral-8x7B` بموجب ترخيص Apache 2.0. + +## نصائح الاستخدام +أصدر فريق Mistral نقطتي تفتيش: + +- نموذج أساسي، [Mixtral-8x7B-v0.1](https://huggingface.co/mistralai/Mixtral-8x7B-v0.1)، تم تدريبه مسبقًا للتنبؤ بالرمز التالي على بيانات على نطاق الإنترنت. + +- نموذج ضبط التعليمات، [Mixtral-8x7B-Instruct-v0.1](https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1)، وهو النموذج الأساسي الذي تم تحسينه لأغراض الدردشة باستخدام الضبط الدقيق الخاضع للإشراف (SFT) والتحسين المباشر للأفضليات (DPO). + +يمكن استخدام النموذج الأساسي على النحو التالي: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mixtral-8x7B-v0.1", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mixtral-8x7B-v0.1") + +>>> prompt = "My favourite condiment is" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda") +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"My favourite condiment is to ..." +``` + +يمكن استخدام نموذج ضبط التعليمات على النحو التالي: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mixtral-8x7B-Instruct-v0.1", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mixtral-8x7B-Instruct-v0.1") + +>>> messages = [ +... {"role": "user", "content": "What is your favourite condiment?"}, +... {"role": "assistant", "content": "Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!"}, +... {"role": "user", "content": "Do you have mayonnaise recipes?"} +... ] + +>>> model_inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda") + +>>> generated_ids = model.generate(model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"Mayonnaise can be made as follows: (...)" +``` + +كما هو موضح، يتطلب النموذج المضبوط للتعليمات [قالب دردشة](../chat_templating) للتأكد من إعداد الإدخالات بتنسيق صحيح. + +## تسريع Mixtral باستخدام Flash Attention +توضح مقتطفات التعليمات البرمجية أعلاه الاستدلال بدون أي حيل للتحسين. ومع ذلك، يمكن للمرء أن يسرع بشكل كبير من النموذج من خلال الاستفادة من [Flash Attention](../perf_train_gpu_one.md#flash-attention-2)، وهو تنفيذ أسرع لآلية الاهتمام المستخدمة داخل النموذج. + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الانزلاق. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لـ [مستودع الاهتمام بالوميض](https://github.com/Dao-AILab/flash-attention). تأكد أيضًا من تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.float16`). + +للتحميل وتشغيل نموذج باستخدام Flash Attention-2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mixtral-8x7B-v0.1", torch_dtype=torch.float16, attn_implementation="flash_attention_2", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mixtral-8x7B-v0.1") + +>>> prompt = "My favourite condiment is" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda") +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"The expected output" +``` + +### تسريع متوقع +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `mistralai/Mixtral-8x7B-v0.1` وإصدار Flash Attention 2 من النموذج. + +
+ +
+ +### نافذة انزلاق الاهتمام +تدعم التنفيذ الحالي آلية اهتمام نافذة الانزلاق وإدارة ذاكرة التخزين المؤقت الفعالة من حيث الذاكرة. + +لتمكين اهتمام نافذة الانزلاق، تأكد فقط من وجود إصدار `flash-attn` متوافق مع اهتمام نافذة الانزلاق (`>=2.3.0`). + +يستخدم نموذج Flash Attention-2 أيضًا آلية تقطيع ذاكرة التخزين المؤقت الأكثر كفاءة من حيث الذاكرة - كما هو موصى به وفقًا للتنفيذ الرسمي لنموذج Mistral الذي يستخدم آلية التخزين المؤقت المتداول، نحافظ على حجم ذاكرة التخزين المؤقت ثابتًا (`self.config.sliding_window`)، وندعم التوليد المجمع فقط لـ `padding_side="left"` ونستخدم الموضع المطلق للرمز الحالي لحساب التضمين الموضعي. + +## تقليل حجم Mixtral باستخدام التكميم +نظرًا لأن نموذج Mixtral يحتوي على 45 مليار معلمة، فسيحتاج ذلك إلى حوالي 90 جيجابايت من ذاكرة الوصول العشوائي للرسوميات في نصف الدقة (float16)، حيث يتم تخزين كل معلمة في بايتين. ومع ذلك، يمكنك تقليل حجم النموذج باستخدام [التكميم](../quantization.md). إذا تم تكميم النموذج إلى 4 بتات (أو نصف بايت لكل معلمة)، فإن A100 واحد بذاكرة وصول عشوائي سعة 40 جيجابايت يكفي لتناسب النموذج بالكامل، وفي هذه الحالة، تكون هناك حاجة إلى حوالي 27 جيجابايت فقط من ذاكرة الوصول العشوائي. + +إن تكميم نموذج بسيط مثل تمرير `quantization_config` إلى النموذج. أدناه، سنستفيد من تكميم BitsAndyBytes (ولكن راجع [هذه الصفحة](../quantization.md) لأساليب التكميم الأخرى): + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + +>>> # specify how to quantize the model +>>> quantization_config = BitsAndBytesConfig( +... load_in_4bit=True, +... bnb_4bit_quant_type="nf4", +... bnb_4bit_compute_dtype="torch.float16", +... ) + +>>> model = AutoModelForCausalLM.from_pretrained("mistralai/Mixtral-8x7B-Instruct-v0.1", quantization_config=True, device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/Mixtral-8x7B-Instruct-v0.1") + +>>> prompt = "My favourite condiment is" + +>>> messages = [ +... {"role": "user", "content": "What is your favourite condiment?"}, +... {"role": "assistant", "content": "Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!"}, +... {"role": "user", "content": "Do you have mayonnaise recipes?"} +... ] + +>>> model_inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda") + +>>> generated_ids = model.generate(model_inputs, max_new_tokens=100, do_sample=True) +>>> tokenizer.batch_decode(generated_ids)[0] +"The expected output" +``` + +تمت المساهمة بهذا النموذج من قبل [Younes Belkada](https://huggingface.co/ybelkada) و[Arthur Zucker](https://huggingface.co/ArthurZ). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/mistralai/mistral-src). + +## الموارد +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Mixtral. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- يمكن العثور على دفتر ملاحظات توضيحي لإجراء الضبط الدقيق الخاضع للإشراف (SFT) لـ Mixtral-8x7B [هنا](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Mistral/Supervised_fine_tuning_(SFT)_of_an_LLM_using_Hugging_Face_tooling.ipynb). 🌎 + +- منشور [مدونة](https://medium.com/@prakharsaxena11111/finetuning-mixtral-7bx8-6071b0ebf114) حول الضبط الدقيق لـ Mixtral-8x7B باستخدام PEFT. 🌎 + +- يتضمن [دليل المحاذاة](https://github.com/huggingface/alignment-handbook) من Hugging Face نصوصًا ووصفات لأداء الضبط الدقيق الخاضع للإشراف (SFT) والتحسين المباشر للأفضليات باستخدام Mistral-7B. ويشمل ذلك نصوص الضبط الدقيق الكامل، وQLoRa على وحدة معالجة الرسومات (GPU) واحدة بالإضافة إلى الضبط الدقيق متعدد وحدات معالجة الرسومات (GPU). + +- [مهمة نمذجة اللغة السببية](../tasks/language_modeling) + +## MixtralConfig +[[autodoc]] MixtralConfig + +## MixtralModel +[[autodoc]] MixtralModel + +- forward + +## MixtralForCausalLM +[[autodoc]] MixtralForCausalLM + +- forward + +## MixtralForSequenceClassification +[[autodoc]] MixtralForSequenceClassification + +- forward + +## MixtralForTokenClassification +[[autodoc]] MixtralForTokenClassification + +- forward \ No newline at end of file From 8337312bf684b03d035ca20d3e826986860ee9ec Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:21 +0300 Subject: [PATCH 505/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mluke.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mluke.md | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/source/ar/model_doc/mluke.md diff --git a/docs/source/ar/model_doc/mluke.md b/docs/source/ar/model_doc/mluke.md new file mode 100644 index 00000000000000..d072845d922f7d --- /dev/null +++ b/docs/source/ar/model_doc/mluke.md @@ -0,0 +1,43 @@ +# mLUKE + +## نظرة عامة + +اقترح نموذج mLUKE في [mLUKE: قوة تمثيلات الكيانات في نماذج اللغة متعددة اللغات المُدربة مسبقًا](https://arxiv.org/abs/2110.08151) بواسطة Ryokan Ri وIkuya Yamada وYoshimasa Tsuruoka. إنه امتداد متعدد اللغات لنموذج [LUKE](https://arxiv.org/abs/2010.01057) تم تدريبه بناءً على XLM-RoBERTa. + +يستند النموذج إلى XLM-RoBERTa ويضيف تمثيلات الكيانات (entity embeddings)، مما يساعد في تحسين الأداء في مهام مختلفة أسفل النموذج تتضمن الاستدلال حول الكيانات مثل التعرف على الكيانات المسماة، والإجابة على الأسئلة الاستخراجية، وتصنيف العلاقات، واستكمال المعرفة على طريقة Cloze. + + فيما يلي الملخص من الورقة البحثية: + +*أظهرت الدراسات الحديثة أن نماذج اللغة متعددة اللغات المُدربة مسبقًا يمكن تحسينها بشكل فعال باستخدام معلومات محاذاة عبر اللغات من كيانات Wikipedia. ومع ذلك، لا تستغل الطرق الحالية سوى معلومات الكيانات في التدريب المُسبق ولا تستخدم الكيانات بشكل صريح في المهام أسفل النموذج. في هذه الدراسة، نستكشف فعالية الاستفادة من تمثيلات الكيانات للمهام عبر اللغات أسفل النموذج. نقوم بتدريب نموذج لغة متعدد اللغات مع 24 لغة بتمثيلات الكيانات ونظهر أن النموذج يتفوق باستمرار على النماذج المستندة إلى الكلمات في مهام نقل اللغة المختلفة. كما نقوم بتحليل النموذج وتتمثل الفكرة الرئيسية في أن دمج تمثيلات الكيانات في المدخلات يسمح لنا باستخراج ميزات أكثر عمومية للغة. نقوم أيضًا بتقييم النموذج باستخدام مهمة استكمال موجهة متعددة اللغات باستخدام مجموعة بيانات mLAMA. ونظهر أن الموجه القائم على الكيانات يستحضر المعرفة الوقائعية الصحيحة أكثر من استخدام تمثيلات الكلمات فقط.* + +تمت المساهمة بهذا النموذج بواسطة [ryo0634](https://huggingface.co/ryo0634). يمكن العثور على الكود الأصلي [هنا](https://github.com/studio-ousia/luke). + +## نصائح الاستخدام + +يمكن توصيل أوزان mLUKE مباشرة في نموذج LUKE، كما هو موضح أدناه: + +```python +from transformers import LukeModel + +model = LukeModel.from_pretrained("studio-ousia/mluke-base") +``` + +لاحظ أن mLUKE لديه محدد الرموز الخاص به، [`MLukeTokenizer`]. يمكن تهيئته على النحو التالي: + +```python +from transformers import MLukeTokenizer + +tokenizer = MLukeTokenizer.from_pretrained("studio-ousia/mluke-base") +``` + + +نظرًا لأن بنية mLUKE تعادل بنية LUKE، فيمكن الرجوع إلى [صفحة وثائق LUKE](luke) لجميع النصائح وأمثلة الكود والمفكرات. + + +## MLukeTokenizer + +[[autodoc]] MLukeTokenizer + +- __call__ + +- save_vocabulary \ No newline at end of file From 8740dd4227789f1e4445a1edb25ba41001133834 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:23 +0300 Subject: [PATCH 506/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mms.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mms.md | 361 ++++++++++++++++++++++++++++++++ 1 file changed, 361 insertions(+) create mode 100644 docs/source/ar/model_doc/mms.md diff --git a/docs/source/ar/model_doc/mms.md b/docs/source/ar/model_doc/mms.md new file mode 100644 index 00000000000000..156977a1ef0fc0 --- /dev/null +++ b/docs/source/ar/model_doc/mms.md @@ -0,0 +1,361 @@ +# MMS + +## نظرة عامة + +اقترح نموذج MMS في [توسيع نطاق تقنية الكلام إلى 1000+ لغة](https://arxiv.org/abs/2305.13516) من قبل فينيل براتاب، وأندروز تيجاندرا، وبوين شي، وبادن توماسيلو، وأرون بابو، وسايان كوندو، وعلي الكحكي، وزهاوينج ني، وأبورف فياس، ومريم فاضل زراندي، وأليكسي بايفسكي، ويوسي عدي، وشياوهوي تشانج، ووي-نينج هسو، وأليكسيس كونو، ومايكل أولي. + +الملخص من الورقة هو ما يلي: + +*إن توسيع نطاق تغطية اللغة لتكنولوجيا الكلام يحمل إمكانية تحسين الوصول إلى المعلومات للعديد من الأشخاص. ومع ذلك، تقتصر تقنية الكلام الحالية على حوالي مائة لغة، وهو جزء صغير من أكثر من 7000 لغة منطوقة في جميع أنحاء العالم. يزيد مشروع الكلام متعدد اللغات بشكل كبير من عدد اللغات المدعومة بمقدار 10-40 مرة، حسب المهمة. المكونات الرئيسية هي مجموعة بيانات جديدة تستند إلى قراءات النصوص الدينية المتاحة للجمهور والاستفادة الفعالة من التعلم الذاتي. قمنا ببناء نماذج Wav2Vec 2.0 مسبقة التدريب تغطي 1406 لغة، ونموذج واحد متعدد اللغات للتعرف التلقائي على الكلام لـ 1107 لغة، ونماذج تركيب الكلام لنفس عدد اللغات، بالإضافة إلى نموذج لتحديد اللغة لـ 4017 لغة. تُظهر التجارب أن نموذج التعرف على الكلام متعدد اللغات لدينا يقلل من معدل خطأ الكلمة في Whisper إلى النصف لأكثر من 54 لغة من معيار FLEURS بينما يتم تدريبه على جزء صغير من البيانات المُوسمة.* + +فيما يلي النماذج المختلفة مفتوحة المصدر في مشروع MMS. تم إصدار النماذج والرمز الأصلي [هنا](https://github.com/facebookresearch/fairseq/tree/main/examples/mms). لقد أضفناها إلى إطار عمل المحولات، مما يجعلها أسهل في الاستخدام. + +### التعرف التلقائي على الكلام (ASR) + +يمكن العثور على نقاط تفتيش نموذج ASR هنا: [mms-1b-fl102](https://huggingface.co/facebook/mms-1b-fl102)، [mms-1b-l1107](https://huggingface.co/facebook/mms-1b-l1107)، [mms-1b-all](https://huggingface.co/facebook/mms-1b-all). للحصول على أفضل دقة، استخدم نموذج `mms-1b-all`. + +نصائح: + +- تقبل جميع نماذج ASR مصفوفة عائمة تتوافق مع الموجة الصوتية للإشارة الصوتية. يجب معالجة الموجة الصوتية الخام مسبقًا باستخدام [`Wav2Vec2FeatureExtractor`]. +- تم تدريب النماذج باستخدام التصنيف الزمني للاتصال (CTC)، لذلك يجب فك تشفير إخراج النموذج باستخدام [`Wav2Vec2CTCTokenizer`]. +- يمكنك تحميل أوزان محول لغة مختلفة للغات مختلفة عبر [`~Wav2Vec2PreTrainedModel.load_adapter`]. تتكون محولات اللغة من حوالي مليوني معلمة فقط ويمكن تحميلها بكفاءة أثناء التنقل عند الحاجة. + +#### التحميل + +يحمل MMS بشكل افتراضي أوزان المحول للغة الإنجليزية. إذا كنت تريد تحميل أوزان محول لغة أخرى، فتأكد من تحديد `target_lang=` وكذلك `"ignore_mismatched_sizes=True`. + +يجب تمرير الكلمة الأساسية `ignore_mismatched_sizes=True` للسماح برأس نموذج اللغة لإعادة الحجم وفقًا لمعجم اللغة المحددة. + +وبالمثل، يجب تحميل المعالج بنفس اللغة المستهدفة: + +```py +from transformers import Wav2Vec2ForCTC, AutoProcessor + +model_id = "facebook/mms-1b-all" +target_lang = "fra" + +processor = AutoProcessor.from_pretrained(model_id, target_lang=target_lang) +model = Wav2Vec2ForCTC.from_pretrained(model_id, target_lang=target_lang, ignore_mismatched_sizes=True) +``` + + + +يمكنك تجاهل تحذير مثل: + +```text +لم يتم تهيئة بعض أوزان Wav2Vec2ForCTC من نقطة تفتيش النموذج في facebook/mms-1b-all وهي مهيأة حديثًا لأن الأشكال لم تتطابق: +- lm_head.bias: تم العثور على الشكل torch.Size([154]) في نقطة التفتيش والشكل torch.Size([314]) في النموذج الذي تم تثبيته +- lm_head.weight: تم العثور على الشكل torch.Size([154، 1280]) في نقطة التفتيش والشكل torch.Size([314، 1280]) في النموذج الذي تم تثبيته +يجب عليك على الأرجح تدريب هذا النموذج على مهمة لأسفل لتتمكن من استخدامه للتنبؤات والاستدلال. +``` + + + +إذا كنت تريد استخدام خط أنابيب ASR، فيمكنك تحميل لغة مستهدفة التي اخترتها على النحو التالي: + +```py +from transformers import pipeline + +model_id = "facebook/mms-1b-all" +target_lang = "fra" + +pipe = pipeline(model=model_id, model_kwargs={"target_lang": "fra", "ignore_mismatched_sizes": True}) +``` + +#### الاستدلال + +بعد ذلك، دعونا نلقي نظرة على كيفية تشغيل MMS في الاستدلال وتغيير طبقات المحول بعد استدعاء [`~PretrainedModel.from_pretrained`] + +أولاً، نقوم بتحميل بيانات الصوت بلغات مختلفة باستخدام [Datasets](https://github.com/huggingface/datasets). + +```py +from datasets import load_dataset, Audio + +# English +stream_data = load_dataset("mozilla-foundation/common_voice_13_0", "en", split="test", streaming=True) +stream_data = stream_data.cast_column("audio", Audio(sampling_rate=16000)) +en_sample = next(iter(stream_data))["audio"]["array"] + +# French +stream_data = load_dataset("mozilla-foundation/common_voice_13_0", "fr", split="test", streaming=True) +stream_data = stream_data.cast_column("audio", Audio(sampling_rate=16000)) +fr_sample = next(iter(stream_data))["audio"]["array"] +``` + +بعد ذلك، نقوم بتحميل النموذج والمعالج: + +```py +from transformers import Wav2Vec2ForCTC, AutoProcessor +import torch + +model_id = "facebook/mms-1b-all" + +processor = AutoProcessor.from_pretrained(model_id) +model = Wav2Vec2ForCTC.from_pretrained(model_id) +``` + +الآن نقوم بمعالجة بيانات الصوت، وإرسال بيانات الصوت المعالجة إلى النموذج، ونقوم بنقل إخراج النموذج، تمامًا مثلما نفعل عادةً لـ [`Wav2Vec2ForCTC`]. + +```py +inputs = processor(en_sample, sampling_rate=16_000, return_tensors="pt") + +with torch.no_grad(): +outputs = model(**inputs).logits + +ids = torch.argmax(outputs, dim=-1)[0] +transcription = processor.decode(ids) +# 'joe keton disapproved of films and buster also had reservations about the media' +``` + +الآن يمكننا الاحتفاظ بنفس النموذج في الذاكرة والتبديل ببساطة بين محولات اللغة عن طريق + +استدعاء وظيفة [`~Wav2Vec2ForCTC.load_adapter`] الملائمة للنموذج و [`~Wav2Vec2CTCTokenizer.set_target_lang`] للمعالج. + +نمرر اللغة المستهدفة كإدخال - `"fra"` للفرنسية. + +```py +processor.tokenizer.set_target_lang("fra") +model.load_adapter("fra") + +inputs = processor(fr_sample, sampling_rate=16_000, return_tensors="pt") + +with torch.no_grad(): +outputs = model(**inputs).logits + +ids = torch.argmax(outputs, dim=-1)[0] +transcription = processor.decode(ids) +# "ce dernier est volé tout au long de l'histoire romaine" +``` + +وبنفس الطريقة، يمكن استبدال اللغة لجميع اللغات الأخرى المدعومة. يرجى الاطلاع على: + +```py +processor.tokenizer.vocab.keys() +``` + +لمعرفة جميع اللغات المدعومة. + +للمزيد من تحسين الأداء من نماذج ASR، يمكن استخدام فك تشفير نموذج اللغة. راجع الوثائق [هنا](https://huggingface.co/facebook/mms-1b-all) لمزيد من التفاصيل. + +### تركيب الكلام (TTS) + +يستخدم MMS-TTS نفس بنية النموذج مثل VITS، والتي تم إضافتها إلى 🤗 المحولات في v4.33. يقوم MMS بتدريب نقطة تفتيش نموذج منفصلة لكل من 1100+ لغة في المشروع. يمكن العثور على جميع نقاط التفتيش المتاحة على Hugging Face Hub: [facebook/mms-tts](https://huggingface.co/models?sort=trending&search=facebook%2Fmms-tts)، ووثائق الاستدلال تحت [VITS](https://huggingface.co/docs/transformers/main/en/model_doc/vits). + +#### الاستدلال + +لاستخدام نموذج MMS، قم أولاً بتحديث أحدث إصدار من مكتبة المحولات: + +```bash +pip install --upgrade transformers accelerate +``` + +نظرًا لأن النموذج القائم على التدفق في VITS غير محدد، فمن الجيد تحديد البذور لضمان إمكانية إعادة إنتاج الإخراج. + +- بالنسبة للغات ذات الأبجدية الرومانية، مثل الإنجليزية أو الفرنسية، يمكن استخدام المعالج مباشرةً لمعالجة إدخالات النص. يقوم مثال الكود التالي بتشغيل تمرير إلى الأمام باستخدام نقطة تفتيش MMS-TTS الإنجليزية: + +```python +import torch +from transformers import VitsTokenizer, VitsModel, set_seed + +tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng") +model = VitsModel.from_pretrained("facebook/mms-tts-eng") + +inputs = tokenizer(text="Hello - my dog is cute", return_tensors="pt") + +set_seed(555) # make deterministic + +with torch.no_grad(): + outputs = model(**inputs) + +waveform = outputs.waveform[0] +``` + +يمكن حفظ الموجة الناتجة كملف `.wav`: + +```python +import scipy + +scipy.io.wavfile.write("synthesized_speech.wav", rate=model.config.sampling_rate, data=waveform) +``` + +أو عرضها في Jupyter Notebook / Google Colab: + +```python +from IPython.display import Audio + +Audio(waveform, rate=model.config.sampling_rate) +``` + +بالنسبة للغات معينة ذات أبجديات غير رومانية، مثل العربية أو الماندرين أو الهندية، تكون حزمة [`uroman`](https://github.com/isi-nlp/uroman) + +مطلوب perl لمعالجة إدخالات النص إلى الأبجدية الرومانية. + +يمكنك التحقق مما إذا كنت بحاجة إلى حزمة `uroman` للغة الخاصة بك عن طريق فحص سمة `is_uroman` + +من المعالج المُدرب مسبقًا: + +```python +from transformers import VitsTokenizer + +tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng") +print(tokenizer.is_uroman) +``` + +إذا لزم الأمر، فيجب تطبيق حزمة uroman على إدخالات النص **قبل** تمريرها إلى `VitsTokenizer`، + +حيث أن المعالج لا يدعم حاليًا إجراء المعالجة المسبقة بنفسه. + +للقيام بذلك، قم أولاً باستنساخ مستودع uroman على جهازك المحلي وقم بتعيين متغير bash `UROMAN` إلى المسار المحلي: + +```bash +git clone https://github.com/isi-nlp/uroman.git +cd uroman +export UROMAN=$(pwd) +``` + +بعد ذلك، يمكنك معالجة إدخال النص باستخدام مقتطف الكود التالي. يمكنك إما الاعتماد على استخدام متغير bash + +`UROMAN` للإشارة إلى مستودع uroman، أو يمكنك تمرير دليل uroman كحجة إلى وظيفة `uromaize`: + +```python +import torch +from transformers import VitsTokenizer, VitsModel, set_seed +import os +import subprocess + +tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-kor") +model = VitsModel.from_pretrained("facebook/mms-tts-kor") + +def uromanize(input_string, uroman_path): + """Convert non-Roman strings to Roman using the `uroman` perl package.""" + script_path = os.path.join(uroman_path, "bin", "uroman.pl") + + command = ["perl", script_path] + + process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + # Execute the perl command + stdout, stderr = process.communicate(input=input_string.encode()) + + if process.returncode != 0: + raise ValueError(f"Error {process.returncode}: {stderr.decode()}") + + # Return the output as a string and skip the new-line character at the end + return stdout.decode()[:-1] + +text = "이봐 무슨 일이야" +uromaized_text = uromanize(text, uroman_path=os.environ["UROMAN"]) + +inputs = tokenizer(text=uromaized_text, return_tensors="pt") + +set_seed(555) # make deterministic +with torch.no_grad(): + outputs = model(inputs["input_ids"]) + +waveform = outputs.waveform[0] +``` + +**نصائح:** + +* تم تدريب نقاط تفتيش MMS-TTS على نص مكتوب بأحرف صغيرة بدون علامات ترقيم. بشكل افتراضي، يقوم `VitsTokenizer` *بتطبيع* الإدخالات عن طريق إزالة أي حالة وعلامات ترقيم، لتجنب تمرير الأحرف غير الموجودة في القاموس إلى النموذج. وبالتالي، فإن النموذج لا يميز بين الحالة وعلامات الترقيم، لذا يجب تجنبها في موجه النص. يمكنك تعطيل التطبيع عن طريق تعيين `normalize=False` في مكالمة المعالج، ولكن هذا سيؤدي إلى سلوك غير متوقع ولا يوصى به. +* يمكن تغيير معدل الكلام عن طريق تعيين سمة `model.speaking_rate` إلى قيمة مختارة. وبالمثل، يتم التحكم في عشوائية الضوضاء بواسطة `model.noise_scale`: + +```python +import torch +from transformers import VitsTokenizer, VitsModel, set_seed + +tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng") +model = VitsModel.from_pretrained("facebook/mms-tts-eng") + +inputs = tokenizer(text="Hello - my dog is cute", return_tensors="pt") + +# make deterministic +set_seed(555) + +# make speech faster and more noisy +model.speaking_rate = 1.5 +model.noise_scale = 0.8 + +with torch.no_grad(): + outputs = model(**inputs) +``` +لم يتم ترجمة الأجزاء التي طلبت تركها كما هي. + +### التعرف على اللغة (LID) +تتوفر نماذج LID مختلفة بناءً على عدد اللغات التي يمكنها التعرف عليها - [126](https://huggingface.co/facebook/mms-lid-126)، [256](https://huggingface.co/facebook/mms-lid-256)، [512](https://huggingface.co/facebook/mms-lid-512)، [1024](https://huggingface.co/facebook/mms-lid-1024)، [2048](https://huggingface.co/facebook/mms-lid-2048)، [4017](https://huggingface.co/facebook/mms-lid-4017). + +#### الاستنتاج +أولاً، نقوم بتثبيت مكتبة المحولات وبعض المكتبات الأخرى: + +```bash +pip install torch accelerate datasets[audio] +pip install --upgrade transformers +``` + +بعد ذلك، نقوم بتحميل بعض عينات الصوت عبر `datasets`. تأكد من أن بيانات الصوت تم أخذ عينات منها بمعدل 16000 كيلو هرتز. + +```py +from datasets import load_dataset, Audio + +# English +stream_data = load_dataset("mozilla-foundation/common_voice_13_0", "en", split="test", streaming=True) +stream_data = stream_data.cast_column("audio", Audio(sampling_rate=16000)) +en_sample = next(iter(stream_data))["audio"]["array"] + +# Arabic +stream_data = load_dataset("mozilla-foundation/common_voice_13_0", "ar", split="test", streaming=True) +stream_data = stream_data.cast_column("audio", Audio(sampling_rate=16000)) +ar_sample = next(iter(stream_data))["audio"]["array"] +``` + +بعد ذلك، نقوم بتحميل النموذج والمعالج: + +```py +from transformers import Wav2Vec2ForSequenceClassification, AutoFeatureExtractor +import torch + +model_id = "facebook/mms-lid-126" + +processor = AutoFeatureExtractor.from_pretrained(model_id) +model = Wav2Vec2ForSequenceClassification.from_pretrained(model_id) +``` + +الآن نقوم بمعالجة بيانات الصوت، وإرسال بيانات الصوت المعالجة إلى النموذج لتصنيفها إلى لغة، تمامًا كما نفعل عادةً مع نماذج تصنيف الصوت Wav2Vec2 مثل [ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition](https://huggingface.co/harshit345/xlsr-wav2vec-speech-emotion-recognition) + +```py +# English +inputs = processor(en_sample, sampling_rate=16_000, return_tensors="pt") + +with torch.no_grad(): + outputs = model(**inputs).logits + +lang_id = torch.argmax(outputs, dim=-1)[0].item() +detected_lang = model.config.id2label[lang_id] +# 'eng' + +# Arabic +inputs = processor(ar_sample, sampling_rate=16_000, return_tensors="pt") + +with torch.no_grad(): + outputs = model(**inputs).logits + +lang_id = torch.argmax(outputs, dim=-1)[0].item() +detected_lang = model.config.id2label[lang_id] +# 'ara' +``` + +لعرض جميع اللغات المدعومة لنقطة تفتيش، يمكنك طباعة معرفات اللغة كما يلي: + +```py +processor.id2label.values() +``` + +### النماذج المسبقة التدريب للصوت +تتوفر نماذج مسبقة التدريب لحجمين مختلفين - [300M](https://huggingface.co/facebook/mms-300m)، [1Bil](https://huggingface.co/facebook/mms-1b). + + + +تعتمد بنية MMS for ASR على نموذج Wav2Vec2، راجع [صفحة وثائق Wav2Vec2](wav2vec2) لمزيد من التفاصيل حول كيفية الضبط الدقيق مع النماذج لمختلف المهام الفرعية. + +يستخدم MMS-TTS نفس بنية النموذج مثل VITS، راجع [صفحة وثائق VITS](vits) للرجوع إلى API. + + \ No newline at end of file From 9b438e5f7c8277e93c20551a29ec03acd140e906 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:25 +0300 Subject: [PATCH 507/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mobilebert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mobilebert.md | 151 +++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 docs/source/ar/model_doc/mobilebert.md diff --git a/docs/source/ar/model_doc/mobilebert.md b/docs/source/ar/model_doc/mobilebert.md new file mode 100644 index 00000000000000..b324b12a00e0c4 --- /dev/null +++ b/docs/source/ar/model_doc/mobilebert.md @@ -0,0 +1,151 @@ +# MobileBERT + +## نظرة عامة + +اقترح نموذج MobileBERT في ورقة بحثية بعنوان "MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices" بواسطة Zhiqing Sun وآخرون. إنه محول ثنائي الاتجاه يعتمد على نموذج BERT، والذي تم ضغطه وتسريعه باستخدام عدة طرق. + +الملخص من الورقة البحثية هو كما يلي: + +*حققت معالجة اللغة الطبيعية (NLP) مؤخرًا نجاحًا كبيرًا من خلال استخدام نماذج ضخمة مسبقة التدريب تحتوي على مئات الملايين من المعلمات. ومع ذلك، تعاني هذه النماذج من أحجام ضخمة ووقت استجابة مرتفع، مما يجعل من الصعب نشرها على الأجهزة المحمولة المحدودة الموارد. في هذه الورقة، نقترح MobileBERT لضغط وتسريع نموذج BERT الشهير. مثل BERT الأصلي، فإن MobileBERT لا يعتمد على المهام، أي أنه يمكن تطبيقه بشكل عام على مختلف مهام NLP اللاحقة من خلال الضبط الدقيق البسيط. بشكل أساسي، MobileBERT هو إصدار مضغوط من BERT_LARGE، ولكنه مزود بهياكل عنق الزجاجة وتوازن مدروس بعناية بين الاهتمامات الذاتية والشبكات الأمامية الخلفية. لتدريب MobileBERT، نقوم أولاً بتدريب نموذج المعلم المصمم خصيصًا، وهو نموذج BERT_LARGE المدمج بهيكل عنق الزجاجة المعكوس. بعد ذلك، نقوم بنقل المعرفة من هذا المعلم إلى MobileBERT. تظهر الدراسات التجريبية أن MobileBERT أصغر 4.3 مرة وأسرع 5.5 مرة من BERT_BASE مع تحقيق نتائج تنافسية على معايير معروفة جيدًا. في مهام الاستدلال اللغوي الطبيعي لـ GLUE، يحقق MobileBERT نتيجة GLUEscore تبلغ 77.7 (أقل بـ 0.6 من BERT_BASE)، و62 مللي ثانية من وقت الاستجابة على هاتف Pixel 4. في مهمة SQuAD v1.1/v2.0 للإجابة على الأسئلة، يحقق MobileBERT نتيجة 90.0/79.2 على مجموعة البيانات الاختبارية (أعلى بـ 1.5/2.1 من BERT_BASE).* + +تمت المساهمة بهذا النموذج بواسطة [vshampor](https://huggingface.co/vshampor). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/google-research/tree/master/mobilebert). + +## نصائح الاستخدام + +- MobileBERT هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بإضافة حشو إلى المدخلات من اليمين بدلاً من اليسار. + +- يشبه MobileBERT نموذج BERT، وبالتالي يعتمد على هدف نمذجة اللغة المقنعة (MLM). لذلك، فهو فعال في التنبؤ بالرموز المقنعة وفي فهم اللغة الطبيعية بشكل عام، ولكنه ليس الأمثل لتوليد النصوص. النماذج التي تم تدريبها بهدف نمذجة اللغة السببية (CLM) أفضل في هذا الصدد. + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار من متعدد](../tasks/multiple_choice) + +## MobileBertConfig + +[[autodoc]] MobileBertConfig + +## MobileBertTokenizer + +[[autodoc]] MobileBertTokenizer + +## MobileBertTokenizerFast + +[[autodoc]] MobileBertTokenizerFast + +## مخرجات MobileBert المحددة + +[[autodoc]] models.mobilebert.modeling_mobilebert.MobileBertForPreTrainingOutput + +[[autodoc]] models.mobilebert.modeling_tf_mobilebert.TFMobileBertForPreTrainingOutput + + + + +## MobileBertModel + +[[autodoc]] MobileBertModel + +- forward + +## MobileBertForPreTraining + +[[autodoc]] MobileBertForPreTraining + +- forward + +## MobileBertForMaskedLM + +[[autodoc]] MobileBertForMaskedLM + +- forward + +## MobileBertForNextSentencePrediction + +[[autodoc]] MobileBertForNextSentencePrediction + +- forward + +## MobileBertForSequenceClassification + +[[autodoc]] MobileBertForSequenceClassification + +- forward + +## MobileBertForMultipleChoice + +[[autodoc]] MobileBertForMultipleChoice + +- forward + +## MobileBertForTokenClassification + +[[autodoc]] MobileBertForTokenClassification + +- forward + +## MobileBertForQuestionAnswering + +[[autodoc]] MobileBertForQuestionAnswering + +- forward + + + + +## TFMobileBertModel + +[[autodoc]] TFMobileBertModel + +- call + +## TFMobileBertForPreTraining + +[[autodoc]] TFMobileBertForPreTraining + +- call + +## TFMobileBertForMaskedLM + +[[autodoc]] TFMobileBertForMaskedLM + +- call + +## TFMobileBertForNextSentencePrediction + +[[autodoc]] TFMobileBertForNextSentencePrediction + +- call + +## TFMobileBertForSequenceClassification + + +[[autodoc]] TFMobileBertForSequenceClassification + +- call + +## TFMobileBertForMultipleChoice + + +[[autodoc]] TFMobileBertForMultipleChoice + +- call + +## TFMobileBertForTokenClassification + +[[autodoc]] TFMobileBertForTokenClassification + +- call + +## TFMobileBertForQuestionAnswering + +[[autodoc]] TFMobileBertForQuestionAnswering + +- call + + + + \ No newline at end of file From c340293a0c533df20d37054a81e60b2d31797f19 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:27 +0300 Subject: [PATCH 508/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mobilenet=5Fv1.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mobilenet_v1.md | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/source/ar/model_doc/mobilenet_v1.md diff --git a/docs/source/ar/model_doc/mobilenet_v1.md b/docs/source/ar/model_doc/mobilenet_v1.md new file mode 100644 index 00000000000000..c0c2122662069f --- /dev/null +++ b/docs/source/ar/model_doc/mobilenet_v1.md @@ -0,0 +1,73 @@ +# MobileNet V1 + +## نظرة عامة + +تم اقتراح نموذج MobileNet في [MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications](https://arxiv.org/abs/1704.04861) بواسطة Andrew G. Howard, Menglong Zhu, Bo Chen, Dmitry Kalenichenko, Weijun Wang, Tobias Weyand, Marco Andreetto, Hartwig Adam. + +الملخص من الورقة هو ما يلي: + +*نقدم فئة من النماذج الفعالة تسمى MobileNets لتطبيقات الرؤية المتنقلة والمدمجة. تستند MobileNets إلى بنية مبسطة تستخدم التلافيف قابلة للفصل بعمق لبناء شبكات عصبية عميقة خفيفة الوزن. نقدم اثنين من المعلمات الفائقة العالمية البسيطة التي تُوازن بكفاءة بين الكمون والدقة. تسمح هذه المعلمات الفائقة لمُنشئ النموذج باختيار الحجم المناسب للنموذج لتطبيقه بناءً على قيود المشكلة. نقدم تجارب مكثفة على مقايضات الموارد والدقة ونظهر أداءً قويًا مقارنة بالنماذج الشائعة الأخرى على تصنيف ImageNet. ثم نثبت فعالية MobileNets عبر مجموعة واسعة من التطبيقات والاستخدامات بما في ذلك اكتشاف الأشياء، والتصنيف الدقيق، وسمات الوجه، والتحديد الجغرافي واسع النطاق.* + +تمت المساهمة بهذا النموذج من قبل [matthijs](https://huggingface.co/Matthijs). يمكن العثور على الكود والأوزان الأصلية [هنا](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md). + +## نصائح الاستخدام + +- تتم تسمية نقاط التفتيش باسم **mobilenet_v1_ *depth* _ *size***، على سبيل المثال **mobilenet_v1_1.0_224**، حيث **1.0** هو مضاعف العمق (يُشار إليه أحيانًا باسم "alpha" أو مضاعف العرض) و**224** هو دقة صور الإدخال التي تم تدريب النموذج عليها. + +- على الرغم من أن نقطة التفتيش مدربة على صور بحجم محدد، إلا أن النموذج سيعمل على الصور بأي حجم. أصغر حجم صورة مدعوم هو 32x32. + +- يمكن للمرء استخدام [`MobileNetV1ImageProcessor`] لتحضير الصور للنموذج. + +- تم تدريب نقاط تفتيش تصنيف الصور المتاحة مسبقًا على [ImageNet-1k](https://huggingface.co/datasets/imagenet-1k) (يشار إليها أيضًا باسم ILSVRC 2012، وهي مجموعة من 1.3 مليون صورة و1000 فئة). ومع ذلك، فإن النموذج يتنبأ بـ 1001 فئة: 1000 فئة من ImageNet بالإضافة إلى فئة "خلفية" إضافية (الفهرس 0). + +- تستخدم نقاط التفتيش TensorFlow الأصلية قواعد ترميز مختلفة عن PyTorch، مما يتطلب من النموذج تحديد مقدار الترميز في وقت الاستدلال، حيث يعتمد ذلك على حجم صورة الإدخال. لاستخدام سلوك الترميز PyTorch الأصلي، قم بإنشاء [`MobileNetV1Config`] باستخدام `tf_padding = False`. + +الميزات غير المدعومة: + +- تخرج [`MobileNetV1Model`] إصدارًا مجمعًا عالميًا من الحالة الأخيرة المخفية. في النموذج الأصلي، من الممكن استخدام طبقة تجميع متوسط 7x7 مع قفزة 2 بدلاً من التجميع العالمي. بالنسبة للإدخالات الأكبر، فإن هذا يعطي إخراجًا مجمعًا أكبر من بكسل 1x1. لا يدعم التنفيذ الخاص بـ HuggingFace ذلك. + +- من غير الممكن حاليًا تحديد `output_stride`. بالنسبة لخطوات الإخراج الأصغر، يستدعي النموذج الأصلي التلافيف المنتفخة لمنع تقليل الدقة المكانية بشكل أكبر. دقة إخراج نموذج HuggingFace هي دائمًا 32. + +- تتضمن نقاط تفتيش TensorFlow الأصلية نماذج كمية. لا ندعم هذه النماذج لأنها تتضمن عمليات "FakeQuantization" إضافية لإلغاء تكمية الأوزان. + +- من الشائع استخراج الإخراج من الطبقات النقطية عند المؤشرات 5 و11 و12 و13 لأغراض المصب. باستخدام `output_hidden_states=True` يعيد إخراج من جميع الطبقات المتوسطة. لا توجد حاليًا طريقة للحد من ذلك إلى طبقات محددة. + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها برمز 🌎) لمساعدتك في البدء باستخدام MobileNetV1. + + + +- [`MobileNetV1ForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنقوم بمراجعته! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## MobileNetV1Config + +[[autodoc]] MobileNetV1Config + +## MobileNetV1FeatureExtractor + +[[autodoc]] MobileNetV1FeatureExtractor + +- preprocess + +## MobileNetV1ImageProcessor + +[[autodoc]] MobileNetV1ImageProcessor + +- preprocess + +## MobileNetV1Model + +[[autodoc]] MobileNetV1Model + +- forward + +## MobileNetV1ForImageClassification + +[[autodoc]] MobileNetV1ForImageClassification + +- forward \ No newline at end of file From 2f4497007a274e0d91af653d1fdfd60a3f63dc00 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:28 +0300 Subject: [PATCH 509/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mobilenet=5Fv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mobilenet_v2.md | 91 ++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docs/source/ar/model_doc/mobilenet_v2.md diff --git a/docs/source/ar/model_doc/mobilenet_v2.md b/docs/source/ar/model_doc/mobilenet_v2.md new file mode 100644 index 00000000000000..72d137c2fcca5d --- /dev/null +++ b/docs/source/ar/model_doc/mobilenet_v2.md @@ -0,0 +1,91 @@ +# MobileNet V2 + +## نظرة عامة + +اقترح نموذج MobileNet في [MobileNetV2: Inverted Residuals and Linear Bottlenecks](https://arxiv.org/abs/1801.04381) بواسطة Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen. + +الملخص من الورقة هو ما يلي: + +> "في هذه الورقة، نصف بنية جوال جديدة، MobileNetV2، والتي تحسن أداء الطراز الجوال الرائد في العديد من المهام والمعايير، وكذلك عبر طيف من أحجام النماذج المختلفة. كما نصف الطرق الفعالة لتطبيق هذه النماذج المتنقلة على اكتشاف الكائنات في إطار عمل جديد نسميه SSDLite. بالإضافة إلى ذلك، نوضح كيفية بناء نماذج التجزئة الدلالية للجوال من خلال شكل مخفض من DeepLabv3 والذي نسميه Mobile DeepLabv3. + +> تستند بنية MobileNetV2 على بنية بقايا مقلوبة حيث تكون طبقات عنق الزجاجة الضيقة هي المدخلات والمخرجات من كتلة البقايا، على عكس نماذج البقايا التقليدية التي تستخدم تمثيلات موسعة في المدخلات. يستخدم MobileNetV2 عمليات الضرب المعمقة خفيفة الوزن لتصفية الميزات في طبقة التوسيع الوسيطة. بالإضافة إلى ذلك، نجد أنه من المهم إزالة اللاخطيات في الطبقات الضيقة من أجل الحفاظ على قوة التمثيل. نثبت أن هذا يحسن الأداء ويقدم بديهية أدت إلى هذا التصميم. وأخيرًا، يسمح نهجنا بفك اقتران مجالات الإدخال/الإخراج من تعبيرية التحويل، مما يوفر إطار عمل مناسب لمزيد من التحليل. نقيس أدائنا على تصنيف ImageNet، وCOCO object detection، وVOC image segmentation. نقيم المقايضات بين الدقة، وعدد العمليات التي تقاس بواسطة الضربات الإضافية (MAdd)، وكذلك عدد المعلمات." + +ساهم بهذا النموذج [matthijs](https://huggingface.co/Matthijs). يمكن العثور على الكود والأوزان الأصلية [هنا للنموذج الرئيسي](https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet) و[هنا لـ DeepLabV3+](https://github.com/tensorflow/models/tree/master/research/deeplab). + +## نصائح الاستخدام + +- تسمى نقاط التفتيش **mobilenet_v2_*depth*_*size***، على سبيل المثال **mobilenet_v2_1.0_224**، حيث **1.0** هو مضاعف العمق (يشار إليه أحيانًا باسم "alpha" أو مضاعف العرض) و**224** هو دقة صور الإدخال التي تم تدريب النموذج عليها. + +- على الرغم من أن نقطة التفتيش مدربة على صور بحجم محدد، إلا أن النموذج سيعمل على صور بأي حجم. أصغر حجم صورة مدعوم هو 32x32. + +- يمكن للمرء استخدام [`MobileNetV2ImageProcessor`] لتحضير الصور للنموذج. + +- تم تدريب نقاط التفتيش للتصنيف الصوري المتاحة مسبقًا على [ImageNet-1k](https://huggingface.co/datasets/imagenet-1k) (يشار إليها أيضًا باسم ILSVRC 2012، وهي مجموعة من 1.3 مليون صورة و1000 فئة). ومع ذلك، يتنبأ النموذج بـ 1001 فئة: 1000 فئة من ImageNet بالإضافة إلى فئة "خلفية" إضافية (الفهرس 0). + +- يستخدم نموذج التجزئة الدلالية رأس [DeepLabV3+](https://arxiv.org/abs/1802.02611). تم تدريب نقاط التفتيش للتجزئة الدلالية المتاحة مسبقًا على [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/). + +- تستخدم نقاط التفتيش TensorFlow الأصلية قواعد تراص مختلفة عن PyTorch، مما يتطلب من النموذج تحديد مقدار التراص في وقت الاستدلال، حيث يعتمد ذلك على حجم صورة الإدخال. لاستخدام سلوك التراص PyTorch الأصلي، قم بإنشاء [`MobileNetV2Config`] مع `tf_padding = False`. + +الميزات غير المدعومة: + +- تخرج [`MobileNetV2Model`] إصدارًا مجمعًا عالميًا من الحالة المخفية الأخيرة. في النموذج الأصلي، يمكن استخدام طبقة تجميع متوسط مع نافذة ثابتة بحجم 7x7 وخطوة 1 بدلاً من التجميع العالمي. بالنسبة للمدخلات الأكبر من حجم الصورة الموصى به، فإن هذا يعطي إخراجًا مجمعًا أكبر من 1x1. لا يدعم تنفيذ Hugging Face ذلك. + +- تتضمن نقاط تفتيش TensorFlow الأصلية نماذج كمية. لا ندعم هذه النماذج لأنها تتضمن عمليات "FakeQuantization" إضافية لإلغاء تكمية الأوزان. + +- من الشائع استخراج الإخراج من طبقات التوسيع عند المؤشرات 10 و13، وكذلك الإخراج من طبقة الضرب النهائي 1x1، لأغراض المصب. باستخدام `output_hidden_states=True` يعيد الإخراج من جميع الطبقات المتوسطة. لا توجد حاليًا طريقة للحد من ذلك إلى طبقات محددة. + +- لا يستخدم رأس DeepLabV3+ للتجزئة الدلالية طبقة الضرب النهائية من العمود الفقري، ولكن يتم حساب هذه الطبقة على أي حال. لا توجد حاليًا طريقة لإخبار [`MobileNetV2Model`] بالطبقة التي يجب تشغيلها. + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام MobileNetV2. + + + +- [`MobileNetV2ForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهام التصنيف الصوري](../tasks/image_classification) + +**التجزئة الدلالية** + +- [دليل مهام التجزئة الدلالية](../tasks/semantic_segmentation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + +## MobileNetV2Config + +[[autodoc]] MobileNetV2Config + +## MobileNetV2FeatureExtractor + +[[autodoc]] MobileNetV2FeatureExtractor + +- preprocess + +- post_process_semantic_segmentation + +## MobileNetV2ImageProcessor + +[[autodoc]] MobileNetV2ImageProcessor + +- preprocess + +- post_process_semantic_segmentation + +## MobileNetV2Model + +[[autodoc]] MobileNetV2Model + +- forward + +## MobileNetV2ForImageClassification + +[[autodoc]] MobileNetV2ForImageClassification + +- forward + +## MobileNetV2ForSemanticSegmentation + +[[autodoc]] MobileNetV2ForSemanticSegmentation + +- forward \ No newline at end of file From 162a3319bdae8998a17e536fc7c13ab9bd7d86ae Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:30 +0300 Subject: [PATCH 510/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mobilevit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mobilevit.md | 127 ++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 docs/source/ar/model_doc/mobilevit.md diff --git a/docs/source/ar/model_doc/mobilevit.md b/docs/source/ar/model_doc/mobilevit.md new file mode 100644 index 00000000000000..007c9ae385b767 --- /dev/null +++ b/docs/source/ar/model_doc/mobilevit.md @@ -0,0 +1,127 @@ +# MobileViT + +## نظرة عامة + +اقترح Sachin Mehta و Mohammad Rastegari نموذج MobileViT في [MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer](https://arxiv.org/abs/2110.02178). ويقدم MobileViT طبقة جديدة تحل محل المعالجة المحلية في التحويلات الضمنية بمعالجة عالمية باستخدام المحولات. + +الملخص المستخرج من الورقة هو كما يلي: + +> "تعد الشبكات العصبية التلافيفية الخفيفة (CNNs) هي المعيار الفعلي لمهام الرؤية على الأجهزة المحمولة. تسمح لهم تحيزاتهم الفراغية بتعلم التمثيلات باستخدام عدد أقل من المعلمات عبر مهام الرؤية المختلفة. ومع ذلك، هذه الشبكات محلية مكانياً. لتعلم التمثيلات العالمية، تم اعتماد محولات الرؤية القائمة على الاهتمام الذاتي (ViTs). على عكس CNNs، تعد ViTs ثقيلة الوزن. في هذه الورقة، نسأل السؤال التالي: هل من الممكن الجمع بين نقاط القوة في CNNs و ViTs لبناء شبكة خفيفة الوزن ومنخفضة الكمون لمهام الرؤية على الأجهزة المحمولة؟ ولهذه الغاية، نقدم MobileViT، وهو محول رؤية خفيف الوزن وعام الأغراض للأجهزة المحمولة. يقدم MobileViT منظورًا مختلفًا للمعالجة العالمية للمعلومات باستخدام المحولات، أي المحولات كتحويلات. تظهر نتائجنا أن MobileViT يتفوق بشكل كبير على الشبكات القائمة على CNN و ViT عبر مهام ومجموعات بيانات مختلفة. على مجموعة بيانات ImageNet-1k، يحقق MobileViT دقة أعلى بنسبة 78.4٪ باستخدام حوالي 6 ملايين معلمة، وهو ما يمثل زيادة في الدقة بنسبة 3.2٪ و 6.2٪ عن MobileNetv3 (القائم على CNN) و DeIT (القائم على ViT) لعدد مماثل من المعلمات. في مهمة كشف الأجسام MS-COCO، يكون MobileViT أكثر دقة بنسبة 5.7٪ من MobileNetv3 لعدد مماثل من المعلمات." + +ساهم [matthijs](https://huggingface.co/Matthijs) بهذا النموذج. ساهم [sayakpaul](https://huggingface.co/sayakpaul) بنسخة TensorFlow من النموذج. يمكن العثور على الكود والأوزان الأصلية [هنا](https://github.com/apple/ml-cvnets). + +## نصائح الاستخدام + +- يشبه MobileViT شبكات CNN أكثر من نموذج المحول. فهو لا يعمل على بيانات التسلسل، ولكن على دفعات من الصور. على عكس ViT، لا توجد تضمينات. ينتج نموذج العمود الفقري خريطة ميزات. يمكنك اتباع [هذا البرنامج التعليمي](https://keras.io/examples/vision/mobilevit) للحصول على مقدمة خفيفة الوزن. + +- يمكن للمرء استخدام [`MobileViTImageProcessor`] لتحضير الصور للنموذج. لاحظ أنه إذا قمت بمعالجة مسبقة خاصة بك، فإن نقاط التحقق المسبقة التدريب تتوقع أن تكون الصور في ترتيب بكسل BGR (ليس RGB). + +- تم تدريب نقاط التحقق لتصنيف الصور المتاحة مسبقًا على [ImageNet-1k](https://huggingface.co/datasets/imagenet-1k) (يشار إليها أيضًا باسم ILSVRC 2012، وهي مجموعة من 1.3 مليون صورة و1000 فئة). + +- يستخدم نموذج التجزئة رأس [DeepLabV3](https://arxiv.org/abs/1706.05587). تم تدريب نقاط التحقق المتاحة لتجزئة الصور الدلالية مسبقًا على [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/). + +- كما يوحي الاسم، تم تصميم MobileViT لتقديم أداء وكفاءة على الهواتف المحمولة. تتوافق إصدارات TensorFlow من نماذج MobileViT تمامًا مع [TensorFlow Lite](https://www.tensorflow.org/lite). + +يمكنك استخدام الكود التالي لتحويل نقطة تحقق MobileViT (سواء كانت تصنيف الصور أو التجزئة الدلالية) لتوليد نموذج TensorFlow Lite: + +```py +from transformers import TFMobileViTForImageClassification +import tensorflow as tf + +model_ckpt = "apple/mobilevit-xx-small" +model = TFMobileViTForImageClassification.from_pretrained(model_ckpt) + +converter = tf.lite.TFLiteConverter.from_keras_model(model) +converter.optimizations = [tf.lite.Optimize.DEFAULT] +converter.target_spec.supported_ops = [ + tf.lite.OpsSet.TFLITE_BUILTINS, + tf.lite.OpsSet.SELECT_TF_OPS, +] +tflite_model = converter.convert() +tflite_filename = model_ckpt.split("/")[-1] + ".tflite" +with open(tflite_filename, "wb") as f: + f.write(tflite_model) +``` + +سيكون النموذج الناتج حوالي **MB** مما يجعله مناسبًا للتطبيقات المحمولة حيث يمكن أن تكون الموارد وعرض النطاق الترددي للشبكة محدودة. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها برمز 🌎) لمساعدتك في البدء باستخدام MobileViT. + + + +- [`MobileViTForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهمة تصنيف الصور](../tasks/image_classification) + +**التجزئة الدلالية** + +- [دليل مهام التجزئة الدلالية](../tasks/semantic_segmentation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + +## MobileViTConfig + +[[autodoc]] MobileViTConfig + +## MobileViTFeatureExtractor + +[[autodoc]] MobileViTFeatureExtractor + +- __call__ + +- post_process_semantic_segmentation + +## MobileViTImageProcessor + +[[autodoc]] MobileViTImageProcessor + +- preprocess + +- post_process_semantic_segmentation + + + + +## MobileViTModel + +[[autodoc]] MobileViTModel + +- forward + +## MobileViTForImageClassification + +[[autodoc]] MobileViTForImageClassification + +- forward + +## MobileViTForSemanticSegmentation + +[[autodoc]] MobileViTForSemanticSegmentation + +- forward + + + + +## TFMobileViTModel + +[[autodoc]] TFMobileViTModel + +- call + +## TFMobileViTForImageClassification + +[[autodoc]] TFMobileViTForImageClassification + +- call + +## TFMobileViTForSemanticSegmentation + +[[autodoc]] TFMobileViTForSemanticSegmentation + +- call + + + \ No newline at end of file From af922e89c445e73585d5a75ec07a379f5874d909 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:32 +0300 Subject: [PATCH 511/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mobilevitv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mobilevitv2.md | 44 +++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 docs/source/ar/model_doc/mobilevitv2.md diff --git a/docs/source/ar/model_doc/mobilevitv2.md b/docs/source/ar/model_doc/mobilevitv2.md new file mode 100644 index 00000000000000..412c5432618858 --- /dev/null +++ b/docs/source/ar/model_doc/mobilevitv2.md @@ -0,0 +1,44 @@ +# MobileViTV2 + +## نظرة عامة +اقترح Sachin Mehta و Mohammad Rastegari نموذج MobileViTV2 في [Separable Self-attention for Mobile Vision Transformers](https://arxiv.org/abs/2206.02680). + +MobileViTV2 هو الإصدار الثاني من MobileViT، تم بناؤه عن طريق استبدال الاهتمام الذاتي متعدد الرؤوس في MobileViT باهتمام ذاتي قابل للفصل. + +الملخص من الورقة هو ما يلي: + +> *يمكن لشبكات المحمول للرؤية المحمولة (MobileViT) تحقيق أداء متميز عبر العديد من مهام الرؤية المحمولة، بما في ذلك التصنيف والكشف. على الرغم من أن هذه النماذج لديها عدد أقل من المعلمات، إلا أن لديها تأخيرًا مرتفعًا مقارنة بالنماذج المستندة إلى الشبكات العصبية التلافيفية. عنق الزجاجة الرئيسي للكفاءة في MobileViT هو الاهتمام الذاتي متعدد الرؤوس (MHA) في المحولات، والذي يتطلب تعقيدًا زمنيًا O(k2) فيما يتعلق بعدد الرموز المميزة (أو الرقعات) k. علاوة على ذلك، يتطلب MHA عمليات مكلفة (على سبيل المثال، الضرب المصفوفي على مستوى الدفعة) لحساب الاهتمام الذاتي، مما يؤثر على التأخير في الأجهزة المحدودة الموارد. تقدم هذه الورقة طريقة اهتمام ذاتي قابلة للفصل ذات تعقيد خطي، أي O(k). إحدى السمات البسيطة والفعالة للأسلوب المقترح هي أنها تستخدم عمليات عنصر-لحساب الاهتمام الذاتي، مما يجعلها خيارًا جيدًا للأجهزة المحدودة الموارد. النموذج المحسن، MobileViTV2، هو الأفضل في فئته على عدة مهام رؤية محمولة، بما في ذلك تصنيف الكائنات ImageNet وكشف الكائنات MS-COCO. وبحوالي ثلاثة ملايين معلمة، يحقق MobileViTV2 دقة أعلى-1 تبلغ 75.6٪ على مجموعة بيانات ImageNet، متفوقًا على MobileViT بحوالي 1٪ مع تشغيل أسرع 3.2× على جهاز محمول.* + +تمت المساهمة بهذا النموذج من قبل [shehan97](https://huggingface.co/shehan97). يمكن العثور على الكود الأصلي [هنا](https://github.com/apple/ml-cvnets). + +## نصائح الاستخدام + +- MobileViTV2 يشبه CNN أكثر من نموذج Transformer. فهو لا يعمل على بيانات التسلسل ولكن على دفعات من الصور. على عكس ViT، لا توجد تضمينات. ينتج نموذج العمود الفقري خريطة ميزات. + +- يمكن للمرء استخدام [`MobileViTImageProcessor`] لتحضير الصور للنموذج. لاحظ أنه إذا قمت بمعالجة مسبقة خاصة بك، فإن نقاط التحقق المسبقة التدريب تتوقع أن تكون الصور في ترتيب بكسل BGR (وليس RGB). + +- تم تدريب نقاط التصنيف الصورية المتاحة مسبقًا على [ImageNet-1k](https://huggingface.co/datasets/imagenet-1k) (يشار إليها أيضًا باسم ILSVRC 2012، وهي عبارة عن 1.3 مليون صورة و1000 فئة). + +- يستخدم نموذج التجزئة رأس [DeepLabV3](https://arxiv.org/abs/1706.05587). تم تدريب نقاط التحقق من التجزئة الدلالية المتاحة مسبقًا على [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/). + +## MobileViTV2Config + +[[autodoc]] MobileViTV2Config + +## MobileViTV2Model + +[[autodoc]] MobileViTV2Model + +- forward + +## MobileViTV2ForImageClassification + +[[autodoc]] MobileViTV2ForImageClassification + +- forward + +## MobileViTV2ForSemanticSegmentation + +[[autodoc]] MobileViTV2ForSemanticSegmentation + +- forward \ No newline at end of file From d27cf229afe9a023ce0ef4fcbf354bf4ba934453 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:34 +0300 Subject: [PATCH 512/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mpnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mpnet.md | 122 ++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/source/ar/model_doc/mpnet.md diff --git a/docs/source/ar/model_doc/mpnet.md b/docs/source/ar/model_doc/mpnet.md new file mode 100644 index 00000000000000..057cbcb4dd5cd7 --- /dev/null +++ b/docs/source/ar/model_doc/mpnet.md @@ -0,0 +1,122 @@ +# MPNet + +## نظرة عامة +اقترح نموذج MPNet في ورقة "MPNet: Masked and Permuted Pre-training for Language Understanding" بواسطة كايتاو سونغ، و شو تان، و تاو تشين، و جيانفينغ لو، و تاي-يان ليو. + +يعتمد MPNet طريقةً جديدةً للتعلم المسبق، تسمى نمذجة اللغة المقنعة والمرتبة، للاستفادة من مزايا نمذجة اللغة المقنعة والمرتبة لفهم اللغة الطبيعية. + +ملخص الورقة هو كما يلي: + +> "يعتمد BERT نمذجة اللغة المقنعة (MLM) للتعلم المسبق وهو أحد أكثر نماذج التعلم المسبق نجاحًا. نظرًا لأن BERT يتجاهل الاعتماد المتبادل بين الرموز المتوقعة، فقد قدم XLNet نمذجة اللغة المرتبة (PLM) للتعلم المسبق لمعالجة هذه المشكلة. ومع ذلك، لا يستفيد XLNet من المعلومات الكاملة لموضع الجملة، وبالتالي يعاني من عدم الاتساق في الموضع بين التعلم المسبق والضبط الدقيق. في هذه الورقة، نقترح MPNet، وهي طريقة تعلم مسبق جديدة تستفيد من مزايا BERT و XLNet وتتجنب قيودها. يستفيد MPNet من الاعتماد المتبادل بين الرموز المتوقعة من خلال نمذجة اللغة المرتبة (مقابل MLM في BERT)، ويأخذ معلومات الموضع المساعدة كإدخال لجعل النموذج يرى جملة كاملة، وبالتالي تقليل عدم الاتساق في الموضع (مقابل PLM في XLNet). نقوم بتدريب MPNet مسبقًا على مجموعة بيانات واسعة النطاق (أكثر من 160 جيجابايت من نصوص الفيلق) ونضبطها بشكل دقيق على مجموعة متنوعة من المهام السفلية (مثل GLUE و SQuAD، إلخ). تُظهر النتائج التجريبية أن MPNet يتفوق على MLM و PLM بهامش كبير، ويحقق نتائج أفضل في هذه المهام مقارنة بطرق التعلم المسبق السابقة (مثل BERT و XLNet و RoBERTa) في ظل نفس إعداد النموذج." + +يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/MPNet). + +## نصائح الاستخدام +لا يحتوي MPNet على `token_type_ids`، لذا لا تحتاج إلى الإشارة إلى الرمز الذي ينتمي إلى الجزء. ما عليك سوى فصل أجزاءك باستخدام رمز الفصل `tokenizer.sep_token` (أو `[sep]`). + +## الموارد + +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## MPNetConfig + +[[autodoc]] MPNetConfig + +## MPNetTokenizer + +[[autodoc]] MPNetTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## MPNetTokenizerFast + +[[autodoc]] MPNetTokenizerFast + + + + +## MPNetModel + +[[autodoc]] MPNetModel + +- forward + +## MPNetForMaskedLM + +[[autodoc]] MPNetForMaskedLM + +- forward + +## MPNetForSequenceClassification + +[[autodoc]] MPNetForSequenceClassification + +- forward + +## MPNetForMultipleChoice + +[[autodoc]] MPNetForMultipleChoice + +- forward + +## MPNetForTokenClassification + +[[autodoc]] MPNetForTokenClassification + +- forward + +## MPNetForQuestionAnswering + +[[autodoc]] MPNetForQuestionAnswering + +- forward + + + + +## TFMPNetModel + +[[autodoc]] TFMPNetModel + +- call + +## TFMPNetForMaskedLM + +[[autodoc]] TFMPNetForMaskedLM + +- call + +## TFMPNetForSequenceClassification + +[[autodoc]] TFMPNetForSequenceClassification + +- call + +## TFMPNetForMultipleChoice + +[[autodoc]] TFMPNetForMultipleChoice + +- call + +## TFMPNetForTokenClassification + +[[autodoc]] TFMPNetForTokenClassification + +- call + +## TFMPNetForQuestionAnswering + +[[autodoc]] TFMPNetForQuestionAnswering + +- call + + + + \ No newline at end of file From 2d3ad9c0a7f3c6f99905d5fdd41fed4315ca9933 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:35 +0300 Subject: [PATCH 513/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mpt.md | 59 +++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/mpt.md diff --git a/docs/source/ar/model_doc/mpt.md b/docs/source/ar/model_doc/mpt.md new file mode 100644 index 00000000000000..4a059fda9d8134 --- /dev/null +++ b/docs/source/ar/model_doc/mpt.md @@ -0,0 +1,59 @@ +# MPT + +## نظرة عامة +اقترح فريق [MosaicML](https://www.mosaicml.com/) نموذج MPT وأطلقه بأحجام ومتغيرات دقيقة متعددة. ونماذج MPT عبارة عن سلسلة من نماذج اللغة المفتوحة المصدر والقابلة للاستخدام تجاريًا التي تم تدريبها مسبقًا على 1T من الرموز. + +نماذج MPT هي محولات فك تشفير على غرار GPT مع العديد من التحسينات: تطبيقات الطبقة المُحسَّنة للأداء، وتغييرات معمارية توفر استقرارًا أكبر للتدريب، وإزالة حدود طول السياق عن طريق استبدال embeddings الموضعية بـ ALiBi. + +- MPT base: نماذج MPT base التي تم تدريبها مسبقًا على التنبؤ بالرمز التالي +- MPT instruct: نماذج MPT base التي تمت معايرتها بدقة على مهام تعتمد على التعليمات +- MPT storywriter: نماذج MPT base التي تمت معايرتها بدقة لمدة 2500 خطوة على مقتطفات من 65000 رمز من كتب الخيال الموجودة في مجموعة كتب books3، مما يمكن النموذج من التعامل مع التسلسلات الطويلة جدًا + +يمكن العثور على الكود الأصلي في مستودع [`llm-foundry`](https://github.com/mosaicml/llm-foundry/tree/main). + +اقرأ المزيد عنه [في منشور المدونة](https://www.mosaicml.com/blog/mpt-7b) + +## نصائح الاستخدام + +- تعرف على بعض التقنيات وراء تدريب النموذج [في هذا القسم من مستودع llm-foundry](https://github.com/mosaicml/llm-foundry/blob/main/TUTORIAL.md#faqs) +- إذا كنت تريد استخدام الإصدار المتقدم من النموذج (نواة Triton، تكامل Flash attention المباشر)، فيمكنك استخدام تنفيذ النموذج الأصلي عن طريق إضافة `trust_remote_code=True` عند استدعاء `from_pretrained`. + +## الموارد + +- [دفتر ضبط الدقة](https://colab.research.google.com/drive/1HCpQkLL7UXW8xJUJJ29X7QAeNJKO0frZ?usp=sharing) حول كيفية ضبط نموذج MPT-7B بدقة على مثيل Google Colab مجاني لتحويل النموذج إلى دردشة آلية. + +## MptConfig + +[[autodoc]] MptConfig + +- all + +## MptModel + +[[autodoc]] MptModel + +- forward + +## MptForCausalLM + +[[autodoc]] MptForCausalLM + +- forward + +## MptForSequenceClassification + +[[autodoc]] MptForSequenceClassification + +- forward + +## MptForTokenClassification + +[[autodoc]] MptForTokenClassification + +- forward + +## MptForQuestionAnswering + +[[autodoc]] MptForQuestionAnswering + +- forward \ No newline at end of file From 573be7b3f945633ac6fe362a92bdba1896b7dcdf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:37 +0300 Subject: [PATCH 514/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mra.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mra.md | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/source/ar/model_doc/mra.md diff --git a/docs/source/ar/model_doc/mra.md b/docs/source/ar/model_doc/mra.md new file mode 100644 index 00000000000000..230a4dbb40aea9 --- /dev/null +++ b/docs/source/ar/model_doc/mra.md @@ -0,0 +1,51 @@ +# MRA + +## نظرة عامة +تم اقتراح نموذج MRA في [تحليل متعدد الدقة (MRA) للاهتمام الذاتي التقريبي](https://arxiv.org/abs/2207.10284) بواسطة Zhanpeng Zeng، وSourav Pal، وJeffery Kline، وGlenn M Fung، و Vikas Singh. + +مقدمة الورقة البحثية هي كما يلي: + +* برزت نماذج Transformers كنموذج مفضل للعديد من المهام في معالجة اللغات الطبيعية والرؤية. وقد حددت الجهود الأخيرة في تدريب ونشر Transformers بكفاءة أكبر العديد من الاستراتيجيات لتقريب مصفوفة الاهتمام الذاتي، وهي وحدة رئيسية في بنية Transformer. تشمل الأفكار الفعالة أنماط ندرة محددة مسبقًا مختلفة، وتوسعات الأساس منخفضة الرتبة، ومجموعات منها. في هذه الورقة، نعيد النظر في مفاهيم تحليل متعدد الدقة (MRA) الكلاسيكية مثل Wavelets، والتي لا تزال قيمتها المحتملة في هذا السياق غير مستغلة بالكامل حتى الآن. نحن نثبت أن التقريبات البسيطة القائمة على التعليقات الفعلية وخيارات التصميم التي تسترشد بتحديات الأجهزة والتنفيذ الحديثة، تؤدي في النهاية إلى نهج قائم على MRA للاهتمام الذاتي بأداء ممتاز عبر معظم المعايير المثيرة للاهتمام. نقوم بمجموعة واسعة من التجارب ونثبت أن هذا المخطط متعدد الدقة يتفوق على معظم مقترحات الاهتمام الذاتي الكفء ويفضل لكل من التسلسلات القصيرة والطويلة. الكود متاح على https://github.com/mlpen/mra-attention.* + +تمت المساهمة بهذا النموذج من قبل [novice03](https://huggingface.co/novice03). +يمكن العثور على الكود الأصلي [هنا](https://github.com/mlpen/mra-attention). + +## MraConfig + +[[autodoc]] MraConfig + +## MraModel + +[[autodoc]] MraModel + +- forward + +## MraForMaskedLM + +[[autodoc]] MraForMaskedLM + +- forward + +## MraForSequenceClassification + +[[autodoc]] MraForSequenceClassification + +- forward + +## MraForMultipleChoice + +[[autodoc]] MraForMultipleChoice + +- forward + +## MraForTokenClassification + +[[autodoc]] MraForTokenClassification + +- forward + +## MraForQuestionAnswering + +[[autodoc]] MraForQuestionAnswering + +- forward \ No newline at end of file From bf9c86dc280156f1799cc4f8c3edd3b70c7ccb3f Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:39 +0300 Subject: [PATCH 515/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mt5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mt5.md | 111 ++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 docs/source/ar/model_doc/mt5.md diff --git a/docs/source/ar/model_doc/mt5.md b/docs/source/ar/model_doc/mt5.md new file mode 100644 index 00000000000000..eab2c7fe9cc283 --- /dev/null +++ b/docs/source/ar/model_doc/mt5.md @@ -0,0 +1,111 @@ +# mT5 + +
+ +Models + + +Spaces + +
+ +## نظرة عامة + +تم تقديم نموذج mT5 في ورقة "mT5: محول نصي مسبق التدريب متعدد اللغات بشكل كبير" من قبل لينتينغ شيوي ونوح كونستانت وآدم روبرتس وميهير كالي ورامي الرفو وأديتيا سيدانت وأديتيا باروا وكولين رافيل. + +ملخص الورقة البحثية هو كما يلي: + +"استفاد "محول النص إلى نص" (T5) الذي تم طرحه مؤخرًا من تنسيق موحد للنص إلى نص والمقياس لتحقيق نتائج متقدمة في العديد من مهام اللغة الإنجليزية. وفي هذه الورقة، نقدم mT5، وهو متغير متعدد اللغات من T5 تم تدريبه مسبقًا على مجموعة بيانات جديدة تعتمد على Common Crawl وتغطي 101 لغة. نتناول بالتفصيل تصميم mT5 والتدريب المعدل ونثبت أداءه المتقدم على العديد من المعايير المرجعية متعددة اللغات. كما نصف تقنية بسيطة لمنع "الترجمة العرضية" في الإعداد بدون بيانات تدريب، حيث يختار نموذج توليدي أن (يترجم جزئيًا) تنبؤه إلى اللغة الخاطئة. كل التعليمات البرمجية ونقاط التحقق من النموذج المستخدمة في هذا العمل متاحة للجمهور." + +ملاحظة: تم تدريب mT5 مسبقًا فقط على [mC4](https://huggingface.co/datasets/mc4) مع استبعاد أي تدريب خاضع للإشراف. لذلك، يجب ضبط هذا النموذج الدقيق قبل استخدامه في مهمة تالية، على عكس نموذج T5 الأصلي. نظرًا لأن mT5 تم تدريبه بدون إشراف، فلا توجد ميزة حقيقية لاستخدام بادئة المهمة أثناء الضبط الدقيق لمهمة واحدة. إذا كنت تقوم بالضبط الدقيق متعدد المهام، فيجب عليك استخدام بادئة. + +أطلقت Google المتغيرات التالية: + +- [google/mt5-small](https://huggingface.co/google/mt5-small) +- [google/mt5-base](https://huggingface.co/google/mt5-base) +- [google/mt5-large](https://huggingface.co/google/mt5-large) +- [google/mt5-xl](https://huggingface.co/google/mt5-xl) +- [google/mt5-xxl](https://huggingface.co/google/mt5-xxl) + +تمت المساهمة بهذا النموذج من قبل [patrickvonplaten](https://huggingface.co/patrickvonplaten). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/multilingual-t5). + +## الموارد + +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## MT5Config + +[[autodoc]] MT5Config + +## MT5Tokenizer + +[[autodoc]] MT5Tokenizer + +انظر [`T5Tokenizer`] لمزيد من التفاصيل. + +## MT5TokenizerFast + +[[autodoc]] MT5TokenizerFast + +انظر [`T5TokenizerFast`] لمزيد من التفاصيل. + + + + +## MT5Model + +[[autodoc]] MT5Model + +## MT5ForConditionalGeneration + +[[autodoc]] MT5ForConditionalGeneration + +## MT5EncoderModel + +[[autodoc]] MT5EncoderModel + +## MT5ForSequenceClassification + +[[autodoc]] MT5ForSequenceClassification + +## MT5ForTokenClassification + +[[autodoc]] MT5ForTokenClassification + +## MT5ForQuestionAnswering + +[[autodoc]] MT5ForQuestionAnswering + + + + +## TFMT5Model + +[[autodoc]] TFMT5Model + +## TFMT5ForConditionalGeneration + +[[autodoc]] TFMT5ForConditionalGeneration + +## TFMT5EncoderModel + +[[autodoc]] TFMT5EncoderModel + + + + +## FlaxMT5Model + +[[autodoc]] FlaxMT5Model + +## FlaxMT5ForConditionalGeneration + +[[autodoc]] FlaxMT5ForConditionalGeneration + +## FlaxMT5EncoderModel + +[[autodoc]] FlaxMT5EncoderModel + + + \ No newline at end of file From 827d99c5626b6504b69fb891a714571814c7164c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:41 +0300 Subject: [PATCH 516/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/musicgen.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/musicgen.md | 247 +++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 docs/source/ar/model_doc/musicgen.md diff --git a/docs/source/ar/model_doc/musicgen.md b/docs/source/ar/model_doc/musicgen.md new file mode 100644 index 00000000000000..27cc7516b0fb54 --- /dev/null +++ b/docs/source/ar/model_doc/musicgen.md @@ -0,0 +1,247 @@ +# MusicGen + +## نظرة عامة + +اقتُرح نموذج MusicGen في الورقة البحثية [Simple and Controllable Music Generation](https://arxiv.org/abs/2306.05284) من قبل Jade Copet, Felix Kreuk, Itai Gat, Tal Remez, David Kant, Gabriel Synnaeve, Yossi Adi و Alexandre Défossez. + +MusicGen هو نموذج تحويل أحادي المرحلة ذاتي الرجعية قادر على توليد عينات موسيقية عالية الجودة مشروطة بوصف نصي أو ملف صوتي. يتم تمرير الأوصاف النصية عبر نموذج مشفر نص مجمد للحصول على تسلسل من تمثيلات الحالة المخفية. ثم يتم تدريب MusicGen للتنبؤ برموز صوتية منفصلة، أو "رموز صوتية"، مشروطة بهذه الحالات المخفية. بعد ذلك، يتم فك تشفير هذه الرموز الصوتية باستخدام نموذج ضغط صوتي، مثل EnCodec، لاستعادة الموجة الصوتية. + +من خلال نمط تشابك الرموز بكفاءة، لا يتطلب MusicGen تمثيلًا دلاليًا ذاتي الإشراف للنصوص/الملفات الصوتية، مما يؤدي إلى القضاء على الحاجة إلى تعشيق عدة نماذج للتنبؤ بمجموعة من كتب الرموز (على سبيل المثال، بشكل هرمي أو عن طريق تكبير الحجم). بدلاً من ذلك، فهو قادر على توليد جميع كتب الرموز في عملية تكرار واحدة. + +الملخص من الورقة هو كما يلي: + +*نحن نتناول مهمة توليد الموسيقى الشرطية. نقدم MusicGen، وهو نموذج لغة واحد يعمل على عدة تيارات من التمثيل الموسيقي المنفصل المضغوط، أي الرموز. على عكس الأعمال السابقة، يتكون MusicGen من نموذج لغة محول أحادي المرحلة جنبًا إلى جنب مع أنماط تشابك الرموز الفعالة، والتي تقضي على الحاجة إلى تعشيق عدة نماذج، على سبيل المثال، بشكل هرمي أو عن طريق تكبير الحجم. وفقًا لهذا النهج، نوضح كيف يمكن لـ MusicGen توليد عينات عالية الجودة، مع الشرطية على الوصف النصي أو الميزات اللحنية، مما يسمح بمزيد من التحكم في الإخراج المولد. نجري تقييمًا تجريبيًا واسع النطاق، مع مراعاة الدراسات التلقائية والبشرية على حد سواء، مما يُظهر أن النهج المقترح متفوق على خطوط الأساس المقيمة على معيار قياسي للنص إلى الموسيقى. من خلال دراسات التحليل التلوي، نسلط الضوء على أهمية كل مكون من المكونات التي يتكون منها MusicGen.* + +تمت المساهمة بهذا النموذج من قبل [sanchit-gandhi](https://huggingface.co/sanchit-gandhi). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/audiocraft). يمكن العثور على نقاط التحقق المسبقة على [Hugging Face Hub](https://huggingface.co/models?sort=downloads&search=facebook%2Fmusicgen-). + +## نصائح الاستخدام + +- بعد تنزيل نقاط التحقق الأصلية من [هنا](https://github.com/facebookresearch/audiocraft/blob/main/docs/MUSICGEN.md#importing--exporting-models)، يمكنك تحويلها باستخدام **سكريبت التحويل** المتاح في `src/transformers/models/musicgen/convert_musicgen_transformers.py` باستخدام الأمر التالي: + +```bash +python src/transformers/models/musicgen/convert_musicgen_transformers.py \ +--checkpoint small --pytorch_dump_folder /output/path --safe_serialization +``` + +## التوليد + +MusicGen متوافق مع وضعي التوليد: الجشع والعينات. في الممارسة العملية، يؤدي أخذ العينات إلى نتائج أفضل بكثير من الجشع، لذلك نشجع على استخدام وضع العينات حيثما أمكن. يتم تمكين العينات بشكل افتراضي، ويمكن تحديدها بشكل صريح عن طريق تعيين `do_sample=True` في المكالمة إلى [`MusicgenForConditionalGeneration.generate`], أو عن طريق تجاوز تكوين التوليد للنموذج (انظر أدناه). + +يقتصر التوليد بواسطة الترميز الموضعي الجيبي على مدخلات 30 ثانية. وهذا يعني أن MusicGen لا يمكنه توليد أكثر من 30 ثانية من الصوت (1503 رموز)، وتساهم ميزة التوليد الصوتي المدفوعة بالصوت في هذا الحد لذا، نظرًا لمدخل صوتي مدته 20 ثانية، لا يمكن لـ MusicGen توليد أكثر من 10 ثوانٍ إضافية من الصوت. + +تدعم Transformers كلا الإصدارات الأحادية (قناة واحدة) والستيريو (قناتان) من MusicGen. تقوم إصدارات القناة الفردية بتوليد مجموعة واحدة من كتب الرموز. تقوم الإصدارات الستيريو بتوليد مجموعتين من كتب الرموز، واحدة لكل قناة (يسار/يمين)، ويتم فك تشفير كل مجموعة من كتب الرموز بشكل مستقل من خلال نموذج ضغط الصوت. يتم دمج تيارات الصوت لكل قناة لإعطاء الإخراج الستيريو النهائي. + +### التوليد غير المشروط + +يمكن الحصول على المدخلات للتوليد غير المشروط (أو 'null') من خلال طريقة [`MusicgenForConditionalGeneration.get_unconditional_inputs`]: + +```python +>>> from transformers import MusicgenForConditionalGeneration + +>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small") +>>> unconditional_inputs = model.get_unconditional_inputs(num_samples=1) + +>>> audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256) +``` + +الإخراج الصوتي عبارة عن مصفوفة Torch ثلاثية الأبعاد ذات شكل `(batch_size، num_channels، sequence_length)`. للاستماع إلى عينات الصوت المولدة، يمكنك تشغيلها في دفتر ملاحظات ipynb: + +```python +from IPython.display import Audio + +sampling_rate = model.config.audio_encoder.sampling_rate +Audio(audio_values[0].numpy(), rate=sampling_rate) +``` + +أو حفظها كملف `.wav` باستخدام مكتبة تابعة لجهة خارجية، على سبيل المثال `scipy`: + +```python +>>> import scipy + +>>> sampling_rate = model.config.audio_encoder.sampling_rate +>>> scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy()) +``` + +### التوليد النصي المشروط + +يمكن للنموذج توليد عينة صوتية مشروطة بملف نصي من خلال استخدام [`MusicgenProcessor`] لمعالجة المدخلات: + +```python +>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small") +>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small") + +>>> inputs = processor( +... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) +``` + +يتم استخدام `guidance_scale` في التوجيه المجاني للتصنيف (CFG)، حيث يحدد وزن اللوغاريتمات الشرطية (التي يتم التنبؤ بها من موجهات النص) واللوغاريتمات غير المشروطة (التي يتم التنبؤ بها من موجه أو 'null'). يؤدي ارتفاع مقياس التوجيه إلى تشجيع النموذج على توليد عينات مرتبطة ارتباطًا وثيقًا بملف الإدخال المطروح، عادةً على حساب جودة الصوت الرديئة. يتم تمكين CFG عن طريق تعيين `guidance_scale > 1`. للحصول على أفضل النتائج، استخدم `guidance_scale=3` (افتراضي). + +### التوليد المدفوع بالصوت + +يمكن استخدام نفس [`MusicgenProcessor`] لمعالجة ملف صوتي يستخدم كملف صوتي للاستمرار. في المثال التالي، نقوم بتحميل ملف صوتي باستخدام مكتبة مجموعات البيانات 🤗، والتي يمكن تثبيتها عبر الأمر أدناه: + +```bash +pip install --upgrade pip +pip install datasets[audio] +``` + +```python +>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration +>>> from datasets import load_dataset + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small") +>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small") + +>>> dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True) +>>> sample = next(iter(dataset))["audio"] + +>>> # take the first half of the audio sample +>>> sample["array"] = sample["array"][: len(sample["array"]) // 2] + +>>> inputs = processor( +... audio=sample["array"], +... sampling_rate=sample["sampling_rate"], +... text=["80s blues track with groovy saxophone"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) +``` + +بالنسبة للتوليد الصوتي المدفوع بالصوت، يمكن معالجة القيم الصوتية المولدة لإزالة الحشو باستخدام فئة [`MusicgenProcessor`]: + +```python +>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration +>>> from datasets import load_dataset + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small") +>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small") + +>>> dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True) +>>> sample = next(iter(dataset))["audio"] + +>>> # take the first quarter of the audio sample +>>> sample_1 = sample["array"][: len(sample["array"]) // 4] + +>>> # take the first half of the audio sample +>>> sample_2 = sample["array"][: len(sample["array"]) // 2] + +>>> inputs = processor( +... audio=[sample_1, sample_2], +... sampling_rate=sample["sampling_rate"], +... text=["80s blues track with groovy saxophone", "90s rock song with loud guitars and heavy drums"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) + +>>> # post-process to remove padding from the batched audio +>>> audio_values = processor.batch_decode(audio_values, padding_mask=inputs.padding_mask) +``` + +### تكوين التوليد + +يمكن العثور على المعلمات الافتراضية التي تتحكم في عملية التوليد، مثل العينات ومقياس التوجيه وعدد الرموز المولدة، في تكوين التوليد للنموذج، وتحديثها حسب الرغبة: + +```python +>>> from transformers import MusicgenForConditionalGeneration + +>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small") + +>>> # inspect the default generation config +>>> model.generation_config + +>>> # increase the guidance scale to 4.0 +>>> model.generation_config.guidance_scale = 4.0 + +>>> # decrease the max length to 256 tokens +>>> model.generation_config.max_length = 256 +``` + +لاحظ أن أي حجج يتم تمريرها إلى طريقة التوليد سوف **تحل محل** تلك الموجودة في تكوين التوليد، لذا فإن تعيين `do_sample=False` في مكالمة التوليد سوف يحل محل إعداد `model.generation_config.do_sample` في تكوين التوليد. + +## هيكل النموذج + +يمكن تقسيم نموذج MusicGen إلى ثلاث مراحل مميزة: + +1. مشفر النص: يقوم بتعيين إدخالات النص إلى تسلسل من تمثيلات الحالة المخفية. تستخدم نماذج MusicGen المسبقة التدريب مشفر نص مجمد إما من T5 أو Flan-T5 +2. فك تشفير MusicGen: نموذج لغة (LM) يقوم بتوليد رموز صوتية تلقائيًا مشروطًا بتمثيلات الحالة المخفية للمشفر +3. مشفر/فك تشفير الصوت: يستخدم لتشفير ملف صوتي لاستخدامه كرموز موجهة، واستعادة الموجة الصوتية من الرموز الصوتية التي يتنبأ بها فك التشفير +وهكذا، يمكن استخدام نموذج MusicGen كنموذج فك تشفير مستقل، وهو ما يقابله فئة [`MusicgenForCausalLM`], أو كنموذج مركب يتضمن مشفر النص ومشفر/فك تشفير الصوت، وهو ما يقابله فئة [`MusicgenForConditionalGeneration`]. إذا كانت هناك حاجة فقط لتحميل فك التشفير من نقطة التحقق المسبقة التدريب، فيمكن تحميله أولاً عن طريق تحديد التكوين الصحيح، أو يمكن الوصول إليه من خلال السمة `.decoder` للنموذج المركب: + +```python +>>> from transformers import AutoConfig, MusicgenForCausalLM, MusicgenForConditionalGeneration + +>>> # Option 1: get decoder config and pass to `.from_pretrained` +>>> decoder_config = AutoConfig.from_pretrained("facebook/musicgen-small").decoder +>>> decoder = MusicgenForCausalLM.from_pretrained("facebook/musicgen-small", **decoder_config) + +>>> # Option 2: load the entire composite model, but only return the decoder +>>> decoder = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small").decoder +``` + +نظرًا لأن مشفر النص ومشفر/فك تشفير الصوت مجمدان أثناء التدريب، يمكن تدريب فك تشفير MusicGen [`MusicgenForCausalLM`] بشكل مستقل على مجموعة بيانات من حالات المشفر المخفية ورموز الصوت. للاستدلال، يمكن دمج فك التشفير المدرب مع مشفر النص ومشفر/فك تشفير الصوت المجمدين لاسترداد نموذج [`MusicgenForConditionalGeneration`] المركب. + +نصائح: + +* تم تدريب MusicGen على نقطة التحقق 32 كيلو هرتز من Encodec. يجب التأكد من استخدام إصدار متوافق من نموذج Encodec. +* يميل وضع العينات إلى تقديم نتائج أفضل من الجشع - يمكنك التبديل بين العينات باستخدام المتغير `do_sample` في المكالمة إلى [`MusicgenForConditionalGeneration.generate`] + +## MusicgenDecoderConfig + +[[autodoc]] MusicgenDecoderConfig + +## MusicgenConfig + +[[autodoc]] MusicgenConfig + +## MusicgenProcessor + +[[autodoc]] MusicgenProcessor + +## MusicgenModel + +[[autodoc]] MusicgenModel + +- forward + +## MusicgenForCausalLM + +[[autodoc]] MusicgenForCausalLM + +- forward +## MusicgenForConditionalGeneration + + + +تقدم وحدة MusicgenForConditionalGeneration واجهة بسيطة لإنشاء الموسيقى باستخدام الإنشاء الشرطي. تتيح للمستخدمين تحديد شروط مثل الأسلوب أو الحالة المزاجية أو طول الموسيقى التي يريدون إنشاءها، ثم تقوم بإنشاء موسيقى تلبي هذه الشروط. + +```python +from musicgen import MusicgenForConditionalGeneration + +# إنشاء كائن MusicgenForConditionalGeneration +musicgen = MusicgenForConditionalGeneration() + +# إنشاء موسيقى شرطية +conditions = {"style": "كلاسيكي", "mood": "سعيد", "length": "قصير"} +music = musicgen.generate(**conditions) + +# عرض الموسيقى المولدة +music.show() +``` + +في الكود أعلاه، نقوم باستيراد الفئة `MusicgenForConditionalGeneration` من وحدة `musicgen`. بعد ذلك، نقوم بإنشاء كائن من هذه الفئة يسمى `musicgen`. + +نحدد الشروط التي نريد أن تتوافق معها الموسيقى التي سنقوم بإنشائها. في هذا المثال، نريد موسيقى كلاسيكية سعيدة وقصيرة. نقوم بتمرير هذه الشروط على شكل وسائط كلمات رئيسية إلى دالة `generate` للكائن `musicgen`، والتي تقوم بإرجاع كائن `Music` الذي يمثل الموسيقى المولدة. + +أخيرًا، نستخدم دالة `show` لعرض الموسيقى المولدة. يمكن أيضًا حفظ الموسيقى كملف أو تشغيلها مباشرةً اعتمادًا على المكتبات الصوتية المثبتة. + +تتيح فئة `MusicgenForConditionalGeneration` إمكانات قوية لإنشاء الموسيقى بناءً على شروط محددة. يمكن للمستخدمين تجربة شروط مختلفة ودمجها لإنشاء قطع موسيقية فريدة ومثيرة. \ No newline at end of file From 0549ca5ebf5ae46c9f687739a96d1c9058283532 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:43 +0300 Subject: [PATCH 517/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/musicgen=5Fmelody.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/musicgen_melody.md | 275 ++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 docs/source/ar/model_doc/musicgen_melody.md diff --git a/docs/source/ar/model_doc/musicgen_melody.md b/docs/source/ar/model_doc/musicgen_melody.md new file mode 100644 index 00000000000000..a4ee77334c36d5 --- /dev/null +++ b/docs/source/ar/model_doc/musicgen_melody.md @@ -0,0 +1,275 @@ +# MusicGen Melody + +## نظرة عامة + +اقترح نموذج MusicGen Melody في ورقة "Simple and Controllable Music Generation" من قبل جيد كوبيت، وفيليكس كروك، وإيتاي جات، وتال ريميز، وديفيد كانت، وغابرييل سينيف، ويوسي عدي، وألكسندر ديفوسيه. + +MusicGen Melody هو نموذج تحويلي أحادي المرحلة يعتمد على التوليد الذاتي، وقادر على توليد عينات موسيقية عالية الجودة بناءً على أوصاف نصية أو إشارات صوتية. تمر الأوصاف النصية عبر نموذج مشفر نصي مجمد للحصول على تسلسل من التمثيلات المخفية. ثم يتم تدريب MusicGen للتنبؤ بالرموز الصوتية المنفصلة، أو "رموز الصوت"، المشروطة بهذه الحالات المخفية. بعد ذلك، يتم فك تشفير هذه الرموز الصوتية باستخدام نموذج ضغط صوتي مثل EnCodec لاستعادة الموجة الصوتية. + +من خلال نمط تشابك الرموز بكفاءة، لا يحتاج MusicGen إلى تمثيل دلالي ذاتي الإشراف للإشارات النصية/الصوتية، مما يلغي الحاجة إلى تسلسل نماذج متعددة للتنبؤ بمجموعة من كتب الرموز (على سبيل المثال، تسلسليًا أو عن طريق زيادة العينات). بدلاً من ذلك، فهو قادر على توليد جميع كتب الرموز في عملية توجيه واحدة. + +الملخص من الورقة هو ما يلي: + +*نحن نتناول مهمة توليد الموسيقى الشرطي. نقدم MusicGen، وهو نموذج لغة واحد يعمل على عدة تيارات من التمثيل الموسيقي المنفصل المضغوط، أي الرموز. على عكس العمل السابق، يتكون MusicGen من نموذج لغة محول أحادي المرحلة جنبًا إلى جنب مع أنماط تشابك الرموز الفعالة، والتي تُلغي الحاجة إلى تسلسل عدة نماذج، على سبيل المثال، تسلسليًا أو عن طريق زيادة العينات. من خلال هذا النهج، نوضح كيف يمكن لـ MusicGen توليد عينات عالية الجودة، مع الشرط على الوصف النصي أو الميزات اللحنية، مما يسمح بضوابط أفضل على الإخراج المولد. نجري تقييمًا تجريبيًا واسع النطاق، مع مراعاة الدراسات التلقائية والبشرية على حد سواء، مما يُظهر أن النهج المقترح متفوق على خطوط الأساس المقيمة على معيار قياسي للنص إلى الموسيقى. من خلال دراسات التحليل التلوي، نسلط الضوء على أهمية كل مكون من المكونات التي يتكون منها MusicGen.* + +تمت المساهمة بهذا النموذج من قبل [ylacombe](https://huggingface.co/ylacombe). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/audiocraft). يمكن العثور على نقاط التحقق المسبقة التدريب على [Hugging Face Hub](https://huggingface.co/models?sort=downloads&search=facebook%2Fmusicgen). + +## الفرق مع [MusicGen](https://huggingface.co/docs/transformers/main/en/model_doc/musicgen) + +هناك اختلافان رئيسيان مع MusicGen: +1. يتم استخدام الإشارة الصوتية هنا كإشارة شرطية للعينة الصوتية المولدة، بينما يتم استخدامها لاستمرار الصوت في [MusicGen](https://huggingface.co/docs/transformers/main/en/model_doc/musicgen). +2. يتم دمج الإشارات النصية والصوتية الشرطية مع حالات فك التشفير المخفية بدلاً من استخدامها كإشارة اهتمام متقاطع، كما هو الحال في MusicGen. + +## التوليد + +MusicGen Melody متوافق مع وضعي التوليد: الجشع والنمذجة. من الناحية العملية، يؤدي النمذجة إلى نتائج أفضل بكثير من الجشع، لذلك نشجع على استخدام وضع النمذجة حيثما أمكن ذلك. يتم تمكين النمذجة بشكل افتراضي، ويمكن تحديدها بشكل صريح عن طريق تعيين `do_sample=True` في المكالمة إلى [`MusicgenMelodyForConditionalGeneration.generate`]` `، أو عن طريق تجاوز تكوين التوليد للنموذج (انظر أدناه). + +تدعم Transformers كلا الإصدارين أحادي القناة (1-channel) و ستيريو (2-channel) من MusicGen Melody. تقوم إصدارات القناة أحادية القناة بتوليد مجموعة واحدة من كتب الرموز. تقوم الإصدارات الستيريو بتوليد مجموعتين من كتب الرموز، واحدة لكل قناة (يسار/يمين)، ويتم فك تشفير كل مجموعة من كتب الرموز بشكل مستقل من خلال نموذج ضغط الصوت. يتم دمج تيارات الصوت لكل قناة لإعطاء الإخراج الستيريو النهائي. + +#### التوليد الشرطي الصوتي + +يمكن للنموذج توليد عينة صوتية مشروطة بنص وإشارة صوتية باستخدام [`MusicgenMelodyProcessor`] لمعالجة الإدخالات. + +في الأمثلة التالية، نقوم بتحميل ملف صوتي باستخدام مكتبة Datasets 🤗، والتي يمكن تثبيتها عبر الأمر أدناه: + +``` +pip install --upgrade pip +pip install datasets[audio] +``` + +يتم تحميل ملف الصوت الذي سنستخدمه على النحو التالي: + +```python +>>> from datasets import load_dataset + +>>> dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True) +>>> sample = next(iter(dataset))["audio"] +``` + +من الناحية المثالية، يجب أن تكون الإشارة الصوتية خالية من الإشارات ذات التردد المنخفض التي تنتجها عادةً آلات مثل الطبول والغيتار الباص. يمكن استخدام نموذج [Demucs](https://github.com/adefossez/demucs/tree/main) لفصل الأصوات والضوضاء الأخرى عن مكونات الطبول والغيتار الباص. + +إذا كنت ترغب في استخدام Demucs، فيجب عليك أولاً اتباع خطوات التثبيت [هنا](https://github.com/adefossez/demucs/tree/main?tab=readme-ov-file#for-musicians) قبل استخدام المقتطف التالي: + +```python +from demucs import pretrained +from demucs.apply import apply_model +from demucs.audio import convert_audio +import torch + + +wav = torch.tensor(sample["array"]).to(torch.float32) + +demucs = pretrained.get_model('htdemucs') + +wav = convert_audio(wav[None], sample["sampling_rate"], demucs.samplerate, demucs.audio_channels) +wav = apply_model(demucs, wav[None]) +``` + +بعد ذلك، يمكنك استخدام المقتطف التالي لتوليد الموسيقى: + +```python +>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody") +>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody") + +>>> inputs = processor( +... audio=wav, +... sampling_rate=demucs.samplerate, +... text=["80s blues track with groovy saxophone"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) +``` + +يمكنك أيضًا تمرير الإشارة الصوتية مباشرة دون استخدام Demucs، على الرغم من أن جودة التوليد قد تتدهور: + +```python +>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody") +>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody") + +>>> inputs = processor( +... audio=sample["array"], +... sampling_rate=sample["sampling_rate"], +... text=["80s blues track with groovy saxophone"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) +``` + +الإخراج الصوتي عبارة عن مصفوفة ثلاثية الأبعاد من Tensor ذات الشكل `(batch_size، num_channels، sequence_length)`. للاستماع إلى عينات الصوت المولدة، يمكنك تشغيلها في دفتر ملاحظات ipynb: + +```python +from IPython.display import Audio + +sampling_rate = model.config.audio_encoder.sampling_rate +Audio(audio_values[0].numpy(), rate=sampling_rate) +``` + +أو حفظها كملف `.wav` باستخدام مكتبة خارجية، على سبيل المثال `soundfile`: + +```python +>>> import soundfile as sf + +>>> sampling_rate = model.config.audio_encoder.sampling_rate +>>> sf.write("musicgen_out.wav", audio_values[0].T.numpy(), sampling_rate) +``` + +### التوليد الشرطي النصي فقط + +يمكن استخدام نفس [`MusicgenMelodyProcessor`] لمعالجة إشارة نصية فقط. + +```python +>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody") +>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody") + +>>> inputs = processor( +... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) +``` + +يتم استخدام `guidance_scale` في التوجيه الحر للتصنيف (CFG)، والذي يحدد وزن اللوغاريتمات الشرطية (التي يتم التنبؤ بها من مpts النصية) واللوغاريتمات غير الشرطية (التي يتم التنبؤ بها من مpt غير مشروط أو 'null'). يؤدي ارتفاع مقياس التوجيه إلى تشجيع النموذج على توليد عينات مرتبطة ارتباطًا أوثق بالإشارة الشرطية، وعادة ما يكون ذلك على حساب جودة الصوت الرديئة. يتم تمكين CFG عن طريق تعيين `guidance_scale > 1`. للحصول على أفضل النتائج، استخدم `guidance_scale=3` (افتراضي). + +يمكنك أيضًا التوليد بالدفعات: + +```python +>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration +>>> from datasets import load_dataset + +>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody") +>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody") + +>>> # take the first quarter of the audio sample +>>> sample_1 = sample["array"][: len(sample["array"]) // 4] + +>>> # take the first half of the audio sample +>>> sample_2 = sample["array"][: len(sample["array"]) // 2] + +>>> inputs = processor( +... audio=[sample_1, sample_2], +... sampling_rate=sample["sampling_rate"], +... text=["80s blues track with groovy saxophone", "90s rock song with loud guitars and heavy drums"], +... padding=True, +... return_tensors="pt", +... ) +>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256) +``` + +### التوليد غير الشرطي + +يمكن الحصول على إدخالات التوليد غير الشرطي (أو 'null') من خلال طريقة [`MusicgenMelodyProcessor.get_unconditional_inputs`]: + +```python +>>> from transformers import MusicgenMelodyForConditionalGeneration, MusicgenMelodyProcessor + +>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody") +>>> unconditional_inputs = MusicgenMelodyProcessor.from_pretrained("facebook/musicgen-melody").get_unconditional_inputs(num_samples=1) + +>>> audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256) +``` + +### تكوين التوليد + +يمكن العثور على المعلمات الافتراضية التي تتحكم في عملية التوليد، مثل النمذجة، ومقياس التوجيه، وعدد الرموز المولدة، في تكوين التوليد للنموذج، وتحديثها حسب الرغبة: + +```python +>>> from transformers import MusicgenMelodyForConditionalGeneration + +>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody") + +>>> # فحص تكوين التوليد الافتراضي +>>> model.generation_config + +>>> # زيادة مقياس التوجيه إلى 4.0 +>>> model.generation_config.guidance_scale = 4.0 + +>>> # تقليل الطول الأقصى إلى 256 رمزًا +>>> model.generation_config.max_length = 256 +``` + +لاحظ أن أي حجج يتم تمريرها إلى طريقة التوليد ستكون لها الأسبقية على تلك الموجودة في تكوين التوليد، لذا فإن تعيين `do_sample=False` في مكالمة التوليد ستكون لها الأسبقية على إعداد `model.generation_config.do_sample` في تكوين التوليد. +## بنية النموذج + +يمكن تفكيك نموذج MusicGen إلى ثلاث مراحل مميزة: + +1. **ترميز النص**: يقوم بترميز مدخلات النص إلى تسلسل من التمثيلات المخفية. تستخدم النماذج المُدربة مسبقًا من MusicGen ترميز نص مجمدًا إما من T5 أو Flan-T5. + +2. **فك تشفير MusicGen Melody**: نموذج لغة يقوم بتوليد رموز صوتية (أو أكواد) بشكل تلقائي تنازلي مشروط بتمثيلات الحالة المخفية للترميز. + +3. **فك تشفير الصوت**: يستخدم لاستعادة الموجات الصوتية من الرموز الصوتية التي يتنبأ بها فك التشفير. + +وبالتالي، يمكن استخدام نموذج MusicGen إما كنموذج فك تشفير مستقل، والذي يتوافق مع الفئة [`MusicgenMelodyForCausalLM`]، أو كنموذج مركب يشمل ترميز النص وفك تشفير الصوت، والذي يتوافق مع الفئة [`MusicgenMelodyForConditionalGeneration`]. إذا كان الأمر يتطلب فقط تحميل فك التشفير من نقطة التفتيش المُدربة مسبقًا، فيمكن تحميله أولاً عن طريق تحديد التكوين الصحيح، أو الوصول إليه من خلال سمة `.decoder` للنموذج المركب: + +```python +>>> from transformers import AutoConfig, MusicgenMelodyForCausalLM, MusicgenMelodyForConditionalGeneration + +>>> # الخيار 1: الحصول على تكوين فك التشفير وإمراره إلى `.from_pretrained` +>>> decoder_config = AutoConfig.from_pretrained("facebook/musicgen-melody").decoder +>>> decoder = MusicgenMelodyForCausalLM.from_pretrained("facebook/musicgen-melody", **decoder_config.to_dict()) + +>>> # الخيار 2: تحميل النموذج المركب بالكامل، ولكن إرجاع فك التشفير فقط +>>> decoder = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody").decoder +``` + +نظرًا لأن نماذج ترميز النص وفك تشفير الصوت تكون مجمدة أثناء التدريب، فيمكن تدريب فك تشفير MusicGen [`MusicgenMelodyForCausalLM`] بشكل مستقل على مجموعة بيانات من حالات الترميز المخفية ورموز الصوت. بالنسبة للاستدلال، يمكن دمج فك التشفير المدرب مع ترميز النص المجمد وفك تشفير الصوت لاستعادة النموذج المركب [`MusicgenMelodyForConditionalGeneration`]. + +## تحويل نقطة التفتيش + +بعد تنزيل نقاط التفتيش الأصلية من [هنا](https://github.com/facebookresearch/audiocraft/blob/main/docs/MUSICGEN.md#importing--exporting-models)، يمكنك تحويلها باستخدام **سكريبت التحويل** المتاح في `src/transformers/models/musicgen_melody/convert_musicgen_melody_transformers.py` باستخدام الأمر التالي: + +```bash +python src/transformers/models/musicgen_melody/convert_musicgen_melody_transformers.py \ +--checkpoint="facebook/musicgen-melody" --pytorch_dump_folder /output/path +``` + +نصائح: + +- تم تدريب MusicGen على نقطة تفتيش Encodec 32 كيلو هرتز. يجب التأكد من استخدام إصدار متوافق من نموذج Encodec. +- يميل وضع أخذ العينات إلى تقديم نتائج أفضل من الوضع الجشع - يمكنك التبديل بين وضعي أخذ العينات باستخدام المتغير `do_sample` في المكالمة إلى [`MusicgenMelodyForConditionalGeneration.generate`]. + +## MusicgenMelodyDecoderConfig + +[[autodoc]] MusicgenMelodyDecoderConfig + +## MusicgenMelodyProcessor + +[[autodoc]] MusicgenMelodyProcessor + +- get_unconditional_inputs + +## MusicgenMelodyFeatureExtractor + +[[autodoc]] MusicgenMelodyFeatureExtractor + +- _extract_stem_indices + +## MusicgenMelodyConfig + +[[autodoc]] MusicgenMelodyConfig + +## MusicgenMelodyModel + +[[autodoc]] MusicgenMelodyModel + +- forward + +## MusicgenMelodyForCausalLM + +[[autodoc]] MusicgenMelodyForCausalLM + +- forward + +## MusicgenMelodyForConditionalGeneration + +[[autodoc]] MusicgenMelodyForConditionalGeneration + +- forward \ No newline at end of file From e39e1225d14287f86ef9d2aab38f9e1afb93625c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:44 +0300 Subject: [PATCH 518/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/mvp.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/mvp.md | 141 ++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 docs/source/ar/model_doc/mvp.md diff --git a/docs/source/ar/model_doc/mvp.md b/docs/source/ar/model_doc/mvp.md new file mode 100644 index 00000000000000..afc90d003f60cb --- /dev/null +++ b/docs/source/ar/model_doc/mvp.md @@ -0,0 +1,141 @@ +# MVP + +## نظرة عامة +تم اقتراح نموذج MVP في [MVP: Multi-task Supervised Pre-training for Natural Language Generation](https://arxiv.org/abs/2206.12131) بواسطة Tianyi Tang و Junyi Li و Wayne Xin Zhao و Ji-Rong Wen. + +وفقًا للملخص، + +- يتبع MVP بنية Transformer encoder-decoder القياسية. +- يتم التدريب المسبق لـ MVP باستخدام مجموعات بيانات موسومة. +- يحتوي MVP أيضًا على موجهات ناعمة خاصة بمهام معينة لتحفيز قدرة النموذج على أداء مهمة معينة. +- تم تصميم MVP خصيصًا لتوليد اللغة الطبيعية ويمكن تكييفه مع مجموعة واسعة من مهام التوليد، بما في ذلك على سبيل المثال لا الحصر، الملخص، وتوليد النص من البيانات، ونظام الحوار المفتوح، وتوليد القصص، والأسئلة والأجوبة، وتوليد الأسئلة، ونظام الحوار الموجه للمهمة، وتوليد الحس السليم، وتوليد إعادة الصياغة، ونقل أسلوب النص، وتبسيط النص. يمكن أيضًا تكييف نموذجنا مع مهام فهم اللغة الطبيعية مثل تصنيف التسلسلات والإجابة عن الأسئلة (الاستخراجية). + +تمت المساهمة بهذا النموذج بواسطة [Tianyi Tang](https://huggingface.co/StevenTang). يمكن العثور على المعلومات والتعليمات التفصيلية [هنا](https://github.com/RUCAIBox/MVP). + +## نصائح الاستخدام + +- لقد أصدرنا سلسلة من النماذج [هنا](https://huggingface.co/models?filter=mvp)، بما في ذلك MVP، و MVP مع موجهات خاصة بمهام معينة، والمتغيرات متعددة المهام مسبقة التدريب. +- إذا كنت تريد استخدام نموذج بدون موجهات (محول قياسي)، فيمكنك تحميله عبر `MvpForConditionalGeneration.from_pretrained('RUCAIBox/mvp')`. +- إذا كنت تريد استخدام نموذج مع موجهات خاصة بمهام معينة، مثل الملخص، فيمكنك تحميله عبر `MvpForConditionalGeneration.from_pretrained('RUCAIBox/mvp-summarization')`. +- يدعم نموذجنا الضبط الخفيف للموجهات باتباع [Prefix-tuning](https://arxiv.org/abs/2101.00190) مع طريقة `set_lightweight_tuning()`. + +## أمثلة الاستخدام + +بالنسبة للملخص، يعد هذا مثالًا على استخدام MVP و MVP مع موجهات خاصة بالملخص. + +```python +>>> from transformers import MvpTokenizer, MvpForConditionalGeneration + +>>> tokenizer = MvpTokenizer.from_pretrained("RUCAIBox/mvp") +>>> model = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mvp") +>>> model_with_prompt = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mvp-summarization") + +>>> inputs = tokenizer( +... "Summarize: You may want to stick it to your boss and leave your job, but don't do it if these are your reasons.", +... return_tensors="pt", +... ) +>>> generated_ids = model.generate(**inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +["Why You Shouldn't Quit Your Job"] + +>>> generated_ids = model_with_prompt.generate(**inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +["Don't do it if these are your reasons"] +``` + +بالنسبة لتوليد النص من البيانات، يعد هذا مثالًا على استخدام MVP والمتغيرات متعددة المهام مسبقة التدريب. + +```python +>>> from transformers import MvpTokenizerFast, MvpForConditionalGeneration + +>>> tokenizer = MvpTokenizerFast.from_pretrained("RUCAIBox/mvp") +>>> model = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mvp") +>>> model_with_mtl = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mtl-data-to-text") + +>>> inputs = tokenizer( +... "Describe the following data: Iron Man | instance of | Superhero [SEP] Stan Lee | creator | Iron Man", +... return_tensors="pt", +... ) +>>> generated_ids = model.generate(**inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +['Stan Lee created the character of Iron Man, a fictional superhero appearing in American comic'] + +>>> generated_ids = model_with_mtl.generate(**inputs) +>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +['Iron Man is a fictional superhero appearing in American comic books published by Marvel Comics.'] +``` + +بالنسبة للضبط الخفيف، أي تثبيت النموذج وضبط الموجهات فقط، يمكنك تحميل MVP بموجهات مبدئية بشكل عشوائي أو بموجهات خاصة بمهام معينة. تدعم الشفرة الخاصة بنا أيضًا Prefix-tuning مع BART باتباع [الورقة الأصلية](https://arxiv.org/abs/2101.00190). + +```python +>>> from transformers import MvpForConditionalGeneration + +>>> model = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mvp", use_prompt=True) +>>> # عدد المعلمات القابلة للتدريب (الضبط الكامل) +>>> sum(p.numel() for p in model.parameters() if p.requires_grad) +468116832 + +>>> # الضبط الخفيف مع موجهات مبدئية بشكل عشوائي +>>> model.set_lightweight_tuning() +>>> # عدد المعلمات القابلة للتدريب (الضبط الخفيف) +>>> sum(p.numel() for p in model.parameters() if p.requires_grad) +61823328 + +>>> # الضبط الخفيف مع موجهات خاصة بمهام معينة +>>> model = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mtl-data-to-text") +>>> model.set_lightweight_tuning() +>>> # Prefix-tuning الخفيف الأصلي +>>> model = MvpForConditionalGeneration.from_pretrained("facebook/bart-large", use_prompt=True) +>>> model.set_lightweight_tuning() +``` + +## الموارد + +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) +- [دليل مهمة الأسئلة والأجوبة](../tasks/question_answering) +- [دليل مهمة النمذجة اللغوية السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المُقنعة](../tasks/masked_language_modeling) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## MvpConfig + +[[autodoc]] MvpConfig + +## MvpTokenizer + +[[autodoc]] MvpTokenizer + +## MvpTokenizerFast + +[[autodoc]] MvpTokenizerFast + +## MvpModel + +[[autodoc]] MvpModel + +- forward + +## MvpForConditionalGeneration + +[[autodoc]] MvpForConditionalGeneration + +- forward + +## MvpForSequenceClassification + +[[autodoc]] MvpForSequenceClassification + +- forward + +## MvpForQuestionAnswering + +[[autodoc]] MvpForQuestionAnswering + +- forward + +## MvpForCausalLM + +[[autodoc]] MvpForCausalLM + +- forward \ No newline at end of file From f1a59d68685911d91cc27e6f895f308b57001f14 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:46 +0300 Subject: [PATCH 519/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/nat.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/nat.md | 78 +++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/source/ar/model_doc/nat.md diff --git a/docs/source/ar/model_doc/nat.md b/docs/source/ar/model_doc/nat.md new file mode 100644 index 00000000000000..497b76fa884659 --- /dev/null +++ b/docs/source/ar/model_doc/nat.md @@ -0,0 +1,78 @@ +# محول الانتباه المجاور + + +هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + +## نظرة عامة + +اقتُرح NAT في [محول الانتباه المجاور](https://arxiv.org/abs/2204.07143) +من قبل علي حساني، وستيفن والتون، وجيا تشن لي، وشين لي، وهامفري شي. +إنه محول رؤية هرمي يعتمد على انتباه الجوار، وهو نمط انتباه ذاتي للنافذة المنزلقة. +المقتطف من الورقة هو كما يلي: + +*نقدم Neighborhood Attention (NA)، وهو أول آلية انتباه منزلق فعالة وقابلة للتطوير للرؤية. +NA هي عملية لكل بكسل، وتحديد موقع الاهتمام الذاتي (SA) لأقرب بكسلات مجاورة، وبالتالي فهو يتمتع +تعقيد خطي للوقت والمساحة مقارنة بالتعقيد التربيعي لـ SA. يسمح نمط النافذة المنزلقة لمجال استقبال NA +بالنمو دون الحاجة إلى تحولات بكسل إضافية، ويحافظ على التكافؤ الترجمي، على عكس +محول نافذة الاهتمام الذاتي (WSA) في محول Swin. نقوم بتطوير NATTEN (Neighborhood Attention Extension)، وهي حزمة Python +مع نوى C++ و CUDA فعالة، والتي تسمح لـ NA بالعمل بشكل أسرع بنسبة تصل إلى 40% من WSA في Swin مع استخدام ما يصل إلى 25% أقل +الذاكرة. نقدم أيضًا محول الانتباه المجاور (NAT)، وهو تصميم محول هرمي جديد يعتمد على NA +التي تعزز أداء تصنيف الصور والرؤية لأسفل البئر. النتائج التجريبية على NAT تنافسية؛ +يصل NAT-Tiny إلى 83.2% دقة أعلى على ImageNet، و 51.4% mAP على MS-COCO و 48.4% mIoU على ADE20K، وهو ما يمثل 1.9% +تحسين دقة ImageNet، و 1.0% mAP لـ COCO، و 2.6% mIoU لـ ADE20K على نموذج Swin بحجم مماثل. * + + + + انتباه الجوار مقارنة بأنماط الاهتمام الأخرى. +مأخوذ من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [علي حساني](https://huggingface.co/alihassanijr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/SHI-Labs/Neighborhood-Attention-Transformer). + +## نصائح الاستخدام + +- يمكن للمرء استخدام واجهة برمجة التطبيقات [`AutoImageProcessor`] لتحضير الصور للنموذج. +- يمكن استخدام NAT كـ *عمود فقري*. عندما `output_hidden_states = True`، +سيقوم بإخراج كل من `hidden_states` و `reshaped_hidden_states`. +يكون لـ `reshaped_hidden_states` شكل `(batch، num_channels، height، width)` بدلاً من +`(batch_size، height، width، num_channels)`. + +ملاحظات: + +- يعتمد NAT على تنفيذ [NATTEN](https://github.com/SHI-Labs/NATTEN/) لانتباه الجوار. +يمكنك تثبيته بعجلات مسبقة البناء لنظام Linux عن طريق الرجوع إلى [shi-labs.com/natten](https://shi-labs.com/natten)، +أو قم بالبناء على نظامك عن طريق تشغيل `pip install natten`. +يرجى ملاحظة أن هذا الأخير سيستغرق وقتًا طويلاً لتجميع NATTEN. لا تدعم NATTEN أجهزة Windows بعد. +- حجم التصحيح 4 هو الوحيد المدعوم في الوقت الحالي. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها برمز 🌎) لمساعدتك في البدء باستخدام NAT. + + + +- مدعوم من [`NatForImageClassification`] بواسطة [نص برمجي توضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيء جديد بدلاً من تكرار مورد موجود. + +## NatConfig + +[[autodoc]] NatConfig + +## NatModel + +[[autodoc]] NatModel + +- forward + +## NatForImageClassification + +[[autodoc]] NatForImageClassification + +- forward \ No newline at end of file From e063af058892f5f98e81b4591ff35a3d63105eda Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:48 +0300 Subject: [PATCH 520/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/nezha.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/nezha.md | 54 +++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 docs/source/ar/model_doc/nezha.md diff --git a/docs/source/ar/model_doc/nezha.md b/docs/source/ar/model_doc/nezha.md new file mode 100644 index 00000000000000..0b2d88f8847fd8 --- /dev/null +++ b/docs/source/ar/model_doc/nezha.md @@ -0,0 +1,54 @@ +# Nezha + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولن نقبل أي طلبات سحب (PRs) جديدة لتغيير شفرته. إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + +## نظرة عامة +اقترح Junqiu Wei وآخرون نموذج Nezha في ورقة البحث [NEZHA: Neural Contextualized Representation for Chinese Language Understanding](https://arxiv.org/abs/1909.00204). فيما يلي الملخص المستخرج من الورقة: + +*حققت نماذج اللغة المعالجة مسبقًا نجاحات كبيرة في مختلف مهام فهم اللغة الطبيعية (NLU) بسبب قدرتها على التقاط المعلومات السياقية العميقة في النص من خلال المعالجة المسبقة على نصوص ضخمة. في هذا التقرير الفني، نقدم ممارستنا في معالجة النماذج اللغوية المسماة NEZHA (التمثيل السياقي العصبي لفهم اللغة الصينية) على النصوص الصينية وضبطها الدقيق لمهام NLU الصينية. يعتمد الإصدار الحالي من NEZHA على BERT مع مجموعة من التحسينات المثبتة، والتي تشمل الترميز الموضعي النسبي الوظيفي كنظام ترميز موضعي فعال، واستراتيجية القناع لكلمة كاملة، والمعالجة الدقيقة المختلطة، ومُحَسِّن LAMB عند تدريب النماذج. وتظهر النتائج التجريبية أن NEZHA يحقق أفضل الأداء عند ضبطه الدقيق على عدة مهام صينية تمثيلية، بما في ذلك التعرف على الكيانات المسماة (NER في صحيفة الشعب اليومية)، ومطابقة الجمل (LCQMC)، وتصنيف المشاعر الصينية (ChnSenti)، والاستدلال اللغوي الطبيعي (XNLI).* + +تمت المساهمة بهذا النموذج من قبل [sijunhe](https://huggingface.co/sijunhe). يمكن العثور على الشفرة الأصلية [هنا](https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/NEZHA-PyTorch). + +## الموارد +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف العلامات](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## NezhaConfig +[[autodoc]] NezhaConfig + +## NezhaModel +[[autodoc]] NezhaModel +- forward + +## NezhaForPreTraining +[[autodoc]] NezhaForPreTraining +- forward + +## NezhaForMaskedLM +[[autodoc]] NezhaForMaskedLM +- forward + +## NezhaForNextSentencePrediction +[[autodoc]] NezhaForNextSentencePrediction +- forward + +## NezhaForSequenceClassification +[[autodoc]] NezhaForSequenceClassification +- forward + +## NezhaForMultipleChoice +[[autodoc]] NezhaForMultipleChoice +- forward + +## NezhaForTokenClassification +[[autodoc]] NezhaForTokenClassification +- forward + +## NezhaForQuestionAnswering +[[autodoc]] NezhaForQuestionAnswering +- forward \ No newline at end of file From 6c5fe67b6bce8d6335a5e154a43ee825cc5d50ed Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:50 +0300 Subject: [PATCH 521/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/nllb-moe.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/nllb-moe.md | 94 ++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 docs/source/ar/model_doc/nllb-moe.md diff --git a/docs/source/ar/model_doc/nllb-moe.md b/docs/source/ar/model_doc/nllb-moe.md new file mode 100644 index 00000000000000..ce0922dc25272b --- /dev/null +++ b/docs/source/ar/model_doc/nllb-moe.md @@ -0,0 +1,94 @@ +# NLLB-MOE + +## نظرة عامة + +تم تقديم نموذج NLLB في ورقة "No Language Left Behind: Scaling Human-Centered Machine Translation" بواسطة Marta R. Costa-jussà وآخرون. يهدف النموذج إلى كسر حاجز الـ 200 لغة مع ضمان نتائج آمنة وعالية الجودة، مع مراعاة الاعتبارات الأخلاقية. وقد قام المؤلفون بإجراء مقابلات استكشافية مع متحدثين أصليين لتوضيح الحاجة إلى دعم الترجمة للغات منخفضة الموارد، ثم قاموا بتطوير مجموعات بيانات ونماذج تهدف إلى تضييق الفجوة في الأداء بين اللغات منخفضة و عالية الموارد. + +يقدم النموذج تحسينات معمارية وتدريبية لمكافحة الإفراط في التعلم أثناء التدريب على آلاف المهام. ومن المهم أن المؤلفين قاموا بتقييم أداء أكثر من 40,000 اتجاه ترجمة مختلف باستخدام معيار مرجعي مترجم بشريًا، وهو Flores-200، ودمجوا التقييم البشري مع معيار جديد للسمية يغطي جميع اللغات في Flores-200 لتقييم سلامة الترجمة. + +يحقق النموذج تحسنًا بنسبة 44% في BLEU مقارنة بحالة التقنية السابقة، مما يضع أساسًا مهمًا نحو تحقيق نظام ترجمة شامل. + +## نصائح الاستخدام + +- M2M100ForConditionalGeneration هو النموذج الأساسي لكل من NLLB وNLLB MoE. +- يشبه NLLB-MoE نموذج NLLB إلى حد كبير، ولكنه يعتمد على تنفيذ SwitchTransformers في طبقة التغذية الأمامية الخاصة به. +- مُشَرِّح الرموز هو نفسه المستخدم في نماذج NLLB. + +## الاختلافات في التنفيذ مع SwitchTransformers + +أكبر اختلاف هو طريقة توجيه الرموز المميزة. يستخدم NLLB-MoE طريقة "top-2-gate"، والتي يتم من خلالها اختيار أفضل خبيرين فقط لكل إدخال بناءً على أعلى الاحتمالات المتوقعة من شبكة التوجيه، بينما يتم تجاهل الخبراء الآخرين. في SwitchTransformers، يتم حساب احتمالات أعلى مستوى فقط، مما يعني أن الرموز المميزة لديها احتمال أقل في التوجيه. علاوة على ذلك، إذا لم يتم توجيه رمز مميز إلى أي خبير، فإن SwitchTransformers لا تزال تضيف حالاته المخفية غير المعدلة (نوع من الاتصال المتبقي)، في حين يتم إخفاؤها في آلية التوجيه "top-2" الخاصة بـ NLLB. + +## التوليد باستخدام NLLB-MoE + +تتطلب نقاط التفتيش المتاحة حوالي 350 جيجابايت من مساحة التخزين. تأكد من استخدام "accelerate" إذا لم يكن لديك ذاكرة وصول عشوائي كافية على جهازك. + +عند توليد النص المستهدف، قم بتعيين "forced_bos_token_id" إلى معرف اللغة المستهدفة. يوضح المثال التالي كيفية ترجمة الإنجليزية إلى الفرنسية باستخدام نموذج *facebook/nllb-200-distilled-600M*. + +لاحظ أننا نستخدم الرمز BCP-47 للفرنسية `fra_Latn`. يمكنك الاطلاع على قائمة رموز BCP-47 الكاملة في مجموعة بيانات Flores 200 [هنا](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-moe-54b") +>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b") + +>>> article = "Previously, Ring's CEO, Jamie Siminoff, remarked the company started when his doorbell wasn't audible from his shop in his garage." +>>> inputs = tokenizer(article, return_tensors="pt") + +>>> translated_tokens = model.generate( +... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["fra_Latn"], max_length=50 +... ) +>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] +"Auparavant, le PDG de Ring, Jamie Siminoff, a fait remarquer que la société avait commencé lorsque sa sonnette n'était pas audible depuis sa boutique dans son garage." +``` + +### التوليد من أي لغة أخرى غير الإنجليزية + +الإنجليزية (`eng_Latn`) هي اللغة الافتراضية للترجمة. لتحديد لغة مختلفة للترجمة منها، يجب تحديد رمز BCP-47 في وسيط `src_lang` أثناء تهيئة المُشَرِّح. + +يوضح المثال التالي الترجمة من الرومانية إلى الألمانية: + +```python +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-moe-54b", src_lang="ron_Latn") +>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b") + +>>> article = "Şeful ONU spune că nu există o soluţie militară în Siria" +>>> inputs = tokenizer(article, return_tensors="pt") + +>>> translated_tokens = model.generate( +... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["deu_Latn"], max_length=30 +... ) +>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] +``` + +## الموارد + +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## NllbMoeConfig + +[[autodoc]] NllbMoeConfig + +## NllbMoeTop2Router + +[[autodoc]] NllbMoeTop2Router +- route_tokens +- forward + +## NllbMoeSparseMLP + +[[autodoc]] NllbMoeSparseMLP +- forward + +## NllbMoeModel + +[[autodoc]] NllbMoeModel +- forward + +## NllbMoeForConditionalGeneration + +[[autodoc]] NllbMoeForConditionalGeneration +- forward \ No newline at end of file From d89bbb0f78ce8b10479275190e60f7f299861f38 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:52 +0300 Subject: [PATCH 522/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/nllb.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/nllb.md | 160 +++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 docs/source/ar/model_doc/nllb.md diff --git a/docs/source/ar/model_doc/nllb.md b/docs/source/ar/model_doc/nllb.md new file mode 100644 index 00000000000000..34fd094af6209f --- /dev/null +++ b/docs/source/ar/model_doc/nllb.md @@ -0,0 +1,160 @@ +# NLLB + +## سلوك محدث للمحلل الرمزي + +**إخلاء المسؤولية:** تم إصلاح السلوك الافتراضي للمحلل الرمزي وبالتالي تغييره في أبريل 2023. + +يضيف الإصدار السابق [self.eos_token_id, self.cur_lang_code] في نهاية تسلسل الرموز لكل من تحليل الرموز المصدر والهدف. وهذا خطأ لأن ورقة NLLB تذكر (الصفحة 48، 6.1.1. بنية النموذج): + +> "لاحظ أننا نضيف بادئة إلى تسلسل المصدر بلغة المصدر، على عكس لغة الهدف كما تم القيام به سابقًا في عدة أعمال (Arivazhagan et al.، 2019؛ Johnson et al.، 2017). ويرجع ذلك في المقام الأول إلى أننا نعطي الأولوية لتحسين أداء الصفر للتصوير في أي زوج من 200 لغة بتكلفة بسيطة للأداء الخاضع للإشراف". + +السلوك السابق: + +```python +>>> from transformers import NllbTokenizer + +>>> tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M") +>>> tokenizer("How was your day?").input_ids +[13374, 1398, 4260, 4039, 248130, 2, 256047] + +>>> # 2: '
' +>>> # 256047 : 'eng_Latn' +``` + +السلوك الجديد: + +```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) +``` + +للحصول على مزيد من التفاصيل، لا تتردد في التحقق من PR و Issue المرتبطين. + +## نظرة عامة + +تم تقديم نموذج NLLB في [No Language Left Behind: Scaling Human-Centered Machine Translation](https://arxiv.org/abs/2207.04672) بواسطة Marta R. Costa-jussà, James Cross, Onur Çelebi, Maha Elbayad, Kenneth Heafield, Kevin Heffernan, Elahe Kalbassi, Janice Lam, Daniel Licht, Jean Maillard, Anna Sun, Skyler Wang, Guillaume Wenzek, Al Youngblood, Bapi Akula, Loic Barrault, Gabriel Mejia Gonzalez, Prangthip Hansanti, John Hoffman, Semarley Jarrett, Kaushik Ram Sadagopan, Dirk Rowe, Shannon Spruit, Chau Tran, Pierre Andrews, Necip Fazil Ayan, Shruti Bhosale, Sergey Edunov, Angela Fan, Cynthia Gao, Vedanuj Goswami, Francisco Guzmán, Philipp Koehn, Alexandre Mourachko, Christophe Ropers, Safiyyah Saleem, Holger Schwenk, and Jeff Wang. + +ملخص الورقة هو كما يلي: + +> "انطلاقًا من هدف القضاء على الحواجز اللغوية على نطاق عالمي، رسخت الترجمة الآلية نفسها كمحور رئيسي لبحوث الذكاء الاصطناعي اليوم. ومع ذلك، فقد تجلت هذه الجهود في مجموعة فرعية صغيرة من اللغات، تاركة وراءها الغالبية العظمى من اللغات منخفضة الموارد في الغالب. ما الذي يتطلبه الأمر لاختراق حاجز 200 لغة مع ضمان نتائج آمنة وعالية الجودة، مع مراعاة الاعتبارات الأخلاقية في الوقت نفسه؟ في No Language Left Behind، تصدينا لهذا التحدي من خلال وضع سياق الحاجة إلى دعم الترجمة من اللغات منخفضة الموارد من خلال المقابلات الاستكشافية مع المتحدثين الأصليين. بعد ذلك، قمنا بإنشاء مجموعات بيانات ونماذج تهدف إلى تضييق الفجوة في الأداء بين اللغات منخفضة وذات الموارد العالية. على وجه التحديد، قمنا بتطوير نموذج حساب مشروط يعتمد على Sparse Gated Mixture of Experts تم تدريبه على بيانات تم الحصول عليها بتقنيات فعالة وجديدة لتعدين البيانات مصممة للغات منخفضة الموارد. نقترح العديد من التحسينات المعمارية والتدريبية لمكافحة الإفراط في التعلم أثناء التدريب على آلاف المهام. ومن الأهمية بمكان أننا قمنا بتقييم أداء أكثر من 40,000 اتجاه ترجمة مختلف باستخدام معيار مرجعي مترجم بشري، Flores-200، ودمج التقييم البشري مع معيار سمية جديد يغطي جميع اللغات في Flores-200 لتقييم سلامة الترجمة. يحقق نموذجنا تحسنًا بنسبة 44% في BLEU مقارنة بحالة الفنون السابقة، مما يضع أساسًا مهمًا نحو تحقيق نظام ترجمة شامل." + +يحتوي هذا التنفيذ على النماذج الكثيفة المتاحة عند الإصدار. + +**نموذج NLLB-MoE (خليط الخبراء) متاح الآن! مزيد من التفاصيل [هنا](nllb-moe)** + +تمت المساهمة بهذا النموذج من قبل [Lysandre](https://huggingface.co/lysandre). يمكن العثور على كود المؤلفين [هنا](https://github.com/facebookresearch/fairseq/tree/nllb). + +## التوليد باستخدام NLLB + +عند توليد النص المستهدف، قم بتعيين `forced_bos_token_id` إلى معرف لغة الهدف. يوضح المثال التالي كيفية ترجمة الإنجليزية إلى الفرنسية باستخدام نموذج *facebook/nllb-200-distilled-600M*. + +لاحظ أننا نستخدم رمز BCP-47 للفرنسية `fra_Latn`. راجع [هنا](https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200) للحصول على قائمة بجميع رموز BCP-47 في مجموعة بيانات 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") + +>>> article = "UN Chief says there is no military solution in Syria" +>>> inputs = tokenizer(article, return_tensors="pt") + +>>> translated_tokens = model.generate( +... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["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 +``` + +### التوليد من أي لغة أخرى غير الإنجليزية + +تم تعيين الإنجليزية (`eng_Latn`) كلغة افتراضية للترجمة منها. لتحديد أنك تريد الترجمة من لغة مختلفة، يجب عليك تحديد رمز BCP-47 في وسيط `src_lang` من تهيئة المحلل الرمزي. + +انظر المثال أدناه للترجمة من الرومانية إلى الألمانية: + +```py +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> tokenizer = AutoTokenizer.from_pretrained( +... "facebook/nllb-200-distilled-600M", token=True, src_lang="ron_Latn" +... ) +>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", token=True) + +>>> article = "Şeful ONU spune că nu există o soluţie militară în Siria" +>>> inputs = tokenizer(article, return_tensors="pt") + +>>> translated_tokens = model.generate( +... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["deu_Latn"], max_length=30 +... ) +>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] +UN-Chef sagt, es gibt keine militärische Lösung in Syrien +``` + +## الموارد + +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + +## NllbTokenizer + +[[autodoc]] NllbTokenizer + +- build_inputs_with_special_tokens + +## NllbTokenizerFast + +[[autodoc]] NllbTokenizerFast + +## استخدام Flash Attention 2 + +Flash Attention 2 هو إصدار أسرع وأكثر تحسينًا لحساب درجات الاهتمام والذي يعتمد على نوى `cuda`. + +### التثبيت + +أولاً، تحقق مما إذا كان عتادك متوافقًا مع Flash Attention 2. يمكن العثور على أحدث قائمة بالأجهزة المتوافقة في [الوثائق الرسمية](https://github.com/Dao-AILab/flash-attention#installation-and-features). + +بعد ذلك، قم بتثبيت أحدث إصدار من Flash Attention 2: + +```bash +pip install -U flash-attn --no-build-isolation +``` + +### الاستخدام + +لتحميل نموذج باستخدام Flash Attention 2، يمكننا تمرير وسيط `attn_implementation="flash_attention_2"` إلى [`.from_pretrained`](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained). يمكنك استخدام الدقة `torch.float16` أو `torch.bfloat16`. + +```python +>>> import torch +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to("cuda").eval() +>>> tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M") + +>>> article = "Şeful ONU spune că nu există o soluţie militară în Siria" +>>> inputs = tokenizer(article, return_tensors="pt").to("cuda") + +>>> translated_tokens = model.generate( +... **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["deu_Latn"], max_length=30 +... ) +>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] +"UN-Chef sagt, es gibt keine militärische Lösung in Syrien" +``` + +### تسريع الأداء المتوقع + +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي وFlash Attention 2. + +
+ +
\ No newline at end of file From 11346da033dc910d5de564afb5249564bd2e0203 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:54 +0300 Subject: [PATCH 523/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/nougat.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/nougat.md | 98 ++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/source/ar/model_doc/nougat.md diff --git a/docs/source/ar/model_doc/nougat.md b/docs/source/ar/model_doc/nougat.md new file mode 100644 index 00000000000000..ca23af0ef014a1 --- /dev/null +++ b/docs/source/ar/model_doc/nougat.md @@ -0,0 +1,98 @@ +# Nougat + +## نظرة عامة +اقتُرح نموذج Nougat في ورقة "Nougat: Neural Optical Understanding for Academic Documents" من قبل Lukas Blecher و Guillem Cucurull و Thomas Scialom و Robert Stojnic. يستخدم Nougat نفس البنية المعمارية لـ Donut، مما يعني أنه يستخدم مشفر محول الصور وفك تشفير محول النص التلقائي لترجمة ملفات PDF العلمية إلى Markdown، مما يسهل الوصول إليها. + +وفيما يلي الملخص المستخلص من الورقة: + +*تُخزن المعرفة العلمية في المقام الأول في الكتب والمجلات العلمية، وغالطًا ما تكون على شكل ملفات PDF. ومع ذلك، يؤدي تنسيق PDF إلى فقدان المعلومات الدلالية، خاصة بالنسبة للتعبيرات الرياضية. نقترح نموذج Nougat (Neural Optical Understanding for Academic Documents)، وهو نموذج محول بصري يقوم بمهمة التعرف البصري على الأحرف (OCR) لمعالجة المستندات العلمية إلى لغة ترميز، ونثبت فعالية نموذجنا على مجموعة بيانات جديدة من المستندات العلمية. ويقدم النهج المقترح حلاً واعدًا لتعزيز إمكانية الوصول إلى المعرفة العلمية في العصر الرقمي، من خلال سد الفجوة بين المستندات التي يمكن للإنسان قراءتها والنص الذي يمكن للآلة قراءته.* + + + +نظرة عامة عالية المستوى على Nougat. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). ويمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/nougat). + +## نصائح الاستخدام + +- أسرع طريقة للبدء مع Nougat هي التحقق من [دفاتر الملاحظات التعليمية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Nougat)، والتي توضح كيفية استخدام النموذج في وقت الاستدلال وكذلك الضبط الدقيق على البيانات المخصصة. + +- يتم استخدام Nougat دائمًا ضمن إطار عمل [VisionEncoderDecoder](vision-encoder-decoder). النموذج مطابق لـ [Donut](donut) من حيث البنية المعمارية. + +## الاستنتاج + +يقبل نموذج [`VisionEncoderDecoder`] في Nougat الصور كمدخلات ويستخدم [`~generation.GenerationMixin.generate`] لتوليد النص تلقائيًا بناءً على صورة المدخلات. + +تتولى فئة [`NougatImageProcessor`] معالجة الصورة المدخلة، بينما تقوم فئة [`NougatTokenizerFast`] بفك ترميز رموز الهدف المولدة إلى سلسلة الهدف. وتجمع فئة [`NougatProcessor`] بين فئتي [`NougatImageProcessor`] و [`NougatTokenizerFast`] في مثيل واحد لاستخراج ميزات المدخلات وفك ترميز رموز الهدف المتوقعة. + +- نسخ المستندات خطوة بخطوة من ملفات PDF + +```py +>>> from huggingface_hub import hf_hub_download +>>> import re +>>> from PIL import Image + +>>> from transformers import NougatProcessor, VisionEncoderDecoderModel +>>> from datasets import load_dataset +>>> import torch + +>>> processor = NougatProcessor.from_pretrained("facebook/nougat-base") +>>> model = VisionEncoderDecoderModel.from_pretrained("facebook/nougat-base") + +>>> device = "cuda" if torch.cuda.is_available() else "cpu" +>>> model.to(device) # doctest: +IGNORE_RESULT + +>>> # prepare PDF image for the model +>>> filepath = hf_hub_download(repo_id="hf-internal-testing/fixtures_docvqa", filename="nougat_paper.png", repo_type="dataset") +>>> image = Image.open(filepath) +>>> pixel_values = processor(image, return_tensors="pt").pixel_values + +>>> # generate transcription (here we only generate 30 tokens) +>>> outputs = model.generate( +... pixel_values.to(device), +... min_length=1, +... max_new_tokens=30, +... bad_words_ids=[[processor.tokenizer.unk_token_id]], +... ) + +>>> sequence = processor.batch_decode(outputs, skip_special_tokens=True)[0] +>>> sequence = processor.post_process_generation(sequence, fix_markdown=False) +>>> # note: we're using repr here such for the sake of printing the \n characters, feel free to just print the sequence +>>> print(repr(sequence)) +'\n\n# Nougat: Neural Optical Understanding for Academic Documents\n\n Lukas Blecher\n\nCorrespondence to: lblecher@' +``` + +راجع [مركز النماذج](https://huggingface.co/models?filter=nougat) للبحث عن نقاط تفتيش Nougat. + + + +النموذج مطابق لـ [Donut](donut) من حيث البنية المعمارية. + + + +## NougatImageProcessor + +[[autodoc]] NougatImageProcessor + +- preprocess + +## NougatTokenizerFast + +[[autodoc]] NougatTokenizerFast + +## NougatProcessor + +[[autodoc]] NougatProcessor + +- __call__ + +- from_pretrained + +- save_pretrained + +- batch_decode + +- decode + +- post_process_generation \ No newline at end of file From f38ed1327caa1e6657ef01de36c661508319bb3d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:55 +0300 Subject: [PATCH 524/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/nystromformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/nystromformer.md | 59 +++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/nystromformer.md diff --git a/docs/source/ar/model_doc/nystromformer.md b/docs/source/ar/model_doc/nystromformer.md new file mode 100644 index 00000000000000..ebfd49348465e4 --- /dev/null +++ b/docs/source/ar/model_doc/nystromformer.md @@ -0,0 +1,59 @@ +# Nyströmformer + +## نظرة عامة + +تم اقتراح نموذج Nyströmformer في [*Nyströmformer: A Nyström-Based Algorithm for Approximating Self-Attention*](https://arxiv.org/abs/2102.03902) بواسطة Yunyang Xiong وآخرون. + +مقدمة الورقة البحثية هي كما يلي: + +* برزت محولات الطاقة كأداة قوية لمجموعة واسعة من مهام معالجة اللغة الطبيعية. تعد آلية الاهتمام الذاتي أحد المكونات الرئيسية التي تقود الأداء المتميز لمحولات الطاقة، حيث تقوم بتشفير تأثير اعتماد الرموز الأخرى على كل رمز محدد. على الرغم من الفوائد، إلا أن التعقيد التربيعي للاهتمام الذاتي على طول تسلسل الإدخال حد من تطبيقه على التسلسلات الأطول - وهو موضوع تتم دراسته بنشاط في المجتمع. لمعالجة هذا القيد، نقترح Nyströmformer - وهو نموذج يظهر قابلية توسع مواتية كدالة لطول التسلسل. تقوم فكرتنا على تكييف طريقة Nyström لتقريب الاهتمام الذاتي القياسي بتعقيد O(n). تمكّن قابلية توسع Nyströmformer من تطبيقها على تسلسلات أطول تحتوي على آلاف الرموز. نقوم بتقييمات لمهام متعددة لأسفل على معيار GLUE ومراجعات IMDB بطول تسلسل قياسي، ونجد أن أداء Nyströmformer لدينا مماثل، أو في بعض الحالات، أفضل قليلاً من الاهتمام الذاتي القياسي. في مهام تسلسل طويل في معيار Long Range Arena (LRA)، يعمل Nyströmformer بشكل موات نسبيًا مقارنة بطرق الاهتمام الذاتي الأخرى. الكود الخاص بنا متاح على هذا الرابط https.* + +تمت المساهمة بهذا النموذج من قبل [novice03](https://huggingface.co/novice03). يمكن العثور على الكود الأصلي [هنا](https://github.com/mlpen/Nystromformer). + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## NystromformerConfig + +[[autodoc]] NystromformerConfig + +## NystromformerModel + +[[autodoc]] NystromformerModel + +- forward + +## NystromformerForMaskedLM + +[[autodoc]] NystromformerForMaskedLM + +- forward + +## NystromformerForSequenceClassification + +[[autodoc]] NystromformerForSequenceClassification + +- forward + +## NystromformerForMultipleChoice + +[[autodoc]] NystromformerForMultipleChoice + +- forward + +## NystromformerForTokenClassification + +[[autodoc]] NystromformerForTokenClassification + +- forward + +## NystromformerForQuestionAnswering + +[[autodoc]] NystromformerForQuestionAnswering + +- forward \ No newline at end of file From c1fd3d9d607a2441fc3975a33b82e4bd0fcb8320 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:57 +0300 Subject: [PATCH 525/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/olmo.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/olmo.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/source/ar/model_doc/olmo.md diff --git a/docs/source/ar/model_doc/olmo.md b/docs/source/ar/model_doc/olmo.md new file mode 100644 index 00000000000000..44ff11b858c3bf --- /dev/null +++ b/docs/source/ar/model_doc/olmo.md @@ -0,0 +1,29 @@ +# OLMo + +## نظرة عامة +اقترح نموذج OLMo في ورقة بحثية بعنوان [OLMo: Accelerating the Science of Language Models](https://arxiv.org/abs/2402.00838) من قبل Dirk Groeneveld وIz Beltagy وPete Walsh وآخرين. + +OLMo هو سلسلة من النماذج اللغوية المفتوحة المصممة لتمكين علم نماذج اللغة. تم تدريب نماذج OLMo على مجموعة بيانات Dolma. نقوم بإطلاق جميع التعليمات البرمجية ونقاط التفتيش والسجلات (قريباً) والتفاصيل المشاركة في تدريب هذه النماذج. + +الملخص من الورقة هو كما يلي: + +> "أصبحت نماذج اللغة شائعة الاستخدام في كل من أبحاث معالجة اللغة الطبيعية وفي المنتجات التجارية. ومع تزايد أهميتها التجارية، أصبحت أكثر النماذج قوة مغلقة، ومحصورة خلف واجهات مملوكة، مع عدم الكشف عن التفاصيل المهمة لبياناتها التدريبية وبنيتها وتطويرها. ونظرًا لأهمية هذه التفاصيل في دراسة هذه النماذج علميًا، بما في ذلك التحيزات والمخاطر المحتملة، نعتقد أنه من الضروري أن يحصل مجتمع البحث على نماذج لغة مفتوحة وقوية حقًا. لتحقيق هذه الغاية، يقدم هذا التقرير الفني التفاصيل الخاصة بالإصدار الأول من OLMo، وهو نموذج لغة مفتوح حقًا ومتطور وإطار عمل لبناء ودراسة علم نمذجة اللغة. على عكس معظم الجهود السابقة التي لم تطلق سوى أوزان النماذج ورمز الاستدلال، نقوم بإطلاق OLMo والإطار بالكامل، بما في ذلك بيانات التدريب ورمز التدريب والتقييم. نأمل أن يؤدي هذا الإصدار إلى تمكين وتعزيز مجتمع البحث المفتوح وإلهام موجة جديدة من الابتكار." + +تمت المساهمة بهذا النموذج من قبل [shanearora](https://huggingface.co/shanearora). +يمكن العثور على الكود الأصلي [هنا](https://github.com/allenai/OLMo/tree/main/olmo). + +## OlmoConfig + +[[autodoc]] OlmoConfig + +## OlmoModel + +[[autodoc]] OlmoModel + +- forward + +## OlmoForCausalLM + +[[autodoc]] OlmoForCausalLM + +- forward \ No newline at end of file From 9856bc3862bd3e823e6504d1821b1980a6a5fd19 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:27:59 +0300 Subject: [PATCH 526/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/oneformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/oneformer.md | 70 +++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/source/ar/model_doc/oneformer.md diff --git a/docs/source/ar/model_doc/oneformer.md b/docs/source/ar/model_doc/oneformer.md new file mode 100644 index 00000000000000..741fc443f4d347 --- /dev/null +++ b/docs/source/ar/model_doc/oneformer.md @@ -0,0 +1,70 @@ +# OneFormer + +## نظرة عامة +تم اقتراح نموذج OneFormer في ورقة بحثية بعنوان [OneFormer: One Transformer to Rule Universal Image Segmentation](https://arxiv.org/abs/2211.06220) بواسطة Jitesh Jain وآخرون. OneFormer هو إطار عمل شامل لتجزئة الصور يمكن تدريبه على مجموعة بيانات بانوبتيك واحدة لأداء مهام التجزئة الدلالية والتجزئة مثيل والتجزئة الشاملة. يستخدم OneFormer رمز المهمة لتوجيه النموذج نحو المهمة قيد التركيز، مما يجعل البنية موجهة بالمهمة للتدريب وديناميكية المهمة للاستدلال. + +![OneFormer Teaser](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/oneformer_teaser.png) + +ملخص الورقة البحثية هو كما يلي: + +> "توحيد تجزئة الصور ليس بمفهوم جديد. وتشمل المحاولات السابقة لتوحيد تجزئة الصور في العقود الماضية تحليل المشاهد والتجزئة الشاملة، وفي الآونة الأخيرة، معماريات بانوبتيك الجديدة. ومع ذلك، فإن مثل هذه المعماريات البانوبتيكية لا توحد حقًا تجزئة الصور لأنها تحتاج إلى تدريب فردي على التجزئة الدلالية أو تجزئة مثيل أو التجزئة الشاملة لتحقيق أفضل أداء. في الوضع المثالي، يجب تدريب الإطار الشامل حقًا مرة واحدة فقط وتحقيق أداء حالة ثابتة عبر جميع مهام تجزئة الصور الثلاثة. ولهذه الغاية، نقترح OneFormer، وهو إطار عمل شامل لتجزئة الصور يوحد التجزئة مع تصميم تدريب متعدد المهام. أولاً، نقترح استراتيجية تدريب مشتركة مشروطة بالمهمة تتيح التدريب على حقائق كل مجال (التجزئة الدلالية وتجزئة مثيل والتجزئة الشاملة) ضمن عملية تدريب متعددة المهام واحدة. ثانيًا، نقدم رمز مهمة لشرط نموذجنا على المهمة قيد التنفيذ، مما يجعل نموذجنا ديناميكيًا للمهمة لدعم التدريب والاستدلال متعدد المهام. ثالثًا، نقترح استخدام خسارة تباينية استعلام-نص أثناء التدريب لإنشاء تمييزات أفضل بين المهام والطبقات. من الجدير بالذكر أن نموذج OneFormer الفردي الخاص بنا يفوق نماذج Mask2Former المتخصصة عبر جميع مهام التجزئة الثلاثة على ADE20k وCityScapes وCOCO، على الرغم من تدريب الأخير على كل مهمة من المهام الثلاثة بشكل فردي بثلاثة أضعاف الموارد. مع ظهور العمود الفقري ConvNeXt وDiNAT، نشهد المزيد من التحسينات في الأداء. نعتقد أن OneFormer يمثل خطوة مهمة نحو جعل تجزئة الصور أكثر شمولاً وإتاحة." + +توضح الصورة أدناه بنية OneFormer. مأخوذة من [الورقة البحثية الأصلية](https://arxiv.org/abs/2211.06220). + +![OneFormer Architecture](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/oneformer_architecture.png) + +تمت المساهمة بهذا النموذج من قبل [Jitesh Jain](https://huggingface.co/praeclarumjj3). يمكن العثور على الكود الأصلي [هنا](https://github.com/SHI-Labs/OneFormer). + +## نصائح الاستخدام + +- يتطلب OneFormer مدخلين أثناء الاستدلال: *الصورة* و*رمز المهمة*. +- أثناء التدريب، يستخدم OneFormer فقط التعليقات التوضيحية البانوبتيكية. +- إذا كنت تريد تدريب النموذج في بيئة موزعة عبر عدة عقد، فيجب تحديث وظيفة `get_num_masks` داخل فئة `OneFormerLoss` في `modeling_oneformer.py`. عند التدريب على عدة عقد، يجب تعيين هذا إلى متوسط عدد الأقنعة المستهدفة عبر جميع العقد، كما هو موضح في التنفيذ الأصلي [هنا](https://github.com/SHI-Labs/OneFormer/blob/33ebb56ed34f970a30ae103e786c0cb64c653d9a/oneformer/modeling/criterion.py#L287). +- يمكن استخدام [`OneFormerProcessor`] لتحضير صور الإدخال ومدخلات المهام للنموذج وأهداف النموذج الاختيارية. يدمج [`OneformerProcessor`] [`OneFormerImageProcessor`] و [`CLIPTokenizer`] في مثيل واحد لتحضير الصور وتشفير مدخلات المهام. +- للحصول على التجزئة النهائية، اعتمادًا على المهمة، يمكنك استدعاء [`~OneFormerProcessor.post_process_semantic_segmentation`] أو [`~OneFormerImageProcessor.post_process_instance_segmentation`] أو [`~OneFormerImageProcessor.post_process_panoptic_segmentation`]. يمكن حل المهام الثلاث جميعها باستخدام إخراج [`OneFormerForUniversalSegmentation`]، وتقبل التجزئة الشاملة حجة `label_ids_to_fuse` الاختيارية لدمج مثيلات الكائن المستهدف (مثل السماء) معًا. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام OneFormer. + +- يمكن العثور على دفاتر الملاحظات التوضيحية المتعلقة بالاستدلال + الضبط الدقيق على بيانات مخصصة [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/OneFormer). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه. + +يجب أن يوضح المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## المخرجات الخاصة بـ OneFormer + +[[autodoc]] models.oneformer.modeling_oneformer.OneFormerModelOutput + +[[autodoc]] models.oneformer.modeling_oneformer.OneFormerForUniversalSegmentationOutput + +## OneFormerConfig + +[[autodoc]] OneFormerConfig + +## OneFormerImageProcessor + +[[autodoc]] OneFormerImageProcessor + +- preprocess +- encode_inputs +- post_process_semantic_segmentation +- post_process_instance_segmentation +- post_process_panoptic_segmentation + +## OneFormerProcessor + +[[autodoc]] OneFormerProcessor + +## OneFormerModel + +[[autodoc]] OneFormerModel + +- forward + +## OneFormerForUniversalSegmentation + +[[autodoc]] OneFormerForUniversalSegmentation + +- forward \ No newline at end of file From 19bffbeeb74a4d46f3afcdaa3b301f4a246a1b4d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:01 +0300 Subject: [PATCH 527/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/open-llama.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/open-llama.md | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/source/ar/model_doc/open-llama.md diff --git a/docs/source/ar/model_doc/open-llama.md b/docs/source/ar/model_doc/open-llama.md new file mode 100644 index 00000000000000..d31d88826982a2 --- /dev/null +++ b/docs/source/ar/model_doc/open-llama.md @@ -0,0 +1,37 @@ +# Open-Llama + +**ملاحظة هامة:** +هذا النموذج في وضع الصيانة فقط، ولن نقبل أي طلبات سحب (PRs) جديدة لتعديل شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعمه: v4.31.0. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: + +``` +pip install -U transformers==4.31.0 +``` + +**ملاحظة:** يختلف هذا النموذج عن [نماذج OpenLLaMA](https://huggingface.co/models?search=openllama) على Hugging Face Hub، والتي تستخدم بشكل أساسي [بنية LLaMA](llama). + +## نظرة عامة +اقترح نموذج Open-Llama في مشروع Open-Llama مفتوح المصدر من قبل مطور المجتمع s-JoL. +يستند النموذج بشكل أساسي إلى LLaMA مع بعض التعديلات، حيث يدمج الانتباه الكفء من حيث الذاكرة من Xformers، والتضمين المستقر من Bloom، والتضمين المشترك للإدخال والإخراج من PaLM. +كما أنه مدرب مسبقًا على كل من اللغتين الصينية والإنجليزية، مما يمنحه أداءً أفضل في مهام اللغة الصينية. + +ساهم بهذا النموذج [s-JoL](https://huggingface.co/s-JoL). +تم إصدار الشفرة الأصلية على GitHub بواسطة [s-JoL](https://github.com/s-JoL)، ولكن تمت إزالتها الآن. + +## OpenLlamaConfig +[[autodoc]] OpenLlamaConfig + +## OpenLlamaModel +[[autodoc]] OpenLlamaModel + +- forward + +## OpenLlamaForCausalLM +[[autodoc]] OpenLlamaForCausalLM + +- forward + +## OpenLlamaForSequenceClassification +[[autodoc]] OpenLlamaForSequenceClassification + +- forward \ No newline at end of file From ed4a6a1223c427222cd64dc8cd894dec0a4624e6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:02 +0300 Subject: [PATCH 528/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/openai-gpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/openai-gpt.md | 138 +++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 docs/source/ar/model_doc/openai-gpt.md diff --git a/docs/source/ar/model_doc/openai-gpt.md b/docs/source/ar/model_doc/openai-gpt.md new file mode 100644 index 00000000000000..1f95f7805b377c --- /dev/null +++ b/docs/source/ar/model_doc/openai-gpt.md @@ -0,0 +1,138 @@ +# OpenAI GPT + +## نظرة عامة +اقترح نموذج OpenAI GPT في ورقة "تحسين فهم اللغة عن طريق التدريب المسبق التوليدي" من قبل Alec Radford و Karthik Narasimhan و Tim Salimans و Ilya Sutskever. وهو محول أحادي الاتجاه تم تدريبه مسبقًا باستخدام نمذجة اللغة على مجموعة بيانات كبيرة بها تبعيات طويلة المدى، وهي Toronto Book Corpus. + +ملخص الورقة البحثية هو كما يلي: + +> "يشتمل فهم اللغة الطبيعية على مجموعة واسعة من المهام المتنوعة مثل الاستنتاج النصي، والأسئلة والأجوبة، وتقييم التشابه الدلالي، وتصنيف المستندات. على الرغم من وفرة مجموعات البيانات النصية الكبيرة غير الموسومة، إلا أن البيانات الموسومة لتعلم هذه المهام المحددة نادرة، مما يجعل من الصعب على النماذج التي تم تدريبها بشكل تمييزي أن تؤدي بشكل كاف. نحن نثبت أنه يمكن تحقيق مكاسب كبيرة في هذه المهام من خلال التدريب المسبق التوليدي لنموذج اللغة على مجموعة بيانات متنوعة من النصوص غير الموسومة، يليه الضبط الدقيق التمييزي لكل مهمة محددة. وعلى عكس الأساليب السابقة، نستخدم تحويلات المدخلات الواعية بالمهام أثناء الضبط الدقيق لتحقيق نقل فعال مع إجراء تغييرات طفيفة على بنية النموذج. نثبت فعالية نهجنا على مجموعة واسعة من المعايير المرجعية لفهم اللغة الطبيعية. يفوق نموذجنا العام غير المخصص للمهمة النماذج التي تم تدريبها بشكل تمييزي والتي تستخدم البنى المصممة خصيصًا لكل مهمة، مما يحسن بشكل كبير حالة الفن في 9 من أصل 12 مهمة تمت دراستها." + +"Write With Transformer" هو تطبيق ويب تم إنشاؤه واستضافته بواسطة Hugging Face لعرض القدرات التوليدية لعدة نماذج. يعد GPT أحد هذه النماذج. + +تمت المساهمة بهذا النموذج من قبل [thomwolf](https://huggingface.co/thomwolf). يمكن العثور على الكود الأصلي [هنا](https://github.com/openai/finetune-transformer-lm). + +## نصائح الاستخدام + +- GPT هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بإضافة حشو إلى المدخلات من اليمين بدلاً من اليسار. + +- تم تدريب GPT باستخدام هدف نمذجة اللغة السببية (CLM) وبالتالي فهو قوي في التنبؤ بالرمز التالي في تسلسل. الاستفادة من هذه الميزة تسمح لـ GPT-2 بتوليد نص متماسك من الناحية التركيبية كما يمكن ملاحظته في مثال نص البرنامج النصي *run_generation.py*. + +ملاحظة: + +إذا كنت تريد إعادة إنتاج عملية الترميز الأصلية لورقة *OpenAI GPT*، فستحتاج إلى تثبيت `ftfy` و`SpaCy`: + +```bash +pip install spacy ftfy==4.4.3 +python -m spacy download en +``` + +إذا لم تقم بتثبيت `ftfy` و`SpaCy`، فسيتم تعيين [`OpenAIGPTTokenizer`] بشكل افتراضي للترميز باستخدام `BasicTokenizer` الخاص بـ BERT متبوعًا بالترميز Byte-Pair (الذي يجب أن يكون مناسبًا لمعظم الاستخدامات، لا داعي للقلق). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام OpenAI GPT. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- منشور مدونة حول [تفوق أداء OpenAI GPT-3 باستخدام SetFit لتصنيف النصوص](https://www.philschmid.de/getting-started-setfit). + +- راجع أيضًا: [دليل مهام تصنيف النصوص](../tasks/sequence_classification) + +- مدونة حول كيفية [ضبط نموذج GPT-2 غير الإنجليزي باستخدام Hugging Face](https://www.philschmid.de/fine-tune-a-non-english-gpt-2-model-with-huggingface). + +- مدونة حول [كيفية توليد النص: استخدام طرق فك مختلفة لتوليد اللغة مع المحولات](https://huggingface.co/blog/how-to-generate) مع GPT-2. + +- مدونة حول [تدريب CodeParrot 🦜 من الصفر](https://huggingface.co/blog/codeparrot)، وهو نموذج GPT-2 كبير. + +- مدونة حول [توليد النص بشكل أسرع باستخدام TensorFlow و XLA](https://huggingface.co/blog/tf-xla-generate) مع GPT-2. + +- مدونة حول [كيفية تدريب نموذج اللغة باستخدام Megatron-LM](https://huggingface.co/blog/megatron-training) مع نموذج GPT-2. + +- دفتر ملاحظات حول كيفية [ضبط دقيق GPT2 لتوليد كلمات الأغاني على غرار فنانك المفضل](https://colab.research.google.com/github/AlekseyKorshuk/huggingartists/blob/master/huggingartists-demo.ipynb). 🌎 + +- دفتر ملاحظات حول كيفية [ضبط دقيق GPT2 لتوليد التغريدات على غرار مستخدم Twitter المفضل لديك](https://colab.research.google.com/github/borisdayma/huggingtweets/blob/master/huggingtweets-demo.ipynb). 🌎 + +- فصل [نمذجة اللغة السببية](https://huggingface.co/course/en/chapter7/6?fw=pt#training-a-causal-language-model-from-scratch) من دورة 🤗 Hugging Face Course. + +- [`OpenAIGPTLMHeadModel`] مدعوم بواسطة مثال نص البرنامج النصي [نمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#gpt-2gpt-and-causal-language-modeling)، ونص البرنامج النصي [توليد النص](https://github.com/huggingface/transformers/blob/main/examples/pytorch/text-generation/run_generation.py) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). + +- [`TFOpenAIGPTLMHeadModel`] مدعوم بواسطة مثال نص البرنامج النصي [نمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_clmpy) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). + +- راجع أيضًا: [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +- مواد الدورة التدريبية حول ترميز [ترميز زوج البايت](https://huggingface.co/course/en/chapter6/5). + +## OpenAIGPTConfig + +[[autodoc]] OpenAIGPTConfig + +## OpenAIGPTTokenizer + +[[autodoc]] OpenAIGPTTokenizer + +- save_vocabulary + +## OpenAIGPTTokenizerFast + +[[autodoc]] OpenAIGPTTokenizerFast + +## المخرجات الخاصة بـ OpenAI + +[[autodoc]] models.openai.modeling_openai.OpenAIGPTDoubleHeadsModelOutput + +[[autodoc]] models.openai.modeling_tf_openai.TFOpenAIGPTDoubleHeadsModelOutput + + + + +## OpenAIGPTModel + +[[autodoc]] OpenAIGPTModel + +- forward + +## OpenAIGPTLMHeadModel + +[[autodoc]] OpenAIGPTLMHeadModel + +- forward + +## OpenAIGPTDoubleHeadsModel + +[[autodoc]] OpenAIGPTDoubleHeadsModel + +- forward + +## OpenAIGPTForSequenceClassification + +[[autodoc]] OpenAIGPTForSequenceClassification + +- forward + + + + +## TFOpenAIGPTModel + +[[autodoc]] TFOpenAIGPTModel + +- call + +## TFOpenAIGPTLMHeadModel + +[[autodoc]] TFOpenAIGPTLMHeadModel + +- call + +## TFOpenAIGPTDoubleHeadsModel + +[[autodoc]] TFOpenAIGPTDoubleHeadsModel + +- call + +## TFOpenAIGPTForSequenceClassification + +[[autodoc]] TFOpenAIGPTForSequenceClassification + +- call + + + \ No newline at end of file From ad217788a907a0049275e57e8cd625834e0a4bb2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:04 +0300 Subject: [PATCH 529/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/opt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/opt.md | 156 ++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 docs/source/ar/model_doc/opt.md diff --git a/docs/source/ar/model_doc/opt.md b/docs/source/ar/model_doc/opt.md new file mode 100644 index 00000000000000..9964e4e0cdb7a1 --- /dev/null +++ b/docs/source/ar/model_doc/opt.md @@ -0,0 +1,156 @@ +# OPT + +## نظرة عامة +اقترح نموذج OPT في [نماذج المحول اللغوي المسبقة التدريب المفتوحة](https://arxiv.org/pdf/2205.01068) بواسطة Meta AI. +OPT عبارة عن سلسلة من نماذج اللغة السببية مفتوحة المصدر الكبيرة التي تتمتع بأداء مشابه لـ GPT3. + +المستخلص من الورقة هو ما يلي: + +*أظهرت نماذج اللغة الكبيرة، التي غالبًا ما يتم تدريبها لمئات الآلاف من أيام الحوسبة، قدرات ملحوظة للتعلم بدون بيانات أو بقدر قليل من البيانات. ونظرًا لتكلفتها الحسابية، يصعب تكرار هذه النماذج بدون رأس مال كبير. وبالنسبة للقليل منها المتاح من خلال واجهات برمجة التطبيقات، لا يُسمح بالوصول إلى أوزان النموذج الكاملة، مما يجعل دراستها أمرًا صعبًا. نقدم Open Pre-trained Transformers (OPT)، وهي مجموعة من المحولات المُشفرة مسبقًا والتي تتراوح من 125 مليون إلى 175 مليار معامل، والتي نهدف إلى مشاركتها بالكامل وبشكل مسؤول مع الباحثين المهتمين. ونظهر أن OPT-175B مماثل لـ GPT-3، في حين أنه يتطلب فقط 1/7 من البصمة الكربونية لتطويره. كما أننا نطلق دفتر ملاحظاتنا الذي يفصل التحديات التي واجهناها على مستوى البنية التحتية، إلى جانب التعليمات البرمجية لتجربة جميع النماذج التي تم إصدارها.* + +تمت المساهمة بهذا النموذج من قبل [Arthur Zucker](https://huggingface.co/ArthurZ) و [Younes Belkada](https://huggingface.co/ybelkada) و [Patrick Von Platen](https://huggingface.co/patrickvonplaten). +يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/metaseq). + +النصائح: + +- لدي OPT نفس بنية [`BartDecoder`]. +- على عكس GPT2، يضيف OPT رمز EOS `` في بداية كل موجه. + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء في استخدام OPT. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه. + +من الناحية المثالية، يجب أن يثبت المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- دفتر ملاحظات حول [ضبط نموذج OPT الدقيق باستخدام PEFT و bitsandbytes و Transformers](https://colab.research.google.com/drive/1jCkpikz0J2o20FBQmYmAGdiKmJGOMo-o?usp=sharing). 🌎 +- منشور مدونة حول [استراتيجيات فك التشفير باستخدام OPT](https://huggingface.co/blog/introducing-csearch#62-example-two---opt). +- الفصل الخاص بـ [نمذجة اللغة السببية](https://huggingface.co/course/en/chapter7/6?fw=pt#training-a-causal-language-model-from-scratch) من دورة 🤗 Hugging Face. +- [`OPTForCausalLM`] مدعوم بواسطة [مثال على نص برمجي لنمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#gpt-2gpt-and-causal-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). +- [`TFOPTForCausalLM`] مدعوم بواسطة [مثال على نص برمجي لنمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_clmpy) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). +- [`FlaxOPTForCausalLM`] مدعوم بواسطة [مثال على نص برمجي لنمذجة اللغة السببية](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#causal-language-modeling). + + + +- دليل [مهمة تصنيف النص](sequence_classification.md) +- [`OPTForSequenceClassification`] مدعوم بواسطة [مثال على نص برمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification.ipynb). + + + +- [`OPTForQuestionAnswering`] مدعوم بواسطة [مثال على نص برمجي للإجابة على الأسئلة](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb). +- الفصل الخاص بـ [الإجابة على الأسئلة](https://huggingface.co/course/chapter7/7?fw=pt) من دورة 🤗 Hugging Face. + +⚡️ الاستنتاج + +- منشور مدونة حول [كيفية تشغيل 🤗 Accelerate لنماذج كبيرة جدًا بفضل PyTorch](https://huggingface.co/blog/accelerate-large-models) مع OPT. + +## الجمع بين OPT و Flash Attention 2 + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الاهتمام المنزلقة. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لمستودع flash-attn. تأكد أيضًا من تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.float16``). + +لتحميل وتشغيل نموذج باستخدام Flash Attention 2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import OPTForCausalLM, GPT2Tokenizer +>>> device = "cuda" # الجهاز الذي سيتم تحميل النموذج عليه + +>>> model = OPTForCausalLM.from_pretrained("facebook/opt-350m", torch_dtype=torch.float16, attn_implementation="flash_attention_2") +>>> tokenizer = GPT2Tokenizer.from_pretrained("facebook/opt-350m") + +>>> prompt = ("A chat between a curious human and the Statue of Liberty.\n\nHuman: What is your name?\nStatue: I am the " +"Statue of Liberty.\nHuman: Where do you live?\nStatue: New York City.\nHuman: How long have you lived " +"there?") + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to(device) +>>> model.to(device) + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=30, do_sample=False) +>>> tokenizer.batch_decode(generated_ids)[0] +'A chat between a curious human and the Statue of Liberty.\n\nHuman: What is your name?\nStatue: I am the Statue of Liberty.\nHuman: Where do you live?\nStatue: New York City.\nHuman: How long have you lived there?\nStatue: I have lived here for about a year.\nHuman: What is your favorite place to eat?\nStatue: I love' +``` + +### تسريع المتوقع + +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `facebook/opt-2.7b` وإصدار Flash Attention 2 من النموذج باستخدام طولين تسلسليين مختلفين. + +
+ +
+ +فيما يلي رسم بياني للتسريع المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `facebook/opt-350m` وإصدار Flash Attention 2 من النموذج باستخدام طولين تسلسليين مختلفين. + +
+ +
+ +## OPTConfig + +[[autodoc]] OPTConfig + + + + +## OPTModel + +[[autodoc]] OPTModel + +- forward + +## OPTForCausalLM + +[[autodoc]] OPTForCausalLM + +- forward + +## OPTForSequenceClassification + +[[autodoc]] OPTForSequenceClassification + +- forward + +## OPTForQuestionAnswering + +[[autodoc]] OPTForQuestionAnswering + +- forward + + + + +## TFOPTModel + +[[autodoc]] TFOPTModel + +- call + +## TFOPTForCausalLM + +[[autodoc]] TFOPTForCausalLM + +- call + + + + +## FlaxOPTModel + +[[autodoc]] FlaxOPTModel + +- __call__ + +## FlaxOPTForCausalLM + +[[autodoc]] FlaxOPTForCausalLM + +- __call__ + + + \ No newline at end of file From 54742db3e310b946c312a335fda4132f4df7cca6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:06 +0300 Subject: [PATCH 530/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/owlv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/owlv2.md | 118 ++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 docs/source/ar/model_doc/owlv2.md diff --git a/docs/source/ar/model_doc/owlv2.md b/docs/source/ar/model_doc/owlv2.md new file mode 100644 index 00000000000000..ccaa6494e16868 --- /dev/null +++ b/docs/source/ar/model_doc/owlv2.md @@ -0,0 +1,118 @@ +# OWLv2 + +## نظرة عامة +اقترح OWLv2 في "Scaling Open-Vocabulary Object Detection" من قبل Matthias Minderer وAlexey Gritsenko وNeil Houlsby. يوسع OWLv2 نطاق OWL-ViT باستخدام التدريب الذاتي، والذي يستخدم مكتشفًا موجودًا لتوليد تسميات توضيحية وهمية على أزواج الصور والنصوص. ويؤدي ذلك إلى مكاسب كبيرة على أحدث التقنيات للكشف عن الأشياء ذات الصفر. + +ملخص الورقة هو كما يلي: + +*استفاد الكشف عن الأشياء ذات المفردات المفتوحة بشكل كبير من النماذج البصرية اللغوية مسبقة التدريب، ولكنه لا يزال محدودًا بسبب كمية بيانات التدريب المتاحة للكشف. في حين يمكن توسيع بيانات التدريب على الكشف باستخدام أزواج الصور والنصوص على الويب كإشراف ضعيف، إلا أن ذلك لم يحدث على نطاقات قابلة للمقارنة مع التدريب المسبق على مستوى الصورة. هنا، نقوم بتوسيع نطاق بيانات الكشف باستخدام التدريب الذاتي، والذي يستخدم مكتشفًا موجودًا لتوليد تسميات توضيحية وهمية على أزواج الصور والنصوص. تتمثل التحديات الرئيسية في التدريب الذاتي على نطاق واسع في اختيار مساحة التسمية، وتصفية التسميات التوضيحية الوهمية، وكفاءة التدريب. نقدم نموذج OWLv2 ووصفة OWL-ST للتدريب الذاتي، والتي تتناول هذه التحديات. يتفوق OWLv2 على أداء أحدث الكاشفات ذات المفردات المفتوحة بالفعل على نطاقات تدريب مماثلة (~10 مليون مثال). ومع ذلك، باستخدام OWL-ST، يمكننا التوسع إلى أكثر من 1 مليار مثال، مما يؤدي إلى مزيد من التحسينات الكبيرة: باستخدام بنية L/14، يحسن OWL-ST AP على فئات LVIS النادرة، والتي لم ير النموذج لها أي تسميات توضيحية للصندوق البشري، من 31.2% إلى 44.6% (تحسين نسبته 43%). يفتح OWL-ST التدريب على نطاق الويب للتحديد الموضعي للعالم المفتوح، على غرار ما شوهد في تصنيف الصور ونمذجة اللغة.* + + + +نظرة عامة عالية المستوى على OWLv2. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/scenic/tree/main/scenic/projects/owl_vit). + +## مثال على الاستخدام +OWLv2 هو، مثل سابقه OWL-ViT، نموذج الكشف عن الأشياء المشروط بالنص بدون الصفر. يستخدم OWL-ViT CLIP كعمود فقري متعدد الوسائط، مع محول يشبه ViT للحصول على الميزات المرئية ونموذج اللغة السببية للحصول على الميزات النصية. لاستخدام CLIP للكشف، يزيل OWL-ViT طبقة تجميع الرموز النهائية لنموذج الرؤية ويرفق رأس تصنيف وخزان خفيفين بكل رمز إخراج محول. يتم تمكين التصنيف مفتوح المفردات عن طريق استبدال أوزان طبقة التصنيف الثابتة برموز تضمين اسم الفئة التي يتم الحصول عليها من نموذج النص. يقوم المؤلفون أولاً بتدريب CLIP من الصفر وتدريبه بشكل شامل مع رؤوس التصنيف والصندوق على مجموعات بيانات الكشف القياسية باستخدام خسارة المطابقة الثنائية. يمكن استخدام استعلام نصي واحد أو أكثر لكل صورة للكشف عن الأشياء المشروطة بالنص بدون الصفر. + +يمكن استخدام [`Owlv2ImageProcessor`] لإعادة تحديد حجم الصور (أو إعادة تحجيمها) وتطبيعها للنموذج، ويستخدم [`CLIPTokenizer`] لترميز النص. [`Owlv2Processor`] يجمع [`Owlv2ImageProcessor`] و [`CLIPTokenizer`] في مثيل واحد لترميز النص وإعداد الصور. يوضح المثال التالي كيفية إجراء الكشف عن الأشياء باستخدام [`Owlv2Processor`] و [`Owlv2ForObjectDetection`]. + +```python +>>> import requests +>>> from PIL import Image +>>> import torch + +>>> from transformers import Owlv2Processor, Owlv2ForObjectDetection + +>>> processor = Owlv2Processor.from_pretrained("google/owlv2-base-patch16-ensemble") +>>> model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-base-patch16-ensemble") + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> texts = [["a photo of a cat", "a photo of a dog"]] +>>> inputs = processor(text=texts, images=image, return_tensors="pt") +>>> outputs = model(**inputs) + +>>> # Target image sizes (height, width) to rescale box predictions [batch_size, 2] +>>> target_sizes = torch.Tensor([image.size[::-1]]) +>>> # Convert outputs (bounding boxes and class logits) to Pascal VOC Format (xmin, ymin, xmax, ymax) +>>> results = processor.post_process_object_detection(outputs=outputs, target_sizes=target_sizes, threshold=0.1) +>>> i = 0 # Retrieve predictions for the first image for the corresponding text queries +>>> text = texts[i] +>>> boxes, scores, labels = results[i]["boxes"], results[i]["scores"], results[i]["labels"] +>>> for box, score, label in zip(boxes, scores, labels): +... box = [round(i, 2) for i in box.tolist()] +... print(f"Detected {text[label]} with confidence {round(score.item(), 3)} at location {box}") +Detected a photo of a cat with confidence 0.614 at location [341.67, 23.39, 642.32, 371.35] +Detected a photo of a cat with confidence 0.665 at location [6.75, 51.96, 326.62, 473.13] +``` + +## الموارد +- يمكن العثور على دفتر ملاحظات توضيحي حول استخدام OWLv2 للكشف عن الصفر واللقطة الواحدة (التي يوجهها الصور) [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/OWLv2). +- [دليل مهام الكشف عن الأشياء ذات الصفر](../tasks/zero_shot_object_detection) + + +تطابق بنية OWLv2 تلك الموجودة في OWL-ViT، ولكن رأس الكشف عن الأشياء يشمل الآن أيضًا مصنفًا للكائنات، والذي يتنبأ باحتمالية وجود كائن (على عكس الخلفية) في صندوق متوقع. يمكن استخدام درجة الكائن لترتيب التوقعات أو تصفيتها بشكل مستقل عن استعلامات النص. +يتم استخدام OWLv2 بنفس طريقة استخدام [OWL-ViT](owlvit) مع معالج صورة جديد محدث ([`Owlv2ImageProcessor`]). + + +## Owlv2Config + +[[autodoc]] Owlv2Config + +- from_text_vision_configs + +## Owlv2TextConfig + +[[autodoc]] Owlv2TextConfig + +## Owlv2VisionConfig + +[[autodoc]] Owlv2VisionConfig + +## Owlv2ImageProcessor + +[[autodoc]] Owlv2ImageProcessor + +- preprocess + +- post_process_object_detection + +- post_process_image_guided_detection + +## Owlv2Processor + +[[autodoc]] Owlv2Processor + +## Owlv2Model + +[[autodoc]] Owlv2Model + +- forward + +- get_text_features + +- get_image_features + +## Owlv2TextModel + +[[autodoc]] Owlv2TextModel + +- forward + +## Owlv2VisionModel + +[[autodoc]] Owlv2VisionModel + +- forward + +## Owlv2ForObjectDetection + +[[autodoc]] Owlv2ForObjectDetection + +- forward + +- image_guided_detection \ No newline at end of file From e3d5b7c0676b19c01ae4cb9169e03c4a5ff9e544 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:08 +0300 Subject: [PATCH 531/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/owlvit.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/owlvit.md | 121 +++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/source/ar/model_doc/owlvit.md diff --git a/docs/source/ar/model_doc/owlvit.md b/docs/source/ar/model_doc/owlvit.md new file mode 100644 index 00000000000000..0667f85842663d --- /dev/null +++ b/docs/source/ar/model_doc/owlvit.md @@ -0,0 +1,121 @@ +# OWL-ViT + +## نظرة عامة +OWL-ViT (اختصار لـ Vision Transformer for Open-World Localization) اقترحه Matthias Minderer, et al. في ورقتهم البحثية [Simple Open-Vocabulary Object Detection with Vision Transformers](https://arxiv.org/abs/2205.06230). OWL-ViT هي شبكة كشف كائنات ذات مفردات مفتوحة تم تدريبها على مجموعة متنوعة من أزواج (الصورة، النص). يمكن استخدامه لاستعلام صورة واحدة أو أكثر باستخدام استعلامات نصية للبحث عن كائنات مستهدفة وكشفها موصوفة في النص. + +مقتطف من الورقة البحثية على النحو التالي: + +*لقد أدى الجمع بين البنى البسيطة والتعلم المسبق واسع النطاق إلى تحسينات هائلة في تصنيف الصور. بالنسبة لكشف الكائنات، فإن نهج التعلم المسبق والتوسع أقل رسوخًا، خاصة في الإعداد طويل الذيل والمفردات المفتوحة، حيث تكون بيانات التدريب نادرة نسبيًا. في هذه الورقة، نقترح وصفة قوية لنقل النماذج القائمة على الصور والنصوص إلى كشف الكائنات ذات المفردات المفتوحة. نستخدم بنية Vision Transformer القياسية مع تعديلات طفيفة، والتعلم المسبق التبايني للصور والنصوص، وضبط دقيق للكشف من النهاية إلى النهاية. يُظهر تحليلنا لخصائص التوسع في هذا الإعداد أن زيادة التعلم المسبق على مستوى الصورة وحجم النموذج ينتج عنه تحسينات ثابتة في مهمة الكشف النهائية. نقدم استراتيجيات التكيف والتنظيم المطلوبة لتحقيق أداء قوي جدًا في كشف الكائنات المشروط بالنص بدون بيانات تدريب وصفرية. الكود والنماذج متوفرة على GitHub.* + +drawing + +بنية OWL-ViT. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج من قبل [adirik](https://huggingface.co/adirik). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/scenic/tree/main/scenic/projects/owl_vit). + +## نصائح الاستخدام +OWL-ViT هو نموذج كشف كائنات مشروط بالنص بدون بيانات تدريب. يستخدم OWL-ViT [CLIP](clip) كعمود فقري متعدد الوسائط، مع محول تشابهي مثل ViT للحصول على الميزات المرئية ونموذج لغة سببي للحصول على ميزات النص. لاستخدام CLIP للكشف، يزيل OWL-ViT طبقة تجميع الرموز النهائية من نموذج الرؤية ويرفق رأس تصنيف وخزان خفيف الوزن بكل رمز إخراج محول. يتم تمكين التصنيف مفتوح المفردات عن طريق استبدال أوزان طبقة التصنيف الثابتة برموز تضمين اسم الفئة التي يتم الحصول عليها من نموذج النص. يقوم المؤلفون أولاً بتدريب CLIP من الصفر وضبطها الدقيق من النهاية إلى النهاية مع رؤوس التصنيف والخزان على مجموعات بيانات الكشف القياسية باستخدام خسارة المطابقة الثنائية. يمكن استخدام استعلام نصي واحد أو أكثر لكل صورة لأداء الكشف عن الكائنات المشروط بالنص بدون بيانات تدريب. + +يمكن استخدام [`OwlViTImageProcessor`] لإعادة تحديد حجم الصور (أو إعادة تحجيمها) وتطبيعها للنموذج، ويستخدم [`CLIPTokenizer`] لترميز النص. [`OwlViTProcessor`] يجمع [`OwlViTImageProcessor`] و [`CLIPTokenizer`] في مثيل واحد لترميز النص وإعداد الصور. يوضح المثال التالي كيفية تنفيذ الكشف عن الكائنات باستخدام [`OwlViTProcessor`] و [`OwlViTForObjectDetection`]. + +```python +>>> import requests +>>> from PIL import Image +>>> import torch + +>>> from transformers import OwlViTProcessor, OwlViTForObjectDetection + +>>> processor = OwlViTProcessor.from_pretrained("google/owlvit-base-patch32") +>>> model = OwlViTForObjectDetection.from_pretrained("google/owlvit-base-patch32") + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> texts = [["a photo of a cat", "a photo of a dog"]] +>>> inputs = processor(text=texts, images=image, return_tensors="pt") +>>> outputs = model(**inputs) + +>>> # Target image sizes (height, width) to rescale box predictions [batch_size, 2] +>>> target_sizes = torch.Tensor([image.size[::-1]]) +>>> # Convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax) +>>> results = processor.post_process_object_detection(outputs=outputs, target_sizes=target_sizes, threshold=0.1) +>>> i = 0 # Retrieve predictions for the first image for the corresponding text queries +>>> text = texts[i] +>>> boxes, scores, labels = results[i]["boxes"], results[i]["scores"], results[i]["labels"] +>>> for box, score, label in zip(boxes, scores, labels): +... box = [round(i, 2) for i in box.tolist()] +... print(f"Detected {text[label]} with confidence {round(score.item(), 3)} at location {box}") +Detected a photo of a cat with confidence 0.707 at location [324.97, 20.44, 640.58, 373.29] +Detected a photo of a cat with confidence 0.717 at location [1.46, 55.26, 315.55, 472.17] +``` + +## الموارد +يمكن العثور على دفتر ملاحظات توضيحي حول استخدام OWL-ViT للكشف عن الكائنات بدون بيانات تدريب وبدليل الصور [هنا](https://github.com/huggingface/notebooks/blob/main/examples/zeroshot_object_detection_with_owlvit.ipynb). + +## OwlViTConfig + +[[autodoc]] OwlViTConfig + +- from_text_vision_configs + +## OwlViTTextConfig + +[[autodoc]] OwlViTTextConfig + +## OwlViTVisionConfig + +[[autodoc]] OwlViTVisionConfig + +## OwlViTImageProcessor + +[[autodoc]] OwlViTImageProcessor + +- preprocess + +- post_process_object_detection + +- post_process_image_guided_detection + +## OwlViTFeatureExtractor + +[[autodoc]] OwlViTFeatureExtractor + +- __call__ + +- post_process + +- post_process_image_guided_detection + +## OwlViTProcessor + +[[autodoc]] OwlViTProcessor + +## OwlViTModel + +[[autodoc]] OwlViTModel + +- forward + +- get_text_features + +- get_image_features + +## OwlViTTextModel + +[[autodoc]] OwlViTTextModel + +- forward + +## OwlViTVisionModel + + +[[autodoc]] OwlViTVisionModel + +- forward + +## OwlViTForObjectDetection + +[[autodoc]] OwlViTForObjectDetection + +- forward + +- image_guided_detection \ No newline at end of file From 997a35f54d63c4434108ab3e32ca1ae629a10056 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:10 +0300 Subject: [PATCH 532/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/paligemma.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/paligemma.md | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/source/ar/model_doc/paligemma.md diff --git a/docs/source/ar/model_doc/paligemma.md b/docs/source/ar/model_doc/paligemma.md new file mode 100644 index 00000000000000..59cc1c36ae83f9 --- /dev/null +++ b/docs/source/ar/model_doc/paligemma.md @@ -0,0 +1,66 @@ +# PaliGemma + +## نظرة عامة + +اقترح نموذج PaliGemma في [PaliGemma – Google's Cutting-Edge Open Vision Language Model](https://huggingface.co/blog/paligemma) بواسطة Google. إنه نموذج للرؤية اللغوية يبلغ حجمه 3B، ويتكون من [SigLIP](siglip) encoder للرؤية وفك تشفير اللغة [Gemma](gemma) متصلين بواسطة إسقاط خطي متعدد الوسائط. ويقطع الصورة إلى عدد ثابت من رموز VIT ويضيفها إلى موجه اختياري. ومن خصوصياته أن النموذج يستخدم انتباه الكتلة الكاملة على جميع رموز الصورة بالإضافة إلى رموز النص المدخلة. وهو متوفر بثلاثة دقات، 224x224 و448x448 و896x896 مع 3 نماذج أساسية، و55 نسخة مُعدّلة مسبقًا لمهمام مختلفة، ونموذجين مختلطين. + + + + هندسة PaliGemma. مأخوذة من منشور المدونة. + +تمت المساهمة بهذا النموذج بواسطة [Molbap](https://huggingface.co/Molbap). + +## نصائح الاستخدام + +يمكن إجراء الاستنتاج باستخدام PaliGemma على النحو التالي: + +```python +from transformers import AutoProcessor, PaliGemmaForConditionalGeneration + +model_id = "google/paligemma-3b-mix-224" +model = PaliGemmaForConditionalGeneration.from_pretrained(model_id) +processor = AutoProcessor.from_pretrained(model_id) + +prompt = "What is on the flower?" +image_file = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg?download=true" +raw_image = Image.open(requests.get(image_file, stream=True).raw) +inputs = processor(prompt, raw_image, return_tensors="pt") +output = model.generate(**inputs, max_new_tokens=20) + +print(processor.decode(output[0], skip_special_tokens=True)[len(prompt):]) +``` + +- لا يقصد بـ PaliGemma الاستخدام المحادثي، وهو يعمل بشكل أفضل عند الضبط الدقيق لحالة استخدام محددة. بعض المهام النهائية التي يمكن ضبط PaliGemma الدقيق لها تشمل إنشاء تعليقات توضيحية للصور، والإجابة على الأسئلة المرئية (VQA)، وكشف الأجسام، وتحديد أجزاء الكلام، وفهم المستندات. + +- يمكن استخدام `PaliGemmaProcessor` لإعداد الصور والنص والعلامات الاختيارية للنموذج. عند الضبط الدقيق لنموذج PaliGemma، يمكن تمرير وسيط `suffix` إلى المعالج الذي يقوم بإنشاء `labels` للنموذج: + +```python +prompt = "What is on the flower?" +answer = "a bee" +inputs = processor(text=prompt, images=raw_image, suffix=answer, return_tensors="pt") +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام PaliGemma. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب Pull Request وسنراجعه! ويفضل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- يمكن العثور على منشور مدونة يقدم جميع ميزات PaliGemma [هنا](https://huggingface.co/blog/paligemma). + +- يمكن العثور على دفاتر الملاحظات التوضيحية حول كيفية الضبط الدقيق لـ PaliGemma لـ VQA باستخدام واجهة برمجة تطبيقات Trainer إلى جانب الاستنتاج [هنا](https://github.com/huggingface/notebooks/tree/main/examples/paligemma). + +- يمكن العثور على دفاتر الملاحظات التوضيحية حول كيفية الضبط الدقيق لـ PaliGemma على مجموعة بيانات مخصصة (صورة الإيصال -> JSON) إلى جانب الاستنتاج [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/PaliGemma). 🌎 + +## PaliGemmaConfig + +[[autodoc]] PaliGemmaConfig + +## PaliGemmaProcessor + +[[autodoc]] PaliGemmaProcessor + +## PaliGemmaForConditionalGeneration + +[[autodoc]] PaliGemmaForConditionalGeneration + +- forward \ No newline at end of file From 41a23c49d6361cc53dba7062d363fe449937e48c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:11 +0300 Subject: [PATCH 533/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/patchtsmixer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/patchtsmixer.md | 70 ++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/source/ar/model_doc/patchtsmixer.md diff --git a/docs/source/ar/model_doc/patchtsmixer.md b/docs/source/ar/model_doc/patchtsmixer.md new file mode 100644 index 00000000000000..84e69cb9f00603 --- /dev/null +++ b/docs/source/ar/model_doc/patchtsmixer.md @@ -0,0 +1,70 @@ +# PatchTSMixer + +## نظرة عامة + +اقتُرح نموذج PatchTSMixer في ورقة بحثية بعنوان [TSMixer: Lightweight MLP-Mixer Model for Multivariate Time Series Forecasting](https://arxiv.org/pdf/2306.09364.pdf) بواسطة Vijay Ekambaram وArindam Jati وNam Nguyen وPhanwadee Sinthong وJayant Kalagnanam. + +PatchTSMixer هو نهج نمذجة سلسلة زمنية خفيف الوزن يعتمد على بنية MLP-Mixer. وفي هذا التنفيذ من HuggingFace، نوفر قدرات PatchTSMixer لتسهيل المزج الخفيف عبر الرقع والقنوات والميزات المخفية لنمذجة السلاسل الزمنية متعددة المتغيرات بشكل فعال. كما يدعم العديد من آليات الانتباه بدءًا من الانتباه المبسط المحكوم إلى كتل الانتباه الذاتي الأكثر تعقيدًا التي يمكن تخصيصها وفقًا لذلك. يمكن تدريب النموذج مسبقًا ثم استخدامه لاحقًا في مهام مختلفة مثل التنبؤ والتصنيف والرجعية. + +الملخص من الورقة هو كما يلي: + +*TSMixer هو بنية عصبية خفيفة الوزن تتكون حصريًا من وحدات متعددة الطبقات (MLP) مصممة للتنبؤ والتعلم التمثيلي متعدد المتغيرات على السلاسل الزمنية المرقعة. يستلهم نموذجنا الإلهام من نجاح نماذج MLP-Mixer في رؤية الكمبيوتر. نحن نبرهن على التحديات التي ينطوي عليها تكييف رؤية MLP-Mixer للسلاسل الزمنية ونقدم مكونات تم التحقق من صحتها تجريبيًا لتحسين الدقة. ويشمل ذلك طريقة تصميم جديدة تتمثل في ربط رؤوس التسوية عبر الإنترنت مع العمود الفقري لـ MLP-Mixer، لنمذجة خصائص السلاسل الزمنية بشكل صريح مثل التسلسل الهرمي والارتباطات بين القنوات. كما نقترح نهجًا هجينًا لنمذجة القنوات للتعامل بفعالية مع تفاعلات القنوات الضجيج والتعميم عبر مجموعات بيانات متنوعة، وهو تحدٍ شائع في طرق مزج قنوات الرقع الموجودة. بالإضافة إلى ذلك، تم تقديم آلية اهتمام محكومة بسيطة في العمود الفقري لإعطاء الأولوية للميزات المهمة. من خلال دمج هذه المكونات الخفيفة، نحسن بشكل كبير من قدرة التعلم لهياكل MLP البسيطة، متجاوزين نماذج المحول المعقدة باستخدام الحد الأدنى من الاستخدام الحسابي. علاوة على ذلك، تمكن التصميم النمطي لـ TSMixer من التوافق مع كل من طرق التعلم الخاضعة للإشراف والتعلم الذاتي المقنع، مما يجعله كتلة بناء واعدة لنماذج الأساس الخاصة بالسلاسل الزمنية. يتفوق TSMixer على أحدث نماذج MLP و Transformer في التنبؤ بهامش كبير يتراوح بين 8-60%. كما يتفوق على أحدث المعايير القوية لنماذج Patch-Transformer (بنسبة 1-2%) مع تقليل كبير في الذاكرة ووقت التشغيل (2-3X).* + +تمت المساهمة بهذا النموذج من قبل [ajati](https://huggingface.co/ajati)، [vijaye12](https://huggingface.co/vijaye12)، [gsinthong](https://huggingface.co/gsinthong)، [namctin](https://huggingface.co/namctin)، [wmgifford](https://huggingface.co/wmgifford)، [kashif](https://huggingface.co/kashif). + +## مثال على الاستخدام + +توضح مقتطفات الأكواد أدناه كيفية تهيئة نموذج PatchTSMixer بشكل عشوائي. النموذج متوافق مع [Trainer API](../trainer.md). + +```python +from transformers import PatchTSMixerConfig, PatchTSMixerForPrediction +from transformers import Trainer, TrainingArguments, + +config = PatchTSMixerConfig(context_length = 512, prediction_length = 96) +model = PatchTSMixerForPrediction(config) +trainer = Trainer(model=model, args=training_args, train_dataset=train_dataset, eval_dataset=valid_dataset) +trainer.train() +results = trainer.evaluate(test_dataset) +``` + +## نصائح الاستخدام + +يمكن أيضًا استخدام النموذج لتصنيف السلاسل الزمنية والرجعية الزمنية. راجع فئات [`PatchTSMixerForTimeSeriesClassification`] و [`PatchTSMixerForRegression`] على التوالي. + +## الموارد + +- يمكن العثور على منشور مدونة يشرح PatchTSMixer بالتفصيل [هنا](https://huggingface.co/blog/patchtsmixer). يمكن أيضًا فتح المدونة في Google Colab. + +## PatchTSMixerConfig + +[[autodoc]] PatchTSMixerConfig + +## PatchTSMixerModel + +[[autodoc]] PatchTSMixerModel + +- forward + +## PatchTSMixerForPrediction + +[[autodoc]] PatchTSMixerForPrediction + +- forward + +## PatchTSMixerForTimeSeriesClassification + +[[autodoc]] PatchTSMixerForTimeSeriesClassification + +- forward + +## PatchTSMixerForPretraining + +[[autodoc]] PatchTSMixerForPretraining + +- forward + +## PatchTSMixerForRegression + +[[autodoc]] PatchTSMixerForRegression + +- forward \ No newline at end of file From 7fb8b7b90599fae698fb18b9f2e71943f9ec89e5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:13 +0300 Subject: [PATCH 534/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/patchtst.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/patchtst.md | 52 ++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/source/ar/model_doc/patchtst.md diff --git a/docs/source/ar/model_doc/patchtst.md b/docs/source/ar/model_doc/patchtst.md new file mode 100644 index 00000000000000..ae224084f04d23 --- /dev/null +++ b/docs/source/ar/model_doc/patchtst.md @@ -0,0 +1,52 @@ +# PatchTST + +## نظرة عامة +تم اقتراح نموذج PatchTST في ورقة بحثية بعنوان "A Time Series is Worth 64 Words: Long-term Forecasting with Transformers" بواسطة Yuqi Nie و Nam H. Nguyen و Phanwadee Sinthong و Jayant Kalagnanam. + +بشكل عام، يقوم النموذج بتقطيع السلاسل الزمنية إلى رقع ذات حجم معين وترميز تسلسل المتجهات الناتج عبر محول (Transformer) يقوم بعد ذلك بإخراج توقع طول التنبؤ عبر رأس مناسب. يتم توضيح النموذج في الشكل التالي: + +يقدم الملخص التالي من الورقة: + +"نقترح تصميمًا فعالًا لنماذج المحولات القائمة على السلاسل الزمنية متعددة المتغيرات والتعلم التمثيلي الخاضع للإشراف الذاتي. يعتمد على مكونين رئيسيين: (1) تقسيم السلاسل الزمنية إلى رقع على مستوى السلاسل الفرعية والتي يتم استخدامها كرموز دخول إلى المحول؛ (2) الاستقلالية القناة حيث تحتوي كل قناة على سلسلة زمنية أحادية المتغيرات تشترك في نفس التضمين وأوزان المحول عبر جميع السلاسل. يحتوي التصميم التصحيح بشكل طبيعي على فائدة ثلاثية: يتم الاحتفاظ بالمعلومات الدلالية المحلية في التضمين؛ يتم تقليل استخدام الذاكرة والحساب لخرائط الاهتمام بشكل رباعي نظرًا لنفس نافذة النظر إلى الوراء؛ ويمكن للنموذج الاهتمام بتاريخ أطول. يمكن لمحولنا المستقل عن القناة لتصحيح السلاسل الزمنية (PatchTST) تحسين دقة التنبؤ على المدى الطويل بشكل كبير عند مقارنته بنماذج المحولات المستندة إلى SOTA. نطبق نموذجنا أيضًا على مهام التدريب المسبق الخاضعة للإشراف الذاتي ونحقق أداء ضبط دقيق ممتازًا، والذي يتفوق على التدريب الخاضع للإشراف على مجموعات البيانات الكبيرة. كما أن نقل التمثيل المقنع مسبقًا من مجموعة بيانات إلى أخرى ينتج أيضًا دقة تنبؤية على مستوى SOTA." + +تمت المساهمة بهذا النموذج من قبل namctin و gsinthong و diepi و vijaye12 و wmgifford و kashif. يمكن العثور على الكود الأصلي [هنا](https://github.com/yuqinie98/PatchTST). + +## نصائح الاستخدام +يمكن أيضًا استخدام النموذج لتصنيف السلاسل الزمنية والانحدار الزمني. راجع فئات [`PatchTSTForClassification`] و [`PatchTSTForRegression`] الخاصة بكل منهما. + +## الموارد +- يمكن العثور على منشور المدونة الذي يشرح PatchTST بالتفصيل [هنا](https://huggingface.co/blog/patchtst). يمكن أيضًا فتح المدونة في Google Colab. + +## PatchTSTConfig + +[[autodoc]] PatchTSTConfig + +## PatchTSTModel + +[[autodoc]] PatchTSTModel + +- forward + +## PatchTSTForPrediction + +[[autodoc]] PatchTSTForPrediction + +- forward + +## PatchTSTForClassification + +[[autodoc]] PatchTSTForClassification + +- forward + +## PatchTSTForPretraining + +[[autodoc]] PatchTSTForPretraining + +- forward + +## PatchTSTForRegression + +[[autodoc]] PatchTSTForRegression + +- forward \ No newline at end of file From 84779b9e5f984bd5fe699a42bbb355429205e9b5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:15 +0300 Subject: [PATCH 535/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/pegasus.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/pegasus.md | 145 ++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 docs/source/ar/model_doc/pegasus.md diff --git a/docs/source/ar/model_doc/pegasus.md b/docs/source/ar/model_doc/pegasus.md new file mode 100644 index 00000000000000..3852d3f9a6df62 --- /dev/null +++ b/docs/source/ar/model_doc/pegasus.md @@ -0,0 +1,145 @@ +# Pegasus + +## نظرة عامة + +اقتُرح نموذج Pegasus في ورقة بحثية بعنوان: "PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization" من قبل جينغكينغ جانغ، وياو تشاو، ومحمد صالح، وبيتر ج. ليو في 18 ديسمبر 2019. + +وفقًا للملخص، فإن: + +- مهمة التدريب المسبق لـ Pegasus متشابهة عن قصد مع الملخص: تتم إزالة/حجب جمل مهمة من وثيقة الإدخال، ثم يتم توليدها معًا كتسلسل إخراج واحد من الجمل المتبقية، على غرار الملخص الاستخلاصي. +- يحقق Pegasus أداءً متميزًا في مهام الملخص على جميع المهام الفرعية الـ 12، وفقًا لتقييم ROUGE والتقييم البشري. + +تمت المساهمة بهذا النموذج من قبل [sshleifer](https://huggingface.co/sshleifer). ويمكن العثور على كود المؤلفين [هنا](https://github.com/google-research/pegasus). + +## نصائح الاستخدام + +- يعد Pegasus نموذجًا تسلسليًا تسلسليًا له نفس بنية الترميز فك الترميز مثل BART. تم تدريب Pegasus بشكل مسبق بشكل مشترك على دالتين للهدف ذاتي الإشراف: Masked Language Modeling (MLM) ودالة تدريب مسبق محددة للملخص تسمى Gap Sentence Generation (GSG). + +* MLM: يتم استبدال رموز الإدخال للترميز بشكل عشوائي برموز قناع، ويجب التنبؤ بها بواسطة الترميز (مثل BERT) +* GSG: يتم استبدال جمل إدخال الترميز بالكامل برمز قناع ثانوي وإدخالها إلى فك الترميز، ولكن مع قناع سببي لإخفاء الكلمات المستقبلية مثل فك تشفير محول ذاتي الانحدار منتظم. + +- لا يتم دعم FP16 (يتم تقدير المساعدة/الأفكار حول هذا الموضوع!). +- يوصى باستخدام محسن adafactor لضبط نموذج Pegasus بشكل دقيق. + +## نقاط التفتيش + +تم ضبط جميع [نقاط التفتيش](https://huggingface.co/models?search=pegasus) مسبقًا للتلخيص، باستثناء *pegasus-large*، حيث يتم ضبط نقاط التفتيش الأخرى: + +- يحتل كل نقطة تفتيش مساحة 2.2 جيجابايت على القرص و568 مليون معلمة. +- لا يتم دعم FP16 (يتم تقدير المساعدة/الأفكار حول هذا الموضوع!). +- يستغرق تلخيص xsum في fp32 حوالي 400 مللي ثانية/عينة، مع معلمات افتراضية على وحدة معالجة الرسومات v100. +- يمكن العثور على نتائج الاستنساخ الكامل والبيانات المعالجة بشكل صحيح في هذه [القضية](https://github.com/huggingface/transformers/issues/6844#issue-689259666). +- يتم وصف [نقاط التفتيش المقطرة](https://huggingface.co/models?search=distill-pegasus) في هذه [الورقة](https://arxiv.org/abs/2010.13002). + +## ملاحظات التنفيذ + +- جميع النماذج هي محولات الترميز فك الترميز مع 16 طبقة في كل مكون. +- تم استلهام التنفيذ بالكامل من [`BartForConditionalGeneration`] +- بعض الاختلافات الرئيسية في التكوين: +- مواضع ثابتة، تضمينية جيبية +- يبدأ النموذج في التوليد باستخدام pad_token_id (الذي يحتوي على 0 token_embedding) كبادئة. +- يتم استخدام المزيد من الحزم (`num_beams=8`) +- جميع نقاط تفتيش Pegasus المسبقة التدريب متطابقة باستثناء ثلاث سمات: `tokenizer.model_max_length` (حجم الإدخال الأقصى)، و`max_length` (العدد الأقصى من الرموز المولدة)، و`length_penalty`. +- يمكن العثور على الكود لتحويل نقاط التفتيش المدربة في مستودع المؤلفين [هنا](https://github.com/google-research/pegasus) في `convert_pegasus_tf_to_pytorch.py`. + +## مثال على الاستخدام + +```python +>>> from transformers import PegasusForConditionalGeneration, PegasusTokenizer +>>> import torch + +>>> src_text = [ +... """ PG&E stated it scheduled the blackouts in response to forecasts for high winds amid dry conditions. The aim is to reduce the risk of wildfires. Nearly 800 thousand customers were scheduled to be affected by the shutoffs which were expected to last through at least midday tomorrow.""" +... ] + +... model_name = "google/pegasus-xsum" +... device = "cuda" if torch.cuda.is_available() else "cpu" +... tokenizer = PegasusTokenizer.from_pretrained(model_name) +... model = PegasusForConditionalGeneration.from_pretrained(model_name).to(device) +... batch = tokenizer(src_text, truncation=True, padding="longest", return_tensors="pt").to(device) +... translated = model.generate(**batch) +... tgt_text = tokenizer.batch_decode(translated, skip_special_tokens=True) +... assert ( +... tgt_text[0] +... == "California's largest electricity provider has turned off power to hundreds of thousands of customers." +... ) +``` + +## الموارد + +- [سكريبت](https://github.com/huggingface/transformers/tree/main/examples/research_projects/seq2seq-distillation/finetune_pegasus_xsum.sh) لضبط نموذج Pegasus بشكل دقيق على مجموعة بيانات XSUM. تعليمات تنزيل البيانات في [examples/pytorch/summarization/](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization/README.md). +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهام الترجمة](../tasks/translation) +- [دليل مهام الملخص](../tasks/summarization) + +## PegasusConfig + +[[autodoc]] PegasusConfig + +## PegasusTokenizer + +تحذير: `add_tokens` لا يعمل في الوقت الحالي. + +[[autodoc]] PegasusTokenizer + +## PegasusTokenizerFast + +[[autodoc]] PegasusTokenizerFast + + + + +## PegasusModel + +[[autodoc]] PegasusModel + +- forward + +## PegasusForConditionalGeneration + +[[autodoc]] PegasusForConditionalGeneration + +- forward + +## PegasusForCausalLM + +[[autodoc]] PegasusForCausalLM + +- forward + + + + +## TFPegasusModel + +[[autodoc]] TFPegasusModel + +- call + +## TFPegasusForConditionalGeneration + +[[autodoc]] TFPegasusForConditionalGeneration + +- call + + + + +## FlaxPegasusModel + +[[autodoc]] FlaxPegasusModel + +- __call__ +- encode +- decode + +## FlaxPegasusForConditionalGeneration + +[[autodoc]] FlaxPegasusForConditionalGeneration + +- __call__ +- encode +- decode + + + \ No newline at end of file From 51963bf018fbfcc7e001cc2b109c7156d130d599 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:17 +0300 Subject: [PATCH 536/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/pegasus=5Fx.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/pegasus_x.md | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/source/ar/model_doc/pegasus_x.md diff --git a/docs/source/ar/model_doc/pegasus_x.md b/docs/source/ar/model_doc/pegasus_x.md new file mode 100644 index 00000000000000..85964c56e3b42c --- /dev/null +++ b/docs/source/ar/model_doc/pegasus_x.md @@ -0,0 +1,39 @@ +# PEGASUS-X + +## نظرة عامة +اقترح نموذج PEGASUS-X في "التحقيق في توسيع كفاءة المحولات للنصوص الملخصة الطويلة" من قبل جيسون فانه، وياو زهاو، وبيتر جيه ليو. + +PEGASUS-X (PEGASUS الممتد) يوسع نماذج PEGASUS للملخصات النصية الطويلة من خلال مرحلة ما قبل التدريب على النصوص الطويلة واستخدام الاهتمام المحلي للكتلة المتداخلة مع الرموز العالمية في الترميز. + +ملخص الورقة هو كما يلي: + +*بينما أثبتت نماذج المحول الكبيرة المسبقة التدريب قدرتها العالية على التعامل مع مهام اللغة الطبيعية، لا تزال معالجة النصوص الطويلة تشكل تحديًا كبيرًا. إحدى هذه المهام هي تلخيص النصوص الطويلة، حيث تكون النصوص أطول من السياق النصي الأقصى لمعظم النماذج المسبقة التدريب. من خلال مجموعة شاملة من التجارب، نحن نحقق في التغييرات المعمارية للنماذج ونماذج ما قبل التدريب التي يمكن أن تتكيف بكفاءة مع محول مسبق التدريب لتلخيص النصوص الطويلة. نجد أن محول الكتلة المحلية المتداخلة مع رموز الترميز العالمية يحقق توازنًا جيدًا بين الأداء والكفاءة، وأن مرحلة ما قبل التدريب الإضافية على النصوص الطويلة تحسن بشكل كبير من أداء التلخيص اللاحق. بناءً على نتائجنا، نقدم PEGASUS-X، وهو امتداد لنموذج PEGASUS مع مرحلة ما قبل التدريب الإضافية على النصوص الطويلة للتعامل مع النصوص التي يصل طولها إلى 16000 رمز. يحقق PEGASUS-X أداءً قويًا في مهام تلخيص النصوص الطويلة، وهو قابل للمقارنة مع النماذج الأكبر حجمًا، في حين أنه يضيف عددًا قليلًا من المعلمات الإضافية ولا يتطلب موازاة النموذج للتدريب.* + +تمت المساهمة بهذا النموذج من قبل [zphang](https://huggingface.co/zphang). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/pegasus). + +## موارد التوثيق + +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة الملخص](../tasks/summarization) + + + +يستخدم PEGASUS-X نفس الرموز النصية مثل [PEGASUS](pegasus). + + + +## PegasusXConfig + +[[autodoc]] PegasusXConfig + +## PegasusXModel + +[[autodoc]] PegasusXModel + +- forward + +## PegasusXForConditionalGeneration + +[[autodoc]] PegasusXForConditionalGeneration + +- forward \ No newline at end of file From 508324b088d50a2c735aaa68df5297cc761e3300 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:18 +0300 Subject: [PATCH 537/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/perceiver.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/perceiver.md | 186 ++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 docs/source/ar/model_doc/perceiver.md diff --git a/docs/source/ar/model_doc/perceiver.md b/docs/source/ar/model_doc/perceiver.md new file mode 100644 index 00000000000000..dd9e63c813daa0 --- /dev/null +++ b/docs/source/ar/model_doc/perceiver.md @@ -0,0 +1,186 @@ +# Perceiver + +## نظرة عامة + +اقترح نموذج Perceiver IO في ورقة "Perceiver IO: A General Architecture for Structured Inputs & Outputs" بواسطة Andrew Jaegle وآخرون. + +Perceiver IO هو تعميم لنموذج Perceiver للتعامل مع المخرجات الاعتباطية بالإضافة إلى المدخلات الاعتباطية. كان النموذج الأصلي لـ Perceiver ينتج فقط تصنيفًا واحدًا. بالإضافة إلى تصنيفات العلامات، يمكن لـ Perceiver IO إنتاج (على سبيل المثال) اللغة والتدفق البصري ومقاطع الفيديو متعددة الوسائط مع الصوت. + +يتم ذلك باستخدام نفس الوحدات البنائية للنموذج الأصلي لـ Perceiver. تعقيد Perceiver IO الحسابي خطي في حجم الإدخال والإخراج، ويحدث الجزء الأكبر من المعالجة في مساحة المخفية، مما يسمح لنا بمعالجة المدخلات والمخرجات التي تكون أكبر بكثير مما يمكن أن تتعامل معه محولات القياسية. وهذا يعني، على سبيل المثال، أن Perceiver IO يمكنه إجراء نمذجة اللغة المقنعة على طريقة BERT مباشرة باستخدام البايت بدلاً من المدخلات المعلمة. + +المقتطف من الورقة هو كما يلي: + +*يحصل نموذج Perceiver المقترح مؤخرًا على نتائج جيدة في عدة مجالات (الصور والصوت والوسائط المتعددة وسحب النقاط) مع الحفاظ على النطاق الخطي في الحساب والذاكرة مع حجم الإدخال. في حين أن Perceiver يدعم العديد من أنواع المدخلات، إلا أنه يمكنه فقط إنتاج مخرجات بسيطة جدًا مثل درجات الفصل. يتغلب Perceiver IO على هذا القيد دون التضحية بخصائص الأصل من خلال التعلم لاستعلام مساحة المخفية للنموذج بشكل مرن لإنتاج مخرجات ذات حجم ودلالة اعتباطية. لا يزال Perceiver IO يفك ارتباط عمق النموذج من حجم البيانات، ولا يزال يتدرج خطيًا مع حجم البيانات، ولكن الآن فيما يتعلق بحجم الإدخال والمخرجات. يحقق نموذج Perceiver IO الكامل نتائج قوية في المهام ذات مساحات الإخراج المنظمة للغاية، مثل الفهم الطبيعي للغة والرؤية، وStarCraft II، ومجالات المهام المتعددة والوسائط المتعددة. على سبيل المثال، يطابق Perceiver IO خط أساس BERT القائم على المحول على معيار لغة GLUE دون الحاجة إلى تمييز المدخلات ويحقق أداءً متميزًا في تقدير التدفق البصري لـ Sintel.* + +هذا هو الشرح المبسط لكيفية عمل Perceiver: + +المشكلة الرئيسية مع آلية الاهتمام الذاتي للمحول هي أن متطلبات الوقت والذاكرة تتناسب طرديًا مع طول التسلسل. وبالتالي، فإن النماذج مثل BERT وRoBERTa تقتصر على طول تسلسل أقصاه 512 رمزًا. يهدف Perceiver إلى حل هذه المشكلة من خلال، بدلاً من أداء الاهتمام الذاتي على المدخلات، أدائه على مجموعة من المتغيرات المخفية، واستخدام المدخلات فقط للاهتمام المتقاطع. بهذه الطريقة، لا تعتمد متطلبات الوقت والذاكرة على طول المدخلات بعد الآن، حيث تستخدم عددًا ثابتًا من المتغيرات المخفية، مثل 256 أو 512. يتم تهيئتها بشكل عشوائي، وبعد ذلك يتم تدريبها من النهاية إلى النهاية باستخدام backpropagation. + +داخلياً، سينشئ [`PerceiverModel`] المخفية، والتي هي عبارة عن مصفوفة ذات شكل `(batch_size، num_latents، d_latents)`. يجب توفير `inputs` (التي يمكن أن تكون نصًا أو صورًا أو صوتًا، أي شيء!) إلى النموذج، والذي سيستخدمه لأداء الاهتمام المتقاطع مع المخفية. إخراج مشفر Perceiver عبارة عن مصفوفة بنفس الشكل. بعد ذلك، يمكن للمرء، على غرار BERT، تحويل الحالات المخفية الأخيرة للمخفية إلى احتمالات التصنيف عن طريق حساب المتوسط على طول البعد التسلسلي، ووضع طبقة خطية في الأعلى لمشروع `d_latents` إلى `num_labels`. + +كانت هذه هي فكرة ورقة Perceiver الأصلية. ومع ذلك، فقد كان بإمكانه فقط إخراج احتمالات التصنيف. في عمل متابعة، PerceiverIO، قاموا بتعميمه للسماح للنموذج أيضًا بإنتاج مخرجات ذات حجم اعتباطي. كيف، قد تتساءل؟ الفكرة بسيطة نسبيًا: يتم تعريف المخرجات ذات الحجم الاعتباطي، ثم يتم تطبيق الاهتمام المتقاطع مع الحالات المخفية الأخيرة، باستخدام المخرجات كاستفسارات، والمخفية كمفاتيح وقيم. + +لذلك، لنفترض أن المرء يريد إجراء نمذجة اللغة المقنعة (على طريقة BERT) باستخدام Perceiver. نظرًا لأن طول إدخال Perceiver لن يؤثر على وقت الحساب لطبقات الاهتمام الذاتي، فيمكنك توفير البايتات الخام، وتوفير `inputs` بطول 2048 للنموذج. إذا قمت الآن بقناع بعض هذه الرموز 2048، فيمكنك تعريف `outputs` على أنها ذات شكل: `(batch_size، 2048، 768)`. بعد ذلك، قم بأداء الاهتمام المتقاطع مع الحالات المخفية النهائية لتحديث مصفوفة `outputs`. بعد الاهتمام المتقاطع، لا يزال لديك مصفوفة ذات شكل `(batch_size، 2048، 768)`. يمكنك بعد ذلك وضع رأس نمذجة اللغة العادي في الأعلى، لمشروع البعد الأخير إلى حجم مفردة النموذج، أي إنشاء احتمالات ذات شكل `(batch_size، 2048، 262)` (نظرًا لأن Perceiver يستخدم حجم مفردة 262 معرفات بايت). + +drawing + + تم المساهم بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/deepmind/deepmind-research/tree/master/perceiver). + + + +Perceiver لا يعمل مع `torch.nn.DataParallel` بسبب وجود خلل في PyTorch، راجع [القضية #36035](https://github.com/pytorch/pytorch/issues/36035) + + + +## الموارد + +- أسرع طريقة للبدء في استخدام Perceiver هي التحقق من [دفاتر الملاحظات التعليمية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Perceiver). + +- راجع [منشور المدونة](https://huggingface.co/blog/perceiver) إذا كنت تريد فهم كيفية عمل النموذج وتنفيذه في المكتبة بشكل كامل. لاحظ أن النماذج المتوفرة في المكتبة تعرض فقط بعض الأمثلة على ما يمكنك فعله باستخدام Perceiver. هناك العديد من حالات الاستخدام الأخرى، بما في ذلك الإجابة على الأسئلة، والتعرف على الكيانات المسماة، وكشف الأشياء، وتصنيف الصوت، وتصنيف الفيديو، وما إلى ذلك. + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) + +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) + +- [دليل مهمة تصنيف الصور](../tasks/image_classification) + +## مخرجات Perceiver المحددة + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverModelOutput + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverDecoderOutput + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverMaskedLMOutput + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverClassifierOutput + +## PerceiverConfig + +[[autodoc]] PerceiverConfig + +## PerceiverTokenizer + +[[autodoc]] PerceiverTokenizer + +- __call__ + +## PerceiverFeatureExtractor + +[[autodoc]] PerceiverFeatureExtractor + +- __call__ + +## PerceiverImageProcessor + +[[autodoc]] PerceiverImageProcessor + +- preprocess + +## PerceiverTextPreprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverTextPreprocessor + +## PerceiverImagePreprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverImagePreprocessor + +## PerceiverOneHotPreprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverOneHotPreprocessor + +## PerceiverAudioPreprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverAudioPreprocessor + +## PerceiverMultimodalPreprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverMultimodalPreprocessor + +## PerceiverProjectionDecoder + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverProjectionDecoder + +## PerceiverBasicDecoder + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverBasicDecoder + +## PerceiverClassificationDecoder + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverClassificationDecoder + +## PerceiverOpticalFlowDecoder + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverOpticalFlowDecoder + +## PerceiverBasicVideoAutoencodingDecoder + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverBasicVideoAutoencodingDecoder + +## PerceiverMultimodalDecoder + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverMultimodalDecoder + +## PerceiverProjectionPostprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverProjectionPostprocessor + +## PerceiverAudioPostprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverAudioPostprocessor + +## PerceiverClassificationPostprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverClassificationPostprocessor + +## PerceiverMultimodalPostprocessor + +[[autodoc]] models.perceiver.modeling_perceiver.PerceiverMultimodalPostprocessor + +## PerceiverModel + +[[autodoc]] PerceiverModel + +- forward + +## PerceiverForMaskedLM + +[[autodoc]] PerceiverForMaskedLM + +- forward + +## PerceiverForSequenceClassification + +[[autodoc]] PerceiverForSequenceClassification + +- forward + +## PerceiverForImageClassificationLearned + +[[autodoc]] PerceiverForImageClassificationLearned + +- forward + +## PerceiverForImageClassificationFourier + +[[autodoc]] PerceiverForImageClassificationFourier + +- forward + +## PerceiverForImageClassificationConvProcessing + + +[[autodoc]] PerceiverForImageClassificationConvProcessing + +- forward + +## PerceiverForOpticalFlow + +[[autodoc]] PerceiverForOpticalFlow + +- forward + +## PerceiverForMultimodalAutoencoding + +[[autodoc]] PerceiverForMultimodalAutoencoding + +- forward \ No newline at end of file From 04cf8aed9e79c61751f7a9c1f97ba82861c7db33 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:20 +0300 Subject: [PATCH 538/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/persimmon.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/persimmon.md | 86 +++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docs/source/ar/model_doc/persimmon.md diff --git a/docs/source/ar/model_doc/persimmon.md b/docs/source/ar/model_doc/persimmon.md new file mode 100644 index 00000000000000..8285d3416ccafd --- /dev/null +++ b/docs/source/ar/model_doc/persimmon.md @@ -0,0 +1,86 @@ +# Persimmon + +## نظرة عامة + +قام فريق [ADEPT](https://www.adept.ai/blog/persimmon-8b) بإنشاء نموذج Persimmon، وكتبه إريك إلسن، وأغسطس أودينا، وماكسويل ناي، وساغناك تاسيرلار، وتري داو، وكورتيس هاوثورن، وديباك موبارثي، وأروش سوماني. + +قدم المؤلفون Persimmon-8B، وهو نموذج فك تشفير يعتمد على تصميم محولات كلاسيكي، مع تطبيع الاستعلام والمفتاح. Persimmon-8B هو نموذج مرخص بالكامل بحوالي 8 مليارات معامل، تم إصداره بموجب ترخيص Apache. بعض السمات الرئيسية لـ Persimmon-8B هي حجم السياق الطويل (16K)، والأداء، والقدرات على الامتدادات متعددة الوسائط. + +يعرض المؤلفون نهجهم في تقييم النماذج، مع التركيز على التوليد العملي للنص، مما يعكس كيفية تفاعل المستخدمين مع نماذج اللغة. يتضمن العمل أيضًا تحليلًا مقارنًا، حيث يتنافس Persimmon-8B مع النماذج البارزة الأخرى (MPT 7B Instruct وLlama 2 Base 7B 1-Shot) عبر مهام تقييم مختلفة. وتُظهر النتائج الأداء التنافسي لـ Persimmon-8B، حتى مع محدودية بيانات التدريب. + +من حيث تفاصيل النموذج، يحدد العمل تصميم Persimmon-8B ومنهجية التدريب، مما يوفر رؤى حول خيارات التصميم وطول التسلسل وتكوين مجموعة البيانات. ويقدم المؤلفون كود استدلال سريع يتفوق على التطبيقات التقليدية من خلال دمج مشغل CUDA واستخدام رسم CUDA مع الحفاظ على تماسك الشفرة. ويعربون عن تطلعهم إلى كيفية استفادة المجتمع من هذا الإسهام لدفع الابتكار، مما يشير إلى إصدارات أخرى قادمة كجزء من سلسلة مستمرة من التطورات. + +تمت المساهمة بهذا النموذج من قبل [ArthurZ](https://huggingface.co/ArthurZ). يمكن العثور على الكود الأصلي [هنا](https://github.com/persimmon-ai-labs/adept-inference). + +## نصائح الاستخدام + + +تم تدريب نماذج "Persimmon" باستخدام "bfloat16"، ولكن الاستدلال الأصلي يستخدم "float16". تستخدم نقاط التفتيش المُحمّلة على المركز "torch_dtype = 'float16'"، والتي سيتم استخدامها بواسطة واجهة برمجة التطبيقات "AutoModel" لتحويل نقاط التفتيش من "torch.float32" إلى "torch.float16". + +نوع بيانات الأوزان عبر الإنترنت غير ذي صلة في الغالب، ما لم تكن تستخدم "torch_dtype='auto'" عند تهيئة نموذج باستخدام "model = AutoModelForCausalLM.from_pretrained("path"، torch_dtype="auto")". والسبب هو أنه سيتم أولاً تنزيل النموذج (باستخدام نوع بيانات نقاط التفتيش عبر الإنترنت) ثم تحويله إلى نوع بيانات افتراضي لـ "torch" (يصبح "torch.float32"). يجب على المستخدمين تحديد "torch_dtype" الذي يريدونه، وإذا لم يفعلوا ذلك، فسيكون "torch.float32". + +لا يُنصح بالتدريب الدقيق للنموذج في "float16" وهو معروف بإنتاج "nan"، وبالتالي يجب ضبط دقة النموذج باستخدام "bfloat16". + + +نصائح: + +- لتحويل النموذج، تحتاج إلى استنساخ مستودع الأصل باستخدام "git clone https://github.com/persimmon-ai-labs/adept-inference"، ثم الحصول على نقاط التفتيش: + +```bash +git clone https://github.com/persimmon-ai-labs/adept-inference +wget https://axtkn4xl5cip.objectstorage.us-phoenix-1.oci.customer-oci.com/n/axtkn4xl5cip/b/adept-public-data/o/8b_base_model_release.tar +tar -xvf 8b_base_model_release.tar +python src/transformers/models/persimmon/convert_persimmon_weights_to_hf.py --input_dir /path/to/downloaded/persimmon/weights/ --output_dir /output/path \ +--pt_model_path /path/to/8b_chat_model_release/iter_0001251/mp_rank_00/model_optim_rng.pt +--ada_lib_path /path/to/adept-inference +``` + +بالنسبة لنموذج الدردشة: + +```bash +wget https://axtkn4xl5cip.objectstorage.us-phoenix-1.oci.customer-oci.com/n/axtkn4xl5cip/b/adept-public-data/o/8b_chat_model_release.tar +tar -xvf 8b_base_model_release.tar +``` + +بعد ذلك، يمكن تحميل النماذج عبر: + +```py +from transformers import PersimmonForCausalLM, PersimmonTokenizer + +model = PersimmonForCausalLM.from_pretrained("/output/path") +tokenizer = PersimmonTokenizer.from_pretrained("/output/path") +``` + +- يستخدم Persimmon محول رموز يعتمد على "sentencepiece"، مع نموذج "Unigram". يدعم "bytefallback"، وهو متاح فقط في "tokenizers==0.14.0" لمحول الرموز السريع. + +يتم استخدام "LlamaTokenizer" لأنه عبارة عن غلاف قياسي حول "sentencepiece". سيتم تحديث قالب "chat" بوظائف القوالب في طلب سحب لاحق! + +- يقترح المؤلفون استخدام تنسيق المحث التالي لوضع الدردشة: `f"human: {prompt}\n\nadept:"` + +## PersimmonConfig + +[[autodoc]] PersimmonConfig + +## PersimmonModel + +[[autodoc]] PersimmonModel + +- forward + +## PersimmonForCausalLM + +[[autodoc]] PersimmonForCausalLM + +- forward + +## PersimmonForSequenceClassification + +[[autodoc]] PersimmonForSequenceClassification + +- forward + +## PersimmonForTokenClassification + +[[autodoc]] PersimmonForTokenClassification + +- forward \ No newline at end of file From c3747ddc15ccc8adf58ae33602d239e413e04b62 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:22 +0300 Subject: [PATCH 539/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/phi.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/phi.md | 154 ++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 docs/source/ar/model_doc/phi.md diff --git a/docs/source/ar/model_doc/phi.md b/docs/source/ar/model_doc/phi.md new file mode 100644 index 00000000000000..fcb4f1f3ebb85d --- /dev/null +++ b/docs/source/ar/model_doc/phi.md @@ -0,0 +1,154 @@ +# Phi + +## نظرة عامة +اقترح نموذج Phi-1 في ورقة "الكتب المدرسية هي كل ما تحتاجه" بواسطة سوريا جوناسيكر، وآخرون. اقترح نموذج Phi-1.5 في ورقة "الكتب المدرسية هي كل ما تحتاجه الجزء الثاني: التقرير الفني لـ phi-1.5" بواسطة يوانزهي لي، وآخرون. + +### ملخص +في ورقتي Phi-1 وPhi-1.5، أظهر المؤلفون مدى أهمية جودة البيانات في التدريب بالنسبة لحجم النموذج. لقد اختاروا بيانات "كتب مدرسية" عالية الجودة إلى جانب بيانات مولدة بشكل صناعي لتدريب نموذجهم الصغير المستند إلى محول مع 1.3 مليار معلمة. وعلى الرغم من هذا الحجم الصغير، حقق النموذج Phi-1 دقة pass@1 بنسبة 50.6% على HumanEval و55.5% على MBPP. + +اتبع المؤلفون نفس الاستراتيجية لـ Phi-1.5 وأنشأوا نموذجًا آخر بحجم 1.3 مليار معلمة بأداء في مهام اللغة الطبيعية قابل للمقارنة مع النماذج الأكبر حجمًا بمقدار 5 مرات، ويتفوق على معظم نماذج اللغة الكبيرة غير الرائدة. ويظهر Phi-1.5 العديد من سمات نماذج اللغة الكبيرة جدًا، مثل القدرة على "التفكير خطوة بخطوة" أو أداء بعض التعلم الأساسي في السياق. + +من خلال هاتين التجربتين، أوضح المؤلفون بنجاح التأثير الهائل لجودة بيانات التدريب عند تدريب نماذج التعلم الآلي. + +هذا هو الملخص من ورقة Phi-1: + +*نقدم phi-1، وهو نموذج لغة جديد للترميز، بحجم أصغر بكثير من النماذج المنافسة: phi-1 هو نموذج قائم على محول مع 1.3 مليار معلمة، تم تدريبه لمدة 4 أيام على 8 A100s، باستخدام مجموعة من بيانات "جودة الكتب المدرسية" من الويب (6 مليار رمز) وبيانات تم إنشاؤها بشكل صناعي الكتب المدرسية والتدريبات باستخدام GPT-3.5 (1 مليار رمز). وعلى الرغم من هذا الحجم الصغير، يحقق phi-1 دقة pass@1 بنسبة 50.6% على HumanEval و55.5% على MBPP. كما يعرض خصائص ناشئة مفاجئة مقارنة بـ phi-1-base، وهو نموذجنا قبل مرحلة الضبط الدقيق على مجموعة بيانات من تمارين الترميز، وphi-1-small، وهو نموذج أصغر بحجم 350 مليون معلمة تم تدريبه باستخدام نفس خط الأنابيب مثل phi-1 والذي لا يزال يحقق 45% على HumanEval.* + +هذا هو الملخص من ورقة Phi-1.5: + +*نواصل التحقيق في قوة نماذج اللغة الأصغر المستندة إلى محول كما بدأتها TinyStories - وهو نموذج بحجم 10 ملايين معلمة يمكنه إنتاج الإنجليزية المتماسكة - والعمل اللاحق على phi-1، وهو نموذج بحجم 1.3 مليار معلمة بأداء الترميز Python قريب من أحدث التقنيات. اقترحت الورقة الأخيرة استخدام نماذج اللغة الكبيرة الحالية (LLMs) لتوليد بيانات "جودة الكتب المدرسية" كطريقة لتعزيز عملية التعلم مقارنة ببيانات الويب التقليدية. نتبع نهج "الكتب المدرسية هي كل ما تحتاجه"، مع التركيز هذه المرة على التفكير المنطقي الشائع في اللغة الطبيعية، وننشئ نموذجًا جديدًا بحجم 1.3 مليار معلمة يسمى phi-1.5، بأداء في مهام اللغة الطبيعية قابل للمقارنة مع النماذج الأكبر حجمًا بمقدار 5 مرات، ويتفوق على معظم نماذج اللغة الكبيرة غير الرائدة في مهام الاستدلال الأكثر تعقيدًا مثل الرياضيات في المرحلة الابتدائية والترميز الأساسي. وبشكل أكثر عمومية، يعرض phi-1.5 العديد من سمات نماذج اللغة الكبيرة جدًا، الجيدة منها -مثل القدرة على "التفكير خطوة بخطوة" أو أداء بعض التعلم الأساسي في السياق- والسيئة، بما في ذلك الهلوسة واحتمال التوليد السام والمتعصب -ومع ذلك، فإننا نشهد تحسنًا على تلك الجبهة بفضل غياب بيانات الويب. نقوم بإتاحة المصدر المفتوح لـ phi-1.5 لتعزيز مزيد من البحث في هذه الموضوعات الملحة.* + +تمت المساهمة بهذا النموذج من قبل [Susnato Dhar](https://huggingface.co/susnato). + +يمكن العثور على الكود الأصلي لـ Phi-1 وPhi-1.5 وPhi-2 [هنا](https://huggingface.co/microsoft/phi-1)، [هنا](https://huggingface.co/microsoft/phi-1_5) و [هنا](https://huggingface.co/microsoft/phi-2)، على التوالي. + +## نصائح الاستخدام + +- يشبه هذا النموذج إلى حد كبير نموذج "Llama" مع الاختلاف الرئيسي في [`PhiDecoderLayer`]، حيث تم استخدام طبقات [`PhiAttention`] و [`PhiMLP`] في تكوين متوازي. +- محول الرموز المستخدم لهذا النموذج مطابق لمحول رموز [`CodeGen`]. + +## كيفية استخدام Phi-2 + + + +تم دمج Phi-2 في إصدار التطوير (4.37.0.dev) من `المحولات`. حتى يتم إصدار الإصدار الرسمي عبر `pip`، تأكد من قيامك بواحد مما يلي: + +* عند تحميل النموذج، تأكد من تمرير `trust_remote_code=True` كحجة لدالة `from_pretrained()`. +* قم بتحديث إصدار "المحولات" المحلي إلى إصدار التطوير: `pip uninstall -y transformers && pip install git+https://github.com/huggingface/transformers`. الأمر السابق هو بديل لإلغاء التثبيت والتثبيت من المصدر. + + + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2") +>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2") + +>>> inputs = tokenizer('Can you help me write a formal email to a potential business partner proposing a joint venture?', return_tensors="pt", return_attention_mask=False) + +>>> outputs = model.generate(**inputs, max_length=30) +>>> text = tokenizer.batch_decode(outputs)[0] +>>> print(text) +Can you help me write a formal email to a potential business partner proposing a joint venture? +Input: Company A: ABC Inc. +Company B +``` + +### مثال: + +```python +>>> from transformers import PhiForCausalLM, AutoTokenizer + +>>> # define the model and tokenizer. +>>> model = PhiForCausalLM.from_pretrained("microsoft/phi-1_5") +>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-1_5") + +>>> # feel free to change the prompt to your liking. +>>> prompt = "If I were an AI that had just achieved" + +>>> # apply the tokenizer. +>>> tokens = tokenizer(prompt, return_tensors="pt") + +>>> # use the model to generate new tokens. +>>> generated_output = model.generate(**tokens, use_cache=True, max_new_tokens=10) + +>>> tokenizer.batch_decode(generated_output)[0] +'If I were an AI that had just achieved a breakthrough in machine learning, I would be thrilled' +``` + +## الجمع بين Phi و Flash Attention 2 + +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2 لتضمين ميزة نافذة الانزلاق. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن لديك أجهزة متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لمستودع flash-attn. تأكد أيضًا من تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.float16`) + +لتحميل وتشغيل نموذج باستخدام Flash Attention 2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import PhiForCausalLM, AutoTokenizer + +>>> # define the model and tokenizer and push the model and tokens to the GPU. +>>> model = PhiForCausalLM.from_pretrained("microsoft/phi-1_5", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to("cuda") # doctest: +SKIP +>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-1_5") + +>>> # feel free to change the prompt to your liking. +>>> prompt = "If I were an AI that had just achieved" + +>>> # apply the tokenizer. +>>> tokens = tokenizer(prompt, return_tensors="pt").to("cuda") + +>>> # use the model to generate new tokens. +>>> generated_output = model.generate(**tokens, use_cache=True, max_new_tokens=10) # doctest: +SKIP + +>>> tokenizer.batch_decode(generated_output)[0] # doctest: +SKIP +'If I were an AI that had just achieved a breakthrough in machine learning, I would be thrilled' +``` + +### تسريع السرعة المتوقع + +فيما يلي رسم بياني لتسريع السرعة المتوقع الذي يقارن وقت الاستدلال النقي بين التنفيذ الأصلي في المحولات باستخدام نقطة تفتيش `microsoft/phi-1` وإصدار Flash Attention 2 من النموذج باستخدام طول تسلسل يبلغ 2048. + +
+ +
+ +## PhiConfig + +[[autodoc]] PhiConfig + + + + +## PhiModel + +[[autodoc]] PhiModel + +- forward + +## PhiForCausalLM + +[[autodoc]] PhiForCausalLM + +- forward + +- generate + +## PhiForSequenceClassification + +[[autodoc]] PhiForSequenceClassification + +- forward + +## PhiForTokenClassification + +[[autodoc]] PhiForTokenClassification + +- forward + + + \ No newline at end of file From 918a8e60963b524a708334eb85a6e34bb918b0ef Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:24 +0300 Subject: [PATCH 540/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/phi3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/phi3.md | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/phi3.md diff --git a/docs/source/ar/model_doc/phi3.md b/docs/source/ar/model_doc/phi3.md new file mode 100644 index 00000000000000..fa50b5d82de954 --- /dev/null +++ b/docs/source/ar/model_doc/phi3.md @@ -0,0 +1,83 @@ +# Phi-3 + +## نظرة عامة + +اقترحت مايكروسوفت نموذج Phi-3 في [التقرير الفني لـ Phi-3: نموذج لغة عالي القدرة محليًا على هاتفك](https://arxiv.org/abs/2404.14219). + +### ملخص + +فيما يلي ملخص ورقة Phi-3: + +نقدم phi-3-mini، وهو نموذج لغة يتكون من 3.8 مليار معلمة تم تدريبه على 3.3 تريليون رمز، ويضاهي أداؤه العام، وفقًا للمقاييس الأكاديمية والاختبارات الداخلية، أداء نماذج مثل Mixtral 8x7B و GPT-3.5 (على سبيل المثال، يحقق phi-3-mini نسبة 69% في MMLU و 8.38 في MT-bench)، على الرغم من صغر حجمه بما يكفي لنشره على الهاتف. تكمن الابتكار بالكامل في مجموعة البيانات الخاصة بنا للتدريب، وهي نسخة موسعة من تلك المستخدمة في phi-2، وتتكون من بيانات ويب تمت تصفيتها بشكل كبير وبيانات اصطناعية. كما يتم محاذاة النموذج بشكل أكبر من أجل المتانة والسلامة وتنسيق الدردشة. نقدم أيضًا بعض النتائج الأولية لقياس المعلمات باستخدام نماذج 7B و 14B التي تم تدريبها على 4.8 تريليون رمز، تسمى phi-3-small و phi-3-medium، والتي تتفوق بشكل كبير على phi-3-mini (على سبيل المثال، 75% و 78% على التوالي في MMLU، و 8.7 و 8.9 على MT-bench). + +يمكن العثور على الكود الأصلي لـ Phi-3 [هنا](https://huggingface.co/microsoft/Phi-3-mini-4k-instruct). + +## نصائح الاستخدام + +- يشبه هذا النموذج كثيرًا نموذج "Llama" مع الاختلاف الرئيسي في [`Phi3SuScaledRotaryEmbedding`] و [`Phi3YarnScaledRotaryEmbedding`]، حيث يتم استخدامها لتمديد سياق التراكيب الدوارة. يتم دمج الاستعلام والمفتاح والقيم، كما يتم دمج طبقات MLP لأعلى ولأسفل في طبقات الإسقاط. +- محلل المفردات المستخدم لهذا النموذج مطابق لـ [`LlamaTokenizer`]، باستثناء الرموز الإضافية. + +## كيفية استخدام Phi-3 + + + +تم دمج Phi-3 في الإصدار التطويري (4.40.0.dev) من `transformers`. حتى يتم إصدار الإصدار الرسمي عبر `pip`، تأكد من قيامك بواحد مما يلي: + +* عند تحميل النموذج، تأكد من تمرير `trust_remote_code=True` كحجة لدالة `from_pretrained()`. +* قم بتحديث إصدار "المحولات" المحلية لديك إلى الإصدار التطويري: `pip uninstall -y transformers && pip install git+https://github.com/huggingface/transformers`. الأمر السابق هو بديل عن الاستنساخ والتثبيت من المصدر. + + + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("microsoft/Phi-3-mini-4k-instruct") +>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-4k-instruct") + +>>> messages = [{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"}] +>>> inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt") + +>>> outputs = model.generate(inputs, max_new_tokens=32) +>>> text = tokenizer.batch_decode(outputs)[0] +>>> print(text) +<|user|> +Can you provide ways to eat combinations of bananas and dragonfruits?<|end|> +<|assistant|> +Certainly! Bananas and dragonfruits can be combined in various delicious ways. Here are some ideas for eating combinations of bananas and +``` + +## Phi3Config + +[[autodoc]] Phi3Config + + + + +## Phi3Model + +[[autodoc]] Phi3Model + +- forward + +## Phi3ForCausalLM + +[[autodoc]] Phi3ForCausalLM + +- forward + +- generate + +## Phi3ForSequenceClassification + +[[autodoc]] Phi3ForSequenceClassification + +- forward + +## Phi3ForTokenClassification + +[[autodoc]] Phi3ForTokenClassification + +- forward + + + \ No newline at end of file From a0393ef35ec58484df5621a33bb878c5a7d6471c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:26 +0300 Subject: [PATCH 541/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/phobert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/phobert.md | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/source/ar/model_doc/phobert.md diff --git a/docs/source/ar/model_doc/phobert.md b/docs/source/ar/model_doc/phobert.md new file mode 100644 index 00000000000000..72728ce1ac8088 --- /dev/null +++ b/docs/source/ar/model_doc/phobert.md @@ -0,0 +1,42 @@ +# PhoBERT + +## نظرة عامة +تم اقتراح نموذج PhoBERT في [PhoBERT: نماذج اللغة المُدربة مسبقًا للفيتنامية](https://www.aclweb.org/anthology/2020.findings-emnlp.92.pdf) بواسطة دات كيو نجوين، وآن توان نجوين. + +المُلخص من الورقة البحثية هو التالي: + +*نُقدم PhoBERT بإصدارين، PhoBERT-base وPhoBERT-large، أول نماذج اللغة أحادية اللغة كبيرة الحجم والمُدربة مسبقًا والمُتاحة للعامة للفيتنامية. تُظهر النتائج التجريبية أن PhoBERT يتفوق باستمرار على أفضل نموذج مُدرب مسبقًا مُتعدد اللغات XLM-R (Conneau et al.)، ويحسن الحالة الراهنة في العديد من مهام معالجة اللغات الطبيعية الخاصة باللغة الفيتنامية بما في ذلك وسم أجزاء الكلام، وتحليل الإعراب، وتعريف الكيانات المُسماة، والاستدلال اللغوي الطبيعي.* + +تمت المساهمة بهذا النموذج بواسطة [dqnguyen](https://huggingface.co/dqnguyen). يمكن العثور على الكود الأصلي [هنا](https://github.com/VinAIResearch/PhoBERT). + +## مثال على الاستخدام + +```python +>>> import torch +>>> from transformers import AutoModel, AutoTokenizer + +>>> phobert = AutoModel.from_pretrained("vinai/phobert-base") +>>> tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base") + +>>> # يجب أن يكون نص الإدخال مُجزأً مسبقًا إلى كلمات! +>>> line = "Tôi là sinh_viên trường đại_học Công_nghệ ." + +>>> input_ids = torch.tensor([tokenizer.encode(line)]) + +>>> with torch.no_grad(): +... features = phobert(input_ids) # مُخرجات النماذج الآن عبارة عن توابع + +>>> # باستخدام TensorFlow 2.0+: +>>> # from transformers import TFAutoModel +>>> # phobert = TFAutoModel.from_pretrained("vinai/phobert-base") +``` + + + +يتم تنفيذ PhoBERT بنفس طريقة BERT، باستثناء عملية التجزئة إلى رموز. يُرجى الرجوع إلى [توثيق EART](bert) للحصول على معلومات حول فئات التهيئة ومعاييرها. يتم توثيق مُجزئ الرموز المُخصص لـ PhoBERT أدناه. + + + +## PhobertTokenizer + +[[autodoc]] PhobertTokenizer \ No newline at end of file From b8c522f8dcd4cc2d929330343653261db3e84674 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:28 +0300 Subject: [PATCH 542/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/pix2struct.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/pix2struct.md | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 docs/source/ar/model_doc/pix2struct.md diff --git a/docs/source/ar/model_doc/pix2struct.md b/docs/source/ar/model_doc/pix2struct.md new file mode 100644 index 00000000000000..c8d056f932d7e7 --- /dev/null +++ b/docs/source/ar/model_doc/pix2struct.md @@ -0,0 +1,68 @@ +# Pix2Struct + +## نظرة عامة + +اقترح نموذج Pix2Struct في [Pix2Struct: Parsing Screenshot as Pretraining for Visual Language Understanding](https://arxiv.org/abs/2210.03347) بواسطة Kenton Lee, Mandar Joshi, Iulia Turc, Hexiang Hu, Fangyu Liu, Julian Eisenschlos, Urvashi Khandelwal, Peter Shaw, Ming-Wei Chang, Kristina Toutanova. + +الملخص من الورقة هو ما يلي: + +> اللغة المرئية موجودة في كل مكان - تتراوح المصادر من الكتب المدرسية مع الرسوم البيانية إلى صفحات الويب مع الصور والجداول، إلى تطبيقات الجوال مع الأزرار والنموذج. ربما بسبب هذا التنوع، اعتمد العمل السابق عادةً على وصفات خاصة بالمجال مع مشاركة محدودة للبيانات الأساسية، وبنى النماذج، والأهداف. نقدم Pix2Struct، وهو نموذج image-to-text مسبق التدريب لفهم اللغة المرئية البحتة، والذي يمكن ضبطه دقيقًا على المهام التي تحتوي على لغة مرئية. يتم تدريب Pix2Struct مسبقًا من خلال تعلم كيفية تحليل لقطات الشاشة المقنعة لصفحات الويب إلى HTML مبسط. يوفر الويب، بثرائه بالعناصر المرئية التي تنعكس بشكل نظيف في بنية HTML، مصدرًا كبيرًا لبيانات التدريب المسبق المناسبة لتنوع المهام اللاحقة. بداهة، يشمل هذا الهدف إشارات التدريب المسبق الشائعة مثل التعرف البصري على الحروف، ونمذجة اللغة، ووصف الصور. بالإضافة إلى استراتيجية التدريب المسبق الجديدة، نقدم تمثيل إدخال متغير الدقة وتكاملًا أكثر مرونة لإدخالات اللغة والرؤية، حيث يتم عرض مطالبات اللغة مثل الأسئلة مباشرةً أعلى صورة الإدخال. لأول مرة، نُظهر أن نموذجًا مسبق التدريب واحدًا يمكن أن يحقق نتائج متميزة في ستة من أصل تسع مهام عبر أربعة مجالات: المستندات، والرسوم التوضيحية، وواجهات المستخدم، والصور الطبيعية. + +### نصائح: + +تم ضبط Pix2Struct دقيقًا على مجموعة متنوعة من المهام ومجموعات البيانات، بدءًا من وصف الصور، والإجابة على الأسئلة المرئية (VQA) عبر مدخلات مختلفة (الكتب، والمخططات، والرسوم البيانية العلمية)، ووصف مكونات واجهة المستخدم، وما إلى ذلك. يمكن العثور على القائمة الكاملة في الجدول 1 من الورقة. + +لذلك، نوصي باستخدام هذه النماذج للمهام التي تم ضبطها دقيقًا عليها. على سبيل المثال، إذا كنت تريد استخدام Pix2Struct لوصف واجهة المستخدم، فيجب استخدام النموذج الذي تم ضبطه دقيقًا على مجموعة بيانات واجهة المستخدم. إذا كنت تريد استخدام Pix2Struct لوصف الصور، فيجب استخدام النموذج الذي تم ضبطه دقيقًا على مجموعة بيانات وصف الصور الطبيعية، وهكذا. + +إذا كنت تريد استخدام النموذج لأداء وصف النص الشرطي، فتأكد من استخدام المعالج باستخدام `add_special_tokens=False`. + +تمت المساهمة بهذا النموذج بواسطة [ybelkada](https://huggingface.co/ybelkada). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/pix2struct). + +## الموارد + +- [دفتر ضبط دقيق](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb) +- [جميع النماذج](https://huggingface.co/models?search=pix2struct) + +## Pix2StructConfig + +[[autodoc]] Pix2StructConfig + +- from_text_vision_configs + +## Pix2StructTextConfig + +[[autodoc]] Pix2StructTextConfig + +## Pix2StructVisionConfig + +[[autodoc]] Pix2StructVisionConfig + +## Pix2StructProcessor + +[[autodoc]] Pix2StructProcessor + +## Pix2StructImageProcessor + +[[autodoc]] Pix2StructImageProcessor + +- preprocess + +## Pix2StructTextModel + +[[autodoc]] Pix2StructTextModel + +- forward + +## Pix2StructVisionModel + +[[autodoc]] Pix2StructVisionModel + +- forward + +## Pix2StructForConditionalGeneration + +[[autodoc]] Pix2StructForConditionalGeneration + +- forward \ No newline at end of file From 61f73187ea16a5d1c2afe8a59028b07b93ae3d89 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:29 +0300 Subject: [PATCH 543/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/plbart.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/plbart.md | 99 ++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 docs/source/ar/model_doc/plbart.md diff --git a/docs/source/ar/model_doc/plbart.md b/docs/source/ar/model_doc/plbart.md new file mode 100644 index 00000000000000..c35662d3f8d30a --- /dev/null +++ b/docs/source/ar/model_doc/plbart.md @@ -0,0 +1,99 @@ +# PLBart + +## نظرة عامة +تم اقتراح نموذج PLBART في [Unified Pre-training for Program Understanding and Generation](https://arxiv.org/abs/2103.06333) بواسطة Wasi Uddin Ahmad و Saikat Chakraborty و Baishakhi Ray و Kai-Wei Chang. +هذا النموذج مشابه لنموذج BART ويمكن استخدامه لأداء مهام توليد الملخصات البرمجية والترجمة البرمجية وتوليد الأكواد. تم تدريب النموذج المُدرب مسبقًا `plbart-base` باستخدام مهمة إزالة التشويش متعددة اللغات +على Java و Python واللغة الإنجليزية. + +وفقًا للملخص: + +> "تُمكّن عملية توليد الملخصات البرمجية والترجمة البرمجية التحويل بين لغة البرمجة (PL) واللغة الطبيعية (NL)، بينما تتيح ترجمة الأكواد إمكانية نقل الأكواد القديمة من لغة برمجة إلى أخرى. يقدم هذا البحث PLBART، وهو نموذج تسلسلي إلى تسلسلي قادر على أداء مجموعة واسعة من مهام فهم وتوليد الأكواد واللغات. +تم تدريب PLBART مسبقًا على مجموعة واسعة من وظائف Java و Python والنصوص المرتبطة باللغة الطبيعية من خلال الترميز التلقائي لإزالة التشويش. +تُظهر التجارب على توليد ملخصات الأكواد باللغة الإنجليزية، وتوليد الأكواد، وترجمة الأكواد في سبع لغات برمجة +أن PLBART يتفوق على النماذج الحالية أو ينافسها. علاوة على ذلك، تُظهر التجارب على المهام التمييزية، مثل إصلاح الأكواد، وكشف النسخ المماثلة، واكتشاف الأكواد المعرضة للخطر، فعالية PLBART في فهم الأكواد. +علاوة على ذلك، يكشف التحليل أن PLBART يتعلم بناء جملة الأكواد، والأسلوب (مثل اتفاقية تسمية المعرفات)، والتدفق المنطقي +(على سبيل المثال، كتلة if داخل كتلة else مكافئة لكتلة else if) والتي تعتبر حاسمة لدلالات الأكواد، وبالتالي يتفوق +حتى مع الملاحظات المحدودة." + +تمت المساهمة بهذا النموذج من قبل [gchhablani](https://huggingface.co/gchhablani). يمكن العثور على كود المؤلفين [هنا](https://github.com/wasiahmad/PLBART). + +## أمثلة الاستخدام +PLBart هو نموذج متعدد اللغات للتكويد وفك التكويد (التسلسلي إلى التسلسلي) المقصود في المقام الأول لمهام تحويل الكود إلى نص، والنص إلى كود، والتحويل بين الأكواد. نظرًا لأن +النموذج متعدد اللغات، فإنه يتوقع تسلسلًا بتنسيق مختلف. تتم إضافة رمز معرف اللغة الخاص في كل من +نص المصدر والهدف. تنسيق نص المصدر هو `X [eos, src_lang_code]` حيث `X` هو نص المصدر. +تنسيق النص المستهدف هو `[tgt_lang_code] X [eos]`. لا يتم استخدام `bos` مطلقًا. + +ومع ذلك، في بعض الحالات، لا يتم توفير رمز اللغة أثناء الضبط الدقيق عند استخدام لغة واحدة فقط. يرجى الرجوع إلى [الورقة البحثية](https://arxiv.org/abs/2103.06333) لمعرفة المزيد حول هذا الموضوع. + +في الحالات التي تكون فيها رموز اللغة مطلوبة، ستقوم الدالة العادية [`~PLBartTokenizer.__call__`] بتشفير تنسيق نص المصدر +عندما تقوم بتمرير النصوص كأول حجة أو باستخدام الحجة الكلمة `text`، وستقوم بتشفير تنسيق نص الهدف إذا +تم تمريره باستخدام الحجة الكلمة `text_target`. + +### التدريب المُشرف + +```python +>>> from transformers import PLBartForConditionalGeneration, PLBartTokenizer + +>>> tokenizer = PLBartTokenizer.from_pretrained("uclanlp/plbart-base", src_lang="en_XX", tgt_lang="python") +>>> example_python_phrase = "def maximum(a,b,c):NEW_LINE_INDENTreturn max([a,b,c])" +>>> expected_translation_english = "Returns the maximum value of a b c." +>>> inputs = tokenizer(example_python_phrase, text_target=expected_translation_english, return_tensors="pt") +>>> model(**inputs) +``` + +### التوليد + +عند توليد نص الهدف، قم بتعيين `decoder_start_token_id` إلى معرف لغة الهدف. يوضح المثال التالي كيفية ترجمة Python إلى الإنجليزية باستخدام نموذج `uclanlp/plbart-python-en_XX`. + +```python +>>> from transformers import PLBartForConditionalGeneration, PLBartTokenizer + +>>> tokenizer = PLBartTokenizer.from_pretrained("uclanlp/plbart-python-en_XX", src_lang="python", tgt_lang="en_XX") +>>> example_python_phrase = "def maximum(a,b,c):NEW_LINE_INDENTreturn max([a,b,c])" +>>> inputs = tokenizer(example_python_phrase, return_tensors="pt") +>>> model = PLBartForConditionalGeneration.from_pretrained("uclanlp/plbart-python-en_XX") +>>> translated_tokens = model.generate(**inputs, decoder_start_token_id=tokenizer.lang_code_to_id["en_XX"]) +>>> tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0] +"Returns the maximum value of a b c." +``` + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة النمذجة اللغوية السببية](../tasks/language_modeling) +- [دليل مهمة الترجمة](../tasks/translation) +- [دليل مهمة توليد الملخصات](../tasks/summarization) + +## PLBartConfig + +[[autodoc]] PLBartConfig + +## PLBartTokenizer + +[[autodoc]] PLBartTokenizer + +- build_inputs_with_special_tokens + +## PLBartModel + +[[autodoc]] PLBartModel + +- forward + +## PLBartForConditionalGeneration + +[[autodoc]] PLBartForConditionalGeneration + +- forward + +## PLBartForSequenceClassification + +[[autodoc]] PLBartForSequenceClassification + +- forward + +## PLBartForCausalLM + +[[autodoc]] PLBartForCausalLM + +- forward \ No newline at end of file From 1f1eafb83830e6bb9ece6ccb7ae4ff746337de8c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:31 +0300 Subject: [PATCH 544/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/poolformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/poolformer.md | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/source/ar/model_doc/poolformer.md diff --git a/docs/source/ar/model_doc/poolformer.md b/docs/source/ar/model_doc/poolformer.md new file mode 100644 index 00000000000000..01c7cfcdb363fc --- /dev/null +++ b/docs/source/ar/model_doc/poolformer.md @@ -0,0 +1,70 @@ +# PoolFormer + +## نظرة عامة +تم اقتراح نموذج PoolFormer في [MetaFormer is Actually What You Need for Vision](https://arxiv.org/abs/2111.11418) بواسطة Sea AI Labs. بدلاً من تصميم أداة خلط رموز معقدة لتحقيق أداء SOTA، يهدف هذا العمل إلى إثبات كفاءة نماذج المحول التي تنبع إلى حد كبير من البنية العامة MetaFormer. + +مقتبس من الورقة هو ما يلي: + +> لقد أظهرت المحولات إمكانات كبيرة في مهام الرؤية الحاسوبية. هناك اعتقاد شائع بأن وحدة خلط الرموز القائمة على الاهتمام تساهم بشكل كبير في كفاءتها. ومع ذلك، أظهرت الأعمال الحديثة أنه يمكن استبدال الوحدة القائمة على الاهتمام في المحولات بواسطة MLPs المكانية وأن النماذج الناتجة لا تزال تؤدي أداءً جيدًا. بناءً على هذه الملاحظة، نفترض أن البنية العامة للمحولات، بدلاً من وحدة خلط الرموز المحددة، هي أكثر أهمية لأداء النموذج. للتحقق من ذلك، نقوم عن قصد باستبدال وحدة الاهتمام في المحولات بمشغل تجميع مكاني بسيط للغاية لإجراء مزج الرموز الأساسي فقط. ومما يثير الدهشة أننا نلاحظ أن النموذج المشتق، الذي يُطلق عليه اسم PoolFormer، يحقق أداءً تنافسيًا في مهام رؤية الكمبيوتر المتعددة. على سبيل المثال، على ImageNet-1K، يحقق PoolFormer دقة أعلى بنسبة 82.1٪، متجاوزًا خطوط الأساس المُحسنة جيدًا للرؤية المحولة/شبكة MLP-like baselines DeiT-B/ResMLP-B24 بنسبة 0.3٪/1.1٪ بدقة أقل من 35٪/52٪ من المعلمات و48٪/60٪ أقل من MACs. تؤكد فعالية PoolFormer افتراضنا وتحثنا على إطلاق مفهوم "MetaFormer"، وهو بنية عامة مستخلصة من المحولات دون تحديد خلاط الرموز. بناءً على التجارب المستفيضة، نجادل بأن MetaFormer هو اللاعب الرئيسي في تحقيق نتائج متفوقة لنماذج المحولات والشبكات المشابهة لـ MLP الحديثة في مهام الرؤية. يدعو هذا العمل إلى مزيد من الأبحاث المستقبلية المكرسة لتحسين MetaFormer بدلاً من التركيز على وحدات خلط الرموز. بالإضافة إلى ذلك، يمكن أن يكون PoolFormer المقترح بمثابة خط أساس لتصميم بنية MetaFormer المستقبلية. + +يوضح الشكل أدناه بنية PoolFormer. مأخوذة من [الورقة الأصلية](https://arxiv.org/abs/2111.11418). + + + +تمت المساهمة بهذا النموذج من قبل [heytanay](https://huggingface.co/heytanay). يمكن العثور على الكود الأصلي [هنا](https://github.com/sail-sg/poolformer). + +## نصائح الاستخدام + +- يحتوي PoolFormer على بنية هرمية، حيث توجد طبقة تجميع متوسطة بسيطة بدلاً من الاهتمام. يمكن العثور على جميع نقاط تفتيش النموذج على [hub](https://huggingface.co/models?other=poolformer). + +- يمكن للمرء استخدام [`PoolFormerImageProcessor`] لتحضير الصور للنموذج. + +- مثل معظم النماذج، يأتي PoolFormer بأحجام مختلفة، يمكن العثور على تفاصيلها في الجدول أدناه. + +| **Model variant** | **Depths** | **Hidden sizes** | **Params (M)** | **ImageNet-1k Top 1** | +| :---------------: | ------------- | ------------------- | :------------: | :-------------------: | +| s12 | [2, 2, 6, 2] | [64, 128, 320, 512] | 12 | 77.2 | +| s24 | [4, 4, 12, 4] | [64, 128, 320, 512] | 21 | 80.3 | +| s36 | [6, 6, 18, 6] | [64, 128, 320, 512] | 31 | 81.4 | +| m36 | [6, 6, 18, 6] | [96, 192, 384, 768] | 56 | 82.1 | +| m48 | [8, 8, 24, 8] | [96, 192, 384, 768] | 73 | 82.5 | + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام PoolFormer. + + + +- [`PoolFormerForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهام التصنيف الصوري](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## PoolFormerConfig + +[[autodoc]] PoolFormerConfig + +## PoolFormerFeatureExtractor + +[[autodoc]] PoolFormerFeatureExtractor + +- __call__ + +## PoolFormerImageProcessor + +[[autodoc]] PoolFormerImageProcessor + +- preprocess + +## PoolFormerModel + +[[autodoc]] PoolFormerModel + +- forward + +## PoolFormerForImageClassification + +[[autodoc]] PoolFormerForImageClassification + +- forward \ No newline at end of file From ff7fef2fdabf973a48365cfa96d05f5d92de41dc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:33 +0300 Subject: [PATCH 545/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/pop2piano.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/pop2piano.md | 167 ++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 docs/source/ar/model_doc/pop2piano.md diff --git a/docs/source/ar/model_doc/pop2piano.md b/docs/source/ar/model_doc/pop2piano.md new file mode 100644 index 00000000000000..0b924b25c6e922 --- /dev/null +++ b/docs/source/ar/model_doc/pop2piano.md @@ -0,0 +1,167 @@ +# Pop2Piano + +## نظرة عامة + +اقتُرح نموذج Pop2Piano في ورقة "Pop2Piano: توليد عزف بيانو قائم على موسيقى البوب" بواسطة جونغهو تشوي وكيوغو لي. + +يستمتع الكثيرون بعزف البيانو لموسيقى البوب، ولكن توليدها من الموسيقى ليست مهمة سهلة. يتطلب الأمر خبرة كبيرة في العزف على البيانو، بالإضافة إلى معرفة الخصائص والألحان المختلفة للأغنية. مع Pop2Piano، يمكنك توليد عزف بيانو مباشرةً من الموجة الصوتية للأغنية. وهو أول نموذج يقوم بتوليد عزف بيانو مباشرةً من موسيقى البوب دون الحاجة إلى وحدات استخراج اللحن والنغمات. + +Pop2Piano هو نموذج محول Encoder-Decoder يعتمد على T5. يتم تحويل الصوت المدخل إلى موجته ثم تمريره إلى المشفر، الذي يحوله إلى تمثيل كامن. يستخدم فك المشفر هذه التمثيلات لتوليد رموز الرموز بطريقة تدريجية. يرتبط كل رمز من رموز الرموز بأحد الأنواع الرمزية الأربعة: الوقت، والسرعة، والنوتة، و"خاص". ثم يتم فك ترميز رموز الرموز إلى ملف MIDI المكافئ. + +ملخص الورقة هو كما يلي: + +> "يستمتع الكثيرون بعزف البيانو لموسيقى البوب. ومع ذلك، لا تزال مهمة توليد عزف بيانو لموسيقى البوب تلقائيًا غير مدروسة بشكل كافٍ. ويرجع ذلك جزئيًا إلى نقص أزواج البيانات المتزامنة {Pop, Piano Cover}، والتي جعلت من الصعب تطبيق أحدث الطرق القائمة على التعلم العميق المكثف للبيانات. وللاستفادة من قوة النهج القائم على البيانات، نقوم بإنشاء كمية كبيرة من أزواج البيانات المتزامنة {Pop, Piano Cover} باستخدام خط أنابيب مؤتمت. في هذه الورقة، نقدم Pop2Piano، وهي شبكة محول تقوم بتوليد عزف بيانو بناءً على موجات صوتية لموسيقى البوب. على حد علمنا، هذا هو أول نموذج يقوم بتوليد عزف بيانو مباشرةً من صوت البوب دون استخدام وحدات استخراج اللحن والنغمات. ونظهر أن Pop2Piano، الذي تم تدريبه على مجموعتنا من البيانات، قادر على إنتاج عزف بيانو معقول." + +تمت المساهمة بهذا النموذج بواسطة سوسناتو دار. يمكن العثور على الكود الأصلي هنا. + +## نصائح الاستخدام + +- لاستخدام Pop2Piano، ستحتاج إلى تثبيت مكتبة 🤗 Transformers، بالإضافة إلى وحدات الطرف الثالث التالية: + +```bash +pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy +``` + +يرجى ملاحظة أنك قد تحتاج إلى إعادة تشغيل وقت التشغيل بعد التثبيت. + +- Pop2Piano هو نموذج Encoder-Decoder مثل T5. + +- يمكن استخدام Pop2Piano لتوليد ملفات صوتية MIDI لتسلسل صوتي معين. + +- يمكن أن يؤدي اختيار ملحنين مختلفين في `Pop2PianoForConditionalGeneration.generate()` إلى نتائج متنوعة. + +- يمكن أن يؤدي تعيين معدل أخذ العينات إلى 44.1 كيلو هرتز عند تحميل ملف الصوت إلى أداء جيد. + +- على الرغم من أن Pop2Piano تم تدريبه بشكل أساسي على موسيقى البوب الكورية، إلا أنه يعمل بشكل جيد أيضًا على أغاني البوب أو الهيب هوب الغربية. + +## أمثلة + +- مثال باستخدام مجموعة بيانات HuggingFace: + +```python +>>> from datasets import load_dataset +>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor + +>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano") +>>> processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano") +>>> ds = load_dataset("sweetcocoa/pop2piano_ci", split="test") + +>>> inputs = processor( +... audio=ds["audio"][0]["array"], sampling_rate=ds["audio"][0]["sampling_rate"], return_tensors="pt" +... ) +>>> model_output = model.generate(input_features=inputs["input_features"], composer="composer1") +>>> tokenizer_output = processor.batch_decode( +... token_ids=model_output, feature_extractor_output=inputs +... )["pretty_midi_objects"][0] +>>> tokenizer_output.write("./Outputs/midi_output.mid") +``` + +- مثال باستخدام ملف الصوت الخاص بك: + +```python +>>> import librosa +>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor + +>>> audio, sr = librosa.load("", sr=44100) # يمكنك تغيير sr إلى قيمة مناسبة. +>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano") +>>> processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano") + +>>> inputs = processor(audio=audio, sampling_rate=sr, return_tensors="pt") +>>> model_output = model.generate(input_features=inputs["input_features"], composer="composer1") +>>> tokenizer_output = processor.batch_decode( +... token_ids=model_output, feature_extractor_output=inputs +... )["pretty_midi_objects"][0] +>>> tokenizer_output.write("./Outputs/midi_output.mid") +``` + +- مثال على معالجة ملفات صوتية متعددة في دفعة واحدة: + +```python +>>> import librosa +>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor + +>>> # يمكنك تغيير sr إلى قيمة مناسبة. +>>> audio1, sr1 = librosa.load("", sr=44100) +>>> audio2, sr2 = librosa.load("", sr=44100) +>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano") +>>> processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano") + +>>> inputs = processor(audio=[audio1, audio2], sampling_rate=[sr1, sr2], return_attention_mask=True, return_tensors="pt") +>>> # نظرًا لأننا نقوم الآن بتوليد دفعة (ملفين صوتيين)، يجب علينا تمرير attention_mask +>>> model_output = model.generate( +... input_features=inputs["input_features"], +... attention_mask=inputs["attention_mask"], +... composer="composer1", +... ) +>>> tokenizer_output = processor.batch_decode( +... token_ids=model_output, feature_extractor_output=inputs +... )["pretty_midi_objects"] + +>>> # نظرًا لأن لدينا الآن ملفي MIDI تم توليدهما +>>> tokenizer_output[0].write("./Outputs/midi_output1.mid") +>>> tokenizer_output[1].write("./Outputs/midi_output2.mid") +``` + +- مثال على معالجة ملفات صوتية متعددة في دفعة واحدة (باستخدام `Pop2PianoFeatureExtractor` و`Pop2PianoTokenizer`): + +```python +>>> import librosa +>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoFeatureExtractor, Pop2PianoTokenizer + +>>> # يمكنك تغيير sr إلى قيمة مناسبة. +>>> audio1, sr1 = librosa.load("", sr=44100) +>>> audio2, sr2 = librosa.load("", sr=44100) +>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano") +>>> feature_extractor = Pop2PianoFeatureExtractor.from_pretrained("sweetcocoa/pop2piano") +>>> tokenizer = Pop2PianoTokenizer.from_pretrained("sweetcocoa/pop2piano") + +>>> inputs = feature_extractor( +... audio=[audio1, audio2], +... sampling_rate=[sr1, sr2], +... return_attention_mask=True, +... return_tensors="pt", +... ) +>>> # نظرًا لأننا نقوم الآن بتوليد دفعة (ملفين صوتيين)، يجب علينا تمرير attention_mask +>>> model_output = model.generate( +... input_features=inputs["input_features"], +... attention_mask=inputs["attention_mask"], +... composer="composer1", +... ) +>>> tokenizer_output = tokenizer.batch_decode( +... token_ids=model_output, feature_extractor_output=inputs +... )["pretty_midi_objects"] + +>>> # نظرًا لأن لدينا الآن ملفي MIDI تم توليدهما +>>> tokenizer_output[0].write("./Outputs/midi_output1.mid") +>>> tokenizer_output[1].write("./Outputs/midi_output2.mid") +``` + +## Pop2PianoConfig + +[[autodoc]] Pop2PianoConfig + +## Pop2PianoFeatureExtractor + +[[autodoc]] Pop2PianoFeatureExtractor + +- __call__ + +## Pop2PianoForConditionalGeneration + +[[autodoc]] Pop2PianoForConditionalGeneration + +- forward + +- generate + +## Pop2PianoTokenizer + +[[autodoc]] Pop2PianoTokenizer + +- __call__ + +## Pop2PianoProcessor + +[[autodoc]] Pop2PianoProcessor + +- __call__ \ No newline at end of file From 20a95f0511a544f355398775ef43dd0294599221 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:35 +0300 Subject: [PATCH 546/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/prophetnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/prophetnet.md | 74 ++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/source/ar/model_doc/prophetnet.md diff --git a/docs/source/ar/model_doc/prophetnet.md b/docs/source/ar/model_doc/prophetnet.md new file mode 100644 index 00000000000000..27ebc9b8be5f94 --- /dev/null +++ b/docs/source/ar/model_doc/prophetnet.md @@ -0,0 +1,74 @@ +# ProphetNet + +## نظرة عامة +تم اقتراح نموذج ProphetNet في بحث بعنوان "ProphetNet: التنبؤ بـ N-gram المستقبلية للنمذجة المسبقة التسلسل إلى تسلسل" بواسطة Yu Yan وآخرون. في 13 يناير 2020. + +ProphetNet هو نموذج ترميز وفك ترميز ويمكنه التنبؤ بـ n-tokens المستقبلية لـ "ngram" النمذجة اللغوية بدلاً من التنبؤ بالرمز التالي فقط. + +الملخص من الورقة هو ما يلي: + +في هذه الورقة، نقدم نموذجًا جديدًا للنمذجة المسبقة التسلسل إلى تسلسل يسمى ProphetNet، والذي يقدم هدفًا ذاتي الإشراف يسمى التنبؤ بـ n-gram المستقبلية وآلية الاهتمام الذاتي n-stream المقترحة. بدلاً من تحسين التنبؤ بخطوة واحدة إلى الأمام في النموذج التسلسلي التقليدي، يتم تحسين ProphetNet بواسطة التنبؤ بخطوات n إلى الأمام والتي تتنبأ بالـ n الرموز التالية في نفس الوقت بناءً على رموز السياق السابقة في كل خطوة زمنية. ويشجع التنبؤ بـ n-gram المستقبلية النموذج صراحةً على التخطيط لرموز المستقبل ويمنع الإفراط في التلاؤم مع الارتباطات المحلية القوية. نقوم بتعليم ProphetNet مسبقًا باستخدام مجموعة بيانات أساسية (16 جيجابايت) ومجموعة بيانات واسعة النطاق (160 جيجابايت) على التوالي. ثم نجري تجارب على CNN/DailyMail، وGigaword، وSQuAD 1.1 لمهام الملخص الاستخلاصي وتوليد الأسئلة. وتظهر النتائج التجريبية أن ProphetNet يحقق نتائج جديدة رائدة على جميع هذه المجموعات مقارنة بالنماذج التي تستخدم نفس حجم مجموعة بيانات التدريب. + +يمكن العثور على شفرة المؤلفين [هنا](https://github.com/microsoft/ProphetNet). + +## نصائح الاستخدام + +- ProphetNet هو نموذج مع تضمين الموضع المطلق، لذلك يُنصح عادةً بتعبئة المدخلات على اليمين بدلاً من اليسار. + +- تستند بنية النموذج إلى المحول الأصلي، ولكنه يستبدل آلية "الاهتمام الذاتي" القياسية في فك التشفير بآلية اهتمام ذاتي رئيسية وآلية اهتمام ذاتي وn-stream (التنبؤ). + +## الموارد + +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) + +- [دليل مهام الترجمة](../tasks/translation) + +- [دليل مهام الملخص](../tasks/summarization) + +## ProphetNetConfig + +[[autodoc]] ProphetNetConfig + +## ProphetNetTokenizer + +[[autodoc]] ProphetNetTokenizer + +## مخرجات ProphetNet المحددة + +[[autodoc]] models.prophetnet.modeling_prophetnet.ProphetNetSeq2SeqLMOutput + +[[autodoc]] models.prophetnet.modeling_prophetnet.ProphetNetSeq2SeqModelOutput + +[[autodoc]] models.prophetnet.modeling_prophetnet.ProphetNetDecoderModelOutput + +[[autodoc]] models.prophetnet.modeling_prophetnet.ProphetNetDecoderLMOutput + +## ProphetNetModel + +[[autodoc]] ProphetNetModel + +- forward + +## ProphetNetEncoder + +[[autodoc]] ProphetNetEncoder + +- forward + +## ProphetNetDecoder + +[[autodoc]] ProphetNetDecoder + +- forward + +## ProphetNetForConditionalGeneration + +[[autodoc]] ProphetNetForConditionalGeneration + +- forward + +## ProphetNetForCausalLM + +[[autodoc]] ProphetNetForCausalLM + +- forward \ No newline at end of file From 8584c74386adf87a6ec4c888b099471881e57a0c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:36 +0300 Subject: [PATCH 547/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/pvt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/pvt.md | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/source/ar/model_doc/pvt.md diff --git a/docs/source/ar/model_doc/pvt.md b/docs/source/ar/model_doc/pvt.md new file mode 100644 index 00000000000000..2254db645647fd --- /dev/null +++ b/docs/source/ar/model_doc/pvt.md @@ -0,0 +1,43 @@ +# Pyramid Vision Transformer (PVT) + +## نظرة عامة +تم اقتراح نموذج PVT في +[Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions](https://arxiv.org/abs/2102.12122) +بواسطة Wenhai Wang, Enze Xie, Xiang Li, Deng-Ping Fan, Kaitao Song, Ding Liang, Tong Lu, Ping Luo, Ling Shao. PVT هو نوع من محولات الرؤية التي تستخدم هيكل هرمي لجعله عمود فقري فعال لمهام التنبؤ الكثيف. على وجه التحديد، فإنه يسمح بإدخالات أكثر تفصيلاً (4 × 4 بكسل لكل رقعة) ليتم استخدامها، مع تقليل طول تسلسل المحول في نفس الوقت أثناء تعميقه - مما يقلل من التكلفة الحسابية. بالإضافة إلى ذلك، يتم استخدام طبقة اهتمام التخفيض المكاني (SRA) لزيادة تقليل استهلاك الموارد عند تعلم ميزات عالية الدقة. + +الملخص من الورقة هو كما يلي: + +*على الرغم من أن شبكات CNN قد حققت نجاحًا كبيرًا في رؤية الكمبيوتر، إلا أن هذا العمل يبحث في شبكة عمود فقري أبسط وخالية من الضربات مفيدة للعديد من مهام التنبؤ الكثيف. على عكس محول الرؤية (ViT) الذي تم اقتراحه مؤخرًا والذي تم تصميمه خصيصًا لتصنيف الصور، نقدم محول الرؤية الهرمي (PVT)، والذي يتغلب على صعوبات نقل المحول إلى مختلف مهام التنبؤ الكثيفة. يتمتع PVT بعدة مزايا مقارنة بأحدث التقنيات. على عكس ViT الذي عادة ما ينتج عنه مخرجات منخفضة الدقة ويتكبد تكاليف حسابية وذاكرية عالية، يمكن تدريب PVT على أقسام كثيفة من الصورة لتحقيق دقة إخراج عالية، وهو أمر مهم للتنبؤ الكثيف، ولكنه يستخدم أيضًا هرمًا متدرجًا للتقليل من حسابات خرائط الميزات الكبيرة. يرث PVT مزايا كل من CNN و Transformer، مما يجعله عمودًا فقريًا موحدًا لمختلف مهام الرؤية بدون ضربات، حيث يمكن استخدامه كبديل مباشر لعمود فقري CNN. نحن نتحقق من صحة PVT من خلال تجارب واسعة النطاق، مما يدل على أنه يعزز أداء العديد من المهام اللاحقة، بما في ذلك اكتشاف الأجسام، وتجزئة المثيل والتجزئة الدلالية. على سبيل المثال، مع عدد مماثل من المعلمات، يحقق PVT+RetinaNet 40.4 AP على مجموعة بيانات COCO، متجاوزًا ResNet50+RetinNet (36.3 AP) بمقدار 4.1 AP مطلق (انظر الشكل 2). نأمل أن يكون PVT بمثابة عمود فقري بديل ومفيد للتنبؤات على مستوى البكسل وتسهيل الأبحاث المستقبلية.* + +تمت المساهمة بهذا النموذج بواسطة [Xrenya](https://huggingface.co/Xrenya). يمكن العثور على الكود الأصلي [هنا](https://github.com/whai362/PVT). + +- PVTv1 على ImageNet-1K + +| **Model variant**|**Size**|**Acc@1**|**Params (M)**| +|--------------------|:-------:|:-------:|:------------:| +| PVT-Tiny|224|75.1|13.2| +| PVT-Small|224|79.8|24.5| +| PVT-Medium|224|81.2|44.2| +| PVT-Large|224|81.7|61.4| + +## PvtConfig + +[[autodoc]] PvtConfig + +## PvtImageProcessor + +[[autodoc]] PvtImageProcessor + +- preprocess + +## PvtForImageClassification + +[[autodoc]] PvtForImageClassification + +- forward + +## PvtModel + +[[autodoc]] PvtModel + +- forward \ No newline at end of file From 011cd367e5b0fa3c55505e1c60b6a26a96ba3cbf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:38 +0300 Subject: [PATCH 548/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/pvt=5Fv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/pvt_v2.md | 104 +++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 docs/source/ar/model_doc/pvt_v2.md diff --git a/docs/source/ar/model_doc/pvt_v2.md b/docs/source/ar/model_doc/pvt_v2.md new file mode 100644 index 00000000000000..d4ece647b41871 --- /dev/null +++ b/docs/source/ar/model_doc/pvt_v2.md @@ -0,0 +1,104 @@ +# Pyramid Vision Transformer V2 (PVTv2) + +## نظرة عامة + +تم اقتراح نموذج PVTv2 في ورقة "PVT v2: Improved Baselines with Pyramid Vision Transformer" من قبل Wenhai Wang وآخرون. وهو نسخة محسنة من PVT، حيث يتخلى عن ترميز الموضع، ويعتمد بدلاً من ذلك على المعلومات الموضعية المشفرة من خلال الصفر-الترقيع والترقيع المتداخل. وتبسيط البنية، والسماح بتشغيل الاستدلال بأي دقة دون الحاجة إلى استيفائها. + +وقد تم نشر بنية مشفر PVTv2 بنجاح لتحقيق نتائج متقدمة في Segformer للتجزئة الدلالية، و GLPN للعمق الأحادي، و Panoptic Segformer للتجزئة الشاملة. + +تتبع PVTv2 عائلة من النماذج تسمى المحولات الهرمية، والتي تجري تعديلات على طبقات المحول لإنشاء خرائط سمات متعددة المقاييس. على عكس البنية العمودية لمحول الرؤية (ViT) التي تفقد التفاصيل الدقيقة، من المعروف أن خرائط الميزات متعددة المقاييس تحافظ على هذه التفاصيل وتساعد في الأداء في مهام التنبؤ الكثيفة. في حالة PVTv2، يتم تحقيق ذلك من خلال إنشاء رموز رقعة الصورة باستخدام التراكيب المتداخلة في كل طبقة من طبقات المشفر. + +تسمح الميزات متعددة المقاييس للمحولات الهرمية بالاستبدال بسهولة في النماذج الأساسية لرؤية الكمبيوتر التقليدية مثل ResNet في البنى الأكبر. وقد أظهر كل من Segformer و Panoptic Segformer أن التكوينات التي تستخدم PVTv2 كعمود فقري تفوقت باستمرار على تلك التي تحتوي على عمود فقري ResNet بنفس الحجم تقريبًا. + +وتتمثل إحدى الميزات القوية الأخرى لـ PVTv2 في تقليل التعقيد في طبقات الاهتمام الذاتي المسماة Spatial Reduction Attention (SRA)، والتي تستخدم طبقات التراكيب ثنائية الأبعاد لتصور الحالات المخفية إلى دقة أصغر قبل الاهتمام بها باستخدام الاستعلامات، مما يحسن تعقيد الاهتمام الذاتي O(n^2) إلى O(n^2/R)، حيث R هو نسبة التخفيض المكاني ("sr_ratio"، المعروف أيضًا باسم حجم النواة والخطوة في التراكيب ثنائية الأبعاد). + +تم تقديم SRA في PVT، وهي طريقة تقليل التعقيد الافتراضية المستخدمة في PVTv2. ومع ذلك، قدم PVTv2 أيضًا خيار استخدام آلية اهتمام ذاتي ذات تعقيد خطي يتعلق بحجم الصورة، والتي أطلقوا عليها اسم "Linear SRA". تستخدم هذه الطريقة تجميع المتوسط لتقليل الحالات المخفية إلى حجم ثابت لا يتأثر بدقتها الأصلية (على الرغم من أنها أكثر فداحة من SRA العادية). يمكن تمكين هذا الخيار عن طريق تعيين "linear_attention" إلى "True" في PVTv2Config. + +## ملخص الورقة: + +*في الآونة الأخيرة، قدم المحول تقدمًا مشجعًا في رؤية الكمبيوتر. في هذا العمل، نقدم خطوط أساس جديدة من خلال تحسين محول الرؤية الهرمية الأصلي (PVT v1) من خلال إضافة ثلاثة تصاميم، بما في ذلك (1) طبقة اهتمام ذات تعقيد خطي، (2) ترميز رقعة متداخلة، و(3) شبكة تغذية أمامية متراكبة. مع هذه التعديلات، يقلل PVT v2 التعقيد الحسابي لـ PVT v1 إلى خطي ويحقق تحسينات كبيرة في مهام الرؤية الأساسية مثل التصنيف والكشف والتجزئة. ومن الجدير بالذكر أن PVT v2 المقترح يحقق أداءً مماثلًا أو أفضل من الأعمال الحديثة مثل محول Swin. نأمل أن يسهل هذا العمل أبحاث المحول المتقدمة في رؤية الكمبيوتر. الكود متاح في https://github.com/whai362/PVT.* + +تمت المساهمة بهذا النموذج من قبل [FoamoftheSea](https://huggingface.co/FoamoftheSea). يمكن العثور على الكود الأصلي [هنا](https://github.com/whai362/PVT). + +## نصائح الاستخدام: + +- [PVTv2] هو نموذج محول هرمي أظهر أداءً قويًا في تصنيف الصور ومهام متعددة أخرى، ويستخدم كعمود فقري للتجزئة الدلالية في [Segformer]، وتقدير العمق الأحادي في [GLPN]، والتجزئة الشاملة في [Panoptic Segformer]، مما يظهر باستمرار أداءً أعلى من تكوينات ResNet المماثلة. + +- تحقق المحولات الهرمية مثل PVTv2 كفاءة بيانات ومعلمات متفوقة في بيانات الصور مقارنة ببنيات المحول النقي من خلال دمج عناصر التصميم من الشبكات العصبية التلافيفية (CNNs) في مشفراتها. يخلق هذا بنية هجينة تجمع بين التحيزات الاستقرائية المفيدة لـ CNNs مثل التكافؤ في الترجمة والمحلية في الشبكة أثناء الاستمتاع بفوائد الاستجابة الديناميكية للبيانات والنمذجة العلائقية العالمية التي توفرها آلية الاهتمام الذاتي [المحولات]. + +- يستخدم PVTv2 ترميزات رقعة متداخلة لإنشاء خرائط ميزات متعددة المقاييس، والتي يتم دمجها بمعلومات الموقع باستخدام الصفر-الترقيع والتركيبات العميقة. + +- لتقليل التعقيد في طبقات الاهتمام، يقوم PVTv2 بإجراء تقليل مكاني للحالات المخفية باستخدام إما تراكيب ثنائية الأبعاد متسارعة (SRA) أو تجميع متوسط ثابت الحجم (Linear SRA). على الرغم من أن Linear SRA أكثر فداحة بطبيعته، إلا أنه يوفر أداءً رائعًا بتعقيد خطي فيما يتعلق بحجم الصورة. لاستخدام Linear SRA في طبقات الاهتمام الذاتي، قم بتعيين "linear_attention=True" في "PvtV2Config". + +- [`PvtV2Model`] هو مشفر المحول الهرمي (الذي يشار إليه أيضًا باسم Mix Transformer أو MiT في الأدبيات). يضيف [`PvtV2ForImageClassification`] رأس مصنف بسيط في الأعلى لأداء تصنيف الصور. يمكن استخدام [`PvtV2Backbone`] مع نظام [`AutoBackbone`] في البنى الأكبر مثل Deformable DETR. + +- يمكن العثور على الأوزان التي تم تدريبها مسبقًا على ImageNet لجميع أحجام النماذج على [hub]. + +أفضل طريقة للبدء مع PVTv2 هي تحميل نقطة التحقق التي تم تدريبها مسبقًا بالحجم الذي تختاره باستخدام `AutoModelForImageClassification`: + +```python +import requests +import torch + +from transformers import AutoModelForImageClassification, AutoImageProcessor +from PIL import Image + +model = AutoModelForImageClassification.from_pretrained("OpenGVLab/pvt_v2_b0") +image_processor = AutoImageProcessor.from_pretrained("OpenGVLab/pvt_v2_b0") +url = "http://images.cocodataset.org/val2017/000000039769.jpg" +image = Image.open(requests.get(url, stream=True).raw) +processed = image_processor(image) +outputs = model(torch.tensor(processed["pixel_values"])) +``` + +لاستخدام PVTv2 كعمود فقري لبنى أكثر تعقيدًا مثل DeformableDETR، يمكنك استخدام AutoBackbone (سيحتاج هذا النموذج إلى ضبط دقيق حيث أنك تستبدل العمود الفقري في النموذج الذي تم تدريبه مسبقًا): + +```python +import requests +import torch + +from transformers import AutoConfig, AutoModelForObjectDetection, AutoImageProcessor +from PIL import Image + +model = AutoModelForObjectDetection.from_config( + config=AutoConfig.from_pretrained( + "SenseTime/deformable-detr", + backbone_config=AutoConfig.from_pretrained("OpenGVLab/pvt_v2_b5"), + use_timm_backbone=False + ), +) + +image_processor = AutoImageProcessor.from_pretrained("SenseTime/deformable-detr") +url = "http://images.cocodataset.org/val2017/000000039769.jpg" +image = Image.open(requests.get(url, stream=True).raw) +processed = image_processor(image) +outputs = model(torch.tensor(processed["pixel_values"])) +``` + +أداء [PVTv2] على ImageNet-1K حسب حجم النموذج (B0-B5): + +| الطريقة | الحجم | Acc@1 | #Params (M) | +|------------------|:----:|:-----:|:-----------:| +| PVT-V2-B0 | 224 | 70.5 | 3.7 | +| PVT-V2-B1 | 224 | 78.7 | 14.0 | +| PVT-V2-B2-Linear | 224 | 82.1 | 22.6 | +| PVT-V2-B2 | 224 | 82.0 | 25.4 | +| PVT-V2-B3 | 224 | 83.1 | 45.2 | +| PVT-V2-B4 | 224 | 83.6 | 62.6 | +| PVT-V2-B5 | 224 | 83.8 | 82.0 | + +## PvtV2Config + +[[autodoc]] PvtV2Config + +## PvtForImageClassification + +[[autodoc]] PvtV2ForImageClassification + +- forward + +## PvtModel + +[[autodoc]] PvtV2Model + +- forward \ No newline at end of file From c3c0c8787de35d0a62cd8873d2dd456d009d02d9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:40 +0300 Subject: [PATCH 549/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/qdqbert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/qdqbert.md | 146 ++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 docs/source/ar/model_doc/qdqbert.md diff --git a/docs/source/ar/model_doc/qdqbert.md b/docs/source/ar/model_doc/qdqbert.md new file mode 100644 index 00000000000000..4d5fdeef1c01c0 --- /dev/null +++ b/docs/source/ar/model_doc/qdqbert.md @@ -0,0 +1,146 @@ +# QDQBERT + +> **ملاحظة:** هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب (PRs) جديدة لتغيير شفرته البرمجية. في حال واجهتك أي مشاكل أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعمه: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + +## نظرة عامة +يمكن الإشارة إلى نموذج QDQBERT في الورقة البحثية [Integer Quantization for Deep Learning Inference: Principles and Empirical Evaluation](https://arxiv.org/abs/2004.09602) من تأليف هاو وو، وباتريك جود، وشياوجي تشانغ، وميخائيل إيسايف، وبوليوس ميسيكيفيشيوس. + +مقدمة الورقة البحثية هي كما يلي: + +> "يمكن لتقنيات التكميم أن تقلل من حجم الشبكات العصبية العميقة وتحسن من زمن الاستدلال وسرعة المعالجة من خلال الاستفادة من التعليمات البرمجية الصحيحة عالية الإنتاجية. في هذه الورقة، نراجع الجوانب الرياضية لمعلمات التكميم ونقيم خياراتها على مجموعة واسعة من نماذج الشبكات العصبية لمجالات تطبيق مختلفة، بما في ذلك الرؤية والخطاب واللغة. نركز على تقنيات التكميم التي يمكن تسريعها بواسطة المعالجات التي تحتوي على خطوط أنابيب حسابية صحيحة عالية الإنتاجية. كما نقدم سير عمل للتكميم بـ 8 بتات قادر على الحفاظ على الدقة ضمن 1% من خط الأساس العائم على جميع الشبكات المدروسة، بما في ذلك النماذج التي يصعب تكميمها، مثل MobileNets و BERT-large." + +تمت المساهمة بهذا النموذج من قبل [shangz](https://huggingface.co/shangz). + +## نصائح الاستخدام + +- يضيف نموذج QDQBERT عمليات تكميم زائفة (زوج من عمليات التكميم الخطي/إلغاء التكميم الخطي) إلى (1) مدخلات الطبقة الخطية وأوزانها، (2) مدخلات matmul، (3) مدخلات الإضافة الباقية، في نموذج BERT. + +- يتطلب QDQBERT اعتماد [Pytorch Quantization Toolkit](https://github.com/NVIDIA/TensorRT/tree/master/tools/pytorch-quantization). لتثبيته، استخدم الأمر التالي: `pip install pytorch-quantization --extra-index-url https://pypi.ngc.nvidia.com`. + +- يمكن تحميل نموذج QDQBERT من أي نقطة تفتيش لنموذج BERT من HuggingFace (على سبيل المثال، *google-bert/bert-base-uncased*)، وإجراء التدريب على التكميم الواعي/التكميم بعد التدريب. + +- يمكن العثور على مثال كامل لاستخدام نموذج QDQBERT لإجراء التدريب على التكميم الواعي والتكميم بعد التدريب لمهمة SQUAD في [transformers/examples/research_projects/quantization-qdqbert/](examples/research_projects/quantization-qdqbert/). + +### تعيين برامج التكميم الافتراضية + +يضيف نموذج QDQBERT عمليات تكميم زائفة (زوج من عمليات التكميم الخطي/إلغاء التكميم الخطي) إلى نموذج BERT بواسطة `TensorQuantizer` في [Pytorch Quantization Toolkit](https://github.com/NVIDIA/TensorRT/tree/master/tools/pytorch-quantization). `TensorQuantizer` هو الوحدة النمطية لتكميم المصفوفات، مع `QuantDescriptor` الذي يحدد كيفية تكميم المصفوفة. راجع [دليل مستخدم Pytorch Quantization Toolkit](https://docs.nvidia.com/deeplearning/tensorrt/pytorch-quantization-toolkit/docs/userguide.html) لمزيد من التفاصيل. + +قبل إنشاء نموذج QDQBERT، يجب تعيين `QuantDescriptor` الافتراضي الذي يحدد برامج تكميم المصفوفات الافتراضية. + +مثال: + +```python +>>> import pytorch_quantization.nn as quant_nn +>>> from pytorch_quantization.tensor_quant import QuantDescriptor + +>>> # تم تعيين برنامج التكميم الافتراضي للمصفوفة لاستخدام طريقة المعايرة القصوى +>>> input_desc = QuantDescriptor(num_bits=8, calib_method="max") +>>> # تم تعيين برنامج التكميم الافتراضي للمصفوفة لتكميم القناة لكل وزن +>>> weight_desc = QuantDescriptor(num_bits=8, axis=((0,))) +>>> quant_nn.QuantLinear.set_default_quant_desc_input(input_desc) +>>> quant_nn.QuantLinear.set_default_quant_desc_weight(weight_desc) +``` + +### المعايرة + +المعايرة هي مصطلح لتمرير عينات البيانات إلى برنامج التكميم وتحديد أفضل عوامل المقياس للمصفوفات. بعد إعداد برامج تكميم المصفوفات، يمكنك استخدام المثال التالي لمعايرة النموذج: + +```python +>>> # البحث عن TensorQuantizer وتمكين المعايرة +>>> for name, module in model.named_modules(): +... if name.endswith("_input_quantizer"): +... module.enable_calib() +... module.disable_quant() # استخدام بيانات الدقة الكاملة للمعايرة + +>>> # إدخال عينات البيانات +>>> model(x) +>>> # ... + +>>> # الانتهاء من المعايرة +>>> for name, module in model.named_modules(): +... if name.endswith("_input_quantizer"): +... module.load_calib_amax() +... module.enable_quant() + +>>> # إذا كنت تعمل على GPU، فيجب استدعاء .cuda() مرة أخرى لأن المعايرة ستنشئ مصفوفات جديدة +>>> model.cuda() + +>>> # استمر في تشغيل النموذج المكّم +>>> # ... +``` + +### التصدير إلى ONNX + +الهدف من التصدير إلى ONNX هو نشر الاستدلال باستخدام [TensorRT](https://developer.nvidia.com/tensorrt). سيتم تقسيم التكميم الزائف إلى زوج من عمليات QuantizeLinear/DequantizeLinear ONNX. بعد تعيين العضو الثابت لـ TensorQuantizer لاستخدام دالات التكميم الزائفة الخاصة بـ Pytorch، يمكن تصدير النموذج المكّم زائفًا إلى ONNX، اتبع التعليمات الموجودة في [torch.onnx](https://pytorch.org/docs/stable/onnx.html). مثال: + +```python +>>> from pytorch_quantization.nn import TensorQuantizer + +>>> TensorQuantizer.use_fb_fake_quant = True + +>>> # تحميل النموذج المعاير +>>> ... +>>> # تصدير ONNX +>>> torch.onnx.export(...) +``` + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## QDQBertConfig + +[[autodoc]] QDQBertConfig + +## QDQBertModel + +[[autodoc]] QDQBertModel + +- forward + +## QDQBertLMHeadModel + +[[autodoc]] QDQBertLMHeadModel + +- forward + +## QDQBertForMaskedLM + +[[autodoc]] QDQBertForMaskedLM + +- forward + +## QDQBertForSequenceClassification + +[[autodoc]] QDQBertForSequenceClassification + +- forward + +## QDQBertForNextSentencePrediction + +[[autodoc]] QDQBertForNextSentencePrediction + +- forward + +## QDQBertForMultipleChoice + +[[autodoc]] QDQBertForMultipleChoice + +- forward + +## QDQBertForTokenClassification + +[[autodoc]] QDQBertForTokenClassification + +- forward + +## QDQBertForQuestionAnswering + +[[autodoc]] QDQBertForQuestionAnswering + +- forward \ No newline at end of file From 50edf1ca505bc2159e7e47df51b098b0e68eb79c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:42 +0300 Subject: [PATCH 550/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/qwen2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/qwen2.md | 75 +++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/source/ar/model_doc/qwen2.md diff --git a/docs/source/ar/model_doc/qwen2.md b/docs/source/ar/model_doc/qwen2.md new file mode 100644 index 00000000000000..e5f6e2b7e4be91 --- /dev/null +++ b/docs/source/ar/model_doc/qwen2.md @@ -0,0 +1,75 @@ +# Qwen2 + +## نظرة عامة + +Qwen2 هي سلسلة النماذج اللغوية الجديدة للنماذج اللغوية الضخمة من فريق Qwen. في السابق، أصدرنا سلسلة Qwen، بما في ذلك Qwen-72B وQwen-1.8B وQwen-VL وQwen-Audio، وغيرها. + +### تفاصيل النموذج + +Qwen2 هي سلسلة من نماذج اللغة التي تشمل نماذج فك تشفير اللغة بأحجام نماذج مختلفة. بالنسبة لكل حجم، نقوم بإطلاق نموذج اللغة الأساسي ونموذج الدردشة المتوافق. إنه يعتمد على بنية Transformer مع تنشيط SwiGLU، وتحيز QKV للاهتمام، واهتمام الاستعلام الجماعي، ومزيج من انتباه النافذة المنزلقة والاهتمام الكامل، وما إلى ذلك. بالإضافة إلى ذلك، لدينا محسن محلل نحوي متكيف مع عدة لغات ورمز طبيعي. + +## نصائح الاستخدام + +يمكن العثور على `Qwen2-7B-beta` و`Qwen2-7B-Chat-beta` على [Huggingface Hub](https://huggingface.co/Qwen) + +فيما يلي، نوضح كيفية استخدام `Qwen2-7B-Chat-beta` للاستنتاج. لاحظ أننا استخدمنا تنسيق ChatML للحوار، وفي هذا العرض التوضيحي، نوضح كيفية الاستفادة من `apply_chat_template` لهذا الغرض. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer +>>> device = "cuda" # الجهاز الذي سيتم تحميل النموذج عليه + +>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-7B-Chat", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-7B-Chat") + +>>> prompt = "قدم لي مقدمة موجزة عن النموذج اللغوي الضخم." + +>>> messages = [{"role": "user", "content": prompt}] + +>>> text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) + +>>> model_inputs = tokenizer([text], return_tensors="pt").to(device) + +>>> generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=True) + +>>> generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)] + +>>> response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +``` + +## Qwen2Config + +[[autodoc]] Qwen2Config + +## Qwen2Tokenizer + +[[autodoc]] Qwen2Tokenizer + +- save_vocabulary + +## Qwen2TokenizerFast + +[[autodoc]] Qwen2TokenizerFast + +## Qwen2Model + +[[autodoc]] Qwen2Model + +- forward + +## Qwen2ForCausalLM + +[[autodoc]] Qwen2ForCausalLM + +- forward + +## Qwen2ForSequenceClassification + +[[autodoc]] Qwen2ForSequenceClassification + +- forward + +## Qwen2ForTokenClassification + +[[autodoc]] Qwen2ForTokenClassification + +- forward \ No newline at end of file From fa749c21f09ca08346db714de0f3d4b0d10b2524 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:44 +0300 Subject: [PATCH 551/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/qwen2=5Fmoe.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/qwen2_moe.md | 71 +++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/source/ar/model_doc/qwen2_moe.md diff --git a/docs/source/ar/model_doc/qwen2_moe.md b/docs/source/ar/model_doc/qwen2_moe.md new file mode 100644 index 00000000000000..0bfd5a07084f3f --- /dev/null +++ b/docs/source/ar/model_doc/qwen2_moe.md @@ -0,0 +1,71 @@ +# Qwen2MoE + +## نظرة عامة + +Qwen2MoE هي سلسلة النماذج الجديدة لنماذج اللغة الكبيرة من فريق Qwen. في السابق، أصدرنا سلسلة Qwen، بما في ذلك Qwen-72B وQwen-1.8B وQwen-VL وQwen-Audio، وغيرها. + +### تفاصيل النموذج + +Qwen2MoE هي سلسلة نماذج لغة تتضمن نماذج فك تشفير لغة بأحجام نماذج مختلفة. بالنسبة لكل حجم، نقوم بإطلاق نموذج اللغة الأساسي ونموذج الدردشة المتوافق. تمتاز Qwen2MoE بالخيارات المعمارية التالية: + +- تستند Qwen2MoE إلى بنية Transformer مع تنشيط SwiGLU، وتحيز QKV للاهتمام، واهتمام الاستعلام الجماعي، ومزيج من الاهتمام بنافذة الانزلاق والاهتمام الكامل، وما إلى ذلك. بالإضافة إلى ذلك، لدينا محسن محسن قابل للتكيف مع العديد من اللغات الطبيعية والأكواد. + +- تستخدم Qwen2MoE بنية Mixture of Experts (MoE)، حيث يتم إعادة تدوير النماذج من نماذج اللغة الكثيفة. على سبيل المثال، "Qwen1.5-MoE-A2.7B" معاد تدويره من "Qwen-1.8B". يحتوي على 14.3 مليار معامل في الإجمالي و2.7 مليار معامل نشط أثناء وقت التشغيل، بينما يحقق أداءًا مماثلًا لـ "Qwen1.5-7B"، باستخدام 25% فقط من موارد التدريب. + +للحصول على مزيد من التفاصيل، يرجى الرجوع إلى [منشور المدونة](https://qwenlm.github.io/blog/qwen-moe/). + +## نصائح الاستخدام + +يمكن العثور على "Qwen1.5-MoE-A2.7B" و"Qwen1.5-MoE-A2.7B-Chat" على [Huggingface Hub](https://huggingface.co/Qwen) + +فيما يلي، نوضح كيفية استخدام "Qwen1.5-MoE-A2.7B-Chat" للاستنتاج. لاحظ أننا استخدمنا تنسيق ChatML للحوار، وفي هذا العرض التوضيحي، نوضح كيفية الاستفادة من "apply_chat_template" لهذا الغرض. + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer +>>> device = "cuda" # الجهاز الذي سيتم تحميل النموذج عليه + +>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-MoE-A2.7B-Chat", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-MoE-A2.7B-Chat") + +>>> prompt = "قدم لي مقدمة موجزة عن نموذج اللغة الكبير." + +>>> messages = [{"role": "user", "content": prompt}] + +>>> text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) + +>>> model_inputs = tokenizer([text], return_tensors="pt").to(device) + +>>> generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=True) + +>>> generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)] + +>>> response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +``` + +## Qwen2MoeConfig + +[[autodoc]] Qwen2MoeConfig + +## Qwen2MoeModel + +[[autodoc]] Qwen2MoeModel + +- forward + +## Qwen2MoeForCausalLM + +[[autodoc]] Qwen2MoeForCausalLM + +- forward + +## Qwen2MoeForSequenceClassification + +[[autodoc]] Qwen2MoeForSequenceClassification + +- forward + +## Qwen2MoeForTokenClassification + +[[autodoc]] Qwen2MoeForTokenClassification + +- forward \ No newline at end of file From cefca63a201f175d6625ffc760a95574dba00eb5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:45 +0300 Subject: [PATCH 552/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/rag.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/rag.md | 86 +++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docs/source/ar/model_doc/rag.md diff --git a/docs/source/ar/model_doc/rag.md b/docs/source/ar/model_doc/rag.md new file mode 100644 index 00000000000000..ab7b34747eb0c0 --- /dev/null +++ b/docs/source/ar/model_doc/rag.md @@ -0,0 +1,86 @@ +# RAG + +## نظرة عامة + +تمزج نماذج "RAG" (generation-augmented retrieval) بين قوة الاسترجاع الكثيف المُدرب مسبقًا (DPR) ونماذج التسلسل إلى تسلسل. تسترد نماذج RAG المستندات، ثم تمررها إلى نموذج تسلسل إلى تسلسل، ثم تحدد الهوامش لإنتاج المخرجات. يتم تهيئة وحدات الاسترجاع والتسلسل إلى تسلسل من النماذج المُدربة مسبقًا، ويتم ضبطها بشكل مشترك، مما يسمح لكل من الاسترجاع والتوليد بالتكيف مع المهام النهائية. + +يستند هذا النموذج إلى الورقة البحثية "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" من تأليف Patrick Lewis وآخرون. يشرح الملخص المستخرج من الورقة الفكرة الأساسية: + +*أظهرت نماذج اللغة الكبيرة المُدربة مسبقًا قدرتها على تخزين المعرفة الوقائعية في معلماتها، وتحقيق نتائج متقدمة عند ضبطها الدقيق على مهام معالجة اللغة الطبيعية النهائية. ومع ذلك، لا تزال قدرتها على الوصول إلى المعرفة بدقة والتلاعب بها محدودة، وبالتالي، فإن أداءها في المهام الكثيفة المعرفة يتخلف عن البنى المعمارية المصممة لمهام محددة. بالإضافة إلى ذلك، تظل إشكالية توفير الأدلة لقراراتها وتحديث معرفتها العالمية مشكلات بحثية مفتوحة. يمكن للنماذج المُدربة مسبقًا مع آلية وصول قابلة للتفاضل إلى الذاكرة الصريحة غير المعلمية أن تتغلب على هذه المشكلة، ولكن حتى الآن، لم يتم دراسة سوى المهام النهائية الاستخراجية. نستكشف في هذه الورقة وصفة ضبط دقيق متعددة الأغراض لـ RAG (retrieval-augmented generation) - نماذج تجمع بين الذاكرة المعلمية وغير المعلمية المُدربة مسبقًا لتوليد اللغة. نقدم نماذج RAG حيث الذاكرة المعلمية هي نموذج تسلسل إلى تسلسل مُدرب مسبقًا والذاكرة غير المعلمية هي فهرس متجه كثيف من ويكيبيديا، يتم الوصول إليه باستخدام مسترد عصبي مُدرب مسبقًا. نقارن بين صيغتين لـ RAG، الأولى تعتمد على المقاطع المستردة نفسها عبر التسلسل المولد بالكامل، والأخرى يمكنها استخدام مقاطع مختلفة لكل رمز. نقوم بضبط نماذجنا دقيقًا وتقييمها على مجموعة واسعة من مهام NLP الكثيفة المعرفة، ونحدد الحالة الراهنة لثلاث مهام QA مفتوحة المجال، متفوقة على نماذج التسلسل إلى تسلسل المعلمية وبنى المعمارية المخصصة للاسترجاع والاستخراج. بالنسبة لمهام توليد اللغة، نجد أن نماذج RAG تولد لغة أكثر تحديدًا وتنوعًا وواقعية مقارنة بخط أساس التسلسل إلى تسلسل المعلمي فقط.* + +تمت المساهمة بهذا النموذج من قبل [ola13](https://huggingface.co/ola13). + +## نصائح الاستخدام + +تمزج نماذج "RAG" (generation-augmented retrieval) بين قوة الاسترجاع الكثيف المُدرب مسبقًا (DPR) ونماذج Seq2Seq. تسترد نماذج RAG المستندات، ثم تمررها إلى نموذج تسلسل إلى تسلسل، ثم تحدد الهوامش لإنتاج المخرجات. يتم تهيئة وحدات الاسترجاع والتسلسل إلى تسلسل من النماذج المُدربة مسبقًا، ويتم ضبطها بشكل مشترك، مما يسمح لكل من الاسترجاع والتوليد بالتكيف مع المهام النهائية. + +## RagConfig + +[[autodoc]] RagConfig + +## RagTokenizer + +[[autodoc]] RagTokenizer + +## المخرجات الخاصة بـ Rag + +[[autodoc]] models.rag.modeling_rag.RetrievAugLMMarginOutput + +[[autodoc]] models.rag.modeling_rag.RetrievAugLMOutput + +## RagRetriever + +[[autodoc]] RagRetriever + + + + +## RagModel + +[[autodoc]] RagModel + +- forward + +## RagSequenceForGeneration + +[[autodoc]] RagSequenceForGeneration + +- forward + +- generate + +## RagTokenForGeneration + +[[autodoc]] RagTokenForGeneration + +- forward + +- generate + + + + +## TFRagModel + +[[autodoc]] TFRagModel + +- call + +## TFRagSequenceForGeneration + +[[autodoc]] TFRagSequenceForGeneration + +- call + +- generate + +## TFRagTokenForGeneration + +[[autodoc]] TFRagTokenForGeneration + +- call + +- generate + + + \ No newline at end of file From e254ebaef52094664d6dd6cb735fd9796896d926 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:47 +0300 Subject: [PATCH 553/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/realm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/realm.md | 70 +++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/source/ar/model_doc/realm.md diff --git a/docs/source/ar/model_doc/realm.md b/docs/source/ar/model_doc/realm.md new file mode 100644 index 00000000000000..4a5c99152e0f7e --- /dev/null +++ b/docs/source/ar/model_doc/realm.md @@ -0,0 +1,70 @@ +# REALM + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولن نقبل أي طلبات سحب (Pull Requests) جديدة لتغيير شفرته البرمجية. إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + +## نظرة عامة + +تم اقتراح نموذج REALM في ورقة بحثية بعنوان [REALM: Retrieval-Augmented Language Model Pre-Training](https://arxiv.org/abs/2002.08909) بواسطة Kelvin Guu وKenton Lee وZora Tung وPanupong Pasupat وMing-Wei Chang. وهو نموذج لغة معزز بالاسترجاع يقوم أولاً باسترجاع المستندات من مجموعة بيانات نصية ثم يستخدم المستندات المستردة لمعالجة مهام الإجابة على الأسئلة. + +ملخص الورقة البحثية هو كما يلي: + +> "أظهرت عملية التدريب المسبق لنموذج اللغة أنها تلتقط قدرًا مذهلاً من المعرفة بالعالم، وهو أمر بالغ الأهمية لمهام معالجة اللغة الطبيعية مثل الإجابة على الأسئلة. ومع ذلك، يتم تخزين هذه المعرفة ضمنيًا في معلمات شبكة عصبية، مما يتطلب شبكات أكبر باستمرار لتغطية المزيد من الحقائق. وللتقاط المعرفة بطريقة أكثر قابلية للتطوير وأكثر قابلية للتفسير، نقوم بتعزيز التدريب المسبق لنموذج اللغة باستخدام مسترد معرفي خفي، والذي يسمح للنموذج باسترداد والاهتمام بالمستندات من مجموعة بيانات كبيرة مثل ويكيبيديا، والتي يتم استخدامها أثناء التدريب المسبق والضبط الدقيق والاستنتاج. ولأول مرة، نُظهر كيفية تدريب مسترد المعرفة هذا بطريقة غير خاضعة للإشراف، باستخدام نمذجة اللغة المقنعة كإشارة تعلم، والانتشار الخلفي من خلال خطوة الاسترجاع التي تأخذ في الاعتبار ملايين المستندات. ونحن نثبت فعالية التدريب المسبق لنموذج اللغة المعزز بالاسترجاع (REALM) من خلال الضبط الدقيق على المهمة الصعبة للإجابة على الأسئلة المفتوحة المجال. نقوم بالمقارنة مع أحدث الطرازات لطرق تخزين المعرفة الصريحة والضمنية على ثلاثة معايير شائعة للإجابة على الأسئلة المفتوحة، ونجد أننا نتفوق على جميع الطرق السابقة بهامش كبير (4-16% دقة مطلقة)، مع تقديم فوائد نوعية مثل القابلية للتفسير والقابلية للتطوير." + +تمت المساهمة بهذا النموذج من قبل [qqaatw](https://huggingface.co/qqaatw). يمكن العثور على الشفرة البرمجية الأصلية [هنا](https://github.com/google-research/language/tree/master/language/realm). + +## RealmConfig + +[[autodoc]] RealmConfig + +## RealmTokenizer + +[[autodoc]] RealmTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary +- batch_encode_candidates + +## RealmTokenizerFast + +[[autodoc]] RealmTokenizerFast + +- batch_encode_candidates + +## RealmRetriever + +[[autodoc]] RealmRetriever + +## RealmEmbedder + +[[autodoc]] RealmEmbedder + +- forward + +## RealmScorer + +[[autodoc]] RealmScorer + +- forward + +## RealmKnowledgeAugEncoder + +[[autodoc]] RealmKnowledgeAugEncoder + +- forward + +## RealmReader + +[[autodoc]] RealmReader + +- forward + +## RealmForOpenQA + +[[autodoc]] RealmForOpenQA + +- block_embedding_to +- forward \ No newline at end of file From 0802b04d0173c5ad90faac7ad67a694a90894190 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:49 +0300 Subject: [PATCH 554/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/recurrent=5Fgemma.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/recurrent_gemma.md | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/source/ar/model_doc/recurrent_gemma.md diff --git a/docs/source/ar/model_doc/recurrent_gemma.md b/docs/source/ar/model_doc/recurrent_gemma.md new file mode 100644 index 00000000000000..8de613748426f1 --- /dev/null +++ b/docs/source/ar/model_doc/recurrent_gemma.md @@ -0,0 +1,31 @@ +# RecurrentGemma + +## نظرة عامة + +اقترح فريق Griffin و RLHF و Gemma من Google نموذج Recurrent Gemma في [RecurrentGemma: Moving Past Transformers for Efficient Open Language Models](https://storage.googleapis.com/deepmind-media/gemma/recurrentgemma-report.pdf). + +مقدمة الورقة البحثية هي كما يلي: + +*نحن نقدم RecurrentGemma، وهو نموذج لغة مفتوح يستخدم هندسة Griffin الجديدة من Google. يجمع Griffin بين التكرارات الخطية والاهتمام المحلي لتحقيق أداء ممتاز في اللغة. لديه حالة ثابتة الحجم، مما يقلل من استخدام الذاكرة ويمكّن الاستدلال الفعال على التسلسلات الطويلة. نقدم نموذجًا مُدربًا مسبقًا مع 2 بليون معلمة غير مضمنة، ومتغيرًا مُعدلًا للتعليمات. يحقق كلا النموذجين أداءً مماثلاً لـ Gemma-2B على الرغم من تدريبهما على عدد أقل من الرموز*. + +نصائح: + +- يمكن تحويل نقاط التفتيش الأصلية باستخدام نص البرنامج النصي للتحويل [`src/transformers/models/recurrent_gemma/convert_recurrent_gemma_weights_to_hf.py`](https://github.com/huggingface/transformers/blob/main/src/transformers/models/recurrent_gemma/convert_recurrent_gemma_to_hf.py). + +تمت المساهمة بهذا النموذج من قبل [Arthur Zucker](https://huggingface.co/ArthurZ). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-deepmind/recurrentgemma). + +## RecurrentGemmaConfig + +[[autodoc]] RecurrentGemmaConfig + +## RecurrentGemmaModel + +[[autodoc]] RecurrentGemmaModel + +- forward + +## RecurrentGemmaForCausalLM + +[[autodoc]] RecurrentGemmaForCausalLM + +- forward \ No newline at end of file From af5ce163c79139d44778fe13a9eaaf78050984d5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:51 +0300 Subject: [PATCH 555/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/reformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/reformer.md | 132 +++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 docs/source/ar/model_doc/reformer.md diff --git a/docs/source/ar/model_doc/reformer.md b/docs/source/ar/model_doc/reformer.md new file mode 100644 index 00000000000000..a4db8f452f144c --- /dev/null +++ b/docs/source/ar/model_doc/reformer.md @@ -0,0 +1,132 @@ +# Reformer + +## نظرة عامة + +اقتُرح نموذج Reformer في الورقة البحثية [Reformer: The Efficient Transformer](https://arxiv.org/abs/2001.04451.pdf) من قبل نيكيتا كيتايف، ولوكاسز كايزر، وأنزلوم ليفسكايا. + +الملخص من الورقة البحثية هو كما يلي: + +*تحقق نماذج Transformer الكبيرة بشكل روتيني نتائج متقدمة في عدد من المهام، ولكن يمكن أن يكون تدريب هذه النماذج باهظ التكلفة، خاصة على التسلسلات الطويلة. نقدم تقنيتين لتحسين كفاءة محولات الطاقة. أولاً، نستبدل الاهتمام بمنتج النقاط باهتمام يستخدم التجزئة الحساسة للمحلية، مما يغير تعقيدها من O(L^2) إلى O(Llog(L))، حيث L هو طول التسلسل. علاوة على ذلك، نستخدم طبقات بقايا عكسية بدلاً من البقايا القياسية، والتي تسمح بتخزين التنشيطات مرة واحدة فقط في عملية التدريب بدلاً من N مرة، حيث N هو عدد الطبقات. يؤدي النموذج الناتج، وهو Reformer، إلى أداء مماثل لنماذج المحول أثناء كونه أكثر كفاءة في الذاكرة وأسرع بكثير على التسلسلات الطويلة.* + +تمت المساهمة بهذا النموذج من قبل [باتريكفونبلاتين](https://huggingface.co/patrickvonplaten). يمكن العثور على كود المؤلفين [هنا](https://github.com/google/trax/tree/master/trax/models/reformer). + +## نصائح الاستخدام + +- لا يعمل Reformer مع *torch.nn.DataParallel* بسبب وجود خلل في PyTorch، راجع [القضية #36035](https://github.com/pytorch/pytorch/issues/36035). +- استخدم ترميز الموضع المحوري (انظر أدناه لمزيد من التفاصيل). إنها آلية لتجنب وجود مصفوفة ترميز موضعي ضخمة (عندما يكون طول التسلسل كبيرًا جدًا) عن طريق تحليلها إلى مصفوفات أصغر. +- استبدل الاهتمام التقليدي بالاهتمام LSH (تجزئة محلية الحساسة) (انظر أدناه لمزيد من التفاصيل). إنها تقنية لتجنب حساب المنتج الكامل للاستعلام والمفتاح في طبقات الاهتمام. +- تجنب تخزين النتائج المتوسطة لكل طبقة باستخدام طبقات المحول العكسي للحصول عليها أثناء المرور الخلفي (يتم إرجاعها عن طريق طرح البقايا من إدخال الطبقة التالية) أو إعادة حسابها للنتائج داخل طبقة معينة (أقل كفاءة من تخزينها ولكنها توفر الذاكرة). +- احسب عمليات التغذية الأمامية على دفعات وليس على الدفعة بأكملها. + +### ترميزات الموضع المحوري + +تم تنفيذ ترميزات الموضع المحوري لأول مرة في مكتبة [trax](https://github.com/google/trax/blob/4d99ad4965bab1deba227539758d59f0df0fef48/trax/layers/research/position_encodings.py#L29) من Google وتم تطويرها بواسطة مؤلفي ورقة النموذج هذه. في النماذج التي تعالج تسلسلات الإدخال الطويلة جدًا، تخزن ترميزات الموضع التقليدية مصفوفة تضمين بحجم \\(d\\) وهو `config.hidden_size` لكل موضع \\(i, \ldots, n_s\\)، مع \\(n_s\\) كونها `config.max_embedding_size`. وهذا يعني أن وجود طول تسلسل قدره \\(n_s = 2^{19} \approx 0.5M\\) و`config.hidden_size` من \\(d = 2^{10} \approx 1000\\) سينتج عنه مصفوفة ترميز موضعي: + +$$X_{i,j}, \text{ with } i \in \left[1,\ldots, d\right] \text{ and } j \in \left[1,\ldots, n_s\right]$$ + +التي تحتوي بمفردها على أكثر من 500 مليون معلمة لتخزينها. تقوم الترميزات الموضعية المحورية بتحليل \\(X_{i,j}\\) إلى مصفوفتين: + +$$X^{1}_{i,j}, \text{ with } i \in \left[1,\ldots, d^1\right] \text{ and } j \in \left[1,\ldots, n_s^1\right]$$ + +و + +$$X^{2}_{i,j}, \text{ with } i \in \left[1,\ldots, d^2\right] \text{ and } j \in \left[1,\ldots, n_s^2\right]$$ + +مع: + +$$d = d^1 + d^2 \text{ and } n_s = n_s^1 \times n_s^2 .$$ + +لذلك، ينطبق ما يلي: + +$$X_{i,j} = \begin{cases} +X^{1}_{i, k}, & \text{if }\ i < d^1 \text{ with } k = j \mod n_s^1 \\ +X^{2}_{i - d^1, l}, & \text{if } i \ge d^1 \text{ with } l = \lfloor\frac{j}{n_s^1}\rfloor +\end{cases}$$ + +بديهيا، هذا يعني أن متجه ترميز الموضع \\(x_j \in \mathbb{R}^{d}\\) هو الآن تركيبة من متجهات الترميز المُعامل: \\(x^1_{k, l} + x^2_{l, k}\\)، حيث يتم تحليل بُعد `config.max_embedding_size` \\(j\\) إلى \\(k \text{ and } l\\). يضمن هذا التصميم أن كل متجه ترميز موضعي \\(x_j\\) يكون فريدًا. + +باستخدام المثال أعلاه مرة أخرى، يمكن لترميز الموضع المحوري مع \\(d^1 = 2^9, d^2 = 2^9, n_s^1 = 2^9, n_s^2 = 2^{10}\\) أن يقلل بشكل كبير عدد المعلمات من 500 000 000 إلى \\(2^{18} + 2^{19} \approx 780 000\\) معلمة، مما يعني انخفاض استخدام الذاكرة بنسبة 85%. + +في الممارسة العملية، يتم تعيين معلمة `config.axial_pos_embds_dim` إلى زوج \\((d^1, d^2)\\) يجب أن يكون مجموعها مساويًا لـ `config.hidden_size` و`config.axial_pos_shape` يتم تعيينه إلى زوج \\((n_s^1, n_s^2)\\) يجب أن يكون ناتجهما مساويًا لـ `config.max_embedding_size`، والذي يجب أن يكون أثناء التدريب مساويًا لـ *طول التسلسل* لـ `input_ids`. + +### الاهتمام الذاتي LSH + +في الاهتمام الذاتي LSH (تجزئة محلية الحساسة)، يتم ربط أوزان إسقاط المفتاح والاستعلام. لذلك، يتم أيضًا ربط متجهات تضمين الاستعلام والمفتاح. يستخدم الاهتمام الذاتي LSH آلية التجزئة الحساسة للمحلية المقترحة في [Practical and Optimal LSH for Angular Distance](https://arxiv.org/abs/1509.02897) لتعيين كل متجهات تضمين الاستعلام والمفتاح المرتبطة إلى واحدة من `config.num_buckets` الدلاء الممكنة. الفكرة هي أن متجهات تضمين الاستعلام والمفتاح الأكثر "تشابهًا" (من حيث *تشابه جيب التمام*) من المحتمل أن يتم تعيينها إلى نفس الدلو. + +يمكن تحسين دقة آلية LSH عن طريق زيادة `config.num_hashes` أو مباشرة وسيط `num_hashes` للدالة الأمامية بحيث يقترب إخراج الاهتمام الذاتي LSH بشكل أفضل من إخراج الاهتمام "العادي" الكامل. يتم بعد ذلك فرز الدلاء وتقسيمها إلى قطع متجهات الاستعلام والمفتاح لكل منها طول `config.lsh_chunk_length`. لكل قطعة، تحضر متجهات الاستعلام إلى متجهات المفاتيح الخاصة بها (المرتبطة بنفسها) وإلى متجهات المفاتيح الخاصة بـ `config.lsh_num_chunks_before` القطع المجاورة السابقة و`config.lsh_num_chunks_after` القطع المجاورة التالية. + +لمزيد من المعلومات، راجع [الورقة الأصلية](https://arxiv.org/abs/2001.04451) أو هذه [التدوينة الرائعة](https://www.pragmatic.ml/reformer-deep-dive/). + +لاحظ أن `config.num_buckets` يمكن أيضًا تحليلها إلى قائمة \\((n_{\text{buckets}}^1, n_{\text{buckets}}^2)\\). بهذه الطريقة، بدلاً من تعيين متجهات الاستعلام والمفتاح إلى واحدة من \\((1,\ldots, n_{\text{buckets}})\\)، يتم تعيينها إلى واحدة من \\((1-1,\ldots, n_{\text{buckets}}^1-1, \ldots, 1-n_{\text{buckets}}^2, \ldots, n_{\text{buckets}}^1-n_{\text{buckets}}^2)\\). هذا أمر بالغ الأهمية للتسلسلات الطويلة جدًا لتوفير الذاكرة. + +عند تدريب نموذج من الصفر، يُنصح بترك `config.num_buckets=None`، بحيث يتم حساب قيمة جيدة لـ `num_buckets` أثناء التنقل بناءً على طول التسلسل. سيتم بعد ذلك حفظ هذه القيمة تلقائيًا في التكوين ويجب إعادة استخدامها للاستدلال. + +باستخدام الاهتمام الذاتي LSH، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب المصفوفة الاستعلامية الرئيسية من \\(\mathcal{O}(n_s \times n_s)\\) إلى \\(\mathcal{O}(n_s \times \log(n_s))\\)، والذي يمثل عادةً عنق الزجاجة في الذاكرة والوقت في نموذج المحول، مع \\(n_s\\) كونها طول التسلسل. + +### الاهتمام الذاتي المحلي + +الاهتمام الذاتي المحلي هو في الأساس طبقة "عادية" للاهتمام الذاتي مع إسقاطات المفتاح والاستعلام والقيمة، ولكن يتم تقسيمها إلى قطع بحيث في كل قطعة من طول `config.local_chunk_length` تحضر متجهات الاستعلام فقط إلى متجهات المفاتيح الموجودة في قطعتها وإلى متجهات المفاتيح الخاصة بـ `config.local_num_chunks_before` القطع المجاورة السابقة و`config.local_num_chunks_after` القطع المجاورة التالية. + +باستخدام الاهتمام الذاتي المحلي، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب المصفوفة الاستعلامية الرئيسية من \\(\mathcal{O}(n_s \times n_s)\\) إلى \\(\mathcal{O}(n_s \times \log(n_s))\\)، والذي يمثل عادةً عنق الزجاجة في الذاكرة والوقت في نموذج المحول، مع \\(n_s\\) كونها طول التسلسل. + +### التدريب + +أثناء التدريب، يجب التأكد من أن طول التسلسل مضبوط على قيمة يمكن تقسيمها بواسطة المضاعف المشترك الأصغر لـ `config.lsh_chunk_length` و`config.local_chunk_length` وأن معلمات ترميزات الموضع المحوري مضبوطة بشكل صحيح كما هو موضح أعلاه. Reformer فعال للغاية في الذاكرة بحيث يمكن تدريب النموذج بسهولة على تسلسلات طويلة مثل 64000 رمز. + +بالنسبة للتدريب، يجب استخدام [`ReformerModelWithLMHead`] كما يلي: + +```python +input_ids = tokenizer.encode("This is a sentence from the training data", return_tensors="pt") +loss = model(input_ids, labels=input_ids)[0] +``` + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهام نمذجة اللغة المُقنعة](../tasks/masked_language_modeling) + +## ReformerConfig + +[[autodoc]] ReformerConfig + +## ReformerTokenizer + +[[autodoc]] ReformerTokenizer + +- save_vocabulary + +## ReformerTokenizerFast + +[[autodoc]] ReformerTokenizerFast + +## ReformerModel + +[[autodoc]] ReformerModel + +- forward + +## ReformerModelWithLMHead + +[[autodoc]] ReformerModelWithLMHead + +- forward + +## ReformerForMaskedLM + +[[autodoc]] ReformerForMaskedLM + +- forward + +## ReformerForSequenceClassification + +[[autodoc]] ReformerForSequenceClassification + +- forward + +## ReformerForQuestionAnswering + +[[autodoc]] ReformerForQuestionAnswering + +- forward \ No newline at end of file From 2dc7b41f02546dcaf79975c5aab600e13775456c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:53 +0300 Subject: [PATCH 556/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/regnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/regnet.md | 81 ++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/source/ar/model_doc/regnet.md diff --git a/docs/source/ar/model_doc/regnet.md b/docs/source/ar/model_doc/regnet.md new file mode 100644 index 00000000000000..9baf99d07772dc --- /dev/null +++ b/docs/source/ar/model_doc/regnet.md @@ -0,0 +1,81 @@ +# RegNet + +## نظرة عامة + +اقترح نموذج RegNet في ورقة "تصميم مساحات تصميم الشبكات" من قبل إيليا رادوسافوفيتش، وراج براتيك كوساراجو، وروس جيرشيك، وكايمينغ هي، وبيتر دولار. + +يصمم المؤلفون مساحات بحث لأداء البحث المعماري للشبكات العصبية. حيث يبدأون من مساحة بحث ذات أبعاد عالية ويقللون تدريجيًا من مساحة البحث من خلال التطبيق التجريبي للقيود بناءً على أفضل النماذج أداءً التي تم أخذ عينات منها بواسطة مساحة البحث الحالية. + +ملخص الورقة هو كما يلي: + +"في هذا العمل، نقدم نموذجًا جديدًا لتصميم الشبكات. هدفنا هو المساعدة في تقدم فهم تصميم الشبكة واستكشاف مبادئ التصميم التي تعمم عبر الإعدادات. بدلاً من التركيز على تصميم حالات شبكة فردية، نقوم بتصميم مساحات تصميم الشبكة التي تحدد بارامترات مجموعات الشبكات. العملية الشاملة مماثلة لتصميم الشبكات اليدوي الكلاسيكي، ولكنها مرفوعة إلى مستوى مساحة التصميم. باستخدام منهجيتنا، نستكشف الجانب الهيكلي لتصميم الشبكة ونصل إلى مساحة تصميم منخفضة الأبعاد تتكون من شبكات منتظمة وبسيطة نسميها RegNet. البصيرة الأساسية لمعلمة RegNet بسيطة بشكل مدهش: يمكن تفسير العروض والعمق للشبكات الجيدة بواسطة دالة خطية كمية. نقوم بتحليل مساحة تصميم RegNet ونصل إلى نتائج مثيرة للاهتمام لا تتطابق مع الممارسة الحالية لتصميم الشبكة. توفر مساحة تصميم RegNet شبكات بسيطة وسريعة تعمل بشكل جيد عبر مجموعة واسعة من أنظمة الفلوب. في ظل إعدادات التدريب المماثلة والعمليات العائمة المماثلة، تفوق نماذج RegNet نماذج EfficientNet الشهيرة بينما تكون أسرع 5 مرات على وحدات معالجة الرسومات." + +ساهم في هذا النموذج [فرانشيسكو](https://huggingface.co/Francesco). تمت المساهمة في نسخة TensorFlow من النموذج من قبل [sayakpaul](https://huggingface.co/sayakpaul) و [ariG23498](https://huggingface.co/ariG23498). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/pycls). + +النموذج الضخم 10B من "التعلم الذاتي للإشراف على الميزات المرئية في البرية" ، المدرب على مليار صورة من Instagram، متاح على [hub](https://huggingface.co/facebook/regnet-y-10b-seer). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام RegNet. + + + +- [`RegNetForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهام التصنيف الصوري](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## RegNetConfig + +[[autodoc]] RegNetConfig + + + + +## RegNetModel + +[[autodoc]] RegNetModel + +- forward + +## RegNetForImageClassification + +[[autodoc]] RegNetForImageClassification + +- forward + + + + +## TFRegNetModel + +[[autodoc]] TFRegNetModel + +- call + +## TFRegNetForImageClassification + +[[autodoc]] TFRegNetForImageClassification + +- call + + + + +## FlaxRegNetModel + +[[autodoc]] FlaxRegNetModel + +- __call__ + +## FlaxRegNetForImageClassification + +[[autodoc]] FlaxRegNetForImageClassification + +- __call__ + + + \ No newline at end of file From c220efe5ba435e2d51f435cc92376652b9941996 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:54 +0300 Subject: [PATCH 557/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/rembert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/rembert.md | 140 ++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 docs/source/ar/model_doc/rembert.md diff --git a/docs/source/ar/model_doc/rembert.md b/docs/source/ar/model_doc/rembert.md new file mode 100644 index 00000000000000..78bc76c3b98ed6 --- /dev/null +++ b/docs/source/ar/model_doc/rembert.md @@ -0,0 +1,140 @@ +# RemBERT + +## نظرة عامة +تم اقتراح نموذج RemBERT في ورقة "إعادة التفكير في اقتران التضمين في نماذج اللغة المُدربة مسبقًا" من قبل هيونغ وون تشونغ، وتيبو ألتويري، وهنري تساي، وميلفين جونسون، وسيباستيان رودر. + +ملخص الورقة البحثية هو كما يلي: + +*نعيد تقييم الممارسة القياسية لمشاركة الأوزان بين التضمينات المدخلة والمخرجة في نماذج اللغة المُدربة مسبقًا. نُظهر أن التضمينات المنفصلة توفر مرونة أكبر في النمذجة، مما يسمح لنا بتحسين كفاءة تخصيص المعلمات في التضمين المدخل للنماذج متعددة اللغات. من خلال إعادة تخصيص معلمات التضمين المدخل في طبقات المحول، نحقق أداءً أفضل بكثير في مهام فهم اللغة الطبيعية القياسية بنفس عدد المعلمات أثناء الضبط الدقيق. كما نُظهر أن تخصيص سعة إضافية للتضمين المخرج يوفر فوائد للنموذج تستمر خلال مرحلة الضبط الدقيق على الرغم من التخلص من التضمين المخرج بعد التدريب المسبق. ويُظهر تحليلنا أن التضمينات المخرجة الأكبر حجمًا تمنع الطبقات الأخيرة للنموذج من التخصص المفرط في مهمة التدريب المسبق وتشجع تمثيلات المحول على أن تكون أكثر عمومية وقابلية للنقل إلى مهام ولغات أخرى. ومن خلال الاستفادة من هذه النتائج، يمكننا تدريب نماذج تحقق أداءً قويًا في معيار XTREME دون زيادة عدد المعلمات في مرحلة الضبط الدقيق." + +## نصائح الاستخدام + +بالنسبة للضبط الدقيق، يمكن اعتبار RemBERT إصدارًا أكبر من mBERT مع تحليل لعامل تضمين الطبقة المشابه لـ ALBERT. لا يتم ربط التضمينات في التدريب المسبق، على عكس BERT، مما يمكّن من استخدام تضمينات مدخلة أصغر (محفوظة أثناء الضبط الدقيق) وتضمينات مخرجة أكبر (يتم التخلص منها في الضبط الدقيق). كما أن طريقة التمييز tokenization مشابهة لتلك المستخدمة في Albert بدلاً من BERT. + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف العلامات](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## RemBertConfig + +[[autodoc]] RemBertConfig + +## RemBertTokenizer + +[[autodoc]] RemBertTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## RemBertTokenizerFast + +[[autodoc]] RemBertTokenizerFast + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + + + + + +## RemBertModel + +[[autodoc]] RemBertModel + +- forward + +## RemBertForCausalLM + +[[autodoc]] RemBertForCausalLM + +- forward + +## RemBertForMaskedLM + +[[autodoc]] RemBertForMaskedLM + +- forward + +## RemBertForSequenceClassification + +[[autodoc]] RemBertForSequenceClassification + +- forward + +## RemBertForMultipleChoice + +[[autodoc]] RemBertForMultipleChoice + +- forward + +## RemBertForTokenClassification + +[[autodoc]] RemBertForTokenClassification + +- forward + +## RemBertForQuestionAnswering + +[[autodoc]] RemBertForQuestionAnswering + +- forward + + + + + +## TFRemBertModel + + +[[autodoc]] TFRemBertModel + +- call + +## TFRemBertForMaskedLM + +[[autodoc]] TFRemBertForMaskedLM + +- call + +## TFRemBertForCausalLM + +[[autodoc]] TFRemBertForCausalLM + +- call + +## TFRemBertForSequenceClassification + +[[autodoc]] TFRemBertForSequenceClassification + +- call + +## TFRemBertForMultipleChoice + +[[autodoc]] TFRemBertForMultipleChoice + +- call + +## TFRemBertForTokenClassification + +[[autodoc]] TFRemBertForTokenClassification + +- call + +## TFRemBertForQuestionAnswering + +[[autodoc]] TFRemBertForQuestionAnswering + +- call + + + + \ No newline at end of file From d73197f3a3fd6adec270d3acce44f402d8eed51b Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:56 +0300 Subject: [PATCH 558/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/resnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/resnet.md | 83 ++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/resnet.md diff --git a/docs/source/ar/model_doc/resnet.md b/docs/source/ar/model_doc/resnet.md new file mode 100644 index 00000000000000..2d217897438e28 --- /dev/null +++ b/docs/source/ar/model_doc/resnet.md @@ -0,0 +1,83 @@ +# ResNet + +## نظرة عامة + +تم اقتراح نموذج ResNet في ورقة "Deep Residual Learning for Image Recognition" بواسطة Kaiming He وآخرون. ويتبع تنفيذنا التغييرات الطفيفة التي أجرتها Nvidia، حيث نطبق `stride=2` للتصغير في طبقة التحويل '3x3' في عنق الزجاجة وليس في طبقة '1x1' الأولى. ويشار إلى هذا عادة باسم "ResNet v1.5". + +قدمت ResNet اتصالات باقية، والتي تسمح بتدريب الشبكات مع عدد غير مسبوق من الطبقات (حتى 1000). وفازت ResNet بمسابقة ILSVRC & COCO لعام 2015، والتي تعد معلمًا مهمًا في رؤية الكمبيوتر. + +وفيما يلي الملخص المستخرج من الورقة: + +*من الصعب تدريب الشبكات العصبية العميقة. نقدم إطارًا للتعلم الباقي لتخفيف تدريب الشبكات التي تكون أعمق بكثير من تلك المستخدمة سابقًا. نعيد صياغة الطبقات صراحةً على أنها دوال باقية التعلم مع الإشارة إلى مدخلات الطبقة، بدلاً من دالات غير مرجعية. نقدم أدلة تجريبية شاملة تُظهر أن هذه الشبكات الباقية أسهل في التحسين، ويمكنها اكتساب الدقة من العمق المتزايد بشكل كبير. وعلى مجموعة بيانات ImageNet، نقيم الشبكات الباقية بعمق يصل إلى 152 طبقة - أي 8 مرات أعمق من شبكات VGG ولكنها لا تزال ذات تعقيد أقل. حققت مجموعة من هذه الشبكات الباقية خطأ بنسبة 3.57% على مجموعة اختبار ImageNet. وفازت هذه النتيجة بالمركز الأول في مسابقة ILSVRC 2015 للتصنيف. كما نقدم تحليلًا لـ CIFAR-10 مع 100 و1000 طبقة.* + +*يعد عمق التمثيلات ذو أهمية مركزية للعديد من مهام التعرف البصري. وبسبب تمثيلاتنا العميقة للغاية فقط، نحصل على تحسن نسبي بنسبة 28% في مجموعة بيانات COCO للكشف عن الأشياء. الشبكات الباقية العميقة هي أساس مشاركاتنا في مسابقتي ILSVRC & COCO 2015، حيث فزنا أيضًا بالمراكز الأولى في مهام الكشف عن ImageNet وتحديد موقعها، والكشف عن COCO، والتجزئة COCO.* + +يوضح الشكل أدناه بنية ResNet. مأخوذة من [الورقة الأصلية](https://arxiv.org/abs/1512.03385). + + + +تمت المساهمة بهذا النموذج بواسطة [Francesco](https://huggingface.co/Francesco). تمت إضافة إصدار TensorFlow من هذا النموذج بواسطة [amyeroberts](https://huggingface.co/amyeroberts). يمكن العثور على الكود الأصلي [هنا](https://github.com/KaimingHe/deep-residual-networks). + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام ResNet. + + + +- [`ResNetForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. + +- راجع أيضًا: [دليل مهمة التصنيف الصوري](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## ResNetConfig + +[[autodoc]] ResNetConfig + + + + +## ResNetModel + +[[autodoc]] ResNetModel + +- forward + +## ResNetForImageClassification + +[[autodoc]] ResNetForImageClassification + +- forward + + + + +## TFResNetModel + +[[autodoc]] TFResNetModel + +- call + +## TFResNetForImageClassification + +[[autodoc]] TFResNetForImageClassification + +- call + + + + +## FlaxResNetModel + +[[autodoc]] FlaxResNetModel + +- __call__ + +## FlaxResNetForImageClassification + +[[autodoc]] FlaxResNetForImageClassification + +- __call__ + + + \ No newline at end of file From 889101c3ed9d7456b86ad8a6c2780769e63dd4d0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:28:58 +0300 Subject: [PATCH 559/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/retribert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/retribert.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 docs/source/ar/model_doc/retribert.md diff --git a/docs/source/ar/model_doc/retribert.md b/docs/source/ar/model_doc/retribert.md new file mode 100644 index 00000000000000..4f761ca48c176f --- /dev/null +++ b/docs/source/ar/model_doc/retribert.md @@ -0,0 +1,26 @@ +# RetriBERT + +**ملاحظة:** *هذا النموذج في وضع الصيانة فقط، لذلك لن نقبل أي طلبات سحب (Pull Requests) جديدة لتغيير شفرته. إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.30.0. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.30.0`.* + +## نظرة عامة +اقتُرح نموذج RetriBERT في التدوينة التالية: [Explain Anything Like I'm Five: A Model for Open Domain Long Form Question Answering](https://yjernite.github.io/lfqa.html) (شرح أي شيء كما لو كان لطفل في الخامسة: نموذج للإجابة على الأسئلة المفتوحة النطاق طويلة النص). RetriBERT هو نموذج صغير يستخدم إما مشفر BERT واحدًا أو زوجًا من مشفرات BERT مع إسقاط الأبعاد المنخفضة للفهرسة الدلالية الكثيفة للنص. + +ساهم بهذا النموذج [yjernite](https://huggingface.co/yjernite). يمكن العثور على الشفرة البرمجية لتدريب النموذج واستخدامه [هنا](https://github.com/huggingface/transformers/tree/main/examples/research-projects/distillation). + +## RetriBertConfig + +[[autodoc]] RetriBertConfig + +## RetriBertTokenizer + +[[autodoc]] RetriBertTokenizer + +## RetriBertTokenizerFast + +[[autodoc]] RetriBertTokenizerFast + +## RetriBertModel + +[[autodoc]] RetriBertModel + +- forward \ No newline at end of file From ae66fcd7b5eec65a45ed23e326944610bcdd5f41 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:00 +0300 Subject: [PATCH 560/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/roberta-prelayernorm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/roberta-prelayernorm.md | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 docs/source/ar/model_doc/roberta-prelayernorm.md diff --git a/docs/source/ar/model_doc/roberta-prelayernorm.md b/docs/source/ar/model_doc/roberta-prelayernorm.md new file mode 100644 index 00000000000000..ed45654d051cb0 --- /dev/null +++ b/docs/source/ar/model_doc/roberta-prelayernorm.md @@ -0,0 +1,174 @@ +# RoBERTa-PreLayerNorm + +## نظرة عامة + +تم اقتراح نموذج RoBERTa-PreLayerNorm في ورقة "fairseq: مجموعة أدوات سريعة وقابلة للتوسيع لوضع نماذج للتسلسل" بواسطة ميلي أوت، وسيرجي إيدونوف، وأليكسي بايفسكي، وأنجيلا فان، وسام جروس، وناثان نج، وديفيد رانجير، ومايكل أولي. + +وهو مطابق لاستخدام علم `--encoder-normalize-before` في [fairseq](https://fairseq.readthedocs.io/). + +هذا الملخص مأخوذ من الورقة: + +> fairseq هي مجموعة أدوات مفتوحة المصدر لوضع نماذج للتسلسل تتيح للباحثين والمطورين تدريب نماذج مخصصة للترجمة، والتلخيص، ونمذجة اللغة، وغيرها من مهام توليد النصوص. وتستند مجموعة الأدوات إلى PyTorch وتدعم التدريب الموزع عبر وحدات معالجة الرسومات (GPUs) والآلات. كما ندعم التدريب والاستنتاج عاليي الدقة المختلطة على وحدات معالجة الرسومات الحديثة. + +تمت المساهمة بهذا النموذج من قبل [andreasmaden](https://huggingface.co/andreasmadsen). يمكن العثور على الكود الأصلي [هنا](https://github.com/princeton-nlp/DinkyTrain). + +## نصائح الاستخدام + +- التنفيذ مطابق لـ [Roberta](roberta) باستثناء أنه بدلاً من استخدام _Add and Norm_، فإنه يستخدم _Norm and Add_. تشير _Add_ و _Norm_ إلى الإضافة وتطبيع الطبقة كما هو موصوف في ورقة "Attention Is All You Need". + +- هذا مطابق لاستخدام علم `--encoder-normalize-before` في [fairseq](https://fairseq.readthedocs.io/). + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## RobertaPreLayerNormConfig + +[[autodoc]] RobertaPreLayerNormConfig + + + + + +## RobertaPreLayerNormModel + +[[autodoc]] RobertaPreLayerNormModel + +- forward + +## RobertaPreLayerNormForCausalLM + +[[autodoc]] RobertaPreLayerNormForCausalLM + +- forward + +## RobertaPreLayerNormForMaskedLM + +[[autodoc]] RobertaPreLayerNormForMaskedLM + +- forward + +## RobertaPreLayerNormForSequenceClassification + +[[autodoc]] RobertaPreLayerNormForSequenceClassification + +- forward + +## RobertaPreLayerNormForMultipleChoice + +[[autodoc]] RobertaPreLayerNormForMultipleChoice + +- forward + +## RobertaPreLayerNormForTokenClassification + +[[autodoc]] RobertaPreLayerNormForTokenClassification + +- forward + +## RobertaPreLayerNormForQuestionAnswering + +[[autodoc]] RobertaPreLayerNormForQuestionAnswering + +- forward + + + + + +## TFRobertaPreLayerNormModel + +[[autodoc]] TFRobertaPreLayerNormModel + +- call + +## TFRobertaPreLayerNormForCausalLM + +[[autodoc]] TFRobertaPreLayerNormForCausalLM + +- call + +## TFRobertaPreLayerNormForMaskedLM + +[[autodoc]] TFRobertaPreLayerNormForMaskedLM + +- call + +## TFRobertaPreLayerNormForSequenceClassification + +[[autodoc]] TFRobertaPreLayerNormForSequenceClassification + +- call + +## TFRobertaPreLayerNormForMultipleChoice + +[[autodoc]] TFRobertaPreLayerNormForMultipleChoice + +- call + +## TFRobertaPreLayerNormForTokenClassification + +[[autodoc]] TFRobertaPreLayerNormForTokenClassification + +- call + +## TFRobertaPreLayerNormForQuestionAnswering + +[[autodoc]] TFRobertaPreLayerNormForQuestionAnswering + +- call + + + + + +## FlaxRobertaPreLayerNormModel + +[[autodoc]] FlaxRobertaPreLayerNormModel + +- __call__ + +## FlaxRobertaPreLayerNormForCausalLM + +[[autodoc]] FlaxRobertaPreLayerNormForCausalLM + +- __call__ + +## FlaxRobertaPreLayerNormForMaskedLM + +[[autodoc]] FlaxRobertaPreLayerNormForMaskedLM + +- __call__ + +## FlaxRobertaPreLayerNormForSequenceClassification + +[[autodoc]] FlaxRobertaPreLayerNormForSequenceClassification + +- __call__ + +## FlaxRobertaPreLayerNormForMultipleChoice + +[[autodoc]] FlaxRobertaPreLayerNormForMultipleChoice + +- __call__ + +## FlaxRobertaPreLayerNormForTokenClassification + +[[autodoc]] FlaxRobertaPreLayerNormForTokenClassification + +- __call__ + +## FlaxRobertaPreLayerNormForQuestionAnswering + +[[autodoc]] FlaxRobertaPreLayerNormForQuestionAnswering + +- __call__ + + + + \ No newline at end of file From fe4bcafa77ee40ba09055dea3bbcabe188c2f4c9 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:02 +0300 Subject: [PATCH 561/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/roberta.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/roberta.md | 259 ++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 docs/source/ar/model_doc/roberta.md diff --git a/docs/source/ar/model_doc/roberta.md b/docs/source/ar/model_doc/roberta.md new file mode 100644 index 00000000000000..22c5a683b2d639 --- /dev/null +++ b/docs/source/ar/model_doc/roberta.md @@ -0,0 +1,259 @@ +# RoBERTa + +## نظرة عامة + +اقترح نموذج RoBERTa في [RoBERTa: نهج التحسين القوي لتدريب BERT المسبق](https://arxiv.org/abs/1907.11692) بواسطة Yinhan Liu، [Myle Ott](https://huggingface.co/myleott)، Naman Goyal، Jingfei Du، Mandar Joshi، Danqi Chen، Omer Levy، Mike Lewis، Luke Zettlemoyer، Veselin Stoyanov. وهو مبني على نموذج BERT الذي أصدرته جوجل في عام 2018. + +يستند النموذج إلى BERT ويعدل المعلمات الأساسية، حيث يزيل هدف التدريب المسبق للجملة التالية ويتدرب على دفعات تعليمية أكبر ومعدلات تعلم أكبر. + +المقتطف من الورقة هو ما يلي: + +> أدى التدريب المسبق لنموذج اللغة إلى مكاسب أداء كبيرة ولكن المقارنة الدقيقة بين النهج المختلفة أمر صعب. التدريب مكلف من الناحية الحسابية، وغالباً ما يتم على مجموعات بيانات خاصة بأحجام مختلفة، وكما سنظهر، فإن خيارات المعلمة الأساسية لها تأثير كبير على النتائج النهائية. نقدم دراسة استنساخ لتدريب BERT المسبق (Devlin et al.، 2019) التي تقيس بعناية تأثير العديد من المعلمات الأساسية وحجم بيانات التدريب. نجد أن BERT كان مدربًا بشكل كبير، ويمكنه مطابقة أو تجاوز أداء كل نموذج تم نشره بعده. يحقق أفضل نموذج لدينا نتائج متقدمة على GLUE وRACE وSQuAD. تسلط هذه النتائج الضوء على أهمية خيارات التصميم التي تم التغاضي عنها سابقًا، وتثير أسئلة حول مصدر التحسينات المبلغ عنها مؤخرًا. نقوم بإصدار نماذجنا وشفرة المصدر الخاصة بنا. + +تمت المساهمة بهذا النموذج من قبل [julien-c](https://huggingface.co/julien-c). يمكن العثور على الكود الأصلي [هنا](https://github.com/pytorch/fairseq/tree/master/examples/roberta). + +## نصائح الاستخدام + +- هذا التنفيذ هو نفسه [`BertModel`] مع تعديل طفيف على embeddings بالإضافة إلى إعداد لنماذج Roberta المُدربة مسبقًا. + +- يستخدم RoBERTa نفس الهندسة المعمارية مثل BERT، ولكنه يستخدم Byte-level BPE كمحلل نحوي (نفس GPT-2) ويستخدم مخطط تدريب مختلف. + +- لا يحتوي RoBERTa على `token_type_ids`، لست بحاجة إلى الإشارة إلى الرمز الذي ينتمي إلى الجزء. فقط قم بفصل أجزاءك باستخدام رمز الفصل `tokenizer.sep_token` (أو ``) + +- نفس BERT مع حيل التدريب المسبق الأفضل: + +- التعتيم الديناميكي: يتم تعتيم الرموز بشكل مختلف في كل حقبة، في حين أن BERT يفعل ذلك مرة واحدة وإلى الأبد + +- معًا للوصول إلى 512 رمزًا (لذلك تكون الجمل بترتيب قد يمتد عبر عدة مستندات) + +- التدريب باستخدام دفعات أكبر + +- استخدام BPE مع البايت كوحدة فرعية وليس الأحرف (بسبب أحرف Unicode) + +- [CamemBERT](camembert) عبارة عن غلاف حول RoBERTa. راجع هذه الصفحة للحصول على أمثلة الاستخدام. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام RoBERTa. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- مدونة حول [البدء بتحليل المشاعر على تويتر](https://huggingface.co/blog/sentiment-analysis-twitter) باستخدام RoBERTa و [Inference API](https://huggingface.co/inference-api). + +- مدونة حول [تصنيف الآراء باستخدام Kili وHugging Face AutoTrain](https://huggingface.co/blog/opinion-classification-with-kili) باستخدام RoBERTa. + +- دفتر ملاحظات حول كيفية [ضبط نموذج RoBERTa للتحليل الدلالي](https://colab.research.google.com/github/DhavalTaunk08/NLP_scripts/blob/master/sentiment_analysis_using_roberta.ipynb). 🌎 + +- [`RobertaForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification.ipynb). + +- [`TFRobertaForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification-tf.ipynb). + +- [`FlaxRobertaForSequenceClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/text-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/text_classification_flax.ipynb). + +- دليل مهام التصنيف النصي [](../tasks/sequence_classification) + +- [`RobertaForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/token-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification.ipynb). + +- [`TFRobertaForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/token-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/token_classification-tf.ipynb). + +- [`FlaxRobertaForTokenClassification`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/token-classification). + +- فصل [تصنيف الرموز](https://huggingface.co/course/chapter7/2?fw=pt) من دورة 🤗 Hugging Face. + +- دليل مهام تصنيف الرموز [](../tasks/token_classification) + +- مدونة حول [كيفية تدريب نموذج لغة جديد من الصفر باستخدام Transformers وTokenizers](https://huggingface.co/blog/how-to-train) مع RoBERTa. + +- [`RobertaForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#robertabertdistilbert-and-masked-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). + +- [`TFRobertaForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_mlmpy) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). + +- [`FlaxRobertaForMaskedLM`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#masked-language-modeling) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/masked_language_modeling_flax.ipynb). + +- فصل [نمذجة اللغة المعتمة](https://huggingface.co/course/chapter7/3?fw=pt) من دورة 🤗 Hugging Face. + +- دليل مهام نمذجة اللغة المعتمة [](../tasks/masked_language_modeling) + +- مدونة حول [تسريع الاستدلال باستخدام Optimum وTransformers Pipelines](https://huggingface.co/blog/optimum-inference) مع RoBERTa للاستجواب. + +- [`RobertaForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering.ipynb). + +- [`TFRobertaForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/question-answering) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/question_answering-tf.ipynb). + +- [`FlaxRobertaForQuestionAnswering`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/flax/question-answering). + +- فصل [الاستجواب](https://huggingface.co/course/chapter7/7?fw=pt) من دورة 🤗 Hugging Face. + +- دليل مهام الاستجواب [](../tasks/question_answering) + +**الاختيار من متعدد** + +- [`RobertaForMultipleChoice`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/multiple-choice) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice.ipynb). + +- [`TFRobertaForMultipleChoice`] مدعوم بواسطة [مثال النص البرمجي](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/multiple-choice) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/multiple_choice-tf.ipynb). + +- دليل مهام الاختيار من متعدد [](../tasks/multiple_choice) + +## RobertaConfig + +[[autodoc]] RobertaConfig + +## RobertaTokenizer + +[[autodoc]] RobertaTokenizer + +- build_inputs_with_special_tokens + +- get_special_tokens_mask + +- create_token_type_ids_from_sequences + +- save_vocabulary + +## RobertaTokenizerFast + +[[autodoc]] RobertaTokenizerFast + +- build_inputs_with_special_tokens + + + + + +## RobertaModel + +[[autodoc]] RobertaModel + +- forward + +## RobertaForCausalLM + +[[autodoc]] RobertaForCausalLM + +- forward + +## RobertaForMaskedLM + +[[autodoc]] RobertaForMaskedLM + +- forward + +## RobertaForSequenceClassification + +[[autodoc]] RobertaForSequenceClassification + +- forward + +## RobertaForMultipleChoice + +[[autodoc]] RobertaForMultipleChoice + +- forward + +## RobertaForTokenClassification + +[[autodoc]] RobertaForTokenClassification + +- forward + +## RobertaForQuestionAnswering + +[[autodoc]] RobertaForQuestionAnswering + +- forward + + + + + +## TFRobertaModel + +[[autodoc]] TFRobertaModel + +- call + +## TFRobertaForCausalLM + +[[autodoc]] TFRobertaForCausalLM + +- call + +## TFRobertaForMaskedLM + +[[autodoc]] TFRobertaForMaskedLM + +- call + +## TFRobertaForSequenceClassification + + +[[autodoc]] TFRobertaForSequenceClassification + + +- call + +## TFRobertaForMultipleChoice + +[[autodoc]] TFRobertaForMultipleChoice + +- call + +## TFRobertaForTokenClassification + +[[autodoc]] TFRobertaForTokenClassification + +- call + +## TFRobertaForQuestionAnswering + +[[autodoc]] TFRobertaForQuestionAnswering + +- call + + + + + +## FlaxRobertaModel + +[[autodoc]] FlaxRobertaModel + +- __call__ + +## FlaxRobertaForCausalLM + +[[autodoc]] FlaxRobertaForCausalLM + +- __call__ + +## FlaxRobertaForMaskedLM + +[[autodoc]] FlaxRobertaForMaskedLM + +- __call__ + +## FlaxRobertaForSequenceClassification + +[[autodoc]] FlaxRobertaForSequenceClassification + +- __call__ + +## FlaxRobertaForMultipleChoice + +[[autodoc]] FlaxRobertaForMultipleChoice + +- __call__ + +## FlaxRobertaForTokenClassification + +[[autodoc]] FlaxRobertaForTokenClassification + +- __call__ + +## FlaxRobertaForQuestionAnswering + +[[autodoc]] FlaxRobertaForQuestionAnswering + +- __call__ + + + + \ No newline at end of file From e4682ee54962c576972cc7f88f228a105c576d96 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:03 +0300 Subject: [PATCH 562/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/roc=5Fbert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/roc_bert.md | 83 ++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/roc_bert.md diff --git a/docs/source/ar/model_doc/roc_bert.md b/docs/source/ar/model_doc/roc_bert.md new file mode 100644 index 00000000000000..fe66cb2f37feca --- /dev/null +++ b/docs/source/ar/model_doc/roc_bert.md @@ -0,0 +1,83 @@ +# RoCBert + +## نظرة عامة + +اقترح نموذج RoCBert في "RoCBert: Robust Chinese Bert with Multimodal Contrastive Pretraining" بواسطة HuiSu و WeiweiShi و XiaoyuShen و XiaoZhou و TuoJi و JiaruiFang و JieZhou. وهو نموذج لغة صيني مسبق التدريب يتميز بالمتانة في مواجهة مختلف أشكال الهجمات الضارة. + +فيما يلي الملخص المستخرج من الورقة البحثية: + +*حققت نماذج اللغة كبيرة الحجم والمدربة مسبقًا نتائج متميزة في مهام معالجة اللغة الطبيعية. ومع ذلك، فقد ثبت أنها عرضة للهجمات الضارة، خاصة بالنسبة للغات المقطعية مثل الصينية. في هذا العمل، نقترح ROCBERT: نموذج Bert صيني مسبق التدريب يتميز بالمتانة في مواجهة مختلف أشكال الهجمات الضارة مثل اضطراب الكلمات، والمترادفات، والأخطاء الإملائية، وما إلى ذلك. تم تدريب النموذج مسبقًا باستخدام هدف التعلم التمييزي الذي يزيد من اتساق التصنيف تحت أمثلة ضارة مختلفة تم توليفها. يأخذ النموذج كمدخلات معلومات متعددة الوسائط تشمل السمات الدلالية والمقاطع البصرية. ونحن نثبت أهمية جميع هذه الميزات لمتانة النموذج، حيث يمكن تنفيذ الهجوم بجميع الأشكال الثلاثة. يفوق أداء ROCBERT الخطوط الأساسية القوية في 5 مهام فهم اللغة الصينية في ظل ثلاثة خوارزميات ضارة دون التضحية بالأداء على مجموعة الاختبار النظيفة. كما أنه يحقق أفضل أداء في مهمة اكتشاف المحتوى الضار في ظل الهجمات التي يصنعها الإنسان.* + +تمت المساهمة بهذا النموذج من قبل [weiweishi](https://huggingface.co/weiweishi). + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهام تصنيف الرموز](../tasks/token_classification) +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهام النمذجة اللغوية السببية](../tasks/language_modeling) +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## RoCBertConfig + +[[autodoc]] RoCBertConfig + +- all + +## RoCBertTokenizer + +[[autodoc]] RoCBertTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## RoCBertModel + +[[autodoc]] RoCBertModel + +- forward + +## RoCBertForPreTraining + +[[autodoc]] RoCBertForPreTraining + +- forward + +## RoCBertForCausalLM + +[[autodoc]] RoCBertForCausalLM + +- forward + +## RoCBertForMaskedLM + +[[autodoc]] RoCBertForMaskedLM + +- forward + +## RoCBertForSequenceClassification + +[[autodoc]] transformers.RoCBertForSequenceClassification + +- forward + +## RoCBertForMultipleChoice + +[[autodoc]] transformers.RoCBertForMultipleChoice + +- forward + +## RoCBertForTokenClassification + +[[autodoc]] transformers.RoCBertForTokenClassification + +- forward + +## RoCBertForQuestionAnswering + +[[autodoc]] RoCBertForQuestionAnswering + +- forward \ No newline at end of file From f87233c567b635bf1cf47318e9618b68d919200e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:05 +0300 Subject: [PATCH 563/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/roformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/roformer.md | 173 +++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 docs/source/ar/model_doc/roformer.md diff --git a/docs/source/ar/model_doc/roformer.md b/docs/source/ar/model_doc/roformer.md new file mode 100644 index 00000000000000..8a8f8c9c0259e6 --- /dev/null +++ b/docs/source/ar/model_doc/roformer.md @@ -0,0 +1,173 @@ +# RoFormer + +## نظرة عامة +تم اقتراح نموذج RoFormer في [RoFormer: Enhanced Transformer with Rotary Position Embedding](https://arxiv.org/pdf/2104.09864v1.pdf) بواسطة Jianlin Su و Yu Lu و Shengfeng Pan و Bo Wen و Yunfeng Liu. + +مقدمة الورقة هي التالية: + +*يوفر الترميز الموضعي في بنية المحول إشرافًا لنموذج الاعتماد بين العناصر في مواضع مختلفة في التسلسل. نحن نبحث في طرق مختلفة لترميز المعلومات الموضعية في نماذج اللغة المستندة إلى المحول ونقترح تنفيذًا جديدًا يسمى Rotary Position Embedding (RoPE). يقوم RoPE المقترح بترميز المعلومات الموضعية المطلقة باستخدام مصفوفة دوران ويتضمن بشكل طبيعي اعتماد الموضع النسبي الصريح في صيغة الاهتمام الذاتي. ومن الجدير بالذكر أن RoPE يأتي مع خصائص قيمة مثل مرونة التوسع إلى أي أطوال تسلسل، وتناقص الاعتماد بين الرموز مع زيادة المسافات النسبية، والقدرة على تجهيز الاهتمام الذاتي الخطي مع ترميز الموضع النسبي. ونتيجة لذلك، يحقق المحول المعزز مع ترميز الموضع الدوار، أو RoFormer، أداءً متفوقًا في المهام التي تحتوي على نصوص طويلة. نحن نقدم التحليل النظري إلى جانب بعض نتائج التجارب الأولية على البيانات الصينية. سيتم قريبًا تحديث التجربة الجارية لبيانات المعيار باللغة الإنجليزية.* + +تمت المساهمة بهذا النموذج من قبل [junnyu](https://huggingface.co/junnyu). يمكن العثور على الكود الأصلي [هنا](https://github.com/ZhuiyiTechnology/roformer). + +## نصائح الاستخدام +RoFormer هو نموذج ترميز ذاتي على غرار BERT مع ترميزات موضعية دوارة. وقد أظهرت الترميزات الموضعية الدوارة تحسنًا في الأداء في مهام التصنيف التي تحتوي على نصوص طويلة. + +## الموارد +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة تصنيف الرموز](../tasks/token_classification) +- [دليل مهمة الإجابة على الأسئلة](../tasks/question_answering) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) +- [دليل مهمة نمذجة اللغة المقنعة](../tasks/masked_language_modeling) +- [دليل المهمة متعددة الخيارات](../tasks/multiple_choice) + +## RoFormerConfig + +[[autodoc]] RoFormerConfig + +## RoFormerTokenizer + +[[autodoc]] RoFormerTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## RoFormerTokenizerFast + +[[autodoc]] RoFormerTokenizerFast + +- build_inputs_with_special_tokens + + + + +## RoFormerModel + +[[autodoc]] RoFormerModel + +- forward + +## RoFormerForCausalLM + +[[autodoc]] RoFormerForCausalLM + +- forward + +## RoFormerForMaskedLM + +[[autodoc]] RoFormerForMaskedLM + +- forward + +## RoFormerForSequenceClassification + +[[autodoc]] RoFormerForSequenceClassification + +- forward + +## RoFormerForMultipleChoice + +[[autodoc]] RoFormerForMultipleChoice + +- forward + +## RoFormerForTokenClassification + +[[autodoc]] RoFormerForTokenClassification + +- forward + +## RoFormerForQuestionAnswering + +[[autodoc]] RoFormerForQuestionAnswering + +- forward + + + + +## TFRoFormerModel + +[[autodoc]] TFRoFormerModel + +- call + +## TFRoFormerForMaskedLM + +[[autodoc]] TFRoFormerForMaskedLM + +- call + +## TFRoFormerForCausalLM + +[[autodoc]] TFRoFormerForCausalLM + +- call + +## TFRoFormerForSequenceClassification + +[[autodoc]] TFRoFormerForSequenceClassification + +- call + +## TFRoFormerForMultipleChoice + + +[[autodoc]] TFRoFormerForMultipleChoice + +- call + +## TFRoFormerForTokenClassification + +[[autodoc]] TFRoFormerForTokenClassification + +- call + +## TFRoFormerForQuestionAnswering + +[[autodoc]] TFRoFormerForQuestionAnswering + +- call + + + + +## FlaxRoFormerModel + +[[autodoc]] FlaxRoFormerModel + +- __call__ + +## FlaxRoFormerForMaskedLM + +[[autodoc]] FlaxRoFormerForMaskedLM + +- __call__ + +## FlaxRoFormerForSequenceClassification + +[[autodoc]] FlaxRoFormerForSequenceClassification + +- __call__ + +## FlaxRoFormerForMultipleChoice + +[[autodoc]] FlaxRoFormerForMultipleChoice + +- __call__ + +## FlaxRoFormerForTokenClassification + +[[autodoc]] FlaxRoFormerForTokenClassification + +- __call__ + +## FlaxRoFormerForQuestionAnswering + +[[autodoc]] FlaxRoFormerForQuestionAnswering + +- __call__ + + + \ No newline at end of file From 83b74ac002a8dea930b50b225f0415a65b3845bf Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:07 +0300 Subject: [PATCH 564/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/rwkv.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/rwkv.md | 131 +++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 docs/source/ar/model_doc/rwkv.md diff --git a/docs/source/ar/model_doc/rwkv.md b/docs/source/ar/model_doc/rwkv.md new file mode 100644 index 00000000000000..309e30ddf104e6 --- /dev/null +++ b/docs/source/ar/model_doc/rwkv.md @@ -0,0 +1,131 @@ +# RWKV + +## نظرة عامة +تم اقتراح نموذج RWKV في [هذا المستودع](https://github.com/BlinkDL/RWKV-LM) +يقترح تعديلاً طفيفًا على اهتمام المحول التقليدي لجعله خطيًا. بهذه الطريقة، يمكن استخدام النموذج كشبكة متكررة: تمرير الإدخالات لختم الوقت 0 وختم الوقت 1 معًا هو نفسه كتمرير الإدخالات في ختم الوقت 0، ثم الإدخالات في ختم الوقت 1 جنبًا إلى جنب مع حالة ختم الوقت 0 (راجع المثال أدناه). +يمكن أن يكون هذا أكثر كفاءة من المحول العادي ويمكنه التعامل مع الجملة بأي طول (حتى إذا استخدم النموذج طول سياق ثابتًا للتدريب). +تمت المساهمة بهذا النموذج من قبل [sgugger](https://huggingface.co/sgugger). +يمكن العثور على الكود الأصلي [هنا](https://github.com/BlinkDL/RWKV-LM). + +## مثال الاستخدام + +```py +import torch +from transformers import AutoTokenizer, RwkvConfig, RwkvModel + +model = RwkvModel.from_pretrained("sgugger/rwkv-430M-pile") +tokenizer = AutoTokenizer.from_pretrained("sgugger/rwkv-430M-pile") + +inputs = tokenizer("This is an example.", return_tensors="pt") +# قم بإدخال كل شيء إلى النموذج +outputs = model(inputs["input_ids"]) +output_whole = outputs.last_hidden_state + +outputs = model(inputs["input_ids"][:, :2]) +output_one = outputs.last_hidden_state + +# باستخدام الحالة المحسوبة على الإدخالات الأولى، سنحصل على نفس الإخراج +outputs = model(inputs["input_ids"][:, 2:], state=outputs.state) +output_two = outputs.last_hidden_state + +torch.allclose(torch.cat([output_one, output_two], dim=1), output_whole, atol=1e-5) +``` + +إذا كنت تريد التأكد من توقف النموذج عن التوليد عند اكتشاف " \n\n"، نوصي باستخدام معايير التوقف التالية: + +```python +from transformers import StoppingCriteria + +class RwkvStoppingCriteria(StoppingCriteria): + def __init__(self, eos_sequence = [187,187], eos_token_id = 537): + self.eos_sequence = eos_sequence + self.eos_token_id = eos_token_id + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: + last_2_ids = input_ids[:,-2:].tolist() + return self.eos_sequence in last_2_ids + +output = model.generate(inputs["input_ids"], max_new_tokens=64, stopping_criteria = [RwkvStoppingCriteria()]) +``` + +## RwkvConfig + +[[autodoc]] RwkvConfig + +## RwkvModel + +[[autodoc]] RwkvModel + +- forward + +## RwkvLMHeadModel + +[[autodoc]] RwkvForCausalLM + +- forward + +## اهتمام RWKV والصيغ المتكررة + +في محول ذاتي الانحدار تقليدي، يتم كتابة الاهتمام على النحو التالي: + +$$O = \hbox{softmax}(QK^{T} / \sqrt{d}) V$$ + +مع Q و K و V مصفوفات من الشكل 'seq_len x hidden_size' تسمى query و key و value (في الواقع، هي مصفوفات أكبر مع بعد دفعة وبعد رأس اهتمام، ولكننا مهتمون فقط بالأخيرين، حيث يتم أخذ حاصل الضرب للمصفوفة، لذلك من أجل البساطة، نعتبر هذين فقط). ثم يكون للمنتج QK^T شكل 'seq_len x seq_len' ويمكننا أخذ حاصل الضرب للمصفوفة مع V للحصول على الإخراج O بنفس الشكل مثل الآخرين. + +يؤدي استبدال softmax بقيمته إلى ما يلي: + +$$O_{i} = \frac{\sum_{j=1}^{i} e^{Q_{i} K_{j}^{T} / \sqrt{d}} V_{j}}{\sum_{j=1}^{i} e^{Q_{i} K_{j}^{T} / \sqrt{d}}}$$ + +لاحظ أن الإدخالات في QK^T المقابلة لـ j > i يتم قناعتها (يتوقف الجمع عند j) لأن الاهتمام غير مسموح له بالنظر إلى الرموز المستقبلية (فقط الماضي). + +بالمقارنة، يتم إعطاء اهتمام RWKV بواسطة: + +$$O_{i} = \sigma(R_{i}) \frac{\sum_{j=1}^{i} e^{W_{i-j} + K_{j}} V_{j}}{\sum_{j=1}^{i} e^{W_{i-j} + K_{j}}}$$ + +حيث R هي مصفوفة جديدة تسمى receptance من قبل المؤلف، K و V لا تزال المفتاح والقيمة (σ هنا هي دالة sigmoid). W هو متجه جديد يمثل موضع الرمز ويتم إعطاؤه بواسطة: + +$$W_{0} = u \hbox{ and } W_{k} = (k-1)w \hbox{ for } k \geq 1$$ + +مع u و w معلمات قابلة للتعلم تسمى في الكود 'time_first' و 'time_decay' على التوالي. يمكن التعبير عن البسط والمقام كليهما بشكل متكرر. من خلال تسميتهما N_i و D_i لدينا: + +$$N_{i} = e^{u + K_{i}} V_{i} + \hat{N}_{i} \hbox{ where } \hat{N}_{i} = e^{K_{i-1}} V_{i-1} + e^{w + K_{i-2}} V_{i-2} \cdots + e^{(i-2)w + K_{1}} V_{1}$$ + +لذا فإن N_i (تسمى 'numerator_state' في الكود) تفي بما يلي: + +$$\hat{N}_{0} = 0 \hbox{ and } \hat{N}_{j+1} = e^{K_{j}} V_{j} + e^{w} \hat{N}_{j}$$ + +و: + +$$D_{i} = e^{u + K_{i}} + \hat{D}_{i} \hbox{ where } \hat{D}_{i} = e^{K_{i-1}} + e^{w + K_{i-2}} \cdots + e^{(i-2)w + K_{1}}$$ + +لذا فإن D_i (تسمى 'denominator_state' في الكود) تفي بما يلي: + +$$\hat{D}_{0} = 0 \hbox{ and } \hat{D}_{j+1} = e^{K_{j}} + e^{w} \hat{D}_{j}$$ + +الصيغ المتكررة الفعلية المستخدمة أكثر تعقيدًا بقليل، حيث لا نريد، من أجل الاستقرار العددي، حساب الأسس الأسية للأرقام الكبيرة. عادةً لا يتم حساب softmax كما هو، ولكن يتم تقسيم الأس الأساسي لأكبر مصطلح على البسط والمقام: + +$$\frac{e^{x_{i}}}{\sum_{j=1}^{n} e^{x_{j}}} = \frac{e^{x_{i} - M}}{\sum_{j=1}^{n} e^{x_{j} - M}}$$ + +مع M الحد الأقصى لجميع x_j. لذا، بالإضافة إلى حفظ حالة البسط (N_hat) وحالة المقام (D_hat)، نقوم أيضًا بتتبع الحد الأقصى لجميع المصطلحات المواجهة في الأسس الأسية. لذا نستخدم في الواقع: + +$$\tilde{N}_{i} = e^{-M_{i}} \hat{N}_{i} \hbox{ and } \tilde{D}_{i} = e^{-M_{i}} \hat{D}_{i}$$ + +محددة بواسطة الصيغ المتكررة التالية: + +$$\tilde{N}_{0} = 0 \hbox{ and } \tilde{N}_{j+1} = e^{K_{j} - q} V_{j} + e^{w + M_{j} - q} \tilde{N}_{j} \hbox{ where } q = \max(K_{j}, w + M_{j})$$ + +و: + +$$\tilde{D}_{0} = 0 \hbox{ and } \tilde{D}_{j+1} = e^{K_{j} - q} + e^{w + M_{j} - q} \tilde{D}_{j} \hbox{ where } q = \max(K_{j}, w + M_{j})$$ + +و M_ {j + 1} = q. مع هذه، يمكننا بعد ذلك حساب: + +$$N_{i} = e^{u + K_{i} - q} V_{i} + e^{M_{i}} \tilde{N}_{i} \hbox{ where } q = \max(u + K_{i}, M_{i})$$ + +و: + +$$D_{i} = e^{u + K_{i} - q} + e^{M_{i}} \tilde{D}_{i} \hbox{ where } q = \max(u + K_{i}, M_{i})$$ + +الذي يعطينا أخيرًا: + +$$O_{i} = \sigma(R_{i}) \frac{N_{i}}{D_{i}}$$ \ No newline at end of file From 69ceffbf2bfa95b7878947ec87db5af640b27e16 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:09 +0300 Subject: [PATCH 565/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/sam.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/sam.md | 139 ++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 docs/source/ar/model_doc/sam.md diff --git a/docs/source/ar/model_doc/sam.md b/docs/source/ar/model_doc/sam.md new file mode 100644 index 00000000000000..e7bae2fba5532d --- /dev/null +++ b/docs/source/ar/model_doc/sam.md @@ -0,0 +1,139 @@ +# SAM + +## نظرة عامة + +اقترح SAM (Segment Anything Model) في [Segment Anything](https://arxiv.org/pdf/2304.02643v1.pdf) بواسطة Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alex Berg, Wan-Yen Lo, Piotr Dollar, Ross Girshick. + +يمكن استخدام النموذج للتنبؤ بقناع التجزئة لأي كائن يهمه الأمر مع إعطاء صورة إدخال. + +![مثال الصورة](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/sam-output.png) + +الملخص من الورقة هو ما يلي: + +*نقدم مشروع Segment Anything (SA): مهمة جديدة ونموذج ومجموعة بيانات لتجزئة الصور. باستخدام نموذجنا الفعال في حلقة جمع البيانات، قمنا ببناء أكبر مجموعة بيانات للتجزئة حتى الآن (بفارق كبير)، مع أكثر من 1 مليار قناع على 11 مليون صورة مرخصة وتحترم الخصوصية. تم تصميم النموذج وتدريبه ليكون قابلاً للتشغيل، بحيث يمكنه النقل بدون تدريب إلى توزيعات الصور الجديدة والمهام الجديدة. نقيم قدراته على العديد من المهام ونجد أن أداءه بدون تدريب مثير للإعجاب - غالبًا ما يكون تنافسيًا أو حتى متفوقًا على النتائج الخاضعة للإشراف الكامل السابقة. نحن نطلق Segment Anything Model (SAM) ومجموعة البيانات المقابلة (SA-1B) التي تحتوي على 1 مليار قناع و11 مليون صورة على [https://segment-anything.com](https://segment-anything.com) لتعزيز البحث في نماذج الأساس للرؤية الحاسوبية.* + +نصائح: + +- يتنبأ النموذج بقناع ثنائي يشير إلى وجود كائن الاهتمام أو عدمه في الصورة. +- يتنبأ النموذج بنتائج أفضل بكثير إذا تم توفير نقاط ثنائية الأبعاد و/أو صناديق حد لتحديد الإدخال +- يمكنك مطالبة نقاط متعددة لنفس الصورة، والتنبؤ بقناع واحد. +- لا يتم دعم ضبط دقة النموذج بعد +- وفقًا للورقة، يجب أيضًا دعم الإدخال النصي. ومع ذلك، في وقت كتابة هذا التقرير، يبدو أنه غير مدعوم وفقًا لـ [المستودع الرسمي](https://github.com/facebookresearch/segment-anything/issues/4#issuecomment-1497626844). + +تمت المساهمة بهذا النموذج من قبل [ybelkada](https://huggingface.co/ybelkada) و [ArthurZ](https://huggingface.co/ArthurZ). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/segment-anything). + +فيما يلي مثال على كيفية تشغيل توليد القناع مع إعطاء صورة ونقطة ثنائية الأبعاد: + +```python +import torch +from PIL import Image +import requests +from transformers import SamModel, SamProcessor + +device = "cuda" if torch.cuda.is_available() else "cpu" +model = SamModel.from_pretrained("facebook/sam-vit-huge").to(device) +processor = SamProcessor.from_pretrained("facebook/sam-vit-huge") + +img_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png" +raw_image = Image.open(requests.get(img_url, stream=True).raw).convert("RGB") +input_points = [[[450, 600]]] # موقع ثنائي الأبعاد لنافذة في الصورة + +inputs = processor(raw_image, input_points=input_points, return_tensors="pt").to(device) +with torch.no_grad(): + outputs = model(**inputs) + +masks = processor.image_processor.post_process_masks( + outputs.pred_masks.cpu(), inputs["original_sizes"].cpu(), inputs["reshaped_input_sizes"].cpu() +) +scores = outputs.iou_scores +``` + +يمكنك أيضًا معالجة أقنعتك الخاصة جنبًا إلى جنب مع صور الإدخال في المعالج لتمريرها إلى النموذج. + +```python +import torch +from PIL import Image +import requests +from transformers import SamModel, SamProcessor + +device = "cuda" if torch.cuda.is_available() else "cpu" +model = SamModel.from_pretrained("facebook/sam-vit-huge").to(device) +processor = SamProcessor.from_pretrained("facebook/sam-vit-huge") + +img_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png" +raw_image = Image.open(requests.get(img_url, stream=True).raw).convert("RGB") +mask_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png" +segmentation_map = Image.open(requests.get(mask_url, stream=True).raw).convert("1") +input_points = [[[450, 600]]] # موقع ثنائي الأبعاد لنافذة في الصورة + +inputs = processor(raw_image, input_points=input_points, segmentation_maps=segmentation_map, return_tensors="pt").to(device) +with torch.no_grad(): + outputs = model(**inputs) + +masks = processor.image_processor.post_process_masks( + outputs.pred_masks.cpu(), inputs["original_sizes"].cpu(), inputs["reshaped_input_sizes"].cpu() +) +scores = outputs.iou_scores +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام SAM. + +- [دفتر الملاحظات التوضيحي](https://github.com/huggingface/notebooks/blob/main/examples/segment_anything.ipynb) لاستخدام النموذج. +- [دفتر الملاحظات التوضيحي](https://github.com/huggingface/notebooks/blob/main/examples/automatic_mask_generation.ipynb) لاستخدام خط أنابيب توليد القناع التلقائي. +- [دفتر الملاحظات التوضيحي](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/SAM/Run_inference_with_MedSAM_using_HuggingFace_Transformers.ipynb) للاستدلال مع MedSAM، وهو إصدار مضبوط الضبط لـ SAM في المجال الطبي. 🌎 +- [دفتر الملاحظات التوضيحي](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/SAM/Fine_tune_SAM_(segment_anything)_on_a_custom_dataset.ipynb) لضبط دقة النموذج على بيانات مخصصة. 🌎 + +## SlimSAM + +اقترح SlimSAM، وهو إصدار مقصوص من SAM، في [0.1% Data Makes Segment Anything Slim](https://arxiv.org/abs/2312.05284) بواسطة Zigeng Chen et al. يقلل SlimSAM حجم نماذج SAM بشكل كبير مع الحفاظ على نفس الأداء. + +يمكن العثور على نقاط التفتيش على [المركز](https://huggingface.co/models?other=slimsam)، ويمكن استخدامها كبديل مباشر لـ SAM. + +## Grounded SAM + +يمكنك دمج [Grounding DINO](grounding-dino) مع SAM لتوليد القناع القائم على النص كما تم تقديمه في [Grounded SAM: Assembling Open-World Models for Diverse Visual Tasks](https://arxiv.org/abs/2401.14159). يمكنك الرجوع إلى هذا [دفتر الملاحظات التوضيحي](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Grounding%20DINO/GroundingDINO_with_Segment_Anything.ipynb) 🌍 لمزيد من التفاصيل. + + + + نظرة عامة على Grounded SAM. مأخوذة من المستودع الأصلي. + +## SamConfig + +[[autodoc]] SamConfig + +## SamVisionConfig + +[[autodoc]] SamVisionConfig + +## SamMaskDecoderConfig + +[[autodoc]] SamMaskDecoderConfig + +## SamPromptEncoderConfig + +[[autodoc]] SamPromptEncoderConfig + +## SamProcessor + +[[autodoc]] SamProcessor + +## SamImageProcessor + +[[autodoc]] SamImageProcessor + +## SamModel + +[[autodoc]] SamModel + +- forward + +## TFSamModel + +[[autodoc]] TFSamModel + +- call \ No newline at end of file From 5bb6f72180d7218489e5a8385f789b1058f4253e Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:11 +0300 Subject: [PATCH 566/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/seamless=5Fm4t.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/seamless_m4t.md | 207 +++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 docs/source/ar/model_doc/seamless_m4t.md diff --git a/docs/source/ar/model_doc/seamless_m4t.md b/docs/source/ar/model_doc/seamless_m4t.md new file mode 100644 index 00000000000000..157c205d080243 --- /dev/null +++ b/docs/source/ar/model_doc/seamless_m4t.md @@ -0,0 +1,207 @@ +# SeamlessM4T + +## نظرة عامة + +اقترح نموذج SeamlessM4T في [SeamlessM4T — Massively Multilingual & Multimodal Machine Translation](https://dl.fbaipublicfiles.com/seamless/seamless_m4t_paper.pdf) بواسطة فريق Seamless Communication من Meta AI. + +هذا هو إصدار **الإصدار 1** من النموذج. للإصدار المحدث **الإصدار 2**، راجع [Seamless M4T v2 docs](https://huggingface.co/docs/transformers/main/model_doc/seamless_m4t_v2). + +SeamlessM4T عبارة عن مجموعة من النماذج المصممة لتوفير ترجمة عالية الجودة، مما يسمح للأفراد من مجتمعات لغوية مختلفة بالتواصل بسلاسة من خلال الكلام والنص. + +تمكّن SeamlessM4T من تنفيذ مهام متعددة دون الاعتماد على نماذج منفصلة: + +- الترجمة من الكلام إلى الكلام (S2ST) +- الترجمة من الكلام إلى النص (S2TT) +- الترجمة من النص إلى الكلام (T2ST) +- الترجمة من نص إلى نص (T2TT) +- التعرف التلقائي على الكلام (ASR) + +يمكن لـ [`SeamlessM4TModel`] تنفيذ جميع المهام المذكورة أعلاه، ولكن لكل مهمة أيضًا نموذجها الفرعي المخصص. + +المقتطف من الورقة هو ما يلي: + +*ما الذي يتطلبه الأمر لخلق سمكة بابل، وهي أداة يمكن أن تساعد الأفراد على ترجمة الكلام بين أي لغتين؟ في حين أن الاختراقات الأخيرة في النماذج القائمة على النص دفعت بتغطية الترجمة الآلية إلى ما بعد 200 لغة، إلا أن نماذج الترجمة الموحدة من الكلام إلى الكلام لم تحقق بعد قفزات مماثلة. على وجه التحديد، تعتمد أنظمة الترجمة التقليدية من الكلام إلى الكلام على الأنظمة المتتالية التي تؤدي الترجمة تدريجيًا، مما يجعل الأنظمة الموحدة عالية الأداء بعيدة المنال. لمعالجة هذه الفجوات، نقدم SeamlessM4T، وهو نموذج واحد يدعم الترجمة من الكلام إلى الكلام، والترجمة من الكلام إلى النص، والترجمة من النص إلى الكلام، والترجمة من نص إلى نص، والتعرف التلقائي على الكلام لما يصل إلى 100 لغة. لبناء هذا، استخدمنا مليون ساعة من بيانات الصوت المفتوحة لتعلم التمثيلات الصوتية ذاتية الإشراف باستخدام w2v-BERT 2.0. بعد ذلك، قمنا بإنشاء مجموعة بيانات متعددة الوسائط من ترجمات الكلام المحاذاة تلقائيًا. بعد التصفية والدمج مع البيانات التي تحمل علامات بشرية وبيانات ذات علامات زائفة، قمنا بتطوير أول نظام متعدد اللغات قادر على الترجمة من وإلى اللغة الإنجليزية لكل من الكلام والنص. في FLEURS، يحدد SeamlessM4T معيارًا جديدًا للترجمات إلى لغات متعددة مستهدفة، محققًا تحسنًا بنسبة 20% في BLEU مقارنة بـ SOTA السابق في الترجمة المباشرة من الكلام إلى النص. مقارنة بالنماذج المتتالية القوية، يحسن SeamlessM4T جودة الترجمة إلى اللغة الإنجليزية بمقدار 1.3 نقطة BLEU في الترجمة من الكلام إلى النص وبمقدار 2.6 نقطة ASR-BLEU في الترجمة من الكلام إلى الكلام. تم اختبار نظامنا للمتانة، ويؤدي أداءً أفضل ضد الضوضاء الخلفية وتغيرات المتحدث في مهام الترجمة من الكلام إلى النص مقارنة بنموذج SOTA الحالي. من الناحية الحرجة، قمنا بتقييم SeamlessM4T على التحيز بين الجنسين والسمية المضافة لتقييم سلامة الترجمة. أخيرًا، جميع المساهمات في هذا العمل مفتوحة المصدر ومتاحة على https://github.com/facebookresearch/seamless_communication* + +## الاستخدام + +أولاً، قم بتحميل المعالج ونقطة تفتيش للنموذج: + +```python +>>> from transformers import AutoProcessor, SeamlessM4TModel + +>>> processor = AutoProcessor.from_pretrained("facebook/hf-seamless-m4t-medium") +>>> model = SeamlessM4TModel.from_pretrained("facebook/hf-seamless-m4t-medium") +``` + +يمكنك استخدام هذا النموذج بسلاسة على النص أو الصوت، لإنشاء نص مترجم أو صوت مترجم. + +فيما يلي كيفية استخدام المعالج لمعالجة النص والصوت: + +```python +>>> # دعنا نحمل عينة صوتية من مجموعة بيانات خطاب عربي +>>> from datasets import load_dataset +>>> dataset = load_dataset("arabic_speech_corpus", split="test", streaming=True) +>>> audio_sample = next(iter(dataset))["audio"] + +>>> # الآن، قم بمعالجته +>>> audio_inputs = processor(audios=audio_sample["array"], return_tensors="pt") + +>>> # الآن، قم بمعالجة بعض النصوص الإنجليزية أيضًا +>>> text_inputs = processor(text="Hello, my dog is cute", src_lang="eng", return_tensors="pt") +``` + +### الكلام + +يمكن لـ [`SeamlessM4TModel`] *بسلاسة* إنشاء نص أو كلام مع عدد قليل من التغييرات أو بدونها. دعنا نستهدف الترجمة الصوتية الروسية: + +```python +>>> audio_array_from_text = model.generate(**text_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze() +>>> audio_array_from_audio = model.generate(**audio_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze() +``` + +بنفس الرمز تقريبًا، قمت بترجمة نص إنجليزي وكلام عربي إلى عينات كلام روسية. + +### نص + +وبالمثل، يمكنك إنشاء نص مترجم من ملفات الصوت أو من النص باستخدام نفس النموذج. كل ما عليك فعله هو تمرير `generate_speech=False` إلى [`SeamlessM4TModel.generate`]. + +هذه المرة، دعنا نترجم إلى الفرنسية. + +```python +>>> # من الصوت +>>> output_tokens = model.generate(**audio_inputs, tgt_lang="fra", generate_speech=False) +>>> translated_text_from_audio = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True) + +>>> # من النص +>>> output_tokens = model.generate(**text_inputs, tgt_lang="fra", generate_speech=False) +>>> translated_text_partum_text = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True) +``` + +### نصائح + +#### 1. استخدم النماذج المخصصة + +[`SeamlessM4TModel`] هو نموذج المستوى الأعلى في المحولات لإنشاء الكلام والنص، ولكن يمكنك أيضًا استخدام النماذج المخصصة التي تؤدي المهمة دون مكونات إضافية، مما يقلل من بصمة الذاكرة. + +على سبيل المثال، يمكنك استبدال جزء الرمز الخاص بإنشاء الصوت باستخدام النموذج المخصص لمهمة S2ST، وبقية الرمز هو نفسه بالضبط: + +```python +>>> from transformers import SeamlessM4TForSpeechToSpeech +>>> model = SeamlessM4TForSpeechToSpeech.from_pretrained("facebook/hf-seamless-m4t-medium") +``` + +أو يمكنك استبدال جزء الرمز الخاص بإنشاء النص باستخدام النموذج المخصص لمهمة T2TT، وكل ما عليك فعله هو إزالة `generate_speech=False`. + +```python +>>> from transformers import SeamlessM4TForTextToText +>>> model = SeamlessM4TForTextToText.from_pretrained("facebook/hf-seamless-m4t-medium") +``` + +لا تتردد في تجربة [`SeamlessM4TForSpeechToText`] و [`SeamlessM4TForTextToSpeech`] أيضًا. + +#### 2. تغيير هوية المتحدث + +لديك إمكانية تغيير المتحدث المستخدم للتخليق الصوتي باستخدام حجة `spkr_id`. تعمل بعض قيم `spkr_id` بشكل أفضل من غيرها لبعض اللغات! + +#### 3. تغيير استراتيجية التوليد + +يمكنك استخدام استراتيجيات [توليد](./generation_strategies) مختلفة للكلام وتوليد النص، على سبيل المثال `.generate(input_ids=input_ids، text_num_beams=4، speech_do_sample=True)` والذي سيؤدي فك تشفير شعاع على النموذج النصي، وعينة متعددة الحدود على النموذج الصوتي. + +#### 4. قم بتوليد الكلام والنص في نفس الوقت + +استخدم `return_intermediate_token_ids=True` مع [`SeamlessM4TModel`] لإرجاع كل من الكلام والنص! + +## بنية النموذج + +تتميز SeamlessM4T ببنية مرنة تتعامل بسلاسة مع التوليد التسلسلي للنص والكلام. يتضمن هذا الإعداد نموذجين تسلسليين (seq2seq). يترجم النموذج الأول الطريقة المدخلة إلى نص مترجم، بينما يقوم النموذج الثاني بتوليد رموز الكلام، والمعروفة باسم "رموز الوحدة"، من النص المترجم. + +لدى كل طريقة مشفر خاص بها ببنية فريدة. بالإضافة إلى ذلك، بالنسبة لإخراج الكلام، يوجد جهاز فك ترميز مستوحى من بنية [HiFi-GAN](https://arxiv.org/abs/2010.05646) أعلى نموذج seq2seq الثاني. + +فيما يلي كيفية عمل عملية التوليد: + +- تتم معالجة النص أو الكلام المدخل من خلال مشفر محدد. +- يقوم فك التشفير بإنشاء رموز نصية باللغة المطلوبة. +- إذا كانت هناك حاجة إلى توليد الكلام، يقوم نموذج seq2seq الثاني، باتباع بنية مشفر-فك تشفير قياسية، بتوليد رموز الوحدة. +- يتم بعد ذلك تمرير رموز الوحدة هذه عبر فك التشفير النهائي لإنتاج الكلام الفعلي. + +تمت المساهمة بهذا النموذج بواسطة [ylacombe](https://huggingface.co/ylacombe). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/seamless_communication). + +## SeamlessM4TModel + +[[autodoc]] SeamlessM4TModel + +- generate + +## SeamlessM4TForTextToSpeech + +[[autodoc]] SeamlessM4TForTextToSpeech + +- generate + +## SeamlessM4TForSpeechToSpeech + +[[autodoc]] SeamlessM4TForSpeechToSpeech + +- generate + +## SeamlessM4TForTextToText + +[[autodoc]] transformers.SeamlessM4TForTextToText + +- forward +- generate + +## SeamlessM4TForSpeechToText + +[[autodoc]] transformers.SeamlessM4TForSpeechToText + +- forward +- generate + +## SeamlessM4TConfig + +[[autodoc]] SeamlessM4TConfig + +## SeamlessM4TTokenizer + +[[autodoc]] SeamlessM4TTokenizer + +- __call__ +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## SeamlessM4TTokenizerFast + +[[autodoc]] SeamlessM4TTokenizerFast + +- __call__ + +## SeamlessM4TFeatureExtractor + +[[autodoc]] SeamlessM4TFeatureExtractor + +- __call__ + +## SeamlessM4TProcessor + +[[autodoc]] SeamlessM4TProcessor + +- __call__ + +## SeamlessM4TCodeHifiGan + +[[autodoc]] SeamlessM4TCodeHifiGan + +## SeamlessM4THifiGan + +[[autodoc]] SeamlessM4THifiGan + +## SeamlessM4TTextToUnitModel + +[[autodoc]] SeamlessM4TTextToUnitModel + +## SeamlessM4TTextToUnitForConditionalGeneration + +[[autodoc]] SeamlessM4TTextToUnitForConditionalGeneration \ No newline at end of file From ae192f8b50314b515c053b9de4bb92b065c276c2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:13 +0300 Subject: [PATCH 567/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/seamless=5Fm4t=5Fv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/seamless_m4t_v2.md | 185 ++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 docs/source/ar/model_doc/seamless_m4t_v2.md diff --git a/docs/source/ar/model_doc/seamless_m4t_v2.md b/docs/source/ar/model_doc/seamless_m4t_v2.md new file mode 100644 index 00000000000000..255f4f2c110970 --- /dev/null +++ b/docs/source/ar/model_doc/seamless_m4t_v2.md @@ -0,0 +1,185 @@ +# SeamlessM4T-v2 + +## نظرة عامة + +اقترح فريق Seamless Communication من Meta AI نموذج SeamlessM4T-v2 في [Seamless: Multilingual Expressive and Streaming Speech Translation](https://ai.meta.com/research/publications/seamless-multilingual-expressive-and-streaming-speech-translation/). + +SeamlessM4T-v2 عبارة عن مجموعة من النماذج المصممة لتوفير ترجمة عالية الجودة، مما يسمح للناس من مجتمعات لغوية مختلفة بالتواصل بسلاسة من خلال الكلام والنص. إنه تحسين على [الإصدار السابق](https://huggingface.co/docs/transformers/main/model_doc/seamless_m4t). لمزيد من التفاصيل حول الاختلافات بين الإصدارين v1 و v2، راجع القسم [الاختلاف مع SeamlessM4T-v1](#difference-with-seamlessm4t-v1). + +يتيح SeamlessM4T-v2 مهام متعددة دون الاعتماد على نماذج منفصلة: + +- الترجمة الكلامية النصية (S2ST) +- الترجمة الكلامية النصية (S2TT) +- الترجمة النصية الكلامية (T2ST) +- الترجمة النصية النصية (T2TT) +- التعرف التلقائي على الكلام (ASR) + +يمكن لـ [`SeamlessM4Tv2Model`] تنفيذ جميع المهام المذكورة أعلاه، ولكن لكل مهمة أيضًا نموذج فرعي مخصص لها. + +المقتطف من الورقة هو ما يلي: + +*حققت التطورات الأخيرة في الترجمة الكلامية التلقائية توسعًا كبيرًا في تغطية اللغة، وتحسين القدرات متعددة الوسائط، وتمكين مجموعة واسعة من المهام والوظائف. ومع ذلك، تفتقر أنظمة الترجمة الكلامية التلقائية واسعة النطاق اليوم إلى ميزات رئيسية تساعد في جعل التواصل بوساطة الآلة سلسًا عند مقارنته بالحوار بين البشر. في هذا العمل، نقدم عائلة من النماذج التي تمكّن الترجمات التعبيرية والمتعددة اللغات بطريقة متواصلة. أولاً، نساهم في تقديم نسخة محسّنة من نموذج SeamlessM4T متعدد اللغات والوسائط بشكل كبير - SeamlessM4T v2. تم تدريب هذا النموذج الأحدث، الذي يتضمن إطار عمل UnitY2 المحدث، على المزيد من بيانات اللغات منخفضة الموارد. تضيف النسخة الموسعة من SeamlessAlign 114,800 ساعة من البيانات المحاذاة تلقائيًا لما مجموعه 76 لغة. يوفر SeamlessM4T v2 الأساس الذي تقوم عليه أحدث نماذجنا، SeamlessExpressive و SeamlessStreaming. يمكّن SeamlessExpressive الترجمة التي تحافظ على الأساليب الصوتية والتنغيم. مقارنة بالجهود السابقة في أبحاث الكلام التعبيري، يعالج عملنا بعض الجوانب الأقل استكشافًا للتنغيم، مثل معدل الكلام والتوقفات، مع الحفاظ على أسلوب صوت الشخص. أما بالنسبة لـ SeamlessStreaming، فإن نموذجنا يستفيد من آلية Efficient Monotonic Multihead Attention (EMMA) لتوليد ترجمات مستهدفة منخفضة الكمون دون انتظار نطق المصدر الكامل. يعد SeamlessStreaming الأول من نوعه، حيث يمكّن الترجمة الكلامية/النصية المتزامنة للغات المصدر والهدف المتعددة. لفهم أداء هذه النماذج، قمنا بدمج الإصدارات الجديدة والمعدلة من المقاييس التلقائية الموجودة لتقييم التنغيم والكمون والمتانة. وبالنسبة للتقييمات البشرية، قمنا بتكييف البروتوكولات الموجودة المصممة لقياس أكثر السمات ملاءمة في الحفاظ على المعنى والطبيعية والتعبير. ولضمان إمكانية استخدام نماذجنا بشكل آمن ومسؤول، قمنا بتنفيذ أول جهد معروف للفريق الأحمر للترجمة الآلية متعددة الوسائط، ونظام للكشف عن السمية المضافة والتخفيف منها، وتقييم منهجي للتحيز بين الجنسين، وآلية ترميز علامات مائية محلية غير مسموعة مصممة للتخفيف من تأثير مقاطع الفيديو المزيفة. وبالتالي، فإننا نجمع المكونات الرئيسية من SeamlessExpressive و SeamlessStreaming لتشكيل Seamless، وهو أول نظام متاح للجمهور يفتح التواصل التعبيري متعدد اللغات في الوقت الفعلي. في الختام، يمنحنا Seamless نظرة محورية على الأساس التقني اللازم لتحويل المترجم الشفوي العالمي من مفهوم الخيال العلمي إلى تكنولوجيا الواقع. وأخيرًا، يتم إطلاق المساهمات في هذا العمل - بما في ذلك النماذج والشفرة وكاشف العلامات المائية - علنًا ويمكن الوصول إليها من خلال الرابط أدناه.* + +## الاستخدام + +في المثال التالي، سنقوم بتحميل عينة صوت عربية وعينة نص إنجليزي وتحويلهما إلى كلام روسي ونص فرنسي. + +أولاً، قم بتحميل المعالج ونقطة تفتيش للنموذج: + +```python +>>> from transformers import AutoProcessor, SeamlessM4Tv2Model + +>>> processor = AutoProcessor.from_pretrained("facebook/seamless-m4t-v2-large") +>>> model = SeamlessM4Tv2Model.from_pretrained("facebook/seamless-m4t-v2-large") +``` + +يمكنك استخدام هذا النموذج بسلاسة على النص أو الصوت، لتوليد نص مترجم أو صوت مترجم. + +هكذا تستخدم المعالج لمعالجة النص والصوت: + +```python +>>> # دعنا نحمل عينة صوت من مجموعة بيانات كلام عربية +>>> from datasets import load_dataset +>>> dataset = load_dataset("arabic_speech_corpus", split="test", streaming=True) +>>> audio_sample = next(iter(dataset))["audio"] + +>>> # الآن، قم بمعالجته +>>> audio_inputs = processor(audios=audio_sample["array"], return_tensors="pt") + +>>> # الآن، قم بمعالجة بعض النصوص الإنجليزية أيضًا +>>> text_inputs = processor(text="Hello, my dog is cute", src_lang="eng", return_tensors="pt") +``` + +### الكلام + +يمكن لـ [`SeamlessM4Tv2Model`] *بسلاسة* توليد نص أو كلام مع عدد قليل من التغييرات أو بدونها. دعنا نستهدف الترجمة الصوتية الروسية: + +```python +>>> audio_array_from_text = model.generate(**text_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze() +>>> audio_array_from_audio = model.generate(**audio_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze() +``` + +بنفس الكود تقريبًا، قمت بترجمة نص إنجليزي وكلام عربي إلى عينات كلام روسية. + +### النص + +وبالمثل، يمكنك توليد نص مترجم من ملفات الصوت أو النص باستخدام نفس النموذج. عليك فقط تمرير `generate_speech=False` إلى [`SeamlessM4Tv2Model.generate`]. + +هذه المرة، دعنا نقوم بالترجمة إلى الفرنسية. + +```python +>>> # من الصوت +>>> output_tokens = model.generate(**audio_inputs, tgt_lang="fra", generate_speech=False) +>>> translated_text_from_audio = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True) + +>>> # من النص +>>> output_tokens = model.generate(**text_inputs, tgt_lang="fra", generate_speech=False) +>>> translated_text_from_text = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True) +``` + +### نصائح + +#### 1. استخدم النماذج المخصصة + +[`SeamlessM4Tv2Model`] هو نموذج المستوى الأعلى في برنامج Transformers لتوليد الكلام والنص، ولكن يمكنك أيضًا استخدام النماذج المخصصة التي تؤدي المهمة دون مكونات إضافية، مما يقلل من بصمة الذاكرة. + +على سبيل المثال، يمكنك استبدال جزء التعليمات البرمجية لتوليد الصوت بالنموذج المخصص لمهمة S2ST، والباقي هو نفس الكود بالضبط: + +```python +>>> from transformers import SeamlessM4Tv2ForSpeechToSpeech +>>> model = SeamlessM4Tv2ForSpeechToSpeech.from_pretrained("facebook/seamless-m4t-v2-large") +``` + +أو يمكنك استبدال جزء التعليمات البرمجية لتوليد النص بالنموذج المخصص لمهمة T2TT، عليك فقط إزالة `generate_speech=False`. + +```python +>>> from transformers import SeamlessM4Tv2ForTextToText +>>> model = SeamlessM4Tv2ForTextToText.from_pretrained("facebook/seamless-m4t-v2-large") +``` + +لا تتردد في تجربة [`SeamlessM4Tv2ForSpeechToText`] و [`SeamlessM4Tv2ForTextToSpeech`] أيضًا. + +#### 2. تغيير هوية المتحدث + +لديك إمكانية تغيير المتحدث المستخدم للتخليق الصوتي باستخدام وسيط `speaker_id`. تعمل بعض قيم `speaker_id` بشكل أفضل من غيرها لبعض اللغات! + +#### 3. تغيير استراتيجية التوليد + +يمكنك استخدام استراتيجيات [توليد](../generation_strategies) مختلفة للنص، على سبيل المثال `.generate(input_ids=input_ids, text_num_beams=4, text_do_sample=True)` والتي ستؤدي فك تشفير شعاع متعدد الحدود على النموذج النصي. لاحظ أن توليد الكلام يدعم فقط الجشع - بشكل افتراضي - أو العينات متعددة الحدود، والتي يمكن استخدامها مع `.generate(..., speech_do_sample=True, speech_temperature=0.6)`. + +#### 4. قم بتوليد الكلام والنص في نفس الوقت + +استخدم `return_intermediate_token_ids=True` مع [`SeamlessM4Tv2Model`] لإرجاع كل من الكلام والنص! + +## بنية النموذج + +يتميز SeamlessM4T-v2 ببنية مرنة تتعامل بسلاسة مع التوليد التسلسلي للنص والكلام. يتضمن هذا الإعداد نموذجين تسلسليين (seq2seq). يقوم النموذج الأول بترجمة المدخلات إلى نص مترجم، بينما يقوم النموذج الثاني بتوليد رموز الكلام، المعروفة باسم "رموز الوحدة"، من النص المترجم. + +لدى كل وسيطة مشفرها الخاص ببنية فريدة. بالإضافة إلى ذلك، بالنسبة لخرج الكلام، يوجد محول ترميز مستوحى من بنية [HiFi-GAN](https://arxiv.org/abs/2010.05646) أعلى نموذج seq2seq الثاني. + +### الاختلاف مع SeamlessM4T-v1 + +تختلف بنية هذه النسخة الجديدة عن الإصدار الأول في بعض الجوانب: + +#### التحسينات على نموذج المرور الثاني + +نموذج seq2seq الثاني، المسمى نموذج النص إلى وحدة، غير تلقائي الآن، مما يعني أنه يحسب الوحدات في **تمريرة أمامية واحدة**. أصبح هذا الإنجاز ممكنًا من خلال: + +- استخدام **تضمين مستوى الأحرف**، مما يعني أن لكل حرف من النص المترجم المتنبأ به تضمينه الخاص، والذي يتم استخدامه بعد ذلك للتنبؤ برموز الوحدة. +- استخدام مُنبئ المدة الوسيطة، الذي يتنبأ بمدة الكلام على مستوى **الشخصية** في النص المترجم المتنبأ به. +- استخدام فك تشفير النص إلى وحدة جديد يمزج بين التعرّف على التعرّف والاهتمام الذاتي للتعامل مع السياق الأطول. + +#### الاختلاف في مشفر الكلام + +يختلف مشفر الكلام، الذي يتم استخدامه أثناء عملية توليد المرور الأول للتنبؤ بالنص المترجم، بشكل أساسي عن مشفر الكلام السابق من خلال هذه الآليات: + +- استخدام قناع اهتمام مجزأ لمنع الاهتمام عبر المقاطع، وضمان أن يحضر كل موضع فقط إلى المواضع الموجودة داخل مقطعته وعدد ثابت من المقاطع السابقة. +- استخدام التضمينات الموضعية النسبية التي لا تأخذ في الاعتبار سوى المسافة بين عناصر التسلسل بدلاً من المواضع المطلقة. يرجى الرجوع إلى [Self-Attention with Relative Position Representations (Shaw et al.)](https://arxiv.org/abs/1803.02155) لمزيد من التفاصيل. +- استخدام التعرّف المتعمق السببي بدلاً من غير السببي. + +### عملية التوليد + +هكذا تعمل عملية التوليد: + +- تتم معالجة النص أو الكلام المدخل من خلال مشفر محدد. +- يقوم فك التشفير بإنشاء رموز نصية باللغة المطلوبة. +- إذا كانت هناك حاجة إلى توليد الكلام، فإن نموذج seq2seq الثاني يقوم بتوليد رموز الوحدة بطريقة غير تلقائية. +- يتم بعد ذلك تمرير رموز الوحدة هذه عبر محول الترميز النهائي لإنتاج الكلام الفعلي. + +تمت المساهمة بهذا النموذج من قبل [ylacombe](https://huggingface.co/ylacombe). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/seamless_communication). + +## SeamlessM4Tv2Model + +[[autodoc]] SeamlessM4Tv2Model + +- generate + +## SeamlessM4Tv2ForTextToSpeech + +[[autodoc]] SeamlessM4Tv2ForTextToSpeech + +- generate + +## SeamlessM4Tv2ForSpeechToSpeech + +[[autodoc]] SeamlessM4Tv2ForSpeechToSpeech + +- generate + +## SeamlessM4Tv2ForTextToText + +[[autodoc]] transformers.SeamlessM4Tv2ForTextToText + +- forward +- generate + +## SeamlessM4Tv2ForSpeechToText + +[[autodoc]] transformers.SeamlessM4Tv2ForSpeechToText + +- forward +- generate + +## SeamlessM4Tv2Config + +[[autodoc]] SeamlessM4Tv2Config \ No newline at end of file From a635d0bea5d84d6d766fd558e2e98d9a90ade592 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:15 +0300 Subject: [PATCH 568/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/segformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/segformer.md | 143 ++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 docs/source/ar/model_doc/segformer.md diff --git a/docs/source/ar/model_doc/segformer.md b/docs/source/ar/model_doc/segformer.md new file mode 100644 index 00000000000000..7871e2d69620ab --- /dev/null +++ b/docs/source/ar/model_doc/segformer.md @@ -0,0 +1,143 @@ +# SegFormer + +## نظرة عامة + +اقترح نموذج SegFormer في ورقة "SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers" بواسطة Enze Xie وآخرون. يتكون النموذج من ترميز Transformer هرمي ورأس فك تشفير خفيف الوزن يعتمد بالكامل على MLP لتحقيق نتائج ممتازة في معايير تصنيف الصور مثل ADE20K وCityscapes. + +الملخص من الورقة هو ما يلي: + +> "نقدم SegFormer، وهو إطار عمل لتصنيف الصور البسيط والفعال والقوي الذي يوحد المحولات مع فك ترميز الإدراك متعدد الطبقات (MLP) خفيف الوزن. يتميز SegFormer بميزتين جذابتين: 1) يتكون SegFormer من ترميز محول هرمي هيكلي جديد ينتج ميزات متعددة المقاييس. لا يحتاج إلى ترميز الموضع، وبالتالي يتجنب الاستيفاء لرموز الموضعية التي تؤدي إلى انخفاض الأداء عندما يختلف القرار عند الاختبار عن التدريب. 2) يتجنب SegFormer فك الترميز المعقد. يقوم فك ترميز MLP المقترح بتجميع المعلومات من طبقات مختلفة، وبالتالي الجمع بين كل من الاهتمام المحلي والعالمي لتصيير تمثيلات قوية. نُظهر أن هذا التصميم البسيط والخفيف هو المفتاح لتصنيف الكفاءة على المحولات. نقوم بزيادة مقياس نهجنا للحصول على سلسلة من النماذج من SegFormer-B0 إلى SegFormer-B5، مما يحقق أداءً وكفاءة أفضل بكثير من النظائر السابقة. على سبيل المثال، يحقق SegFormer-B4 نسبة 50.3% mIoU على ADE20K مع 64 مليون معامل، وهو أصغر 5 مرات وأفضل بنسبة 2.2% من الطريقة الأفضل السابقة. ويحقق نموذجنا الأفضل، SegFormer-B5، نسبة 84.0% mIoU على مجموعة التحقق من Cityscapes ويظهر متانة ممتازة للتصنيف الصفري على Cityscapes-C." + +يوضح الشكل أدناه بنية SegFormer. مأخوذة من الورقة الأصلية. + +![بنية SegFormer](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/segformer_architecture.png) + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). تمت المساهمة في إصدار TensorFlow من النموذج بواسطة [sayakpaul](https://huggingface.co/sayakpaul). يمكن العثور على الكود الأصلي [هنا](https://github.com/NVlabs/SegFormer). + +## نصائح الاستخدام + +- يتكون SegFormer من ترميز محول هرمي ورأس فك تشفير خفيف الوزن يعتمد بالكامل على MLP. [`SegformerModel`] هو ترميز المحول الهرمي (الذي يشار إليه أيضًا في الورقة باسم Mix Transformer أو MiT). يضيف [`SegformerForSemanticSegmentation`] رأس فك تشفير MLP بالكامل لأداء التصنيف الدلالي للصور. بالإضافة إلى ذلك، هناك [`SegformerForImageClassification`] الذي يمكن استخدامه - كما هو متوقع - لتصنيف الصور. قام مؤلفو SegFormer أولاً بتدريب المحول الترميزي مسبقًا على ImageNet-1k لتصنيف الصور. بعد ذلك، يقومون بحذف رأس التصنيف، واستبداله برأس فك تشفير MLP. بعد ذلك، يقومون بتدريب النموذج بالكامل على ADE20K وCityscapes وCOCO-stuff، والتي تعد معايير مرجعية مهمة لتصنيف الصور. يمكن العثور على جميع نقاط التفتيش على [المركز](https://huggingface.co/models?other=segformer). + +- أسرع طريقة للبدء مع SegFormer هي التحقق من [دفاتر الملاحظات التوضيحية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/SegFormer) (التي تعرض كل من الاستدلال والتدريب الدقيق على البيانات المخصصة). يمكن للمرء أيضًا الاطلاع على [منشور المدونة](https://huggingface.co/blog/fine-tune-segformer) الذي يقدم SegFormer ويوضح كيفية ضبطه بدقة على بيانات مخصصة. + +- يجب أن يشير مستخدمو TensorFlow إلى [هذا المستودع](https://github.com/deep-diver/segformer-tf-transformers) الذي يوضح الاستدلال والضبط الدقيق خارج الصندوق. + +- يمكن للمرء أيضًا الاطلاع على [هذا العرض التوضيحي التفاعلي على Hugging Face Spaces](https://huggingface.co/spaces/chansung/segformer-tf-transformers) لتجربة نموذج SegFormer على الصور المخصصة. + +- يعمل SegFormer مع أي حجم إدخال، حيث يقوم بتقسيم الإدخال ليكون قابلاً للقسمة على `config.patch_sizes`. + +- يمكن للمرء استخدام [`SegformerImageProcessor`] لإعداد الصور وخرائط التجزئة المقابلة للنموذج. لاحظ أن معالج الصور هذا أساسي إلى حد ما ولا يتضمن جميع عمليات زيادة البيانات المستخدمة في الورقة الأصلية. يمكن العثور على خطوط المعالجة المسبقة الأصلية (لمجموعة بيانات ADE20k على سبيل المثال) [هنا](https://github.com/NVlabs/SegFormer/blob/master/local_configs/_base_/datasets/ade20k_repeat.py). تتمثل أهم خطوة للمعالجة المسبقة في اقتصاص الصور وخرائط التجزئة عشوائيًا وإضافتها إلى نفس الحجم، مثل 512x512 أو 640x640، ثم يتم تطبيعها. + +- هناك شيء إضافي يجب مراعاته وهو أنه يمكن تهيئة [`SegformerImageProcessor`] باستخدام `do_reduce_labels` على `True` أو `False`. في بعض مجموعات البيانات (مثل ADE20k)، يتم استخدام الفهرس 0 في خرائط التجزئة المشروحة للخلفية. ومع ذلك، لا تتضمن مجموعة بيانات ADE20k فئة "الخلفية" في علاماتها البالغ عددها 150. لذلك، يتم استخدام `do_reduce_labels` لخفض جميع العلامات بمقدار 1، والتأكد من عدم حساب أي خسارة لفئة "الخلفية" (أي أنها تستبدل 0 في الخرائط المشروحة بـ 255، وهو *ignore_index* لدالة الخسارة المستخدمة بواسطة [`SegformerForSemanticSegmentation`]). ومع ذلك، تستخدم مجموعات بيانات أخرى الفهرس 0 كفئة خلفية وتتضمن هذه الفئة كجزء من جميع العلامات. في هذه الحالة، يجب تعيين `do_reduce_labels` على `False`، حيث يجب أيضًا حساب الخسارة لفئة الخلفية. + +- مثل معظم النماذج، يأتي SegFormer بأحجام مختلفة، يمكن العثور على تفاصيلها في الجدول أدناه (مأخوذ من الجدول 7 من [الورقة الأصلية](https://arxiv.org/abs/2105.15203)). + +| **متغير النموذج** | **الأعماق** | **أحجام المخفية** | **حجم مخفي فك الترميز** | **المعلمات (م)** | **ImageNet-1k Top 1** | +| :---------------: | ------------- | ------------------- | :---------------------: | :------------: | :-------------------: | +| MiT-b0 | [2، 2، 2، 2] | [32، 64، 160، 256] | 256 | 3.7 | 70.5 | +| MiT-b1 | [2، 2، 2، 2] | [64، 128، 320، 512] | 256 | 14.0 | 78.7 | +| MiT-b2 | [3، 4، 6، 3] | [64، 128، 320، 512] | 768 | 25.4 | 81.6 | +| MiT-b3 | [3، 4، 18، 3] | [64، 128، 320، 512] | 768 | 45.2 | 83.1 | +| MiT-b4 | [3، 8، 27، 3] | [64، 128، 320، 512] | 768 | 62.6 | 83.6 | +| MiT-b5 | [3، 6، 40، 3] | [64، 128، 320، 512] | 768 | 82.0 | 83.8 | + +لاحظ أن MiT في الجدول أعلاه يشير إلى العمود الفقري لترميز المحول المختلط المقدم في SegFormer. للحصول على نتائج SegFormer على مجموعات بيانات التجزئة مثل ADE20k، راجع [الورقة](https://arxiv.org/abs/2105.15203). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام SegFormer. + +- [`SegformerForImageClassification`] مدعوم بواسطة [نص البرنامج النصي التوضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + +- [دليل مهام تصنيف الصور](../tasks/image_classification) + +التصنيف الدلالي: + +- [`SegformerForSemanticSegmentation`] مدعوم بواسطة [نص البرنامج النصي التوضيحي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/semantic-segmentation). + +- يمكن العثور على مدونة حول الضبط الدقيق لـ SegFormer على مجموعة بيانات مخصصة [هنا](https://huggingface.co/blog/fine-tune-segformer). + +- يمكن العثور على المزيد من دفاتر الملاحظات التوضيحية حول SegFormer (الاستدلال + الضبط الدقيق على مجموعة بيانات مخصصة) [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/SegFormer). + +- [`TFSegformerForSemanticSegmentation`] مدعوم بواسطة [دفتر الملاحظات التوضيحي هذا](https://github.com/huggingface/notebooks/blob/main/examples/semantic_segmentation-tf.ipynb). + +- [دليل مهام التجزئة الدلالية](../tasks/semantic_segmentation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد في الوضع المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## SegformerConfig + +[[autodoc]] SegformerConfig + +## SegformerFeatureExtractor + +[[autodoc]] SegformerFeatureExtractor + +- __call__ + +- post_process_semantic_segmentation + +## SegformerImageProcessor + +[[autodoc]] SegformerImageProcessor + +- preprocess + +- post_process_semantic_segmentation + + + + +## SegformerModel + +[[autodoc]] SegformerModel + +- forward + +## SegformerDecodeHead + +[[autodoc]] SegformerDecodeHead + +- forward + +## SegformerForImageClassification + +[[autodoc]] SegformerForImageClassification + +- forward + +## SegformerForSemanticSegmentation + +[[autodoc]] SegformerForSemanticSegmentation + +- forward + + + + +## TFSegformerDecodeHead + +[[autodoc]] TFSegformerDecodeHead + +- call + +## TFSegformerModel + +[[autodoc]] TFSegformerModel + +- call + +## TFSegformerForImageClassification + +[[autodoc]] TFSegformerForImageClassification + +- call + +## TFSegformerForSemanticSegmentation + +[[autodoc]] TFSegformerForSemanticSegmentation + +- call + + + \ No newline at end of file From 0a21dad126eec0325dd757092eaaf41774b340d5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:16 +0300 Subject: [PATCH 569/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/seggpt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/seggpt.md | 78 ++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/source/ar/model_doc/seggpt.md diff --git a/docs/source/ar/model_doc/seggpt.md b/docs/source/ar/model_doc/seggpt.md new file mode 100644 index 00000000000000..98aa5bf29af4ce --- /dev/null +++ b/docs/source/ar/model_doc/seggpt.md @@ -0,0 +1,78 @@ +# SegGPT + +## نظرة عامة + +اقترح نموذج SegGPT في [SegGPT: Segmenting Everything In Context](https://arxiv.org/abs/2304.03284) بواسطة Xinlong Wang, Xiaosong Zhang, Yue Cao, Wen Wang, Chunhua Shen, Tiejun Huang. يستخدم SegGPT محولًا قائمًا على فك الترميز فقط يمكنه إنشاء قناع تجزئة بناءً على صورة دخل وصورة موجهة وقناع موجهة مطابق. يحقق النموذج نتائج لقطات رائعة بمعدل 56.1 mIoU على COCO-20 و 85.6 mIoU على FSS-1000. + +الملخص من الورقة هو ما يلي: + +*نقدم SegGPT، وهو نموذج عام لتقسيم كل شيء في السياق. نوحد مهام التجزئة المختلفة في إطار تعلم متخصص في السياق يستوعب أنواعًا مختلفة من بيانات التجزئة عن طريق تحويلها إلى نفس تنسيق الصور. تتم صياغة تدريب SegGPT على أنه مشكلة تلوين في السياق مع تعيين لون عشوائي لكل عينة بيانات. الهدف هو إنجاز مهام متنوعة وفقًا للسياق، بدلاً من الاعتماد على ألوان محددة. بعد التدريب، يمكن لـ SegGPT تنفيذ مهام تجزئة تعسفية في الصور أو مقاطع الفيديو عبر الاستدلال في السياق، مثل كائن مثيل، وملء، وجزء، ومحيط، ونص. يتم تقييم SegGPT على مجموعة واسعة من المهام، بما في ذلك التجزئة الدلالية لعدد قليل من اللقطات، وتجزئة كائن الفيديو، والتجزئة الدلالية، والتجزئة الشاملة. تظهر نتائجنا قدرات قوية في تجزئة المجال داخل المجال وخارجه* + +نصائح: + +- يمكن للمرء استخدام [`SegGptImageProcessor`] لتحضير إدخال الصورة والملصق والقناع للنموذج. +- يمكن للمرء إما استخدام خرائط التجزئة أو صور RGB كأقنعة موجهة. إذا كنت تستخدم هذا الأخير، فتأكد من تعيين `do_convert_rgb=False` في طريقة `preprocess`. +- من المستحسن بشدة تمرير `num_labels` عند استخدام `segmetantion_maps` (بدون اعتبار الخلفية) أثناء المعالجة المسبقة والمعالجة اللاحقة مع [`SegGptImageProcessor`] لحالتك الاستخدام. +- عند إجراء الاستدلال مع [`SegGptForImageSegmentation`] إذا كان `batch_size` أكبر من 1، فيمكنك استخدام تجميع الميزات عبر صورك عن طريق تمرير `feature_ensemble=True` في طريقة forward. + +فيما يلي كيفية استخدام النموذج لتجزئة دلالية لقطات واحدة: + +```python +import torch +from datasets import load_dataset +from transformers import SegGptImageProcessor, SegGptForImageSegmentation + +checkpoint = "BAAI/seggpt-vit-large" +image_processor = SegGptImageProcessor.from_pretrained(checkpoint) +model = SegGptForImageSegmentation.from_pretrained(checkpoint) + +dataset_id = "EduardoPacheco/FoodSeg103" +ds = load_dataset(dataset_id, split="train") +# Number of labels in FoodSeg103 (not including background) +num_labels = 103 + +image_input = ds[4]["image"] +ground_truth = ds[4]["label"] +image_prompt = ds[29]["image"] +mask_prompt = ds[29]["label"] + +inputs = image_processor( + images=image_input, + prompt_images=image_prompt, + segmentation_maps=mask_prompt, + num_labels=num_labels, + return_tensors="pt" +) + +with torch.no_grad(): + outputs = model(**inputs) + +target_sizes = [image_input.size[::-1]] +mask = image_processor.post_process_semantic_segmentation(outputs, target_sizes, num_labels=num_labels)[0] +``` + +تمت المساهمة بهذا النموذج بواسطة [EduardoPacheco](https://huggingface.co/EduardoPacheco). +يمكن العثور على الكود الأصلي [هنا](https://github.com/baaivision/Painter/tree/main)). + +## SegGptConfig + +[[autodoc]] SegGptConfig + +## SegGptImageProcessor + +[[autodoc]] SegGptImageProcessor + +- preprocess +- post_process_semantic_segmentation + +## SegGptModel + +[[autodoc]] SegGptModel + +- forward + +## SegGptForImageSegmentation + +[[autodoc]] SegGptForImageSegmentation + +- forward \ No newline at end of file From d3148e4db6d2d71a24b7b42a6b6ddbb693347491 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:18 +0300 Subject: [PATCH 570/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/sew-d.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/sew-d.md | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/source/ar/model_doc/sew-d.md diff --git a/docs/source/ar/model_doc/sew-d.md b/docs/source/ar/model_doc/sew-d.md new file mode 100644 index 00000000000000..8f64ce18ed70c9 --- /dev/null +++ b/docs/source/ar/model_doc/sew-d.md @@ -0,0 +1,45 @@ +# SEW-D + +## نظرة عامة + +اقترح SEW-D (Squeezed and Efficient Wav2Vec with Disentangled attention) في ورقة "Performance-Efficiency Trade-offs in Unsupervised Pre-training for Speech Recognition" من قبل فيليكس وو، وكوانجيون كيم، وجينغ بان، وكيو هان، وكيليان كيو. واينبرجر، ويواف أرتزي. + +ملخص الورقة هو ما يلي: + +*هذه الورقة هي دراسة لمفاضلات الأداء والكفاءة في النماذج المُدربة مسبقًا للتعرف التلقائي على الكلام (ASR). نركز على Wav2vec 2.0، ونقوم بتنظيم عدة تصاميم معمارية تؤثر على أداء النموذج وكفاءته. من خلال جمع جميع ملاحظاتنا، نقدم SEW (Squeezed and Efficient Wav2vec)، وهو تصميم معماري للنموذج المُدرب مسبقًا مع تحسينات كبيرة على أبعاد الأداء والكفاءة عبر مجموعة متنوعة من إعدادات التدريب. على سبيل المثال، في إعداد التدريب شبه المُشرف على LibriSpeech باستخدام 100 ساعة و960 ساعة، يحقق SEW تسريعًا في الاستدلال يبلغ 1.9 مرة مقارنة بـ Wav2vec 2.0، مع انخفاض نسبته 13.5% في معدل خطأ الكلمة. وبزمن استدلال مماثل، يقلل SEW من معدل خطأ الكلمة بنسبة 25-50% عبر أحجام نماذج مختلفة.* + +تمت المساهمة بهذا النموذج من قبل [anton-l](https://huggingface.co/anton-l). + +## نصائح الاستخدام + +- SEW-D هو نموذج كلام يقبل مصفوفة أرقام عشرية مطابقة للموجة الصوتية الخام لإشارة الكلام. + +- يتم ضبط دقة SEWDForCTC باستخدام التصنيف الزمني للاتصال (CTC)، لذلك يجب فك تشفير إخراج النموذج باستخدام [`Wav2Vec2CTCTokenizer`]. + +## الموارد + +- [دليل مهام التصنيف الصوتي](../tasks/audio_classification) + +- [دليل مهام التعرف التلقائي على الكلام (ASR)](../tasks/asr) + +## SEWDConfig + +[[autodoc]] SEWDConfig + +## SEWDModel + +[[autodoc]] SEWDModel + +- forward + +## SEWDForCTC + +[[autodoc]] SEWDForCTC + +- forward + +## SEWDForSequenceClassification + +[[autodoc]] SEWDForSequenceClassification + +- forward \ No newline at end of file From 13dd3f3b65626065a725c0131689a7908e62a7b0 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:20 +0300 Subject: [PATCH 571/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/sew.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/sew.md | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/source/ar/model_doc/sew.md diff --git a/docs/source/ar/model_doc/sew.md b/docs/source/ar/model_doc/sew.md new file mode 100644 index 00000000000000..ce6840868474e1 --- /dev/null +++ b/docs/source/ar/model_doc/sew.md @@ -0,0 +1,45 @@ +# SEW + +## نظرة عامة + +اقترح SEW (Squeezed and Efficient Wav2Vec) في ورقة "Performance-Efficiency Trade-offs in Unsupervised Pre-training for Speech Recognition" بواسطة Felix Wu وKwangyoun Kim وJing Pan وKyu Han وKilian Q. Weinberger وYoav Artzi. + +ملخص الورقة هو كما يلي: + +*هذه الورقة هي دراسة لمقايضات الأداء والكفاءة في النماذج مسبقة التدريب للتعرف التلقائي على الكلام (ASR). نركز على wav2vec 2.0، ونقوم بتنظيم عدة تصاميم معمارية تؤثر على أداء النموذج وكفاءته. من خلال جمع جميع ملاحظاتنا، نقدم SEW (Squeezed and Efficient Wav2vec)، وهو تصميم معماري لنماذج مسبقة التدريب مع تحسينات كبيرة على أبعاد الأداء والكفاءة عبر مجموعة متنوعة من إعدادات التدريب. على سبيل المثال، في إعداد التدريب شبه الخاضع للإشراف 100h-960h على LibriSpeech، يحقق SEW تسريعًا في الاستدلال يبلغ 1.9x مقارنة بـ wav2vec 2.0، مع انخفاض نسبته 13.5% في معدل خطأ الكلمة. وبزمن استدلال مماثل، يقلل SEW من معدل خطأ الكلمة بنسبة 25-50% عبر أحجام نماذج مختلفة.* + +تمت المساهمة بهذا النموذج من قبل [anton-l](https://huggingface.co/anton-l). + +## نصائح الاستخدام + +- SEW هو نموذج كلام يقبل مصفوفة عائمة تتوافق مع الشكل الموجي الخام لإشارة الكلام. + +- يتم ضبط دقة SEWForCTC باستخدام التصنيف الزمني للاتصال (CTC)، لذلك يجب فك تشفير إخراج النموذج باستخدام [`Wav2Vec2CTCTokenizer`]. + +## الموارد + +- [دليل مهام التصنيف الصوتي](../tasks/audio_classification) + +- [دليل مهام التعرف التلقائي على الكلام](../tasks/asr) + +## SEWConfig + +[[autodoc]] SEWConfig + +## SEWModel + +[[autodoc]] SEWModel + +- forward + +## SEWForCTC + +[[autodoc]] SEWForCTC + +- forward + +## SEWForSequenceClassification + +[[autodoc]] SEWForSequenceClassification + +- forward \ No newline at end of file From d9a749fa5d1d9d52923f604c2e611430c162b6a6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:22 +0300 Subject: [PATCH 572/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/siglip.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/siglip.md | 149 +++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 docs/source/ar/model_doc/siglip.md diff --git a/docs/source/ar/model_doc/siglip.md b/docs/source/ar/model_doc/siglip.md new file mode 100644 index 00000000000000..b7c04b1debd6e0 --- /dev/null +++ b/docs/source/ar/model_doc/siglip.md @@ -0,0 +1,149 @@ +# SigLIP + +## نظرة عامة +تم اقتراح نموذج SigLIP في [Sigmoid Loss for Language Image Pre-Training](https://arxiv.org/abs/2303.15343) بواسطة Xiaohua Zhai وBasil Mustafa وAlexander Kolesnikov وLucas Beyer. ويقترح SigLIP استبدال دالة الخسارة المستخدمة في [CLIP](clip) بخسارة Sigmoid ثنائية بسيطة. ويؤدي ذلك إلى تحسين الأداء من حيث دقة التصنيف بدون الإشراف على ImageNet. + +مقدمة الورقة البحثية هي كما يلي: + +*نقترح خسارة Sigmoid ثنائية بسيطة للتعلم التمهيدي للغة والصورة (SigLIP). على عكس التعلم التمييزي القياسي مع التطبيع Softmax، تعمل خسارة Sigmoid فقط على أزواج الصور والنصوص ولا تتطلب رؤية شاملة للتشابهات الثنائية لأغراض التطبيع. تسمح خسارة Sigmoid أيضًا بزيادة حجم الدفعة في نفس الوقت، مع تحسين الأداء عند أحجام دفعات أصغر. وبالاقتران مع ضبط الصورة المقفلة، باستخدام أربع شرائح TPUv4 فقط، نقوم بتدريب نموذج SigLiT يحقق دقة 84.5٪ على ImageNet بدون إشراف في يومين. كما يسمح فصل حجم الدفعة عن الخسارة لدراسة تأثير الأمثلة مقابل الأزواج ونسبة السلبيات إلى الإيجابيات. وأخيرًا، نقوم بدفع حجم الدفعة إلى أقصى حد، حتى مليون، ونجد أن فوائد زيادة حجم الدفعة تتلاشى بسرعة، حيث يكون حجم الدفعة المعقول 32 ألفًا كافيًا.* + +## نصائح الاستخدام + +- استخدام SigLIP مشابه لـ [CLIP](clip). الفرق الرئيسي هو خسارة التدريب، والتي لا تتطلب رؤية شاملة لجميع التشابهات الثنائية للصور والنصوص داخل دفعة. يجب تطبيق دالة التنشيط Sigmoid على logits، بدلاً من Softmax. + +- لا يتم دعم التدريب بعد. إذا كنت ترغب في ضبط نموذج SigLIP أو التدريب من الصفر، راجع دالة الخسارة من [OpenCLIP](https://github.com/mlfoundations/open_clip/blob/73ad04ae7fb93ede1c02dc9040a828634cb1edf1/src/open_clip/loss.py#L307)، والتي تستفيد من مختلف المرافق `torch.distributed`. + +- عند استخدام [`SiglipTokenizer`] أو [`SiglipProcessor`] المستقلين، تأكد من تمرير `padding="max_length"` حيث تم تدريب النموذج بهذه الطريقة. + + + + نتائج تقييم SigLIP مقارنة بـ CLIP. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/big_vision/tree/main). + +## مثال الاستخدام + +هناك طريقتان رئيسيتان لاستخدام SigLIP: إما باستخدام واجهة برمجة التطبيقات الخاصة بالخطوط الأنابيب، والتي تُجرِّد كل التعقيد من أجلك، أو باستخدام فئة `SiglipModel` بنفسك. + +### واجهة برمجة التطبيقات الخاصة بالخطوط الأنابيب + +تسمح واجهة برمجة التطبيقات باستخدام النموذج في بضع سطور من الكود: + +```python +>>> from transformers import pipeline +>>> from PIL import Image +>>> import requests + +>>> # تحميل الأنبوب +>>> image_classifier = pipeline(task="zero-shot-image-classification", model="google/siglip-base-patch16-224") + +>>> # تحميل الصورة +>>> url = 'http://images.cocodataset.org/val2017/000000039769.jpg' +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> # الاستنتاج +>>> outputs = image_classifier(image, candidate_labels=["2 cats", "a plane", "a remote"]) +>>> outputs = [{"score": round(output["score"], 4), "label": output["label"] } for output in outputs] +>>> print(outputs) +[{'score': 0.1979, 'label': '2 cats'}, {'score': 0.0, 'label': 'a remote'}, {'score': 0.0, 'label': 'a plane'}] +``` + +### استخدام النموذج بنفسك + +إذا كنت تريد القيام بالمعالجة المسبقة واللاحقة بنفسك، فهذا هو ما يجب فعله: + +```python +>>> from PIL import Image +>>> import requests +>>> from transformers import AutoProcessor, AutoModel +>>> import torch + +>>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224") +>>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224") + +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) + +>>> texts = ["a photo of 2 cats", "a photo of 2 dogs"] +>>> # من المهم: نمرر `padding=max_length` حيث تم تدريب النموذج بهذه الطريقة +>>> inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt") + +>>> with torch.no_grad(): +... outputs = model(**inputs) + +>>> logits_per_image = outputs.logits_per_image +>>> probs = torch.sigmoid(logits_per_image) # هذه هي الاحتمالات +>>> print(f"{probs[0][0]:.1%} احتمال أن تكون الصورة 0 هي '{texts[0]}'") +31.9% احتمال أن تكون الصورة 0 هي 'a photo of 2 cats' +``` + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام SigLIP. + +- [دليل مهام التصنيف الصوري بدون إشراف](../tasks/zero_shot_image_classification_md) + +- يمكن العثور على دفاتر الملاحظات التجريبية لـ SigLIP [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/SigLIP). 🌎 + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## SiglipConfig + +[[autodoc]] SiglipConfig + +- from_text_vision_configs + +## SiglipTextConfig + +[[autodoc]] SiglipTextConfig + +## SiglipVisionConfig + +[[autodoc]] SiglipVisionConfig + +## SiglipTokenizer + +[[autodoc]] SiglipTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## SiglipImageProcessor + +[[autodoc]] SiglipImageProcessor + +- preprocess + +## SiglipProcessor + +[[autodoc]] SiglipProcessor + +## SiglipModel + +[[autodoc]] SiglipModel + +- forward +- get_text_features +- get_image_features + +## SiglipTextModel + +[[autodoc]] SiglipTextModel + +- forward + +## SiglipVisionModel + +[[autodoc]] SiglipVisionModel + +- forward + +## SiglipForImageClassification + +[[autodoc]] SiglipForImageClassification + +- forward \ No newline at end of file From 37cffebc170edbdc2d5486b5803a6adb45e7f95d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:23 +0300 Subject: [PATCH 573/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/speech-encoder-decoder.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/speech-encoder-decoder.md | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/source/ar/model_doc/speech-encoder-decoder.md diff --git a/docs/source/ar/model_doc/speech-encoder-decoder.md b/docs/source/ar/model_doc/speech-encoder-decoder.md new file mode 100644 index 00000000000000..9015e27cd94dfe --- /dev/null +++ b/docs/source/ar/model_doc/speech-encoder-decoder.md @@ -0,0 +1,117 @@ +# نماذج الترميز فك الترميز الصوتي + +يمكن استخدام [`SpeechEncoderDecoderModel`] لتهيئة نموذج تحويل الكلام إلى نص باستخدام أي نموذج ترميز ذاتي التعلم مسبقًا للكلام كترميز (*e.g.* [Wav2Vec2](wav2vec2)، [Hubert](hubert)) وأي نموذج توليدي مسبق التدريب كفك تشفير. + +وقد تم إثبات فعالية تهيئة النماذج التسلسلية للكلام إلى تسلسلات نصية باستخدام نقاط تفتيش مسبقة التدريب للتعرف على الكلام وترجمته على سبيل المثال في [Large-Scale Self- and Semi-Supervised Learning for Speech Translation](https://arxiv.org/abs/2104.06678) بواسطة Changhan Wang وAnne Wu وJuan Pino وAlexei Baevski وMichael Auli وAlexis Conneau. + +يمكن الاطلاع على مثال حول كيفية استخدام [`SpeechEncoderDecoderModel`] للاستنتاج في [Speech2Text2](speech_to_text_2). + +## تهيئة `SpeechEncoderDecoderModel` بشكل عشوائي من تكوينات النموذج. + +يمكن تهيئة [`SpeechEncoderDecoderModel`] بشكل عشوائي من تكوين الترميز وفك الترميز. في المثال التالي، نوضح كيفية القيام بذلك باستخدام تكوين [`Wav2Vec2Model`] الافتراضي للترميز +وتكوين [`BertForCausalLM`] الافتراضي لفك الترميز. + +```python +>>> from transformers import BertConfig, Wav2Vec2Config, SpeechEncoderDecoderConfig, SpeechEncoderDecoderModel + +>>> config_encoder = Wav2Vec2Config() +>>> config_decoder = BertConfig() + +>>> config = SpeechEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder) +>>> model = SpeechEncoderDecoderModel(config=config) +``` + +## تهيئة `SpeechEncoderDecoderModel` من ترميز وفك تشفير مُدرَّب مسبقًا. + +يمكن تهيئة [`SpeechEncoderDecoderModel`] من نقطة تفتيش ترميز مُدرَّب مسبقًا ونقطة تفتيش فك تشفير مُدرَّب مسبقًا. لاحظ أن أي نموذج كلام قائم على Transformer، مثل [Wav2Vec2](wav2vec2) أو [Hubert](hubert) يمكن أن يعمل كترميز، في حين يمكن استخدام كل من النماذج الذاتية الترميز المُدرَّبة مسبقًا، مثل BERT، ونماذج اللغة السببية المُدرَّبة مسبقًا، مثل GPT2، بالإضافة إلى الجزء المدرَّب مسبقًا من فك تشفير نماذج التسلسل إلى تسلسل، مثل فك تشفير BART، كفك تشفير. + +اعتمادًا على البنية التي تختارها كفك تشفير، قد يتم تهيئة طبقات الاهتمام المتقاطع بشكل عشوائي. + +تتطلب تهيئة [`SpeechEncoderDecoderModel`] من نقطة تفتيش ترميز وفك تشفير مُدرَّب مسبقًا تهيئة النموذج الدقيقة على مهمة أسفل النهر، كما هو موضح في [منشور المدونة *Warm-starting-encoder-decoder*](https://huggingface.co/blog/warm-starting-encoder-decoder). + +للقيام بذلك، توفر فئة `SpeechEncoderDecoderModel` طريقة [`SpeechEncoderDecoderModel.from_encoder_decoder_pretrained`]. + +```python +>>> from transformers import SpeechEncoderDecoderModel + +>>> model = SpeechEncoderDecoderModel.from_encoder_decoder_pretrained( +... "facebook/hubert-large-ll60k", "google-bert/bert-base-uncased" +... ) +``` + +## تحميل نقطة تفتيش `SpeechEncoderDecoderModel` موجودة والقيام بالاستدلال. + +لتحميل نقاط تفتيش مُدرَّبة دقيقة من فئة `SpeechEncoderDecoderModel`، توفر [`SpeechEncoderDecoderModel`] طريقة `from_pretrained(...)` مثل أي بنية نموذج أخرى في Transformers. + +للقيام بالاستدلال، يمكنك استخدام طريقة [`generate`]، والتي تسمح بتوليد النص بشكل تلقائي. تدعم هذه الطريقة أشكالًا مختلفة من فك التشفير، مثل الجشع، وبحث الشعاع، وأخذ العينات متعددة الحدود. + +```python +>>> from transformers import Wav2Vec2Processor, SpeechEncoderDecoderModel +>>> from datasets import load_dataset +>>> import torch + +>>> # تحميل نموذج ترجمة كلام مُدرَّب دقيق ومعالج مطابق +>>> model = SpeechEncoderDecoderModel.from_pretrained("facebook/wav2vec2-xls-r-300m-en-to-15") +>>> processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-xls-r-300m-en-to-15") + +>>> # لنقم بالاستدلال على قطعة من الكلام باللغة الإنجليزية (والتي سنترجمها إلى الألمانية) +>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +>>> input_values = processor(ds[0]["audio"]["array"], return_tensors="pt").input_values + +>>> # توليد النسخ النصي تلقائيًا (يستخدم فك التشفير الجشع بشكل افتراضي) +>>> generated_ids = model.generate(input_values) +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] +>>> print(generated_text) +Mr. Quilter ist der Apostel der Mittelschicht und wir freuen uns, sein Evangelium willkommen heißen zu können. +``` + +## التدريب + +بمجرد إنشاء النموذج، يمكن ضبطه بشكل دقيق مثل BART أو T5 أو أي نموذج ترميز وفك تشفير آخر على مجموعة بيانات من أزواج (كلام، نص). + +كما ترى، يلزم إدخالان فقط للنموذج من أجل حساب الخسارة: `input_values` (وهي إدخالات الكلام) و`labels` (وهي `input_ids` للتسلسل المستهدف المشفر). + +```python +>>> from transformers import AutoTokenizer, AutoFeatureExtractor, SpeechEncoderDecoderModel +>>> from datasets import load_dataset + +>>> encoder_id = "facebook/wav2vec2-base-960h" # ترميز النموذج الصوتي +>>> decoder_id = "google-bert/bert-base-uncased" # فك تشفير النص + +>>> feature_extractor = AutoFeatureExtractor.from_pretrained(encoder_id) +>>> tokenizer = AutoTokenizer.from_pretrained(decoder_id) +>>> # دمج الترميز المُدرَّب مسبقًا وفك الترميز المُدرَّب مسبقًا لتشكيل نموذج تسلسل إلى تسلسل +>>> model = SpeechEncoderDecoderModel.from_encoder_decoder_pretrained(encoder_id, decoder_id) + +>>> model.config.decoder_start_token_id = tokenizer.cls_token_ +>>> model.config.pad_token_id = tokenizer.pad_token_id + +>>> # تحميل إدخال صوتي ومعالجته مسبقًا (تطبيع المتوسط/الانحراف المعياري إلى 0/1) +>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +>>> input_values = feature_extractor(ds[0]["audio"]["array"], return_tensors="pt").input_values + +>>> # تحميل النسخ النصي المقابل له وتشفيره لإنشاء العلامات +>>> labels = tokenizer(ds[0]["text"], return_tensors="pt").input_ids + +>>> # تقوم دالة التقديم تلقائيًا بإنشاء decoder_input_ids الصحيحة +>>> loss = model(input_values=input_values, labels=labels).loss +>>> loss.backward() +``` + +## SpeechEncoderDecoderConfig + +[[autodoc]] SpeechEncoderDecoderConfig + +## SpeechEncoderDecoderModel + +[[autodoc]] SpeechEncoderDecoderModel + +- forward +- from_encoder_decoder_pretrained + +## FlaxSpeechEncoderDecoderModel + +[[autodoc]] FlaxSpeechEncoderDecoderModel + +- __call__ +- from_encoder_decoder_pretrained \ No newline at end of file From 30997d5c614fa5baff8cbf734c7a29ed6a6d9b23 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:25 +0300 Subject: [PATCH 574/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/speecht5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/speecht5.md | 87 ++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 docs/source/ar/model_doc/speecht5.md diff --git a/docs/source/ar/model_doc/speecht5.md b/docs/source/ar/model_doc/speecht5.md new file mode 100644 index 00000000000000..083fb4365dff7b --- /dev/null +++ b/docs/source/ar/model_doc/speecht5.md @@ -0,0 +1,87 @@ +# SpeechT5 + +## نظرة عامة + +اقترح نموذج SpeechT5 في بحث "SpeechT5: Unified-Modal Encoder-Decoder Pre-Training for Spoken Language Processing" من قبل Junyi Ao وآخرون. + +ملخص البحث هو كما يلي: + +*انطلاقًا من نجاح نموذج T5 (Text-To-Text Transfer Transformer) في معالجة اللغات الطبيعية المدَربة مسبقًا، نقترح إطار عمل SpeechT5 الموحد للطريقة الذي يستكشف التدريب المسبق للترميز فك الترميز للتعلم الذاتي التمثيل اللغوي المنطوق/المكتوب. ويتكون إطار عمل SpeechT5 من شبكة ترميز وفك ترميز مشتركة وست شبكات محددة للطريقة (منطوقة/مكتوبة) للمراحل السابقة/اللاحقة. وبعد معالجة المدخلات المنطوقة/المكتوبة من خلال المراحل السابقة، تقوم شبكة الترميز وفك الترميز المشتركة بنمذجة التحويل من سلسلة إلى أخرى، ثم تقوم المراحل اللاحقة بتوليد المخرجات في طريقة الكلام/النص بناءً على مخرجات فك الترميز. وباستخدام البيانات الكبيرة غير الموسومة للكلام والنص، نقوم بتدريب SpeechT5 مسبقًا لتعلم تمثيل موحد للطريقة، على أمل تحسين قدرة النمذجة لكل من الكلام والنص. ولمواءمة المعلومات النصية والمنطوقة في هذه المساحة الدلالية الموحدة، نقترح نهجًا للتحليل الكمي متعدد الطرق الذي يخلط عشوائيًا حالات الكلام/النص مع الوحدات الكامنة كوسيط بين الترميز وفك الترميز. وتظهر التقييمات الشاملة تفوق إطار عمل SpeechT5 المقترح في مجموعة واسعة من مهام معالجة اللغة المنطوقة، بما في ذلك التعرف التلقائي على الكلام، وتوليف الكلام، وترجمة الكلام، وتحويل الصوت، وتحسين الكلام، والتعرف على المتحدث.* + +تمت المساهمة بهذا النموذج من قبل [Matthijs](https://huggingface.co/Matthijs). ويمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/SpeechT5). + +## SpeechT5Config + +[[autodoc]] SpeechT5Config + +## SpeechT5HifiGanConfig + +[[autodoc]] SpeechT5HifiGanConfig + +## SpeechT5Tokenizer + +[[autodoc]] SpeechT5Tokenizer + +- __call__ + +- save_vocabulary + +- decode + +- batch_decode + +## SpeechT5FeatureExtractor + +[[autodoc]] SpeechT5FeatureExtractor + +- __call__ + +## SpeechT5Processor + +[[autodoc]] SpeechT5Processor + +- __call__ + +- pad + +- from_pretrained + +- save_pretrained + +- batch_decode + +- decode + +## SpeechT5Model + +[[autodoc]] SpeechT5Model + +- forward + +## SpeechT5ForSpeechToText + +[[autodoc]] SpeechT5ForSpeechToText + +- forward + +## SpeechT5ForTextToSpeech + +[[autodoc]] SpeechT5ForTextToSpeech + +- forward + +- generate + +## SpeechT5ForSpeechToSpeech + +[[autodoc]] SpeechT5ForSpeechToSpeech + +- forward + +- generate_speech + +## SpeechT5HifiGan + +[[autodoc]] SpeechT5HifiGan + +- forward \ No newline at end of file From 0e796c4a31c75e2ba28d419563efb00b5b74a9d7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:27 +0300 Subject: [PATCH 575/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/speech=5Fto=5Ftext.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/speech_to_text.md | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 docs/source/ar/model_doc/speech_to_text.md diff --git a/docs/source/ar/model_doc/speech_to_text.md b/docs/source/ar/model_doc/speech_to_text.md new file mode 100644 index 00000000000000..b08bf16bffc74c --- /dev/null +++ b/docs/source/ar/model_doc/speech_to_text.md @@ -0,0 +1,126 @@ +# Speech2Text + +## نظرة عامة +تم اقتراح نموذج Speech2Text في [fairseq S2T: Fast Speech-to-Text Modeling with fairseq](https://arxiv.org/abs/2010.05171) بواسطة Changhan Wang, Yun Tang, Xutai Ma, Anne Wu, Dmytro Okhonko, Juan Pino. وهو عبارة عن نموذج تسلسل إلى تسلسل (ترميز فك الترميز) يعتمد على المحول المصمم للتعرف التلقائي على الكلام (ASR) وترجمة الكلام (ST). يستخدم مخفضًا للتعرّف على الشكل لتقصير طول إدخالات الكلام بمقدار 3/4 قبل إدخالها في الترميز. يتم تدريب النموذج باستخدام خسارة ذاتي الارتباط عبر الإنتروبيا القياسية ويولد النسخ/الترجمات ذاتيًا. تم ضبط نموذج Speech2Text بشكل دقيق على العديد من مجموعات البيانات لـ ASR و ST: [LibriSpeech](http://www.openslr.org/12)، [CoVoST 2](https://github.com/facebookresearch/covost)، [MuST-C](https://ict.fbk.eu/must-c/). + +تمت المساهمة بهذا النموذج من قبل [valhalla](https://huggingface.co/valhalla). يمكن العثور على الكود الأصلي [هنا](https://github.com/pytorch/fairseq/tree/master/examples/speech_to_text). + +## الاستنتاج +Speech2Text هو نموذج كلام يقبل Tensor عائمًا لميزات بنك التصفية اللوغاريتمية المستخرجة من إشارة الكلام. إنه نموذج تسلسل إلى تسلسل يعتمد على المحول، لذلك يتم إنشاء النسخ/الترجمات ذاتيًا. يمكن استخدام طريقة `generate()` للاستدلال. + +تعد فئة [`Speech2TextFeatureExtractor`] مسؤولة عن استخراج ميزات بنك التصفية اللوغاريتمية. يجمع [`Speech2TextProcessor`] [`Speech2TextFeatureExtractor`] و [`Speech2TextTokenizer`] في مثيل واحد لاستخراج ميزات الإدخال وفك تشفير معرّفات الرموز المتوقعة. + +يعتمد المستخرج المميز على `torchaudio` ويعتمد الرمز المميز على `sentencepiece`، لذا تأكد من تثبيت هذه الحزم قبل تشغيل الأمثلة. يمكنك تثبيت تلك الحزم كاعتمادات كلام إضافية مع `pip install transformers"[speech, sentencepiece]"` أو تثبيت الحزم بشكل منفصل باستخدام `pip install torchaudio sentencepiece`. يتطلب `torchaudio` أيضًا الإصدار التنموي من حزمة [libsndfile](http://www.mega-nerd.com/libsndfile/) والتي يمكن تثبيتها عبر مدير حزم النظام. على Ubuntu، يمكن تثبيته على النحو التالي: `apt install libsndfile1-dev` + +- التعرف على الكلام وترجمة الكلام + +```python +>>> import torch +>>> from transformers import Speech2TextProcessor, Speech2TextForConditionalGeneration +>>> from datasets import load_dataset + +>>> model = Speech2TextForConditionalGeneration.from_pretrained("facebook/s2t-small-librispeech-asr") +>>> processor = Speech2TextProcessor.from_pretrained("facebook/s2t-small-librispeech-asr") + + +>>> ds = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation") + +>>> inputs = processor(ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt") +>>> generated_ids = model.generate(inputs["input_features"], attention_mask=inputs["attention_mask"]) + +>>> transcription = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> transcription +['mister quilter is the apostle of the middle classes and we are glad to welcome his gospel'] +``` + +- ترجمة الكلام متعددة اللغات + +بالنسبة لنماذج ترجمة الكلام متعددة اللغات، يتم استخدام `eos_token_id` كـ `decoder_start_token_id` +ويتم فرض معرف لغة الهدف كرابع رمز مولد. لفرض معرف لغة الهدف كرابع رمز مولد، قم بتمرير معلمة `forced_bos_token_id` إلى طريقة `generate()`. يوضح المثال التالي كيفية ترجمة الكلام باللغة الإنجليزية إلى نص باللغة الفرنسية باستخدام نقطة تفتيش *facebook/s2t-medium-mustc-multilingual-st*. + +```python +>>> import torch +>>> from transformers import Speech2TextProcessor, Speech2TextForConditionalGeneration +>>> from datasets import load_dataset + +>>> model = Speech2TextForConditionalGeneration.from_pretrained("facebook/s2t-medium-mustc-multilingual-st") +>>> processor = Speech2TextProcessor.from_pretrained("facebook/s2t-medium-mustc-multilingual-st") + +>>> ds = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation") + +>>> inputs = processor(ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt") +>>> generated_ids = model.generate( +... inputs["input_features"], +... attention_mask=inputs["attention_mask"], +... forced_bos_token_id=processor.tokenizer.lang_code_to_id["fr"], +... ) + +>>> translation = processor.batch_decode(generated_ids, skip_special_tokens=True) +>>> translation +["(Vidéo) Si M. Kilder est l'apossible des classes moyennes, et nous sommes heureux d'être accueillis dans son évangile."] +``` + +راجع [نموذج المركز](https://huggingface.co/models؟filter=speech_to_text) للبحث عن نقاط تفتيش Speech2Text. + +## Speech2TextConfig + +[[autodoc]] Speech2TextConfig + +## Speech2TextTokenizer + +[[autodoc]] Speech2TextTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## Speech2TextFeatureExtractor + +[[autodoc]] Speech2TextFeatureExtractor + +- __call__ + +## Speech2TextProcessor + +[[autodoc]] Speech2TextProcessor + +- __call__ +- from_pretrained +- save_pretrained +- batch_decode +- decode + + + + +## Speech2TextModel + +[[autodoc]] Speech2TextModel + +- forward + +## Speech2TextForConditionalGeneration + +[[autodoc]] Speech2TextForConditionalGeneration + +- forward + + + + +## TFSpeech2TextModel + +[[autodoc]] TFSpeech2TextModel + +- call + +## TFSpeech2TextForConditionalGeneration + +[[autodoc]] TFSpeech2TextForConditionalGeneration + +- call + + + + \ No newline at end of file From 7df7a8c01ecb94657a26217070e983f1b02599bc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:29 +0300 Subject: [PATCH 576/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/speech=5Fto=5Ftext=5F2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/speech_to_text_2.md | 104 +++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 docs/source/ar/model_doc/speech_to_text_2.md diff --git a/docs/source/ar/model_doc/speech_to_text_2.md b/docs/source/ar/model_doc/speech_to_text_2.md new file mode 100644 index 00000000000000..105787e8b364f6 --- /dev/null +++ b/docs/source/ar/model_doc/speech_to_text_2.md @@ -0,0 +1,104 @@ +# Speech2Text2 + +> **ملاحظة:** هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب (PRs) جديدة لتغيير شفرته. إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + +## نظرة عامة + +يُستخدم نموذج Speech2Text2 مع [Wav2Vec2](wav2vec2) لنماذج ترجمة الكلام المقترحة في ورقة "Large-Scale Self- and Semi-Supervised Learning for Speech Translation" من تأليف Changhan Wang وAnne Wu وJuan Pino وAlexei Baevski وMichael Auli وAlexis Conneau. + +Speech2Text2 هو نموذج محول *فقط للترميز* يمكن استخدامه مع أي ترميز صوتي *فقط*، مثل [Wav2Vec2](wav2vec2) أو [HuBERT](hubert) لمهام تحويل الكلام إلى نص. يرجى الرجوع إلى فئة [SpeechEncoderDecoder](speech-encoder-decoder) لمعرفة كيفية دمج Speech2Text2 مع أي نموذج ترميز صوتي *فقط*. + +تمت المساهمة بهذا النموذج من قبل [Patrick von Platen](https://huggingface.co/patrickvonplaten). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/pytorch/fairseq/blob/1f7ef9ed1e1061f8c7f88f8b94c7186834398690/fairseq/models/wav2vec/wav2vec2_asr.py#L266). + +## نصائح الاستخدام + +- يحقق Speech2Text2 نتائج متقدمة على مجموعة بيانات CoVoST Speech Translation dataset. لمزيد من المعلومات، راجع [النماذج الرسمية](https://huggingface.co/models?other=speech2text2). +- يتم استخدام Speech2Text2 دائمًا ضمن إطار عمل [SpeechEncoderDecoder](speech-encoder-decoder). +- يعتمد مُرمز Speech2Text2 على [fastBPE](https://github.com/glample/fastBPE). + +## الاستنتاج + +يقبل نموذج [`SpeechEncoderDecoderModel`] في Speech2Text2 قيم الإدخال الموجي الخام من الكلام ويستخدم [`~generation.GenerationMixin.generate`] لترجمة الكلام المدخل بشكل تلقائي إلى اللغة المستهدفة. + +تكون فئة [`Wav2Vec2FeatureExtractor`] مسؤولة عن معالجة إدخال الكلام، ويقوم [`Speech2Text2Tokenizer`] بفك تشفير الرموز المولدة المستهدفة إلى سلسلة مستهدفة. وتعمل فئة [`Speech2Text2Processor`] على لف [`Wav2Vec2FeatureExtractor`] و [`Speech2Text2Tokenizer`] في مثيل واحد لاستخراج ميزات الإدخال وفك تشفير معرّفات الرموز المتوقعة. + +- ترجمة الكلام خطوة بخطوة + +```python +>>> import torch +>>> from transformers import Speech2Text2Processor, SpeechEncoderDecoderModel +>>> from datasets import load_dataset +>>> import soundfile as sf + +>>> model = SpeechEncoderDecoderModel.from_pretrained("facebook/s2t-wav2vec2-large-en-de") +>>> processor = Speech2Text2Processor.from_pretrained("facebook/s2t-wav2vec2-large-en-de") + + +>>> def map_to_array(batch): +... speech, _ = sf.read(batch["file"]) +... batch["speech"] = speech +... return batch + + +>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +>>> ds = ds.map(map_to_array) + +>>> inputs = processor(ds["speech"][0], sampling_rate=16_000, return_tensors="pt") +>>> generated_ids = model.generate(inputs=inputs["input_values"], attention_mask=inputs["attention_mask"]) + +>>> transcription = processor.batch_decode(generated_ids) +``` + +- ترجمة الكلام باستخدام خطوط الأنابيب + +يمكن أيضًا استخدام خط أنابيب التعرف التلقائي على الكلام لترجمة الكلام في بضع أسطر من التعليمات البرمجية + +```python +>>> from datasets import load_dataset +>>> from transformers import pipeline + +>>> librispeech_en = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +>>> asr = pipeline( +... "automatic-speech-recognition", +... model="facebook/s2t-wav2vec2-large-en-de", +... feature_extractor="facebook/s2t-wav2vec2-large-en-de", +... ) + +>>> translation_de = asr(librispeech_en[0]["file"]) +``` + +راجع [Model Hub](https://huggingface.co/models?filter=speech2text2) للبحث عن نقاط تفتيش Speech2Text2. + +## الموارد + +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) + +## Speech2Text2Config + +[[autodoc]] Speech2Text2Config + +## Speech2TextTokenizer + +[[autodoc]] Speech2Text2Tokenizer + +- batch_decode +- decode +- save_vocabulary + +## Speech2Text2Processor + +[[autodoc]] Speech2Text2Processor + +- __call__ +- from_pretrained +- save_pretrained +- batch_decode +- decode + +## Speech2Text2ForCausalLM + +[[autodoc]] Speech2Text2ForCausalLM + +- forward \ No newline at end of file From 5d01a8eb80da912a18381584b7a80d1cb516d3ba Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:31 +0300 Subject: [PATCH 577/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/splinter.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/splinter.md | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/source/ar/model_doc/splinter.md diff --git a/docs/source/ar/model_doc/splinter.md b/docs/source/ar/model_doc/splinter.md new file mode 100644 index 00000000000000..cb0a6d56622a0d --- /dev/null +++ b/docs/source/ar/model_doc/splinter.md @@ -0,0 +1,59 @@ +# Splinter + +## نظرة عامة +اقترح نموذج Splinter في [Few-Shot Question Answering by Pretraining Span Selection](https://arxiv.org/abs/2101.00438) بواسطة Ori Ram, Yuval Kirstain, Jonathan Berant, Amir Globerson, Omer Levy. Splinter هو محول للتشفير فقط (مشابه لـ BERT) تم تدريبه مسبقًا باستخدام مهمة اختيار النطاق المتكرر على مجموعة كبيرة من النصوص تتكون من Wikipedia وToronto Book Corpus. + +ملخص الورقة البحثية هو كما يلي: + +في العديد من معايير تقييم الإجابة على الأسئلة، وصلت النماذج التي تم تدريبها مسبقًا إلى مستوى أداء البشر من خلال الضبط الدقيق على ما يقرب من 100000 سؤال وجواب معنون. نستكشف إعدادًا أكثر واقعية، وهو الإعداد القائم على القليل من الأمثلة، حيث لا تتوفر سوى بضع مئات من الأمثلة التدريبية، ونلاحظ أن النماذج القياسية تؤدي أداءً ضعيفًا، مما يسلط الضوء على عدم التوافق بين أهداف التدريب الحالية والإجابة على الأسئلة. نقترح نظامًا جديدًا للتدريب المسبق مصممًا خصيصًا للإجابة على الأسئلة: اختيار النطاق المتكرر. بالنظر إلى فقرة تحتوي على مجموعات متعددة من النطاقات المتكررة، نقوم في كل مجموعة بقناع جميع النطاقات المتكررة باستثناء واحد، ونسأل النموذج لتحديد النطاق الصحيح في الفقرة لكل نطاق مقنع. يتم استبدال النطاقات المقنعة برمز خاص، يتم اعتباره كتمثيل للسؤال، والذي يتم استخدامه لاحقًا أثناء الضبط الدقيق لاختيار نطاق الإجابة. يحقق النموذج الناتج نتائج جيدة جدًا في العديد من معايير التقييم (على سبيل المثال، 72.7 F1 على SQuAD باستخدام 128 مثال تدريبي فقط)، مع الحفاظ على أداء تنافسي في إعداد الموارد العالية. + +تمت المساهمة بهذا النموذج من قبل [yuvalkirstain](https://huggingface.co/yuvalkirstain) و [oriram](https://huggingface.co/oriram). يمكن العثور على الكود الأصلي [هنا](https://github.com/oriram/splinter). + +## نصائح الاستخدام + +- تم تدريب Splinter للتنبؤ بنطاقات الإجابات المشروطة برمز [QUESTION] خاص. تقوم هذه الرموز بسياق التمثيلات الخاصة بالأسئلة المستخدمة للتنبؤ بالإجابات. تسمى هذه الطبقة QASS، وهي السلوك الافتراضي في فئة [`SplinterForQuestionAnswering`]. لذلك: + +- استخدم [`SplinterTokenizer`] (بدلاً من [`BertTokenizer`])، حيث يحتوي بالفعل على هذا الرمز الخاص. أيضًا، السلوك الافتراضي هو استخدام هذا الرمز عند إعطاء تسلسلين (على سبيل المثال، في نص *run_qa.py*). + +- إذا كنت تخطط لاستخدام Splinter خارج نص *run_qa.py*، يرجى مراعاة رمز السؤال - فقد يكون مهمًا لنجاح نموذجك، خاصة في إعداد القليل من الأمثلة. + +- يرجى ملاحظة وجود نقطتي تفتيش مختلفتين لكل حجم من Splinter. كلاهما متشابهان بشكل أساسي، باستثناء أن أحدهما يحتوي أيضًا على أوزان مدربة مسبقًا لطبقة QASS (*tau/splinter-base-qass* و *tau/splinter-large-qass*) ولا يحتوي الآخر (*tau/splinter-base* و *tau/splinter-large*). يتم ذلك لدعم تهيئة هذه الطبقة بشكل عشوائي عند الضبط الدقيق، حيث ثبت أنها تحقق نتائج أفضل لبعض الحالات في الورقة البحثية. + +## الموارد + +- [دليل مهام الإجابة على الأسئلة](../tasks/question-answering) + +## SplinterConfig + +[[autodoc]] SplinterConfig + +## SplinterTokenizer + +[[autodoc]] SplinterTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## SplinterTokenizerFast + +[[autodoc]] SplinterTokenizerFast + +## SplinterModel + +[[autodoc]] SplinterModel + +- forward + +## SplinterForQuestionAnswering + +[[autodoc]] SplinterForQuestionAnswering + +- forward + +## SplinterForPreTraining + +[[autodoc]] SplinterForPreTraining + +- forward \ No newline at end of file From 820ed73d8a3572ac426f4daaacd6b33b80be7c81 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:32 +0300 Subject: [PATCH 578/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/squeezebert.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/squeezebert.md | 75 +++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/source/ar/model_doc/squeezebert.md diff --git a/docs/source/ar/model_doc/squeezebert.md b/docs/source/ar/model_doc/squeezebert.md new file mode 100644 index 00000000000000..779beb7759d687 --- /dev/null +++ b/docs/source/ar/model_doc/squeezebert.md @@ -0,0 +1,75 @@ +# SqueezeBERT + +## نظرة عامة + +اقترح نموذج SqueezeBERT في [SqueezeBERT: ماذا يمكن لمعالجة اللغات الطبيعية أن تتعلم من رؤية الكمبيوتر حول كفاءة الشبكات العصبية؟](https://arxiv.org/abs/2006.11316) بواسطة Forrest N. Iandola و Albert E. Shaw و Ravi Krishna و Kurt W. Keutzer. إنه محول ثنائي الاتجاه مشابه لنموذج BERT. الفرق الرئيسي بين بنية BERT وبنية SqueezeBERT هو أن SqueezeBERT يستخدم [التقسيمات المجمعة](https://blog.yani.io/filter-group-tutorial) بدلاً من الطبقات المتصلة بالكامل لطبقات Q و K و V و FFN. + +الملخص من الورقة هو ما يلي: + +*يقرأ البشر ويكتبون مئات المليارات من الرسائل كل يوم. علاوة على ذلك، وبفضل توفر مجموعات البيانات الكبيرة وأنظمة الحوسبة والنماذج الأفضل للشبكات العصبية، حققت تقنية معالجة اللغات الطبيعية (NLP) تقدمًا كبيرًا في فهم هذه الرسائل وتدقيقها وإدارتها. وبالتالي، هناك فرصة كبيرة لنشر NLP في العديد من التطبيقات لمساعدة مستخدمي الويب والشبكات الاجتماعية والشركات. ونحن نعتبر الهواتف الذكية والأجهزة المحمولة الأخرى منصات أساسية لنشر نماذج NLP على نطاق واسع. ومع ذلك، فإن نماذج الشبكات العصبية NLP عالية الدقة اليوم مثل BERT و RoBERTa مكلفة للغاية من الناحية الحسابية، حيث تستغرق BERT-base 1.7 ثانية لتصنيف مقتطف نصي على هاتف Pixel 3 الذكي. في هذا العمل، نلاحظ أن الأساليب مثل التقسيمات المجمعة حققت تسريعًا كبيرًا لشبكات رؤية الكمبيوتر، ولكن العديد من هذه التقنيات لم يعتمد من قبل مصممي الشبكات العصبية NLP. نحن نوضح كيفية استبدال العديد من العمليات في طبقات الاهتمام الذاتي بالتقسيمات المجمعة، ونستخدم هذه التقنية في بنية شبكة جديدة تسمى SqueezeBERT، والتي تعمل بشكل أسرع 4.3x من BERT-base على Pixel 3 مع تحقيق دقة تنافسية على مجموعة اختبار GLUE. سيتم إصدار كود SqueezeBERT.* + +تمت المساهمة بهذا النموذج من قبل [forresti](https://huggingface.co/forresti). + +## نصائح الاستخدام + +- يستخدم SqueezeBERT تضمين الموضع المطلق، لذلك يُنصح عادةً بإضافة حشو إلى الإدخالات من اليمين بدلاً من اليسار. + +- يشبه SqueezeBERT نموذج BERT، وبالتالي يعتمد على هدف نمذجة اللغة المقنعة (MLM). لذلك، فهو فعال في التنبؤ بالرموز المميزة المقنعة وفي فهم اللغة الطبيعية بشكل عام، ولكنه ليس الأمثل لتوليد النصوص. النماذج التي تم تدريبها بهدف نمذجة اللغة السببية (CLM) أفضل في هذا الصدد. + +- للحصول على أفضل النتائج عند الضبط الدقيق لمهام تصنيف التسلسل، يوصى بالبدء من نقطة التحقق *squeezebert/squeezebert-mnli-headless*. + +## الموارد + +- [دليل مهام تصنيف النصوص](../tasks/sequence_classification) + +- [دليل مهام تصنيف الرموز](../tasks/token_classification) + +- [دليل مهام الإجابة على الأسئلة](../tasks/question_answering) + +- [دليل مهام نمذجة اللغة المقنعة](../tasks/masked_language_modeling) + +- [دليل مهام الاختيار المتعدد](../tasks/multiple_choice) + +## SqueezeBertConfig + +[[autodoc]] SqueezeBertConfig + +## SqueezeBertTokenizer + +[[autodoc]] SqueezeBertTokenizer + +- build_inputs_with_special_tokens + +- get_special_tokens_mask + +- create_token_type_ids_from_sequences + +- save_vocabulary + +## SqueezeBertTokenizerFast + +[[autodoc]] SqueezeBertTokenizerFast + +## SqueezeBertModel + +[[autodoc]] SqueezeBertModel + +## SqueezeBertForMaskedLM + +[[autodoc]] SqueezeBertForMaskedLM + +## SqueezeBertForSequenceClassification + +[[autodoc]] SqueezeBertForSequenceClassification + +## SqueezeBertForMultipleChoice + +[[autodoc]] SqueezeBertForMultipleChoice + +## SqueezeBertForTokenClassification + +[[autodoc]] SqueezeBertForTokenClassification + +## SqueezeBertForQuestionAnswering + +[[autodoc]] SqueezeBertForQuestionAnswering \ No newline at end of file From 0f06ad942a52cf972157ae23f61f4f80de8a0096 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:34 +0300 Subject: [PATCH 579/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/stablelm.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/stablelm.md | 86 ++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docs/source/ar/model_doc/stablelm.md diff --git a/docs/source/ar/model_doc/stablelm.md b/docs/source/ar/model_doc/stablelm.md new file mode 100644 index 00000000000000..8ddf970240e899 --- /dev/null +++ b/docs/source/ar/model_doc/stablelm.md @@ -0,0 +1,86 @@ +# StableLM + +## نظرة عامة +`StableLM 3B 4E1T` هو نموذج مقترح في ["StableLM 3B 4E1T": تقرير فني](https://stability.wandb.io/stability-llm/stable-lm/reports/StableLM-3B-4E1T--VmlldzoyMjU4?accessToken=u3zujipenkx5g7rtcj9qojjgxpconyjktjkli2po09nffrffdhhchq045vp0wyfo) بواسطة Stability AI وهو أول نموذج في سلسلة من النماذج اللغوية متعددة الفترات التدريبية. + +### تفاصيل النموذج +`StableLM 3B 4E1T` هو نموذج لغة أساسي يعتمد على فك التشفير فقط، تم تدريبه مسبقًا على تريليون رمز من مجموعات بيانات متنوعة باللغة الإنجليزية والرمز لأربع فترات. + +تعتمد بنية النموذج على محول مع تضمين موضع دوار جزئي، وتنشيط SwiGLU، وLayerNorm، وما إلى ذلك. + +نقدم أيضًا `StableLM Zephyr 3B`، وهو إصدار تمت تهيئته تعليميًا من النموذج ويمكن استخدامه لتطبيقات الدردشة. + +### نصائح الاستخدام +- البنية مماثلة لـ LLaMA ولكن مع تطبيق RoPE على 25% من أبعاد تضمين الرأس، وLayerNorm بدلاً من RMSNorm، وشروط انحياز QKV الاختيارية. +- تستخدم النماذج المستندة إلى `StableLM 3B 4E1T` نفس المحلل اللغوي كما في [`GPTNeoXTokenizerFast`]. + +يمكن العثور على `StableLM 3B 4E1T` و`StableLM Zephyr 3B` على [Huggingface Hub](https://huggingface.co/stabilityai) + +توضح مقتطفات الشفرة التالية كيفية استخدام `StableLM 3B 4E1T` للاستنتاج: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed +>>> device = "cuda" # الجهاز لتحميل النموذج عليه + +>>> set_seed(0) + +>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t") +>>> model = AutoModelForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t") +>>> model.to(device) # doctest: +IGNORE_RESULT + +>>> model_inputs = tokenizer("The weather is always wonderful in", return_tensors="pt").to(model.device) + +>>> generated_ids = model.generate(**model_inputs, max_length=32, do_sample=True) +>>> responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) +>>> responses +['The weather is always wonderful in Costa Rica, which makes it a prime destination for retirees. That’s where the Pensionado program comes in, offering'] +``` + +## الجمع بين StableLM وFlash Attention 2 +أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention v2. + +```bash +pip install -U flash-attn --no-build-isolation +``` + +تأكد أيضًا من أن أجهزتك متوافقة مع Flash-Attention 2. اقرأ المزيد عنها في الوثائق الرسمية لمستودع [`flash-attn`](https://github.com/Dao-AILab/flash-attention). ملاحظة: يجب تحميل نموذجك في نصف الدقة (على سبيل المثال `torch.bfloat16`). + +الآن، لتشغيل النموذج مع Flash Attention 2، راجع المقتطف أدناه: + +```python +>>> import torch +>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed +>>> device = "cuda" # الجهاز لتحميل النموذج عليه + +>>> set_seed(0) + +>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t") +>>> model = AutoModelForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2") # doctest: +SKIP +>>> model.to(device) # doctest: +SKIP + +>>> model_inputs = tokenizer("The weather is always wonderful in", return_tensors="pt").to(model.device) + +>>> generated_ids = model.generate(**model_inputs, max_length=32, do_sample=True) # docticast: +SKIP +>>> responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) # doctest: +SKIP +>>> responses # doctest: +SKIP +['The weather is always wonderful in Costa Rica, which makes it a prime destination for retirees. That’s where the Pensionado program comes in, offering'] +``` + +## StableLmConfig +[[autodoc]] StableLmConfig + +## StableLmModel +[[autodoc]] StableLmModel +- forward + +## StableLmForCausalLM +[[autodoc]] StableLmForCausalLM +- forward + +## StableLmForSequenceClassification +[[autodoc]] StableLmForSequenceClassification +- forward + +## StableLmForTokenClassification +[[autodoc]] StableLmForTokenClassification +- forward \ No newline at end of file From 3873426105a427890a8cc935b61fcc8dd996b989 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:36 +0300 Subject: [PATCH 580/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/starcoder2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/starcoder2.md | 57 ++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 docs/source/ar/model_doc/starcoder2.md diff --git a/docs/source/ar/model_doc/starcoder2.md b/docs/source/ar/model_doc/starcoder2.md new file mode 100644 index 00000000000000..96f8b37d7b5d8d --- /dev/null +++ b/docs/source/ar/model_doc/starcoder2.md @@ -0,0 +1,57 @@ +# StarCoder2 + +## نظرة عامة + +StarCoder2 هي عائلة من شهادات LLM المفتوحة للتعليمات البرمجية وتأتي بثلاثة أحجام مختلفة مع معلمات 3B و7B و15B. تم تدريب نموذج StarCoder2-15B الرائد على أكثر من 4 تريليون رمز وأكثر من 600 لغة برمجة من The Stack v2. تستخدم جميع النماذج انتباه الاستعلام المجمع، وهي نافذة سياق مكونة من 16,384 رمزًا مميزًا مع نافذة انزلاقية تبلغ 4,096 رمزًا مميزًا، وتم تدريبها باستخدام هدف ملء الوسط. تم إصدار النماذج مع الورقة البحثية [StarCoder 2 and The Stack v2: The Next Generation](https://arxiv.org/abs/2402.19173) بقلم أنطون لوزكوف، وريموند لي، ولبنى بن علال، وفيديريكو كاسانو، وجويل لامي- بوارييه، نعمان تازي، آو تانغ، دميترو بيكتار، جياوي ليو، يوشيانغ وي، تيانيانغ ليو، ماكس تيان، دينيس كوسيتكوف، آرثر زوكر، يونس بلكادا، زيجيان وانغ، تشيان ليو، ديمتري أبوخانوف، إندرانيل بول، تشوانغ لي، وين دينغ لي، ميجان ريسدال، جيا لي، جيان تشو، تيري يو تشو، إيفجيني زيلتونوجسكي، ني أوساي أوساي ديد، وينهاو يو، لوكاس كراوس، نامان جاين، ييشوان سو، شوانلي هي، مانان داي، إدواردو أباتي، ييكون تشاي، نيكلاس مونيجوف، شيانغرو تانغ، مهتشام أوبلوكولوف، كريستوفر أكيكي، مارك مارون، تشينغهاو مو، مايانك ميشرا، أليكس جو، بينيوان هوي، تري داو، أرميل زيباز، أوليفييه ديهيني، نيكولاس باتري، كانوين شو، جوليان ماكولي، هان هو، تورستن شولاك، سيباستيان باكيه ، جينيفر روبنسون، كارولين جين أندرسون، نيكولا تشابادوس، مصطفى باتواري، نيما تاجبخش، ياسين جيرنيت، كارلوس مونيوز فيرانديس، لينغمينغ تشانغ، شون هيوز، توماس وولف، أرجون جوها، لياندرو فون ويرا، وهارم دي فريس. + +ملخص الورقة هو ما يلي: + +> يقدم مشروع BigCode، وهو عبارة عن تعاون علمي مفتوح يركز على التطوير المسؤول لنماذج اللغات الكبيرة للبرمجة (Code LLMs)، StarCoder2. بالشراكة مع Software Heritage (SWH)، قمنا ببناء The Stack v2 على رأس المشاعات الرقمية لأرشيف التعليمات البرمجية المصدر الخاص بهم. إلى جانب مستودعات SWH التي تغطي 619 لغة برمجة، نختار بعناية مصادر بيانات أخرى عالية الجودة، مثل طلبات سحب GitHub، ودفاتر ملاحظات Kaggle، ووثائق التعليمات البرمجية. وينتج عن ذلك مجموعة تدريب أكبر بأربع مرات من مجموعة بيانات StarCoder الأولى. نقوم بتدريب نماذج StarCoder2 بمعلمات 3B و7B و15B على 3.3 إلى 4.3 تريليون رمز ونقوم بتقييمها بدقة بناءً على مجموعة شاملة من معايير Code LLM. لقد وجدنا أن نموذجنا الصغير، StarCoder2-3B، يتفوق في الأداء على Code LLMs الأخرى ذات الحجم المماثل في معظم المعايير، ويتفوق أيضًا على StarCoderBase-15B. يتفوق طرازنا الكبير، StarCoder2- 15B، بشكل كبير على النماذج الأخرى ذات الحجم المماثل. بالإضافة إلى ذلك، فهو يطابق أو يتفوق على CodeLlama-34B، وهو نموذج يزيد حجمه عن ضعف حجمه. على الرغم من أن DeepSeekCoder- 33B هو النموذج الأفضل أداءً في إكمال التعليمات البرمجية للغات عالية الموارد، إلا أننا نجد أن StarCoder2-15B يتفوق عليه في معايير الرياضيات واستدلال التعليمات البرمجية، بالإضافة إلى العديد من اللغات منخفضة الموارد. نحن نجعل أوزان النماذج متاحة بموجب ترخيص OpenRAIL ونضمن الشفافية الكاملة فيما يتعلق ببيانات التدريب من خلال إصدار معرفات SoftWare Heritage المستمرة (SWHIDs) لبيانات كود المصدر. +## رخصة + +تم ترخيص النماذج بموجب [اتفاقية ترخيص BigCode OpenRAIL-M v1](https://huggingface.co/spaces/bigcode/bigcode-model-license-agreement). + +## نصائح الاستخدام + +يمكن العثور على نماذج StarCoder2 في [HuggingFace hub](https://huggingface.co/collections/bigcode/starcoder2-65de6da6e87db3383572be1a). يمكنك العثور على بعض الأمثلة للاستدلال والضبط الدقيق في [GitHub repo] الخاص بـ [StarCoder2](https://github.com/bigcode-project/starcoder2). + +يمكن تنزيل نقاط التفتيش الجاهزة للاستخدام هذه واستخدامها عبر HuggingFace Hub: + +```python +>>> from transformers import AutoModelForCausalLM, AutoTokenizer + +>>> model = AutoModelForCausalLM.from_pretrained("bigcode/starcoder2-7b", device_map="auto") +>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b") + +>>> prompt = "def print_hello_world():" + +>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda") + +>>> generated_ids = model.generate(**model_inputs, max_new_tokens=10, do_sample=False) +>>> tokenizer.batch_decode(generated_ids)[0] +'def print_hello_world():\n print("Hello World!")\n\ndef print' +``` + +## Starcoder2Config + +[[autodoc]] Starcoder2Config + +## Starcoder2Model + +[[autodoc]] Starcoder2Model + - forward + +## Starcoder2ForCausalLM + +[[autodoc]] Starcoder2ForCausalLM + - forward + +## Starcoder2ForSequenceClassification + +[[autodoc]] Starcoder2ForSequenceClassification + - forward + +## Starcoder2ForTokenClassification + +[[autodoc]] Starcoder2ForTokenClassification + - forward \ No newline at end of file From a9e405a3c6743a19410e5a4ba2769ab290dc3275 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:38 +0300 Subject: [PATCH 581/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/superpoint.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/superpoint.md | 101 +++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/source/ar/model_doc/superpoint.md diff --git a/docs/source/ar/model_doc/superpoint.md b/docs/source/ar/model_doc/superpoint.md new file mode 100644 index 00000000000000..1e99fc0f31dd15 --- /dev/null +++ b/docs/source/ar/model_doc/superpoint.md @@ -0,0 +1,101 @@ +# SuperPoint + +## نظرة عامة + +اقتُرح نموذج SuperPoint في الورقة البحثية بعنوان "SuperPoint: Self-Supervised Interest Point Detection and Description" من قبل دانييل ديتون، وتوماش ماليسيويتش، وأندرو رابينوفيتش. + +هذا النموذج هو نتيجة لتدريب ذاتي الإشراف لشبكة متكاملة تمامًا للكشف عن نقاط الاهتمام ووصفها. ويمكن للنموذج اكتشاف نقاط الاهتمام التي تتكرر في تحويلات التشابه وتوفير وصف لكل نقطة. استخدام النموذج في حد ذاته محدود، ولكنه يمكن أن يستخدم كمستخلص للخصائص لمهمات أخرى مثل تقدير التشابه، ومطابقة الصور، وما إلى ذلك. + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +"تقدم هذه الورقة إطارًا ذاتي الإشراف لتدريب كاشفات نقاط الاهتمام والواصفات المناسبة لعدد كبير من مشكلات الهندسة متعددة المشاهدات في رؤية الكمبيوتر. وعلى عكس الشبكات العصبية المستندة إلى الرقع، فإن نموذجنا المتكامل تمامًا يعمل على الصور بالحجم الكامل ويحسب بشكل مشترك مواقع نقاط الاهتمام على مستوى البكسل والواصفات المرتبطة بها في تمرير أمامي واحد. نقدم التكيّف التشابهي، وهو نهج متعدد المقاييس ومتعدد التشابهات لتعزيز قابلية تكرار كشف نقاط الاهتمام وإجراء التكيّف عبر المجالات (على سبيل المثال، من المجال التخيلي إلى الواقعي). وعندما يتم تدريب نموذجنا على مجموعة بيانات الصور العامة MS-COCO باستخدام التكيّف التشابهي، فإنه يستطيع اكتشاف مجموعة أكثر ثراءً من نقاط الاهتمام بشكل متكرر مقارنة بالنموذج العميق المُكيّف مسبقًا وأي كاشف زوايا تقليدي آخر. ويحقق النظام النهائي نتائج رائدة في مجال تقدير التشابه على مجموعة بيانات HPatches عند مقارنته بنماذج LIFT وSIFT وORB." + +drawing + +نظرة عامة على SuperPoint. مأخوذة من الورقة البحثية الأصلية. + +## نصائح الاستخدام + +فيما يلي مثال سريع على استخدام النموذج للكشف عن نقاط الاهتمام في صورة: + +```python +from transformers import AutoImageProcessor, SuperPointForKeypointDetection +import torch +from PIL import Image +import requests + +url = "http://images.cocodataset.org/val2017/000000039769.jpg" +image = Image.open(requests.get(url, stream=True).raw) + +processor = AutoImageProcessor.from_pretrained("magic-leap-community/superpoint") +model = SuperPointForKeypointDetection.from_pretrained("magic-leap-community/superpoint") + +inputs = processor(image, return_tensors="pt") +outputs = model(**inputs) +``` + +تحتوي الإخراجات على قائمة إحداثيات نقاط الاهتمام مع درجاتها ووصفها (متجه بطول 256). + +يمكنك أيضًا إدخال صور متعددة إلى النموذج. وبسبب طبيعة SuperPoint، لإخراج عدد متغير من نقاط الاهتمام، ستحتاج إلى استخدام خاصية القناع (mask) لاسترجاع المعلومات المقابلة: + +```python +from transformers import AutoImageProcessor, SuperPointForKeypointDetection +import torch +from PIL import Image +import requests + +url_image_1 = "http://images.cocodataset.org/val2017/000000039769.jpg" +image_1 = Image.open(requests.get(url_image_1, stream=True).raw) +url_image_2 = "http://images.cocodataset.org/test-stuff2017/000000000568.jpg" +image_2 = Image.open(requests.get(url_image_2, stream=True).raw) + +images = [image_1, image_2] + +processor = AutoImageProcessor.from_pretrained("magic-leap-community/superpoint") +model = SuperPointForKeypointDetection.from_pretrained("magic-leap-community/superpoint") + +inputs = processor(images, return_tensors="pt") +outputs = model(**inputs) + +for i in range(len(images)): + image_mask = outputs.mask[i] + image_indices = torch.nonzero(image_mask).squeeze() + image_keypoints = outputs.keypoints[i][image_indices] + image_scores = outputs.scores[i][image_indices] + image_descriptors = outputs.descriptors[i][image_indices] +``` + +بعد ذلك، يمكنك طباعة نقاط الاهتمام على الصورة لتصور النتيجة: + +```python +import cv2 +for keypoint, score in zip(image_keypoints, image_scores): + keypoint_x, keypoint_y = int(keypoint[0].item()), int(keypoint[1].item()) + color = tuple([score.item() * 255] * 3) + image = cv2.circle(image, (keypoint_x, keypoint_y), 2, color) +cv2.imwrite("output_image.png", image) +``` + +تمت المساهمة بهذا النموذج من قبل [stevenbucaille](https://huggingface.co/stevenbucaille). ويمكن العثور على الكود الأصلي [هنا](https://github.com/magicleap/SuperPointPretrainedNetwork). + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها برمز 🌎) لمساعدتك في البدء باستخدام SuperPoint. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب (Pull Request) وسنقوم بمراجعته! ويفضل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- يمكن العثور على دفتر ملاحظات يُظهر الاستنتاج والتصور باستخدام SuperPoint [هنا](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/SuperPoint/Inference_with_SuperPoint_to_detect_interest_points_in_an_image.ipynb). 🌎 + +## SuperPointConfig + +[[autodoc]] SuperPointConfig + +## SuperPointImageProcessor + +[[autodoc]] SuperPointImageProcessor + +- preprocess + +## SuperPointForKeypointDetection + +[[autodoc]] SuperPointForKeypointDetection + +- forward \ No newline at end of file From 7fd5340238d4109448ea7dd1bd97343e7939e916 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:39 +0300 Subject: [PATCH 582/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/swiftformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/swiftformer.md | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docs/source/ar/model_doc/swiftformer.md diff --git a/docs/source/ar/model_doc/swiftformer.md b/docs/source/ar/model_doc/swiftformer.md new file mode 100644 index 00000000000000..b5133e2e9e2f54 --- /dev/null +++ b/docs/source/ar/model_doc/swiftformer.md @@ -0,0 +1,41 @@ +# SwiftFormer + +## نظرة عامة + +اقترح نموذج SwiftFormer في ورقة "SwiftFormer: Efficient Additive Attention for Transformer-based Real-time Mobile Vision Applications" بواسطة Abdelrahman Shaker وآخرون. يقدم هذا البحث آلية اهتمام إضافية فعالة تحل محل عمليات الضرب المعقدة في المصفوفات التربيعية في حساب الاهتمام الذاتي بعمليات ضرب العناصر الخطية. وبناءً على ذلك، تم بناء سلسلة من النماذج تسمى "SwiftFormer" والتي حققت أداءً متميزًا من حيث الدقة وسرعة الاستدلال على الأجهزة المحمولة. حتى أن متغيرها الصغير يحقق دقة أعلى من 78.5٪ مع تأخير 0.8 مللي ثانية فقط على iPhone 14، وهو أكثر دقة وسرعة مقارنة بـ MobileViT-v2. + +فيما يلي الملخص من الورقة: + +> "أصبح الاهتمام الذاتي خيارًا فعليًا لالتقاط السياق العالمي في مختلف تطبيقات الرؤية. ومع ذلك، فإن تعقيده الحسابي التربيعي فيما يتعلق بدقة الصورة يحد من استخدامه في التطبيقات في الوقت الفعلي، خاصة عند نشره على الأجهزة المحمولة المقيدة بالموارد. على الرغم من اقتراح الأساليب الهجينة لدمج مزايا التحويلات والاهتمام الذاتي من أجل تحقيق توازن أفضل بين السرعة والدقة، إلا أن عمليات ضرب المصفوفات المكلفة في الاهتمام الذاتي لا تزال تشكل عنق زجاجة. في هذا العمل، نقدم آلية اهتمام إضافية فعالة تحل بشكل فعال محل عمليات ضرب المصفوفات التربيعية بعمليات ضرب العناصر الخطية. ويظهر تصميمها أنه يمكن استبدال التفاعل بين المفتاح والقيمة بطبقة خطية دون التضحية بأي دقة. على عكس الأساليب المتميزة السابقة، يمكّن صيغتنا الفعالة للاهتمام الذاتي من استخدامها في جميع مراحل الشبكة. باستخدام الاهتمام الإضافي الفعال المقترح، نقوم ببناء سلسلة من النماذج تسمى "SwiftFormer" والتي تحقق أداءً متميزًا من حيث الدقة وسرعة الاستدلال على الأجهزة المحمولة. يحقق متغيرنا الصغير دقة أعلى من 78.5٪ في ImageNet-1K مع تأخير 0.8 مللي ثانية فقط على iPhone 14، وهو أكثر دقة وسرعة مقارنة بـ MobileViT-v2." + +تمت المساهمة بهذا النموذج بواسطة [shehan97](https://huggingface.co/shehan97). تمت المساهمة في إصدار TensorFlow بواسطة [joaocmd](https://huggingface.co/joaocmd). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/Amshaker/SwiftFormer). + +## SwiftFormerConfig + +[[autodoc]] SwiftFormerConfig + +## SwiftFormerModel + +[[autodoc]] SwiftFormerModel + +- forward + +## SwiftFormerForImageClassification + +[[autodoc]] SwiftFormerForImageClassification + +- forward + +## TFSwiftFormerModel + +[[autodoc]] TFSwiftFormerModel + +- call + +## TFSwiftFormerForImageClassification + +[[autodoc]] TFSwiftFormerForImageClassification + +- call \ No newline at end of file From 5291b09f5a16cb2433723bcd93d3ddade9b84bac Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:41 +0300 Subject: [PATCH 583/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/swin.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/swin.md | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/swin.md diff --git a/docs/source/ar/model_doc/swin.md b/docs/source/ar/model_doc/swin.md new file mode 100644 index 00000000000000..dc0a90ab75df9d --- /dev/null +++ b/docs/source/ar/model_doc/swin.md @@ -0,0 +1,83 @@ +# Swin Transformer + +## نظرة عامة + +تم اقتراح محول Swin في [Swin Transformer: Hierarchical Vision Transformer using Shifted Windows](https://arxiv.org/abs/2103.14030) بواسطة Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin, Baining Guo. + +الملخص من الورقة هو ما يلي: + +*تقدم هذه الورقة محول رؤية جديد، يسمى Swin Transformer، والذي يمكن أن يعمل كعمود فقري للأغراض العامة في مجال الرؤية الحاسوبية. تنشأ التحديات في تكييف المحول من اللغة إلى الرؤية من الاختلافات بين المجالين، مثل الاختلافات الكبيرة في مقاييس الكيانات المرئية ودقة بكسلات الصور مقارنة بالكلمات في النص. لمعالجة هذه الاختلافات، نقترح محولًا هرميًا يتم حساب تمثيله باستخدام نوافذ منزاحة. يجلب نظام النوافذ المنزاحة كفاءة أكبر من خلال الحد من حساب الاهتمام الذاتي إلى نوافذ محلية غير متداخلة مع السماح أيضًا بالاتصال عبر النوافذ. يتميز هذا التصميم الهرمي بالمرونة في النمذجة على نطاقات مختلفة وله تعقيد حسابي خطي فيما يتعلق بحجم الصورة. تجعل هذه الخصائص من محول Swin متوافقًا مع مجموعة واسعة من مهام الرؤية، بما في ذلك تصنيف الصور (87.3 دقة أعلى-1 على ImageNet-1K) ومهام التنبؤ الكثيفة مثل اكتشاف الأجسام (58.7 AP للصندوق و51.1 AP للقناع على COCO test-dev) والتجزئة الدلالية (53.5 mIoU على ADE20K val). تتفوق أداءه على الحالة السابقة للفن بهامش كبير يبلغ +2.7 AP للصندوق و+2.6 AP للقناع على COCO، و+3.2 mIoU على ADE20K، مما يثبت الإمكانات الكبيرة للنماذج المستندة إلى المحول كعمود فقري للرؤية. كما أثبت التصميم الهرمي ونهج النافذة المنزاحة فائدتهما لتصميمات MLP بالكامل.* + +drawing + +هندسة محول Swin. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [novice03](https://huggingface.co/novice03). تمت المساهمة في إصدار Tensorflow من هذا النموذج بواسطة [amyeroberts](https://huggingface.co/amyeroberts). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/Swin-Transformer). + +## نصائح الاستخدام + +- يقوم Swin بتبطين المدخلات التي تدعم أي ارتفاع وعرض للإدخال (إذا كان قابلاً للقسمة على `32`). +- يمكن استخدام Swin كـ *عمود فقري*. عندما تكون `output_hidden_states = True`، فإنه سيخرج كلاً من `hidden_states` و`reshaped_hidden_states`. تحتوي `reshaped_hidden_states` على شكل `(batch, num_channels, height, width)` بدلاً من `(batch_size, sequence_length, num_channels)`. + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام محول Swin. + + + +- [`SwinForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) هذا. +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +وبالإضافة إلى ذلك: + +- [`SwinForMaskedImageModeling`] مدعوم من قبل [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-pretraining) هذا. + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فلا تتردد في فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## SwinConfig + +[[autodoc]] SwinConfig + + + + ## SwinModel + +[[autodoc]] SwinModel + +- forward + + ## SwinForMaskedImageModeling + +[[autodoc]] SwinForMaskedImageModeling + +- forward + + ## SwinForImageClassification + +[[autodoc]] transformers.SwinForImageClassification + +- forward + + + + + ## TFSwinModel + +[[autodoc]] TFSwinModel + +- call + + ## TFSwinForMaskedImageModeling + +[[autodoc]] TFSwinForMaskedImageModeling + +- call + + ## TFSwinForImageClassification + +[[autodoc]] transformers.TFSwinForImageClassification + +- call + + + \ No newline at end of file From 68de5897e454d26c798041fd10ca8db00ad6f530 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:43 +0300 Subject: [PATCH 584/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/swin2sr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/swin2sr.md | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/source/ar/model_doc/swin2sr.md diff --git a/docs/source/ar/model_doc/swin2sr.md b/docs/source/ar/model_doc/swin2sr.md new file mode 100644 index 00000000000000..cd065d2157715f --- /dev/null +++ b/docs/source/ar/model_doc/swin2sr.md @@ -0,0 +1,50 @@ +# Swin2SR + +## نظرة عامة + +اقترح نموذج Swin2SR في ورقة "Swin2SR: SwinV2 Transformer for Compressed Image Super-Resolution and Restoration" بواسطة Marcos V. Conde, Ui-Jin Choi, Maxime Burchi, Radu Timofte. + +يحسن Swin2R نموذج SwinIR من خلال دمج طبقات Swin Transformer v2 التي تخفف من مشكلات مثل عدم استقرار التدريب، والفجوات في الدقة بين التدريب الأولي والضبط الدقيق، والجوع على البيانات. + +ملخص الورقة هو كما يلي: + +> "يلعب الضغط دورًا مهمًا في نقل وتخزين الصور ومقاطع الفيديو بكفاءة عبر الأنظمة المحدودة النطاق مثل خدمات البث، والواقع الافتراضي، أو ألعاب الفيديو. ومع ذلك، يؤدي الضغط حتمًا إلى ظهور تشوهات وفقدان المعلومات الأصلية، الأمر الذي قد يتسبب في تدهور جودة الصورة بشكل كبير. ولهذه الأسباب، أصبحت تحسين جودة الصور المضغوطة مجالًا بحثيًا شائعًا. في حين أن معظم طرق استعادة الصور المتقدمة تعتمد على الشبكات العصبية التلافيفية، إلا أن هناك طرقًا أخرى تعتمد على المحولات مثل SwinIR، والتي تظهر أداءً مثيرًا للإعجاب في هذه المهام. + +> في هذه الورقة، نستكشف محول Swin Transformer V2 الجديد لتحسين نموذج SwinIR لاستعادة الدقة الفائقة للصور، وخاصة سيناريو الإدخال المضغوط. باستخدام هذه الطريقة، يمكننا معالجة المشكلات الرئيسية في تدريب نماذج الرؤية المحولة، مثل عدم استقرار التدريب، والفجوات في الدقة بين التدريب الأولي والضبط الدقيق، والجوع على البيانات. نجري تجارب على ثلاث مهام تمثيلية: إزالة تشوهات ضغط JPEG، واستعادة الدقة الفائقة للصور (الكلاسيكية والخفيفة)، واستعادة الدقة الفائقة للصور المضغوطة. وتظهر النتائج التجريبية أن طريقتنا، Swin2SR، يمكن أن تحسن من تقارب التدريب وأداء نموذج SwinIR، وهي إحدى الحلول الخمسة الأولى في مسابقة AIM 2022 Challenge on Super-Resolution of Compressed Image and Video". + + + + بنية Swin2SR. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/mv-lab/swin2sr). + +## الموارد + +يمكن العثور على دفاتر الملاحظات التجريبية لـ Swin2SR [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Swin2SR). + +يمكن العثور على مساحة تجريبية لاستعادة الدقة الفائقة للصور باستخدام SwinSR [هنا](https://huggingface.co/spaces/jjourney1125/swin2sr). + +## Swin2SRImageProcessor + +[[autodoc]] Swin2SRImageProcessor + +- preprocess + +## Swin2SRConfig + +[[autodoc]] Swin2SRConfig + +## Swin2SRModel + +[[autodoc]] Swin2SRModel + +- forward + +## Swin2SRForImageSuperResolution + +[[autodoc]] Swin2SRForImageSuperResolution + +- forward \ No newline at end of file From 799d689fb65d247102aa2868e72acd7275318d65 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:45 +0300 Subject: [PATCH 585/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/swinv2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/swinv2.md | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 docs/source/ar/model_doc/swinv2.md diff --git a/docs/source/ar/model_doc/swinv2.md b/docs/source/ar/model_doc/swinv2.md new file mode 100644 index 00000000000000..976caae32d9e22 --- /dev/null +++ b/docs/source/ar/model_doc/swinv2.md @@ -0,0 +1,49 @@ +# Swin Transformer V2 + +## نظرة عامة + +اقتُرح نموذج Swin Transformer V2 في ورقة بحثية بعنوان [Swin Transformer V2: Scaling Up Capacity and Resolution](https://arxiv.org/abs/2111.09883) بواسطة Ze Liu و Han Hu و Yutong Lin و Zhuliang Yao و Zhenda Xie و Yixuan Wei و Jia Ning و Yue Cao و Zheng Zhang و Li Dong و Furu Wei و Baining Guo. + +وفيما يلي الملخص المستخرج من الورقة البحثية: + +*أظهرت النماذج اللغوية واسعة النطاق تحسناً ملحوظاً في الأداء على المهام اللغوية دون أي مؤشرات على التشبع. كما أنها تُظهر قدرات مذهلة على التعلم القليل مثل قدرات البشر. تهدف هذه الورقة إلى استكشاف النماذج واسعة النطاق في رؤية الكمبيوتر. نتناول ثلاث قضايا رئيسية في تدريب وتطبيق النماذج البصرية واسعة النطاق، بما في ذلك عدم استقرار التدريب، والفجوات في الدقة بين التدريب الأولي والضبط الدقيق، والحاجة إلى البيانات المُوسمة. تم اقتراح ثلاث تقنيات رئيسية: 1) طريقة residual-post-norm مُجمعة مع انتباه كوسين لتحسين استقرار التدريب؛ 2) طريقة log-spaced continuous position bias لنقل النماذج المُدربة مسبقًا باستخدام صور منخفضة الدقة بشكل فعال إلى مهام التدفق السفلي مع إدخالات عالية الدقة؛ 3) طريقة pre-training ذاتية الإشراف، SimMIM، لتقليل الحاجة إلى الصور المُوسمة الكبيرة. من خلال هذه التقنيات، نجحت هذه الورقة في تدريب نموذج Swin Transformer V2 الذي يحتوي على 3 مليار معامل، وهو أكبر نموذج رؤية كثيف حتى الآن، وجعله قادرًا على التدريب باستخدام صور يصل حجمها إلى 1,536×1,536. حقق هذا النموذج سجلات أداء جديدة في 4 مهام رؤية تمثيلية، بما في ذلك تصنيف الصور ImageNet-V2، وكشف الأجسام COCO، والتجزئة الدلالية ADE20K، وتصنيف إجراءات الفيديو Kinetics-400.* + +تمت المساهمة بهذا النموذج من قبل [nandwalritik](https://huggingface.co/nandwalritik). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/Swin-Transformer). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام Swin Transformer v2. + + + +- [`Swinv2ForImageClassification`] مدعوم بواسطة [script](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). + +- راجع أيضًا: [دليل مهام تصنيف الصور](../tasks/image_classification) + +بالإضافة إلى ذلك: + +- [`Swinv2ForMaskedImageModeling`] مدعوم بواسطة [script](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-pretraining). + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنقوم بمراجعته! يُفضل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## Swinv2Config + +[[autodoc]] Swinv2Config + +## Swinv2Model + +[[autodoc]] Swinv2Model + +- forward + +## Swinv2ForMaskedImageModeling + +[[autodoc]] Swinv2ForMaskedImageModeling + +- forward + +## Swinv2ForImageClassification + +[[autodoc]] transformers.Swinv2ForImageClassification + +- forward \ No newline at end of file From 521ce86e978c07e95df4b4f36a18ca5fcd1b7385 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:47 +0300 Subject: [PATCH 586/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/switch=5Ftransformers.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/switch_transformers.md | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/source/ar/model_doc/switch_transformers.md diff --git a/docs/source/ar/model_doc/switch_transformers.md b/docs/source/ar/model_doc/switch_transformers.md new file mode 100644 index 00000000000000..d36ba9e423978f --- /dev/null +++ b/docs/source/ar/model_doc/switch_transformers.md @@ -0,0 +1,62 @@ +# SwitchTransformers + +## نظرة عامة + +اقترح نموذج SwitchTransformers في "Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity" بواسطة William Fedus وBarret Zoph وNoam Shazeer. + +يستخدم نموذج Switch Transformer بنية T5 encoder-decoder نادرة، حيث يتم استبدال MLP بمزيج من الخبراء (MoE). تقوم آلية التوجيه (أعلى 1 في هذه الحالة) بربط كل رمز بخبير، حيث يكون كل خبير عبارة عن MLP كثيف. على الرغم من أن محولات التبديل تحتوي على عدد أكبر بكثير من الأوزان مقارنة بالنماذج الكثيفة المكافئة، فإن النُدرة تسمح بزيادة النطاق بشكل أفضل وأداء ضبط أفضل عند النطاق. + +أثناء التمرير للأمام، يتم استخدام جزء فقط من الأوزان. تسمح آلية التوجيه للنموذج باختيار الأوزان ذات الصلة أثناء التنقل، مما يزيد من سعة النموذج دون زيادة عدد العمليات. + +الملخص من الورقة هو كما يلي: + +> "في التعلم العميق، عادة ما تعيد النماذج استخدام نفس المعلمات لجميع المدخلات. تتحدى مجموعة الخبراء هذا وتختار بدلاً من ذلك معلمات مختلفة لكل مثال وارد. النتيجة هي نموذج مُنشط بشكل متقطع - بأعداد هائلة من المعلمات - ولكن بتكلفة حسابية ثابتة. ومع ذلك، على الرغم من العديد من النجاحات الملحوظة لـ MoE، فقد أعيق الاعتماد الواسع النطاق بسبب التعقيد وتكاليف الاتصال وعدم استقرار التدريب - نعالج هذه المشكلات باستخدام محول التبديل. نقوم بتبسيط خوارزمية توجيه MoE ونصمم نماذج محسنة بديهية بتكاليف اتصال وحساب مخفضة. تساعد تقنيات التدريب المقترحة في السيطرة على عدم الاستقرار ونظهر أنه يمكن تدريب النماذج النادرة الكبيرة، لأول مرة، بتنسيقات ذات دقة أقل (bfloat16). نقوم بتصميم نماذج بناءً على T5-Base وT5-Large للحصول على زيادات تصل إلى 7x في سرعة التدريب المسبق باستخدام نفس الموارد الحسابية. تمتد هذه التحسينات إلى الإعدادات متعددة اللغات حيث نقيس المكاسب على إصدار mT5-Base عبر جميع 101 لغة. وأخيراً، نقوم بزيادة الحجم الحالي لنماذج اللغة عن طريق التدريب المسبق على نماذج معلمات تصل إلى تريليون على "Colossal Clean Crawled Corpus" وتحقيق تسريع 4x على نموذج T5-XXL". + +تمت المساهمة بهذا النموذج من قبل [Younes Belkada] و [Arthur Zucker]. + +يمكن العثور على الكود الأصلي [هنا] (https://github.com/google/flaxformer/tree/main/flaxformer/architectures/moe). + +## نصائح الاستخدام + +- يستخدم SwitchTransformers [`T5Tokenizer`]، والذي يمكن تحميله مباشرة من مستودع كل نموذج. +- تم تدريب الأوزان التي تم إصدارها مسبقًا على مهمة اللغة الإنجليزية [Masked Language Modeling]، ويجب ضبط دقتها. + +## الموارد + +- [دليل مهمة الترجمة] (../tasks/translation) +- [دليل مهمة الملخص] (../tasks/summarization) + +## SwitchTransformersConfig + +[[autodoc]] SwitchTransformersConfig + +## SwitchTransformersTop1Router + +[[autodoc]] SwitchTransformersTop1Router + +- _compute_router_probabilities +- forward + +## SwitchTransformersSparseMLP + +[[autodoc]] SwitchTransformersSparseMLP + +- forward + +## SwitchTransformersModel + +[[autodoc]] SwitchTransformersModel + +- forward + +## SwitchTransformersForConditionalGeneration + +[[autodoc]] SwitchTransformersForConditionalGeneration + +- forward + +## SwitchTransformersEncoderModel + +[[autodoc]] SwitchTransformersEncoderModel + +- forward \ No newline at end of file From fc6adb27016bb9d601d3116c82ea0d0161212feb Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:48 +0300 Subject: [PATCH 587/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/t5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/t5.md | 416 +++++++++++++++++++++++++++++++++ 1 file changed, 416 insertions(+) create mode 100644 docs/source/ar/model_doc/t5.md diff --git a/docs/source/ar/model_doc/t5.md b/docs/source/ar/model_doc/t5.md new file mode 100644 index 00000000000000..4c29fa7a98484b --- /dev/null +++ b/docs/source/ar/model_doc/t5.md @@ -0,0 +1,416 @@ +# T5 + +
+ +Models + + +Spaces + + +Paper page + +
+ +## نظرة عامة +تم تقديم نموذج T5 في بحث [استكشاف حدود تعلم النقل مع محول النص الموحد إلى النص](https://arxiv.org/pdf/1910.10683.pdf) بواسطة [كولن رافيل](https://huggingface.co/craffel)، ونوام شازير، و[آدم روبرتس](https://huggingface.co/adarob)، وكاثرين لي، وشاران نارانج، +مايكل ماتينا، ويانكي تشو، ووي لي، و[بيتر جيه ليو](https://huggingface.co/peterjliu). + +ملخص البحث هو التالي: + +> "أصبح تعلم النقل، حيث يتم تدريب النموذج مسبقًا أولاً على مهمة غنية بالبيانات قبل ضبط دقته على مهمة أسفل البث، تقنية قوية في معالجة اللغات الطبيعية (NLP). وقد أدت فعالية تعلم النقل إلى ظهور مجموعة متنوعة من الأساليب والمنهجيات والممارسات. في هذه الورقة، نستكشف مجال تقنيات تعلم النقل لمعالجة اللغات الطبيعية من خلال تقديم إطار عمل موحد يحول كل مشكلة لغوية إلى تنسيق نصي. تقارن دراستنا المنهجية أهداف التدريب المسبق والبنيات والمجموعات غير المعلمة ونهج النقل وعوامل أخرى في عشرات مهام فهم اللغة. من خلال الجمع بين الأفكار المستفادة من استكشافنا مع النطاق و"مجموعتنا الضخمة النظيفة المستخرجة من الويب"، نحقق نتائج متقدمة في العديد من المعايير المرجعية التي تغطي الملخص، والأسئلة والأجوبة، وتصنيف النصوص، والمزيد. ولتسهيل العمل المستقبلي في تعلم النقل لمعالجة اللغات الطبيعية، نقوم بإطلاق مجموعتنا وطرازنا المُدرب مسبقًا وشفرة البرنامج." + +يمكن العثور على جميع نقاط التفتيش على [المركز](https://huggingface.co/models?search=t5). + +تمت المساهمة بهذا النموذج من قبل [thomwolf](https://huggingface.co/thomwolf). يمكن العثور على الشفرة الأصلية [هنا](https://github.com/google-research/text-to-text-transfer-transformer). + +## نصائح الاستخدام + +- T5 هو نموذج ترميز فك ترميز مُدرب مسبقًا على مزيج من المهام متعددة المهام غير الخاضعة للإشراف والخاضعة للإشراف، ويتم تحويل كل مهمة منها إلى تنسيق نصي. يعمل T5 بشكل جيد في مجموعة متنوعة من المهام خارج الصندوق عن طريق إضافة بادئة مختلفة إلى الإدخال المقابل لكل مهمة، على سبيل المثال، للترجمة: *ترجمة من الإنجليزية إلى الألمانية: ...*، +للتلخيص: *تلخيص: ...*. + +- يتضمن التدريب المسبق كلًا من التدريب الخاضع للإشراف والتدريب الذاتي الخاضع للإشراف. يتم إجراء التدريب الخاضع للإشراف على المهام الأساسية بواسطة معايير GLUE وSuperGLUE (عن طريق تحويلها إلى مهام نصية كما هو موضح أعلاه). + +- يستخدم التدريب الذاتي الخاضع للإشراف الرموز المميزة المعطلة، عن طريق إزالة 15% من الرموز بشكل عشوائي واستبدالها برموز مميزة فردية (إذا تم وضع علامة على عدة رموز متتالية للإزالة، يتم استبدال المجموعة بأكملها برمز مميز واحد). إدخال الترميز هو الجملة المعطلة، وإدخال فك الترميز هو الجملة الأصلية والهدف هو الرموز المميزة التي تم إسقاطها محددة برموزها المميزة. + +- يستخدم T5 تضمينات قياسية نسبية. يمكن إجراء ترميز الإدخال الفارغ على اليسار وعلى اليمين. + +- راجع أقسام [التدريب](#training)، و[الاستنتاج](#inference)، و[الموارد](#resources) أدناه للحصول على جميع التفاصيل المتعلقة بالاستخدام. + +يأتي T5 بأحجام مختلفة: + +- [google-t5/t5-small](https://huggingface.co/google-t5/t5-small) +- [google-t5/t5-base](https://huggingface.co/google-t5/t5-base) +- [google-t5/t5-large](https://huggingface.co/google-t5/t5-large) +- [google-t5/t5-3b](https://huggingface.co/google-t5/t5-3b) +- [google-t5/t5-11b](https://huggingface.co/google-t5/t5-11b). + +بناءً على نموذج T5 الأصلي، أصدرت Google بعض الأعمال اللاحقة: + +- **T5v1.1**: T5v1.1 هو إصدار محسن من T5 مع بعض التعديلات المعمارية، وهو مُدرب مسبقًا على C4 فقط دون +مزج المهام الخاضعة للإشراف. راجع وثائق T5v1.1 الموجودة [هنا](t5v1.1). + +- **mT5**: mT5 هو نموذج T5 متعدد اللغات. وهو مُدرب مسبقًا على مجموعة بيانات mC4، والتي تشمل 101 لغة. راجع +وثائق mT5 الموجودة [هنا](mt5). + +- **byT5**: byT5 هو نموذج T5 مُدرب مسبقًا على تسلسلات البايت بدلاً من تسلسلات الرموز الفرعية SentencePiece. راجع +وثائق byT5 الموجودة [هنا](byt5). + +- **UL2**: UL2 هو نموذج مشابه لـ T5 مُدرب مسبقًا على أهداف إزالة الضوضاء المختلفة + +- **Flan-T5**: Flan هي طريقة تدريب مسبق تعتمد على المطالبات. Flan-T5 هي نماذج T5 مدربة على مجموعة Flan من +مجموعات البيانات التي تشمل: `taskmaster2`، `djaym7/wiki_dialog`، `deepmind/code_contests`، `lambada`، `gsm8k`، `aqua_rat`، `esnli`، `quasc`، و`qed`. + +- **FLan-UL2**: نموذج UL2 مضبوط الدقة باستخدام ضبط دقة المطالبة "Flan" ومجموعة البيانات. + +- **UMT5**: UmT5 هو نموذج T5 متعدد اللغات مُدرب على مجموعة mC4 متعددة اللغات المحسنة والمحدثة، 29 تريليون حرف عبر 107 لغة، باستخدام طريقة أخذ العينات الجديدة، UniMax. راجع +وثائق mT5 الموجودة [هنا](umt5). +## التدريب + +T5 هو نموذج ترميز وفك ترميز يحول جميع مشكلات معالجة اللغات الطبيعية إلى تنسيق نص إلى نص. يتم تدريبه باستخدام طريقة "teacher forcing". وهذا يعني أنه بالنسبة للتدريب، نحتاج دائمًا إلى تسلسل إدخال وتسلسل هدف مطابق. يتم تغذية تسلسل الإدخال إلى النموذج باستخدام "input_ids". يتم تحويل تسلسل الهدف إلى اليمين، أي يتم إضافة رمز تسلسل البداية في البداية ويتم تغذيته إلى فك الترميز باستخدام "decoder_input_ids". وفي أسلوب "teacher forcing"، يتم بعد ذلك إضافة رمز "EOS" إلى تسلسل الهدف، والذي يتوافق مع "labels". ويتم استخدام رمز "PAD" هنا كرموز تسلسل البداية. يمكن تدريب T5 / ضبطه الدقيق بأسلوب إشرافي وغير إشرافي على حد سواء. + +يمكنك استخدام [T5ForConditionalGeneration] (أو المتغير Tensorflow/Flax)، والذي يتضمن رأس نمذجة اللغة أعلى فك الترميز. + +- التدريب غير الإشرافي لإزالة التشويش + +في هذا الإعداد، يتم قناع أجزاء من تسلسل الإدخال بواسطة ما يسمى رموز الاستطلاع (أو رموز القناع الفريدة) ويتم تشكيل تسلسل الإخراج كتوصيل لرموز الاستطلاع نفسها ورموز القناع "الحقيقية". يمثل كل رمز استطلاع رمز قناع فريد لهذه الجملة ويجب أن يبدأ بـ ""، ""، ... حتى "". كافتراضي، تتوفر 100 رموز استطلاع في [T5Tokenizer]. + +على سبيل المثال، يجب معالجة الجملة "The cute dog walks in the park" مع الأقنعة الموضوعة على "cute dog" و "the" على النحو التالي: + +```python +>>> from transformers import T5Tokenizer, T5ForConditionalGeneration + +>>> tokenizer = T5Tokenizer.from_pretrained("google-t5/t5-small") +>>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small") + +>>> input_ids = tokenizer("The walks in park", return_tensors="pt").input_ids +>>> labels = tokenizer(" cute dog the ", return_tensors="pt").input_ids + +>>> # تقوم دالة التقديم تلقائيًا بإنشاء decoder_input_ids الصحيحة +>>> loss = model(input_ids=input_ids, labels=labels).loss +>>> loss.item() +3.7837 +``` + +إذا كنت مهتمًا بالتدريب المسبق لـ T5 على مجموعة بيانات جديدة، تحقق من [run_t5_mlm_flax.py](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling) script في دليل الأمثلة. + +- التدريب الإشرافي + +في هذا الإعداد، يكون تسلسل الإدخال والإخراج عبارة عن رسم خرائط قياسي للإدخال والإخراج تسلسل إلى تسلسل. لنفترض أننا نريد ضبط النموذج الدقيق للترجمة على سبيل المثال، ولدينا مثال تدريب: تسلسل الإدخال "The house is wonderful." وتسلسل الإخراج "Das Haus ist wunderbar."، فيجب إعدادهما للنموذج على النحو التالي: + +```python +>>> from transformers import T5Tokenizer, T5ForConditionalGeneration + +>>> tokenizer = T5Tokenizer.from_pretrained("google-t5/t5-small") +>>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small") + +>>> input_ids = tokenizer("translate English to German: The house is wonderful.", return_tensors="pt").input_ids +>>> labels = tokenizer("Das Haus ist wunderbar.", return_tensors="pt").input_ids + +>>> # تقوم دالة التقديم تلقائيًا بإنشاء decoder_input_ids الصحيحة +>>> loss = model(input_ids=input_ids, labels=labels).loss +>>> loss.item() +0.2542 +``` + +كما ترون، يحتاج النموذج إلى إدخالين فقط لحساب الخسارة: `input_ids` (التي هي `input_ids` لتسلسل الإدخال المشفر) و`labels` (التي هي `input_ids` لتسلسل الهدف المشفر). سيقوم النموذج تلقائيًا بإنشاء `decoder_input_ids` بناءً على `labels`، عن طريق تحويلها موضع واحد إلى اليمين وإضافة `config.decoder_start_token_id`، والذي يساوي 0 لـ T5 (أي معرف رمز الحشو). لاحظ أيضًا بادئة المهمة: نقوم بإضافة بادئة إلى تسلسل الإدخال بـ 'translate English to German: ' قبل تشفيره. سيساعد هذا في تحسين الأداء، حيث تم استخدام بادئة المهمة هذه أثناء التدريب المسبق لـ T5. + +ومع ذلك، فإن المثال أعلاه يوضح مثال تدريب واحد فقط. في الممارسة العملية، يتم تدريب نماذج التعلم العميق في دفعات. وهذا يعني أنه يجب علينا إضافة أمثلة / اقتطاعها إلى نفس الطول. بالنسبة لنماذج الترميز وفك الترميز، يتم عادةً تحديد `max_source_length` و`max_target_length`، والتي تحدد الطول الأقصى لتسلسلات الإدخال والإخراج على التوالي (وإلا يتم اقتطاعها). يجب ضبط هذه القيم بعناية اعتمادًا على المهمة. + +بالإضافة إلى ذلك، يجب التأكد من أن معرفات رموز الحشو لـ `labels` لا تؤخذ في الاعتبار بواسطة دالة الخسارة. في PyTorch وTensorflow، يمكن القيام بذلك عن طريق استبدالها بـ -100، وهو `ignore_index` لـ `CrossEntropyLoss`. في Flax، يمكنك استخدام `decoder_attention_mask` لتجاهل الرموز المضافة من الخسارة (راجع [مخطوط ملخص Flax](https://github.com/huggingface/transformers/tree/main/examples/flax/summarization) للحصول على التفاصيل). كما نقوم بتمرير `attention_mask` كإدخال إضافي إلى النموذج، والذي يتأكد من تجاهل رموز الحشو للإدخالات. يوضح مثال الكود أدناه كل هذا. + +```python +>>> from transformers import T5Tokenizer, T5ForConditionalGeneration +>>> import torch + +>>> tokenizer = T5Tokenizer.from_pretrained("google-t5/t5-small") +>>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small") + +>>> # هاتان المعلمتان الخاصتان بالمهام +>>> max_source_length = 512 +>>> max_target_length = 128 + +>>> # لنفترض أن لدينا مثالين تدريب التاليين: +>>> input_sequence_1 = "Welcome to NYC" +>>> output_sequence_1 = "Bienvenue à NYC" + +>>> input_sequence_2 = "HuggingFace is a company" +>>> output_sequence_2 = "HuggingFace est une entreprise" + +>>> # تشفير الإدخالات +>>> task_prefix = "translate English to French: " +>>> input_sequences = [input_sequence_1, input_sequence_2] + +>>> encoding = tokenizer( +... [task_prefix + sequence for sequence in input_sequences], +... padding="longest"، +... max_length=max_source_length، +... truncation=True، +... return_tensors="pt"، +... ) + +>>> input_ids, attention_mask = encoding.input_ids, encoding.attention_mask + +>>> # تشفير الأهداف +>>> target_encoding = tokenizer( +... [output_sequence_1, output_sequence_2], +... padding="longest"، +... max_length=max_target_length، +... truncation=True، +... return_tensors="pt"، +... ) +>>> labels = target_encoding.input_ids + +>>> # استبدل معرفات رموز الحشو في العلامات بـ -100 حتى يتم تجاهلها بواسطة الخسارة +>>> labels[labels == tokenizer.pad_token_id] = -100 + +>>> # تمرير إلى الأمام +>>> loss = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels).loss +>>> loss.item() +0.188 +``` + +نصائح تدريب إضافية: + +- تحتاج نماذج T5 إلى معدل تعلم أعلى قليلاً من الافتراضي المحدد في `Trainer` عند استخدام محسن AdamW. عادةً ما تعمل القيم 1e-4 و3e-4 بشكل جيد لمعظم المشكلات (التصنيف، والتلخيص، والترجمة، والإجابة على الأسئلة، وتوليد الأسئلة). لاحظ أن T5 تم تدريبه مسبقًا باستخدام محسن AdaFactor. + +وفقًا [لهذا المنشور في المنتدى](https://discuss.huggingface.co/t/t5-finetuning-tips/684)، فإن بادئات المهام مهمة عند (1) إجراء التدريب متعدد المهام (2) مهمتك مشابهة أو مرتبطة بمهمة إشرافية تم استخدامها في مزيج التدريب المسبق لـ T5 (راجع التذييل D من [الورقة](https://arxiv.org/pdf/1910.10683.pdf) للحصول على بادئات المهام المستخدمة). + +إذا كنت تتدرب على TPU، فمن المستحسن إضافة أمثلة مجموعة البيانات بأكملها إلى نفس الطول أو استخدام "pad_to_multiple_of" للحصول على عدد صغير من أحجام الدلاء المحددة مسبقًا لتناسب جميع الأمثلة. لا يُنصح بإضافة الدفعات ديناميكيًا إلى أطول مثال على TPU لأنه يؤدي إلى إعادة تجميع لكل شكل دفعة يتم مواجهته أثناء التدريب، مما يبطئ التدريب بشكل كبير. (إضافة فقط إلى أطول مثال في دفعة) يؤدي إلى تدريب بطيء للغاية على TPU. + +## الاستنتاج + +في وقت الاستنتاج، يُنصح باستخدام [`~generation.GenerationMixin.generate`]. تهتم هذه الطريقة بتشفير الإدخال وتغذية الحالات المخفية المشفرة عبر طبقات الاهتمام المتقاطع إلى فك الترميز وتوليد إخراج فك الترميز تلقائيًا. تحقق من [هذه التدوينة](https://huggingface.co/blog/how-to-generate) لمعرفة جميع التفاصيل حول توليد النص باستخدام Transformers. + +هناك أيضًا [هذه التدوينة](https://huggingface.co/blog/encoder-decoder#encoder-decoder) التي تشرح كيفية عمل التوليد بشكل عام في نماذج الترميز وفك الترميز. + +```python +>>> from transformers import T5Tokenizer, T5ForConditionalGeneration + +>>> tokenizer = T5Tokenizer.from_pretrained("google-t5/t5-small") +>>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small") + +>>> input_ids = tokenizer("translate English to German: The house is wonderful.", return_tensors="pt").input_ids +>>> outputs = model.generate(input_ids) +>>> print(tokenizer.decode(outputs[0], skip_special_tokens=True)) +Das Haus ist wunderbar. +``` + +لاحظ أن T5 يستخدم `pad_token_id` كـ `decoder_start_token_id`، لذا عند إجراء التوليد بدون استخدام [`~generation.GenerationMixin.generate`]، تأكد من بدئه بـ `pad_token_id`. + +يوضح المثال أعلاه مثالًا واحدًا فقط. يمكنك أيضًا إجراء الاستدلال على دفعات، كما يلي: + +```python +>>> from transformers import T5Tokenizer, T5ForConditionalGeneration + +>>> tokenizer = T5Tokenizer.from_pretrained("google-t5/t5-small") +>>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small") + +>>> task_prefix = "translate English to German: " +>>> # استخدام جمل ذات أطوال مختلفة لاختبار الدفعات +>>> sentences = ["The house is wonderful.", "I like to work in NYC."] + +>>> inputs = tokenizer([task_prefix + sentence for sentence in sentences], return_tensors="pt", padding=True) + +>>> output_sequences = model.generate( +... input_ids=inputs["input_ids"], +... attention_mask=inputs["attention_mask"], +... do_sample=False, # تعطيل العينات لاختبار ما إذا كان الدفعات تؤثر على الإخراج +... ) + +>>> print(tokenizer.batch_decode(output_sequences, skip_special_tokens=True)) +['Das Haus ist wunderbar.', 'Ich arbeite gerne in NYC.'] +``` + +نظرًا لأن T5 تم تدريبه على هدف إزالة التشويش من النطاق، فيمكن استخدامه للتنبؤ برموز الاستطلاع (الرموز المقنعة) أثناء الاستدلال. ثم يتم وضع الرموز المتوقعة بين رموز الاستطلاع. + +```python +>>> from transformers import T5Tokenizer, T5ForConditionalGeneration + +>>> tokenizer = T5Tokenizer.from_pretrained("google-t5/t5-small") +>>> model = T5ForConditionalGeneration.from_pretrained("google-t5/t5-small") + +>>> input_ids = tokenizer("The walks in park", return_tensors="pt").input_ids + +>>> sequence_ids = model.generate(input_ids) +>>> sequences = tokenizer.batch_decode(sequence_ids) +>>> sequences +[' park offers the park.'] +``` + +## الأداء + +إذا كنت تريد أداء تدريب واستدلال أسرع، فقم بتثبيت [NVIDIA APEX](https://github.com/NVIDIA/apex#quick-start) لمعالجات NVIDIA GPU، أو [ROCm APEX](https://github.com/ROCmSoftwarePlatform/apex) لمعالجات AMD GPU، ثم سيستخدم النموذج تلقائيًا `apex.normalization.FusedRMSNorm` بدلاً من `T5LayerNorm`. يستخدم السابق نواة مدمجة محسنة وهي أسرع عدة مرات من الأخير. +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (يشار إليها بالرمز 🌎) لمساعدتك في البدء مع T5. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب Pull Request وسنقوم بمراجعته! ويفضل أن يُظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- دفتر ملاحظات حول كيفية [ضبط T5 الدقيق للتصنيف والاختيار المتعدد](https://colab.research.google.com/github/patil-suraj/exploring-T5/blob/master/t5_fine_tuning.ipynb). + +- دفتر ملاحظات حول كيفية [ضبط T5 الدقيق لاستخراج المشاعر من النص](https://colab.research.google.com/github/enzoampil/t5-intro/blob/master/t5_qa_training_pytorch_span_extraction.ipynb). 🌎 + + + +- دفتر ملاحظات حول كيفية [ضبط T5 الدقيق للتعرف على الكيانات المسماة](https://colab.research.google.com/drive/1obr78FY_cBmWY5ODViCmzdY6O1KB65Vc?usp=sharing). 🌎 + + + +- دفتر ملاحظات حول [ضبط CodeT5 الدقيق لتوليد التوثيقات من كود Ruby](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/T5/Fine_tune_CodeT5_for_generating_docstrings_from_Ruby_code.ipynb). + + + +- دفتر ملاحظات لضبط [T5-base-dutch الدقيق لأداء الملخص باللغة الهولندية على وحدة معالجة Tensor Processing Unit (TPU)](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/T5/Fine_tuning_Dutch_T5_base_on_CNN_Daily_Mail_for_summarization_(on_TPU_using_HuggingFace_Accelerate).ipynb). + +- دفتر ملاحظات حول كيفية [ضبط T5 الدقيق للتلخيص في PyTorch وتتبع التجارب باستخدام WandB](https://colab.research.google.com/github/abhimishra91/transformers-tutorials/blob/master/transformers_summarization_wandb.ipynb#scrollTo=OKRpFvYhBauC). 🌎 + +- منشور مدونة حول [التدريب الموزع: تدريب BART/T5 للتلخيص باستخدام 🤗 Transformers وAmazon SageMaker](https://huggingface.co/blog/sagemaker-distributed-training-seq2seq). + +- [`T5ForConditionalGeneration`] مدعوم بواسطة [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/summarization.ipynb). + +- [`TFT5ForConditionalGeneration`] مدعوم بواسطة [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/summarization) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/summarization-tf.ipynb). + +- [`FlaxT5ForConditionalGeneration`] مدعوم بواسطة [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/flax/summarization). + +- فصل [التلخيص](https://huggingface.co/course/chapter7/5?fw=pt#summarization) من دورة 🤗 Hugging Face. + +- [دليل مهمة التلخيص](../tasks/summarization) + + + +- [`FlaxT5ForConditionalGeneration`] مدعوم بواسطة [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#t5-like-span-masked-language-modeling) لتدريب T5 بهدف نموذج اللغة المقنعة. يوضح السكربت أيضًا كيفية تدريب محلل T5. [`FlaxT5ForConditionalGeneration`] مدعوم أيضًا بواسطة هذا [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/masked_language_modeling_flax.ipynb). + + + +- [`T5ForConditionalGeneration`] مدعوم بواسطة [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/pytorch/translation) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/translation.ipynb). + +- [`TFT5ForConditionalGeneration`] مدعوم بواسطة [سكريبت المثال](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/translation) و[دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/translation-tf.ipynb). + +- [دليل مهمة الترجمة](../tasks/translation) + + + +- دفتر ملاحظات حول كيفية [ضبط T5 الدقيق للإجابة على الأسئلة باستخدام TensorFlow 2](https://colab.research.google.com/github/snapthat/TF-T5-text-to-text/blob/master/snapthatT5/notebooks/TF-T5-Datasets%20Training.ipynb). 🌎 + +- دفتر ملاحظات حول كيفية [ضبط T5 الدقيق للإجابة على الأسئلة على وحدة معالجة Tensor Processing Unit (TPU)](https://colab.research.google.com/github/patil-suraj/exploring-T5/blob/master/T5_on_TPU.ipynb#scrollTo=QLGiFCDqvuil). + +🚀 **النشر** + +- منشور مدونة حول كيفية نشر [T5 11B للاستنتاج بأقل من 500 دولار](https://www.philschmid.de/deploy-t5-11b). + +## T5Config + +[[autodoc]] T5Config + +## T5Tokenizer + +[[autodoc]] T5Tokenizer + +- build_inputs_with_special_tokens + +- get_special_tokens_mask + +- create_token_type_ids_from_sequences + +- save_vocabulary + +## T5TokenizerFast + +[[autodoc]] T5TokenizerFast + + + + + +## T5Model + +[[autodoc]] T5Model + +- forward + +## T5ForConditionalGeneration + +[[autodoc]] T5ForConditionalGeneration + +- forward + +## T5EncoderModel + +[[autodoc]] T5EncoderModel + +- forward + +## T5ForSequenceClassification + +[[autodoc]] T5ForSequenceClassification + +- forward + +## T5ForTokenClassification + +[[autodoc]] T5ForTokenClassification + +- forward + +## T5ForQuestionAnswering + +[[autodoc]] T5ForQuestionAnswering + +- forward + + + + + +## TFT5Model + +[[autodoc]] TFT5Model + +- call + +## TFT5ForConditionalGeneration + +[[autodoc]] TFT5ForConditionalGeneration + +- call + +## TFT5EncoderModel + +[[autodoc]] TFT5EncoderModel + +- call + + + + + +## FlaxT5Model + +[[autodoc]] FlaxT5Model + +- __call__ + +- encode + +- decode + +## FlaxT5ForConditionalGeneration + +[[autodoc]] FlaxT5ForConditionalGeneration + +- __call__ + +- encode + +- decode + +## FlaxT5EncoderModel + +[[autodoc]] FlaxT5EncoderModel + +- __call__ + + + + \ No newline at end of file From 5bfecff94da6d35b3fbd39b28213ee7cfe249273 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:50 +0300 Subject: [PATCH 588/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/t5v1.1.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/t5v1.1.md | 75 ++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/source/ar/model_doc/t5v1.1.md diff --git a/docs/source/ar/model_doc/t5v1.1.md b/docs/source/ar/model_doc/t5v1.1.md new file mode 100644 index 00000000000000..22528b1307e719 --- /dev/null +++ b/docs/source/ar/model_doc/t5v1.1.md @@ -0,0 +1,75 @@ +# T5v1.1 + +## نظرة عامة +تم إصدار T5v1.1 في مستودع [google-research/text-to-text-transfer-transformer](https://github.com/google-research/text-to-text-transfer-transformer/blob/main/released_checkpoints.md#t511) بواسطة Colin Raffel وآخرين. إنه نسخة محسنة من نموذج T5 الأصلي. +تمت المساهمة بهذا النموذج من قبل [patrickvonplaten](https://huggingface.co/patrickvonplaten). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/text-to-text-transfer-transformer/blob/main/released_checkpoints.md#t511). + +## نصائح الاستخدام +يمكنك توصيل أوزان T5v1.1 مباشرة في نموذج T5، كما هو موضح أدناه: + +```python +>>> from transformers import T5ForConditionalGeneration + +>>> model = T5ForConditionalGeneration.from_pretrained("google/t5-v1_1-base") +``` + +تتضمن نسخة T5 1.1 التحسينات التالية مقارنة بنموذج T5 الأصلي: + +- تنشيط GEGLU في الطبقة المخفية للأمامي، بدلاً من ReLU. راجع [هذه الورقة](https://arxiv.org/abs/2002.05202). +- تم إيقاف تشغيل Dropout أثناء التدريب المسبق (تحسين الجودة). يجب إعادة تمكين Dropout أثناء الضبط الدقيق. +- تم التدريب المسبق على C4 فقط دون مزج المهام النهائية. +- لا يوجد مشاركة للثوابت بين طبقة التضمين وطبقة التصنيف. +- يستبدل "xl" و "xxl" "3B" و "11B". تختلف أشكال النموذج قليلاً - `d_model` أكبر و `num_heads` و `d_ff` أصغر. + +ملاحظة: تم التدريب المسبق لنسخة T5 1.1 فقط على [C4](https://huggingface.co/datasets/c4) مع استبعاد أي تدريب إشرافي. لذلك، يجب ضبط هذا النموذج بشكل دقيق قبل استخدامه في مهمة نهائية، على عكس نموذج T5 الأصلي. نظرًا لأن t5v1.1 تم تدريبه بدون إشراف، فلا توجد ميزة حقيقية لاستخدام بادئة المهمة أثناء الضبط الدقيق الأحادي. إذا كنت تقوم بالضبط الدقيق متعدد المهام، فيجب عليك استخدام بادئة. + +أصدرت Google المتغيرات التالية: + +- [google/t5-v1_1-small](https://huggingface.co/google/t5-v1_1-small) +- [google/t5-v1_1-base](https://huggingface.co/google/t5-v1_1-base) +- [google/t5-v1_1-large](https://huggingface.co/google/t5-v1_1-large) +- [google/t5-v1_1-xl](https://huggingface.co/google/t5-v1_1-xl) +- [google/t5-v1_1-xxl](https://huggingface.co/google/t5-v1_1-xxl). + + +راجع [صفحة وثائق T5](t5) للحصول على جميع المراجع API والنصائح وأمثلة التعليمات البرمجية والمفكرات. + + +ترجمة الأجزاء المطلوبة: + +# T5v1.1 + +## نظرة عامة +أطلق كولين رافيل وآخرون إصدار T5v1.1 في مستودع [google-research/text-to-text-transfer-transformer](https://github.com/google-research/text-to-text-transfer-transformer/blob/main/released_checkpoints.md#t511). إنه نسخة محسنة من نموذج T5 الأصلي. +ساهم في هذا النموذج [باتريك فون بلاتين](https://huggingface.co/patrickvonplaten). ويمكن الاطلاع على الكود الأصلي [هنا](https://github.com/google-research/text-to-text-transfer-transformer/blob/main/released_checkpoints.md#t511). + +## نصائح الاستخدام +يمكنك استخدام أوزان T5v1.1 مباشرة في نموذج T5، كما يلي: + +```python +>>> from transformers import T5ForConditionalGeneration + +>>> model = T5ForConditionalGeneration.from_pretrained("google/t5-v1_1-base") +``` + +تتضمن نسخة T5 1.1 التحسينات التالية مقارنة بنموذج T5 الأصلي: + +- تنشيط GEGLU في الطبقة المخفية للأمامي، بدلاً من ReLU. راجع [هذه الورقة](https://arxiv.org/abs/2002.05202). +- تم إيقاف تشغيل Dropout أثناء التدريب المسبق (تحسين الجودة). يجب إعادة تشغيل Dropout أثناء الضبط الدقيق. +- تم التدريب المسبق على C4 فقط دون مزج المهام النهائية. +- لا توجد مشاركة للثوابت بين طبقة التضمين وطبقة التصنيف. +- يستبدل "xl" و "xxl" "3B" و "11B". تختلف أشكال النموذج قليلاً - `d_model` أكبر و `num_heads` و `d_ff` أصغر. + +ملاحظة: تم التدريب المسبق لنسخة T5 1.1 فقط على [C4](https://huggingface.co/datasets/c4) مع استبعاد أي تدريب إشرافي. لذلك، يجب ضبط هذا النموذج بشكل دقيق قبل استخدامه في مهمة نهائية، على عكس نموذج T5 الأصلي. نظرًا لأن T5v1.1 تم تدريبه بدون إشراف، فلا توجد فائدة حقيقية من استخدام بادئة المهمة أثناء الضبط الدقيق الأحادي. إذا كنت تقوم بالضبط الدقيق متعدد المهام، فيجب عليك استخدام بادئة. + +أصدرت جوجل المتغيرات التالية: + +- [google/t5-v1_1-small](https://huggingface.co/google/t5-v1_1-small) +- [google/t5-v1_1-base](https://huggingface.co/google/t5-v1_1-base) +- [google/t5-v1_1-large](https://huggingface.co/google/t5-v1_1-large) +- [google/t5-v1_1-xl](https://huggingface.co/google/t5-v1_1-xl) +- [google/t5-v1_1-xxl](https://huggingface.co/google/t5-v1_1-xxl). + + +راجع [صفحة وثائق T5](t5) للحصول على جميع مراجع API والنصائح وأمثلة التعليمات البرمجية والمفكرات. + \ No newline at end of file From c2f1972e9747fbaf94998e40a9120b733a96d6d4 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:52 +0300 Subject: [PATCH 589/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/table-transformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/table-transformer.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docs/source/ar/model_doc/table-transformer.md diff --git a/docs/source/ar/model_doc/table-transformer.md b/docs/source/ar/model_doc/table-transformer.md new file mode 100644 index 00000000000000..416ffcc3cd6fcd --- /dev/null +++ b/docs/source/ar/model_doc/table-transformer.md @@ -0,0 +1,41 @@ +# Table Transformer + +## نظرة عامة + +تم اقتراح نموذج Table Transformer في ورقة بحثية بعنوان [PubTables-1M: Towards comprehensive table extraction from unstructured documents](https://arxiv.org/abs/2110.00061) بواسطة Brandon Smock و Rohith Pesala و Robin Abraham. يقدم المؤلفون مجموعة بيانات جديدة تسمى PubTables-1M، لقياس التقدم في استخراج الجداول من المستندات غير المنظمة، بالإضافة إلى التعرف على بنية الجدول والتحليل الوظيفي. يقوم المؤلفون بتدريب نموذجين [DETR](detr)، أحدهما للكشف عن الجدول والآخر للتعرف على بنية الجدول، يُطلق عليهما Table Transformers. + +ملخص الورقة البحثية هو كما يلي: + +* "تم مؤخرًا إحراز تقدم كبير في تطبيق التعلم الآلي على مشكلة استنتاج بنية الجدول واستخراجه من المستندات غير المنظمة. ومع ذلك، يظل أحد أكبر التحديات هو إنشاء مجموعات بيانات ذات حقائق أرضية كاملة وغير غامضة على نطاق واسع. ولمعالجة هذا الأمر، نقوم بتطوير مجموعة بيانات جديدة أكثر شمولاً لاستخراج الجداول، تسمى PubTables-1M. تحتوي PubTables-1M على ما يقرب من مليون جدول من المقالات العلمية، وتدعم طرق إدخال متعددة، وتحتوي على معلومات تفصيلية حول الرؤوس ومواقع بنيات الجداول، مما يجعلها مفيدة لطائفة واسعة من أساليب النمذجة. كما يعالج مصدرًا مهمًا لعدم اتساق الحقائق الأرضية الملحوظ في مجموعات البيانات السابقة، والذي يُطلق عليه الإفراط في التجزئة، باستخدام إجراء التوحيد القياسي الجديد. نثبت أن هذه التحسينات تؤدي إلى زيادة كبيرة في أداء التدريب وتقدير أكثر موثوقية لأداء النموذج في التقييم للتعرف على بنية الجدول. علاوة على ذلك، نُظهر أن نماذج الكشف القائمة على المحول التي تم تدريبها على PubTables-1M تنتج نتائج ممتازة لجميع المهام الثلاث للكشف والتعرف على البنية والتحليل الوظيفي دون الحاجة إلى أي تخصيص خاص لهذه المهام." + + + + تم توضيح كشف الجدول والتعرف على بنية الجدول. مأخوذة من الورقة البحثية الأصلية. + +قام المؤلفون بإطلاق نموذجين، أحدهما لـ [كشف الجدول](https://huggingface.co/microsoft/table-transformer-detection) في المستندات، والآخر لـ [التعرف على بنية الجدول](https://huggingface.co/microsoft/table-transformer-structure-recognition) (مهمة التعرف على الصفوف والأعمدة الفردية في جدول). + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/table-transformer). + +## الموارد + + + +- يمكن العثور على دفتر ملاحظات توضيحي لنموذج Table Transformer [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/Table%20Transformer). +- اتضح أن إضافة الحشو إلى الصور مهم جدًا للكشف. يمكن العثور على مناقشة مثيرة للاهتمام على GitHub مع ردود من المؤلفين [هنا](https://github.com/microsoft/table-transformer/issues/68). + +## TableTransformerConfig + +[[autodoc]] TableTransformerConfig + +## TableTransformerModel + +[[autodoc]] TableTransformerModel + +- forward + +## TableTransformerForObjectDetection + +[[autodoc]] TableTransformerForObjectDetection + +- forward \ No newline at end of file From c4ffc410054ee39fbc601ea98c25f2c286ab2867 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:54 +0300 Subject: [PATCH 590/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/tapas.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/tapas.md | 440 ++++++++++++++++++++++++++++++ 1 file changed, 440 insertions(+) create mode 100644 docs/source/ar/model_doc/tapas.md diff --git a/docs/source/ar/model_doc/tapas.md b/docs/source/ar/model_doc/tapas.md new file mode 100644 index 00000000000000..f0afd43741afbf --- /dev/null +++ b/docs/source/ar/model_doc/tapas.md @@ -0,0 +1,440 @@ +# TAPAS + +## نظرة عامة + +اقترح نموذج TAPAS في ورقة "TAPAS: Weakly Supervised Table Parsing via Pre-training" بواسطة جوناثان هيرزيغ وآخرون. وهو نموذج يعتمد على BERT مصمم خصيصًا (ومدرب مسبقًا) للإجابة على الأسئلة حول البيانات الجدولية. مقارنة بـ BERT، يستخدم TAPAS embeddings الموضعية النسبية وله 7 أنواع من الرموز التي تشفر البنية الجدولية. تم التدريب المسبق لـ TAPAS على هدف نمذجة اللغة المقنعة (MLM) على مجموعة بيانات كبيرة تضم ملايين الجداول من ويكيبيديا الإنجليزية والنصوص المقابلة. + +بالنسبة للإجابة على الأسئلة، يحتوي TAPAS على رأسين في الأعلى: رأس اختيار الخلية ورأس التجميع، لأداء التجميعات (مثل العد أو الجمع) بين الخلايا المحددة. تم ضبط TAPAS بشكل دقيق على عدة مجموعات بيانات: + +- SQA (الإجابة على الأسئلة المتسلسلة من مايكروسوفت) +- WTQ (أسئلة الجدول على ويكي من جامعة ستانفورد) +- WikiSQL (من Salesforce) + +يحقق TAPAS حالة فنية على كل من SQA و WTQ، بينما يحقق أداءًا مماثلاً لحالة SOTA على WikiSQL، مع بنية أبسط بكثير. + +ملخص الورقة هو كما يلي: + +*يُنظر عادةً إلى الإجابة على الأسئلة الطبيعية على الجداول على أنها مهمة تحليل دلالي. للتخفيف من تكلفة جمع الأشكال المنطقية الكاملة، يركز أحد الأساليب الشائعة على الإشراف الضعيف المكون من الدلالات بدلاً من الأشكال المنطقية. ومع ذلك، فإن تدريب برامج التحليل الدلالي من الإشراف الضعيف يطرح صعوبات، بالإضافة إلى ذلك، يتم استخدام الأشكال المنطقية المولدة كخطوة وسيطة فقط قبل استرداد الدلالة. في هذه الورقة، نقدم TAPAS، وهو نهج للإجابة على الأسئلة على الجداول دون توليد أشكال منطقية. يتم تدريب TAPAS من الإشراف الضعيف، ويتوقع الدلالة عن طريق تحديد خلايا الجدول وتطبيق مشغل تجميع مطابق بشكل اختياري على هذا التحديد. يوسع TAPAS بنية BERT لتشفير الجداول كإدخال، ويتم تهيئته من التدريب المشترك الفعال لشرائح النص والجداول المستخرجة من ويكيبيديا، ويتم تدريبه من النهاية إلى النهاية. نجري تجارب على ثلاث مجموعات بيانات مختلفة لتحليل الدلالات، ونجد أن TAPAS يتفوق على نماذج التحليل الدلالي أو ينافسها من خلال تحسين دقة SOTA على SQA من 55.1 إلى 67.2 والأداء على قدم المساواة مع SOTA على WIKISQL وWIKITQ، ولكن مع بنية نموذج أبسط. بالإضافة إلى ذلك، نجد أن التعلم التحويلي، وهو أمر بسيط في إعدادنا، من WIKISQL إلى WIKITQ، ينتج عنه دقة تبلغ 48.7، أي أعلى بـ 4.2 نقطة من SOTA.* + +بالإضافة إلى ذلك، قام مؤلفو الورقة بتدريب TAPAS بشكل مسبق للتعرف على استنتاج الجدول، من خلال إنشاء مجموعة بيانات متوازنة من ملايين الأمثلة التدريبية التي تم إنشاؤها تلقائيًا والتي يتم تعلمها في خطوة وسيطة قبل الضبط الدقيق. يطلق مؤلفو TAPAS على هذا التدريب المسبق الإضافي اسم "التدريب المسبق الوسيط" (حيث يتم تدريب TAPAS مسبقًا أولاً على MLM، ثم على مجموعة بيانات أخرى). ووجدوا أن التدريب الوسيط يحسن الأداء بشكل أكبر على SQA، محققًا حالة فنية جديدة، بالإضافة إلى حالة فنية على TabFact، وهي مجموعة بيانات واسعة النطاق تحتوي على 16 ألف جدول من ويكيبيديا لاستنتاج الجدول (مهمة تصنيف ثنائي). لمزيد من التفاصيل، راجع ورقة المتابعة الخاصة بهم: "Understanding tables with intermediate pre-training". + +![TAPAS architecture](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/tapas_architecture.png) + +تمت المساهمة بهذا النموذج من قبل [nielsr]. تمت المساهمة في إصدار TensorFlow من هذا النموذج بواسطة [kamalkraj]. يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/tapas). + +## نصائح الاستخدام + +- يستخدم TAPAS embeddings الموضعية النسبية بشكل افتراضي (إعادة تعيين embeddings الموضعية لكل خلية من الجدول). لاحظ أن هذا شيء تمت إضافته بعد نشر ورقة TAPAS الأصلية. وفقًا للمؤلفين، عادة ما يؤدي ذلك إلى أداء أفضل قليلاً، ويتيح لك تشفير تسلسلات أطول دون نفاد embeddings. ينعكس هذا في `reset_position_index_per_cell` معلمة [`TapasConfig`]، والتي يتم تعيينها إلى `True` بشكل افتراضي. تستخدم الإصدارات الافتراضية من النماذج المتوفرة على [hub] جميع embeddings الموضعية النسبية. لا يزال بإمكانك استخدام تلك التي تحتوي على embeddings الموضعية المطلقة عن طريق تمرير حجة إضافية `revision="no_reset"` عند استدعاء طريقة `from_pretrained()`. لاحظ أنه يُنصح عادةً بتبطين الإدخالات على اليمين بدلاً من اليسار. + +- يعتمد TAPAS على BERT، لذا فإن "TAPAS-base"، على سبيل المثال، يقابل بنية "BERT-base". بالطبع، سيؤدي "TAPAS-large" إلى أفضل أداء (النتائج المبلغ عنها في الورقة هي من "TAPAS-large"). يتم عرض نتائج النماذج ذات الأحجام المختلفة على [مستودع GitHub الأصلي](https://github.com/google-research/tapas). + +- يحتوي TAPAS على نقاط تفتيش تمت معايرتها بدقة على SQA، وهي قادرة على الإجابة على الأسئلة المتعلقة بالجدول في إعداد المحادثة. وهذا يعني أنه يمكنك طرح أسئلة متابعة مثل "ما هو عمره؟" المتعلقة بالسؤال السابق. لاحظ أن عملية التمرير الأمامي لـ TAPAS تختلف قليلاً في حالة الإعداد المحادثي: في هذه الحالة، يجب إدخال كل زوج من الجدول والأسئلة واحدًا تلو الآخر إلى النموذج، بحيث يمكن الكتابة فوق معرّفات نوع الرمز `prev_labels` بواسطة `labels` المتوقعة من النموذج للسؤال السابق. راجع قسم "الاستخدام" لمزيد من المعلومات. + +- يشبه TAPAS نموذج BERT وبالتالي يعتمد على هدف نمذجة اللغة المقيدة (MLM). لذلك، فهو فعال في التنبؤ بالرموز المقنعة وفي NLU بشكل عام، ولكنه غير مثالي لتوليد النصوص. النماذج المدربة بهدف نمذجة اللغة السببية (CLM) أفضل في هذا الصدد. لاحظ أنه يمكن استخدام TAPAS كترميز في إطار EncoderDecoderModel، لدمجه مع فك تشفير نصي ذاتي الارتباط مثل GPT-2. +## الاستخدام: الضبط الدقيق + +هنا نشرح كيف يمكنك ضبط نموذج [TapasForQuestionAnswering] بدقة على مجموعة البيانات الخاصة بك. + +**الخطوة 1: اختر واحدة من 3 طرق يمكنك من خلالها استخدام TAPAS - أو إجراء تجربة** + +بشكل أساسي، هناك 3 طرق مختلفة يمكن من خلالها ضبط نموذج [TapasForQuestionAnswering] بدقة، والتي تتوافق مع مجموعات البيانات المختلفة التي تم ضبط نموذج Tapas عليها: + +1. SQA: إذا كنت مهتمًا بطرح أسئلة متابعة تتعلق بجدول ما، في إعداد محادثة. على سبيل المثال، إذا كان سؤالك الأول هو "ما اسم الممثل الأول؟" يمكنك بعد ذلك طرح سؤال متابعة مثل "ما عمره؟". هنا، لا تتضمن الأسئلة أي تجميع (جميع الأسئلة هي أسئلة اختيار الخلية). + +2. WTQ: إذا لم تكن مهتمًا بطرح أسئلة في إعداد محادثة، ولكن بدلاً من ذلك تريد فقط طرح أسئلة تتعلق بجدول قد يتضمن التجميع، مثل حساب عدد الصفوف أو جمع قيم الخلايا أو حساب متوسطها. يمكنك بعد ذلك، على سبيل المثال، أن تسأل "ما هو العدد الإجمالي للأهداف التي سجلها كريستيانو رونالدو في مسيرته؟". تُعرف هذه الحالة أيضًا باسم **الإشراف الضعيف**، حيث يجب على النموذج نفسه أن يتعلم عامل التجميع المناسب (SUM/COUNT/AVERAGE/NONE) بناءً على إجابة السؤال فقط كإشراف. + +3. WikiSQL-supervised: تستند مجموعة البيانات هذه إلى WikiSQL مع إعطاء النموذج عامل التجميع الصحيح أثناء التدريب. يُطلق على هذا أيضًا اسم **الإشراف القوي**. هنا، يكون تعلم عامل التجميع المناسب أسهل بكثير. + +ملخص: + +| **المهمة** | **مجموعة البيانات المثال** | **الوصف** | +|-------------------------------------|---------------------|---------------------------------------------------------------------------------------------------------| +| محادثة | SQA | محادثي، أسئلة اختيار الخلية فقط | +| الإشراف الضعيف للتجميع | WTQ | قد تتضمن الأسئلة التجميع، ويجب على النموذج تعلم هذا بناءً على الإجابة فقط كإشراف | +| الإشراف القوي للتجميع | WikiSQL-supervised | قد تتضمن الأسئلة التجميع، ويجب على النموذج تعلم هذا بناءً على عامل التجميع الذهبي | + + +يمكن تهيئة نموذج باستخدام قاعدة مدربة مسبقًا ورؤوس تصنيف مهيأة بشكل عشوائي من المركز كما هو موضح أدناه. + +```py +>>> from transformers import TapasConfig, TapasForQuestionAnswering + +>>> # على سبيل المثال، نموذج الحجم الأساسي مع تهيئة SQA الافتراضية +>>> model = TapasForQuestionAnswering.from_pretrained("google/tapas-base") + +>>> # أو، نموذج الحجم الأساسي مع تهيئة WTQ +>>> config = TapasConfig.from_pretrained("google/tapas-base-finetuned-wtq") +>>> model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config) + +>>> # أو، نموذج الحجم الأساسي مع تهيئة WikiSQL +>>> config = TapasConfig("google-base-finetuned-wikisql-supervised") +>>> model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config) +``` + +بالطبع، لا يتعين عليك اتباع إحدى هذه الطرق الثلاث التي تم بها ضبط نموذج TAPAS بدقة. يمكنك أيضًا إجراء تجارب عن طريق تحديد أي معلمات تريد عند تهيئة [`TapasConfig`]، ثم إنشاء [`TapasForQuestionAnswering`] بناءً على تلك التهيئة. على سبيل المثال، إذا كانت لديك مجموعة بيانات تحتوي على أسئلة محادثية وأسئلة قد تتضمن التجميع، فيمكنك القيام بذلك بهذه الطريقة. إليك مثال: + +```py +>>> from transformers import TapasConfig, TapasForQuestionAnswering + +>>> # يمكنك تهيئة رؤوس التصنيف بأي طريقة تريدها (راجع وثائق TapasConfig) +>>> config = TapasConfig(num_aggregation_labels=3, average_logits_per_cell=True) +>>> # تهيئة نموذج الحجم الأساسي المُدرب مسبقًا برؤوس التصنيف المخصصة لدينا +>>> model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config) +``` + + +يمكن تهيئة نموذج باستخدام قاعدة مدربة مسبقًا ورؤوس تصنيف مهيأة بشكل عشوائي من المركز كما هو موضح أدناه. تأكد من تثبيت اعتماد [tensorflow_probability](https://github.com/tensorflow/probability): + +```py +>>> from transformers import TapasConfig, TFTapasForQuestionAnswering + +>>> # على سبيل المثال، نموذج الحجم الأساسي مع تهيئة SQA الافتراضية +>>> model = TFTapasForQuestionAnswering.from_pretrained("google/tapas-base") + +>>> # أو، نموذج الحجم الأساسي مع تهيئة WTQ +>>> config = TapasConfig.from_pretrained("google/tapas-base-finetuned-wtq") +>>> model = TFTapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config) + +>>> # أو، نموذج الحجم الأساسي مع تهيئة WikiSQL +>>> config = TapasConfig("google-base-finetuned-wikisql-supervised") +>>> model = TFTapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config) +``` + +بالطبع، لا يتعين عليك اتباع إحدى هذه الطرق الثلاث التي تم بها ضبط نموذج TAPAS بدقة. يمكنك أيضًا إجراء تجارب عن طريق تحديد أي معلمات تريد عند تهيئة [`TapasConfig`]، ثم إنشاء [`TFTapasForQuestionAnswering`] بناءً على تلك التهيئة. على سبيل المثال، إذا كانت لديك مجموعة بيانات تحتوي على أسئلة محادثية وأسئلة قد تتضمن التجميع، فيمكنك القيام بذلك بهذه الطريقة. إليك مثال: + +```py +>>> from transformers import TapasConfig, TFTapasForQuestionAnswering + +>>> # يمكنك تهيئة رؤوس التصنيف بأي طريقة تريدها (راجع وثائق TapasConfig) +>>> config = TapasConfig(num_aggregation_labels=3, average_logits_per_cell=True) +>>> # تهيئة نموذج الحجم الأساسي المُدرب مسبقًا برؤوس التصنيف المخصصة لدينا +>>> model = TFTapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config) +``` + + + +ما يمكنك القيام به أيضًا هو البدء من نقطة ضبط دقيقة جاهزة. تجدر الإشارة هنا إلى أن نقطة الضبط الدقيق الجاهزة على WTQ بها بعض المشكلات بسبب فقدان L2 الذي يعد هشًا إلى حد ما. راجع [هنا](https://github.com/google-research/tapas/issues/91#issuecomment-735719340) للحصول على مزيد من المعلومات. + +لعرض قائمة بجميع نقاط التحقق من Tapas المُدربة مسبقًا والمضبوطة بدقة المتوفرة في مركز HuggingFace، راجع [هنا](https://huggingface.co/models?search=tapas). + +**الخطوة 2: قم بإعداد بياناتك بتنسيق SQA** + +ثانيًا، بغض النظر عما اخترته أعلاه، يجب عليك إعداد مجموعة البيانات الخاصة بك بتنسيق [SQA](https://www.microsoft.com/en-us/download/details.aspx?id=54253). هذا التنسيق عبارة عن ملف TSV/CSV مع الأعمدة التالية: + +- `id`: اختياري، معرف زوج الجدول والسؤال، لأغراض مسك الدفاتر. +- `annotator`: اختياري، معرف الشخص الذي قام بتعليق زوج الجدول والسؤال، لأغراض مسك الدفاتر. +- `position`: رقم صحيح يشير إلى ما إذا كان السؤال هو الأول أو الثاني أو الثالث... المتعلق بالجدول. مطلوب فقط في حالة الإعداد المحادثي (SQA). لا تحتاج إلى هذا العمود في حالة اختيار WTQ/WikiSQL-supervised. +- `question`: سلسلة نصية +- `table_file`: سلسلة نصية، اسم ملف csv يحتوي على البيانات الجدولية +- `answer_coordinates`: قائمة من زوج واحد أو أكثر (كل زوج هو إحداثيات خلية، أي زوج صف وعمود يشكل جزءًا من الإجابة) +- `answer_text`: قائمة من سلسلة نصية واحدة أو أكثر (كل سلسلة هي قيمة خلية تشكل جزءًا من الإجابة) +- `aggregation_label`: فهرس عامل التجميع. مطلوب فقط في حالة الإشراف القوي للتجميع (حالة WikiSQL-supervised) +- `float_answer`: الإجابة الرقمية للسؤال، إذا كان هناك (np.nan إذا لم يكن هناك). مطلوب فقط في حالة الإشراف الضعيف للتجميع (مثل WTQ وWikiSQL) + +يجب أن تكون الجداول نفسها موجودة في مجلد، مع وجود كل جدول في ملف csv منفصل. لاحظ أن مؤلفي خوارزمية TAPAS استخدموا نصوص تحويل مع بعض المنطق التلقائي لتحويل مجموعات البيانات الأخرى (WTQ، WikiSQL) إلى تنسيق SQA. يوضح المؤلف ذلك [هنا](https://github.com/google-research/tapas/issues/50#issuecomment-705465960). يمكن العثور على تحويل لنص البرنامج النصي هذا يعمل مع تنفيذ HuggingFace [هنا](https://github.com/NielsRogge/tapas_utils). من المثير للاهتمام أن نصوص التحويل هذه ليست مثالية (يتم ملء حقلي `answer_coordinates` و`float_answer` بناءً على `answer_text`)، مما يعني أن نتائج WTQ وWikiSQL يمكن أن تتحسن بالفعل. + +**الخطوة 3: قم بتحويل بياناتك إلى تنسورات باستخدام TapasTokenizer** + + + +ثالثًا، نظرًا لأنك أعددت بياناتك بتنسيق TSV/CSV هذا (وملفات csv المقابلة التي تحتوي على البيانات الجدولية)، فيمكنك بعد ذلك استخدام [`TapasTokenizer`] لتحويل أزواج الجدول والسؤال إلى `input_ids` و`attention_mask` و`token_type_ids` وهكذا. مرة أخرى، بناءً على أي من الحالات الثلاث التي اخترتها أعلاه، يتطلب [`TapasForQuestionAnswering`] مدخلات مختلفة ليتم ضبطها بدقة: + +| **المهمة** | **المدخلات المطلوبة** | +|------------------------------------|---------------------------------------------------------------------------------------------------------------------| +| محادثة | `input_ids`، `attention_mask`، `token_type_ids`، `labels` | +| الإشراف الضعيف للتجميع | `input_ids`، `attention_mask`، `token_type_ids`، `labels`، `numeric_values`، `numeric_values_scale`، `float_answer` | +| الإشراف القوي للتجميع | `input ids`، `attention mask`، `token type ids`، `labels`، `aggregation_labels` | + +ينشئ [`TapasTokenizer`] القيم `labels` و`numeric_values` و`numeric_values_scale` بناءً على عمودي `answer_coordinates` و`answer_text` في ملف TSV. القيم `float_answer` و`aggregation_labels` موجودة بالفعل في ملف TSV من الخطوة 2. إليك مثال: + +```py +>>> from transformers import TapasTokenizer +>>> import pandas as pd + +>>> model_name = "google/tapas-base" +>>> tokenizer = TapasTokenizer.from_pretrained(model_name) + +>>> data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]} +>>> queries = [ +... "What is the name of the first actor?", +... "How many movies has George Clooney played in?", +... "What is the total number of movies?", +... ] +>>> answer_coordinates = [[(0, 0)], [(2, 1)], [(0, 1), (1, 1), (2, 1)]] +>>> answer_text = [["Brad Pitt"], ["69"], ["209"]] +>>> table = pd.DataFrame.from_dict(data) +>>> inputs = tokenizer( +... table=table, +... queries=queries, +... answer_coordinates=answer_coordinates, +... answer_text=answer_text, +... padding="max_length", +... return_tensors="pt", +... ) +>>> inputs +{'input_ids': tensor([[ ... ]]), 'attention_mask': tensor([[...]]), 'token_type_ids': tensor([[[...]]]), +'numeric_values': tensor([[ ... ]]), 'numeric_values_scale: tensor([[ ... ]]), labels: tensor([[ ... ]])} +``` + +لاحظ أن [`TapasTokenizer`] يتوقع أن تكون بيانات الجدول **نصًا فقط**. يمكنك استخدام `.astype(str)` على dataframe لتحويله إلى بيانات نصية فقط. + +بالطبع، هذا يوضح فقط كيفية تشفير مثال تدريبي واحد. يُنصح بإنشاء برنامج تحميل بيانات لإجراء التكرار على الدفعات: + +```py +>>> import torch +>>> import pandas as pd + +>>> tsv_path = "your_path_to_the_tsv_file" +>>> table_csv_path = "your_path_to_a_directory_containing_all_csv_files" + + +>>> class TableDataset(torch.utils.data.Dataset): +... def __init__(self, data, tokenizer): +... self.data = data +... self.tokenizer = tokenizer + +... def __getitem__(self, idx): +... item = data.iloc[idx] +... table = pd.read_csv(table_csv_path + item.table_file).astype( +... str +... ) # تأكد من جعل بيانات الجدول نصية فقط +... encoding = self.tokenizer( +... table=table, +... queries=item.question, +... answer_coordinates=item.answer_coordinates, +... answer_text=item.answer_text, +... truncation=True, +... padding="max_length", +... return_tensors="pt", +... ) +... # احذف بُعد الدُفعة الذي يضيفه tokenizer بشكل افتراضي +... encoding = {key: val.squeeze(0) for key, val in encoding.items()} +... # أضف float_answer المطلوب أيضًا (حالة الإشراف الضعيف للتجميع) +... encoding["float_answer"] = torch.tensor(item.float_answer) +... return encoding + +... def __len__(self): +... return len(self.data) + + +>>> data = pd.read_csv(tsv_path, sep="\t") +>>> train_dataset = TableDataset(data, tokenizer) +>>> train_dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=32) +``` + + +ثالثًا، نظرًا لأنك أعددت بياناتك بتنسيق TSV/CSV هذا (وملفات csv المقابلة التي تحتوي على البيانات الجدولية)، فيمكنك بعد ذلك استخدام [`TapasTokenizer`] لتحويل أزواج الجدول والسؤال إلى `input_ids` و`attention_mask` و`token_type_ids` وهكذا. مرة أخرى، بناءً على أي من الحالات الثلاث التي اخترتها أعلاه، يتطلب [`TFTapasForQuestionAnswering`] مدخلات مختلفة ليتم ضبطها بدقة: + +| **المهمة** | **المدخلات المطلوبة** | +|------------------------------------|---------------------------------------------------------------------------------------------------------------------| +| محادثة | `input_ids`، `attention_mask`، `token_type_ids`، `labels` | +| الإشراف الضعيف للتجميع | `input_ids`، `attention_mask`، `token_type_ids`، `labels`، `numeric_values`، `numeric_values_scale`، `float_answer` | +| الإشراف القوي للتجميع | `input ids`، `attention mask`، `token type ids`، `labels`، `aggregation_labels` | + +ينشئ [`TapasTokenizer`] القيم `labels` و`numeric_values` و`numeric_values_scale` بناءً على عمودي `answer_coordinates` و`answer_text` في ملف TSV. القيم `float_answer` و`aggregation_labels` موجودة بالفعل في ملف TSV من الخطوة +## Usage: inference + + + + +في هذا القسم، نشرح كيفية استخدام [`TapasForQuestionAnswering`] أو [`TFTapasForQuestionAnswering`] للتنبؤ (أي إجراء تنبؤات على بيانات جديدة). للتنبؤ، يجب توفير `input_ids` و `attention_mask` و `token_type_ids` فقط (والتي يمكن الحصول عليها باستخدام [`TapasTokenizer`]) إلى النموذج للحصول على logits. بعد ذلك، يمكنك استخدام طريقة [`~models.tapas.tokenization_tapas.convert_logits_to_predictions`] لتحويل هذه القيم إلى إحداثيات تنبؤات ومؤشرات تجميع اختيارية. + +ومع ذلك، لاحظ أن التنبؤ يختلف باختلاف ما إذا كان الإعداد محادثيًا أم لا. في الإعداد غير المحادثي، يمكن إجراء التنبؤ بالتوازي لجميع أزواج الجدول-السؤال في دفعة. إليك مثال على ذلك: + +```py +>>> from transformers import TapasTokenizer, TapasForQuestionAnswering +>>> import pandas as pd + +>>> model_name = "google/tapas-base-finetuned-wtq" +>>> model = TapasForQuestionAnswering.from_pretrained(model_name) +>>> tokenizer = TapasTokenizer.from_pretrained(model_name) + +>>> data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]} +>>> queries = [ +... "What is the name of the first actor?", +... "How many movies has George Clooney played in?", +... "What is the total number of movies?", +... ] +>>> table = pd.DataFrame.from_dict(data) +>>> inputs = tokenizer(table=table, queries=queries, padding="max_length", return_tensors="pt") +>>> outputs = model(**inputs) +>>> predicted_answer_coordinates, predicted_aggregation_indices = tokenizer.convert_logits_to_predictions( +... inputs, outputs.logits.detach(), outputs.logits_aggregation.detach() +... ) + +>>> # دعنا نطبع النتائج: +>>> id2aggregation = {0: "NONE", 1: "SUM", 2: "AVERAGE", 3: "COUNT"} +>>> aggregation_predictions_string = [id2aggregation[x] for x in predicted_aggregation_indices] + +>>> answers = [] +>>> for coordinates in predicted_answer_coordinates: +... if len(coordinates) == 1: +... # خلية واحدة فقط: +... answers.append(table.iat[coordinates[0]]) +... else: +... # خلايا متعددة +... cell_values = [] +... for coordinate in coordinates: +... cell_values.append(table.iat[coordinate]) +... answers.append(", ".join(cell_values)) + +>>> display(table) +>>> print("") +>>> for query, answer, predicted_agg in zip(queries, answers, aggregation_predictions_string): +... print(query) +... if predicted_agg == "NONE": +... print("Predicted answer: " + answer) +... else: +... print("Predicted answer: " + predicted_agg + " > " + answer) +What is the name of the first actor? +Predicted answer: Brad Pitt +How many movies has George Clooney played in? +Predicted answer: COUNT > 69 +What is the total number of movies? +Predicted answer: SUM > 87, 53, 69 +``` + + + +في هذا القسم، نشرح كيفية استخدام [`TFTapasForQuestionAnswering`] للتنبؤ (أي إجراء تنبؤات على بيانات جديدة). للتنبؤ، يجب توفير `input_ids` و `attention_mask` و `token_type_ids` فقط (والتي يمكن الحصول عليها باستخدام [`TapasTokenizer`]) إلى النموذج للحصول على logits. بعد ذلك، يمكنك استخدام طريقة [`~models.tapas.tokenization_tapas.convert_logits_to_predictions`] لتحويل هذه القيم إلى إحداثيات تنبؤات ومؤشرات تجميع اختيارية. + +ومع ذلك، لاحظ أن التنبؤ يختلف باختلاف ما إذا كان الإعداد محادثيًا أم لا. في الإعداد غير المحادثي، يمكن إجراء التنبؤ بالتوازي لجميع أزواج الجدول-السؤال في دفعة. إليك مثال على ذلك: + +```py +>>> from transformers import TapasTokenizer, TFTapasForQuestionAnswering +>>> import pandas as pd + +>>> model_name = "google/tapas-base-finetuned-wtq" +>>> model = TFTapasForQuestionAnswering.from_pretrained(model_name) +>>> tokenizer = TapasTokenizer.from_pretrained(model_name) + +>>> data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]} +>>> queries = [ +... "What is the name of the first actor?", +... "How many movies has George Clooney played in?", +... "What is the total number of movies?", +... ] +>>> table = pd.DataFrame.from_dict(data) +>>> inputs = tokenizer(table=table, queries=queries, padding="max_length", return_tensors="tf") +>>> outputs = model(**inputs) +>>> predicted_answer_coordinates, predicted_aggregation_indices = tokenizer.convert_logits_to_predictions( +... inputs, outputs.logits, outputs.logits_aggregation +... ) + +>>> # دعنا نطبع النتائج: +>>> id2aggregation = {0: "NONE", 1: "SUM", 2: "AVERAGE", 3: "COUNT"} +>>> aggregation_predictions_string = [id2aggregation[x] for x in predicted_aggregation_indices] + +>>> answers = [] +>>> for coordinates in predicted_answer_coordinates: +... if len(coordinates) == 1: +... # خلية واحدة فقط: +... answers.append(table.iat[coordinates[0]]) +... else: +... # خلايا متعددة +... cell_values = [] +... for coordinate in coordinates: +... cell_values.append(table.iat[coordinate]) +... answers.append(", ".join(cell_values)) + +>>> display(table) +>>> print("") +>>> for query, answer, predicted_agg in zip(queries, answers, aggregation_predictions_string): +... print(query) +... if predicted_agg == "NONE": +... print("Predicted answer: " + answer) +... else: +... print("Predicted answer: " + predicted_agg + " > " + answer) +What is the name of the first actor? +Predicted answer: Brad Pitt +How many movies has George Clooney played in? +Predicted answer: COUNT > 69 +What is the total number of movies? +Predicted answer: SUM > 87, 53, 69 +``` + + + + +في حالة الإعداد المحادثي، يجب توفير كل زوج من الجدول-السؤال **بالتسلسل** إلى النموذج، بحيث يمكن الكتابة فوق أنواع رموز `prev_labels` بواسطة التنبؤات `labels` للزوج السابق من الجدول-السؤال. لمزيد من المعلومات، يمكن الرجوع إلى [هذا الدفتر](https://github.com/NielsRogge/Transformers-Tutorials/blob/master/TAPAS/Fine_tuning_TapasForQuestionAnswering_on_SQA.ipynb) (لـ PyTorch) و [هذا الدفتر](https://github.com/kamalkraj/Tapas-Tutorial/blob/master/TAPAS/Fine_tuning_TapasForQuestionAnswering_on_SQA.ipynb) (لـ TensorFlow). + +## الموارد + +- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification) +- [دليل مهمة نمذجة اللغة المُقنَّعة](../tasks/masked_language_modeling) + +## المخرجات الخاصة بـ TAPAS + +[[autodoc]] models.tapas.modeling_tapas.TableQuestionAnsweringOutput + +## TapasConfig + +[[autodoc]] TapasConfig + +## TapasTokenizer + +[[autodoc]] TapasTokenizer + +- __call__ +- convert_logits_to_predictions +- save_vocabulary + + + + + +## TapasModel + +[[autodoc]] TapasModel + +- forward + +## TapasForMaskedLM + +[[autodoc]] TapasForMaskedLM + +- forward + +## TapasForSequenceClassification + +[[autodoc]] TapasForSequenceClassification + +- forward + +## TapasForQuestionAnswering + +[[autodoc]] TapasForQuestionAnswering + +- forward + + + + + +## TFTapasModel + +[[autodoc]] TFTapasModel + +- call + +## TFTapasForMaskedLM + +[[autodoc]] TFTapasForMaskedLM + +- call + +## TFTapasForSequenceClassification + +[[autodoc]] TFTapasForSequenceClassification + +- call + +## TFTapasForQuestionAnswering + +[[autodoc]] TFTapasForQuestionAnswering + +- call + + + + \ No newline at end of file From 7c0bc8768e14d2c65c15762b83e3e65248c2e331 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:56 +0300 Subject: [PATCH 591/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/tapex.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/tapex.md | 122 ++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/source/ar/model_doc/tapex.md diff --git a/docs/source/ar/model_doc/tapex.md b/docs/source/ar/model_doc/tapex.md new file mode 100644 index 00000000000000..e0194e0d0aeccb --- /dev/null +++ b/docs/source/ar/model_doc/tapex.md @@ -0,0 +1,122 @@ +# TAPEX + + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب جديدة لتغيير شفرته. + +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.30.0. + +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.30.0`. + + + +## نظرة عامة + +اقترح نموذج TAPEX في [TAPEX: Table Pre-training via Learning a Neural SQL Executor](https://arxiv.org/abs/2107.07653) بواسطة Qian Liu، Bei Chen، Jiaqi Guo، Morteza Ziyadi، Zeqi Lin، Weizhu Chen، Jian-Guang Lou. يقوم TAPEX بتدريب نموذج BART مسبقًا لحل استعلامات SQL الاصطناعية، وبعد ذلك يمكن ضبطه بدقة للإجابة على أسئلة اللغة الطبيعية المتعلقة ببيانات الجدول، بالإضافة إلى التحقق من حقائق الجدول. + +تم ضبط نموذج TAPEX بدقة على العديد من مجموعات البيانات: + +- [SQA](https://www.microsoft.com/en-us/download/details.aspx?id=54253) (الإجابة على الأسئلة المتسلسلة بواسطة Microsoft) +- [WTQ](https://github.com/ppasupat/WikiTableQuestions) (أسئلة جداول ويكي من جامعة ستانفورد) +- [WikiSQL](https://github.com/salesforce/WikiSQL) (بواسطة Salesforce) +- [TabFact](https://tabfact.github.io/) (بواسطة USCB NLP Lab). + +ملخص الورقة هو كما يلي: + +> حقق التقدم الأخير في التدريب المسبق لنموذج اللغة نجاحًا كبيرًا من خلال الاستفادة من البيانات النصية غير المنظمة على نطاق واسع. ومع ذلك، لا يزال من الصعب تطبيق التدريب المسبق على بيانات الجدول المنظمة بسبب عدم وجود بيانات جدول كبيرة الحجم وعالية الجودة. في هذه الورقة، نقترح TAPEX لإظهار أن التدريب المسبق للجدول يمكن تحقيقه من خلال تعلم منفذ SQL العصبي عبر مجموعة بيانات اصطناعية، يتم الحصول عليها عن طريق توليف استعلامات SQL القابلة للتنفيذ وإخراج التنفيذ الخاص بها تلقائيًا. يعالج TAPEX تحدي ندرة البيانات من خلال توجيه نموذج اللغة لمحاكاة منفذ SQL على مجموعة البيانات الاصطناعية المتنوعة والكبيرة الحجم وعالية الجودة. نقوم بتقييم TAPEX على أربع مجموعات بيانات مرجعية. وتظهر النتائج التجريبية أن TAPEX يتفوق على أساليب التدريب المسبق للجدول السابقة بهامش كبير ويحقق نتائج جديدة رائدة في المجال في جميع مجموعات البيانات. ويشمل ذلك تحسينات على دقة التسمية الموجهة بالإشراف الضعيف في WikiSQL لتصل إلى 89.5% (+2.3%)، ودقة التسمية في WikiTableQuestions لتصل إلى 57.5% (+4.8%)، ودقة التسمية في SQA لتصل إلى 74.5% (+3.5%)، ودقة TabFact لتصل إلى 84.2% (+3.2%). وعلى حد علمنا، هذه هي أول ورقة بحثية تستغل التدريب المسبق للجدول عبر البرامج القابلة للتنفيذ الاصطناعية وتحقق نتائج جديدة رائدة في المجال في مختلف المهام اللاحقة. + +## نصائح الاستخدام + +- TAPEX هو نموذج توليدي (seq2seq). يمكنك توصيل أوزان TAPEX مباشرة في نموذج BART. +- يحتوي TAPEX على نقاط تفتيش على المحاور التي يتم تدريبها مسبقًا فقط، أو ضبطها بدقة على WTQ وSQA وWikiSQL وTabFact. +- يتم تقديم الجمل + الجداول إلى النموذج على الشكل التالي: `sentence + " " + linearized table`. تنسيق الجدول الخطي هو كما يلي: +`col: col1 | col2 | col 3 row 1 : val1 | val2 | val3 row 2 : ...`. +- لدى TAPEX برنامج تشغيل خاص به، والذي يسمح بإعداد جميع البيانات للنموذج بسهولة. يمكنك تمرير أطر بيانات Pandas والسلاسل النصية إلى برنامج التشغيل، وسيقوم تلقائيًا بإنشاء `input_ids` و`attention_mask` (كما هو موضح في أمثلة الاستخدام أدناه). + +### الاستخدام: الاستدلال + +فيما يلي، نوضح كيفية استخدام TAPEX للإجابة على أسئلة الجدول. كما يمكنك أن ترى، يمكنك توصيل أوزان TAPEX مباشرة في نموذج BART. + +نستخدم واجهة برمجة التطبيقات التلقائية [auto API]، والتي ستقوم تلقائيًا بإنشاء برنامج تشفير ([`TapexTokenizer`]) ونموذج ([`BartForConditionalGeneration`]) المناسبين لنا، بناءً على ملف تكوين نقطة التفتيش على المحور. + +```python +>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM +>>> import pandas as pd + +>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/tapex-large-finetuned-wtq") +>>> model = AutoModelForSeq2SeqLM.from_pretrained("microsoft/tapex-large-finetuned-wtq") + +>>> # prepare table + question +>>> data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]} +>>> table = pd.DataFrame.from_dict(data) +>>> question = "how many movies does Leonardo Di Caprio have?" + +>>> encoding = tokenizer(table, question, return_tensors="pt") + +>>> # let the model generate an answer autoregressively +>>> outputs = model.generate(**encoding) + +>>> # decode back to text +>>> predicted_answer = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0] +>>> print(predicted_answer) +53 +``` + +لاحظ أن [`TapexTokenizer`] يدعم أيضًا الاستدلال الدفعي. وبالتالي، يمكنك توفير دفعة من الجداول/الأسئلة المختلفة، أو دفعة من جدول واحد +وأسئلة متعددة، أو دفعة من استعلام واحد وجداول متعددة. دعونا نوضح هذا: + +```python +>>> # prepare table + question +>>> data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]} +>>> table = pd.DataFrame.from_dict(data) +>>> questions = [ +... "how many movies does Leonardo Di Caprio have?", +... "which actor has 69 movies?", +... "what's the first name of the actor who has 87 movies?", +... ] +>>> encoding = tokenizer(table, questions, padding=True, return_tensors="pt") + +>>> # let the model generate an answer autoregressively +>>> outputs = model.generate(**encoding) + +>>> # decode back to text +>>> tokenizer.batch_decode(outputs, skip_special_tokens=True) +[' 53', ' george clooney', ' brad pitt'] +``` + +في حالة الرغبة في التحقق من الجدول (أي مهمة تحديد ما إذا كانت الجملة مدعومة أو مفندة من خلال محتويات جدول)، يمكنك إنشاء مثيل لنموذج [`BartForSequenceClassification`]. يحتوي TAPEX على نقاط تفتيش على المحور تم ضبطها بدقة على TabFact، وهي معيار مرجعي مهم للتحقق من حقائق الجدول (يحقق دقة بنسبة 84%). يوضح مثال التعليمات البرمجية أدناه مرة أخرى الاستفادة من واجهة برمجة التطبيقات التلقائية [auto API]. + +```python +>>> from transformers import AutoTokenizer, AutoModelForSequenceClassification + +>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/tapex-large-finetuned-tabfact") +>>> model = AutoModelForSequenceClassification.from_pretrained("microsoft/tapex-large-finetuned-tabfact") + +>>> # prepare table + sentence +>>> data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]} +>>> table = pd.DataFrame.from_dict(data) +>>> sentence = "George Clooney has 30 movies" + +>>> encoding = tokenizer(table, sentence, return_tensors="pt") + +>>> # forward pass +>>> outputs = model(**encoding) + +>>> # print prediction +>>> predicted_class_idx = outputs.logits[0].argmax(dim=0).item() +>>> print(model.config.id2label[predicted_class_idx]) +Refused +``` + + + +تتشابه بنية TAPEX مع بنية BART، باستثناء عملية البرمجة. راجع [توثيق BART](bart) للحصول على معلومات حول +فئات التكوين ومعلماتها. يتم توثيق برنامج تشفير TAPEX المحدد أدناه. + + + +## TapexTokenizer + +[[autodoc]] TapexTokenizer +- __call__ +- save_vocabulary \ No newline at end of file From 66cfc0a113b751e096a62283c82b0abec736c5e8 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:58 +0300 Subject: [PATCH 592/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/timesformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/timesformer.md | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/source/ar/model_doc/timesformer.md diff --git a/docs/source/ar/model_doc/timesformer.md b/docs/source/ar/model_doc/timesformer.md new file mode 100644 index 00000000000000..f33f82657cfd64 --- /dev/null +++ b/docs/source/ar/model_doc/timesformer.md @@ -0,0 +1,35 @@ +# TimeSformer + +## نظرة عامة + +اقترح نموذج TimeSformer من قبل Facebook Research في ورقة بحثية بعنوان [TimeSformer: Is Space-Time Attention All You Need for Video Understanding?](https://arxiv.org/abs/2102.05095). يعد هذا العمل معلمًا مهمًا في مجال التعرف على الإجراءات كونه أول محول للفيديو. وقد ألهم العديد من الأوراق البحثية في مجال فهم الفيديو والتصنيف القائم على المحول. + +فيما يلي الملخص من الورقة: + +*نقدم نهجًا خاليًا من التراكيب لتصنيف الفيديو يعتمد حصريًا على الاهتمام الذاتي عبر المكان والزمان. وتسمى طريقتنا "TimeSformer"، وهي تتكيف مع الهندسة المعمارية القياسية لمحول الفيديو من خلال تمكين التعلم المباشر للسمات المكانية-الزمانية من تسلسل التصحيح على مستوى الإطار. وتقارن دراستنا التجريبية بين مخططات الاهتمام الذاتي المختلفة وتشير إلى أن "الاهتمام المقسم"، حيث يتم تطبيق الاهتمام الزمني والاهتمام المكاني بشكل منفصل داخل كل كتلة، يؤدي إلى أفضل دقة في تصنيف الفيديو من بين خيارات التصميم التي تم النظر فيها. وعلى الرغم من التصميم الجديد جذريًا، يحقق TimeSformer نتائج متقدمة في مجال التعرف على الإجراءات في العديد من المعايير، بما في ذلك أفضل دقة تم الإبلاغ عنها في Kinetics-400 وKinetics-600. وأخيرًا، مقارنة بالشبكات ثلاثية الأبعاد، فإن نموذجنا أسرع في التدريب، ويمكنه تحقيق كفاءة اختبار أعلى بشكل كبير (مع انخفاض طفيف في الدقة)، ويمكن تطبيقه أيضًا على مقاطع فيديو أطول بكثير (أكثر من دقيقة واحدة). الكود والنماذج متاحة على: [هذا الرابط](https://github.com/facebookresearch/TimeSformer).* + +تمت المساهمة بهذا النموذج من قبل [fcakyon](https://huggingface.co/fcakyon). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/TimeSformer). + +## نصائح الاستخدام + +هناك العديد من المتغيرات المسبقة التدريب. حدد نموذجك المسبق التدريب بناءً على مجموعة البيانات التي تم تدريبه عليها. علاوة على ذلك، يتغير عدد الإطارات المدخلة لكل مقطع بناءً على حجم النموذج، لذلك يجب مراعاة هذا المعلمة عند اختيار نموذجك المسبق التدريب. + +## الموارد + +- [دليل مهمة تصنيف الفيديو](../tasks/video_classification) + +## TimesformerConfig + +[[autodoc]] TimesformerConfig + +## TimesformerModel + +[[autodoc]] TimesformerModel + +- forward + +## TimesformerForVideoClassification + +[[autodoc]] TimesformerForVideoClassification + +- forward \ No newline at end of file From 76d512987ff71fb3793d0235e19a614925e3d029 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:29:59 +0300 Subject: [PATCH 593/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/time=5Fseries=5Ftransformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/time_series_transformer.md | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 docs/source/ar/model_doc/time_series_transformer.md diff --git a/docs/source/ar/model_doc/time_series_transformer.md b/docs/source/ar/model_doc/time_series_transformer.md new file mode 100644 index 00000000000000..c617a711d0af6f --- /dev/null +++ b/docs/source/ar/model_doc/time_series_transformer.md @@ -0,0 +1,57 @@ +# Time Series Transformer + +## نظرة عامة + +نموذج Time Series Transformer هو نموذج Encoder-Decoder Transformer بسيط للتنبؤ بالسلاسل الزمنية. +تمت المساهمة بهذا النموذج من قبل [kashif](https://huggingface.co/kashif). + +## نصائح الاستخدام + +- يشبه هذا النموذج النماذج الأخرى في المكتبة، حيث يمثل [`TimeSeriesTransformerModel`] محول Transformer الخام بدون أي رأس في الأعلى، بينما +يضيف [`TimeSeriesTransformerForPrediction`] رأس توزيع أعلى المحول السابق، والذي يمكن استخدامه للتنبؤ بالسلاسل الزمنية. لاحظ أن هذا ما يسمى بنموذج التنبؤ الاحتمالي، وليس +نموذج التنبؤ النقطي. وهذا يعني أن النموذج يتعلم توزيعًا يمكن أخذ العينات منه. لا يقوم النموذج بإخراج القيم مباشرة. +- يتكون [`TimeSeriesTransformerForPrediction`] من كتلتين: encoder، والذي يأخذ `context_length` من قيم السلسلة الزمنية كإدخال (يسمى `past_values`)، +وفك الترميز، والذي يتنبأ بـ `prediction_length` من قيم السلسلة الزمنية في المستقبل (يسمى `future_values`). أثناء التدريب، يجب توفير +أزواج من (`past_values` و `future_values`) إلى النموذج. +- بالإضافة إلى (`past_values` و `future_values`)، عادة ما يتم توفير ميزات إضافية للنموذج. يمكن أن تكون هذه ما يلي: +- `past_time_features`: الميزات الزمنية التي سيضيفها النموذج إلى `past_values`. تعمل هذه الميزات كـ "ترميزات موضعية" لتشفير المحول. +من الأمثلة على ذلك "يوم الشهر" و "شهر السنة"، وما إلى ذلك كقيم قياسية (ثم يتم تكديسها معًا كمتجه). +على سبيل المثال، إذا تم الحصول على قيمة سلسلة زمنية معينة في 11 أغسطس، فيمكن أن يكون لديك [11، 8] كمتجه ميزة زمنية (11 يمثل "يوم الشهر"، و 8 يمثل "شهر السنة"). +- `future_time_features`: الميزات الزمنية التي سيضيفها النموذج إلى `future_values`. تعمل هذه الميزات كـ "ترميزات موضعية" لفك تشفير المحول. +من الأمثلة على ذلك "يوم الشهر" و "شهر السنة"، وما إلى ذلك كقيم قياسية (ثم يتم تكديسها معًا كمتجه). +على سبيل المثال، إذا تم الحصول على قيمة سلسلة زمنية معينة في 11 أغسطس، فيمكن أن يكون لديك [11، 8] كمتجه ميزة زمنية (11 يمثل "يوم الشهر"، و 8 يمثل "شهر السنة"). +- `static_categorical_features`: الميزات الفئوية الثابتة بمرور الوقت (أي لها نفس القيمة لجميع `past_values` و `future_values`). +مثال على ذلك هو معرف المتجر أو المنطقة الذي يحدد سلسلة زمنية معينة. +لاحظ أن هذه الميزات يجب أن تكون معروفة لجميع نقاط البيانات (بما في ذلك تلك المستقبلية). +- `static_real_features`: ميزات القيمة الحقيقية الثابتة بمرور الوقت (أي لها نفس القيمة لجميع `past_values` و `future_values`). +مثال على ذلك هو التمثيل الصوري للمنتج الذي لديك قيم سلسلة زمنية له (مثل تضمين [ResNet](resnet) لصورة "حذاء" +إذا كانت سلسلة الوقت الخاصة بك تتعلق بمبيعات الأحذية). +لاحظ أن هذه الميزات يجب أن تكون معروفة لجميع نقاط البيانات (بما في ذلك تلك المستقبلية). +- يتم تدريب النموذج باستخدام "التعليم القسري"، على غرار كيفية تدريب محول للترجمة الآلية. وهذا يعني أنه أثناء التدريب، يتم تحويل +`future_values` موضع واحد إلى اليمين كإدخال لفك التشفير، مسبوقًا بالقيمة الأخيرة من `past_values`. في كل خطوة زمنية، يجب على النموذج التنبؤ +الهدف التالي. لذلك، فإن إعداد التدريب يشبه إعداد نموذج GPT للغة، باستثناء أنه لا يوجد مفهوم `decoder_start_token_id` (نحن فقط نستخدم القيمة الأخيرة +من السياق كإدخال أولي لفك التشفير). +- في وقت الاستدلال، نعطي القيمة النهائية لـ `past_values` كإدخال لفك التشفير. بعد ذلك، يمكننا أخذ عينات من النموذج للتنبؤ بالخطوة الزمنية التالية، +والذي يتم تغذيته بعد ذلك إلى فك التشفير من أجل إجراء التنبؤ التالي (يسمى أيضًا التوليد التلقائي). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بواسطة 🌎) لمساعدتك في البدء. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنراجعه! يجب أن يوضح المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- تحقق من منشور المدونة حول Time Series Transformer في مدونة HuggingFace: [التنبؤ بالسلاسل الزمنية الاحتمالية باستخدام محولات 🤗](https://huggingface.co/blog/time-series-transformers) + +## TimeSeriesTransformerConfig + +[[autodoc]] TimeSeriesTransformerConfig + +## TimeSeriesTransformerModel + +[[autodoc]] TimeSeriesTransformerModel + +- forward + +## TimeSeriesTransformerForPrediction + +[[autodoc]] TimeSeriesTransformerForPrediction + +- forward \ No newline at end of file From 435b32bd8df53a6a783c9f3fbf0c9058677651e2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:01 +0300 Subject: [PATCH 594/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/trajectory=5Ftransformer.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/model_doc/trajectory_transformer.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 docs/source/ar/model_doc/trajectory_transformer.md diff --git a/docs/source/ar/model_doc/trajectory_transformer.md b/docs/source/ar/model_doc/trajectory_transformer.md new file mode 100644 index 00000000000000..78884e5d60f166 --- /dev/null +++ b/docs/source/ar/model_doc/trajectory_transformer.md @@ -0,0 +1,27 @@ +# محول المسار + +> ⚠️ هذا الملف مكتوب بتنسيق Markdown ولكنه يحتوي على بناء جمل محدد لمُنشئ وثائقنا (يشبه MDX) قد لا يتم عرضه بشكل صحيح في عارض Markdown الخاص بك. + +## نظرة عامة + +اقتُرح نموذج محول المسار في "تعلم التعزيز غير المتصل كمشكلة واحدة كبيرة في نمذجة التسلسل" بواسطة مايكل جانر، وقيانغ لي، وسيرجي ليفين. + +مقتطف من الورقة البحثية هو كما يلي: + +> "يهتم تعلم التعزيز (RL) عادة بتقدير السياسات الثابتة أو النماذج أحادية الخطوة، والاستفادة من خاصية ماركوف لتقسيم المشكلات حسب الوقت. ومع ذلك، يمكننا أيضًا اعتبار RL كمشكلة نمذجة تسلسل عامة، بهدف إنتاج تسلسل من الإجراءات التي تؤدي إلى تسلسل من المكافآت المرتفعة. ومن المغري، عند النظر إليه بهذه الطريقة، أن نأخذ في الاعتبار ما إذا كانت نماذج التنبؤ بالتسلسل عالية السعة التي تعمل بشكل جيد في المجالات الأخرى، مثل معالجة اللغات الطبيعية، يمكن أن توفر أيضًا حلولًا فعالة لمشكلة RL. ولهذه الغاية، نستكشف كيف يمكن معالجة RL باستخدام أدوات نمذجة التسلسل، باستخدام بنية محول لنمذجة التوزيعات على المسارات وإعادة استخدام البحث الشعاعي كخوارزمية تخطيط. وتبسيط تعلم التعزيز كمشكلة نمذجة تسلسل لمجموعة من قرارات التصميم، مما يسمح لنا بالتخلص من العديد من المكونات الشائعة في خوارزميات RL غير المتصلة. ونحن نثبت مرونة هذا النهج في التنبؤ بالديناميكيات طويلة المدى، وتعلم التقليد، وتعزيز التعلم القائم على الأهداف، وتعزيز التعلم غير المتصل. علاوة على ذلك، نوضح أنه يمكن دمج هذا النهج مع الخوارزميات الحالية الخالية من النماذج لإنتاج مخطط من الطراز الأول في المهام طويلة المدى ذات المكافآت النادرة." + +ساهم في هذا النموذج [CarlCochet](https://huggingface.co/CarlCochet). يمكن العثور على الكود الأصلي [هنا](https://github.com/jannerm/trajectory-transformer). + +## نصائح الاستخدام + +يُستخدم هذا المحول في تعلم التعزيز العميق. لاستخدامه، يجب إنشاء تسلسلات من الإجراءات والحالات والمكافآت من جميع الخطوات الزمنية السابقة. سيعامل هذا النموذج جميع هذه العناصر معًا كتسلسل واحد كبير (مسار). + +## TrajectoryTransformerConfig + +[[autodoc]] TrajectoryTransformerConfig + +## TrajectoryTransformerModel + +[[autodoc]] TrajectoryTransformerModel + +- forward \ No newline at end of file From 655b308122fd4ea3d87272ecdb82ab632c283816 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:03 +0300 Subject: [PATCH 595/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/transfo-xl.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/transfo-xl.md | 118 +++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 docs/source/ar/model_doc/transfo-xl.md diff --git a/docs/source/ar/model_doc/transfo-xl.md b/docs/source/ar/model_doc/transfo-xl.md new file mode 100644 index 00000000000000..c310b82083ab7e --- /dev/null +++ b/docs/source/ar/model_doc/transfo-xl.md @@ -0,0 +1,118 @@ +# Transformer XL + +> ⚠️ هذا النموذج في وضع الصيانة فقط، لذلك لن نقبل أي PRs جديدة لتغيير شفرته. تم إيقاف استخدام هذا النموذج بسبب مشكلات أمنية مرتبطة بـ `pickle.load`. +> نوصي بالتحويل إلى النماذج الأحدث للحصول على أمان محسن. +> في حالة الرغبة في استخدام `TransfoXL` في تجاربك، نوصي باستخدام [نقطة تفتيش Hub](https://huggingface.co/transfo-xl/transfo-xl-wt103) مع مراجعة محددة لضمان تنزيل ملفات آمنة من Hub. +> ستحتاج إلى تعيين متغير البيئة `TRUST_REMOTE_CODE` إلى `True` للسماح باستخدام `pickle.load()`: + +```python +import os +from transformers import TransfoXLTokenizer, TransfoXLLMHeadModel + +os.environ["TRUST_REMOTE_CODE"] = "True" + +checkpoint = 'transfo-xl/transfo-xl-wt103' +revision = '40a186da79458c9f9de846edfaea79c412137f97' + +tokenizer = TransfoXLTokenizer.from_pretrained(checkpoint, revision=revision) +model = TransfoXLLMHeadModel.from_pretrained(checkpoint, revision=revision) +``` + +> إذا واجهت أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.35.0. +> يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.35.0`. + +## نظرة عامة + +تم اقتراح نموذج Transformer-XL في [Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context](https://arxiv.org/abs/1901.02860) بواسطة Zihang Dai و Zhilin Yang و Yiming Yang و Jaime Carbonell و Quoc V. Le و Ruslan Salakhutdinov. إنه محول أحادي الاتجاه (اتجاهي) مع تضمين الموضع النسبي (التذبذب) الذي يمكنه إعادة استخدام الحالات المخفية المحسوبة مسبقًا للاهتمام بسياق أطول (ذاكرة). يستخدم هذا النموذج أيضًا إدخالات Softmax وإخراجها التكيفي (المتصل). + +الملخص من الورقة هو كما يلي: + +> "للتحويلات إمكانية تعلم الاعتماد طويل الأمد، ولكنها مقيدة بسياق ذي طول ثابت في إعداد نمذجة اللغة. نقترح بنية عصبية جديدة تسمى Transformer-XL التي تمكن من تعلم الاعتماد خارج طول ثابت دون تعطيل التماسك الزمني. يتكون من آلية تكرار على مستوى القطاع ومخطط ترميز موضعي جديد. لا تمكن طريقة عملنا من التقاط الاعتماد طويل الأمد فحسب، بل تحل أيضًا مشكلة تجزئة السياق. نتيجة لذلك، يتعلم Transformer-XL الاعتماد الذي يزيد بنسبة 80% عن شبكات RNN وبنسبة 450% عن المحولات الأساسية، ويحقق أداءً أفضل في كل من التسلسلات القصيرة والطويلة، وهو أسرع بمقدار 1800 مرة من المحولات الأساسية أثناء التقييم. وبشكل ملحوظ، نحسن نتائج الحالة المثلى من bpc/perplexity إلى 0.99 على enwiki8، و 1.08 على text8، و 18.3 على WikiText-103، و 21.8 على One Billion Word، و 54.5 على Penn Treebank (بدون ضبط دقيق). عندما يتم تدريب Transformer-XL فقط على WikiText-103، فإنه ينشئ مقالات نصية متماسكة ومعقولة مع آلاف الرموز." + +تمت المساهمة بهذا النموذج من قبل [thomwolf](https://huggingface.co/thomwolf). يمكن العثور على الكود الأصلي [هنا](https://github.com/kimiyoung/transformer-xl). + +## نصائح الاستخدام + +- يستخدم Transformer-XL تضمين الموضع النسبي التذبذبي. يمكن إجراء التعبئة على اليسار أو اليمين. يستخدم التنفيذ الأصلي التدريب على SQuAD مع التعبئة على اليسار، لذلك يتم تعيين الوسائد الافتراضية إلى اليسار. +- Transformer-XL هو أحد النماذج القليلة التي لا يوجد بها حد لطول التسلسل. +- مثل نموذج GPT العادي، ولكنه يقدم آلية تكرار لقطاعين متتاليين (مشابهة لشبكات RNN العادية مع إدخالين متتاليين). في هذا السياق، القطاع هو عدد من الرموز المتتالية (على سبيل المثال 512) والتي قد تمتد عبر وثائق متعددة، ويتم تغذية القطاعات بترتيب إلى النموذج. +- بشكل أساسي، يتم دمج الحالات المخفية للقطاع السابق مع الإدخال الحالي لحساب درجات الاهتمام. يسمح هذا للنموذج بالاهتمام بالمعلومات التي كانت في القطاع السابق بالإضافة إلى الحالي. من خلال تكديس طبقات الاهتمام المتعددة، يمكن زيادة مجال الاستقبال إلى قطاعات متعددة سابقة. +- يغير هذا التضمين الموضعي إلى تضمين موضعي نسبي (نظرًا لأن التضمين الموضعي العادي من شأنه أن يعطي نفس النتائج في الإدخال الحالي والحالة المخفية الحالية في موضع معين) ويجب إجراء بعض التعديلات في طريقة حساب درجات الاهتمام. + +> ⚠️ لا يعمل TransformerXL مع *torch.nn.DataParallel* بسبب وجود خلل في PyTorch، راجع [القضية #36035](https://github.com/pytorch/pytorch/issues/36035). + +## الموارد + +- [دليل مهمة تصنيف النص](../tasks/sequence_classification) +- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling) + +## TransfoXLConfig + +[[autodoc]] TransfoXLConfig + +## TransfoXLTokenizer + +[[autodoc]] TransfoXLTokenizer + +- save_vocabulary + +## المخرجات المحددة لـ TransfoXL + +[[autodoc]] models.deprecated.transfo_xl.modeling_transfo_xl.TransfoXLModelOutput + +[[autodoc]] models.deprecated.transfo_xl.modeling_transfo_xl.TransfoXLLMHeadModelOutput + +[[autodoc]] models.deprecated.transfo_xl.modeling_tf_transfo_xl.TFTransfoXLModelOutput + +[[autodoc]] models.deprecated.transfo_xl.modeling_tf_transfo_xl.TFTransfoXLLMHeadModelOutput + + + + +## TransfoXLModel + +[[autodoc]] TransfoXLModel + +- forward + +## TransfoXLLMHeadModel + +[[autodoc]] TransfoXLLMHeadModel + +- forward + +## TransfoXLForSequenceClassification + +[[autodoc]] TransfoXLForSequenceClassification + +- forward + + + + +## TFTransfoXLModel + +[[autodoc]] TFTransfoXLModel + +- call + +## TFTransfoXLLMHeadModel + +[[autodoc]] TFTransfoXLLMHeadModel + +- call + +## TFTransfoXLForSequenceClassification + +[[autodoc]] TFTransfoXLForSequenceClassification + +- call + + + + +## الطبقات الداخلية + +[[autodoc]] AdaptiveEmbedding + +[[autodoc]] TFAdaptiveEmbedding \ No newline at end of file From 8b0963de3a68db6667e9a768965e6def5df644bc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:05 +0300 Subject: [PATCH 596/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/trocr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/trocr.md | 99 +++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 docs/source/ar/model_doc/trocr.md diff --git a/docs/source/ar/model_doc/trocr.md b/docs/source/ar/model_doc/trocr.md new file mode 100644 index 00000000000000..ab627105499e43 --- /dev/null +++ b/docs/source/ar/model_doc/trocr.md @@ -0,0 +1,99 @@ +# TrOCR + +## نظرة عامة + +اقتُرح نموذج TrOCR في ورقة بحثية بعنوان "TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models" من قبل Minghao Li وآخرون. يتكون نموذج TrOCR من محول صور (Image Transformer) وترميز نصي نصي تلقائي (autoregressive text Transformer decoder) لأداء التعرف البصري على الحروف (OCR). + +وفيما يلي الملخص المستخلص من الورقة البحثية: + +"يعد التعرف على النص مشكلة بحثية قائمة منذ فترة طويلة في مجال رقمنة المستندات. وتعتمد الطرق الحالية للتعرف على النص عادةً على شبكات CNN لفهم الصور وRNN لتوليد النص على مستوى الأحرف. بالإضافة إلى ذلك، تكون هناك حاجة عادةً إلى نموذج لغوي آخر لتحسين الدقة الإجمالية كخطوة ما بعد المعالجة. وفي هذه الورقة، نقترح نهجًا مباشرًا للتعرف على النص باستخدام محولات الصور والنصوص المسبقة التدريب، والتي يطلق عليها TrOCR، والتي تستفيد من بنية المحول لكل من فهم الصور وتوليد النص على مستوى wordpiece. ونموذج TrOCR بسيط وفعال، ويمكن تدريبه مسبقًا باستخدام بيانات ضخمة مصطنعة وضبط دقته باستخدام مجموعات بيانات موسومة يدويًا. وتظهر التجارب أن نموذج TrOCR يتفوق على النماذج الحالية المتقدمة في مهام التعرف على النص المطبوع والمكتوب بخط اليد." + +drawing + + بنية نموذج TrOCR. مأخوذة من الورقة البحثية الأصلية. + +يرجى الرجوع إلى فئة [`VisionEncoderDecoder`] لمعرفة كيفية استخدام هذا النموذج. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). ويمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/unilm/tree/6f60612e7cc86a2a1ae85c47231507a587ab4e01/trocr). + +## نصائح الاستخدام + +- أسرع طريقة للبدء في استخدام TrOCR هي من خلال الاطلاع على [دفاتر الملاحظات التعليمية](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/TrOCR)، والتي توضح كيفية استخدام النموذج في وقت الاستدلال، بالإضافة إلى الضبط الدقيق على بيانات مخصصة. + +- يتم تدريب نموذج TrOCR مسبقًا على مرحلتين قبل ضبط دقته على مجموعات بيانات خاصة بمهمة معينة. ويحقق نتائج متميزة في كل من التعرف على النص المطبوع (مثل مجموعة بيانات SROIE) والمكتوب بخط اليد (مثل مجموعة بيانات IAM Handwriting dataset). لمزيد من المعلومات، يرجى الاطلاع على [النماذج الرسمية](https://huggingface.co/models?other=trocr>). + +- يتم استخدام نموذج TrOCR دائمًا ضمن إطار عمل [VisionEncoderDecoder](vision-encoder-decoder). + +## الموارد + +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء في استخدام TrOCR. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فيرجى فتح طلب سحب (Pull Request) وسنقوم بمراجعته! ويفضل أن يظهر المورد شيئًا جديدًا بدلاً من تكرار مورد موجود. + + + +- منشور مدونة حول [تسريع واجهة برمجة تطبيقات المستندات](https://huggingface.co/blog/document-ai) باستخدام TrOCR. + +- منشور مدونة حول كيفية [واجهة برمجة تطبيقات المستندات](https://github.com/philschmid/document-ai-transformers) باستخدام TrOCR. + +- دفتر ملاحظات حول كيفية [الضبط الدقيق لنموذج TrOCR على مجموعة بيانات IAM Handwriting Database باستخدام Seq2SeqTrainer](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/TrOCR/Fine_tune_TrOCR_on_IAM_Handwriting_Database_using_Seq2SeqTrainer.ipynb). + +- دفتر ملاحظات حول [الاستدلال باستخدام TrOCR](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/TrOCR/Inference_with_TrOCR_%2B_Gradio_demo.ipynb) وتجربة Gradio. + +- دفتر ملاحظات حول [الضبط الدقيق لنموذج TrOCR على مجموعة بيانات IAM Handwriting Database](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/TrOCR/Fine_tune_TrOCR_on_IAM_Handwriting_Database_using_native_PyTorch.ipynb) باستخدام PyTorch الأصلي. + +- دفتر ملاحظات حول [تقييم نموذج TrOCR على مجموعة اختبار IAM](https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/TrOCR/Evaluating_TrOCR_base_handwritten_on_the_IAM_test_set.ipynb). + + + +- دليل مهمة [نمذجة اللغة العادية](https://huggingface.co/docs/transformers/tasks/language_modeling). + +⚡️ الاستدلال + +- عرض توضيحي تفاعلي حول [التعرف على الأحرف المكتوبة بخط اليد باستخدام TrOCR](https://huggingface.co/spaces/nielsr/TrOCR-handwritten). + +## الاستدلال + +يقبل نموذج [`VisionEncoderDecoder`] في TrOCR الصور كمدخلات ويستخدم [`~generation.GenerationMixin.generate`] لتوليد النص تلقائيًا بناءً على صورة المدخل. + +تتولى فئة [`ViTImageProcessor`/`DeiTImageProcessor`] مسؤولية معالجة صورة المدخل، بينما تقوم فئة [`RobertaTokenizer`/`XLMRobertaTokenizer`] بفك تشفير الرموز المولدة إلى سلسلة الهدف. وتجمع فئة [`TrOCRProcessor`] بين [`ViTImageProcessor`/`DeiTImageProcessor`] و [`RobertaTokenizer`/`XLMRobertaTokenizer`] في مثيل واحد لاستخراج ميزات المدخلات وفك تشفير رموز الهدف المتوقعة. + +- التعرف البصري على الحروف (OCR) خطوة بخطوة + +``` py +>>> from transformers import TrOCRProcessor, VisionEncoderDecoderModel +>>> import requests +>>> from PIL import Image + +>>> processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten") +>>> model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten") + +>>> # تحميل صورة من مجموعة بيانات IAM +>>> url = "https://fki.tic.heia-fr.ch/static/img/a01-122-02.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB") + +>>> pixel_values = processor(image, return_tensors="pt").pixel_values +>>> generated_ids = model.generate(pixel_values) + +>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] +``` + +يمكنك الاطلاع على [مركز النماذج](https://huggingface.co/models?filter=trocr) للبحث عن نقاط تفتيش TrOCR. + +## TrOCRConfig + +[[autodoc]] TrOCRConfig + +## TrOCRProcessor + +[[autodoc]] TrOCRProcessor + +- __call__ +- from_pretrained +- save_pretrained +- batch_decode +- decode + +## TrOCRForCausalLM + +[[autodoc]] TrOCRForCausalLM + +- forward \ No newline at end of file From d049c1d216e2ec0611d5a4578ece044719f55624 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:06 +0300 Subject: [PATCH 597/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/tvlt.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/tvlt.md | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 docs/source/ar/model_doc/tvlt.md diff --git a/docs/source/ar/model_doc/tvlt.md b/docs/source/ar/model_doc/tvlt.md new file mode 100644 index 00000000000000..0f51bda6d21368 --- /dev/null +++ b/docs/source/ar/model_doc/tvlt.md @@ -0,0 +1,80 @@ +# TVLT + + + +هذا النموذج في وضع الصيانة فقط، ولا نقبل أي طلبات سحب جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.40.2. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.40.2`. + + + +## نظرة عامة + +اقترح نموذج TVLT في [TVLT: Textless Vision-Language Transformer](https://arxiv.org/abs/2209.14156) بواسطة Zineng Tang و Jaemin Cho و Yixin Nie و Mohit Bansal (ساهم المؤلفون الثلاثة الأوائل بالتساوي). محول الرؤية واللغة النصي (TVLT) هو نموذج يستخدم الإدخالات البصرية والسمعية الخام لتعلم تمثيل الرؤية واللغة، دون استخدام وحدات خاصة بالنص مثل التمييز أو التعرف التلقائي على الكلام (ASR). يمكنه أداء مهام سمعية بصرية ولغوية بصرية مختلفة مثل الاسترجاع والإجابة على الأسئلة، وما إلى ذلك. + +الملخص من الورقة هو كما يلي: + +*في هذا العمل، نقدم محول الرؤية واللغة النصي (TVLT)، حيث تقوم كتل المحول المتجانسة بأخذ الإدخالات البصرية والسمعية الخام لتعلم تمثيل الرؤية واللغة بتصميم محدد للنمط، ولا تستخدم وحدات خاصة بالنص مثل التمييز أو التعرف التلقائي على الكلام (ASR). يتم تدريب TVLT عن طريق إعادة بناء رقع الأقنعة لإطارات الفيديو المستمرة والمخططات الطيفية الصوتية (الترميز التلقائي المقنع) ونمذجة التباين لمواءمة الفيديو والصوت. يحقق TVLT أداءً قابلاً للمقارنة مع نظيره القائم على النص في مهام متعددة الوسائط المختلفة، مثل الإجابة على الأسئلة المرئية، واسترجاع الصور، واسترجاع الفيديو، وتحليل المشاعر متعددة الوسائط، بسرعة استدلال أسرع 28 مرة وبثلث المعلمات فقط. تشير نتائجنا إلى إمكانية تعلم تمثيلات بصرية لغوية مدمجة وفعالة من الإشارات البصرية والسمعية من المستوى المنخفض دون افتراض وجود نص مسبق.* + +

+ + + +

+ + تصميم TVLT. مأخوذة من الورقة الأصلية. + +يمكن العثور على الشفرة الأصلية [هنا](https://github.com/zinengtang/TVLT). تم المساهمة بهذا النموذج بواسطة [Zineng Tang](https://huggingface.co/ZinengTang). + +## نصائح الاستخدام + +- TVLT هو نموذج يأخذ كلاً من `pixel_values` و`audio_values` كإدخال. يمكن للمرء استخدام [`TvltProcessor`] لتحضير البيانات للنموذج. +يغلف هذا المعالج معالج صورة (لوضع الصورة/الفيديو) ومستخرج ميزات صوتية (لوضع الصوت) في واحد. + +- تم تدريب TVLT باستخدام صور/مقاطع فيديو ومقاطع صوتية بأحجام مختلفة: يقوم المؤلفون بإعادة حجم المحاصيل للصور/مقاطع الفيديو المدخلة إلى 224 وتحديد طول المخطط الطيفي الصوتي بـ 2048. لجعل تجميع مقاطع الفيديو والمقاطع الصوتية ممكنًا، يستخدم المؤلفون `pixel_mask` الذي يشير إلى البكسلات الحقيقية/الحشو و`audio_mask` الذي يشير إلى القيم الصوتية الحقيقية/الحشو. + +- تصميم TVLT مشابه جدًا لتصميم محول الرؤية القياسي (ViT) والترميز التلقائي المقنع (MAE) كما هو موضح في [ViTMAE]. الفرق هو أن النموذج يتضمن طبقات تضمين للنمط الصوتي. + +- إصدار PyTorch من هذا النموذج متاح فقط في الإصدار 1.10 من PyTorch والإصدارات الأحدث. + +## TvltConfig + +[[autodoc]] TvltConfig + +## TvltProcessor + +[[autodoc]] TvltProcessor + +- __call__ + +## TvltImageProcessor + +[[autodoc]] TvltImageProcessor + +- preprocess + +## TvltFeatureExtractor + +[[autodoc]] TvltFeatureExtractor + +- __call__ + +## TvltModel + +[[autodoc]] TvltModel + +- forward + +## TvltForPreTraining + +[[autodoc]] TvltForPreTraining + +- forward + +## TvltForAudioVisualClassification + +[[autodoc]] TvltForAudioVisualClassification + +- forward \ No newline at end of file From 98da85e3f2fef8b43b3904b5ba8b2f8f09d106e7 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:08 +0300 Subject: [PATCH 598/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/tvp.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/tvp.md | 178 ++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 docs/source/ar/model_doc/tvp.md diff --git a/docs/source/ar/model_doc/tvp.md b/docs/source/ar/model_doc/tvp.md new file mode 100644 index 00000000000000..b7a7a4465c26eb --- /dev/null +++ b/docs/source/ar/model_doc/tvp.md @@ -0,0 +1,178 @@ +# TVP + +## نظرة عامة + +تم اقتراح إطار عمل Text-Visual Prompting (TVP) في الورقة البحثية [Text-Visual Prompting for Efficient 2D Temporal Video Grounding](https://arxiv.org/abs/2303.04995) بواسطة Yimeng Zhang, Xin Chen, Jinghan Jia, Sijia Liu, Ke Ding. + +ملخص الورقة البحثية هو كما يلي: + +> *في هذا البحث، قمنا بدراسة مشكلة التأريض الزمني للفيديو (TVG)، والتي تهدف إلى التنبؤ بنقاط وقت البداية/الانتهاء للحظات الموصوفة بجملة نصية ضمن فيديو طويل غير مقطوع. ومن خلال الاستفادة من الميزات المرئية ثلاثية الأبعاد الدقيقة، حققت تقنيات TVG تقدمًا ملحوظًا في السنوات الأخيرة. ومع ذلك، فإن التعقيد العالي للشبكات العصبية التلافيفية ثلاثية الأبعاد (CNNs) يجعل استخراج الميزات المرئية ثلاثية الأبعاد الكثيفة يستغرق وقتًا طويلاً، مما يتطلب ذاكرة مكثفة وموارد حوسبة. نحو تحقيق TVG بكفاءة، نقترح إطارًا جديدًا للتحفيز النصي والمرئي (TVP)، والذي يتضمن أنماط الاضطراب المُحسّنة (التي نسميها "المطالبات") في كل من المدخلات المرئية والميزات النصية لنموذج TVG. في تناقض حاد مع شبكات CNN ثلاثية الأبعاد، نظهر أن TVP يسمح لنا بالتدريب الفعال على برنامج تشفير الرؤية وترميز اللغة في نموذج TVG ثنائي الأبعاد وتحسين أداء دمج الميزات عبر الوسائط باستخدام ميزات مرئية ثنائية الأبعاد متفرقة منخفضة التعقيد فقط. علاوة على ذلك، نقترح خسارة IoU (TDIoU) للمسافة الزمنية من أجل التعلم الفعال لـ TVG. تُظهر التجارب التي أجريت على مجموعتي بيانات مرجعية، وهما مجموعات بيانات Charades-STA وActivityNet Captions، بشكل تجريبي أن TVP المقترح يعزز بشكل كبير أداء TVG ثنائي الأبعاد (على سبيل المثال، تحسين بنسبة 9.79% على Charades-STA وتحسين بنسبة 30.77% على ActivityNet Captions) ويحقق استدلال 5 × تسريع عبر TVG باستخدام ميزات مرئية ثلاثية الأبعاد.* + +تتناول هذه الورقة البحثية مشكلة التحديد الزمني للفيديو (TVG)، والتي تتمثل في تحديد بدايات ونهايات أحداث محددة في فيديو طويل، كما هو موصوف في جملة نصية. ويتم اقتراح تقنية Text-Visual Prompting (TVP) لتحسين TVG. وتنطوي TVP على دمج أنماط مصممة خصيصًا، يُطلق عليها "prompts"، في كل من المكونات المرئية (القائمة على الصور) والنصية (القائمة على الكلمات) لنموذج TVG. وتوفر هذه الـ "prompts" سياقًا مكانيًا زمنيًا إضافيًا، مما يحسن قدرة النموذج على تحديد توقيتات الأحداث في الفيديو بدقة. ويستخدم هذا النهج مدخلات بصرية ثنائية الأبعاد بدلاً من ثلاثية الأبعاد. وعلى الرغم من أن المدخلات ثلاثية الأبعاد تقدم المزيد من التفاصيل المكانية الزمنية، إلا أنها تستغرق أيضًا وقتًا أطول في المعالجة. ويهدف استخدام المدخلات ثنائية الأبعاد مع طريقة الـ "prompting" إلى توفير مستويات مماثلة من السياق والدقة بكفاءة أكبر. + + + + تصميم TVP. مأخوذة من الورقة البحثية الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [Jiqing Feng](https://huggingface.co/Jiqing). ويمكن العثور على الكود الأصلي [هنا](https://github.com/intel/TVP). + +## نصائح وأمثلة الاستخدام + +"Prompts" هي أنماط اضطراب محسنة، سيتم إضافتها إلى إطارات الفيديو أو الميزات النصية. تشير "المجموعة الشاملة" إلى استخدام نفس المجموعة المحددة من الـ "prompts" لأي مدخلات، وهذا يعني أن هذه الـ "prompts" يتم إضافتها باستمرار إلى جميع إطارات الفيديو والميزات النصية، بغض النظر عن محتوى الإدخال. + +يتكون TVP من مشفر بصري ومشفر متعدد الوسائط. يتم دمج مجموعة شاملة من الـ "prompts" البصرية والنصية في إطارات الفيديو والعناصر النصية التي تم أخذ عينات منها، على التوالي. وبشكل خاص، يتم تطبيق مجموعة من الـ "prompts" البصرية المختلفة على إطارات الفيديو التي تم أخذ عينات منها بشكل موحد من فيديو واحد غير محدد الطول بالترتيب. + +هدف هذا النموذج هو دمج الـ "prompts" القابلة للتدريب في كل من المدخلات المرئية والميزات النصية لمشاكل التحديد الزمني للفيديو (TVG). + +من حيث المبدأ، يمكن تطبيق أي مشفر بصري أو متعدد الوسائط في تصميم TVP المقترح. + +يقوم [`TvpProcessor`] بتغليف [`BertTokenizer`] و [`TvpImageProcessor`] في مثيل واحد لتشفير النص وإعداد الصور على التوالي. + +يوضح المثال التالي كيفية تشغيل التحديد الزمني للفيديو باستخدام [`TvpProcessor`] و [`TvpForVideoGrounding`]. + +```python +import av +import cv2 +import numpy as np +import torch +from huggingface_hub import hf_hub_download +from transformers import AutoProcessor, TvpForVideoGrounding + + +def pyav_decode(container, sampling_rate, num_frames, clip_idx, num_clips, target_fps): + ''' + Convert the video from its original fps to the target_fps and decode the video with PyAV decoder. + Args: + container (container): pyav container. + sampling_rate (int): frame sampling rate (interval between two sampled frames). + num_frames (int): number of frames to sample. + clip_idx (int): if clip_idx is -1, perform random temporal sampling. + If clip_idx is larger than -1, uniformly split the video to num_clips + clips, and select the clip_idx-th video clip. + num_clips (int): overall number of clips to uniformly sample from the given video. + target_fps (int): the input video may have different fps, convert it to + the target video fps before frame sampling. + Returns: + frames (tensor): decoded frames from the video. Return None if the no + video stream was found. + fps (float): the number of frames per second of the video. + ''' + video = container.streams.video[0] + fps = float(video.average_rate) + clip_size = sampling_rate * num_frames / target_fps * fps + delta = max(num_frames - clip_size, 0) + start_idx = delta * clip_idx / num_clips + end_idx = start_idx + clip_size - 1 + timebase = video.duration / num_frames + video_start_pts = int(start_idx * timebase) + video_end_pts = int(end_idx * timebase) + seek_offset = max(video_start_pts - 1024, 0) + container.seek(seek_offset, any_frame=False, backward=True, stream=video) + frames = {} + for frame in container.decode(video=0): + if frame.pts < video_start_pts: + continue + frames[frame.pts] = frame + if frame.pts > video_end_pts: + break + frames = [frames[pts] for pts in sorted(frames)] + return frames, fps + + +def decode(container, sampling_rate, num_frames, clip_idx, num_clips, target_fps): + ''' + Decode the video and perform temporal sampling. + Args: + container (container): pyav container. + sampling_rate (int): frame sampling rate (interval between two sampled frames). + num_frames (int): number of frames to sample. + clip_idx (int): if clip_idx is -1, perform random temporal sampling. + If clip_idx is larger than -1, uniformly split the video to num_clips + clips, and select the clip_idx-th video clip. + num_clips (int): overall number of clips to uniformly sample from the given video. + target_fps (int): the input video may have different fps, convert it to + the target video fps before frame sampling. + Returns: + frames (tensor): decoded frames from the video. + ''' + assert clip_idx >= -2, "Not a valied clip_idx {}".format(clip_idx) + frames, fps = pyav_decode(container, sampling_rate, num_frames, clip_idx, num_clips, target_fps) + clip_size = sampling_rate * num_frames / target_fps * fps + index = np.linspace(0, clip_size - 1, num_frames) + index = np.clip(index, 0, len(frames) - 1).astype(np.int64) + frames = np.array([frames[idx].to_rgb().to_ndarray() for idx in index]) + frames = frames.transpose(0, 3, 1, 2) + return frames + + +file = hf_hub_download(repo_id="Intel/tvp_demo", filename="AK2KG.mp4", repo_type="dataset") +model = TvpForVideoGrounding.from_pretrained("Intel/tvp-base") + +decoder_kwargs = dict( + container=av.open(file, metadata_errors="ignore"), + sampling_rate=1, + num_frames=model.config.num_frames, + clip_idx=0, + num_clips=1, + target_fps=3, +) +raw_sampled_frms = decode(**decoder_kwargs) + +text = "a person is sitting on a bed." +processor = AutoProcessor.from_pretrained("Intel/tvp-base") +model_inputs = processor( + text=[text], videos=list(raw_sampled_frms), return_tensors="pt", max_text_length=100#, size=size +) + +model_inputs["pixel_values"] = model_inputs["pixel_values"].to(model.dtype) +output = model(**model_inputs) + +def get_video_duration(filename): + cap = cv2.VideoCapture(filename) + if cap.isOpened(): + rate = cap.get(5) + frame_num = cap.get(7) + duration = frame_num/rate + return duration + return -1 + +duration = get_video_duration(file) +start, end = processor.post_process_video_grounding(output.logits, duration) + +print(f"The time slot of the video corresponding to the text \"{text}\" is from {start}s to {end}s") +``` + +## نصائح: + +- يستخدم هذا التنفيذ لـ TVP [`BertTokenizer`] لتوليد تضمين نصي ونموذج Resnet-50 لحساب التضمين المرئي. +- تم إصدار نقاط مرجعية للنموذج المُدرب مسبقًا [tvp-base](https://huggingface.co/Intel/tvp-base). +- يرجى الرجوع إلى [الجدول 2](https://arxiv.org/pdf/2303.04995.pdf) لأداء TVP على مهمة التحديد الزمني للفيديو. + +## TvpConfig + +[[autodoc]] TvpConfig + +## TvpImageProcessor + +[[autodoc]] TvpImageProcessor + +- preprocess + +## TvpProcessor + +[[autodoc]] TvpProcessor + +- __call__ + +## TvpModel + +[[autodoc]] TvpModel + +- forward + +## TvpForVideoGrounding + +[[autodoc]] TvpForVideoGrounding + +- forward \ No newline at end of file From cf5cf51df5b53c491780819d6e69e14923a0f5c6 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:10 +0300 Subject: [PATCH 599/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/udop.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/udop.md | 98 ++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/source/ar/model_doc/udop.md diff --git a/docs/source/ar/model_doc/udop.md b/docs/source/ar/model_doc/udop.md new file mode 100644 index 00000000000000..d535cb06d486ea --- /dev/null +++ b/docs/source/ar/model_doc/udop.md @@ -0,0 +1,98 @@ +# UDOP + +## نظرة عامة +تم اقتراح نموذج UDOP في [توحيد الرؤية والنص والتخطيط لمعالجة المستندات الشاملة](https://arxiv.org/abs/2212.02623) بواسطة Zineng Tang, Ziyi Yang, Guoxin Wang, Yuwei Fang, Yang Liu, Chenguang Zhu, Michael Zeng, Cha Zhang, Mohit Bansal. + +يعتمد UDOP على بنية Transformer الترميزية فك الترميز المستندة إلى [T5](t5) لمهام الذكاء الاصطناعي للمستندات مثل تصنيف صور المستندات، وتحليل المستندات، والأسئلة والأجوبة البصرية للمستندات. + +ملخص الورقة هو ما يلي: + +نقترح معالجة المستندات الشاملة (UDOP)، وهي نموذج Document AI أساسي يوحد أوضاع النص والصورة والتخطيط معًا بتنسيقات مهام متنوعة، بما في ذلك فهم المستندات وتوليد المستندات. يستفيد UDOP من الارتباط المكاني بين المحتوى النصي وصورة المستند لنمذجة أوضاع الصورة والنص والتخطيط باستخدام تمثيل موحد. باستخدام محول Vision-Text-Layout المبتكر، يوحد UDOP بين المعالجة المسبقة ومهام المجال المتعدد لأسفل البنية المستندة إلى التسلسل. يتم المعالجة المسبقة لـ UDOP على كل من مجموعات البيانات الوثائقية واسعة النطاق غير الموسومة باستخدام أهداف ذاتية الإشراف مبتكرة وبيانات موسومة متنوعة. يتعلم UDOP أيضًا إنشاء صور المستندات من أوضاع النص والتخطيط عبر إعادة بناء الصورة المقنعة. على حد علمنا، هذه هي المرة الأولى في مجال الذكاء الاصطناعي للمستندات التي يحقق فيها نموذج واحد في نفس الوقت تحرير المستندات العصبية وتخصيص المحتوى بجودة عالية. تحدد طريقتنا الحالة الراهنة لـ 9 مهام AI للمستندات، على سبيل المثال فهم المستندات والأسئلة والأجوبة، عبر مجالات البيانات المتنوعة مثل تقارير التمويل والأوراق الأكاديمية والمواقع الإلكترونية. يحتل UDOP المرتبة الأولى في لوحة القيادة الخاصة بمعيار فهم المستندات (DUE). + +drawing + + هندسة UDOP. مأخوذة من الورقة الأصلية. + +## نصائح الاستخدام + +- بالإضافة إلى *input_ids*، يتوقع [`UdopForConditionalGeneration`] أيضًا إدخال `bbox`، وهو عبارة عن صناديق حدود (أي مواضع ثنائية الأبعاد) للرموز المميزة للإدخال. يمكن الحصول على هذه باستخدام محرك OCR خارجي مثل [Tesseract](https://github.com/tesseract-ocr/tesseract) من Google (يتوفر [غلاف Python](https://pypi.org/project/pytesseract/)). يجب أن يكون كل صندوق حد في تنسيق (x0، y0، x1، y1)، حيث يتوافق (x0، y0) مع موضع الركن العلوي الأيسر في صندوق الحد، ويمثل (x1، y1) موضع الركن السفلي الأيمن. لاحظ أنه يجب عليك أولاً تطبيع صناديق الحدود لتكون على مقياس 0-1000. لتطبيع، يمكنك استخدام الدالة التالية: + +```python +def normalize_bbox(bbox, width, height): + return [ + int(1000 * (bbox[0] / width)), + int(1000 * (bbox[1] / height)), + int(1000 * (bbox[2] / width)), + int(1000 * (bbox[3] / height)), + ] +``` + +هنا، `width` و`height` يقابلان عرض وارتفاع المستند الأصلي الذي يحدث فيه الرمز المميز. يمكن الحصول على تلك باستخدام مكتبة Python Image Library (PIL)، على سبيل المثال، كما يلي: + +```python +from PIL import Image + +# يمكن أن تكون الوثيقة png أو jpg، إلخ. يجب تحويل ملفات PDF إلى صور. +image = Image.open(name_of_your_document).convert("RGB") + +width, height = image.size +``` + +يمكنك استخدام [`UdopProcessor`] لتحضير الصور والنص للنموذج، والذي يتولى كل ذلك. بشكل افتراضي، تستخدم هذه الفئة محرك Tesseract لاستخراج قائمة بالكلمات والصناديق (الإحداثيات) من مستند معين. وظيفتها مكافئة لتلك الموجودة في [`LayoutLMv3Processor`]، وبالتالي فهي تدعم تمرير إما `apply_ocr=False` في حالة تفضيلك لاستخدام محرك OCR الخاص بك أو `apply_ocr=true` في حالة رغبتك في استخدام محرك OCR الافتراضي. راجع دليل الاستخدام لـ [LayoutLMv2](layoutlmv2#usage-layoutlmv2processor) فيما يتعلق بجميع حالات الاستخدام الممكنة (تكون وظيفة `UdopProcessor` متطابقة). + +- إذا كنت تستخدم محرك OCR الخاص بك، فإن إحدى التوصيات هي واجهة برمجة تطبيقات القراءة من Azure [Read API](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/how-to/call-read-api)، والتي تدعم ما يسمى بقطاعات الخطوط. يؤدي استخدام تضمينات موضع القطاع عادةً إلى أداء أفضل. +- أثناء الاستدلال، يوصى باستخدام طريقة `generate` لتوليد النص تلقائيًا بالنظر إلى صورة المستند. +- تم المعالجة المسبقة للنموذج لكل من الأهداف الخاضعة للإشراف الذاتي. يمكنك استخدام بادئات المهام المختلفة (المطالبات) المستخدمة أثناء المعالجة المسبقة لاختبار القدرات الجاهزة للاستخدام. على سبيل المثال، يمكن مطالبة النموذج بـ "الأسئلة والأجوبة. ما هو التاريخ؟"، حيث "الأسئلة والأجوبة." هو بادئة المهمة المستخدمة أثناء المعالجة المسبقة لـ DocVQA. راجع [الورقة](https://arxiv.org/abs/2212.02623) (الجدول 1) لجميع بادئات المهام. +- يمكنك أيضًا ضبط [`UdopEncoderModel`]، وهو الجزء الترميز فقط من UDOP، والذي يمكن اعتباره محول ترميز LayoutLMv3. بالنسبة إلى المهام التمييزية، يمكنك ببساطة إضافة مصنف خطي في الأعلى وضبطه على مجموعة بيانات موسومة. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). + +يمكن العثور على الكود الأصلي [هنا](https://github.com/microsoft/UDOP). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام UDOP. إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنقوم بمراجعته! يجب أن يوضح المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +- يمكن العثور على دفاتر الملاحظات التوضيحية المتعلقة بـ UDOP [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/UDOP) والتي توضح كيفية ضبط UDOP على مجموعة بيانات مخصصة بالإضافة إلى الاستدلال. 🌎 +- [دليل مهام الأسئلة والأجوبة للمستندات](../tasks/document_question_answering) + +## UdopConfig + +[[autodoc]] UdopConfig + +## UdopTokenizer + +[[autodoc]] UdopTokenizer + +- build_inputs_with_special_tokens +- get_special_tokens_mask +- create_token_type_ids_from_sequences +- save_vocabulary + +## UdopTokenizerFast + +[[autodoc]] UdopTokenizerFast + +## UdopProcessor + +[[autodoc]] UdopProcessor + +- __call__ + +## UdopModel + +[[autodoc]] UdopModel + +- forward + +## UdopForConditionalGeneration + +[[autodoc]] UdopForConditionalGeneration + +- forward + +## UdopEncoderModel + +[[autodoc]] UdopEncoderModel + +- forward \ No newline at end of file From 68b1432e19426576976be94b908fb89d6ebf3c0c Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:12 +0300 Subject: [PATCH 600/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/ul2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/ul2.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 docs/source/ar/model_doc/ul2.md diff --git a/docs/source/ar/model_doc/ul2.md b/docs/source/ar/model_doc/ul2.md new file mode 100644 index 00000000000000..9ff0b56c5e481c --- /dev/null +++ b/docs/source/ar/model_doc/ul2.md @@ -0,0 +1,20 @@ +# UL2 + +## نظرة عامة +تم تقديم نموذج T5 في ورقة [Unifying Language Learning Paradigms](https://arxiv.org/pdf/2205.05131v1.pdf) بواسطة Yi Tay, Mostafa Dehghani, Vinh Q. Tran, Xavier Garcia, Dara Bahri, Tal Schuster, Huaixiu Steven Zheng, Neil Houlsby, Donald Metzler. + +مقدمة الورقة البحثية هي كما يلي: + +> *"تُصمم النماذج المُدربة مسبقًا الحالية بشكل عام لفئة معينة من المشكلات. حتى الآن، يبدو أنه لا يوجد إجماع على ماهية البنية الصحيحة وإعداد التدريب المسبق. تقدم هذه الورقة إطار عمل موحد لنماذج التدريب المسبق التي تكون فعالة عالميًا عبر مجموعات البيانات وإعدادات مختلفة. نبدأ بفك تشابك النماذج المعمارية مع أهداف التدريب المسبق - وهما مفهومان يتم خلطهما عادة. بعد ذلك، نقدم منظورًا موحدًا وعامًا للإشراف الذاتي في معالجة اللغات الطبيعية ونُظهر كيف يمكن صياغة أهداف التدريب المسبق المختلفة على أنها مكافئة لبعضها البعض، وكيف يمكن أن يكون التداخل بين الأهداف المختلفة فعالًا. بعد ذلك، نقترح Mixture-of-Denoisers (MoD)، وهو هدف تدريب مسبق يجمع بين نماذج التدريب المسبق المتنوعة معًا. نقدم أيضًا مفهوم تبديل الوضع، حيث يرتبط الضبط الدقيق لأسفل البئر بمخططات التدريب المسبق المحددة. نجري تجارب استقصائية مكثفة لمقارنة أهداف التدريب المسبق المتعددة ونجد أن طريقة Pareto-frontier تتفوق على النماذج الشبيهة بـ T5 و/أو GPT عبر إعدادات متنوعة متعددة. وأخيرًا، من خلال زيادة حجم نموذج UL2 إلى 20 مليار معامل، حققنا أداءً متميزًا في 50 مهمة NLP خاضعة للإشراف جيدًا تتراوح من توليد اللغة (مع التقييم الآلي والبشري)، وفهم اللغة، وتصنيف النصوص، والأسئلة والأجوبة، والاستدلال بالمنطق العام، والاستدلال بالنصوص الطويلة، وتأطير المعرفة المنظمة واسترجاع المعلومات. كما يحقق نموذج UL2 نتائج قوية في التعلم في السياق، متجاوزًا نموذج GPT-3 بحجم 175 مليار في التعلم الصفري على مجموعة SuperGLUE، ومضاعفة أداء T5-XXL ثلاث مرات في الملخص بنهج التعلم بالتصوير."* + +تمت المساهمة بهذا النموذج بواسطة [DanielHesslow](https://huggingface.co/Seledorn). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/google-research/tree/master/ul2). + +## نصائح الاستخدام + +- UL2 هو نموذج ترميز وفك ترميز تم تدريبه مسبقًا على مزيج من وظائف إزالة التشويش، بالإضافة إلى الضبط الدقيق على مجموعة من المهام النهائية. +- يستخدم UL2 نفس البنية المعمارية لـ [T5v1.1](t5v1.1) ولكنه يستخدم دالة التنشيط Gated-SiLU بدلاً من Gated-GELU. +- قام المؤلفون بإطلاق نقاط تفتيش لمعمارية واحدة يمكن الاطلاع عليها [هنا](https://huggingface.co/google/ul2) + + +نظرًا لأن UL2 لديه نفس البنية المعمارية مثل T5v1.1، يرجى الرجوع إلى [صفحة وثائق T5](t5) للحصول على مرجع API ونصائح وأمثلة رمزية ومفكرات. + \ No newline at end of file From a23f5d41476ca830faeafed375f75a1dc1b66466 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:14 +0300 Subject: [PATCH 601/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/umt5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/umt5.md | 92 ++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 docs/source/ar/model_doc/umt5.md diff --git a/docs/source/ar/model_doc/umt5.md b/docs/source/ar/model_doc/umt5.md new file mode 100644 index 00000000000000..0287011f4ef0f3 --- /dev/null +++ b/docs/source/ar/model_doc/umt5.md @@ -0,0 +1,92 @@ +# UMT5 + +## نظرة عامة + +اقترح نموذج UMT5 في [UniMax: Fairer and More Effective Language Sampling for Large-Scale Multilingual Pretraining](https://openreview.net/forum?id=kXwdL1cWOAi) بواسطة Hyung Won Chung و Xavier Garcia و Adam Roberts و Yi Tay و Orhan Firat و Sharan Narang و Noah Constant. + +ملخص الورقة هو ما يلي: + +* تستخدم النماذج اللغوية الكبيرة متعددة اللغات التي تم تدريبها مسبقًا عادةً عينات تعتمد على درجة حرارة الحدس لموازنة اللغات المختلفة. ومع ذلك، لم يقيم العمل السابق بشكل منهجي فعالية توزيعات اللغات المختلفة عبر نطاقات النماذج. في هذه الورقة، نقترح طريقة جديدة للعينات، تسمى UniMax، والتي توفر تغطية أكثر اتساقًا للغات الرأس مع تقليل الإفراط في تناسب لغات الذيل من خلال الحد صراحة من عدد التكرارات عبر مجموعة بيانات كل لغة. نقوم بسلسلة واسعة من عمليات الحجب التي تختبر مجموعة من استراتيجيات الاستخراج على مجموعة من المعايير المرجعية متعددة اللغات، مع تغيير نطاق النموذج. نجد أن UniMax يتفوق على العينات القياسية القائمة على درجة الحرارة، وتستمر الفوائد مع زيادة الحجم. كجزء من مساهمتنا، نقوم بإصدار: (1) مجموعة بيانات mC4 المحسنة والمحسنة متعددة اللغات والتي تتكون من 29 تريليون حرف عبر 107 لغات، و (2) مجموعة من نقاط التحقق من نموذج umT5 المسبق التدريب المدرب باستخدام عينات UniMax. + +أصدرت Google المتغيرات التالية: + +- [google/umt5-small](https://huggingface.co/google/umt5-small) +- [google/umt5-base](https://huggingface.co/google/umt5-base) +- [google/umt5-xl](https://huggingface.co/google/umt5-xl) +- [google/umt5-xxl](https://huggingface.co/google/umt5-xxl). + +تمت المساهمة بهذا النموذج بواسطة [agemagician](https://huggingface.co/agemagician) و [stefan-it](https://huggingface.co/stefan-it). يمكن العثور على الكود الأصلي [هنا](https://github.com/google-research/t5x). + +## نصائح الاستخدام + +- تم تدريب UMT5 مسبقًا فقط على [mC4](https://huggingface.co/datasets/mc4) مع استبعاد أي تدريب خاضع للإشراف. لذلك، يجب ضبط دقة هذا النموذج قبل استخدامه في مهمة تدفق أسفل، على عكس نموذج T5 الأصلي. +- نظرًا لأن umT5 تم تدريبه مسبقًا بطريقة غير خاضعة للإشراف، فلا توجد ميزة حقيقية لاستخدام بادئة المهمة أثناء الضبط الدقيق لمهمة واحدة. إذا كنت تقوم بالضبط الدقيق متعدد المهام، فيجب عليك استخدام بادئة. + +## ما الاختلافات مع mT5؟ + +`UmT5` مبني على mT5، مع انحياز موضعي نسبي غير مشترك يتم حسابه لكل طبقة. وهذا يعني أن النموذج يحدد `has_relative_bias` لكل طبقة. + +يختلف نص البرنامج النصي للتحويل أيضًا لأن النموذج تم حفظه بتنسيق أحدث لنقاط تفتيش t5x. + +# مثال الاستخدام + +```python +>>> from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + +>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/umt5-small") +>>> tokenizer = AutoTokenizer.from_pretrained("google/umt5-small") + +>>> inputs = tokenizer( +... "A walks into a bar and orders a with pinch of .", +... return_tensors="pt", +... ) +>>> outputs = model.generate(**inputs) +>>> print(tokenizer.batch_decode(outputs)) +['nyone who drink a alcohol A A. This I'] +``` + + + +راجع [صفحة وثائق T5](t5) للحصول على مزيد من النصائح وأمثلة التعليمات البرمجية ومفكرات Jupyter. + + + +## UMT5Config + +[[autodoc]] UMT5Config + +## UMT5Model + +[[autodoc]] UMT5Model + +- forward + +## UMT5ForConditionalGeneration + +[[autodoc]] UMT5ForConditionalGeneration + +- forward + +## UMT5EncoderModel + +[[autodoc]] UMT5EncoderModel + +- forward + +## UMT5ForSequenceClassification + +[[autodoc]] UMT5ForSequenceClassification + +- forward + +## UMT5ForTokenClassification + +[[autodoc]] UMT5ForTokenClassification + +- forward + +## UMT5ForQuestionAnswering + +[[autodoc]] UMT5ForQuestionAnswering + +- forward \ No newline at end of file From bcc50a8d0c379fe0ca1316d3e0fd927f366742a1 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:16 +0300 Subject: [PATCH 602/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/unispeech-sat.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/unispeech-sat.md | 69 +++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/source/ar/model_doc/unispeech-sat.md diff --git a/docs/source/ar/model_doc/unispeech-sat.md b/docs/source/ar/model_doc/unispeech-sat.md new file mode 100644 index 00000000000000..2a08fdae45a9ff --- /dev/null +++ b/docs/source/ar/model_doc/unispeech-sat.md @@ -0,0 +1,69 @@ +# UniSpeech-SAT + +## نظرة عامة + +تم اقتراح نموذج UniSpeech-SAT في ورقة بحثية بعنوان "UniSpeech-SAT: Universal Speech Representation Learning with Speaker Aware Pre-Training" بواسطة Sanyuan Chen وآخرون. + +ملخص الورقة البحثية هو كما يلي: + +*"يعد التعلم الذاتي الخاضع للإشراف (SSL) هدفًا طويل الأمد لمعالجة الكلام، حيث أنه يستخدم بيانات غير معلمة على نطاق واسع ويتجنب التصنيف البشري المكثف. شهدت السنوات الأخيرة نجاحات كبيرة في تطبيق التعلم الذاتي الخاضع للإشراف في التعرف على الكلام، في حين لم يتم سوى القليل من الاستكشاف في تطبيق SSL لنمذجة الخصائص الصوتية للمتكلم. في هذه الورقة، نهدف إلى تحسين إطار عمل SSL الحالي لتعلم تمثيل المتحدث. تم تقديم طريقتين لتعزيز استخراج معلومات المتحدث غير الخاضعة للإشراف. أولاً، نطبق التعلم متعدد المهام على إطار عمل SSL الحالي، حيث نقوم بدمج الخسارة التمييزية على مستوى العبارة مع دالة الهدف SSL. ثانيًا، من أجل التمييز بشكل أفضل بين المتحدثين، نقترح استراتيجية خلط العبارات لزيادة البيانات، حيث يتم إنشاء عبارات متداخلة إضافية دون إشراف ويتم دمجها أثناء التدريب. قمنا بدمج الأساليب المقترحة في إطار عمل HuBERT. أظهرت نتائج التجارب على معيار SUPERB أن النظام المقترح يحقق أداءً متميزًا في تعلم التمثيل العام، خاصة في المهام الموجهة نحو تحديد هوية المتحدث. تم إجراء دراسة لتحليل الأجزاء المكونة للتحقق من فعالية كل طريقة مقترحة. وأخيرًا، قمنا بزيادة حجم مجموعة البيانات التدريبية إلى 94 ألف ساعة من البيانات الصوتية العامة وحققنا تحسنًا إضافيًا في الأداء في جميع مهام SUPERB."* + +تمت المساهمة بهذا النموذج من قبل [patrickvonplaten]. يمكن العثور على الكود الخاص بالمؤلفين [هنا](https://github.com/microsoft/UniSpeech/tree/main/UniSpeech-SAT). + +## نصائح الاستخدام + +- UniSpeechSat هو نموذج كلام يقبل مصفوفة أرقام عائمة مطابقة للموجة الصوتية الخام للإشارة الصوتية. يرجى استخدام [`Wav2Vec2Processor`] لاستخراج الميزات. + +- يمكن ضبط نموذج UniSpeechSat باستخدام التصنيف الزمني للاتصال (CTC)، لذلك يجب فك تشفير إخراج النموذج باستخدام [`Wav2Vec2CTCTokenizer`]. + +- يعمل نموذج UniSpeechSat بشكل جيد بشكل خاص في مهام التحقق من المتحدث وتحديد هوية المتحدث وفصل المتحدث. + +## الموارد + +- [دليل مهام التصنيف الصوتي](../tasks/audio_classification) + +- [دليل مهام التعرف التلقائي على الكلام](../tasks/asr) + +## UniSpeechSatConfig + +[[autodoc]] UniSpeechSatConfig + +## المخرجات الخاصة بنموذج UniSpeechSat + +[[autodoc]] models.unispeech_sat.modeling_unispeech_sat.UniSpeechSatForPreTrainingOutput + +## نموذج UniSpeechSat + +[[autodoc]] UniSpeechSatModel + +- forward + +## UniSpeechSatForCTC + +[[autodoc]] UniSpeechSatForCTC + +- forward + +## UniSpeechSatForSequenceClassification + +[[autodoc]] UniSpeechSatForSequenceClassification + +- forward + +## UniSpeechSatForAudioFrameClassification + +[[autodoc]] UniSpeechSatForAudioFrameClassification + +- forward + +## UniSpeechSatForXVector + +[[autodoc]] UniSpeechSatForXVector + +- forward + +## UniSpeechSatForPreTraining + +[[autodoc]] UniSpeechSatForPreTraining + +- forward \ No newline at end of file From d59b6f917109fac4534a7d0303bd854014e6d2df Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:18 +0300 Subject: [PATCH 603/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/unispeech.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/unispeech.md | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/source/ar/model_doc/unispeech.md diff --git a/docs/source/ar/model_doc/unispeech.md b/docs/source/ar/model_doc/unispeech.md new file mode 100644 index 00000000000000..afdb350a271f7b --- /dev/null +++ b/docs/source/ar/model_doc/unispeech.md @@ -0,0 +1,55 @@ +# UniSpeech + +## نظرة عامة + +تم اقتراح نموذج UniSpeech في [UniSpeech: Unified Speech Representation Learning with Labeled and Unlabeled Data](https://arxiv.org/abs/2101.07597) بواسطة Chengyi Wang, Yu Wu, Yao Qian, Kenichi Kumatani, Shujie Liu, Furu Wei, Michael Zeng, Xuedong Huang. + +الملخص من الورقة هو ما يلي: + +*في هذه الورقة، نقترح نهجًا موحدًا للتعلم المسبق يسمى UniSpeech لتعلم تمثيلات الكلام باستخدام كل من البيانات الموسومة وغير الموسومة، حيث يتم إجراء التعلم الصوتي CTC الإشرافي والتعلم الذاتي الخاضع للرقابة على أساس المقارنة بطريقة تعلم المهام المتعددة. يمكن للتمثيلات الناتجة التقاط معلومات أكثر ارتباطًا بالهياكل الصوتية وتحسين التعميم عبر اللغات والمجالات. نقيم فعالية UniSpeech لتعلم التمثيل متعدد اللغات على مجموعة CommonVoice العامة. وتُظهر النتائج أن UniSpeech يتفوق على التعلم المسبق للإشراف والتعلم التحويلي المُشرف للتعرف على الكلام بحد أقصى 13.4٪ و 17.8٪ من التخفيضات النسبية لمعدل خطأ الهاتف، على التوالي (المتوسط ​​عبر جميع لغات الاختبار). كما تم توضيح قابلية نقل UniSpeech في مهمة التعرف على الكلام ذات التحول النطاقي، أي انخفاض نسبي قدره 6٪ في معدل خطأ الكلمة مقارنة بالنهج السابق.* + +تمت المساهمة بهذا النموذج من قبل [باتريكفونبلاتين] (https://huggingface.co/patrickvonplaten). يمكن العثور على كود المؤلفين [هنا] (https://github.com/microsoft/UniSpeech/tree/main/UniSpeech). + +## نصائح الاستخدام + +- UniSpeech هو نموذج كلام يقبل مصفوفة عائمة تتوافق مع الشكل الموجي الخام لإشارة الكلام. يرجى استخدام [`Wav2Vec2Processor`] لاستخراج الميزات. + +- يمكن ضبط نموذج UniSpeech باستخدام التصنيف الزمني للاتصال (CTC)، لذلك يجب فك تشفير إخراج النموذج باستخدام [`Wav2Vec2CTCTokenizer`]. + +## الموارد + +- [دليل مهام التصنيف الصوتي](../tasks/audio_classification) + +- [دليل مهام التعرف التلقائي على الكلام (ASR)](../tasks/asr) + +## UniSpeechConfig + +[[autodoc]] UniSpeechConfig + +## مخرجات UniSpeech المحددة + +[[autodoc]] models.unispeech.modeling_unispeech.UniSpeechForPreTrainingOutput + +## UniSpeechModel + +[[autodoc]] UniSpeechModel + +- forward + +## UniSpeechForCTC + +[[autodoc]] UniSpeechForCTC + +- forward + +## UniSpeechForSequenceClassification + +[[autodoc]] UniSpeechForSequenceClassification + +- forward + +## UniSpeechForPreTraining + +[[autodoc]] UniSpeechForPreTraining + +- forward \ No newline at end of file From b48dfe42d2619fb3241260232f0187cf569febb2 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:19 +0300 Subject: [PATCH 604/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/univnet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/univnet.md | 71 +++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/source/ar/model_doc/univnet.md diff --git a/docs/source/ar/model_doc/univnet.md b/docs/source/ar/model_doc/univnet.md new file mode 100644 index 00000000000000..ef6629f6643e1e --- /dev/null +++ b/docs/source/ar/model_doc/univnet.md @@ -0,0 +1,71 @@ +هذا هو نص الترجمة وفقاً للتعليمات المحددة: + +# UnivNet + +## نظرة عامة + +اقتُرح نموذج UnivNet في ورقة بحثية بعنوان "UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation" من قبل Won Jang و Dan Lim و Jaesam Yoon و Bongwan Kin و Juntae Kim. + +نموذج UnivNet هو شبكة تنافسية توليدية (GAN) مدربة على تركيب موجات صوتية عالية الدقة. نموذج UnivNet المتوفر في مكتبة `transformers` هو الـ *مولد*، والذي يقوم برسم خريطة لطيف mel الشرطي وسلسلة الضوضاء الاختيارية إلى موجة صوتية (مثل vocoder). المولد فقط هو المطلوب للاستنتاج. الـ *المميز* المستخدم لتدريب الـ `generator` غير منفذ. + +الملخص من الورقة هو كما يلي: + +*تستخدم معظم برامج تركيب الكلام العصبية طيف mel المحدود نطاقًا لتركيب الموجات الصوتية. إذا تم استخدام ميزات الطيف الكامل كمدخلات، فيمكن تزويد برنامج تركيب الكلام بأكبر قدر ممكن من المعلومات الصوتية. ومع ذلك، في بعض النماذج التي تستخدم طيف mel الكامل، تحدث مشكلة الإفراط في التسطيح كجزء منها يتم توليد طيف غير حاد. لمعالجة هذه المشكلة، نقترح UnivNet، وهو برنامج تركيب الكلام العصبي الذي يقوم بتركيب الموجات الصوتية عالية الدقة في الوقت الفعلي. واستلهامًا من الأعمال في مجال اكتشاف نشاط الصوت، أضفنا مميز طيف متعدد الدقة يستخدم عدة قيم مطلقة للطيف الخطي محسوبة باستخدام مجموعات معلمات مختلفة. باستخدام طيف mel الكامل كإدخال، نتوقع توليد إشارات عالية الدقة عن طريق إضافة مميز يستخدم طيفًا بدقات متعددة كإدخال. في تقييم لمجموعة بيانات تحتوي على معلومات حول مئات المتحدثين، حصل UnivNet على أفضل النتائج الموضوعية والذاتية بين النماذج المتنافسة لكل من المتحدثين المعروفين وغير المعروفين. توضح هذه النتائج، بما في ذلك أفضل درجة ذاتية لتركيب الكلام، إمكانية التكيف السريع مع المتحدثين الجدد دون الحاجة إلى التدريب من الصفر.* + +نصائح: + +- يجب أن يكون وسيط `noise_sequence` في [`UnivNetModel.forward`] ضوضاء غاوسية قياسية (مثل تلك التي تم الحصول عليها من `torch.randn`) بشكل `([batch_size], noise_length, model.config.model_in_channels)`، حيث يجب أن يتطابق `noise_length` مع البعد الطولي (البعد 1) لوسيط `input_features`. إذا لم يتم توفيره، فسيتم توليده بشكل عشوائي؛ يمكن تزويد مولد `torch` إلى وسيط `generator` بحيث يمكن إعادة إنتاج تمرير الإرسال. (ملاحظة: سيقوم [`UnivNetFeatureExtractor`] بشكل افتراضي بإرجاع ضوضاء تم إنشاؤها، لذا لا ينبغي أن يكون من الضروري توليد `noise_sequence` يدويًا.) + +- يمكن إزالة الحشو الذي أضافه [`UnivNetFeatureExtractor`] من إخراج [`UnivNetModel`] من خلال طريقة [`UnivNetFeatureExtractor.batch_decode`]، كما هو موضح في مثال الاستخدام أدناه. + +- يمكن أن يؤدي حشو نهاية كل موجة صوتية بالصمت إلى تقليل التشوهات في نهاية عينة الصوت المولدة. يمكن القيام بذلك عن طريق تزويد `pad_end = True` إلى [`UnivNetFeatureExtractor.__call__`]. راجع [هذه المشكلة](https://github.com/seungwonpark/melgan/issues/8) لمزيد من التفاصيل. + +مثال الاستخدام: + +```python +import torch +from scipy.io.wavfile import write +from datasets import Audio, load_dataset + +from transformers import UnivNetFeatureExtractor, UnivNetModel + +model_id_or_path = "dg845/univnet-dev" +model = UnivNetModel.from_pretrained(model_id_or_path) +feature_extractor = UnivNetFeatureExtractor.from_pretrained(model_id_or_path) + +ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") +# Resample the audio to the model and feature extractor's sampling rate. +ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate)) +# Pad the end of the converted waveforms to reduce artifacts at the end of the output audio samples. +inputs = feature_extractor( +ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], pad_end=True, return_tensors="pt" +) + +with torch.no_grad(): +audio = model(**inputs) + +# Remove the extra padding at the end of the output. +audio = feature_extractor.batch_decode(**audio)[0] +# Convert to wav file +write("sample_audio.wav", feature_extractor.sampling_rate, audio) +``` + +تمت المساهمة بهذا النموذج من قبل [dg845](https://huggingface.co/dg845). + +على حد علمي، لا يوجد إصدار رسمي للرمز، ولكن يمكن العثور على تنفيذ غير رسمي في [maum-ai/univnet](https://github.com/maum-ai/univnet) مع نقاط تفتيش مسبقة التدريب [هنا](https://github.com/maum-ai/univnet#pre-trained-model). + +## UnivNetConfig + +[[autodoc]] UnivNetConfig + +## UnivNetFeatureExtractor + +[[autodoc]] UnivNetFeatureExtractor + +- __call__ + +## UnivNetModel + +[[autodoc]] UnivNetModel + +- forward \ No newline at end of file From 6f3ced00bc55417090d0491d6fdc1f67bdb3fcf5 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:21 +0300 Subject: [PATCH 605/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/upernet.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/upernet.md | 61 +++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/source/ar/model_doc/upernet.md diff --git a/docs/source/ar/model_doc/upernet.md b/docs/source/ar/model_doc/upernet.md new file mode 100644 index 00000000000000..7f4a40e104e9e4 --- /dev/null +++ b/docs/source/ar/model_doc/upernet.md @@ -0,0 +1,61 @@ +# UPerNet + +## نظرة عامة + +تم اقتراح نموذج UPerNet في [Unified Perceptual Parsing for Scene Understanding](https://arxiv.org/abs/1807.10221) بواسطة Tete Xiao و Yingcheng Liu و Bolei Zhou و Yuning Jiang و Jian Sun. UPerNet هو إطار عام لتجزئة مجموعة واسعة من المفاهيم من الصور بشكل فعال، والاستفادة من أي عمود رؤية مثل [ConvNeXt](convnext) أو [Swin](swin). + +المستخلص من الورقة هو ما يلي: + +> *يتمكن البشر من إدراك العالم المرئي على مستويات متعددة: فنحن نصنف المشاهد ونكتشف الأشياء داخلها بسهولة، بينما نحدد أيضًا نسيج الأشياء وأسطحها إلى جانب أجزائها التركيبية المختلفة. في هذه الورقة، نقوم بدراسة مهمة جديدة تسمى Unified Perceptual Parsing، والتي تتطلب أنظمة رؤية الآلة للتعرف على أكبر عدد ممكن من المفاهيم المرئية من صورة معينة. تم تطوير إطار عمل متعدد المهام يسمى UPerNet واستراتيجية تدريب للتعلم من التعليقات التوضيحية للصور غير المتجانسة. نقوم بضبط إطار عملنا على Unified Perceptual Parsing ونظهر أنه قادر على تجزئة مجموعة واسعة من المفاهيم من الصور بشكل فعال. يتم تطبيق الشبكات المدربة بشكل أكبر على اكتشاف المعرفة المرئية في المشاهد الطبيعية.* + +drawing + +إطار عمل UPerNet. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج من قبل [nielsr](https://huggingface.co/nielsr). يعتمد الكود الأصلي على OpenMMLab's mmsegmentation [here](https://github.com/open-mmlab/mmsegmentation/blob/master/mmseg/models/decode_heads/uper_head.py). + +## أمثلة الاستخدام + +UPerNet هو إطار عام للتجزئة الدلالية. يمكن استخدامه مع أي عمود رؤية، مثل ما يلي: + +```py +from transformers import SwinConfig, UperNetConfig, UperNetForSemanticSegmentation + +backbone_config = SwinConfig(out_features=["stage1", "stage2", "stage3", "stage4"]) + +config = UperNetConfig(backbone_config=backbone_config) +model = UperNetForSemanticSegmentation(config) +``` + +لاستخدام عمود رؤية آخر، مثل [ConvNeXt](convnext)، قم ببساطة بإنشاء مثيل للنموذج مع العمود الفقري المناسب: + +```py +from transformers import ConvNextConfig, UperNetConfig, UperNetForSemanticSegmentation + +backbone_config = ConvNextConfig(out_features=["stage1", "stage2", "stage3", "stage4"]) + +config = UperNetConfig(backbone_config=backbone_config) +model = UperNetForSemanticSegmentation(config) +``` + +لاحظ أن هذا سيقوم بإنشاء جميع أوزان النموذج بشكل عشوائي. + +## الموارد + +قائمة بموارد Hugging Face الرسمية والمجتمعية (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام UPerNet. + +- يمكن العثور على دفاتر الملاحظات التوضيحية لـ UPerNet [هنا](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/UPerNet). +- يتم دعم [`UperNetForSemanticSegmentation`] بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/semantic-segmentation) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/semantic_segmentation.ipynb) هذا. +- راجع أيضًا: [دليل مهام التجزئة الدلالية](../tasks/semantic_segmentation) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب وسنقوم بمراجعته! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## UperNetConfig + +[[autodoc]] UperNetConfig + +## UperNetForSemanticSegmentation + +[[autodoc]] UperNetForSemanticSegmentation + +- forward \ No newline at end of file From 80b8b28616668a7fbdd31c1c5945769ff0b08e3d Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:23 +0300 Subject: [PATCH 606/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/van.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/van.md | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/source/ar/model_doc/van.md diff --git a/docs/source/ar/model_doc/van.md b/docs/source/ar/model_doc/van.md new file mode 100644 index 00000000000000..8139ebb4770961 --- /dev/null +++ b/docs/source/ar/model_doc/van.md @@ -0,0 +1,52 @@ +# VAN + + +تم وضع هذا النموذج في وضع الصيانة فقط، ولن نقبل أي طلبات سحب جديدة لتغيير شفرته. +إذا واجهتك أي مشكلات أثناء تشغيل هذا النموذج، يرجى إعادة تثبيت الإصدار الأخير الذي يدعم هذا النموذج: v4.30.0. +يمكنك القيام بذلك عن طريق تشغيل الأمر التالي: `pip install -U transformers==4.30.0`. + + +## نظرة عامة +تم اقتراح نموذج VAN في ورقة "شبكة الانتباه المرئي" من قبل مينغ-هاو جوو، تشنغ-زي لو، تشنغ-نينج ليو، مينغ-مينج تشنغ، وشي-مين هو. +تقدم هذه الورقة طبقة اهتمام جديدة قائمة على عمليات التجزئة القادرة على التقاط العلاقات المحلية والبعيدة على حد سواء. يتم ذلك من خلال الجمع بين طبقات التجزئة العادية وذات النواة الكبيرة. ويستخدم الأخير تجزئة متوسعة لالتقاط الارتباطات البعيدة. + +المقتطف من الورقة هو كما يلي: + +*على الرغم من تصميم آلية الاهتمام الذاتي في الأصل لمهمات معالجة اللغة الطبيعية، إلا أنها اجتاحت مؤخرًا العديد من مجالات رؤية الكمبيوتر. ومع ذلك، فإن الطبيعة ثنائية الأبعاد للصور تطرح ثلاثة تحديات لتطبيق الاهتمام الذاتي في رؤية الكمبيوتر. (1) إن التعامل مع الصور على أنها متسلسلات أحادية البعد يتجاهل هياكلها ثنائية الأبعاد. (2) التعقيد التربيعي مكلف للغاية للصور عالية الدقة. (3) إنه يلتقط قابلية التكيف المكاني ولكنه يتجاهل قابلية التكيف بالقناة. في هذه الورقة، نقترح وحدة اهتمام جديدة ذات نواة كبيرة (LKA) لتمكين الارتباطات الذاتية التكيفية والبعيدة المدى في الاهتمام الذاتي مع تجنب القضايا المذكورة أعلاه. نقدم أيضًا شبكة عصبية جديدة قائمة على LKA، تسمى شبكة الاهتمام المرئي (VAN). على الرغم من بساطتها الشديدة، إلا أن VAN يتفوق على أحدث شبكات المحولات البصرية والشبكات العصبية التلافيفية بهامش كبير في التجارب المكثفة، بما في ذلك تصنيف الصور، وكشف الأشياء، والتجزئة الدلالية، وتجزئة المثيل، وما إلى ذلك. الكود متاح على [هذا عنوان URL https]()*. + +نصائح: + +- لا يحتوي VAN على طبقة تضمين، وبالتالي سيكون لـ `hidden_states` طول يساوي عدد المراحل. + +يوضح الشكل أدناه بنية طبقة الاهتمام المرئي. مأخوذة من [الورقة الأصلية](https://arxiv.org/abs/2202.09741). + + + +تمت المساهمة بهذا النموذج من قبل [فرانشيسكو](https://huggingface.co/Francesco). يمكن العثور على الكود الأصلي [هنا](https://github.com/Visual-Attention-Network/VAN-Classification). + +## الموارد + +قائمة بموارد Hugging Face الرسمية وموارد المجتمع (المشار إليها بـ 🌎) لمساعدتك في البدء باستخدام VAN. + + + +- [`VanForImageClassification`] مدعوم بواسطة [نص البرنامج النصي](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification) و [دفتر الملاحظات](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb). +- راجع أيضًا: [دليل مهمة تصنيف الصور](../tasks/image_classification) + +إذا كنت مهتمًا بتقديم مورد لإدراجه هنا، فلا تتردد في فتح طلب سحب وسنراجعه! يجب أن يُظهر المورد المثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +## VanConfig + +[[autodoc]] VanConfig + +## VanModel + +[[autodoc]] VanModel + +- forward + +## VanForImageClassification + +[[autodoc]] VanForImageClassification + +- forward \ No newline at end of file From f4dcd41156acebc5e1c12ffdbb359cd71c433d33 Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:25 +0300 Subject: [PATCH 607/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/videomae.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/videomae.md | 83 ++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/source/ar/model_doc/videomae.md diff --git a/docs/source/ar/model_doc/videomae.md b/docs/source/ar/model_doc/videomae.md new file mode 100644 index 00000000000000..7d39990c2ae69e --- /dev/null +++ b/docs/source/ar/model_doc/videomae.md @@ -0,0 +1,83 @@ +# VideoMAE + +## نظرة عامة +تم اقتراح نموذج VideoMAE في [VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training](https://arxiv.org/abs/2203.12602) بواسطة Zhan Tong وYibing Song وJue Wang وLimin Wang. + +يوسع VideoMAE مشفرات السيارات المقنعة (MAE) إلى الفيديو، مدعيًا أداءً متميزًا في العديد من معايير تصنيف الفيديو. + +ملخص الورقة هو كما يلي: + +*يُعد تدريب المحولات الفيديو المسبق على مجموعات بيانات كبيرة للغاية أمرًا مطلوبًا بشكل عام لتحقيق أداء متميز على مجموعات البيانات الصغيرة نسبيًا. في هذه الورقة، نُظهر أن مشفرات الفيديو المقنعة (VideoMAE) هي متعلمات فعالة للبيانات للتمثيل المسبق للفيديو ذاتي الإشراف (SSVP). نستلهم من ImageMAE الذي تم طرحه مؤخرًا ونقترح تصميمات مخصصة لإخفاء أنبوب الفيديو وإعادة بنائه. اتضح أن هذه التصميمات البسيطة فعالة في التغلب على تسرب المعلومات الناجم عن الارتباط الزمني أثناء إعادة بناء الفيديو. توصلنا إلى ثلاثة نتائج مهمة حول SSVP: (1) لا يزال معدل الإخفاء المرتفع للغاية (أي 90% إلى 95%) يحقق أداءً جيدًا لنموذج VideoMAE. يسمح محتوى الفيديو المتكرر زمنيًا بنسبة إخفاء أعلى من تلك المستخدمة في الصور. (2) يحقق VideoMAE نتائج رائعة في مجموعات بيانات صغيرة جدًا (أي حوالي 3000-4000 فيديو) دون استخدام أي بيانات إضافية. ويرجع ذلك جزئيًا إلى مهمة إعادة بناء الفيديو الصعبة لفرض تعلم البنية عالية المستوى. (3) يُظهر VideoMAE أن جودة البيانات أكثر أهمية من كمية البيانات لـ SSVP. يعد التحول في المجال بين مجموعات بيانات التدريب المسبق والمجموعات المستهدفة من القضايا المهمة في SSVP. ومن الجدير بالذكر أن نموذج VideoMAE الخاص بنا مع العمود الفقري ViT الأساسي يمكن أن يحقق 83.9% على Kinects-400 و75.3% على Something-Something V2 و90.8% على UCF101 و61.1% على HMDB51 دون استخدام أي بيانات إضافية.* + + + +التدريب المسبق لـ VideoMAE. مأخوذة من الورقة الأصلية. + +تمت المساهمة بهذا النموذج بواسطة [nielsr](https://huggingface.co/nielsr). +يمكن العثور على الكود الأصلي [هنا](https://github.com/MCG-NJU/VideoMAE). + +## استخدام Scaled Dot Product Attention (SDPA) +تتضمن PyTorch مشغل اهتمام المنتج النقطي المميز (SDPA) الأصلي كجزء من `torch.nn.functional`. تشمل هذه الوظيفة عدة تطبيقات يمكن تطبيقها اعتمادًا على المدخلات والأجهزة المستخدمة. راجع [الوثائق الرسمية](https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) +أو صفحة [GPU Inference](https://huggingface.co/docs/transformers/main/en/perf_infer_gpu_one#pytorch-scaled-dot-product-attention) +لمزيد من المعلومات. + +يتم استخدام SDPA بشكل افتراضي لـ `torch>=2.1.1` عند توفر التطبيق، ولكن يمكنك أيضًا تعيين +`attn_implementation="sdpa"` في `from_pretrained()` لطلب استخدام SDPA بشكل صريح. + +```py +from transformers import VideoMAEForVideoClassification +model = VideoMAEForVideoClassification.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics", attn_implementation="sdpa", torch_dtype=torch.float16) +... +``` + +للحصول على أفضل التحسينات، نوصي بتحميل النموذج بنصف الدقة (على سبيل المثال `torch.float16` أو `torch.bfloat16`). + +على معيار محلي (A100-40GB، PyTorch 2.3.0، نظام التشغيل Ubuntu 22.04) مع `float32` ونموذج `MCG-NJU/videomae-base-finetuned-kinetics`، رأينا التحسينات التالية أثناء الاستدلال. + +| حجم الدفعة | متوسط وقت الاستدلال (مللي ثانية)، وضع Eager | متوسط وقت الاستدلال (مللي ثانية)، نموذج SDPA | تسريع، SDPA / Eager (x) | +|--------------|-------------------------------------------|-------------------------------------------|------------------------------| +| 1 | 37 | 10 | 3.7 | +| 2 | 24 | 18 | 1.33 | +| 4 | 43 | 32 | 1.34 | +| 8 | 84 | 60 | 1.4 | + +## الموارد +فيما يلي قائمة بموارد Hugging Face الرسمية وموارد المجتمع (مشار إليها بـ 🌎) لمساعدتك في البدء باستخدام VideoMAE. إذا +كنت مهتمًا بتقديم مورد لإدراجه هنا، فالرجاء فتح طلب سحب Pull Request وسنراجعه! يجب أن يُظهر المورد بشكل مثالي شيئًا جديدًا بدلاً من تكرار مورد موجود. + +**تصنيف الفيديو** +- [دفتر ملاحظات](https://github.com/huggingface/notebooks/blob/main/examples/video_classification.ipynb) يُظهر كيفية +ضبط نموذج VideoMAE على مجموعة بيانات مخصصة. +- [دليل مهمة تصنيف الفيديو](../tasks/video_classification) +- [مساحة 🤗](https://huggingface.co/spaces/sayakpaul/video-classification-ucf101-subset) تُظهر كيفية إجراء الاستدلال باستخدام نموذج تصنيف الفيديو. + +## VideoMAEConfig +[[autodoc]] VideoMAEConfig + +## VideoMAEFeatureExtractor + +[[autodoc]] VideoMAEFeatureExtractor +- __call__ + +## VideoMAEImageProcessor + +[[autodoc]] VideoMAEImageProcessor +- preprocess + +## VideoMAEModel + +[[autodoc]] VideoMAEModel +- forward + +## VideoMAEForPreTraining + +يتضمن `VideoMAEForPreTraining` فك التشفير في الأعلى للتدريب المسبق ذاتي الإشراف. + +[[autodoc]] transformers.VideoMAEForPreTraining +- forward + +## VideoMAEForVideoClassification + +[[autodoc]] transformers.VideoMAEForVideoClassification +- forward \ No newline at end of file From 1cd029d11b52d8496c4aec0a8ce0edff5fdad6dc Mon Sep 17 00:00:00 2001 From: Ahmed almaghz <53489256+ahmedalmaghz@users.noreply.github.com> Date: Wed, 7 Aug 2024 23:30:27 +0300 Subject: [PATCH 608/653] =?UTF-8?q?=D8=A5=D8=B6=D8=A7=D9=81=D8=A9=20docs/s?= =?UTF-8?q?ource/ar/model=5Fdoc/video=5Fllava.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/ar/model_doc/video_llava.md | 162 ++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 docs/source/ar/model_doc/video_llava.md diff --git a/docs/source/ar/model_doc/video_llava.md b/docs/source/ar/model_doc/video_llava.md new file mode 100644 index 00000000000000..059508175dde75 --- /dev/null +++ b/docs/source/ar/model_doc/video_llava.md @@ -0,0 +1,162 @@ +# Video-LLaVA + +## نظرة عامة +Video-LLaVa هو نموذج لغة مفتوح المصدر متعدد الوسائط تم تدريبه عن طريق الضبط الدقيق لـ LlamA/Vicuna على بيانات اتباع التعليمات متعددة الوسائط التي تم إنشاؤها بواسطة Llava1.5 وVideChat. وهو نموذج لغة تنازلي، يعتمد على بنية المحول (transformer architecture). يوحد Video-LLaVa التمثيلات المرئية في مساحة ميزات اللغة، ويمكّن نموذج لغة اللغة من أداء قدرات الاستدلال المرئي على الصور ومقاطع الفيديو في نفس الوقت. + +تم اقتراح نموذج Video-LLaVA في ورقة "Video-LLaVA: Learning United Visual Representation by Alignment Before Projection" من قبل Bin Lin وYang Ye وBin Zhu وJiaxi Cui وMunang Ning وPeng Jin وLi Yuan. + +ملخص الورقة هو كما يلي: + +*"عزز نموذج اللغة والرؤية الكبير (LVLM) أداء مختلف مهام التدفق السفلي في فهم اللغة والرؤية. تقوم معظم الطرق الحالية بتشفير الصور ومقاطع الفيديو في مساحات ميزات منفصلة، والتي يتم تغذيتها بعد ذلك كمدخلات لنماذج اللغة الكبيرة. ومع ذلك، بسبب عدم وجود توحيد لعملية تمثيل الصور ومقاطع الفيديو، أي عدم الاتساق قبل الإسقاط، يصبح من الصعب على نموذج لغة اللغة الكبيرة (LLM) تعلم التفاعلات متعددة الوسائط من عدة طبقات إسقاط رديئة. في هذا العمل، نوحد التمثيل المرئي في مساحة ميزات اللغة للانتقال بنموذج LLM الأساسي نحو LVLM موحد. ونتيجة لذلك، أنشأنا خط أساس بسيطًا ولكنه قويًا لـ LVLM، وهو Video-LLaVA، والذي يتعلم من مجموعة بيانات مختلطة من الصور ومقاطع الفيديو، مما يعزز كل منهما الآخر. يحقق Video-LLaVA أداءً متفوقًا في مجموعة واسعة من معايير الصور التي تغطي 5 مجموعات بيانات لأسئلة الصور و4 مجموعات أدوات معايير الصور. بالإضافة إلى ذلك، يتفوق نموذجنا Video-LLaVA أيضًا على Video-ChatGPT بنسبة 5.8٪ و9.9٪ و18.6٪ و10.1٪ على مجموعات بيانات MSRVTT وMSVD وTGIF وActivityNet على التوالي. وتجدر الإشارة إلى أن التجارب الواسعة توضح أن Video-LLaVA يفيد الصور ومقاطع الفيديو بشكل متبادل في إطار تمثيل مرئي موحد، متفوقًا على النماذج المصممة خصيصًا للصور أو مقاطع الفيديو. نهدف من خلال هذا العمل إلى تقديم رؤى متواضعة حول المدخلات متعددة الوسائط لنموذج اللغة."* + +## نصائح الاستخدام: + +- نوصي المستخدمين باستخدام padding_side="left" عند حساب التوليد الدفعي لأنه يؤدي إلى نتائج أكثر دقة. فقط تأكد من استدعاء processor.tokenizer.padding_side = "left" قبل التوليد. + +- لاحظ أن النموذج لم يتم تدريبه صراحةً لمعالجة عدة صور/مقاطع فيديو في نفس المطالبة، على الرغم من أن هذا ممكن من الناحية الفنية، فقد تواجه نتائج غير دقيقة. + +- لاحظ أن مدخلات الفيديو يجب أن تحتوي على 8 إطارات بالضبط، حيث تم تدريب النماذج في هذا الإعداد. + +تمت المساهمة بهذا النموذج من قبل [RaushanTurganbay](https://huggingface.co/RaushanTurganbay). يمكن العثور على الكود الأصلي [هنا](https://github.com/PKU-YuanGroup/Video-LLaVA). + +## مثال الاستخدام + +### وضع الوسائط الفردية + +يمكن للنموذج قبول كل من الصور ومقاطع الفيديو كمدخلات. فيما يلي مثال على التعليمات البرمجية للاستنتاج في الدقة النصفية (`torch.float16`): + +```python +import av +import torch +import numpy as np +from transformers import VideoLlavaForConditionalGeneration, VideoLlavaProcessor + +def read_video_pyav(container, indices): + ''' + Decode the video with PyAV decoder. + Args: + container (`av.container.input.InputContainer`): PyAV container. + indices (`List[int]`): List of frame indices to decode. + Returns: + result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3). + ''' + frames = [] + container.seek(0) + start_index = indices[0] + end_index = indices[-1] + for i, frame in enumerate(container.decode(video=0)): + if i > end_index: + break + if i >= start_index and i in indices: + frames.append(frame) + return np.stack([x.to_ndarray(format="rgb24") for x in frames]) + +# Load the model in half-precision +model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf", torch_dtype=torch.float16, device_map="auto") +processor = VideoLlavaProcessor.from_pretrained("LanguageBind/Video-LLaVA-7B-hf") + +# Load the video as an np.arrau, sampling uniformly 8 frames +video_path = hf_hub_download(repo_id="raushan-testing-hf/videos-test", filename="sample_demo_1.mp4", repo_type="dataset") +container = av.open(video_path) +total_frames = container.streams.video[0].frames +indices = np.arange(0, total_frames, total_frames / 8).astype(int) +video = read_video_pyav(container, indices) + +# For better results, we recommend to prompt the model in the following format +prompt = "USER: