--- language: fr license: mit tags: - text-classification - ai-detection - political-science - french - stylometry - camembert - xgboost metrics: - accuracy - f1 - precision - recall - roc_auc --- # 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 : 1. **Module Stylométrique** : 30 caractéristiques linguistiques structurelles et grammaticales invariantes (longueur des phrases, richesse lexicale, temps de verbes, etc.). 2. **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). 3. **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 ```bash 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 : ```python 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.