الوحدة 9 — مكتبة Transformers عمليًا
استعملنا هذه المكتبة في الوحدات الأخيرة دون تعمّق. الآن نجمع كلّ ما رأيناه في صورة واحدة، ونضيف ما يلزم لاستعمالها في مسار إنتاج: الفروق بين pipeline وAutoTokenizer وAutoModel، والتدفّق الكامل من الـHub إلى الاستدلال، وكيف يُختار نموذج من بين عشرات النماذج المتوفّرة لكلّ مهمّة، وكيف تُقاس الكلفة الحقيقيّة قبل التبنّي.
طبقات المكتبة الثلاث
مكتبة Transformers مبنيّة بطبقات، من الأعلى تجريدًا إلى الأدنى. اختيار الطبقة المناسبة يحسم مقروئيّة الشيفرة وأداءها.
الطبقة الأولى: pipeline. واجهة سطر واحد لمهامّ شائعة. تُخفي كلّ شيء: تحميل النموذج، تحميل المقطّع، معالجة قبليّة، استدلال، فكّ ترميز. مثالية للاستكشاف والنماذج الأوّلية.
from transformers import pipeline
qanat = pipeline("sentiment-analysis", model="CAMeL-Lab/bert-base-arabic-camelbert-mix-sentiment")
print(qanat("المنتج ممتاز وأنصح به"))
# [{'label': 'positive', 'score': 0.994}]
الحدّ: pipeline بطيء نسبيًّا لأنّه يعالج مثالًا واحدًا في كلّ استدعاء، ولا يستغلّ الدفعات (batching) تلقائيًّا. في الإنتاج، نعطيه دفعات صريحة أو ننزل طبقةً.
الطبقة الثانية: AutoTokenizer وAutoModel. التحكّم الكامل في المقطّع والنموذج بشكل صريح، مع بقاء التجريد على مستوى المكتبة (لا نحتاج معرفة إن كان النموذج BERT أو RoBERTa أو ELECTRA).
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
ism = "CAMeL-Lab/bert-base-arabic-camelbert-mix-sentiment"
tok = AutoTokenizer.from_pretrained(ism)
model = AutoModelForSequenceClassification.from_pretrained(ism)
nusus = ["ممتاز جدا", "مخيّب للأمل", "عادي، لا شيء يذكر"]
mad = tok(nusus, return_tensors="pt", padding=True, truncation=True, max_length=128)
with torch.no_grad():
out = model(**mad)
ihtimalat = out.logits.softmax(dim=-1)
prints_tanabbu = ihtimalat.argmax(dim=-1)
هذه الطبقة هي الاختيار الافتراضي في مسار إنتاج جادّ. نتحكّم في حجم الدفعة، والدقّة (float16 أو bfloat16)، والجهاز، ونستطيع تسخين النموذج مرّة والاحتفاظ به في الذاكرة.
الطبقة الثالثة: PreTrainedModel المباشر. الطبقة المخصّصة (BertModel, RobertaModel)، للتحكّم الدقيق في المعمارية وإضافة طبقات مخصّصة. تستعمل حين نحتاج بنية غير قياسية (رأس تصنيف مخصّص، سلسلة نماذج، فقدان مركّب).
الـHub وترتيب البحث
مركز Hugging Face يحوي عشرات الآلاف من النماذج. البحث الكفء يوفّر ساعات.
- حسب المهمّة:
Text Classification,Token Classification,Question Answering,Summarization. كلّ مهمّة تعرض نماذج مُهيّأة لها بواجهةAutoModelFor...المناسبة. - حسب اللغة: فلتر
Languages: Arabic. يعطي عادة بين 500 و1000 نموذج. - حسب المكتبة:
PyTorchأوTensorFlowأوJAX، حسب البيئة. - حسب الترخيص:
apache-2.0,mit,cc-by-4.0, أو تراخيص أشدّ (gemma-terms,llama2). الترخيص يحدّد إن كان الاستعمال التجاري مسموحًا. - حسب الحجم: عمود
Downloadsمقاس لثقة المجتمع؛ تاريخ التحديث الأخير مقاس للنشاط.
للعربية، أسرع طريق هو البدء بـaubmindlab/* (AraBERT وأخواته من AUB)، CAMeL-Lab/* (نماذج جامعية أميركية، مقسّمة حسب الفصحى والعامّية)، UBC-NLP/* (نماذج جامعة UBC). هذه العائلات موثّقة جيّدًا وترخيصها مرن.