اذهب إلى المحتوى

تحميل النماذج المُدّربة مسبقًا باستخدام الأصناف التلقائية AutoClasses في مكتبة Transformers


رشا سعد

في ظل التنوع الكبير للبنى الموجودة في مكتبة المحوّلات Transformers قد يصعب عليك إنشاء بنية مناسبة لنقطة التحقق من النموذج checkpoint الخاصة بك وهنا يأتي دور الأصناف التلقائية AutoClasses التي توفرها مكتبة Transformers التي حرص مطوروها على جعلها مكتبةً مرنة وسهلة الاستخدام حيث تستنتج هذه الأصناف التلقائية البنية المناسبة لنقطة تحقق معينة وتُحمّلها لك تلقائيًا.

فأنت تستطيع بواسطة الدالة ‎from_pretrained()‎ في مكتبة Transformers تحميل نموذج مُدَّرب مسبقًا لأي بنية تريدها بسرعة وسهولة ومن دون الحاجة لتدريبه من الصفر وهدر الوقت والموارد، ويمكننا القول أن إنتاج هذا النوع من الشيفرات البرمجية المعزول كليًّا عن نقاط التحقق checkpoint-agnostic code والتي يمكن استخدامها مع نماذج مختلفة دون تغيير يساعد المطورين جدًا، فالشيفرة التي تعمل مع نقطة تحقق معينة ستعمل مع أي نقطة تحقق أخرى حتى لو كانت مختلفة بالبنية طالما الشيفرة مُدربة سابقًا على مهمة مماثلة.

اقتباس

توضيح للمصطلحات: يُقصد بالبنية architecture هيكل النموذج وتشير نقاط التحقق checkpoints إلى الأوزان weights المرتبطة ببنية معينة وهي تمثل حالة محددة للنموذج بعد التدريب، فعلى سبيل المثال تعد BERT بنية للنموذج اللغوي، بينما google-bert/bert-base-uncased فهي نقطة تحقق محددة لهذه البنية، أما النموذج Model فهو مصطلح أكثر عمومية من كليهما فقد يشير إلى كل من البنية أو نقطة التحقق حسب السياق.

سنتطرق للنقاط التالية في هذا المقال:

  • تحميل مُرَمِّز مُدَّرب مسبقًا pretrained tokenizer.

  • تحميل معالج صور مُدَّرب مسبقًا pretrained image processor.

  • تحميل مُستخرج ميزات مُدَّرب مسبقًا pretrained feature extractor.

  • تحميل معالج مُدَّرب مسبقًا pretrained processor.

  • تحميل نموذج مُدَّرب مسبقًا pretrained model.

  • تحميل نموذج ليكون backbone.

المُرَمِّز التلقائي AutoTokenizer

تبدأ معظم مهام معالجة اللغة الطبيعية (NLP) بمُرَمِّز AutoTokenizer يحول المُدخَلات إلى تنسيق مناسب للنموذج حتى يستطيع معالجتها.

علينا أولًا تحميل المُرَمِّز المناسب للنموذج باستخدام الدالة ‎AutoTokenizer.from_pretrained()‎:

>>> from transformers import AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")

ثم تُرَمِّزْ المدخلات باستخدامه كما يلي:

>>> sequence = "In a hole in the ground there lived a hobbit."
>>> print(tokenizer(sequence))
{'input_ids': [101, 1999, 1037, 4920, 1999, 1996, 2598, 2045, 2973, 1037, 7570, 10322, 4183, 1012, 102], 
 'token_type_ids': [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]}

معالج الصور التلقائي AutoImageProcessor

يعد معالج الصور AutoImageProcessor أداة مهمة في مكتبة Transformers تسهل عملية تحضير الصور للنماذج المختصة بالرؤية الحاسوبية، مما يجعل استخدام هذه النماذج أكثر سهولة وفعالية.

تشبه وظيفة معالج الصور وظيفة المُرَمِّز AutoTokenizer فهو يُحَضِّر البيانات قبل إدخالها للنموذج، لكنه يستخدم في مهام الرؤية الحاسوبية فيكفل معالجة الصور المدخلة بالتنسيق الصحيح الملائم للنموذج، كما في المثال التالي:

>>> from transformers import AutoImageProcessor

>>> image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")

AutoBackbone

AutoBackbone هو أداة قوية تسمح باستخدام نماذج معقدة مثل Swin Transformer بطريقة مرنة، حيث يمكن استخراج ميزات الصور على مستويات مختلفة من التفاصيل حسب متطلبات المهمة التي نقوم بها. ألقِ نظرة على الصورة التالية في البداية التي تبين نموذج Backbone الخاص بمحوّل Swin Transformer متعدد المراحل لاستخراج ميزات الصور:

img01 swin stages

يساعدك AutoBackbone على استخدام النماذج المُدّربة مسبقًا بصفتها بنى أساسية Backbones مكونة من عدة مراحل تعطيك خرائط الميزات feature maps لبياناتك بطريقة تدريجية على عدة مراحل حتى تصل إلى أفضل نتيجة، ويمكنك تحديد المرحلة التي تريد استخراج الخرائط عندها بواسطة معاملات الدالة from_pretrained‎()‎ إذ ينبغي لك تحديد معامل واحد على الأقل من المعاملات التالية:

  • المعامل out_indices: يشير إلى فهرس index الطبقة التي ستستخرج خريطة الميزات منها.

  • المعامل out_features: يدل على اسم الطبقة التي ستستخرج خريطة الميزات منها.

