Détecteur de Textes Parlementaires Générés par IA (Ensemble SOTA)
Ce dépôt contient le modèle State-of-the-Art (SOTA) développé pour détecter si un discours politique ou une intervention parlementaire en français a été rédigé avec l'assistance d'une IA générative (ChatGPT, Claude, Qwen, Gemma, etc.).
Modèle Actuel : Hybride v2 (Stylométrie + CamemBERT + XGBoost)
L'architecture v2 combine :
- Module Stylométrique : 30 caractéristiques linguistiques structurelles et grammaticales invariantes (longueur des phrases, richesse lexicale, temps de verbes, etc.).
- Module Neural : Représentation sémantique dense de 768 dimensions extraite du modèle
almanach/camembert-base(gelé, aucun fine-tuning pour préserver la généralisation). - Méta-Classifieur : XGBoost entraîné sur le vecteur concaténé de 798 dimensions.
Performances v2 (Validation Croisée 5-Fold OOF)
- Accuracy : 1.0000
- Precision : 1.0000
- Recall : 1.0000
- F1-Score : 1.0000
- ROC-AUC : 1.0000
🚀 Comment charger et utiliser le modèle en Python
Le modèle est sauvegardé au format binaire compressé avec joblib. Étant donné que le chargement du fichier pickle dépend de la classe personnalisée du détecteur, le script models_v2.py (ou models.py) doit être présent dans le même dossier ou dans votre chemin d'importation.
Installation des Dépendances
pip install pandas numpy scikit-learn xgboost joblib transformers torch
Exemple de code pour le Modèle v2
Voici comment charger le modèle v2, extraire les caractéristiques d'un texte et effectuer une prédiction :
import os
import joblib
import numpy as np
# Assurez-vous d'avoir téléchargé 'best_detector_v2.pkl' et 'models_v2.py' dans votre dossier de travail.
from models_v2 import SOTAHybridDetector
from build_features_v2 import extract_sota_features
from camembert_encoder import CamemBERTEncoder
# 1. Charger le pack de détection
print("Chargement du modèle...")
package = joblib.load("best_detector_v2.pkl")
detector = package["model"]
stylometric_cols = package["stylometric_cols"]
# 2. Initialiser l'encodeur CamemBERT pour la partie neurale
encoder = CamemBERTEncoder(device="cpu") # ou "cuda" si disponible
# 3. Exemple de texte à analyser
texte = "Monsieur le Président, mes chers collègues, nous devons voter cette loi pour le bien de la nation."
# 4. Extraction des features stylométriques
# On extrait les 30 features stylométriques
features_dict = extract_sota_features(texte)
X_sty = np.array([[features_dict[col] for col in stylometric_cols]])
# 5. Extraction des embeddings CamemBERT
X_emb = np.array([encoder.encode_single(texte)])
# 6. Prédiction
prob_ia = detector.predict_proba(X_sty, X_emb)[0, 1]
prediction = detector.predict(X_sty, X_emb)[0]
print(f"Probabilité d'écriture par IA : {prob_ia:.2%}")
print(f"Verdict : {'IA' if prediction == 1 else 'Humain'}")
📝 Licence
Ce projet est mis à disposition sous licence MIT.