Text Classification
PEFT
Safetensors
Arabic
French
darija
arabic
moroccan-arabic
arabizi
nlp
lora
bertouch
Instructions to use MedAdil/BERTal with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use MedAdil/BERTal with PEFT:
from peft import PeftModel from transformers import AutoModelForSequenceClassification base_model = AutoModelForSequenceClassification.from_pretrained("AbderrahmanSkiredj1/BERTouch") model = PeftModel.from_pretrained(base_model, "MedAdil/BERTal") - Notebooks
- Google Colab
- Kaggle
| language: | |
| - ar | |
| - fr | |
| tags: | |
| - text-classification | |
| - darija | |
| - arabic | |
| - moroccan-arabic | |
| - arabizi | |
| - nlp | |
| - lora | |
| - peft | |
| - bertouch | |
| license: mit | |
| base_model: AbderrahmanSkiredj1/BERTouch | |
| pipeline_tag: text-classification | |
| # 🇲🇦 BERTal — Classification Sémantique de Messages en Darija Marocaine | |
| > **Comprendre la Darija, l'Arabizi et le Français — là où les modèles classiques échouent.** | |
| BERTal est un modèle de classification de texte fine-tuné sur **BERTouch** via la méthode **LoRA**, | |
| spécialisé dans la compréhension sémantique des messages rédigés en **Darija marocaine**, | |
| en **Arabizi** (écriture latine du dialecte) et en **Français** — y compris leurs mélanges | |
| (*Code-switching*), phénomène omniprésent dans la communication numérique marocaine. | |
| --- | |
| ## 🎯 Tâche | |
| Classification automatique de messages en **7 catégories métier** : | |
| | Catégorie | Description | | |
| |---|---| | |
| | 🔵 Recrutement | Offres d'emploi, CV, entretiens, stages | | |
| | 🟢 Personnel | Famille, amis, échanges informels | | |
| | 🟠 Commercial | Vente, achat, prix, promotions | | |
| | 🟣 Administratif | Documents officiels, CNSS, CIN, commune | | |
| | 🩵 Education | Examens, cours, université, concours | | |
| | 🔴 Santé | Médecin, pharmacie, hôpital, médicaments | | |
| | ⚫ Autre | Sport, divertissement, actualités | | |
| --- | |
| ## 🧠 Pourquoi BERTal ? | |
| La **Darija marocaine** est l'une des langues les plus parlées au Maghreb, | |
| utilisée quotidiennement par plus de **40 millions de personnes**, | |
| mais quasi absente des ressources NLP existantes. Elle présente trois défis majeurs : | |
| - ❌ **Aucune orthographe standardisée** — chaque locuteur écrit à sa façon | |
| - ❌ **Arabizi omniprésent** — mélange de chiffres et de lettres latines (`3`, `7`, `9`) | |
| - ❌ **Code-switching permanent** — Darija + Français dans la même phrase | |
| BERTal relève ces défis en s'appuyant sur **BERTouch**, le seul modèle BERT | |
| pré-entraîné nativement sur la Darija marocaine, et en l'adaptant via **LoRA** | |
| sur un dataset multilingue de **351 573 phrases** couvrant les trois scripts. | |
| --- | |
| ## 📊 Performances | |
| | Évaluation | Score | | |
| |---|---| | |
| | Accuracy (validation, 52 736 phrases) | **81.34%** | | |
| | Accuracy (jeu de test inédit 70 phrases multilingues) | **74.3%** | | |
| | Baseline sans fine-tuning | 11.4% | | |
| | Gain total | **+62.9 points** | | |
| ### Résultats par catégorie (jeu de test 70 phrases) | |
| | Catégorie | Score | | |
| |---|---| | |
| | Recrutement | 90% | | |
| | Santé | 90% | | |
| | Commercial | 80% | | |
| | Autre | 80% | | |
| | Personnel | 60% | | |
| | Administratif | 60% | | |
| | Education | 60% | | |
| --- | |
| ## 🗂️ Dataset d'entraînement | |
| Le modèle a été entraîné sur un dataset multilingue construit en 4 versions itératives | |
| à partir du corpus [ATLASIA](https://huggingface.co/datasets/atlasia/moroccan_darija_domain_classifier_dataset), | |
| enrichi par génération synthétique via **Gemini 2.5 Flash**. | |
| | Script | Lignes | % | | |
| |---|---|---| | |
| | Arabe (Darija) | 191 654 | 54.5% | | |
| | Arabizi | 107 567 | 30.6% | | |
| | Français | 52 352 | 14.9% | | |
| | **Total** | **351 573** | **100%** | | |
| Déséquilibre inter-classes : **1.35x** (quasi équilibré naturellement). | |
| --- | |
| ## ⚙️ Configuration LoRA | |
| ```python | |
| LoraConfig( | |
| task_type = TaskType.SEQ_CLS, | |
| r = 16, | |
| lora_alpha = 32, | |
| lora_dropout = 0.1, | |
| target_modules = ["query", "value"] | |
| ) | |
| ``` | |
| - **Paramètres entraînables** : 595 207 / 135 793 934 (**0.44%**) | |
| - **Époques** : 3 | |
| - **GPU** : Tesla T4 (Google Colab) | |
| - **Batch size** : 32 | |
| --- | |
| ## 🚀 Utilisation | |
| ```python | |
| import torch | |
| import torch.nn.functional as F | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| from peft import PeftModel | |
| CATEGORIES = [ | |
| 'Recrutement', 'Personnel', 'Commercial', | |
| 'Administratif', 'Education', 'Sante', 'Autre' | |
| ] | |
| label2id = {label: idx for idx, label in enumerate(CATEGORIES)} | |
| id2label = {idx: label for idx, label in enumerate(CATEGORIES)} | |
| # Charger le modèle | |
| tokenizer = AutoTokenizer.from_pretrained("MedAdil/BERTal") | |
| base_model = AutoModelForSequenceClassification.from_pretrained( | |
| "AbderrahmanSkiredj1/BERTouch", | |
| num_labels = 7, | |
| id2label = id2label, | |
| label2id = label2id, | |
| ignore_mismatched_sizes = True | |
| ) | |
| model = PeftModel.from_pretrained(base_model, "MedAdil/BERTal") | |
| model.eval() | |
| # Classifier un message | |
| def classifier(texte: str) -> dict: | |
| inputs = tokenizer(texte, return_tensors="pt", truncation=True, max_length=128) | |
| with torch.no_grad(): | |
| logits = model(**inputs).logits | |
| probas = F.softmax(logits, dim=-1)[0] | |
| scores = {id2label[i]: round(float(p), 4) for i, p in enumerate(probas)} | |
| label_predit = max(scores, key=scores.get) | |
| return {"label": label_predit, "confidence": scores[label_predit], "scores": scores} | |
| # Exemples | |
| print(classifier("bghit nkhdem f had chrika IT")) | |
| # → {'label': 'Recrutement', 'confidence': 0.9935, ...} | |
| print(classifier("خصني رونديفو عند الطبيب")) | |
| # → {'label': 'Sante', 'confidence': 0.9904, ...} | |
| print(classifier("Je cherche un appartement à Oujda")) | |
| # → {'label': 'Commercial', 'confidence': 0.9942, ...} | |
| ``` | |
| --- | |
| ## 📝 Citation | |
| ```bibtex | |
| @misc{mani2026bertal, | |
| author = {Mohammed Adil MANI}, | |
| title = {BERTal: LoRA Fine-tuning of BERTouch for Multilingual | |
| Moroccan Darija Message Classification}, | |
| year = {2026}, | |
| publisher = {Hugging Face}, | |
| url = {https://huggingface.co/MedAdil/BERTal} | |
| } | |
| ``` | |
| --- | |
| *BERTal — Bringing NLP to the language of millions 🇲🇦* | |