وإذا استخدمت المعاملين معًا فاحرص على التوافق بينهما، أما في الحالات التي لا تُمرر فيها أي معامل فستعبر بياناتك جميع مراحل Backbone وتحصل على خريطة الميزة من المرحلة الأخيرة.

يبين المثال التالي كيفية الحصول على خريطة الميزات من المرحلة الأولى لنموذج Swin backbone عبر ضبط قيمة المعامل out_indices=(1,)‎، لاحظ الصورة ثم التعليمات البرمجية المرتبطة:

img02-Swin-Stage-1.png

>>> from transformers import AutoImageProcessor, AutoBackbone
>>> 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("microsoft/swin-tiny-patch4-window7-224")
>>> model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))

>>> inputs = processor(image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> feature_maps = outputs.feature_maps

يمكنك الآن الوصول إلى الكائن feature_maps الخاص بخرائط الميزات وفق التالي:

>>> list(feature_maps[0].shape)
[1, 96, 56, 56]

مُسْتَخْرِج الميزات التلقائي AutoFeatureExtractor

يستخدم مُسْتَخْرِج الميزات في معالجة الصوتيات ويمكنك من معالجة الملفات الصوتية بالتنسيق الصحيح قبل إدخالها للنموذج، وفيما يلي طريقة تحميله بواسطة الدالة ‎AutoFeatureExtractor.from_pretrained()‎:

>>> from transformers import AutoProcessor

>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")

النموذج التلقائي AutoModel

تتيح لك أصناف النماذج التلقائية AutoModel تحميل نموذج جاهز مُدَّرب مسبقًا يناسب المهمة التي تعمل عليها، وتختلف هذه الأصناف classes حسب إطار العمل الذي تستخدمه، ففي إطار عمل بايتورشPytorch تكون من نوع AutoModelFor (ويمكنك الاطلاع على كافة المهام التي تدعمها أصناف التلقائية بمراجعة القسم الخاص بها على Hugging Face)، تستطيع مثلًا يمكنك تحميل نموذج ملائم لتصنيف السلاسل sequence classification بواسطة AutoModelForSequenceClassification.from_pretrained()‎ كما يلي:

يمكنك استخدام نقطة التحقق نفسها لمهمة مختلفة:

>>> from transformers import AutoModelForTokenClassification

>>> model = AutoModelForTokenClassification.from_pretrained("distilbert/distilbert-base-uncased")

ملاحظة: في نماذج PyTorch تُحَمّل النماذج بواسطة التابع from_pretrained()‎ المعتمدة على torch.load()‎ التي تستخدم بدورها الوحدة pickle من بايثون وهي غير آمنة، لذا ننصحك بعدم تحميل أي نماذج مجهولة المصدر أو غير موثوقة حتى لا تَضُّرْ بمشروعك، واحرص دائمًا على تحميلها من منصات معروفة مثل النماذج العامة الموجودة في مستودع Hugging Face فهي أقل خطرًا إذ تفحصها المنصة عند كل commit لضمان خلوها من البرمجيات الخبيثة، ويمكنك الاطلاع على توثيقات المستودع لمعرفة أفضل الممارسات في هذا المجال مثل استخدام GPG في التحقق من أن عمليات commit في النموذج موقعة من طرف موثوق وغيرها من طرق الحماية.

بالمقابل تُعدّ نقاط تحقق checkpoints لكل من إطاري TensorFlow و Flax محمية من هذا الخطر، ويمكنك الاستفادة من ذلك وتجاوز المخاطر السابقة بتحميل هذه النماذج ضمن بنى PyTorch أي بتحويلها إلى نماذج PyTorch باستخدام from_tf و from_flax بالصيغة kwargs مع from_pretrained.

توجد أصناف تلقائية مشابهة في إطار العمل TensorFlow وتتيح أيضًا تحميل نماذج مُدَّربة مسبقًا لمهمة محددة تختارها، تسمى أصناف TFAutoModelFor (يمكنك الاطلاع على كافة مهام المعالجة التي تدعمها)، يبين المثال التالي طريقة استخدام TFAutoModelForSequenceClassification.from_pretrained()‎ لتحميل نموذج مناسب لتصنيف السلاسل:

>>> from transformers import TFAutoModelForSequenceClassification

model = >>> TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")

تستطيع بسهولة إعادة استخدام نقطة التحقق التي وصلت إليها لتحميل بنية تناسب مهمة أخرى مختلفة كما في المثال التالي:

>>> from transformers import TFAutoModelForTokenClassification

>>> model = TFAutoModelForTokenClassification.from_pretrained("distilbert/distilbert-base-uncased")

ختامًا يوصى باستخدام صنف المُرَمِّز التلقائي AutoTokenizer وأصناف النموذج التلقائي AutoModelFor و TFAutoModelFor (حسب إطار العمل الذي تعتمده) لتحميل مثيلات النماذج المُدَّربة مُسبقًا لمشروعك فهي تضمن استخدامك البنية الصحيحة والمناسبة لمهمتك في كل مرة.

تابع معنا مقالات السلسلة واقرأ مقالنا التالي عن المعالجة المسبقة للبيانات قبل تمريرها لنماذج الذكاء الاصطناعي لتتعلم كيف تعالج مجموعات بياناتك وتضبطها بدقة قبل تمريرها إلى النموذج وذلك عبر تقنيات المعالجة المختلفة، مثل المُرَمِّز، ومعالج الصور، ومستخرج الميزات، ومعالج الأنماط المتعددة.

ترجمة -وبتصرف- لقسم Load pretrained instances with an AutoClass من توثيقات Hugging Face.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...