الدرس 4 من 9

Hugging Face

الـ GitHub بتاع موديلات الـ AI.

يعني إيه Hugging Face؟

موقع ومكتبات فيها مئات الآلاف من الموديلات المفتوحة: تصنيف نصوص، ترجمة، تلخيص، تعرف على كلام، صور، وكل حاجة. ومكتبة transformers بتخليك تحمّل أي موديل منهم وتستخدمه بنفس الطريقة.

terminal
pip install transformers sentence-transformers torch

الـ Pipeline: أسهل طريقة

sentiment.py
from transformers import pipeline

classifier = pipeline(
    "sentiment-analysis",
    model="distilbert/distilbert-base-uncased-finetuned-sst-2-english",
)

reviews = [
    "Delivery was fast and the product is amazing!",
    "Terrible quality, it broke after two days.",
    "It's okay, nothing special.",
]
for review, result in zip(reviews, classifier(reviews)):
    print(f"{result['label']:8} {result['score']:.2f}  {review}")

لاحظ الجملة التالتة: «عادي» مش إيجابي ولا سلبي، بس الموديل ده متدرب على نوعين بس فلازم يختار واحد منهم. اعرف دايماً الموديل اتدرب على إيه قبل ما تستخدمه.

بتدور على موديل إزاي؟

  • ادخل على huggingface.co/models وفلتر بنوع المهمة (Tasks) واللغة (Languages).
  • رتّب بالأكتر تحميلاً، واقرا الـ Model Card: اتدرب على إيه، ونتايجه، وحدوده.
  • للعربي فيه موديلات متخصصة كتير، وفيه موديلات متدربة على اللهجة المصرية كمان.

من غير Pipeline: تحكم كامل

الـ pipeline من جوه بيعمل ٣ حاجات: tokenizer ← موديل ← تحويل الناتج. لما تحتاج تحكم أكتر (زي fine-tuning بعدين) هتكتبهم بنفسك:

manual.py
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

name = "distilbert/distilbert-base-uncased-finetuned-sst-2-english"
tok = AutoTokenizer.from_pretrained(name)
model = AutoModelForSequenceClassification.from_pretrained(name)

inputs = tok("The food was cold and the service was slow", return_tensors="pt")
with torch.no_grad():
    logits = model(**inputs).logits           # raw scores
probs = torch.softmax(logits, dim=-1)[0]     # softmax -> probabilities

for label_id, p in enumerate(probs):
    print(f"{model.config.id2label[label_id]:8} {p:.1%}")
🤖 كل اللي اتعلمته بيتجمع هناtokenizer (الدرس الأول)، وموديل Transformer (الدرس اللي فات)، و torch.no_grad() (المرحلة ٦)، و softmax (المرحلة ٣). مفيش سحر، كله حاجات انت فاهمها.
الدرس اللي فات