Spaces:
Sleeping
Sleeping
| # 🔬 SysCRED - Documentation Complète | |
| ## Système Neuro-Symbolique de Vérification de Crédibilité | |
| > **Version:** 2.0 | |
| > **Auteur:** Dominique S. Loyer | |
| > **Citation Key:** `loyerModelingHybridSystem2025` | |
| > **DOI:** [10.5281/zenodo.17943226](https://doi.org/10.5281/zenodo.17943226) | |
| > **Dernière mise à jour:** Janvier 2026 | |
| --- | |
| ## 📋 Table des Matières | |
| 1. [Vue d'ensemble](#vue-densemble) | |
| 2. [Architecture du système](#architecture-du-système) | |
| 3. [Modules et fichiers](#modules-et-fichiers) | |
| 4. [Installation et configuration](#installation-et-configuration) | |
| 5. [Commandes et utilisation](#commandes-et-utilisation) | |
| 6. [Choix de conception](#choix-de-conception) | |
| 7. [Améliorations réalisées](#améliorations-réalisées) | |
| 8. [Améliorations futures](#améliorations-futures) | |
| 9. [API Reference](#api-reference) | |
| 10. [Ontologie OWL](#ontologie-owl) | |
| --- | |
| ## Vue d'ensemble | |
| ### Qu'est-ce que SysCRED? | |
| SysCRED (System for CREdibility Detection) est un **système hybride neuro-symbolique** conçu pour évaluer automatiquement la crédibilité des informations en ligne. Il combine: | |
| - **Approche symbolique** (règles explicites, transparentes et explicables) | |
| - **Approche neuronale** (modèles NLP pour sentiment, biais, entités) | |
| - **Ontologie OWL** (traçabilité et raisonnement sémantique) | |
| ### Philosophie du projet | |
| Le système est conçu comme **prototype de recherche doctorale** avec ces principes: | |
| 1. **Explicabilité (xAI)**: Chaque décision peut être tracée et justifiée | |
| 2. **Hybridité**: Combine le meilleur des règles et du ML | |
| 3. **Reproductibilité**: Code open-source, documentation complète | |
| 4. **Modularité**: Chaque composant est indépendant et testable | |
| --- | |
| ## Architecture du système | |
| ``` | |
| ┌─────────────────────────────────────────────────────────────────┐ | |
| │ SysCRED v2.0 │ | |
| ├─────────────────────────────────────────────────────────────────┤ | |
| │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ | |
| │ │ INPUT │ │ APIs │ │ OUTPUT │ │ | |
| │ │ URL / Texte │──│ Externes │──│ Rapport │ │ | |
| │ └───────────────┘ └───────────────┘ └───────────────┘ │ | |
| │ │ │ ▲ │ | |
| │ ▼ ▼ │ │ | |
| │ ┌─────────────────────────────────────────────────────┐ │ | |
| │ │ VERIFICATION SYSTEM │ │ | |
| │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ | |
| │ │ │ RULE-BASED │ │ NLP ANALYSIS │ │ │ | |
| │ │ │ • Réputation │ │ • Sentiment │ │ │ | |
| │ │ │ • Âge domaine │ │ • NER │ │ │ | |
| │ │ │ • Fact-check │ │ • Biais │ │ │ | |
| │ │ │ • Marqueurs │ │ • Cohérence │ │ │ | |
| │ │ └─────────────────┘ └─────────────────┘ │ │ | |
| │ │ ↓ │ │ | |
| │ │ ┌─────────────────────────┐ │ │ | |
| │ │ │ SCORE CALCULATION │ │ │ | |
| │ │ │ (pondération hybride) │ │ │ | |
| │ │ └─────────────────────────┘ │ │ | |
| │ └─────────────────────────────────────────────────────┘ │ | |
| │ │ │ | |
| │ ▼ │ | |
| │ ┌─────────────────────────────────────────────────────┐ │ | |
| │ │ ONTOLOGY MANAGER (OWL/RDF) │ │ | |
| │ │ Traçabilité et raisonnement │ │ | |
| │ └─────────────────────────────────────────────────────┘ │ | |
| └─────────────────────────────────────────────────────────────────┘ | |
| ``` | |
| ### Flux de traitement | |
| 1. **Entrée** → URL ou texte brut | |
| 2. **Récupération** → Contenu web (si URL) | |
| 3. **Prétraitement** → Nettoyage du texte | |
| 4. **Données externes** → WHOIS, fact-check APIs | |
| 5. **Analyse règles** → Marqueurs linguistiques, réputation | |
| 6. **Analyse NLP** → Sentiment, biais, entités | |
| 7. **Calcul score** → Pondération hybride (0-1) | |
| 8. **Génération rapport** → JSON structuré | |
| 9. **Sauvegarde ontologie** → Triplets RDF | |
| --- | |
| ## Modules et fichiers | |
| ### Structure du projet | |
| ``` | |
| syscred/ | |
| ├── __init__.py # Package init | |
| ├── config.py # Configuration centralisée | |
| ├── verification_system.py # Système principal | |
| ├── api_clients.py # Clients APIs externes | |
| ├── ontology_manager.py # Gestion OWL/RDF | |
| ├── seo_analyzer.py # Analyse SEO/PageRank | |
| ├── backend_app.py # API Flask REST | |
| ├── eval_metrics.py # Métriques d'évaluation | |
| ├── ir_engine.py # Moteur de recherche | |
| ├── requirements.txt # Dépendances Python | |
| ├── setup.py # Installation package | |
| ├── syscred_kaggle.ipynb # Notebook Kaggle | |
| ├── syscred_colab.ipynb # Notebook Colab (avec Drive) | |
| └── kaggle_to_gdrive_backup.ipynb # Backup notebooks | |
| ``` | |
| ### Description des modules | |
| #### `config.py` - Configuration centralisée | |
| **But:** Centraliser tous les paramètres du système dans un seul fichier. | |
| **Classes:** | |
| - `Config` - Configuration de base | |
| - `DevelopmentConfig` - Pour développement local | |
| - `ProductionConfig` - Pour production | |
| - `TestingConfig` - Pour tests (ML désactivé) | |
| **Paramètres clés:** | |
| | Paramètre | Description | Valeur par défaut | | |
| |-----------|-------------|-------------------| | |
| | `HOST` | Adresse du serveur | `0.0.0.0` | | |
| | `PORT` | Port du serveur | `5000` | | |
| | `DEBUG` | Mode debug | `true` | | |
| | `LOAD_ML_MODELS` | Charger les modèles ML | `true` | | |
| | `WEB_FETCH_TIMEOUT` | Timeout HTTP (sec) | `10` | | |
| **Pondérations des scores:** | |
| ```python | |
| SCORE_WEIGHTS = { | |
| 'source_reputation': 0.25, # Réputation de la source | |
| 'domain_age': 0.10, # Âge du domaine | |
| 'sentiment_neutrality': 0.15, # Neutralité du ton | |
| 'entity_presence': 0.15, # Présence d'entités vérifiables | |
| 'coherence': 0.15, # Cohérence textuelle | |
| 'fact_check': 0.20 # Résultats fact-check | |
| } | |
| ``` | |
| **Variables d'environnement:** | |
| ```bash | |
| export SYSCRED_ENV=production # Environnement (dev/prod/testing) | |
| export SYSCRED_PORT=8080 # Port personnalisé | |
| export SYSCRED_GOOGLE_API_KEY=xxx # Clé Google Fact Check | |
| export SYSCRED_LOAD_ML=false # Désactiver ML | |
| ``` | |
| --- | |
| #### `verification_system.py` - Système principal | |
| **But:** Pipeline principal de vérification de crédibilité. | |
| **Classe principale:** `CredibilityVerificationSystem` | |
| **Méthodes principales:** | |
| | Méthode | Description | | |
| |---------|-------------| | |
| | `__init__()` | Initialise le système, charge les modèles | | |
| | `verify_information(input)` | Pipeline principal de vérification | | |
| | `rule_based_analysis(text, data)` | Analyse symbolique | | |
| | `nlp_analysis(text)` | Analyse NLP (ML) | | |
| | `calculate_overall_score()` | Calcule le score final | | |
| | `generate_report()` | Génère le rapport JSON | | |
| **Modèles ML utilisés:** | |
| | Modèle | Usage | | |
| |--------|-------| | |
| | `distilbert-base-uncased-finetuned-sst-2-english` | Sentiment | | |
| | `dbmdz/bert-large-cased-finetuned-conll03-english` | NER | | |
| | `bert-base-uncased` | Détection de biais (placeholder) | | |
| | `LIME` | Explication des prédictions | | |
| --- | |
| #### `api_clients.py` - Clients APIs externes | |
| **But:** Abstraire toutes les interactions avec les APIs externes. | |
| **Classe principale:** `ExternalAPIClients` | |
| **APIs intégrées:** | |
| | API | Méthode | Description | | |
| |-----|---------|-------------| | |
| | Web Content | `fetch_web_content()` | Récupère et parse le HTML | | |
| | WHOIS | `whois_lookup()` | Âge et registrar du domaine | | |
| | Google Fact Check | `google_fact_check()` | Vérification des faits | | |
| | Source Reputation | `get_source_reputation()` | Base de données interne | | |
| | CommonCrawl | `estimate_backlinks()` | Estimation backlinks | | |
| **Data classes:** | |
| - `WebContent` - Contenu web parsé | |
| - `DomainInfo` - Informations WHOIS | |
| - `FactCheckResult` - Résultat fact-check | |
| - `ExternalData` - Données agrégées | |
| --- | |
| #### `ontology_manager.py` - Gestion OWL/RDF | |
| **But:** Traçabilité sémantique avec ontologie OWL. | |
| **Fonctionnalités:** | |
| - Chargement d'ontologie de base (.ttl) | |
| - Ajout de triplets RDF pour chaque évaluation | |
| - Sauvegarde des données accumulées | |
| - Requêtes SPARQL | |
| **Ontologie utilisée:** | |
| - Format: Turtle (.ttl) | |
| - Namespace: `http://syscred.uqam.ca/ontology#` | |
| - Concepts: `Evaluation`, `Source`, `CredibilityScore`, `Evidence` | |
| --- | |
| #### `backend_app.py` - API Flask | |
| **But:** Exposer SysCRED via API REST. | |
| **Endpoints:** | |
| | Endpoint | Méthode | Description | | |
| |----------|---------|-------------| | |
| | `/api/verify` | POST | Vérification principale | | |
| | `/api/seo` | POST | Analyse SEO uniquement | | |
| | `/api/ontology/stats` | GET | Statistiques ontologie | | |
| | `/api/health` | GET | Vérification santé | | |
| | `/api/config` | GET | Configuration actuelle | | |
| **Exemple requête:** | |
| ```bash | |
| curl -X POST http://localhost:5000/api/verify \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"input_data": "https://example.com/article"}' | |
| ``` | |
| --- | |
| ## Installation et configuration | |
| ### Prérequis | |
| - Python 3.8+ | |
| - pip | |
| - Git | |
| ### Installation locale | |
| ```bash | |
| # Cloner le repository | |
| git clone https://github.com/DominiqueLoyer/syscred.git | |
| cd syscred | |
| # Créer environnement virtuel | |
| python -m venv venv | |
| source venv/bin/activate # Linux/Mac | |
| # ou: venv\Scripts\activate # Windows | |
| # Installer les dépendances | |
| pip install -r requirements.txt | |
| # Installer le package en mode développement | |
| pip install -e . | |
| ``` | |
| ### Installation des dépendances | |
| ```bash | |
| # Dépendances principales | |
| pip install transformers torch numpy | |
| pip install flask flask-cors | |
| pip install rdflib owlrl | |
| pip install requests beautifulsoup4 | |
| # Dépendances optionnelles | |
| pip install python-whois # Pour WHOIS | |
| pip install lime # Pour explications ML | |
| ``` | |
| ### Fichier requirements.txt | |
| ``` | |
| transformers>=4.30.0 | |
| torch>=2.0.0 | |
| numpy>=1.24.0 | |
| flask>=2.3.0 | |
| flask-cors>=4.0.0 | |
| rdflib>=6.3.0 | |
| owlrl>=6.0.0 | |
| requests>=2.31.0 | |
| beautifulsoup4>=4.12.0 | |
| python-whois>=0.8.0 | |
| lime>=0.2.0 | |
| ``` | |
| --- | |
| ## Commandes et utilisation | |
| ### Démarrer l'API Flask | |
| ```bash | |
| # Mode développement | |
| cd /path/to/syscred | |
| python backend_app.py | |
| # Avec variables d'environnement | |
| SYSCRED_PORT=8080 SYSCRED_DEBUG=true python backend_app.py | |
| # Mode production | |
| SYSCRED_ENV=production python backend_app.py | |
| ``` | |
| ### Tester le système en ligne de commande | |
| ```bash | |
| # Test direct du module | |
| python -m syscred.verification_system | |
| # Test avec entrée personnalisée | |
| python -c " | |
| from syscred.verification_system import CredibilityVerificationSystem | |
| sys = CredibilityVerificationSystem(load_ml_models=False) | |
| result = sys.verify_information('https://www.lemonde.fr') | |
| print(result['scoreCredibilite']) | |
| " | |
| ``` | |
| ### Utilisation dans Kaggle/Colab | |
| Ouvrez le notebook `syscred_kaggle.ipynb` ou `syscred_colab.ipynb`: | |
| ```python | |
| # Cellule 1: Installation | |
| !pip install transformers torch rdflib requests beautifulsoup4 | |
| # Cellule 2: Importer et tester | |
| from syscred import CredibilityVerificationSystem | |
| sys = CredibilityVerificationSystem() | |
| result = sys.verify_information("https://example.com") | |
| ``` | |
| ### API REST - Exemples | |
| ```bash | |
| # Vérifier une URL | |
| curl -X POST http://localhost:5000/api/verify \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"input_data": "https://www.bbc.com/article"}' | |
| # Vérifier du texte | |
| curl -X POST http://localhost:5000/api/verify \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"input_data": "This is a verified news report."}' | |
| # Vérifier la santé | |
| curl http://localhost:5000/api/health | |
| # Obtenir la configuration | |
| curl http://localhost:5000/api/config | |
| ``` | |
| --- | |
| ## Choix de conception | |
| ### Pourquoi approche hybride neuro-symbolique? | |
| | Approche | Forces | Faiblesses | | |
| |----------|--------|------------| | |
| | **Règles** | Transparent, explicable, rapide | Rigide, couverture limitée | | |
| | **ML/NLP** | Flexible, patterns complexes | Boîte noire, besoin données | | |
| | **Hybride** | Combine les deux! | Plus complexe | | |
| **Décision:** Utiliser les règles pour les cas clairs (réputation connue, marqueurs linguistiques) et le ML pour les nuances (sentiment, biais). | |
| ### Pourquoi ces pondérations? | |
| Les poids par défaut reflètent l'importance relative de chaque facteur selon la littérature: | |
| ```python | |
| SCORE_WEIGHTS = { | |
| 'source_reputation': 0.25, # Le plus important: source connue | |
| 'fact_check': 0.20, # Vérification externe | |
| 'sentiment_neutrality': 0.15, | |
| 'entity_presence': 0.15, | |
| 'coherence': 0.15, | |
| 'domain_age': 0.10 # Moins important seul | |
| } | |
| ``` | |
| ### Pourquoi LIME pour l'explicabilité? | |
| - **Local Interpretable Model-agnostic Explanations** | |
| - Fonctionne avec n'importe quel modèle | |
| - Génère des explications compréhensibles | |
| - Standard académique reconnu | |
| ### Pourquoi OWL/RDF? | |
| - **Traçabilité**: Chaque évaluation est enregistrée | |
| - **Raisonnement**: Inférences automatiques possibles (OWL-RL) | |
| - **Interopérabilité**: Standard W3C, compatible SPARQL | |
| - **Publication**: Données linked data | |
| --- | |
| ## Améliorations réalisées | |
| ### Version 2.0 (Janvier 2026) | |
| 1. **Configuration centralisée** (`config.py`) | |
| - Variables d'environnement | |
| - Profils dev/prod/testing | |
| - Pondérations configurables | |
| 2. **API Clients refactorisés** (`api_clients.py`) | |
| - Data classes typées | |
| - Gestion d'erreurs robuste | |
| - WHOIS lookup réel | |
| 3. **Notebooks Kaggle/Colab** | |
| - `syscred_kaggle.ipynb` - Version Kaggle | |
| - `syscred_colab.ipynb` - Version avec Google Drive | |
| - Badges "Open in" pour facilité | |
| 4. **Fix du bug `NameError: result`** | |
| - Variable locale dans section RDF | |
| - Fallback si aucun résultat | |
| 5. **README professionnel** | |
| - Badge DOI Zenodo | |
| - Quick start | |
| - API endpoints documentés | |
| 6. **Notebook backup Kaggle→Drive** | |
| - `kaggle_to_gdrive_backup.ipynb` | |
| - Sauvegarde automatique | |
| --- | |
| ## Améliorations futures | |
| ### Court terme (Prochains mois) | |
| - [ ] **Google Fact Check API réel** - Intégrer la clé API | |
| - [ ] **CommonCrawl backlinks** - Analyse réelle des backlinks | |
| - [ ] **Plus de sources** - Étendre `SOURCE_REPUTATIONS` | |
| - [ ] **Tests unitaires** - Couverture >80% | |
| ### Moyen terme (6-12 mois) | |
| - [ ] **Modèle de biais fine-tuné** - Entraîner sur donées réelles | |
| - [ ] **Cache Redis** - Mise en cache des résultats | |
| - [ ] **Interface web moderne** - React/Vue frontend | |
| - [ ] **Docker** - Conteneurisation | |
| ### Long terme (Thèse) | |
| - [ ] **Évaluation formelle** - Dataset de benchmark | |
| - [ ] **Multi-langue** - Support français natif | |
| - [ ] **Graphe de connaissances** - Neo4j intégration | |
| - [ ] **Apprentissage continu** - Feedback loop | |
| --- | |
| ## API Reference | |
| ### Classe `CredibilityVerificationSystem` | |
| ```python | |
| class CredibilityVerificationSystem: | |
| def __init__( | |
| self, | |
| google_api_key: Optional[str] = None, | |
| ontology_base_path: Optional[str] = None, | |
| ontology_data_path: Optional[str] = None, | |
| load_ml_models: bool = True | |
| ): | |
| """ | |
| Initialize the credibility verification system. | |
| Args: | |
| google_api_key: API key for Google Fact Check | |
| ontology_base_path: Path to base ontology TTL | |
| ontology_data_path: Path to store data | |
| load_ml_models: Whether to load ML models | |
| """ | |
| def verify_information(self, input_data: str) -> Dict[str, Any]: | |
| """ | |
| Main pipeline to verify credibility. | |
| Args: | |
| input_data: URL or text to verify | |
| Returns: | |
| Complete evaluation report with: | |
| - idRapport: Unique report ID | |
| - scoreCredibilite: 0.0-1.0 | |
| - resumeAnalyse: French summary | |
| - detailsScore: Score breakdown | |
| - reglesAppliquees: Rule-based results | |
| - analyseNLP: NLP analysis results | |
| """ | |
| ``` | |
| ### Classe `Config` | |
| ```python | |
| class Config: | |
| # Chemins | |
| BASE_DIR: Path | |
| ONTOLOGY_BASE_PATH: Path | |
| ONTOLOGY_DATA_PATH: Path | |
| # Serveur | |
| HOST: str = "0.0.0.0" | |
| PORT: int = 5000 | |
| DEBUG: bool = True | |
| # API Keys | |
| GOOGLE_FACT_CHECK_API_KEY: Optional[str] | |
| # Modèles ML | |
| LOAD_ML_MODELS: bool = True | |
| SENTIMENT_MODEL: str | |
| NER_MODEL: str | |
| # Pondérations | |
| SCORE_WEIGHTS: Dict[str, float] | |
| CREDIBILITY_THRESHOLDS: Dict[str, float] | |
| SOURCE_REPUTATIONS: Dict[str, str] | |
| @classmethod | |
| def load_external_reputations(cls, filepath: str) -> None: | |
| """Charger réputations depuis fichier JSON.""" | |
| @classmethod | |
| def update_weights(cls, new_weights: Dict[str, float]) -> None: | |
| """Mettre à jour les pondérations.""" | |
| @classmethod | |
| def to_dict(cls) -> Dict: | |
| """Exporter configuration en dictionnaire.""" | |
| ``` | |
| --- | |
| ## Ontologie OWL | |
| ### Structure conceptuelle | |
| ``` | |
| syscred:Evaluation | |
| └── syscred:evaluates → syscred:Information | |
| └── syscred:hasScore → xsd:float | |
| └── syscred:hasEvidence → syscred:Evidence | |
| └── syscred:generatedAt → xsd:dateTime | |
| syscred:Information | |
| └── syscred:hasSource → syscred:Source | |
| └── syscred:hasContent → xsd:string | |
| syscred:Source | |
| └── syscred:hasDomain → xsd:string | |
| └── syscred:hasReputation → syscred:ReputationLevel | |
| └── syscred:hasDomainAge → xsd:integer | |
| syscred:Evidence | |
| └── syscred:type → xsd:string (Linguistic, FactCheck, etc.) | |
| └── syscred:value → xsd:string | |
| └── syscred:impact → xsd:float | |
| ``` | |
| ### Exemple de triplets générés | |
| ```turtle | |
| @prefix syscred: <http://syscred.uqam.ca/ontology#> . | |
| @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | |
| syscred:eval_1705890000 a syscred:Evaluation ; | |
| syscred:evaluates syscred:info_lemonde_article ; | |
| syscred:hasScore "0.85"^^xsd:float ; | |
| syscred:generatedAt "2026-01-21T13:40:00"^^xsd:dateTime ; | |
| syscred:hasEvidence syscred:evidence_1 . | |
| syscred:evidence_1 a syscred:Evidence ; | |
| syscred:type "SourceReputation" ; | |
| syscred:value "High" ; | |
| syscred:impact "0.25"^^xsd:float . | |
| ``` | |
| --- | |
| ## Scripts utilitaires | |
| ### Script de backup vers Obsidian/Notion | |
| Créez ce script dans `/Users/bk280625/documents041025/MonCode/`: | |
| ```bash | |
| #!/bin/bash | |
| # save_syscred_docs.sh | |
| # Usage: ./save_syscred_docs.sh | |
| DOC_SOURCE="/Users/bk280625/documents041025/MonCode/syscred/SysCRED_Documentation.md" | |
| OBSIDIAN_VAULT="/Users/bk280625/Documents/Obsidian/PhD" | |
| DATE=$(date +%Y%m%d) | |
| # Copier vers Obsidian | |
| cp "$DOC_SOURCE" "$OBSIDIAN_VAULT/SysCRED_Documentation_$DATE.md" | |
| echo "✅ Copié vers Obsidian: $OBSIDIAN_VAULT" | |
| # Ouvrir dans Obsidian (Mac) | |
| open "obsidian://open?vault=PhD&file=SysCRED_Documentation_$DATE" | |
| # Pour Notion: utiliser l'API ou copier manuellement | |
| # Notion n'a pas d'import direct de fichiers locaux | |
| echo "📋 Pour Notion: Copiez le contenu de $DOC_SOURCE" | |
| echo " Ou utilisez: https://notion.so/import" | |
| ``` | |
| --- | |
| ## Références | |
| - Loyer, D. S. (2025). *Modeling and Hybrid System for Verification of Sources Credibility*. UQAM. | |
| - Loyer, D. S. (2025). *Ontology of a Verification System for Liability of the Information*. DIC-9335. | |
| --- | |
| *Documentation générée le 21 janvier 2026* | |
| *SysCRED v2.0 - Dominique S. Loyer - UQAM* | |