Projet M1 Big Data & IA — SUP DE VINCI Client fictif : Thumalien
Plateforme de détection de fake news en temps réel sur le réseau social Bluesky, utilisant des techniques de NLP et de Machine Learning pour analyser la crédibilité des posts et leur tonalité émotionnelle.
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Bluesky │────▶│ Collecte │────▶│ Stockage │
│ API │ │ (AT Proto) │ │ (SQLite/JSON) │
└─────────────┘ └──────────────┘ └────────┬────────┘
│
┌──────────────┐ ▼
│ Nettoyage │◀───── Textes bruts
│ (spaCy, │
│ regex) │
└──────┬───────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌────────────┐ ┌───────────┐ ┌──────────┐
│ Classif. │ │ Émotions │ │ Embeddings│
│ Fake News │ │ (VADER/ │ │ (BERT/ │
│ (TF-IDF/ │ │ HF) │ │ CamBERT)│
│ BERT) │ │ │ │ │
└─────┬──────┘ └─────┬─────┘ └──────────┘
│ │
▼ ▼
┌─────────────────────────┐
│ Score de Crédibilité │
│ (0 - 100) │
└────────────┬────────────┘
│
┌────────────▼────────────┐ ┌──────────────┐
│ Dashboard Streamlit │◀────│ CodeCarbon │
│ (Visualisation) │ │ (Green IT) │
└─────────────────────────┘ └──────────────┘
- Python 3.10+
- pip
- Docker & Docker Compose (optionnel)
- Compte Bluesky (optionnel, mode démo disponible)
# 1. Cloner le dépôt
git clone https://github.com/MathisCastell/ProjetM1DataV2.git
cd ProjetM1DataV2
# 2. Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 3. Installer les dépendances
pip install -r requirements.txt
# 4. Télécharger les modèles spaCy
python -m spacy download fr_core_news_sm
python -m spacy download en_core_web_sm
# 5. Configurer les variables d'environnement
cp .env.example .env
# Éditer .env avec vos identifiants Bluesky (optionnel)
# 6. Entraîner le modèle baseline
python -m src.models.train --model baseline
# 7. Lancer le dashboard
streamlit run dashboard/app.pyLe dashboard est accessible sur http://localhost:8501
# 1. Copier et configurer le fichier .env
cp .env.example .env
# 2. Construire et lancer les services
docker-compose up --build
# Le dashboard est accessible sur http://localhost:8501- Ouvrez http://localhost:8501 dans votre navigateur
- Choisissez le mode d'analyse :
- Recherche Bluesky : entrez un mot-clé pour analyser des posts en temps réel
- Texte libre : collez un texte à vérifier directement
- Consultez les résultats :
- Score de crédibilité (0-100) avec jauge colorée
- Label fake/réel avec pourcentage de confiance
- Émotions détectées (colère, peur, joie, etc.)
- Statistiques globales et graphiques
- Consultez l'empreinte carbone de votre session dans l'onglet dédié
Sans identifiants Bluesky, le système utilise automatiquement des données de démonstration pour permettre de tester le pipeline complet.
# Modèle baseline (TF-IDF + Logistic Regression)
python -m src.models.train --model baseline
# Les métriques sont sauvegardées dans models/saved/baseline_metrics.json
# Les logs sont dans logs/training_*.logPour le fine-tuning BERT, utilisez le notebook notebooks/03_bert_finetuning.ipynb.
thumalien/
├── README.md # Ce fichier
├── docker-compose.yml # Orchestration Docker
├── Dockerfile # Image Python + Streamlit
├── requirements.txt # Dépendances Python
├── .env.example # Variables d'environnement (template)
│
├── config/
│ └── settings.py # Configuration centralisée
│
├── src/
│ ├── collection/
│ │ ├── bluesky_client.py # Client API Bluesky (AT Protocol)
│ │ └── data_storage.py # Stockage JSON + SQLite
│ ├── preprocessing/
│ │ ├── cleaner.py # Nettoyage texte (URLs, mentions, emojis)
│ │ ├── tokenizer.py # Tokenisation spaCy + lemmatisation
│ │ └── embeddings.py # Embeddings HuggingFace (CamemBERT/RoBERTa)
│ ├── models/
│ │ ├── fake_news_classifier.py # Classification fake/real
│ │ ├── emotion_analyzer.py # Analyse émotionnelle (VADER + HF)
│ │ ├── credibility_scorer.py # Score de crédibilité 0-100
│ │ └── train.py # Script d'entraînement CLI
│ ├── pipeline/
│ │ └── pipeline.py # Orchestration complète du pipeline
│ ├── monitoring/
│ │ └── energy_tracker.py # Suivi CodeCarbon (Green IT)
│ └── explainability/
│ └── explainer.py # Explications SHAP/LIME
│
├── dashboard/
│ ├── app.py # Application Streamlit principale
│ └── components/ # Composants visuels
│
├── tests/ # Tests unitaires (pytest)
├── notebooks/ # Notebooks d'exploration et fine-tuning
├── docs/ # Documentation technique
├── data/ # Données (raw, processed, datasets)
├── models/saved/ # Modèles entraînés
└── logs/ # Logs d'entraînement et d'énergie
| Module | Description |
|---|---|
collection |
Connexion à l'API Bluesky, collecte de posts par mots-clés, gestion pagination et rate limits |
preprocessing |
Nettoyage texte, tokenisation spaCy, détection de langue, génération d'embeddings |
models |
Classification fake news (TF-IDF/BERT), analyse émotionnelle (VADER/HF), scoring de crédibilité |
pipeline |
Orchestration complète : collecte → nettoyage → classification → émotion → score |
monitoring |
Suivi de la consommation énergétique via CodeCarbon, rapports Green IT |
explainability |
Explication des prédictions via SHAP/LIME, visualisation HTML des mots influents |
dashboard |
Interface utilisateur Streamlit avec jauges, graphiques et rapports |
Dataset synthétique bilingue FR/EN — 146 exemples (73 fake / 73 real), test set : 30 exemples.
Source : models/saved/baseline_metrics.json (TF-IDF + LogReg, split 80/20, random_state=42).
| Métrique | Valeur mesurée | Cible |
|---|---|---|
| Accuracy | 0.8667 | ≥ 0.85 ✅ |
| F1-score (weighted) | 0.8667 | ≥ 0.85 ✅ |
| Precision (weighted) | 0.8667 | ≥ 0.85 ✅ |
| Recall (weighted) | 0.8667 | ≥ 0.85 ✅ |
| TP | 13 | — |
| TN | 13 | — |
| FP | 2 | minimiser |
| FN | 2 | minimiser |
- Temps moyen par post : ~0.1-0.5s (baseline), ~1-3s (BERT)
- CO2 par requête baseline : ~1.4×10⁻⁵ g (estimation CodeCarbon, mode CPU constant)
- kWh par requête baseline : ~3.2×10⁻⁸ kWh (estimation CodeCarbon, mode CPU constant)
Les comparaisons baseline/BERT/GPT-4 sont des estimations / ordres de grandeur (BERT et GPT-4 non déployés localement). Voir
docs/energy_report_template.md.
Le projet intègre CodeCarbon pour mesurer l'impact environnemental de chaque exécution du pipeline. Les métriques suivies incluent :
- Émissions CO2 en grammes
- Énergie consommée en kWh
- Durée de chaque tâche
Les rapports sont générés automatiquement dans logs/ au format JSON et Markdown.
Le modèle baseline (TF-IDF + LogReg) est 100x moins énergivore qu'un modèle BERT, ce qui en fait un choix privilégié pour les démonstrations.
- Dataset synthétique : 30 exemples annotés (15 fake, 15 real) pour les tests rapides
- LIAR Dataset : Télécharger → Extraire dans
data/datasets/ - FakeNewsNet : GitHub
# Télécharger automatiquement le LIAR dataset
cd data/datasets
wget https://www.cs.ucsb.edu/~william/data/liar_dataset.zip
unzip liar_dataset.zip# Lancer tous les tests
pytest tests/ -v
# Avec couverture
pytest tests/ -v --cov=src --cov-report=html- Scalabilité : Migration vers Apache Spark/Kafka pour le traitement temps réel à grande échelle
- API REST : Exposition du pipeline via FastAPI pour intégration dans d'autres applications
- Application mobile : Interface React Native pour la vérification de posts à la volée
- Multi-plateforme : Extension à Twitter/X, Mastodon, et autres réseaux sociaux
- Fine-tuning avancé : Entraînement sur des datasets français plus larges
- Fact-checking automatique : Croisement avec des bases de fact-checking (ClaimBuster, Google Fact Check)
- Détection de bots : Analyse du comportement des comptes en complément du contenu
- Dashboard amélioré : Alertes en temps réel, historique des analyses, comparaisons temporelles
| Composant | Technologie |
|---|---|
| Langage | Python 3.10+ |
| Collecte | atproto (AT Protocol SDK) |
| NLP | spaCy, NLTK, HuggingFace Transformers |
| Classification | scikit-learn (TF-IDF + LogReg), RoBERTa/CamemBERT |
| Émotions | VADER, emotion-english-distilroberta-base |
| Dashboard | Streamlit, Plotly |
| Base de données | SQLite (défaut), PostgreSQL (optionnel) |
| Monitoring | CodeCarbon |
| Containerisation | Docker, Docker Compose |
| Tests | pytest |
Projet réalisé dans le cadre du M1 Big Data & IA — SUP DE VINCI