Path: blob/main/transformers_doc/ar/tensorflow/quicktour.ipynb
4544 views
جولة سريعة
ابدأ رحلتك مع مكتبة 🤗 Transformers! سواء كنت مطورًا أو مستخدمًا عاديًا، ستساعدك هذه الجولة السريعة على البدء وستُظهر لك كيفية استخدام pipeline()
للاستنتاج، وتحميل نموذج مُدرب مسبقًا ومعالج مُسبق مع AutoClass، وتدريب نموذج بسرعة باستخدام PyTorch أو TensorFlow. إذا كنت مبتدئًا، نوصي بالاطلاع على دروسنا أو الدورة للحصول على شرح أكثر تعمقًا للمفاهيم المقدمة هنا.
قبل البدء، تأكد من تثبيت جميع المكتبات الضرورية:
ستحتاج أيضًا إلى تثبيت إطار عمل التعلم الآلي المفضل لديك:
خط الأنابيب
يمثل pipeline()
أسهل وأسرع طريقة لاستخدام نموذج مُدرب مسبقًا للاستنتاج. يمكنك استخدام pipeline()
جاهزًا للعديد من المهام عبر طرق مختلفة، والتي يظهر بعضها في الجدول أدناه:
للاطلاع على القائمة الكاملة للمهام المتاحة، راجع مرجع واجهة برمجة التطبيقات الخاصة بخط الأنابيب.
المهمة | الوصف | الطريقة | معرف خط الأنابيب |
---|---|---|---|
تصنيف النص | تعيين تسمية إلى تسلسل نص معين | 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()
بتنزيل وتخزين نسخة احتياطية من نموذج افتراضي مُدرب مسبقًا ومعالج للتحليل النصي. الآن يمكنك استخدام classifier
على النص المستهدف:
إذا كان لديك أكثر من إدخال واحد، قم بتمرير إدخالاتك كقائمة إلى pipeline()
لإرجاع قائمة من القواميس:
يمكن لخط الأنابيب أيضًا أن يتنقل خلال مجموعة بيانات كاملة لأي مهمة تريدها. كمثال على ذلك، دعنا نختار التعرف على الكلام التلقائي كمهمة لنا:
قم بتحميل مجموعة بيانات صوتية (راجع دليل البدء السريع لـ 🤗 Datasets Quick Start للحصول على مزيد من التفاصيل) التي تريد التنقل خلالها. على سبيل المثال، قم بتحميل مجموعة بيانات MInDS-14:
يجب التأكد من أن نفس الجودة الصوتية (معدل أخذ العينات) لمجموعة البيانات يتطابق مع معدل أخذ العينات الذي تم تدريب facebook/wav2vec2-base-960h
عليه:
يتم تحميل الملفات الصوتية وإعادة تشكيلها تلقائيًا عند استدعاء العمود "audio". استخرج المصفوفات الموجية الخام من أول 4 عينات ومررها كقائمة إلى خط الأنابيب:
بالنسبة لمجموعات البيانات الكبيرة التي تحتوي على مدخلات ضخمة (كما هو الحال في البيانات الصوتية أو المرئية)، يفضل تمرير مولد (generator) بدلاً من قائمة لتحميل جميع المدخلات في الذاكرة دفعة واحدة. راجع مرجع واجهة برمجة التطبيقات الخاصة بخط الأنابيب للحصول على مزيد من المعلومات.
ااستخدم نموذجًا ومجزئًا آخرين في خط الأنابيب
يمكن لخط الأنابيب pipeline()
استيعاب أي نموذج من Hub، مما يسهل التكيف مع حالات الاستخدام الأخرى. على سبيل المثال، إذا كنت تريد نموذجًا قادرًا على التعامل مع النص الفرنسي، فاستخدم العلامات على Hub لفلتره نموذج مناسب. تعيد النتيجة الأولى المرشحة نموذج BERT متعدد اللغات BERT model الذي تم ضبطه مسبقًا للتحليل المشاعر والذي يمكنك استخدامه للنص الفرنسي:
استخدم TFAutoModelForSequenceClassification
و AutoTokenizer
لتحميل النموذج المُدرب مسبقًا ومعالجته المرتبط به (مزيد من المعلومات حول TFAutoClass
في القسم التالي):
حدد النموذج والمعالج في pipeline()
. الآن يمكنك تطبيق classifier
على النص الفرنسي:
إذا لم تجد نموذجًا جاهزًا يناسب مهمتك، فستحتاج إلى ضبط نموذج مُدرب مسبقًا على بياناتك. اطلع على دليل الضبط الدقيق للتعرف على كيفية القيام بذلك. وبعد ضبط نموذجك المُدرب مسبقًا، يرجى مراعاة المشاركة النموذج مع المجتمع على Hub لمساعدة الجميع في مجال التعلم الآلي! 🤗
AutoClass
في الخلفية، تعمل فئتا AutoModelForSequenceClassification
و AutoTokenizer
معًا لتشغيل دالة pipeline() الذي استخدمتها أعلاه. تعتبر AutoClass اختصارًا يقوم تلقائيًا باسترداد بنية نموذج مُدرب مسبقًا من اسمه أو مساره. كل ما عليك فعله هو تحديد فئة AutoClass
المناسبة لمهمتك وفئة المعالجة المرتبطة بها.
لنعد إلى المثال من القسم السابق ولنرى كيف يمكنك استخدام AutoClass
لتكرار نتائج خط الأنابيب.
المجزئ التلقائي (AutoTokenizer)
يتولى المجزئ مسؤولية تحويل النص إلى مصفوفة من الأرقام (رموز) يمكن للنموذج فهمها ومعالجتها. هناك قواعد متعددة تحكم عملية التجزئة، بما في ذلك كيفية تقسيم كلمة وما هو المستوى الذي يجب أن تقسيم الكلمات عنده (تعرف على المزيد حول المعالجة في ملخص المجزئ). أهم شيء يجب تذكره هو أنك تحتاج إلى إنشاء مثيل للمجزئ بنفس اسم النموذج لضمان استخدامك لقواعد التجزئة نفسها التي تم تدريب النموذج عليها.
قم بتحميل المجزئ باستخدام AutoTokenizer
:
مرر نصك إلى المجزئ:
يعيد المجزئ قاموسًا يحتوي على:
input_ids: التمثيلات الرقمية لرموزك.
attention_mask: تشير إلى الرموز التي يجب الانتباه بها.
يمكن المجزئ أيضًا قبول قائمة من المدخلات، ويقوم بـ "حشو" و"تقصير" النص لإرجاع كدفعة بطول موحد:
اطلع على الدليل التمهيدي للمعالجة المسبقة للحصول على مزيد من التفاصيل حول المعالجة، وكيفية استخدام AutoImageProcessor
و AutoFeatureExtractor
و AutoProcessor
لمعالجة الصور والصوت والإدخالات متعددة الوسائط.
AutoModel
يوفر 🤗 Transformers طريقة بسيطة وموحدة لتحميل مثيلات مُدربة مسبقًا. وهذا يعني أنه يمكنك تحميل TFAutoModel
مثل تحميل AutoTokenizer
. والفرق الوحيد هو تحديد TFAutoModel
الصحيح للمهمة. للتصنيف النصي (أو التسلسلي)، يجب تحميل TFAutoModelForSequenceClassification
:
راجع ملخص المهام للمهام المدعومة بواسطة فئة AutoModel
.
الآن، مرر دفعة المدخلات المعالجة مسبقًا مباشرة إلى النموذج. يمكنك تمرير المصفوفات كما هي:
يقوم النموذج بإخراج التنشيطات النهائية في سمة logits
. طبق دالة softmax على logits
لاسترداد الاحتمالات:
تخرج جميع نماذج 🤗 Transformers (PyTorch أو TensorFlow) المصفوفات قبل دالة التنشيط النهائية (مثل softmax) لأن دالة التنشيط النهائية غالبًا ما تكون مدمجة مع دالة الخسارة. نواتج النموذج عبارة عن فئات بيانات خاصة، لذلك يتم استكمال سماتها تلقائيًا في IDE. وتتصرف مخرجات النموذج مثل زوج مرتب أو قاموس (يمكنك الفهرسة باستخدام عدد صحيح ، شريحة، أو سلسلة)، وفي هذه الحالة، يتم تجاهل السمات التي تساوي None.
حفظ النموذج
بمجرد ضبط نموذجك، يمكنك حفظه مع برنامج الترميز الخاص به باستخدام TFPreTrainedModel.save_pretrained()
:
عندما تكون مستعدًا لاستخدام النموذج مرة أخرى، أعد تحميله باستخدام TFPreTrainedModel.from_pretrained()
:
من الميزات الرائعة في 🤗 Transformers القدرة على حفظ نموذج وإعادة تحميله كنموذج PyTorch أو TensorFlow. يمكن أن يحول معامل from_pt
أو from_tf
النموذج من إطار عمل إلى آخر:
إنشاء نماذج مخصصة
يمكنك تعديل فئة تكوين النموذج لتغيير كيفية بناء النموذج. يحدد التكوين سمات النموذج، مثل عدد الطبقات المخفية أو رؤوس الاهتمام. تبدأ من الصفر عند تهيئة نموذج من فئة تكوين مخصصة. يتم تهيئة سمات النموذج بشكل عشوائي، ويجب تدريب النموذج قبل استخدامه للحصول على نتائج ذات معنى.
ابدأ باستيراد AutoConfig
. ثم قم بتحميل النموذج المُدرب مسبقًا الذي تريد تعديله. ضمن AutoConfig.from_pretrained()
. يمكنك تحديد السمة التي تريد تغييرها، مثل عدد رؤوس الاهتمام:
قم بإنشاء نموذج من تكوينك المخصص باستخدام TFAutoModel.from_config()
:
الق نظرة على دليل إنشاء بنية مخصصة لمزيد من المعلومات حول بناء التكوينات المخصصة.
المدرب - حلقة تدريب محسنة لـ PyTorch
جميع النماذج عبارة عن torch.nn.Module
قياسية، لذا يمكنك استخدامها في أي حلقة تدريب نموذجية. في حين يمكنك كتابة حلقة التدريب الخاصة بك، يوفر 🤗 Transformers فئة Trainer
لـ PyTorch، والتي تحتوي على حلقة التدريب الأساسية وتضيف وظائف إضافية لميزات مثل التدريب الموزع، والدقة المختلطة، والمزيد.
وفقًا لمهمتك، ستقوم عادةً بتمرير المعلمات التالية إلى Trainer
:
ستبدأ بـ
PreTrainedModel
أوtorch.nn.Module
:تحتوي
TrainingArguments
على فرط معلمات النموذج التي يمكنك تغييرها مثل معدل التعلم، وحجم الدفعة، وعدد العصور التي يجب التدريب عليها. يتم استخدام القيم الافتراضية إذا لم تحدد أي حجج تدريب:قم بتحميل فئة معالجة مسبقة مثل برنامج الترميز، أو معالج الصور، أو مستخرج الميزات، أو المعالج:
قم بتحميل مجموعة بيانات:
قم بإنشاء دالة لترميز مجموعة البيانات:
ثم قم بتطبيقه على مجموعة البيانات بأكملها باستخدام
map
:DataCollatorWithPadding
لإنشاء دفعة من الأمثلة من مجموعة البيانات الخاصة بك:
الآن قم بتجميع جميع هذه الفئات في Trainer
:
عندما تكون مستعدًا، استدعِ train()
لبدء التدريب:
بالنسبة للمهام - مثل الترجمة أو التلخيص - التي تستخدم نموذج تسلسل إلى تسلسل، استخدم فئات Seq2SeqTrainer
و Seq2SeqTrainingArguments
بدلاً من ذلك.
يمكنك تخصيص سلوك حلقة التدريب عن طريق إنشاء فئة فرعية من الطرق داخل Trainer
. يسمح لك ذلك بتخصيص ميزات مثل دالة الخسارة، والمحسن، والمجدول. راجع مرجع Trainer
للتعرف على الطرق التي يمكن إنشاء فئات فرعية منها.
والطريقة الأخرى لتخصيص حلقة التدريب هي باستخدام المستدعيات. يمكنك استخدام المستدعيات للتكامل مع المكتبات الأخرى ومراقبة حلقة التدريب للإبلاغ عن التقدم أو إيقاف التدريب مبكرًا. لا تعدل المستدعيات أي شيء في حلقة التدريب نفسها. لتخصيص شيء مثل دالة الخسارة، تحتاج إلى إنشاء فئة فرعية من Trainer
بدلاً من ذلك.
التدريب باستخدام TensorFlow
جميع النماذج عبارة عن tf.keras.Model
قياسية، لذا يمكن تدريبها في TensorFlow باستخدام واجهة برمجة تطبيقات Keras. يوفر 🤗 Transformers طريقة prepare_tf_dataset()
لتحميل مجموعة البيانات الخاصة بك بسهولة كـ tf.data.Dataset
حتى تتمكن من البدء في التدريب على الفور باستخدام دالتي compile
وfit
في Keras.
ستبدأ بـ
TFPreTrainedModel
أوtf.keras.Model
:قم بتحميل فئة معالجة مسبقة مثل برنامج الترميز، أو معالج الصور، أو مستخرج الميزات، أو المعالج:
قم بإنشاء دالة لترميز مجموعة البيانات:
قم بتطبيق برنامج الترميز على مجموعة البيانات بأكملها باستخدام
map
ثم مرر مجموعة البيانات وبرنامج الترميز إلىprepare_tf_dataset()
. يمكنك أيضًا تغيير حجم الدفعة وخلط مجموعة البيانات هنا إذا أردت:عندما تكون مستعدًا، يمكنك استدعاء
compile
وfit
لبدء التدريب. لاحظ أن جميع نماذج Transformers لديها دالة خسارة ذات صلة بالمهمة بشكل افتراضي، لذا فأنت لست بحاجة إلى تحديد واحدة ما لم ترغب في ذلك:
ماذا بعد؟
الآن بعد أن أكملت الجولة السريعة في 🤗 Transformers، راجع أدلتنا لمعرفة كيفية القيام بأشياء أكثر تحديدًا مثل كتابة نموذج مخصص، وضبط نموذج مسبق التدريب لمهمة معينة، وكيفية تدريب نموذج باستخدام نص برمجي. إذا كنت مهتمًا بمعرفة المزيد عن المفاهيم الأساسية لـ 🤗 Transformers، فاحصل على فنجان من القهوة واطلع على أدلة المفاهيم الخاصة بنا!