Skip to content

Repository files navigation

Thumalien - Détection de Fake News sur Bluesky

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.


Architecture du Pipeline

┌─────────────┐     ┌──────────────┐     ┌─────────────────┐
│  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)  │
     └─────────────────────────┘     └──────────────┘

Installation

Prérequis

  • Python 3.10+
  • pip
  • Docker & Docker Compose (optionnel)
  • Compte Bluesky (optionnel, mode démo disponible)

Installation locale (recommandé pour commencer)

# 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.py

Le dashboard est accessible sur http://localhost:8501

Installation avec Docker

# 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

Utilisation

Dashboard Streamlit

  1. Ouvrez http://localhost:8501 dans votre navigateur
  2. 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
  3. 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
  4. Consultez l'empreinte carbone de votre session dans l'onglet dédié

Mode démo

Sans identifiants Bluesky, le système utilise automatiquement des données de démonstration pour permettre de tester le pipeline complet.

Entraîner les modèles

# 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_*.log

Pour le fine-tuning BERT, utilisez le notebook notebooks/03_bert_finetuning.ipynb.


Structure du Projet

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

Modules

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

KPIs

Performance du modèle (baseline — valeurs mesurées, 06/06/2026)

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

Performance opérationnelle

  • 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.


Rapport Énergétique (Green IT)

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.


Datasets

Intégrés

  • Dataset synthétique : 30 exemples annotés (15 fake, 15 real) pour les tests rapides

Recommandés (à télécharger)

# 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

Tests

# Lancer tous les tests
pytest tests/ -v

# Avec couverture
pytest tests/ -v --cov=src --cov-report=html

Pistes d'Évolution

  1. Scalabilité : Migration vers Apache Spark/Kafka pour le traitement temps réel à grande échelle
  2. API REST : Exposition du pipeline via FastAPI pour intégration dans d'autres applications
  3. Application mobile : Interface React Native pour la vérification de posts à la volée
  4. Multi-plateforme : Extension à Twitter/X, Mastodon, et autres réseaux sociaux
  5. Fine-tuning avancé : Entraînement sur des datasets français plus larges
  6. Fact-checking automatique : Croisement avec des bases de fact-checking (ClaimBuster, Google Fact Check)
  7. Détection de bots : Analyse du comportement des comptes en complément du contenu
  8. Dashboard amélioré : Alertes en temps réel, historique des analyses, comparaisons temporelles

Stack Technique

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages