Ce projet académique vise à exploiter les techniques de Traitement Automatique du Langage Naturel (NLP) afin de détecter automatiquement différents états de santé mentale à partir de publications issues des réseaux sociaux.
Il est réalisé dans le cadre de la filière Big Data & Intelligence Artificielle (BDIA)
ENSA Tétouan – Année universitaire 2025–2026
Avertissement : Ce travail est strictement académique et expérimental.
Il ne constitue en aucun cas un outil de diagnostic médical.
- Analyser des données textuelles issues des réseaux sociaux (principalement Reddit)
- Détecter automatiquement plusieurs états de santé mentale (classification multi-classes)
- Comparer des approches classiques et avancées en NLP :
- TF-IDF + SVM linéaire calibré
- BERT
- RoBERTa
- Évaluer les performances avec des métriques adaptées aux données déséquilibrées
- Déployer une application interactive pour comparer les prédictions des modèles
Le problème est formulé comme une tâche de classification multi-classes couvrant 14 états :
- Depression
- Suicidal
- ADHD
- Bipolar disorder
- Normal
- OCD
- PTSD
- Anxiety
- Stress
- Personality disorder
- Aspergers
- Schizophrenia
- Addiction
- Alcoholism
- Vectorisation TF-IDF (unigrammes + bigrammes)
- Vocabulaire limité à 50 000 termes
- Pondération automatique des classes
- Calibration des probabilités (Platt Scaling)
- Modèle rapide, interprétable et robuste
- Tokenisation WordPiece
- Représentations contextuelles bidirectionnelles
- Pondération des classes dans la fonction de perte
- Dropout, gradient clipping et early stopping
- Très bonne détection des classes minoritaires
- Suppression de la tâche NSP
- Masquage dynamique
- Pré-entraînement optimisé
- Fine-tuning supervisé avec régularisation
- Performances globales très élevées et stables
Les modèles ont été évalués à l’aide de métriques adaptées aux jeux de données déséquilibrés :
Accuracy, F1-score Macro et F1-score Weighted.
| Modèle | Accuracy | F1-score (Macro) | F1-score (Weighted) |
|---|---|---|---|
| TF-IDF + SVM (baseline) | 0.7647 | 0.7889 | 0.7650 |
| BERT | 0.8176 | 0.8429 | 0.8185 |
| RoBERTa | 0.8100 | 0.8400 | 0.8100 |
- Les modèles Transformers (BERT et RoBERTa) surpassent largement la baseline TF-IDF + SVM
- BERT obtient les meilleures performances globales, notamment en F1-score Macro
- RoBERTa reste très compétitif, avec des performances proches et une grande stabilité
- Le F1-score Macro confirme une meilleure prise en compte des classes minoritaires, ce qui est crucial en santé mentale
Cette section décrit les étapes nécessaires pour reproduire les résultats expérimentaux présentés dans ce projet.
- Python 3.9+
- Environnement virtuel recommandé
- Système d’exploitation : Windows / Linux / macOS
- GPU recommandé pour l’entraînement de BERT et RoBERTa (optionnel mais conseillé)
- Cloner le dépôt :
git clone https://github.com/itsmawna/Nlp-Mental-Health-Detection.git
cd NLP-Mental-Health-Detection- Créer et activer un environnement virtuel :
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # Windows- Installer les dépendances :
pip install -r requirements.txtLes jeux de données ne sont pas inclus dans le dépôt pour des raisons de taille et d’éthique.
Les notebooks suivants permettent de reproduire l’ensemble de la préparation des données :
notebooks/dataextraction_from_hugging_face.ipynbnotebooks/preprocessing.ipynbnotebooks/preprocessing final.ipynb
Les données prétraitées doivent être placées dans le dossier data/.
Chaque modèle peut être reproduit à l’aide de son notebook dédié :
-
TF-IDF + SVM
notebooks/tf-idf-linear-svm-calibrated.ipynb
-
BERT
notebooks/nlp-bert.ipynb
-
RoBERTa
notebooks/roberta-mental-health.ipynb
Les modèles entraînés sont générés localement et sauvegardés dans le dossier models/
(ce dossier est ignoré par Git en raison de la taille des fichiers).
Les notebooks incluent :
- Les métriques globales : Accuracy, F1-score Macro, F1-score Weighted
- Les rapports de classification détaillés par classe
- Les matrices de confusion
- La sélection du meilleur modèle selon le F1-score Macro
Une fois les modèles entraînés, l’application Streamlit peut être lancée avec la commande suivante :
streamlit run app/streamlit_compare.pyL’interface permet :
- La saisie de textes libres
- La comparaison des prédictions des modèles
- L’affichage des probabilités associées
- Une politique de décision prudente
- Les splits des données sont réalisés de manière stratifiée
- Les graines aléatoires sont fixées afin d’assurer la reproductibilité
- Les hyperparamètres finaux sont documentés dans les notebooks
- Les performances peuvent varier légèrement selon le matériel et la configuration logicielle.
- Les résultats produits ne doivent jamais être interprétés comme un diagnostic médical
- Le projet vise uniquement l’analyse, la recherche et la démonstration académique
- Une attention particulière est portée à la gestion des biais et à la protection de la vie privée
Projet réalisé dans le cadre du module NLP / Intelligence Artificielle
ENSA Tétouan – Filière Big Data & Intelligence Artificielle