Base de données et analyse
Schéma relationnel normalisé avec NER, réseaux de cooccurrence et modélisation de l'engagement
Pipeline de mise à jour continue
Comment ça fonctionne
Le schéma PostgreSQL contient 4 tables de base (videos, comments, video_transcripts, transcription_speakers) et 2 tables de variantes traitées (comments_processed, transcription_speakers_processed) ajoutant la tokenisation au niveau de la phrase, les entités NER en colonnes JSONB et 40+ colonnes de prédiction ML. Les données sont ingérées via un pipeline SQLAlchemy avec validation de types, déduplication et vérification d'intégrité référentielle. Les index sont optimisés pour les requêtes temporelles et les agrégations par chaîne.
Un modèle CamemBERT NER fine-tuné extrait les personnes, organisations et lieux de chaque phrase des transcriptions et commentaires. Les entités sont stockées comme tableaux JSONB (ex. {"PER": ["Macron", "Le Pen"], "ORG": ["RN"]}) permettant des requêtes JSON path et recherche plein texte efficaces. Le pipeline NER traite environ 10 000 phrases par seconde sur GPU, complétant le corpus en moins de 5 heures.
Les réseaux de cooccurrence d'entités sont construits avec NetworkX et iGraph : les nœuds représentent les entités, les arêtes connectent les entités mentionnées dans la même phrase, et les poids reflètent la fréquence de cooccurrence. L'algorithme Leiden détecte des communautés d'entités reliées. Des modèles de régression OLS (via statsmodels) testent les hypothèses sur la relation entre caractéristiques du discours et engagement, en contrôlant les effets fixes de chaîne et les tendances temporelles.
Cliquez sur chaque carte pour voir les détails
L'étape finale intègre toutes les sorties en amont (métadonnées vidéo, arborescences de commentaires, transcriptions étiquetées par locuteur et 40+ colonnes de prédictions NLP) dans une base de données PostgreSQL normalisée à six tables. Le schéma est conçu pour la flexibilité analytique : une seule requête SQL peut joindre les métadonnées d'une vidéo (vues, likes, date, orientation politique) avec les annotations NLP de sa transcription et les entités NER mentionnées par chaque locuteur. La base contient actuellement plus de 15 millions de lignes au niveau de la phrase et alimente les tableaux de bord interactifs de ce site.
Au-delà du stockage, cette étape réalise deux enrichissements analytiques majeurs. La reconnaissance d'entités nommées (NER) utilise un modèle CamemBERT NER fine-tuné combiné avec le pipeline de spaCy pour extraire personnes (PER), organisations (ORG) et lieux (LOC) au niveau de la phrase. Les entités sont stockées comme tableaux JSONB. L'analyse de réseaux de cooccurrence cartographie ensuite les relations entre entités fréquemment mentionnées avec NetworkX et iGraph, la détection de communautés via l'algorithme de Leiden révélant des clusters de figures et institutions co-mentionnées. Enfin, des modèles de régression OLS examinent comment les caractéristiques du discours prédisent les métriques d'engagement de l'audience.
Exemple concret
De l'extraction d'entités à la modélisation de l'engagement
Le traitement NER sur les 800 transcriptions d'une seule chaîne d'extrême droite extrait 12 400 mentions uniques de personnes, 3 200 mentions d'organisations et 2 100 mentions de lieux. Le réseau de cooccurrence de cette chaîne révèle un cluster dense autour de figures politiques fréquemment discutées ensemble (ex. Emmanuel Macron, Marine Le Pen, Éric Zemmour), connectées par un poids d'arête proportionnel à leur fréquence d'apparition dans la même phrase. La détection de communautés Leiden identifie 7 clusters thématiques. Une régression OLS montre ensuite que les vidéos avec des mentions « immigration + sécurité » au-dessus de la médiane reçoivent 23% plus de vues que la moyenne de la chaîne (p < 0.01), tandis que les mentions de « rhétorique scientifique » n'ont pas d'effet significatif sur l'engagement.
Outils utilisés
Schéma de la base de données
Six tables dans un schéma relationnel normalisé, des métadonnées brutes aux annotations NLP au niveau de la phrase.
| # | Table | Description | Échelle |
|---|---|---|---|
| 1 | videos | Une ligne par vidéo : ID, métadonnées de la chaîne, vues, likes, commentaires, tags, durée, date de mise en ligne, orientation politique, pays, genre. | 23,658 rows |
| 2 | comments | Tous les commentaires YouTube avec infos auteur, likes, horodatages, structure de réponses imbriquées et colonne d'analyse JSONB. | 7.6M+ rows |
| 3 | video_transcripts | Transcriptions diarisées complètes avec étiquettes de locuteurs et versions nettoyées du texte. | 20,999 rows |
| 4 | transcription_speakers | Segments individuels de locuteurs issus de la diarisation, ordonnés par position dans chaque vidéo. | 601,348 rows |
| 5 | comments_processed | Commentaires tokenisés au niveau de la phrase avec entités NER (PER, ORG, LOC) et colonnes de prédiction ML. | 9.8M+ rows |
| 6 | transcription_speakers_processed | Segments de locuteurs au niveau de la phrase avec extraction NER et suite complète d'annotations. | 5.3M+ rows |
Observatoire en continu
La base est mise à jour en continu : scan des chaînes, transcription et annotation des vidéos, extraction de commentaires, mise à jour des métadonnées (vues, likes, abonnés). Chaque scan produit un historique longitudinal exploitable via l'API.