Downloads · 30 days
38
6% of all-time downloads
3liel/marbert-arabic-tweet-sentiment-stable
marbert-arabic-tweet-sentiment-stable is a text classification model from 3liel. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as apache-2.0.
نموذج لتصنيف مشاعر التغريدات العربية إلى ثلاث فئات: سلبي، محايد، إيجابي. مبني على Fine-tuning لنموذج MARBERTv2.
Downloads · 30 days
38
6% of all-time downloads
All-time downloads
592
Public
Parameters
163M
25.4 GB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors651 MB · 100%
From the Hugging Face model README
نموذج لتصنيف مشاعر التغريدات العربية إلى ثلاث فئات: سلبي، محايد، إيجابي. مبني على Fine-tuning لنموذج MARBERTv2.
النموذج منشور هنا: 3liel/marbert-arabic-tweet-sentiment-stable
from transformers import pipeline
classifier = pipeline("sentiment-analysis", model="3liel/marbert-arabic-tweet-sentiment-stable")
result = classifier("الخدمة كانت ممتازة جدًا")
print(result)
# [{'label': 'Positive', 'score': ...}]
| Metric | القيمة |
|---|---|
| Accuracy | 76.85% |
| F1 (weighted) | 76.13% |
| Neutral Recall | 56% ⚠️ |
Neutral هي أضعف فئة عندنا — التفاصيل تحت في "تحليل أخطاء Neutral". السبب في تعريف البيانات نفسها، مش في التدريب.
| الطريقة | الرابط / الأمر |
|---|---|
| كود التدريب الكامل | text-classification.ipynb — اتدرب على Kaggle (T4 GPU)، والملف محتفظ بالـ outputs (الجداول، classification report، أمثلة Neutral الغلط) |
| تجربة الموديل على صفحته | Model Page |
| تشغيل محلي | python main.py --text "نصك هنا" |
| واجهة Streamlit | streamlit run app.py |
| Metric | القيمة |
|---|---|
| Accuracy | 0.7685 |
| F1 (weighted) | 0.7613 |
| النموذج الأساسي | UBC-NLP/MARBERTv2 |
| عدد الفئات | 3 (Negative / Neutral / Positive) |
الموديل مدرّب على دمج داتاستين:
الحجم النهائي بعد الدمج والموازنة: 17,973 مثال. على الداتاست الأصلي وحده كان أقصى F1 اتوصله 0.74 بعد عدة تجارب على الـ hyperparameters. دمج ArSAS رفع الرقم لحوالي 0.76 — يعني المشكلة كانت في حجم البيانات مش في ضبط الإعدادات.
التقييم على validation split الأصلي بتاع mteb/tweet_sentiment_multilingual (324 مثال، 108 لكل فئة)، بعيد تمامًا عن بيانات الدمج، عشان الرقم يعكس الأداء على الدومين المستهدف (تويتات) مش على الخليط.
الـ F1 العام بيخفي فرق حقيقي بين الفئات. فئة Neutral هي الأضعف بوضوح:
| الفئة | Precision | Recall | F1 |
|---|---|---|---|
| Negative | 0.81 | 0.91 | 0.86 |
| Neutral | 0.76 | 0.56 | 0.65 |
| Positive | 0.73 | 0.83 | 0.78 |
الـ confusion matrix بتوضح إن أكبر مصدر خطأ هو تصنيف تغريدات Neutral فعلية كـ Positive (31 من أصل 108). هدف التحسين القادم هو رفع Neutral recall من غير ما يقل الأداء العام — عن طريق مراجعة البيانات الأول (labels ممكن تكون غير دقيقة، أو نصوص محايدة بمشاعر ضمنية)، قبل اللجوء لحلول على مستوى الـ loss function زي class weighting.
الكود الكامل لتوليد الجدول ده موجود في text-classification.ipynb (خلية "Per-class evaluation").
مراجعة يدوية لـ 47 مثال Neutral مصنّف غلط كشفت نمطين رئيسيين:
الخلاصة: تعريف "Neutral" في الداتاست خالط بين نصين مختلفين: "مفيهوش رأي واضح" و"مفيهوش رأي حتى ضمني أو سياسي". ده تناقض في البيانات نفسها، مش هيتحل بضبط hyperparameters أو تغيير الـ loss function. الحل الحقيقي هو إعادة توسيم جزء من البيانات، أو فصل فئة "سخرية/انتقاد ضمني" لوحدها — وده شغل v2، مش قصور في التدريب اللي عملناه.
.
├── main.py # تحميل الموديل من الـ Hub وتشغيل inference
├── app.py # واجهة Streamlit
├── text-classification.ipynb # كود التدريب (Kaggle، مع الـ outputs)
├── requirements.txt
└── README.md
git clone https://huggingface.co/3liel/marbert-arabic-tweet-sentiment-stable
cd marbert-arabic-tweet-sentiment-stable
pip install -r requirements.txt
python main.py --text "الخدمة كانت ممتازة جدًا"
python main.py --interactive
Fine-tuned MARBERTv2 for 3-class Arabic tweet sentiment classification (Negative / Neutral / Positive). Trained on a merge of mteb/tweet_sentiment_multilingual (arabic subset) and ArSAS — 17,973 examples after cleaning, deduplication, and balancing.
text-classification.ipynb for the full error analysis.